maxnpc - Максимальное количество NPC(ботов) Соответсвенно если maxnpc 0 то боты не могут подключится к серверу, так что ставим больше 0.
Запись/воспроизведение файлов
Прежде всего, мы должны записать файл воспроизведения для нашего NPC(бота). Запустите сервер с любым модом. Заходим в Ркон аккаунт(Используем: "/rcon login <пароль>") и загружаем фильтрскрипт npc_record(Используем: "/rcon loadfs npc_record"). Есть 3 основных команды для записи в npc_record:
/vrecord <имя файла> - Старт записи машины в указанный файл. /ofrecord <имя файла> - Старт записи пешком в указанный файл. /stoprecord - Останавливает запись(Как и на машине так и пешком)
В этом уроке, мы сделаем путь транспортного средства,так что садитесь в машину, и вводите /vrecord mynpc (Должны быть ркон админом) чтобы начать запись. Немного поездите по городу и когда вы закончите, вводите, /stoprecord Закройте игру и перейдите в папку scriptfiles, там вы увидите файл с именем mynpc.rec. Перенесите этот файл: "Папка с сервером>npcmodes>recordings" Готово? Хорошо! Вы имеете запись(путь) для вашего будущего NPC.
Управление NPC
Ты мог заметить, что много pawno скриптов в каталоге npcmodes, это стандартные "мини" скрипты, которые контролируют действия вашего NPC. Итак, создадим скрипт для вашего записанного пути. Создаём новый файл в pawno, и заменяем его содержимое на это:
Code
#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
Это может быть выглядит для вас не понятно, но сейчас я опишу каждую строчку!
Code
#define RECORDING "mynpc" - //Имя вашего файла записи без расширения.
Наша запись была названа mynpc, и его расширение было .rec, поэтому мы вводим сюда mynpc
Quote
#define RECORDING_TYPE 1 //1 если путь записан в машине и 2 если путь записан пешком
Code
#include <a_npc>//Задействуем функции инклуда a_npc.
Это ещё один стандартный икнклуд в NPC библиотеке. Это Позволит начать воспроизведение нашей записи когда игрок помещён в автомобиль.
Code
public OnNPCExitVehicle() StopRecordingPlayback();
Это остановит воспроизведение записи если npc выйдет с машины.
Code
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Этот код значит, Когда NPC Заспавнится начнётся воспроизведение записи.
Как видите это всё очень просто.Теперь сохраните свой NPC "mini" скрипт, с названием "mynpс.pwn" В "Папка с сервером>npcmodes>" и скомпилируйте. Если он скомпилировался, ты можешь теперь продолжить делать следующие шаги в этом учебнике.И не забудьте обновить sa-mp до последний версии.
Подключение NPC
Так, мы имеем путь к файлу, и "Мини" павн скрипт для контролирования NPC, теперь нам надо загрузить NPC В GameMode Или FilterScript Закройте "Мини" павн скрипт, и загрузите ваш GameMode или FilterScript в павно. Настало время чтобы познакомится с функцией ConnectNPC, что предлагает эта функция: подключает вашего NPC на ваш сервер. Давайте изучим эту функцию, её параметры, и что она означает:
Code
ConnectNPC("Dave","mynpc");
"Dave" - первый параметр, это имя NPC. С помощь этого вы можете искать различных NPC и выполнять с ними различные действия. "mynpc" - это имя файла(без расширения), "мини" скрипт мы создали раньше. С помощью новый знаний о функции ConnectNPC, можно попробовать присоединить NPC в ваш gamemode или filterscript.
Code
public OnGameModeInit() { print("my gamemode"); ConnectNPC("MyFirstNPC","mynpc"); return 1; }
или, если вы добавляете NPC в FilterScript
Code
public OnFilterScriptInit() { print("my filterscript"); ConnectNPC("MyFirstNPC","mynpc"); return 1; }
Сейчас, когда мы создали путь в машине, нам нужно создать машину для NPC. ПРИМЕЧАНИЕ: Если ваш NPC не находится в машине, вы можете пропустить этот шаг. Если вы используете NPC в GameMode:
Обратите внимание, что место нахождение машине не имеет значения, так как она будет телепортироваться туда,где начинается путь NPC. Ещё одна вещь, прежде чем идти в игру и проверять своего первого NPC, мы создали ранее для него автомобиль, теперь мы должны посадить его в автомобиль. Я сделал это используя public OnPlayerSpawn... ПРИМЕЧАНИЕ: Если ваш NPC не находится в машине, вы можете пропустить этот шаг.
Code
public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) { new npcname[MAX_PLAYER_NAME]; GetPlayerName(playerid, npcname, sizeof(npcname)); //Получем имя NPC if(!strcmp(npcname, "MyFirstNPC", true)) //Проверяем если имя NPC MyFirstNPC { PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Зажаем его в машину ранее созданную для него } return 1; } return 1; }
Если вы хотите добавить ещё одного NPC, этот код легко изменить, вот пример для двух NPC:
Code
public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) //Checks if the player that just spawned is an NPC. { new npcname[MAX_PLAYER_NAME]; GetPlayerName(playerid, npcname, sizeof(npcname)); if(!strcmp(npcname, "MyFirstNPC", true)) //проверяем имя MyFirstNPC { PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); // Зажаем NPC В созданую для него машину return 1; } if(!strcmp(npcname, "MySecondNPC", true)) { PutPlayerInVehicle(playerid, AnotherVehicleID, 0); return 1; } return 1; } return 1; }
Теперь скомпилируйте Gamemode или Filterscript и идите в игру ! Если повезёт вы увидите NPC разъезжающий по вами заданному пути для него, поздравляем ! Вы сделали своего первого NPC! Не работает ? Пишите здесь, и если мы сможем, то поможем устранить вашу проблему. Любые другие вопросы? Опять же, пишите в этой теме.
Trash translate by me(heufix). copypaste from v-web.ru.
Часто задаваемые вопросы:
Quote (feel_on)
как сделать проверку на бота? а то у меня сервер с системой регистрации и ккакбэ он войти то не может.
if(IsPlayerNPC(playerid)) { if(!strcmp(pname,"никбота",true)) SetPlayerSkin(playerid,233); } я когда так попробывал у меня скин не изменилс также мент остался ток теперь за место поезда он сам по рельсам телепортируется тупо
Люди! Я удивляюсь что никто еще не задал это вопрос! Обьясните чайнику как сделать что бы когда садишься в автобус НПС с тебя деньги снимали! например $100
Список интерьеров (со скринами) http://weedarr.wikidot.com/interior
DizeL-ZR- Работает! но не корректно! тоесть когда игрок садисться в авобус с него с нимают 100 и сразу же их возвращают
Добавлено (30.11.2009, 15:32) --------------------------------------------- вот код скрипта:
Code
#include <a_samp>
new MyFirstNPCVehicle; //Global variable! public OnFilterScriptInit() { print("my filterscript"); ConnectNPC("MyFirstNPC","mynpc"); MyFirstNPCVehicle = CreateVehicle(418, 0.0, 0.0, 0.0, 0.0, 6, 6, 5000); return 1; } public OnPlayerStateChange(playerid,newstate,oldstate) { if(newstate==PLAYER_STATE_PASSENGER &&GetPlayerVehicleID(playerid)==MyFirstNPCVehicle) GivePlayerMoney(playerid,-100); return 1; } public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) //Checks if the player that just spawned is an NPC. { new npcname[MAX_PLAYER_NAME]; GetPlayerName(playerid, npcname, sizeof(npcname)); //Getting the NPC's name. if(!strcmp(npcname, "MyFirstNPC", true)) //Checking if the NPC's name is MyFirstNPC { PutPlayerInVehicle(playerid, MyFirstNPCVehicle, 0); //Putting the NPC into the vehicle we created for it. } return 1; } //Other stuff for normal players goes here! return 1; }
Список интерьеров (со скринами) http://weedarr.wikidot.com/interior
в onplayerequestclass(playerid,classid) [pwn]if(IsPlayerNPC(playerid)) { new pname[40]; GetPlayerName(playerid,pname,sizeof(pname)); if(!strcmp(pname,"никбота",true)) SetSpawnInfo(playerid,1,СКИНИД,0.0,0.0,0.0,0.0,0,0,0,0,0,0); }[/pwn]
Такс, заинтересовало создание ботов, решил сделать. Вроде делал всё по образцу (Бот пешеходный) : [pwn] #define FILTERSCRIPT #define RECORDING "Zomb" //Имя вашего файла записи без расширения #define RECORDING_TYPE 2 //1 если путь записан в машине и 2 если путь записан пешком #include <a_npc> #include <a_samp>
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
public OnFilterScriptInit() { print("my filterscript"); ConnectNPC("Zoo","Zomb"); return 1; }[/pwn]
Alan_Wake, всего 2 пвн. Один в /Filterscripts/ второй в /npcmodes/ в одном код типо(npcmodes) [pwn]........ ...... public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);..... ..... ..... ..[/pwn] В другом код типо(filterscript) [pwn]....... public OnFilterScriptInit() ..... .... ConnectNPC("name1","pwnname");..... ....... ....[/pwn]
Лично у меня чтоб пеший бот работал нужно рядом с ConnectNPC("name1","pwnname"); внизу как и для тачек вставлять AnotherVehicleID = AddStaticVehicle(587,2635.2419,1075.7726,10.5472,89.9571,53,1); иначе бота не хрена не будит на серваке P.s Сделал 40 ботов из них 20 пришлось удалить из за сильной нагрузки на сервер,это из за самих ботов или может перебор переменных?
Сообщение отредактировал Vuzi - Пятница, 04.12.2009, 12:36