Приветствую вас.
Как стало недавно известно, новая версия 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):
Код:
- Оптимизация кода;
- Изменены названия пользовательских функций и порядок их параметров:
ActorInPoint(Float:r, actorid, Float:x, Float:y, Float:z) на IsActorInCube(actorid, Float:x, Float:y, Float:z, Float:edge)
SetActorFaceToPos(Float:X,Float:Y, actorid) на SetActorFacingPos(actorid, Float:x, Float:y)
Функция OnActorMakeIt(actorid) заменена на макрос IsActorMoving(actorid)
UPD 2 (12.05.2015):
Код:
- Добавлена возможность бега для NPC
- В функцию MoveActorToPos добавлен параметр action для переключения режимов NPC (ходьба, бег)
UPD 3 (12.05.2015):
Код:
- Исправлена ошибка проверки параметра action в функции MoveActorToPos
Скачивание:
Rghost.ru
Pastebin.com
Спасибо за внимание!
Автор: NewGreen