1) Заходим в корневую папку вашего сервера, находим файл server.cfg, открываем в Блокноте, и добавляем/изменяем после строчки "maxnpc" значение на *количество ботов которых вы хотите создать*.
|
http://breedpmnr.ru/i/b78a4baca10d74d23766eadd0a07.jpg |
2) Открываем pawno, и создаём новый файл. Заменяем всё содержимое на:
Клик *
PHP код:
#include <a_samp> #tryinclude <dc_cmd> #if defined DC_CMD CMD:startrecrod(playerid, params[]) { if(!strlen(params[0])) return SendClientMessage(playerid,0xFF0000FF,"Использвание: /startrecord {Название записи}"); if(!IsPlayerInAnyVehicle(playerid)) StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_DRIVER,params[0]); else StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_ONFOOT,params[0]); SendClientMessage(playerid,0xFF0000FF,"Запись началась."); return 1; } CMD:stoprecord(playerid, params[]) { StopRecordingPlayerData(playerid); SendClientMessage(playerid,0xFF0000FF,"Запись остановлена."); return 1; } #else #include "../include/gl_common.inc" public OnPlayerCommandText(playerid, cmdtext[]) { new cmd[256]; new idx; cmd = strtok(cmdtext, idx); if(strcmp(cmd, "/startrecord", true) == 0){ new tmp[512]; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Использвание: /startrecord {Название записи}"); if(!IsPlayerInAnyVehicle(playerid)) StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_DRIVER,tmp); else StartRecordingPlayerData(playerid,PLAYER_RECORDING_TYPE_ONFOOT,tmp); SendClientMessage(playerid,0xFF0000FF,"Запись началась."); return 1; } if(strcmp(cmd, "/stoprecord", true) == 0) { StopRecordingPlayerData(playerid); SendClientMessage(playerid,0xFF0000FF,"Запись остановлена."); return 1; } return 0; } #endif
Компилируем под названием record в каталог(папку) filterscripts.
*Команды данного скрипта скомпилируются на DC_CMD (при наличии includa <dc_cmd>) либо на стандартный командный процессор. |
http://breedpmnr.ru/i/39cf031f4377d4e72dc5e2f42d7f.jpg |
3) Вводим в консоль команду "loadfs record"(без кавычек), либо в игре: /rcon loadfs record (сперва нужно авторизоваться как администратор). |
http://breedpmnr.ru/i/dcc4ef069154f41597cdfa9b39f9.jpg |
4) Заходим в игру и пишем /startrecrod "Название записи" с позиции старта/повтора записи бота.
После того как мы повторили точные движения бота, вводим /stoprecord. |
-"Запись началась"
-"Запись остановлена." |
5) Открываем каталог \scriptfiles и находим в нём файл с ранее указанным названием (расширение .rec).
6) Копируем/вырезаем файл в каталоге \npcmodes\recordings |
7) Открываем компилятор, создаём новый файл, и заменяем всё содержимое на:
Клац*
PHP код:
#define RECORDING "Название записи" //ковычки оставляем #define RECORDING_TYPE 1// Заменяем на любое другое число если запись #define RECORDING_REPLAY 1// Повтор записи, 1 - да, 0 - нет #include <a_npc> main(){} #if RECORDING_REPLAY == 1 public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING); #endif #if RECORDING_TYPE == 1 public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING); public OnNPCExitVehicle() StopRecordingPlayback(); #else public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING); #endif
Компилируем в каталог \npcmodes с тем же названием что и у записи.
*Не забываем изменить директивы #define на нужные нам параметры.
*Вы также можете использовать в данный скрипт и другие NPC калбэки, полный список всех NPC калбэков: КЛАЦ |
8) Подключаем бота при помощи функции ConnectNPC(name[], script[]) - желательно в OnGameModeInit*.
PHP код:
public OnGameModeInit() { ConnectNPC("Nick_Name","MyRec"); return 1; }
*Так, у бота, без всякого риска останется свободный слот. |
9) Если запись бота происходила а автомобиле, обязательно создавать его (при помощи функции CreateVehicle/AddStaticVehicle). Также, не обязательно указывать точные координаты спавна автомобиля, так как бот сам телепортирует её к месту старта записи, но не нужно забывать про PutPlayerInVehicle.
Пример:
PHP код:
new botcar; public OnGameModeInit() { ConnectNPC("Nick_Name","MyRec"); botcar = CreateVehicle(*carid*, 0.0, 0.0, 5.0, 0.0, *цвет1*, *цвет2*, 5000); return 1; } public OnPlayerSpawn(playerid) { if(IsPlayerNPC(playerid)) { new npcname[MAX_PLAYER_NAME+1]; GetPlayerName(playerid, npcname, sizeof(npcname)); if(!strcmp(npcname, "Nick_Name", true)) { PutPlayerInVehicle(playerid, botcar, 0); SetSpawnInfo(playerid,0,*skinid*,0.0,0.0,0.0,0.0,0,0,0,0,0,0); } return 1; } return 1; }
|
10) ПРИМЕЧАНИЕ: После его подключение, бот ведёт себя как обычный игрок, и по мимо калбэков в NPC скрипте, он отвечает на обычных калбэков для игроков. Иногда это удобно, но при этом есть некоторые калбэки или функцие которые NPC не сможет пройти, к примеру вашу Реггистрацию, Анти-Чит телепорта и т.д. Следовательно, в данных калбэков нужно исключить NPC простой проверки:
PHP код:
if(IsPlayerNPC(playerid)) return 1;
*Можно экспериментировать калбэками (КЛАЦ) и обычными функциями и создать весьма интересные системы ; ). |