[FAQ] Расширение фукнционала RakBot - #1 Введение - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: [CM]OlegEhtler  
[FAQ] Расширение фукнционала RakBot - #1 Введение
Dimosha Дата: Понедельник, 23.10.2017, 14:10 | Сообщение # 1
Новичок
Сообщений: 15
Статус: Offline
Всем привет.
Сразу хотелось бы отметить, что ранее не писал статьи, а так же нет опыта в их оформлении, но я надеюсь, что смогу донести до Вас информацию.

Так же прошу прощения у администрации, если тема создана не в том разделе. Судя по правилам раздела - этот урок не подходит никуда, но здесь были FAQ по RakBot, так что, я думаю, что она тут будет уместна.

С некоторых времен в RakBot появилась возможность писать собственные скрипты, тем самым расширяя его функционал. Для написания собственных сценариев используется урезанный язык Lua. Используется язык Lua во многих проектах, тому яркий пример Multi Theft Auto, где он используется серверным языком для разработки ресурсов/гейммодов. Разрабатывать на нём одно удовольствие, а так же неимоверно просто. Хотелось бы немного рассказать о языке и показать несколько наглядных примеров, с помощью которых Вы сможете написать собственные сценарии ботов. Подробную информацию о языке Вы можете найти на официальном сайте Lua.org, а если хотите углубиться - советую прочитать книгу Роберту Иерузалимски "Programming in Lua".


Обратимся в документацию RakBot, нас интересует раздел "События" В данном разделе описаны события, которые автоматически вызываются RakBot'ом во время его выполнения.



С первого взгляда может показаться, что событий для работы довольно мало, но поверьте - этого более, чем достаточно. Далее посмотрим на раздел "Функции" по той же ссылке.



Сразу бы хотелось отметить для тех, кто хоть немного знаком с языками программирования. В Lua присутствует параллельное присваивание значений, это значит, что мы можем указать через запятую несколько наименований переменных и после в этой же строке задать им значения, а так же можно возвращать из функции несколько значений, что здесь и используется. Пример использования:

Код
posX, posY, posZ = getBotPos(); -- получение позиции бота на карте X, Y, Z в три переменные.


Я, как ботовод, часто сталкивался с такой проблемой, что RakBot может крашнуться. Происходит это по непонятным причинам и люди на форумах так и не дали ответов. Решил я проблему, поставив программу AlwaysUp (не реклама), которая автоматически запускает экземпляр RakBot, как службу, и следит за её выполнением. При его падении, автоматически запускается RakBot, что довольно удобно. У меня стоит около 20 виртуальных машин и следить за каждой и проверять, не упал ли бот - уходит довольно много времени. Решив эту проблему, я столкнулся с другой. Я не нашёл настроек, при которых, бот, после запуска, автоматически начинал работу фермера. Можно запускать вручную - но тогда я не решаю свою проблему с автоматическим поднятием ботов. Они просто стоят на респе и это не приносит мне прибыль. Решить эту проблему мне помогли скрипты, которые я использовал. Я просто создал скрипт с 3 строками кода:

Код
function onScriptStart()
    runCommand("!farm 0");
end


Теперь, при поднятии бота, он автоматически начинает работу фермером. Разберём более подробно:

function - ключевое слово для объявления функции
onScriptStart - наименование функции. Ссылаясь на документацию - автоматически отрабатывает при инициализации сценария.
runCommand - выполнить команду/написать что-либо в чат. Использовал команду RakBot для старта работы фермера.
end - конец фукнкции.


Я на этом не остановился, так как понял его возможности и пошёл дальше. Мне нужно было хранить информацию о боте у себя на сервере и оттуда ими управлять. Для этого я написал веб-сервер, который принимал на себя запросы и в ответ отдавал ответ "Да", при успешном выполнении или же "Нет", при ошибке на стороне сервера или же не верном формате данных переданных с клиента. В этом мне помогла функция "openUrl(url)". Теперь я знаю, на каком сервере какие админы онлайн, как работают мои боты, их статистика, так же управлял ими из ПУ. Я просто говорил им на какую работу нужно устраиваться, снимать деньги с банкомата и переводить это на другого игрока и так далее. Не правда ли хорошие возможности? Все это доступно, но многие даже не знаю о таких возможностях.

Давайте напишем сценарий, который при авторизации пользователя сигнализирует об этом на сервер и при заходе администратора в сеть, так же отправляет запрос.

Для этого нам понадобится фукнция "onPrintLog(msg)", которая запускается каждый раз при добавлении строки в чат-лог RakBot'а. Пример написан для Samp-Rp:

Код
function onPrintLog(msg)
    if(string.match(msg, "Геймтекст:  Welcome")) then
  openUrl("http://mysite/Bot/Auth/"..getNickName());
    else if(string.match(msg, "Админ в сети"))
  openUrl("http://mysite/Bot/DeAuth/"..getNickName());
  openUrl("http://mysite/Bot/AdminAuth/");
    end
end


Разберём более подробно, учитывая предыдущий разбор:
if else - стандартный оператор ветвления
string.match - проверяет, находится ли в строке подстрока. Я проверяю, если в чат-логе отобразилось "Геймтекст: Welcome", значит бот авторизовался и может приступать к работе. Можно использовать вместо string.match -> string.find.
openUrl - фукнция, для отправки Get запроса на конкретный URL. По url у меня находится мой API, через который мне поступают данные с ботов и куда я даю команды с клиента.


"http://mysite/Bot/Auth/"..getNickName() - оператор ".." - сложение строк. Еслибот авторизован с ником "СМ", то URL примет следующий вид: "http//mysite/Bot/Auth/CM"


Теперь, благодаря этому небольшому скрипту, я знаю, какой бот авторизован и работает, а какой не в сети и ожидает выхода администратора из игры. Неплохо, не правда ли?

В этом уроке я затронул небольшие основы языка, а так же показал, как можно работать с фукнциональными возможностями RakBot собственными руками. Если же будет интересно - смогу написать больше уроков, благодаря которым Вы сможете писать собственных ботов на основе RakBot.

P.S. Интересует критика, чтобы в будущем не допускать ошибок, а так же актуальна ли для Вас эта тема или нет.


Senior ASP.NET Developer

Languages: C#, Rust, PHP, Lua, TypeScript, JavaScript


Сообщение отредактировал Dimosha - Понедельник, 23.10.2017, 14:44
[Avicii] Дата: Понедельник, 23.10.2017, 14:58 | Сообщение # 2
Легенда
Сообщений: 1514
Статус: Offline
Шикарная статья, браво. Очень полезно лично для меня.

Но написано несколько научно и преимущественно для тех, кто немного знает о Программировании ( собственно, ты это и указал. )
Цитата
Сразу бы хотелось отметить для тех, кто хоть немного знаком с языками программирования.

Но как мне кажется, это всё можно было-бы обьяснить попроще и попонятнее, хотя, может быть это и я такой тугой. Попробуй это исправить в следующей статье ( если ещё будет. А я очень надеюсь, что будет ) и люди будут очень благодарны.
Статья, повторяюсь, шикарна, оформление простое но понятное. Продолжай дальше, лично мне понравилось



Dimosha Дата: Понедельник, 23.10.2017, 15:02 | Сообщение # 3
Новичок
Сообщений: 15
Статус: Offline
Цитата [Avicii ()
;4381181]Шикарная статья, браво. Очень полезно лично для меня.

Но написано несколько научно и преимущественно для тех, кто немного знает о Программировании ( собственно, ты это и указал. )
Цитата
Сразу бы хотелось отметить для тех, кто хоть немного знаком с языками программирования.

Но как мне кажется, это всё можно было-бы обьяснить попроще и попонятнее, хотя, может быть это и я такой тугой. Попробуй это исправить в следующей статье ( если ещё будет. А я очень надеюсь, что будет ) и люди будут очень благодарны.
Статья, повторяюсь, шикарна, оформление простое но понятное. Продолжай дальше, лично мне понравилось


Благодарю, но только я и указал, что это введение. Я лишь показал те возможности, которые есть и которые буду разбирать в следующих частях более подробно. angel Научно я описал только одно - параллельное присваивание, чтобы те, кто знают какие-то ЯП не пугались. Естественно, я объясню это далее.


Senior ASP.NET Developer

Languages: C#, Rust, PHP, Lua, TypeScript, JavaScript


Сообщение отредактировал Dimosha - Понедельник, 23.10.2017, 15:05
Sanoxxx Дата: Понедельник, 23.10.2017, 16:51 | Сообщение # 4
Black door
Сообщений: 349
Статус: Offline
Благодарю.
Красивое оформление радует глаз.


&

#СНамиАдмины
#КтоЕслиНеМы
LegendofGhetto Дата: Понедельник, 23.10.2017, 17:53 | Сообщение # 5
Боец
Сообщений: 101
Статус: Offline
Годная тема biggrin
►main◄ Дата: Воскресенье, 17.12.2017, 09:52 | Сообщение # 6
Боец
Сообщений: 79
Статус: Offline
помог
[CM]Дикий Дата: Понедельник, 25.12.2017, 14:49 | Сообщение # 7
Бывалый
Сообщений: 372
Статус: Offline
Как с тобой связаться? Есть вопросы и нужна помощь
LuXeRyS Дата: Понедельник, 25.12.2017, 15:16 | Сообщение # 8
Боец
Сообщений: 86
Статус: Offline
Оформил хорошо, и тема сама годная cool
Блогадарю


[FAQ] Повышаем FPS в SAMP - http://cheat-master.ru/forum/14-725074-1
[FAQ] Скрытие Фишки в SAMP - http://cheat-master.ru/forum/14-724790-1
bodyaRu Дата: Четверг, 10.01.2019, 16:22 | Сообщение # 9
Боец
Сообщений: 155
Статус: Offline
Подробно расписана тема со всем от "А" до "Я", прочитав, понимаю, что время потрачено не зря, также за оформление темы лови +

Хотелось бы продолжения.
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума