Быстро и просто передаём информацию между ботами

Всё, что касается макро-плагина.

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

Правила форума
В форуме макросы "Макросы" разрешено только задавать вопросы по уже существующим макросам и просить помощь по недоработанным своим. При этом таким считается тот макрос который готов не менее чем на 2/3.
Если вы хотите попросить участников сообщества написать вам макрос, это можно сделать в разделе "сервис".
Free Goods
Разработчик
Сообщения: 32
Зарегистрирован: Пт дек 22, 2006 8:31 pm
Сервер RO:: iRo
Контактная информация:

Быстро и просто передаём информацию между ботами

Сообщение Free Goods »

Зачем это?

Например, умерший персонаж лежит у входа на карту, отслеживает кто вошёл, сообщает качающемуся на этой карте персонажу, тот покидает игру ^^

Решил написать и поделиться с другими, разве что ключи не делятся по блокам, но это нам и не очень надо.

Так же можно хранить внутреннюю информацию внутри файла, например, списки килстиллеров.

Команды

inir <имя файла> [<ключ>]
- считать значение ключа (например, чтобы считать из файла iniwrap.ini значение "PlayerIsClose=false" пишем команду "inir iniwrap.ini PlayerIsClose")

iniw <имя файла> <ключ> <значение>
- указать значение ключа, либо создать новый

ini файл должен находиться/будет создан в папке с ОК.

Проверяющему персонажу в автомакрос срабатываемый на появление игрока засовываем:

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

do iniw iniwrap.ini PlayerIsClose true
А основному игроку делаем автомакрос:

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

automacro LeaveGame {
	console "File event handled!"
	call {
		# тут собственно сам автомакрос
	}
}
Настройки проверки значения

В файле iniwrap.pl (в sub call) вы найдёте такие переменные:

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

my $file = "iniwrap.ini";	# ini file we use
my $key1 = "PlayerIsClose";	# key we scan
my $value1 = "true";		# key value that triggeres the further execution of the subroutine
$file - укажите файл, в котором будет контролироваться значение.
$key1 - укажите ключ, который будет содержать значение
$value1 - само значение, на которое будет срабатывать запись в консоль "File event handled!".

После срабатывания значение будет заменено на "handled".
Вложения
iniwrap_v2.zip
(989 байт) 129 скачиваний
Последний раз редактировалось Free Goods Вс дек 23, 2007 10:29 am, всего редактировалось 6 раз.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Re: Быстро и просто передаём информацию между ботами

Сообщение Kissa2k »

Free Goods писал(а):Есть смысл выполнения этой команды несколько раз, чтобы момент записи в файл и считывания информации 2 ботом не совпал.
Для этого придумали блокировку файлов, когда один процесс хочет писать в файл, он устанавливает блокировку, а другой процессе при записи/чтении проверяет ее наличие и если файл заблокирован пытается повторить через пару секунд.

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

В perl для это есть функция flock
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8204
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

Это не очень хороший метод. На самом деле в ОК есть встроенный механизм общения между экземплярами ОК, т.н. bus. Но я не умею им пользоваццо. ((
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
Free Goods
Разработчик
Сообщения: 32
Зарегистрирован: Пт дек 22, 2006 8:31 pm
Сервер RO:: iRo
Контактная информация:

Сообщение Free Goods »

Kissa2k, спасибо за совет, использовал flock ^^

piroJOKE, там муторно Т_Т надо описывать структуру или массив, а потом ещё как-то передавать, потом снова представлять в нужном для перла виде. Я думаю, работа с файлом не повлеяет на производительность.

К тому же, можно хранить какую-нибудь отвлечённую информацию без проблем. Например, список тех, кто килстилил мобов.

Только надо бы добавить простой способ срабатывания автомакроса на нужное нам значение в файле.

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

Закончил, написал гайд)
Ответить