以前書いた GINA のリスポーンタイマーをアップデートした。
リスポーン時間をしゃべる機能はかなり鬱陶しかったので削除。また、他にも致命的なバグがあったのを修正。いくつか機能の追加。
最新版を こちら に置いておく。
github に詳しくない人のため、緑色のボタン Code -> Download ZIP でダウンロードしてほしい。
初期設定
まず以前配布していたツリーが残っていると誤動作するため、ツリーのトップを右クリ -> delete。
Overlays タブで Timer Overlays (時計アイコン) を Add、出てきた新規ウィンドウの中央にある黄色い文字「Overlay#x」を「RespawnTimer」に書き換える。また一番下の Sort: で Time Remaining を選択。右上で Save。
Categories タブで Add、Name を RespawnTimer、Timers の Overlay プルダウンで先ほど作成した RespawnTimer を選択。文字の色やバーの色を適当に決める。
Sharing タブで Import -> From GINA Package File でダウンロードした gtp ファイル RespawnTimer.gtp をインポートする。
同様に RespawnTimeDB.gtp もインポートする。
使用したいキャラを左側で選択し、Respawn Time DB のトップにチェック。
Respawn Timer のほうはチェックを入れない。
設定はこれで完了。
使い方
ゾーンしたり「 / 」(who) をすると、そのゾーンのリスポーン時間をタイマーで見ることが出来る。
今ログインしているキャラを左側で選択。
そのゾーンでキャンプをすると決めたとき、Respawn Timer の中からリスポーン時間を探してそれだけチェックを入れる。
例えば Sol-B にゾーンした。キャンプチェックをしたら目的のキャンプが空いていた。
タイマーには「soldungb: 22:00」とあるので、22:00 にチェックを入れる。
モブを殺すとタイマーが 2 本追加される。
モブ名のタイマー: 殺したモブの近くにいたときに拾った slain ログから生成。
^^^^^ というタイマー: xp が得られたときのログから生成。
slain ログが届く範囲はかなり狭い。逆に xp ログが得られる範囲は結構広いが、モブ名はそれに入っていない。slain 範囲にいなくてもせめて何かを殺したことはこれでわかるようにしている。
応用
時間が若干違うモブの PH など、一番最新のタイマーの一つ下にメモを残したい場合
/em ##freeti
キャンプ地を変えるときなどタイマーを全部消したい場合は、
/em ##reset
slain が拾えない距離で座っていて動きたくないとき、
/em ## %t
% の前にスペースが必要なのは EQ の仕様で、これがないと % マクロが展開されない。
問題点
このトリガーは slain ログに依拠している。
You have slain Guard Jendl! <-- 自分
Guard Fralldo has been slain by Xabab! <-- 他人
このログが拾える範囲がかなり狭いという根本的な問題。
感覚ではメレーレンジの 3 倍程度は近づいておく必要がある。
タンクやメレーはモブが死ぬ瞬間に近傍にいるため意識することなく機能する。しかし、キャスター・ヒーラーの距離では難しい。このような機能を一番必要とするチェインプルをするプラーは、モブが死ぬ瞬間その場にいないためまず機能しない。
広範囲で拾うことができる xp ログを使って ^^^^^ というタイマーを同時に出すことによりこの問題を緩和している。
構造
GINA はよくできたツールだが、内蔵マクロ・スクリプト言語などの機能が全く備わっておらず、変数もないためトリガー同士の連携が全くとれない。ましてや本件のようにデータベース的に使うには 150 個以上のトリガーを手で書かされる。しかも内容的にはほとんど同じであって、少しの変更も全トリガーに及ぶため保守もできない。
この方法では、そういう弱点を (いささか強引ではあるにせよ) 補うことができる。
前のバージョンは perl で作っていたものの、読める人が少なくなってきたので python で書き直した。文字列操作が楽にできる言語であれば何でもいいだろう。
入力ファイル csv から GINA までの流れはこのようになっている。
csv --> RespawnTimer.py --> xml --> zip --> gtp --> GINA
GINA パッケージファイル gtp は 実は ZIP ファイル で、zip にリネームして unzip すると ShareData.xml というファイルが出てくる。
本スクリプト RespawnTimer.py は csv ファイルから読み込んだリスポーン時間をもとに XML を生成し、それを zip して gtp にリネームしている。スクリプトを作るときはそれの逆順をたどり、まず作りたいトリガーを GINA で作りながら実験し、出来たらそれを export をして ShareData.xml の中身を参考にしながらスクリプトにする。
Respawn Time DB について
ゾーンごとのリスポーン時間は RespawnTimeDB.csv にまとめていて、このファイルが起点になる。例えば unrest だと
# 正式名, 内部名, リスポーン時間
"Estate of Unrest","unrest","22:00"
正式名: ゾーンしたときや / をしたときにログに出てくるゾーン名は正式名称 "Estate of Unrest" なので、
You have entered Estate of Unrest. <-- ゾーンしたとき
There are 24 players in Estate of Unrest. <-- /who したとき
Search でこれを拾っている。
^(You have entered|There (is|are) \d+ player(|s) in) Estate of Unrest\.$
内部名: タイマーにゾーン名を出したい場合はスペースが限られているし、プレイヤーが /who all unrest などとして認識しているのは内部名のほうなので、タイマーにはそちらを出している。
なお、今入ったゾーン以外のタイマーは邪魔なので、都度刈り込む条件も書いておく。
^(You have entered|There (is|are) \d+ player(|s) in) (?!.*Estate of Unrest).+$
Respawn Timer について
まず slain を拾うやつ。
^(You have slain (.+)|(.+) has been slain by .+|{C} (##.*)(|!|.))$
後半は ## のメモに対応するため。また ##reset に対応するために End early text にこれを入れている。
^{C} ##reset\.$
xp ログから ^^^^^ のタイマーを生成するトリガーはこれで拾っている。
^You gain (|party )experience!!$
RespawnTimeDB.csv に全ゾーンのリスポーン時間がある。そこから時間ごとのトリガーを RespawnTimer.py で生成している。
フィードバック
バグや改善案などはゲーム内で tell nekomimi, nagatoyuki, chomusuke
または Discord ぺろ#8035 (ローマ字) まで。
それでは、ハッピー・ハンティング!