Bus - система взаимодействия ботов, помогите разобраться.

Дополнения к OpenKore, расширяющиее её функциональность, называются плагинами.

Модератор: 4epT

Wider
Начинающий
Сообщения: 24
Зарегистрирован: Вс апр 15, 2007 8:24 pm

Bus - система взаимодействия ботов, помогите разобраться.

Сообщение Wider »

Хочу написать сигнализацию для ботов.
Как эту систему включать и сервак запускать я разобрался, а вот какие свойства и методы у объекта $bus в боте я не разобрался.
Народ, если кто работал с этой системой, напишите плиз примеры плагинов под неё или вкратце опишите принцип. Можно конечно и ссылочки если есть гдеб это почитать...
На официальном форуме ничего толком вразумительного не нашёл.
Заранее спасибо :)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Всё эта фигня толком не документирована. Мне тоже интересно в этом разобраться.

* * *

VCL сообщает http://forums.openkore.com/viewtopic.ph ... 715#157715 :
The whole protocol is based on a message format, as described here: http://openkore.sourceforge.net/srcdoc/ ... sages.html
Note that we only use key-value pairs messages. Array messages are unused (they turned out to be useless) and I'll probably remove support for them in the future.

The bus is managed by a bus server (src/Bus/bus-server.pl).
- When a client connects to the bus server, the bus server sends a HELLO message to the client, which contains (among other things) the client ID that the bus server has assigned to this client. Each client on the bus is uniquely identified by an ID. (src/Bus/Sever/MainServer.pm, onClientNew).
- The client responds with a HELLO message (src/Bus/Client.pm, HANDSHAKE status).
The client is then logged in and connected to the bus.

- When you send a message to the bus server, that message is broadcasted to all other clients on the bus.
- It's also possible to send private messages, messages which are only delivered to one specific client. To do that, set your message's TO argument to the client ID of the target client.
- There is support for queries: messages for which a reply is expected. A query message contains a SEQ argument, which is a unique ID (generated by the client which sent the query) which uniquely identifies a query. If another client replies to that query then he must set its reply message's SEQ to the same value is the query message's SEQ, and set IRY ("Is Reply") to 1.
- You should not use message identifiers or argument names which are all uppercase. All uppercase names are reserved for the protocol.
- Bus dialogs are still very much work in progress. I don't know when I'll have the time to finish them, it may even take a year depending on my free time and motivation.
Последний раз редактировалось piroJOKE Вт янв 29, 2008 5:04 pm, всего редактировалось 1 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
dvdc
Бывалый
Сообщения: 556
Зарегистрирован: Вс ноя 05, 2006 1:43 pm
Контактная информация:

Сообщение dvdc »

