09:47
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
Модератор форума: Dima-kun  
[УРОК]NPC(Боты)
heufixДата: Четверг, 05.11.2009, 00:28 | Сообщение # 1
Уважаемый человек
Группа: Продвинутые
Сообщений: 995
Награды: 22
Репутация: 231
Замечания: 80%
Статус:
Начнём с самого начала - это server.cfg.
server.cfg

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.

Code
publiс OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

OnRecordingPlaybackEnd Это строка кода делает запись цикла, когда нами записанная запись заканчивается, она начинает вопсроизводится ещё раз.
Code
publicOnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);

Это ещё один стандартный икнклуд в 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:
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 в FilterScript:
Code
new MyFirstNPCVehicle; //Глобальная переменная     
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, мы создали ранее для него автомобиль, теперь мы должны посадить его в автомобиль.
Я сделал это используя 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)) return 1;


Радость
VuziДата: Воскресенье, 29.11.2009, 17:17 | Сообщение # 76
Новенький
Группа: Продвинутые
Сообщений: 26
Награды: 3
Город: Москва
Репутация: 2
Замечания: 40%
Статус:
if(IsPlayerNPC(playerid))
{
if(!strcmp(pname,"никбота",true)) SetPlayerSkin(playerid,233);
}
я когда так попробывал у меня скин не изменилс также мент остался ток теперь за место поезда он сам по рельсам телепортируется тупо

RashambikДата: Воскресенье, 29.11.2009, 23:34 | Сообщение # 77
Новенький
Группа: Пользователи
Сообщений: 50
Награды: 1
Город: Балаково
Репутация: 1
Замечания: 0%
Статус:
Люди! Я удивляюсь что никто еще не задал это вопрос! Обьясните чайнику как сделать что бы когда садишься в автобус НПС с тебя деньги снимали! например $100


Список интерьеров (со скринами) http://weedarr.wikidot.com/interior
Dima-kunДата: Воскресенье, 29.11.2009, 23:56 | Сообщение # 78
Группа: Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус:
пишу именно для этого урока:

public OnPlayerStateChange(playerid,newstate,oldstate)
{
if(newstate==PLAYER_STATE_PASSENGER &&GetPlayerVehicleID(playerid)==MyFirstNPCVehicle) GivePlayerMoney(playerid,-100);
return 1;
}


Мои работы:
[INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники,
[FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos,
[GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints


Сообщение отредактировал DizeL-ZR- - Воскресенье, 29.11.2009, 23:57
RashambikДата: Понедельник, 30.11.2009, 15:32 | Сообщение # 79
Новенький
Группа: Пользователи
Сообщений: 50
Награды: 1
Город: Балаково
Репутация: 1
Замечания: 0%
Статус:
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
VuziДата: Понедельник, 30.11.2009, 17:21 | Сообщение # 80
Новенький
Группа: Продвинутые
Сообщений: 26
Награды: 3
Город: Москва
Репутация: 2
Замечания: 40%
Статус:
1.Как поставить скин боту находящемуся в машине?
2.Как сделать бота пешком?



Сообщение отредактировал Vuzi - Понедельник, 30.11.2009, 17:42
RashambikДата: Понедельник, 30.11.2009, 18:09 | Сообщение # 81
Новенький
Группа: Пользователи
Сообщений: 50
Награды: 1
Город: Балаково
Репутация: 1
Замечания: 0%
Статус:
Quote (Vuzi)
2.Как сделать бота пешком?

В скрипте в том что лежит в папке npcmodes строчку измени

Code

#define RECORDING_TYPE 1 //1 в авто или 2 если пешком.



Список интерьеров (со скринами) http://weedarr.wikidot.com/interior
heufixДата: Понедельник, 30.11.2009, 22:02 | Сообщение # 82
Уважаемый человек
Группа: Продвинутые
Сообщений: 995
Награды: 22
Репутация: 231
Замечания: 80%
Статус:
Quote (Vuzi)
1.Как поставить скин боту находящемуся в машине?

Quote (JrC116)
в 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]



Радость
d0lph1nДата: Вторник, 01.12.2009, 11:49 | Сообщение # 83
Освоившийся
Группа: Продвинутые
Сообщений: 147
Награды: 5
Город: Нижний Новгород
Репутация: 39
Замечания: 0%
Статус:
Rashambik, значит у тебя в моде античит какой-то (причем довольно кривой), ищи функцию с именем вроде SafeGivePlayerMoney и используй ее.


[GM] J-Actio 1.5 r355
[FS] SpeedoMeter 1.1
[FS] SpeedoMeter 2.2
[FS] WarpEngine 0.1
[INC] FastTeleports 1.6
Alan_WakeДата: Вторник, 01.12.2009, 20:40 | Сообщение # 84
Уверенный в себе
Группа: Продвинутые
Сообщений: 296
Награды: 2
Город: Санкт-Петербург
Репутация: 38
Замечания: 0%
Статус:
Такс, заинтересовало создание ботов, решил сделать. Вроде делал всё по образцу (Бот пешеходный) :
[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]

При компиляции выдает следующие : [pwn]
F:\server\gamemodes\FS.pwn(15) : error 010: invalid function or declaration
F:\server\gamemodes\FS.pwn(18) : warning 235: public function lacks forward declaration (symbol "OnFilterScriptInit")
F:\server\gamemodes\FS.pwn(21) : error 017: undefined symbol "ConnectNPC"
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

2 Errors.[/pwn]
Где я что-то не так натворил?

Olo-lo. Догадался... Посмотрел как сделаны поезда итд и понятно стало...
Статья- помойму криво написанна...


F.A.Q "Создание шлагбаумов"



likext.com -все самое интересное из мира спорта


Сообщение отредактировал Alan_Wake - Вторник, 01.12.2009, 20:47
heufixДата: Вторник, 01.12.2009, 21:23 | Сообщение # 85
Уважаемый человек
Группа: Продвинутые
Сообщений: 995
Награды: 22
Репутация: 231
Замечания: 80%
Статус:
Quote (Alan_Wake)
Статья- помойму криво написанна...

первый человек который так сказал :)



Радость
Alan_WakeДата: Вторник, 01.12.2009, 21:25 | Сообщение # 86
Уверенный в себе
Группа: Продвинутые
Сообщений: 296
Награды: 2
Город: Санкт-Петербург
Репутация: 38
Замечания: 0%
Статус:
Quote (heufix)
первый человек который так сказал

Угу...
Но что-то у меня вообще не получается.. скорее всего кривые руки..

Как должен выглядеть ФС на пешехода, скажем из моего кода который постом выше? Вот что-то бред у меня выходит...


F.A.Q "Создание шлагбаумов"



likext.com -все самое интересное из мира спорта
heufixДата: Вторник, 01.12.2009, 21:54 | Сообщение # 87
Уважаемый человек
Группа: Продвинутые
Сообщений: 995
Награды: 22
Репутация: 231
Замечания: 80%
Статус:
Alan_Wake, всего 2 пвн.
Один в /Filterscripts/ второй в /npcmodes/
в одном код типо(npcmodes)
[pwn]........
......
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);.....
.....
.....
..[/pwn]
В другом код типо(filterscript)
[pwn].......
public OnFilterScriptInit() .....
....
ConnectNPC("name1","pwnname");.....
.......
....[/pwn]



Радость
Alan_WakeДата: Вторник, 01.12.2009, 22:03 | Сообщение # 88
Уверенный в себе
Группа: Продвинутые
Сообщений: 296
Награды: 2
Город: Санкт-Петербург
Репутация: 38
Замечания: 0%
Статус:
Quote (heufix)
Alan_Wake, всего 2 пвн.

Оппа ) Какой я не внимательный :D

Готово. Спасибо, а я то в один всё пихал :D


F.A.Q "Создание шлагбаумов"



likext.com -все самое интересное из мира спорта
VuziДата: Пятница, 04.12.2009, 12:34 | Сообщение # 89
Новенький
Группа: Продвинутые
Сообщений: 26
Награды: 3
Город: Москва
Репутация: 2
Замечания: 40%
Статус:
Лично у меня чтоб пеший бот работал нужно рядом с ConnectNPC("name1","pwnname"); внизу как и для тачек вставлять
AnotherVehicleID = AddStaticVehicle(587,2635.2419,1075.7726,10.5472,89.9571,53,1); иначе бота не хрена не будит на серваке sick
P.s Сделал 40 ботов из них 20 пришлось удалить из за сильной нагрузки на сервер,это из за самих ботов или может перебор переменных?



Сообщение отредактировал Vuzi - Пятница, 04.12.2009, 12:36
heufixДата: Пятница, 04.12.2009, 13:03 | Сообщение # 90
Уважаемый человек
Группа: Продвинутые
Сообщений: 995
Награды: 22
Репутация: 231
Замечания: 80%
Статус:
Quote (Vuzi)
P.s Сделал 40 ботов из них 20 пришлось удалить из за сильной нагрузки на сервер,это из за самих ботов или может перебор переменных?

3 мб оперативки - 1 бот помоему, считай сам)



Радость
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua