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

Создать 'кустомный' лог + запись встреченных игроков

Добавлено: Пт июл 20, 2007 10:13 pm
Cutgun
Вместо вступления...
Есть замечательный плаг ReactOnActor который позволяет боту реагироватьть практищски на всё, ну или на многое =) и конечно можно сделать на каждое из этих событий запись в общем логе. НО просматривать с утра файл ~10 Мб в поисках того как часто и при каких обстоятельствах ботег с кем виделся, это мягко говоря утомительно.
А теперь собственно сабж.
Нужна функиця (команда) позволяющая писать в отдельный лог любые строчки которые ей подпихнут.
З.Ы. Убрать лишнюю инфу из общего лога не предлагать.
З.Ы.Ы Я так думаю это вполне можно сделать из макросов
Что то типа этого...
С синтаксисом я могу и ошибатся

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

ReactOnActor macro MyLog (actor_name, actor_lvl, ....)
{
actor_type player
}
И получаем файл MyLog.txt вида

12.07.07 [22:34:49] Player_X, 93, male, .......

Что на мой взгляд может помочь оценить с утра насколько бот привлекал внимание.

Добавлено: Пт июл 20, 2007 10:24 pm
piroJOKE
Оно может и правильная идея, насчет отдельного лога... но, вот если бы я был на твоем месте, я бы просто поленился это делать. Почему? Да потомушто есть grep.

А еще есть...

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

######################################################
# This plugin is licensed under the GNU GPL          #
# Copyright 2005 by isieo                            #
# contact : - isieo <AT> *NOSPAM* G*MAIL <DOT> COM   #
# -------------------------------------------------- #
# -------------------------------------------------- #
# playerrecorder.pl                                  #
# Records Player's name together with AIDs           #
# Usefull for players to findout other players' other#
# characters...                                      #
#                                                    #
######################################################

package playerRecord;
use strict;
use Plugins;
use Log qw(message);
use Globals;

Plugins::register("prec", "playerRecord", \&on_unload, \&on_reload);
my $hooks = Plugins::addHooks(
        ['charNameUpdate', \&write_player],
);
my $datadir = $Plugins::current_plugin_folder;

sub on_unload {
        # This plugin is about to be unloaded; remove hooks
        Plugins::delHook("charNameUpdate", $hooks);
}

sub on_reload {
}

sub write_player {
        my $hookname = shift;
        my $args = shift;
        my $targetId = unpack("V1",$args->{ID});
        my $targetName = $args->{name};
        my $file = "$datadir\\players.txt";

        my ($uId, $name);
        my $exist=0;
        my $line;
        open FILE, "< $file";
        foreach (<FILE>){
                next if (/^#/);
                s/[\r\n]//g;
                s/\s+$//g;
                $line = $_;
           ($uId, $name ) = $line =~ /^(\d+) (.*)$/;
           if ($uId eq $targetId && $name eq $targetName){
                $exist=1;
           }
        }
        close FILE;
        if (!$exist){
          message $name.$targetName."\n";
          open FILE, ">> $file";
          print FILE "$targetId $targetName\n" if ($targetName) ;
          close FILE;
        }
}

1;
...но я не уверен, что он работает с современным Kore.

ЗЫ: У тебя, афтар, немножко глупый заголовок темы. Я его исправлю.

Добавлено: Пт июл 20, 2007 10:54 pm
Cutgun
Grep это всё таки не то... я сам сейчас чем то подобным и пользуюсь только в отдельный файл не пишусь.

Плагинчег щас попробую.
(Возможности плагина мягко говоря слабоваты =( )

За правку темы спасибо. Сам понимал что криво но в голову ничего не лезло =)

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

К сожалению в перле ни силён... возникла идея переписать плагин который привел ты под произвольно заданную строчку...
с реализацией к сожалению туго...

Добавлено: Пт июл 20, 2007 11:09 pm
piroJOKE
Тебе нужно скрестить два плагина. Этот (выше) и какой-нибудь, регистрирующий новую команду Kore. ;) У нас тут таких хватает, полазь по разделу.

Добавлено: Сб июл 21, 2007 8:46 am
miniBot
PlayerRecorder - работает с последней местной сборкой.

Добавлено: Сб дек 15, 2007 8:54 am
eretik
miniBot писал(а):PlayerRecorder - работает с последней местной сборкой.
не работает

работает, но почему то токо в городе О_о

Добавлено: Сб дек 15, 2007 10:42 am
piroJOKE
Хм.... вообще-то ему пофиг где работать. :o :shock:

Добавлено: Вс дек 16, 2007 3:06 pm
miniBot
eretik писал(а):не работает
вобщет мое утверждение верно для последней июльской сборки, вы хоть когда апаете тему, смотрите на дату последнего поста!

а вобще-т на 6047 прекрасно работает, правда я сделал исправление, но это только касается имени файла, и на функциональность никак не влияет.

Я-бы вобщем вот что сказал-бы по этому поводу. В файл записывается 2 колонки ID и Имя, вот бы добатить еще две, гильдию, и сколько раз встречался.

Добавлено: Вс дек 16, 2007 3:19 pm
Kissa2k
Cutgun
Можешь толково объяснить, что конкретно тебе нужно по пунктам :)

Добавлено: Пн дек 17, 2007 3:25 pm
kisloid
Может кто переделать playerrecorder.pl под современную сборку коры? А то вылезает вот такое при попытке загрузить его(это я его просто в макрос.тхт запихнул)..:

[Dec 17 11:37:43 2007.51] Loading control\macros.txt...
[Dec 17 11:37:43 2007.53] control\macros.txt: ignoring ');' (munch, munch, strange food)
[Dec 17 11:37:43 2007.53] control\macros.txt: ignoring line 'sub on_unload {' (munch, munch, strange block)
[Dec 17 11:37:43 2007.54] control\macros.txt: ignoring line 'sub on_reload {' (munch, munch, strange block)
[Dec 17 11:37:43 2007.54] control\macros.txt: ignoring line 'sub write_player {' (munch, munch, strange block)
[Dec 17 11:37:43 2007.55] control\macros.txt: ignoring '}' (munch, munch, strange food)
[Dec 17 11:37:43 2007.55] control\macros.txt: ignoring line 'if (!$exist){' (munch, munch, strange block)
[Dec 17 11:37:43 2007.56] control\macros.txt: ignoring '}' (munch, munch, strange food)
[Dec 17 11:37:43 2007.57] control\macros.txt: ignoring '1;' (munch, munch, strange food)
[Dec 17 11:37:43 2007.57] [macro] hooking to AI_pre

Добавлено: Пн дек 17, 2007 3:30 pm
piroJOKE
kisloid
Если бы ты распечатал его и подтерся бы им, результат был бы тот же - а именно - "не работает"! :x

Плагины ложатся в папку plugins, как файлы с расширениями *.pl, в данном случае можно назвать его так: playerrecorder.pl

Добавлено: Пн дек 17, 2007 4:21 pm
kisloid
Я попробую попозже. Просто сейчас в хкоре1 и останавливать не хочется, ибо потом опять париться с запуском... А релоад можно было сделать из консоли, потому не долго думая код и был запихан в макрос.тхт )))

Добавлено: Пн дек 17, 2007 6:27 pm
kisloid
Да, все работает вроде. ))

Единственное хотелось бы больше инфы, типа
miniBot писал(а): Я-бы вобщем вот что сказал-бы по этому поводу. В файл записывается 2 колонки ID и Имя, вот бы добатить еще две, гильдию, и сколько раз встречался.
Хотя лично мне интереснее было бы время встречи, может быть место еще ))

Добавлено: Пн дек 17, 2007 7:39 pm
Kissa2k
piroJOKE писал(а):Плагины ложатся в папку plugins, как файлы с расширениями *.pl, в данном случае можно назвать его так: playerrecorder.pl
В документации к Openkore написано, что рекомендуется называть файл с плагином по имени его пространства имен :) т.е. playerRecord.pl
kisloid писал(а):Хотя лично мне интереснее было бы время встречи, может быть место еще
Это несложно - попробуй сделать!

Добавлено: Пн дек 17, 2007 8:11 pm
piroJOKE
Kissa2k писал(а):В документации к Openkore написано, что рекомендуется называть файл с плагином по имени его пространства имен т.е. playerRecord.pl
Угу. Новичкам - Kissa2k имеет в виду запись package имя; в начале тела плагина).
Kissa2k писал(а):
kisloid писал(а):Хотя лично мне интереснее было бы время встречи, может быть место еще
Это несложно - попробуй сделать!
Немного труднее, чем может показаться. Дело в том, что плагин "следит" за тем, чтобы не было дублей записей; выходит, этот контроль надо как-то отменить. Но, если его просто отменить, в лог может записаться много строк подряд - если скажем, кто-нибудь преследует чара.