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

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

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

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

Сообщение vit »

Модифицировал плагин. Теперь выводимая в лог строка имеет вид:
<id аккаунта> <имя персонажа> <уровень> <профессия> <гильдия> <время> <дата> <локация>
Пример:

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

2000004 Tester1            	lvl: 21	 class: Novice            	guild:                     	19:18:40  18-11-2007	new_zone01
2000005 Tester2            	lvl:  1	 class: Novice            	guild: testers             	19:19:12  18-11-2007	new_zone01
playerRecord.pl:

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

######################################################
# This plugin is licensed under the GNU GPL          #
# Copyright 2005 by isieo.   Modifyed  by  _vit      #
# contact : - isieo <AT> *NOSPAM* G*MAIL <DOT> COM   #
# -------------------------------------------------- #
# -------------------------------------------------- #
# playerRecord.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;
use Settings;

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 $targetGuild = $args->{guild}{name};
    my $maploc = $field{name};
    my $targetLvl = $args->{lv};
    my $targetJob = $args->job;
    my $file = "$datadir/../logs/players.txt";

    my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
    my $year = 1900 + $yearOffset;
    my $timestamp = sprintf("%02d:%02d:%02d  %02d-%02d-%4d", $hour, $minute, $second, $dayOfMonth, $month, $year);

    message "Player logged: ".$targetName."\n";
    if ($Settings::VERSION cmp '1.9.1' >= 0) {
        open FILE, ">>:utf8", $file;
    } else {
        open FILE, ">> $file";
    }
    print FILE sprintf("%d %-20s\tlvl: %2d\t class: %-18s\tguild: %-20s\t%s\t%s\n", $targetId, $targetName, $targetLvl, $targetJob, $targetGuild, $timestamp, $maploc) if ($targetName) ;
    close FILE;
}

1;
Вложения
playerRecord.zip
(1000 байт) 250 скачиваний
Последний раз редактировалось vit Вт дек 18, 2007 7:41 pm, всего редактировалось 3 раза.
Аватара пользователя
piroJOKE
Модератор
Сообщения: 8205
Зарегистрирован: Сб ноя 04, 2006 2:20 am
Сервер RO:: localhost
Откуда: Molvania

Сообщение piroJOKE »

foreach (<FILE>){ ... }

Я думаю, что этот плагин через пару часов работы начнет жестко тормозить комп.
Use brain against brain, ai against ai... · как правильно задавать вопросы · faq · download
vit
Бывалый
Сообщения: 624
Зарегистрирован: Вс мар 25, 2007 9:18 pm
Сервер RO:: localhost
Откуда: Санкт-Петербург

Сообщение vit »

piroJOKE писал(а):foreach (<FILE>){ ... }

Я думаю, что этот плагин через пару часов работы начнет жестко тормозить комп.
Убрал проверку на существование в файле записи об игроке. Теперь тормозить комп не будет. Но будет создаваться запись каждый раз, как мы будем видеть игрока. Из-за этого чуть ухудшится читаемость лога, т. к. будут дублироваться записи.
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

Хм.. С чего вы это взяли, что что-то будет тормозить? Думаю никаких проблем быть не должно, если проверять на наличие записи об игроке когда мы его видим.
С другой стороны, при каждой встрече будут меняться локации и время встречи, так что проверка как бы и лишняя будет..

Вообще в идеале очень практично бы сделать html-лог в виде таблицы в которой отображаются все проходившие и небольшая кнопка, по нажатию которой вызывается javascript функция, которая покажет pop-up окно со всеми локациями и временем встречи с указанным игроком. Это было бы вообще шикарно :)

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

Сообщение vit »

Kissa2k писал(а):Хм.. С чего вы это взяли, что что-то будет тормозить? Думаю никаких проблем быть не должно, если проверять на наличие записи об игроке когда мы его видим.
Ну, скажем если файл с именами большого размера(например если он не чистился неделю) и бот проходит по пронте, где стоит куча торгашей и каждый раз выполняется поиск в файле... наверно все-таки будет лагать.....

Добавлено спустя 2 минуты 24 секунды:
Kissa2k писал(а):С другой стороны, при каждой встрече будут меняться локации и время встречи, так что проверка как бы и лишняя будет..
Имелось в виду не лишняя?
Аватара пользователя
Kissa2k
Профессионал
Сообщения: 1304
Зарегистрирован: Пн дек 04, 2006 8:33 pm

Сообщение Kissa2k »

vit писал(а): Имелось в виду не лишняя?
Ну как бы плагин предназначен не только для записи ников всех проходимцев, но и времени встречи с именем локации, иначе какой толк от него?
Fearless
Энтузиаст
Сообщения: 76
Зарегистрирован: Вт окт 05, 2010 5:39 pm
Сервер RO:: aRO

Re: alertSound - звуковая сигнализация событий

Сообщение Fearless »

Также, по непонятным причинам, не работает playerRecorder (до обновления был playerRecord), а именно не создает лог-файла.
Fearless
Энтузиаст
Сообщения: 76
Зарегистрирован: Вт окт 05, 2010 5:39 pm
Сервер RO:: aRO