а если поковырять /src/bus ? там куча интересного есть. по-крайней мере на первый взгляд там весьма разумная система обмена информацией между двумя bus-системами а-ля клиент-сервер. и парсер там хороший.
комманд только не нашёл ) видимо детальное изучение исходников поможет. жалко у меня нет времени :(
Wider
Начинающий
Сообщения: 24
Зарегистрирован: Вс апр 15, 2007 8:24 pm

Сообщение Wider »

Как я чисто интуитивно догадываюсь объект $bus, это экземпляр объекта класса Bus::Client, который наследуется от класса Bus::SimpleClient, а это простой сокет клиент.
Из анализа исходников вроде как понял что есть такие методы:

getState() - возвращает статус бота, который может быть равен константам:
NOT_CONNECTED - не соединён с сервером;
STARTING_SERVER - запускает, или запустил бота, точно не уверен.
HANDSHAKING - хз что это за статус...
CONNECTED - соединён с сервером...

serverHost() - возвращает ип сервера к которому бот подсоединён...

serverPort() - возвращает порт сервера к которому бот подсоединён...

ID() - возвращает ID бота в Bus системе...

readNext($self, $MID) - походу читает следующее полученное сообщение ...
с аргументами чтот толком не понял, что передавать надо... :( Подозреваю что это для Широковещательных сообщений...
Если читать нечего то возвращает undef.

send(String messageID, args) - отсылает сообщение на сервер.
Передаём вероятно сообщение и аргументы.

query(String messageID, [Hash args], [Hash options] - походу отсылает запрос ... в исходниках приводится пример использования...

Код: Выделить всё

# Send the query.
# my $query = $Bus_Client->query("hello", { name => "Joe" },
#                 { timeout => 10, collectAll => 1 });
#
# # Wait until the query is done or has timed out.
# while ($query->getState() == Bus::Query::WAITING) {
#     sleep 1;
# }
#
# if ($query->getState() == Bus::Query::DONE) {
#     while (my ($messageID, $args) = $query->getReply()) {
#         print "We have received a reply!\n";
#         # Do something with $messageID and $args...
#     }
#
# } else { # The stat is Bus::Query::TIMEOUT
#     print "10 seconds passed and we still don't have a reply!\n";
# }
Возвращает объект класса Bus::Query
requestDialog(Bytes clientID, String reason, args, Hash options) - Запрашивает Диалог походу с другим ботом... не понял как использовать...

И два события onMessageReceived,onDialogRequested...
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Хм... а плагина под это дело никакого часом нет? Ну чтоб для "эндюзеров" оно юзабельным стало?
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

piroJOKE
Был один. Даже видел в действии. Но афтар оставил за собой право его не распространять.

ЗЫ: Он к стати, опубликовал Баг Репорт на щёт БУСа.
Wider
Начинающий
Сообщения: 24
Зарегистрирован: Вс апр 15, 2007 8:24 pm

Сообщение Wider »

Вот и хотелось бы хоть примерчик как это всё использовать?? :(
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Да, знаем мы этого горячего парня. :twisted:

Странно что нет интереса к этой системе у людёв, что не требуют они интерфейса к этой фиче у разработчегов...

Ладно. Давайте с другой стороны посмотрим. Что нам нужно от этого плагина ваще?

Лично меня устроил бы аналог callSign. Ы? :twisted: Сбацаем? :x
Последний раз редактировалось piroJOKE Вт янв 29, 2008 10:42 pm, всего редактировалось 1 раз.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Wider
Начинающий
Сообщения: 24
Зарегистрирован: Вс апр 15, 2007 8:24 pm

Сообщение Wider »

Программа минимум: это просто отслеживание поимки бота ГМами... и оповещение остальных ботов об этом радостном событии...
т.е. нужен плагин, который будет:
1. обрабатывать сообщение консоли о тревоге, чтоб можно было его послать макросом...
2. далее он должен послать широковещательное сообщение на сервер;
3. сервер должен разослать это сообщение всем ботам...
4. этот же плагин должен обработать приём этого сообщения, ну и выполнить там скажем макрос или выйти навсегда или на время...это сейчас не суть важно...

Программа максимум: можно замутить сторонний монитор(отдельный управляющий монитор), который будет показывать нужную информацию о ботах, и позволит легко ими управлять. Типа стратегической игрушки получится :evil:.
Притом т.к. этот монитор будет подключаться как клиент к серверу... можно легко управлять ботами на разных компах в сети... в теории даже через инет... если выделенный ип у сервака...
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

П1.1, П1.2, П1.4 ~ "* quit" ?
П1.3 "Я" = "VASIA" or "*" (or callSign)

П2 ~ "im VASIA, and i see: .........."; но П2 это не сейчас.

Добавлено спустя 55 секунд:

Кстати о птичках. А этот самый БУС, как его через инет замутить?... Мля, я ваще про него ничего не знаю.

Добавлено спустя 11 минут 18 секунд:

Т.е. минимальный плагин может выглядеть так. Типо тех-задание:

config:

bus_im VASIA
bus_disabled 0

commands:

bus <name|*> <string>

Логика работы - заслать сообщение "всем", и точка. Мы пишем простой плагин, верно? :twisted:
Если мне приходит по шине <string> я его запускаю как команду. Точка.
Мне = или bus_im или callSign или *; если другое "имя получателя" - игнорируем эту строчку.

ЗЫ: Уточнения. Умолчания:

bus_im - пустышка; если его нет, то получатель callSign или *; если и калл-сигн не задан, то только *. Можно в принципе логин еще подключить, но хз.
bus_disabled 0 - если отсутствует, то 0; т.е. - плагин включен.

команда bus <name> <string> - если аргументов <2 - пишем строку хелпа.

команды принимаются и запускаются не зависимо от состояния ai.

Всё, конец Т.З. :twisted:
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Wider
Начинающий
Сообщения: 24
Зарегистрирован: Вс апр 15, 2007 8:24 pm

Сообщение Wider »

piroJOKE писал(а):Кстати о птичках. А этот самый БУС, как его через инет замутить?... Мля, я ваще про него ничего не знаю.
В боте есть файлик src\Bus\bus-server.pl - это выделенный Bus сервер...
его можно и нужно запускать с параметрами... например --help
или --port=(номер порта)
!Для запуска нужен ActivePerl
если без параметров то он на любой случайный свободный порт вешает сервер
Т.е. это обычный сокет сервер... и поидеи если статичный ип в инете(но это роскошь) можно будет к нему и через инет подконнектится...
Но а так просто можно использовать его в локалке...

Далее надо в файлике sys.txt
bus 1
bus_server_host 127.0.0.1
bus_server_port (номер порта)
поставить...

вуаля при запуске бота он начнёт коннектится к серваку...
excellent
Энтузиаст
Сообщения: 66
Зарегистрирован: Ср янв 03, 2007 4:20 am

Сообщение excellent »

Небольшой оффтопик.
Вон dvdc предлогал услуги предоставления компа для ботоводства за плату. Если бы сделать как-бы бота-сервер, который был бы всегда запущен и следил за тем банят ли кого-нить, можно было бы например создать систему аккаунтов. Тоесть группа людей, которая сбрасывает небольшую сумму dvdc за услуги машины и пользуется плагином. В случае бана кого-то из группы остальные боты уже действуют по обстоятельствам.. либо садяться с чатом АФК на время, либо выходят с игры.
Хотя как представлю.. Заходит ГМ в игру, банит бота и сразу онлайн РагГейма в два раза падает =)
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Ага, то что я выше понаписывал в ТЗ, этого мало. Надо еще какие-то триггеры, которые смогут сами посылать сообщения, а не только командой.

Что-то в роде такого:

bus_banned * banned
bus_disconnected * disconnected
...

...? %)
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Сообщение 4epT »

мы ведь можем управлять ботом через асю (мирк)? мож чё полезное есть в тех плагинах?

Добавлено спустя 8 минут 58 секунд:

IDDQD флудил:
pJ, bus конечно хорошо, но вместе с ним придется осваивать гору новых методов общения между ботами (например макрос реакции бота на bus-мессагу или макрос отправки этой массааги, кто-нить уже знает как это сделать? дайте мануал). Multiple callSign попроще будет. Картина : бегает пати ботов, прист сидит в 1 точке, бот решил отдохнуть и спрашивает у приста where в пати чат. Прист вежливо отвечает в пати чат"%$cmd_user move %$x %$y" и бот радостно бежит к присту (каллсигн бота = его ник). Но в таком случая мы теряем главную фишку каллсигна - массовость, т.е. нельзя будет одновременно приказать всем ботам в пати сменить локмап - для этого нужен второй callSign
макросы на реакцию не беда, обрабатывать констольку мы же умеем :twisted:

хотя я думаю макросами не совсем рационально, раз плагин будет обрабатывать входящие сообщения, то можно его научить скидывать их в "командную строку". если требуется какая-то отсылка сообщения при бане, то можно придумать "интерфейсину" в конфиге типо как у do-коммандера, но это всё вторые вопросы..
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
IDDQD
Энтузиаст
Сообщения: 95
Зарегистрирован: Пн дек 24, 2007 2:33 am

Сообщение IDDQD »

4epT
Макросами в данном случае совсем нерационально. Особенно если пускать пати из 12 негров на 1 не самой быстрой машине )

Может стоит завести отдельную темку по живому общению ботов ( типа не_через_bus ).
Есть у меня интересная идея : сделать пати ботов, которые смогут спокойно жить внутри гильдии. Т.е. будут не тупо флудить кадилмэном в гч, а передавать какую то информацию своими речами. Можно конечно реализовать макросами, но это криво и нерационально. Для такой цели хочется возможность полного переноса чата в консоль + лист соответствия

Код: Выделить всё

пойдем на = move 
/марк/ = iz_dun03
/поринг/ = prt_fild08
Это уже задачка для отдельного плагина
Ответить