Автор: ^_^
I. Создание бота
Итак, приступим к созданию бота:
1.
a)Открываем server.cfg и добавляем к строчке:
Code: Select all
scriptfiles
термин:
Code: Select all
npc_record
Если у вас отсутствует эта строка добавляем её.
b) В том же server.cfg находим строку:
Code: Select all
maxnpc
и вводим максимальное число ботов которые будут на вашем сервере. Так же если у вас отсутствует эта строка добавляем её.
2. Делаем Запись Бота
a)Заходим на сервер и вводим /rcon login **** (где **** - ваш пароль)
Примечание: Если вы не знаете ваш РКОН пароль вы можете искать или поменять его в server.cfg, в строчке:
Code: Select all
rcon_password
b)Пишем /rcon loadfs npc_record. (Это откроет нам доступ к записи NPC )
c)Когда вы уже готовы к записи (Вы в нужном месте и в Нужном Транспорте/ Пешком) и хотите начать запись пишите:
Code: Select all
/vrecord "Название Файла" если ваша запись состоится в Автомобиле
/ofrecord "Название Файла" если ваша запись состоится Пешком.
d)Когда вы хотите закончить запись пишите /stoprecord.
3.
Итак мы закончили запись бота. Теперь нам нужно её скопировать в папку NPCmodes -> Recordings. Для этого открываем папку с модом и находим папку под названием ScriptFiles. Открываем его и находим файл "Название Файла".rec (Название которую вы указали при старте записи), копируем его и вставим в Папку NPCmodes -> Recordings.
4. Чтобы бот выполнял свой действия надо сперва их "дефаинить" . Для это га открываем новый файл PWN и заменяем всё его содержимое на это:
Code: Select all
#define RECORDING "Название Файла"// Название которую вы указали при старте записи
#define RECORDING_TYPE 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
и компилируем его в папке NPCmodes с названием "Название Записи".
5. Итак основную работу мы выполнили, сейчас нам нужно только сделать возможным конект NPC-а к нашему сервера. Для это га мы будем использовать FS (FilterScripts).
a) Создаём новый PWN и заменяем всё содержимое этим:
Code: Select all
#define FILTERSCRIPT
#include <a_samp>
#if defined FILTERSCRIPT
new Car; //Название т.с в котором будет сидеть ваш NPC
public OnFilterScriptInit()
{
ConnectNPC("Замеини на Ник твоего NPC","Название записи"); // Ник NPC не будет виден на сервер но будет отображаться в Ркон Панели.
Car = CreateVehicle(ид кара который вы хотите использовать, 0.0, 0.0, 5.0, 0.0, цвет 1, цвет 2, 5000); //Координаты кара в записи - Менять не надо
return 1;
}
public OnFilterScriptExit()
{
print("Ваш NPC успешно дезактивирован.");
return 1;
}
#else
#endif
public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid))
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname));
if(!strcmp(npcname, "Название Вашего NPC - Которую вы указали раньше", true))
{
PutPlayerInVehicle(playerid, Car, 0);
SetSpawnInfo(playerid,0,ид скина NPC,0.0,0.0,0.0,0.0,0,0,0, 0,0,0); //Спавн НПС
}
return 1;
}
return 1;
}
b) Компилируем файл в Папку FilterScripts под названием "Название записи".
6. Последний шаг
Открываем server.cfg, находим строку:
Code: Select all
filtscripts
и добавляем к ней "Название записи" ( с пробелом ). Многие спросят почему "Название записи". Это потому что FS был скомпилирован под тем же названием как и "Название записи" для простоты и для комфорта.
7. Запускаем сервер. В Ркон панели должно написать:
Code: Select all
"Ник твоего NPC" has joined the server
II. Основные проблемы и их решения
Итак, бот сделан... Но впереди осталось много работы. Основные 3 причины по которым бот не может зайти на сервер или же он не может выполнить свой действия это:
1. Система авторизаций. Исправит можно добавив в public OnPlayerConnect(playerid) и public OnPlayerRequestClass(playerid, classid):
Code: Select all
if(IsPlayerNPC(playerid))return 1;
Пример:
Code: Select all
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerNPC(playerid))return 1; //Обрати внимание тут
if (RegistrationStep[playerid] == 0 && gPlayerLogged[playerid] != 1)
{
if(gPlayerAccount[playerid] != 0)
{
new loginmsg[512+1];
new loginname[64];
new playersip[256];
// .... Продолжение скрыто
2. Анти-Чит на FlyHack. Исправляется тем же:
Code: Select all
if(IsPlayerNPC(playerid))return 1;
3. Система прав на автомобиль. Ищем строку "Вы не можете управлять ..." (Текст который выкачивает когда садишься в авто без прав ) в моде и в начале добавляем ту же строку:
Code: Select all
if(IsPlayerNPC(playerid))return 1;