Страница 1 из 1

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

Добавлено: Сб дек 22, 2007 11:42 pm
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".

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

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

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

В perl для это есть функция flock

Добавлено: Вс дек 23, 2007 12:31 am
piroJOKE
Это не очень хороший метод. На самом деле в ОК есть встроенный механизм общения между экземплярами ОК, т.н. bus. Но я не умею им пользоваццо. ((

Добавлено: Вс дек 23, 2007 10:30 am
Free Goods
Kissa2k, спасибо за совет, использовал flock ^^

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

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

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

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

Закончил, написал гайд)