Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Создание NPC
- Запись файла путей
- Для начала нам необходимо записать файл путей для нашего 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
- Code
- #include <a_npc>
- Подключаем инклуд содержащий функции для работы с 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
- Синтаксис:
- Quote
- 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;
- Источник: sa-mp.com
- Перевод: Kimi
Advertisement
Add Comment
Please, Sign In to add comment