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

Добавлено: Вт дек 18, 2007 12:12 am
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;

Добавлено: Вт дек 18, 2007 10:54 am
piroJOKE
foreach (<FILE>){ ... }

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

Добавлено: Вт дек 18, 2007 7:53 pm
vit
piroJOKE писал(а):foreach (<FILE>){ ... }

Я думаю, что этот плагин через пару часов работы начнет жестко тормозить комп.
Убрал проверку на существование в файле записи об игроке. Теперь тормозить комп не будет. Но будет создаваться запись каждый раз, как мы будем видеть игрока. Из-за этого чуть ухудшится читаемость лога, т. к. будут дублироваться записи.

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

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

Оффтоп: размер прикрепленного файла ровно 1000 Байт! :)

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

Добавлено спустя 2 минуты 24 секунды:
Kissa2k писал(а):С другой стороны, при каждой встрече будут меняться локации и время встречи, так что проверка как бы и лишняя будет..
Имелось в виду не лишняя?

Добавлено: Вс июн 29, 2008 4:59 pm
Kissa2k
vit писал(а): Имелось в виду не лишняя?
Ну как бы плагин предназначен не только для записи ников всех проходимцев, но и времени встречи с именем локации, иначе какой толк от него?

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

Добавлено: Пн окт 03, 2011 6:00 pm
Fearless
Также, по непонятным причинам, не работает playerRecorder (до обновления был playerRecord), а именно не создает лог-файла.

playerRecorder.pl

Добавлено: Вт окт 04, 2011 1:56 am
Fearless
Согласен лишь отчасти, так как судя по поиску, эта проблема уже возникала на более ранних изменениях в опенкор. Заключается в том, что в городе плагин фиксирует плееров (в консоли), но не пишет лог, а на качевых локациях даже не фиксирует.

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

Добавлено: Вт окт 04, 2011 1:35 pm
EternalHarvest
Fearless писал(а):а на качевых локациях даже не фиксирует
А они в принципе видны в openkore-то?

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

Добавлено: Вт окт 04, 2011 2:42 pm
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): *...*
Однако рекорд файл не создается автоматически как раньше.

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

Добавлено: Вт окт 04, 2011 3:55 pm
EternalHarvest
А всё потому что не стоит просто так ломать совместимость и делать такие недокументированные изменения (что они дали-то?):
http://openkore.svn.sourceforge.net/vie ... threv=7726
http://openkore.svn.sourceforge.net/vie ... threv=7726

playerRecorder, впрочем, после этого исправлен, а вот в других плагинах появились интересные выражения вроде "$args->{player}position()->{x}".

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

Добавлено: Вт окт 04, 2011 10:09 pm
Fearless
Eternal, ввиду того, что изучение перла я все-таки не стал завершать, все эти ссылки для меня (при поверхностном взгляде) еще ничего не говорят, но суть не в этом. Мне просто хочется понять твой комментарий насчет "поломки совместимости" - к кому он относится ? Я честно и откровенно еще ничего не ломал (болею и нет ясности мысли), то есть - скачал последнюю версию опенкор, скачал последнюю (лежавшую на сурсе) версию плагина, поэтому чуть-чуть расшифруй чей тут косяк и в чем он (примерно) заключается, а дальше ... дальше буду сам делать выводы.
Спасибо.

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

Добавлено: Ср окт 05, 2011 12:54 am
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};) игрока.

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

Добавлено: Ср окт 05, 2011 1:29 am
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}".

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

Добавлено: Ср окт 05, 2011 1:06 pm
4epT
не, нефига было именно "my $targetId = unpack("V1",$args->{ID})"

с Dumper'ом вечерком попробую