playerRecorder.pl

Сообщение Fearless »

Согласен лишь отчасти, так как судя по поиску, эта проблема уже возникала на более ранних изменениях в опенкор. Заключается в том, что в городе плагин фиксирует плееров (в консоли), но не пишет лог, а на качевых локациях даже не фиксирует.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: alertSound - звуковая сигнализация событий

Сообщение EternalHarvest »

Fearless писал(а):а на качевых локациях даже не фиксирует
А они в принципе видны в openkore-то?
Fearless
Энтузиаст
Сообщения: 76
Зарегистрирован: Вт окт 05, 2010 5:39 pm
Сервер RO:: aRO

Re: alertSound - звуковая сигнализация событий

Сообщение Fearless »

Eternal, если нас конечно не покарают за оффтоп - кто виден ? Плееры, которые должны логироваться ? В городе -да, видны, правда по-новому (раньше была информация "Player *nickname* logged" , а сейчас Exist player *nickname*), а на локациях с мобами - нет.
Кстати нет, немного вру (хотя готов поклясться, что плагин не видел плееров на локах, так как вчера я специально следил за этим. возможно проблема в каком-то таймауте - скажем слишком быстрый винг) сейчас нашел в логах консоли

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

[Oct 4 03:56:47 2011.74] [03:56] Teleporting due to idle
[Oct 4 03:56:47 2011.83] [03:56] Player Exists: skidbenz (242125)
[Oct 4 03:56:48 2011.13] [03:56] Map Change: mjolnir_12.gat (180, 107)
[Oct 4 03:56:48 2011.17] [03:56] Map loaded
[Oct 4 03:56:48 2011.62] [03:56] [dist=7.6] Monster Hunter Fly (0): *...*
Однако рекорд файл не создается автоматически как раньше.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: alertSound - звуковая сигнализация событий

Сообщение EternalHarvest »

А всё потому что не стоит просто так ломать совместимость и делать такие недокументированные изменения (что они дали-то?):
http://openkore.svn.sourceforge.net/vie ... threv=7726
http://openkore.svn.sourceforge.net/vie ... threv=7726

playerRecorder, впрочем, после этого исправлен, а вот в других плагинах появились интересные выражения вроде "$args->{player}position()->{x}".
Fearless
Энтузиаст
Сообщения: 76
Зарегистрирован: Вт окт 05, 2010 5:39 pm
Сервер RO:: aRO

Re: alertSound - звуковая сигнализация событий

Сообщение Fearless »

Eternal, ввиду того, что изучение перла я все-таки не стал завершать, все эти ссылки для меня (при поверхностном взгляде) еще ничего не говорят, но суть не в этом. Мне просто хочется понять твой комментарий насчет "поломки совместимости" - к кому он относится ? Я честно и откровенно еще ничего не ломал (болею и нет ясности мысли), то есть - скачал последнюю версию опенкор, скачал последнюю (лежавшую на сурсе) версию плагина, поэтому чуть-чуть расшифруй чей тут косяк и в чем он (примерно) заключается, а дальше ... дальше буду сам делать выводы.
Спасибо.
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

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

Это называется "кому надо тот поймёт".. камни были в мой огород :)
EternalHarvest, я изменях hook для того чтобы он был похож на все остальные, так сказать привёл к "стандарту"
было "my $targetId = unpack("V1",$args->{ID});"
стало "my $targetId = $args->{player}{nameID};"
вроде второй вариант более понятный и логичный

в общем качайте плагин ещё раз с SVN. я проверил - теперь файл создаётся

только есть одна проблема. EternalHarvest, нужна помощь!
смотри, в файле "ServerType0.pm" есть 2 хука "charNameUpdate" - в функции "actor_info" и в функции "actor_name_received"
если срабатывает хук из первой функуии - то плагин playerRecorder.pl работает нормально

если срабатывает хук второй функции (actor_name_received), то плагин уже не может не ID (my $targetId = $args->{player}{nameID};), не имя (my $targetName = $args->{player}{name};) игрока.
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

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

Сообщение EternalHarvest »

4epT писал(а):было "my $targetId = unpack("V1",$args->{ID});"
стало "my $targetId = $args->{player}{nameID};"
Было "$args->{nameID}", ну да не суть уже.
в файле "ServerType0.pm" есть 2 хука "charNameUpdate" - в функции "actor_info" и в функции "actor_name_received"
если срабатывает хук из первой функуии - то плагин playerRecorder.pl работает нормально

если срабатывает хук второй функции (actor_name_received), то плагин уже не может не ID (my $targetId = $args->{player}{nameID};), не имя (my $targetName = $args->{player}{name};) игрока.
Странно. Посмотри, что будет выводить "use Data::Dumper; print Dumper $args->{player}".
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

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

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

не, нефига было именно "my $targetId = unpack("V1",$args->{ID})"

с Dumper'ом вечерком попробую
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
Ответить