Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Include Передвижение статичных NPC (Sa-mp 0.3.7.) - moveactors.inc

NewGreen

Ученик
Приветствую вас.

Как стало недавно известно, новая версия SA-MP 0.3.7. будет поддерживать создание статичных NPC, которые не будут занимать слоты на сервере, и в отличии от прежних более просты в управлении и создании.
Цель их добавления очевидна, их можно использовать как продавцов в магазине, продавцов хотдогами и т.п. но они не умеют ходить т.е. передвигаться (т.к. они статичные).
Я решил, что можно добавить возможность хотьбы для статичных NPC, и создал группу функций для этого.

Представляю вам moveactors.inc - данный include позволяет статичным NPC передвигаться (ходить) по заданным координатам.

Описание основных функций:

MoveActorToPos - основная функция для передвижения статичного NPC
PHP:
MoveActorToPos(actorid,X,Y,Z,action)
actorid - номер (ID) - передвигаемого NPC
X,Y,Z - координаты (точка) к которым NPC должен подойти
action - переключатель режима 0 - ходьба, 1 - бег.

IsActorMoving - функция (макрозамена) проверяющая достиг ли NPC конечной точки назначения
PHP:
IsActorMoving(actorid)
actorid - номер (ID) - передвигаемого NPC
Функция IsActorMoving возвращает:
true - если NPC находится в пути
false - если NPC не двигается


Описание вспомогательных функций:

IsActorInCube - проверка нахождения NPC в заданных координатах (в кубе) (не работает при движении NPC)
PHP:
IsActorInCube(actorid, x, y, z, edge)
actorid - номер (ID) - NPC
x,y,z - координаты (точка) места проверки
edge - радиус проверки (вернее говоря длина ребер куба)
Функция ActorInPoint возвращает:
true - если NPC находится в координатах
false - если NPC не находится в координатах

SetActorFacingPos - поворот NPC лицом к заданным координатам
PHP:
SetActorFacingPos(actorid, x,y)
actorid - номер (ID) - NPC
x,y - координаты (точка) к которым NPC должен повернутся

Подключение:

Включите include после a_samp
PHP:
#include <moveactors>
Использование:

Применение функции зависит целиком и полностью от вашей фантазии, но не стоит ждать чудес, приведу простой пример:
Команда - передвижение NPC к вашим координатам:
PHP:
new id = CreateActor(...);
...
if (strcmp("/moveactor", cmd, true,10))
	{
        if(IsActorMoving(id)) SendClientMessage(playerid,-1,"Ваш NPC все еще идет к вам"); // id - номер созданного ранее NPC	
		new Float:X, Float:Y, Float:Z;
		GetPlayerPos(playerid, X, Y, Z);
		MoveActorToPos(id,X, Y, Z, 0); // id - номер созданного ранее NPC	
		return 1;
	}
...
Достоинства и недостатки:

+ Гарантированное достижение NPC заданной точки

- Передвижение происходит по времени
- Передвижение только по прямым линиям*
- Небольшая неточность анимации при движении*

* - (возможно будет исправлено в след. версии)


UPD 1 (07.05.2015):
Код:
- [U]Оптимизация кода[/U];
- [U]Изменены названия пользовательских функций и порядок их параметров:[/U]
	[COLOR="#FF0000"]ActorInPoint[/COLOR]([COLOR="#FF0000"]Float:r[/COLOR], actorid, Float:x, Float:y, Float:z) на [COLOR="#008000"]IsActorInCube[/COLOR](actorid, Float:x, Float:y, Float:z, [COLOR="#FF0000"]Float:edge[/COLOR])
	[COLOR="#FF0000"]SetActorFaceToPos[/COLOR](Float:X,Float:Y, [COLOR="#FF0000"]actorid[/COLOR]) на [COLOR="#008000"]SetActorFacingPos[/COLOR]([COLOR="#FF0000"]actorid[/COLOR], Float:x, Float:y)
	Функция [COLOR="#FF0000"]OnActorMakeIt[/COLOR](actorid) заменена на макрос [COLOR="#008000"]IsActorMoving[/COLOR](actorid)
UPD 2 (12.05.2015):
Код:
- Добавлена возможность бега для [B]NPC[/B]
- В функцию [B]MoveActorToPos[/B] добавлен параметр [B]action[/B] для переключения режимов [B]NPC[/B] (ходьба, бег)
UPD 3 (12.05.2015):
Код:
- Исправлена ошибка проверки параметра [B]action[/B] в функции [B]MoveActorToPos[/B]
Скачивание:




Спасибо за внимание!
Автор: NewGreen
 
Последнее редактирование:
Сверху Снизу