плагин SOS - забанили->предупреди остальных.

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

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

Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

плагин SOS - забанили->предупреди остальных.

Сообщение Rumata »

вобчем забанили мну седня двоих любимых ботов на одной локе, посмотрел логи - кинули их в тюрьму с интервалом в 6 секунд. В связи с этим написал плаг (на основе старых плагов и идей).

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

#sos.pl
#sos -- console command thats write word 'PRISON' to D:/ALARM.ini
#if in file D:/ALARM.ini exsist word 'PRISON' all bots with this plugin receive console message "one of us in turma"
#may be usefull for a lot of bots you want to quit if one of them have moved to prison by GM
#using automacro  with condition console /one of us in turma/
#thanks to ME (Rumata)

package sos;

use strict;
use Fcntl qw (:flock);
use Plugins;
use Log;
use Commands;
use Utils;
use Globals;
use Time::HiRes qw(time);

my $Timecount;

Plugins::register('sos', '', \&Unload);

my $chooks = Commands::register(
	['sos', "", \&inisos]
);

my $hooks = Plugins::addHooks(
	['mainLoop_pre', \&call]
);

sub call {
	if ($Timecount eq'') {
		$Timecount = time;
	}
	return if (!timeOut($Timecount, 1));
	open (FILE,"D:/ALARM.ini");
	flock(FILE, LOCK_SH);
	my $aa = <FILE>;
	flock(FILE, LOCK_UN);
	close (FILE);
	if ($aa =~ "PRIS") {
		Log::message("one of us in turma\n");
	}
$Timecount = '';
}

sub inisos {
	open (F,">>D:/ALARM.ini");
	print F "PRISON";
	close (F);
	return 1;
}

sub Unload {
	Commands::unregister($chooks);
	Plugins::delHooks($hooks);
}
что он делает(пример):

automacro gmDetected {
console /from sec_pri|MAP Name: sec_pri|You have been forced to disconnect by/
priority 0
exclusive 1
timeout 3
call gmAlert
}

macro gmAlert {
do sos
}

по команде sos пишеться в файл D:/ALARM.ini слово "PRISON" (если файла нет, то он создается), теперь все боты у которых есть данный плагин будут раз в секунду выдавать в консоль себе сообщение "one of us in turma".

ну и им соответственно ставим блок:

automacro friendBANNED {
console /one of us in turma/
priority 1
exclusive 1
timeout 3
call Svalivaem
}

macro Svalivaem {
do quit
}

замечу, проверка файла на слово PRISON осуществляется раз в секунду.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Можно использовать bus-сервер.
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

можно тока никто толком не знает как... а здесь все просто и наглядно
Аватара пользователя
kLabMouse
Профессионал
Сообщения: 4776
Зарегистрирован: Вс ноя 05, 2006 4:32 pm

Сообщение kLabMouse »

Rumata
Вообще-то по БАСу есть куча документации, и автодокументации.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Прикрепляю автодокументацию к 6574.
Вложения
srcdoc.zip
Автодокументация.
(194.28 КБ) 184 скачивания
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

спасибо большое Kissa2k, а то как всегда вместо того чтобы поискать инфу придумываю свое :)
Аватара пользователя
kinikik
Грамотный
Сообщения: 233
Зарегистрирован: Сб июн 07, 2008 11:53 am
Откуда: Н-Н

Сообщение kinikik »

чтот не до конца понимаю для чего плагин?
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

kinikik писал(а):чтот не до конца понимаю для чего плагин?
Если забанили одного бота, то все боты на твоем компьютере сразу отключаются.
Аватара пользователя
kinikik
Грамотный
Сообщения: 233
Зарегистрирован: Сб июн 07, 2008 11:53 am
Откуда: Н-Н

Сообщение kinikik »

интересно как это реализовывается, если запущено много ОК ? каким образом одна ОК передает это другой?
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

2kinikik, все очень просто если бота забанили (угодил в тюрьму, хилят моба, дисконнектнул ГМ - это пишеться в автомакросе), он командой sos создает файл ALARM.ini в данном прмере на диске D:/, и пишет в него слово PRISON, все остальные боты с данным плагином (хоть 10 хоть 50 штук), каждую секунду обращаются автоматически к этому файлу, и если он существует и в нем есть слово PRISON, то плагин в консоль каждую секунду им кидает фразу "one of us in turma", ну и вылавливая ее автомакросом ты можешь делать что угодно с остальными ботами, в моем случае я их просто дискаю. для связи между разными ботами используется внешний файл вобчем.
Аватара пользователя
kinikik
Грамотный
Сообщения: 233
Зарегистрирован: Сб июн 07, 2008 11:53 am
Откуда: Н-Н

Сообщение kinikik »

спасибо, интересная идея)) а на нагрузку проца влияет?
Fury Fox
Энтузиаст
Сообщения: 102
Зарегистрирован: Сб июн 16, 2007 8:02 am

Сообщение Fury Fox »

Еще как. Можешь увеличить значение таймаута здесь

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

return if (!timeOut($Timecount, 1));
[Rumata, я правильно показал?]
Тогда загрузка будет меньше.
Aivos
Грамотный
Сообщения: 204
Зарегистрирован: Вс фев 04, 2007 3:19 pm
Контактная информация:

Сообщение Aivos »

Правильно.
Rumata
Грамотный
Сообщения: 235
Зарегистрирован: Ср фев 14, 2007 10:52 am

Сообщение Rumata »

ну один раз в секунду я не думаю что будет влиять сильно на проц, 10 ботов запускал - изменений не заметил в нагрузке.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Rumata
Хех, оказывается это можно ещё найти тут: http://www.openkore.com/srcdoc/index.html
Ответить