В первую очередь для использования NPC в игре необходимо записать его схему перемещения в файл.
Запустите сервер с любым гейм модом и с подключенным фильтрскриптом
npc_record, теперь залогинтесь как администратор [/rcon login ****]. Для записи бота используются три команды:
/vrecord <filename> Начинает запись пути транспорта в указанный файл.
/ofrecord <filename> Начинает запись пути пешехода в указанный файл.
/stoprecord - Остонавливает запущенную запись.
В этом уроке мы сделаем запись транспорта.
И так доберитесь до любово транспорта, залезте в него, и наберите команду для записи
/vrecord mynpc (где mynpc мы указываем имя файла с записью).
Теперь покатайтесь по городу после чего остановите запись командой /stoprecord.
Закройте игру и идите в папку scriptfiles, там должен появится файл mynpc.rec
Теперь переместите этот файл в <папка sa-mp сервера>/npcmodes/recordings/
Сделали? Отлично!!! мы только что записали путь NPC и поместили запись в необходимую папку.
Подключение NPC
Вы возможно обратили внимание на скрипты в папке npcmodes это "mini" скрипты они управляют поведением NPC.
Теперь мы зделаем "mini" скрипт для управления нашим NPC.
Откройте Pawno создайте новый файл, очистите все что там есть и вставьте этот код:
#define RECORDING "mynpc" //Имя файла с записью без расширения. #define RECORDING_TYPE 1 //Тип записи: 1 на транспорте, и 2 пешком #include <a_npc> main(){} public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING); #if RECORDING_TYPE == 1 public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING); public OnNPCExitVehicle() StopRecordingPlayback(); #else public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING); #endif
Теперь я объясню каждую строку подробно.
#define RECORDING "mynpc" //Имя файла с записью без расширения.
Как вы уже поняли, здесь мы добовляем записанный нами файл, но без расширения rec
#define RECORDING_TYPE 1 //Тип записи: 1 на транспорте, и 2 пишком
Здесь мы ставим тип нашей записи, если запись была на транспорте ставим 1, если пешком ставим 2.
#include <a_npc>
Инклюд с функциями NPC.
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd - callback входящий в библиотеку NPC.
Эта строка повторяет воспроизведения, записанного файла (mynpc)
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Эта строка запустит воспроизведение после того как NPC окажется в транспорте.
public OnNPCExitVehicle() StopRecordingPlayback();
Эта строка остоновит воспроизведение, если NPC по какой либо причине окажется вне транспорта.
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Строка воспроизведет NPC после его спавна.
Теперь сохраните ваш скрипт как mynpc.pwn в папку <папка sa-mp сервера>/npcmodes/ и скомпилируйте.
Если компилирование прошло успешно переходите к следующему шагу, если нет то убедитесь что вы не компилируете программой pawno старой версии.
Подключение вашего NPC
После предидущих шагов мы получили файл с записью NPC (mynpc.rec) и mini скрипт управляющий NPC(mynpc.amx).
Теперь нам необходимо подключить всё это в наш гейммод или фильтр скрипт, для этого необходимо пользоватся функцией ConnectNPC
ConnectNPC("Dave","mynpc");
Функция имеет 2 параметра:
"Dave" - этот параметр позволяет дать нашему NPC имя.
"mynpc" - это имя нашего mini скрипта (mynpc.amx) который мы зделали раньше.
Теперь вы знаете новую функцию ConnectNPC которая подключает NPC к игре из гейммода или фильтрскрипта.
public OnGameModeInit() { print("my gamemode"); ConnectNPC("MyFirstNPC","mynpc"); return 1; }
Или, если вы добавляете NPC в filterscript...
public OnFilterScriptInit() { print("my filterscript"); ConnectNPC("MyFirstNPC","mynpc"); return 1; }
Теперь так как мы создали нашего NPC на транспорте нам нужно создать для него этот транспорт.
Если ваш NPC не использует транспорт то вы можете пропустить этот шаг!
new MyFirstNPCVehicle; //Global variable! 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 в filterscript...
new MyFirstNPCVehicle; //Global variable! public OnFilterScriptInit() { print("my filterscript"); ConnectNPC("MyFirstNPC","mynpc"); MyFirstNPCVehicle = CreateVehicle(400, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000); return 1; }
Заметьте что фактическое положение транспорта не имеет значения, так как транспорт будет телепортирован к месту начала пути NPC!!!
Только перед тем как начать игру и проверить вашего нового NPC, нам нужно поместить его в транспорт для этого используем OnPlayerSpawn...
Если ваш NPC не использует транспорт то вы можете пропустить этот шаг!
public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) //Проверяет: существует ли игрок(NPC). { new npcname[MAX_PLAYER_NAME]; GetPlayerName(playerid, npcname, sizeof(npcname)); //Получает имя игрока (NPC). if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяет если имя MyFirstNPC. { PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Помещает NPC в транспорт, который мы создали выше. } return 1; } //Место функциям для остольных игроков. return 1; }
Теперь компилируйте ваш гейммод или фильтр скрипт, и начинайте играть, идите к тому месту где вы записывали своего NPC и радуйтесь вашему первому боту.
Текст перевел с английского и отредактировал:
maxim polipovich
Сообщение отредактировал Mike: 19 января 2012 - 14:24