Запись файла путей
Для начала нам необходимо записать файл путей для нашего npc. Для этого заходим на сервер, логинимся как ркон админ. Загружем фильтрскрипт npc_record ("/rcon loadfs npc_record" ) (если он не был загружен до этого). Скрипт npc_record содержит три основные команды:
/vrecord - Начинает запись путей транспорта в указанный файл
/ofrecord - Начинает запись путей пешехода в указанный файл
/stoprecord - Останавливает запись файла
В этом уроке мы будем делать NPC управляющего транспортом. Поэтому садимся в тачку и пишем /vrecord mynpc
Далее катаемся по пути где будет ездить наш будущий npc
Когда закончим останавливаем запись файла /stoprecord
Выходим из игры и идем в папку scriptfiles, там нас должен ожидать файл mynpc.rec. Перемещаем его в папку /npcmodes/recordings/
Все запись путей для NPC закончена!
Управление NPC
Как вы наверно заметили в папке npcmodes много маленьких pwn скриптов. Они управляют поведением NPC. Теперь создадим скрипт который будет управлять нашим NPC. Скрипт будет следующего содержания:
Code
#define RECORDING "mynpc" //Это имя файла путей, который мы только что записали
#define RECORDING_TYPE 1//1 для водителя 2 для пешехода
#include <a_npc>
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
Рассмотрим каждую строчку подробнее:
Code
#define RECORDING "mynpc" //Это имя файла путей, который мы только что записали
Как говорит комментарий - это имя файла путей который мы записали. Имя указывается без расширения!
Code
#define RECORDING_TYPE 1//1 для водителя 2 для пешехода
Это тип записи. Для NPC водителя указываем 1, для NPC пешехода 2
Подключаем инклуд содержащий функции для работы с NPC
Code
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Благодаря этой строчке, когда npc проедет весь свой путь, прописанный в его файле, воспроизведение начнется сначало.
Code
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Эта строка начинает воспроизведение файла пути когда NPC садиться в транспорт
Code
public OnNPCExitVehicle() StopRecordingPlayback();
Эта строка останавливает воспроизведение, если по какой то причине NPC покинет транспорт.
Как видите все просто! Теперь компилируем скрипт mynpc.pwn и отправляем его в папку /npcmodes
Присоединение NPC
Итак у нас уже есть готовый файл путей и скрипт управляющий NPC. Теперь нам нужно загрузить NPC в моде или фильтрскрипте. Для этих целей существует функция ConnectNPC
Синтаксис:
Code
ConnectNPC("Dave","mynpc");
де, Dave - имя NPC, благодаря которому можно различать между собой разных NPC и заставлять их выполнять различные действия.
mynpc - имя скрипта (без расширения), управляющего NPC
Итак, используя эту функцию загрузим NPC в моде:
Code
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
или в фс
Code
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
Теперь когда у нас есть маршрут по которому будет кататься NPC, нужно создать ему транспорт на котором он будет кататься:
Code
new MyFirstNPCVehicle;
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}
Положение транспорта не имеет значение, поскольку он будет телепортирован к NPC, когда начнется воспроизведение файла пути.
Еще одна вещь, которую нужно сделать - это посадить NPC в транспорт. Это можно реализовать так:
Code
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //Если игрок - NPC.
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname)); //Получаем имя NPC
if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяем если имя NPC - MyFirstNPC
{
PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Сажаем NPC в созданный для него транспорт
}
return 1;
}
//Остальной код для обычных игроков
return 1;
}
Дополнение специально для GF
Чтобы боты работали стабильно и их не выкидывало с сервера/из авто и т.д
Ищем в моде данные паблики:
Code
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
public OnPlayerConnect(playerid)
public SetPlayerSpawn(playerid)
public OnPlayerSpawn(playerid)
public OnPlayerStateChange(playerid, newstate, oldstate)
public OnPlayerExitVehicle(playerid, vehicleid)
public OnPlayerRequestClass(playerid, classid)
public OnPlayerUpdate(playerid)
И добавляем следующие:
Code
if(IsPlayerNPC(playerid))return 1;