-
#1
Данный плагин — практически универсальный генератор LUA-ботов.
Если первое предложение оказалось не достаточно подробным, то поясню на обезьяньем языке — «Ну эта типа такой клео скрипт на сф штобы ботов делать». Ну или если совсем тяжко, то смотрите видео:
Меню данного плагина условно разделено на 4 части, где накрест расположенные части меню взаимосвязаны больше, чем со смежными частями меню. Так левая-верхняя часть — это история действий бота, а правая-нижняя — это функции добавляющие действия бота. Левая-нижняя и правая-верзняя части — это настройки.
Само меню активируется
консольной
командой bm
Вся история пролистывается колесиком мыши.
В истории можно удалить любое действие бота, кликнув левой кнопкой мыши, однако нельзя нельзя добавить новое действие в произвольную часть истории.
Действия истории можно дублировать в конец истории нажатием правой кнопки мыши по нужному действию в истории.
- Название — это название, которое будет присвоено боту. От названия зависит имя выходного файла, оповещение об активации, секция script_name в сорцах.
- Автор — ник создателя бота. От него зависит только секция script_authors в сорцах.
- Описание — краткое изложение, для чего нужен этот бот.
- Версия — версия бота.
- Активация — команда при помощи которой будет активироваться бот.
- Позиция — координаты для функций «Бег к координатам» и «Телепорт на координаты».
- Записать текущие координаты — автоматическое изменение поля «Позиция» на координаты игрока.
- Время — задержка в мини-секундах (сек/10).
- Патерн/Клавиша — поле используемое для патернов для поиска 3D текста (подстроки, регулярки) и указания клавиши (название клавиш берется из lib.moonloader).
- Радиус поиска — радиус в котором ищутся маркеры и 3D тексты.
- Текст — поле с текстом используемое для сообщений чата и диалогов.
- Сохранить в LUA — сохранение бота как самостоятельный lua-скрипт, не зависящий от bot maker’а
- Сбросить запись бота — очищает всю историю и выставляет стандартные значения для некоторых настроек.
- Цикличное воспроизведение — повтор действий бота, после завершения его работы.
- ID координат — выбор секции для сохранения и загрузки координат функциями «Сохранение координат», «Телепорт на сохраненные координаты», «Бег к сохраненным координатам».
- Тип маркеров — определяет какие маркеры будут искаться при выборе функции «Бег к маркеру»
- Параметры диалогов — настройки относящиеся только к диалогам.
- id элемента — выбор элемента из списка, если диалог его имеет.
- Клавиша закрытия — определяет какой клавишей будет закрыт диалог.
- Параметры передвижения — настройки относящиеся только к передвижению.
- Радиус — определяет насколько близко нужно подойти к заданной позиции.
- Тип — определяет тип передвижения (в транспорте используйте только «легкий бег»).
Для работы плагина bot maker необходимо:
- CLEO 4.1
- SAMPFUNCS 5.3.3
- SAMP 0.3.7
- MenuManager (Есть в архиве)
- Microsoft Visual C++ 2012 Redistributable x86 (32-bit)
Для работы созданных вами ботов необходимо:
- SA MoonLoader
- CLEO
- SAMPFUNCS (не для всех ботов)
- SAMP (не для всех ботов)
-
bot maker.zip
174.5 KB
· Просмотры: 7,675
Последнее редактирование: 28 Авг 2016
-
#13
Вот бы кто-нибудь запилил видео-обзор.
А то самому дохрена долго разбираться))
Ой не, в пизду этих обзорщиков. «Bot maker от какого-то там SR_team, но не суть.» И начинают нести хуйню
Добрый день, дорогой читатель! Сегодня мы попробуем научиться делать ботов для crmp, впринципе, это актуально и для samp.
Начнем.
Для начала скачайте все необходимые файлы.
А именно: инклуд (a_npc), и скрипт записи маршрута бота (npc_record.pwn and npc_record.amx).
Как установить скрипт: два файла (npc_record.pwn and npc_record.amx) киньте в папку filterscripts, потом пропишите в server.cfg:
filterscripts npc_record
ЭТАП 1/3 : ЗАПИСЬ МАРШРУТА
Далее, садитесь в машину / или пешком начинайте записывать маршрут.
В случае, если маршрут записывается пешком, используйте команду /precord, если в авто используйте команду /vrecord.
После окончания маршрута вводите /screcord и запись движений остановится.
Записанный файл находится по пути: scriptfiles/namebot.rec
ЭТАП 2/3 : СОЗДАНИЕ СКРИПТА-БОТА
Теперь файл namebot.rec (из scriptfiles) перемещаем в npcmodes/recordings.
Там будет лежать запись бота.
Переходим в папку /npcmodes.
Создаем скрипт (файл .pwn) следующего содержания:
#define RECORDING "NameNPC" //Имя вашего записанного файла из scriptfiles без расширения #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
ВНИМАНИЕ! Название .pwn скрипта НЕ произвольное. Оно должно быть таким же, как и название записи (.rec файла).
В данном скрипте настройте, согласно указаниям, а после скомпилируйте скрипт (F5).
ЭТАП 3/3 : НАСТРОЙКА NPC В МОДЕ
Ко всем глобальным переменным (new) в моде добавляем:
new VehicleNPC; // транспорт, в который будем садить NPC. Проигнорируйте, если запись пешком
Далее отправляемся в OnGameModeInit и добавляем следующий код:
ConnectNPC("имя бота (произовльное)","название файла из scriptfiles без расширения"); VehicleNPC = CreateVehicle(400,0.0,0.0,5.0,0.0,3,3,5000); // нулевые координаты изменять не нужно, транспорт сам телепортируется к нашему нпс, измените только модель транспорта (по желанию) и цвет транспорта (по желанию)
Далее идем в OnPlayerSpawn, вставляем следующий код (желательно в начало паблика):
if(IsPlayerNPC(playerid)) { new npcname[MAX_PLAYER_NAME]; GetPlayerName(playerid,npcname,sizeof(npcname)); if(!strcmp(npcname,"имя указанное в ConnectNPC",true)) { PutPlayerInVehicle(playerid,VehicleNPC,0); // сажаем NPC в машину SetPlayerColor(playerid, 0xFFFFFF00); // делаем прозрачный цвет NPC } return 1; }
Далее, добавляем это в паблики, которые нежелательны для применения к NPC. Например, если он ездит в машине, добавьте там, где тратится бензин. Обязательно добавьте при регистрации, чтобы она ему не мешала и п. Если у вас возникли трудности, пишите в тему, расскажем куда еще добавить:
if(IsPlayerNPC(playerid)) return true;
Ну и все, npc готов! ВНИМАНИЕ! Если бот подключается, и его, сразу кикает, значит он не может заспавниться в моде. В основном это античит. Рекомендуется и туда добавить проверку, указанную чуть выше. Автор урока: @steve! Будут проблемы, пишите в тему — поможем.
Начнём с самого начала — это 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, и заменяем его содержимое на это:
PHP:
#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
}
Это может быть выглядит для вас непонятно, но сейчас я опишу каждую строчку!
PHP:
#define RECORDING "mynpc" - //Имя вашего файла записи без расширения.
Наша запись была названа mynpc, и его расширение было .rec, поэтому мы вводим сюда mynpc
PHP:
#define RECORDING_TYPE 1 //1 если путь записан в машине и 2 если путь записан пешком
#include <a_npc>//Задействуем функции инклуда a_npc.
publiс OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
OnRecordingPlaybackEnd Это строка кода делает запись цикла, когда нами записанная запись заканчивается, она начинает вопсроизводится ещё раз.
publicOnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Это ещё один стандартный икнклуд в NPC библиотеке.
Это Позволит начать воспроизведение нашей записи когда игрок помещён в автомобиль.
PHP:
public OnNPCExitVehicle() StopRecordingPlayback();
Это остановит воспроизведение записи если npc выйдет с машины.
PHP:
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
Этот код значит, Когда NPC Заспавнится начнётся воспроизведение записи.
Как видите это всё очень просто.Теперь сохраните свой NPC «mini» скрипт, с названием «mynpс.pwn» В «Папка с сервером => npcmodes =>» и скомпилируйте.
Если он скомпилировался, ты можешь теперь продолжить делать следующие шаги в этом учебнике.
И не забудьте обновить sa-mp до последний версии.
Подключение NPC
Так, мы имеем путь к файлу, и «Мини» павн скрипт для контролирования NPC, теперь нам надо загрузить NPC В GameMode Или FilterScript
Закройте «Мини» павн скрипт, и загрузите ваш GameMode или FilterScript в павно.
Настало время чтобы познакомится с функцией ConnectNPC, что предлагает эта функция: подключает вашего NPC на ваш сервер.
Давайте изучим эту функцию, её параметры, и что она означает:
PHP:
ConnectNPC("Dave","mynpc");
«Dave» — первый параметр, это имя NPC. С помощь этого вы можете искать различных NPC и выполнять с ними различные действия.
«mynpc» — это имя файла(без расширения), «мини» скрипт мы создали раньше.
С помощью новый знаний о функции ConnectNPC, можно попробовать присоединить NPC в ваш gamemode или filterscript.
PHP:
public OnGameModeInit()
{
print("my gamemode");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
или, если вы добавляете NPC в FilterScript
PHP:
public OnFilterScriptInit()
{
print("my filterscript");
ConnectNPC("MyFirstNPC","mynpc");
return 1;
}
Сейчас, когда мы создали путь в машине, нам нужно создать машину для NPC.
ПРИМЕЧАНИЕ: Если ваш NPC не находится в машине, вы можете пропустить этот шаг.
Если вы используете NPC в GameMode:
PHP:
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;
}
Как всегда:
400 — ид машины
Если вы используете NPC в FilterScript:
PHP:
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 не находится в машине, вы можете пропустить этот шаг.
PHP:
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:
PHP:
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;
}
[FAQ] Учимся запускать ботов на сервер. |
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
||||||
|
- Форум
- Pawn-скриптинг, SA:MP
- Уроки
- [Урок] Создание NPC бота
-
09.01.2014, 20:43
#1
Создание NPC бота
Доброго времени суток дорогие форумчане, в данном уроке вы подробно узнаете как создать своего собственного NPC бота.
Предисловие: За время моей практики я уже написал ещё один урок по созданию NPC бота, но к сожалению к тому времени у меня было мало опыта и допустил не мало ошибок. В данном уроке я попытаюсь исправить все мои допущенные ошибки, ну а также учту все нововведения появившийся с того момента.
Некоторые часто задаваемые вопросы:
Q:Что такое NPC?
A:NPC (Non-Playing Characters или ‘боты’) это нововведение в версии SA-MP 0.3. Данная нововведение позволяет вам добавить одного или несколько NPC на вашем сервере. Боты будут работать как «виртуальные игроки», при этом будут занимать 1 слот, также как нормальный игрок. (Подробнее: КЛАЦ)
Q:Нужны ли определённые дополнения (плагин к примеру) для создания NPC?
A:Нет, всё нужное встроено в клиентах версии 0.3+. Если же, в папках …/pawno/include/ отсутствуют инлкюды a_npc или a_samp, вы можете их скопировать с официального сайта sa-mp.I. Создание NPC
1) Заходим в корневую папку вашего сервера, находим файл server.cfg, открываем в Блокноте, и добавляем/изменяем после строчки «maxnpc» значение на *количество ботов которых вы хотите создать*.
2) Открываем pawno, и создаём новый файл. Заменяем всё содержимое на: Клик *
Компилируем под названием record в каталог(папку) filterscripts.
*Команды данного скрипта скомпилируются на DC_CMD (при наличии includa <dc_cmd>) либо на стандартный командный процессор.
3) Вводим в консоль команду «loadfs record«(без кавычек), либо в игре: /rcon loadfs record (сперва нужно авторизоваться как администратор). 4) Заходим в игру и пишем /startrecrod «Название записи» с позиции старта/повтора записи бота.
После того как мы повторили точные движения бота, вводим /stoprecord.-«Запись началась»
-«Запись остановлена.»5) Открываем каталог scriptfiles и находим в нём файл с ранее указанным названием (расширение .rec).
6) Копируем/вырезаем файл в каталоге npcmodesrecordings
7) Открываем компилятор, создаём новый файл, и заменяем всё содержимое на: Клац*
Компилируем в каталог npcmodes с тем же названием что и у записи.
*Не забываем изменить директивы #define на нужные нам параметры.
*Вы также можете использовать в данный скрипт и другие NPC калбэки, полный список всех NPC калбэков: КЛАЦПодключаем бота при помощи функции 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;
*Можно экспериментировать калбэками (КЛАЦ) и обычными функциями и создать весьма интересные системы ; ).
Данный урок посвящается порталу pro-pawn.ru, просьба не копировать на посторонних источниках.
Автор: ^_^Тема будет дополнятся.
Последний раз редактировалось ^_^; 12.01.2014 в 16:27.
-
19 пользователя(ей) сказали cпасибо:
-
09.01.2014, 20:48
#2
Пользователь
Уважаю данных Людей:
1.
Osetin(Хороший Администратор)
2.Daniel_Cortez(Классный скриптер)
3.Londlem(Офигенный скриптер)
4.#Carleone(Просто хороший человек)
-
09.01.2014, 21:12
#3
-
09.01.2014, 21:32
#4
Not bad. За фишку с опциональным использованием dc_cmd уже можно + поставить.
P.S.: Если не сложно, уменьши ширину 1-го столбца в таблице. Жутко неудобно каждый раз прокручивать страницу вправо, чтобы увидеть содержимое 2-го столбца.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы
здесь (click)
.
-
09.01.2014, 21:54
#5
Сообщение от Daniel_Cortez
Not bad. За фишку с опциональным использованием dc_cmd уже можно + поставить.
P.S.: Если не сложно, уменьши ширину 1-го столбца в таблице. Жутко неудобно каждый раз прокручивать страницу вправо, чтобы увидеть содержимое 2-го столбца.
Благодарю, первый пост обновлён.
-
2 пользователя(ей) сказали cпасибо:
-
09.01.2014, 21:56
#6
-
10.01.2014, 09:01
#7
-
11.01.2014, 16:21
#8
Пользователь
-
12.01.2014, 00:28
#9
Пользователь
Отлично,не каждый знает это!
-
12.01.2014, 16:25
#10
-
2 пользователя(ей) сказали cпасибо:
Информация о теме
Пользователи, просматривающие эту тему
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
- BB коды Вкл.
- Смайлы Вкл.
- [IMG] код Вкл.
- [VIDEO] код Вкл.
- HTML код Выкл.
Правила форума