NewGreen
Ученик
Приветствую вас.
Как стало недавно известно, новая версия SA-MP 0.3.7. будет поддерживать создание статичных NPC, которые не будут занимать слоты на сервере, и в отличии от прежних более просты в управлении и создании.
Цель их добавления очевидна, их можно использовать как продавцов в магазине, продавцов хотдогами и т.п. но они не умеют ходить т.е. передвигаться (т.к. они статичные).
Я решил, что можно добавить возможность хотьбы для статичных NPC, и создал группу функций для этого.
Представляю вам moveactors.inc - данный include позволяет статичным NPC передвигаться (ходить) по заданным координатам.
Описание основных функций:
MoveActorToPos - основная функция для передвижения статичного NPC
actorid - номер (ID) - передвигаемого NPC
X,Y,Z - координаты (точка) к которым NPC должен подойти
action - переключатель режима 0 - ходьба, 1 - бег.
IsActorMoving - функция (макрозамена) проверяющая достиг ли NPC конечной точки назначения
actorid - номер (ID) - передвигаемого NPC
Функция IsActorMoving возвращает:
true - если NPC находится в пути
false - если NPC не двигается
Описание вспомогательных функций:
IsActorInCube - проверка нахождения NPC в заданных координатах (в кубе) (не работает при движении NPC)
actorid - номер (ID) - NPC
x,y,z - координаты (точка) места проверки
edge - радиус проверки (вернее говоря длина ребер куба)
Функция ActorInPoint возвращает:
true - если NPC находится в координатах
false - если NPC не находится в координатах
SetActorFacingPos - поворот NPC лицом к заданным координатам
actorid - номер (ID) - NPC
x,y - координаты (точка) к которым NPC должен повернутся
Подключение:
Включите include после a_samp
Использование:
Применение функции зависит целиком и полностью от вашей фантазии, но не стоит ждать чудес, приведу простой пример:
Команда - передвижение NPC к вашим координатам:
Достоинства и недостатки:
+ Гарантированное достижение NPC заданной точки
- Передвижение происходит по времени
- Передвижение только по прямым линиям*
- Небольшая неточность анимации при движении*
* - (возможно будет исправлено в след. версии)
UPD 1 (07.05.2015):
UPD 2 (12.05.2015):
UPD 3 (12.05.2015):
Скачивание:
Спасибо за внимание!
Автор: NewGreen
Как стало недавно известно, новая версия SA-MP 0.3.7. будет поддерживать создание статичных NPC, которые не будут занимать слоты на сервере, и в отличии от прежних более просты в управлении и создании.
Цель их добавления очевидна, их можно использовать как продавцов в магазине, продавцов хотдогами и т.п. но они не умеют ходить т.е. передвигаться (т.к. они статичные).
Я решил, что можно добавить возможность хотьбы для статичных NPC, и создал группу функций для этого.
Представляю вам moveactors.inc - данный include позволяет статичным NPC передвигаться (ходить) по заданным координатам.
Описание основных функций:
MoveActorToPos - основная функция для передвижения статичного NPC
PHP:
MoveActorToPos(actorid,X,Y,Z,action)
X,Y,Z - координаты (точка) к которым NPC должен подойти
action - переключатель режима 0 - ходьба, 1 - бег.
IsActorMoving - функция (макрозамена) проверяющая достиг ли NPC конечной точки назначения
PHP:
IsActorMoving(actorid)
Функция IsActorMoving возвращает:
true - если NPC находится в пути
false - если NPC не двигается
Описание вспомогательных функций:
IsActorInCube - проверка нахождения NPC в заданных координатах (в кубе) (не работает при движении NPC)
PHP:
IsActorInCube(actorid, x, y, z, edge)
x,y,z - координаты (точка) места проверки
edge - радиус проверки (вернее говоря длина ребер куба)
Функция ActorInPoint возвращает:
true - если NPC находится в координатах
false - если NPC не находится в координатах
SetActorFacingPos - поворот NPC лицом к заданным координатам
PHP:
SetActorFacingPos(actorid, x,y)
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)
Код:
- Добавлена возможность бега для [B]NPC[/B]
- В функцию [B]MoveActorToPos[/B] добавлен параметр [B]action[/B] для переключения режимов [B]NPC[/B] (ходьба, бег)
Код:
- Исправлена ошибка проверки параметра [B]action[/B] в функции [B]MoveActorToPos[/B]
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Спасибо за внимание!
Автор: NewGreen
Последнее редактирование:
