GvG結果を集計しよう。

BOTとして優秀なモノの1つ、それはログ取り。
RO内で自分に与えられる情報ならなんでも取得し整理することが出来ます。
そこでBOTの一つの利用方法としてGvG結果のログ取りがあります。
最近ではどのサーバーの掲示板でもBOTのログをそのまま貼り出す方が増えて来ました。
ではもっと整理して一早く情報を貼り出せたらどうでしょうか。

みなさんご存知のように天の声は「GMMessage.txt」に貼り出されます。
例えば↓のようになります。

[Aug 21 21:45:08 2005][S][prt_fild05] 砦 [Valkyrie Realms 1]を [Sky Blue] ギルドが占領しました

「整理」する為にはここから最低「時間」「砦名」「ギルド名」を取り出す必要があります。
よってログに残すものを最低限まで削ったほうが良いことになります。
削ってもよさそうな部分は・・月と日付と場所とメッセージ分類の[S]ぐらいでしょう。

そこでkore.plをいじります。
まずchatlogルーチンのgetFormattedDateへ渡す引数を、

("",int(time))

("$type",int(time))

に変更します。
そして、getFormattedDateルーチンの、

if ($type eq "s" && $localtime[2] == 9 && $localtime[1] > 0){
return;
}
を削除・・?まぁ使われてないので消しても良いみたい。メンテのなにか?
そして、↓を

$$r_date = "$themonth $localtime[3] $localtime[2]:$localtime[1]:$localtime[0] " . ($localtime[5] + 1900);

if ($type eq "s"){
$$r_date = "$localtime[2]:$localtime[1]:$localtime[0]";
} else {
$$r_date = "$themonth $localtime[3] $localtime[2]:$localtime[1]:$localtime[0] " . ($localtime[5] + 1900);
}

のように変更します。
そうすると「GMMessage.txt」へ書き込む場合、

[21:45:08] 砦 [Valkyrie Realms 1]を [Sky Blue] ギルドが占領しました

のようにスッキリします。

そして次にこのログを整理するプログラムを作る必要があります。まぁkore内部でやっても良いのですがもう1つplファイルを作ります。↓
e0056993_18495545.jpg






内部はこのようになっています。↓

#↓GMMessage.txt読み込み。
おーぷん (INFO,"GMMessage.txt");
while () {
#↓砦ログを一文づつ取り出し、「時間」「砦」「ギルド」に分割しデータを収集する。
if (/(\d\d\:\d\d\:\d\d)\]\s砦\s\[([a-zA-Z-]{5,}\s[a-zA-Z]{5,}\s[1-5])\]を\s\[([^\]]*)/){
$castle{$2} = "$3"; #現在の砦取得ギルド更新
$castle{$2}{'count'}++; #砦落城回数更新
$guild{$3}++; #ギルド別砦取得回数更新
}
}
close (INFO);
#↓砦の順番を整理。
@castle = sort keys %castle;
#↓砦取得回数の多いギルドが上に来るように整理。
@guild = sort{$guild{$b} <=> $guild{$a}} keys %guild;
#↓gvg_result.txtに集計結果を書き込む。
#同一フォルダに「gvg_result.txt」が出来ます。

おーぷん (INFO,">gvg_result.txt");
print INFO "[最終確保ギルド(落城回数)]\n";
foreach (@castle){
print INFO "$_ ★ $castle{$_} $castle{$_}{'count'}回落城\n";
}
print INFO "[砦別取得回数]\n";
foreach (@guild){
print INFO "$_ ★ $guild{$_}回\n";
}
close (INFO);

かなり汚い、、特に正規表現は最近手を出したのでぐちゃぐちゃです。
抽出できればOKみたいな?
抽出したデータは$1=時間 $2=砦 $3=ギルドとなります。
今回は時間データを利用していません。遅延防衛や最初に取得しているギルドも考慮にいれないといけなくなるので。途中青文字の「おーぷん」というのがありますが、実際には「open」です・・・セキュリティ上このブログでは使用不可のようで(´Д`;

これの実行結果が↓
e0056993_18502559.jpg


























ギルド名は灰色で隠してあります。

おっと、[砦別取得回数]じゃなくて[ギルド別取得回数]です。
つまりレース状況。
このようにBOTを使えば攻城戦終了1分後に集計結果を掲示板等に貼り付けることが出来ます( ´ー`)
ただし注意が1つ。
これは落城ログから作成するもので、最初に砦を取得していたギルドを考慮にいれていません
よって、1回も落城しなかった砦の部分はデータが抜け落ちます。
抜け落ちていたらその砦の1週間前の情報をコピペすればOKでしょう。
ちなみに動作確認は1回のみ・・はてさて。
[PR]
by chronoship | 2005-08-25 19:11 | kore


<< パケット受信部? 手動マニピコードとはなんぞや >>