罠名判定 のバックアップ差分(No.7)

お名前:

  • 追加された行はこの色です。
  • 削除された行はこの色です。
*このページの目的は? [#na59d9f3]

RO でしばしば実施されている「Wizardry オマージュ」なイベント向けの、「宝箱の罠」対策ネタページです。

これに関しては、いわゆるWebサービスも存在しているのですが、
そちらでキータイプするのがめんどくさいので、Windowsアプリを作ってみました。

**RO_CALFO [#ddb9af4a]
**ROCALFO [#ddb9af4a]


このイベントでは、宝箱を調べると「お」「け」というような形で「罠の名前の1文字〜数文字」がわかり、そこから罠の正確な名前を推測していくメカニズムが提供されています。~
RO_CALFO は、その推測を自動で実施してくれる Windows プログラムです。
ROCALFO は、その推測を自動で実施してくれる Windows プログラムです。

Windows プログラムであるメリットを生かし、ROクライアントの /savechat 機能で出力されたテキストから自動判定するようにしているのが大きな特徴です。

**ダウンロード [#y7acd397]
-[[RO_CALFO ver1.03>http://tomose.dynalias.net/RO/index.php?plugin=attach&pcmd=open&file=RO_CALFO_103.zip&refer=%E6%AB%CC%BE%C8%BD%C4%EA]]
-[[ROCALFO ver1.04>http://tomose.dynalias.net/RO/index.php?plugin=attach&pcmd=open&file=ROCALFO_104.zip&refer=%E6%AB%CC%BE%C8%BD%C4%EA]]

**動作設定のために [#g3b7bb87]

***準備1:ROクライアントの設定 [#p254b891]
ROクライアント上に、RO_CALFOとの連携用のチャットウィンドウを
作成する必要があります。
ROクライアントのチャット領域の右上のほうに小さな+アイコンが
あります。これを押すと、新しいメッセージウィンドウが生成されます

&attachref(窓追加.png);

新しい窓には好きに名前をつけてかまいません(初期状態では Chat_NewTabxxx.txt のような感じのはず)

***準備2:連携する chatファイルの確認 [#a6c7923f]
RO クライアント画面で、/savechat を実施してください。
ファイルエクスプローラーを開いて、チャットファイルのあるフォルダ
(人によりますが、Gravity\RO\chat というような場所)を見てください。
そこに、準備1で作成したウィンドウの名前がついたテキストファイルが
できていることを確認してください。

例:NewTab_2 というウィンドウを作っていたら、Chat_NewTab_2.txt
というファイルがあるはずです。

***準備3:RO_CALFOの設定 [#c09cb90d]
RO_CALFOを起動してください。
「設定」タブを開くと、そこに「監視対象ファイル」という入力欄が
あります。そこに、準備2で確認したファイルをフルパスで指定して
して[設定]ボタンを押してください。

例えば:
C:\Gravity\Ragnarok\Chat\Chat_NewTab_2.txt
・・・というようにです。

***準備4:RO_CALFO 動作を開始させる [#x8cd4228]
RO_CALFO の「調査結果」タブに移動。~
「●監視開始」と表示されているステータスバーをクリックすると
「●監視中…」となります:この状態になると、RO_CALFOが動作を
開始します。

あとは、罠のヒントをROクライアント上で確認したら、そのままクライアントで /savechat すればOKです。

----

#divregion(参考:技術的な話,h1)
*技術的な話。 [#w3feedfc]

**ヒントを切り出す仕組み [#pcb2d258]

基本的には、単にチャットファイルを検索しているだけです。~
宝箱まわりのテキストは ROシステムが自動生成している定型フォーマットなので、わりと簡単です。

ファイル内の文字列を、最終行から順にさかのぼって・・・
-『モンスターを全滅させた。宝箱が出現した』となっている行を、終端として利用します。~
このログ以降〜最新行が、現在の宝箱用のヒント、ということです。
-先頭が『……[』で始まる行が、いわゆるヒントの行。~
--複数プレイヤー==ヒント行も複数行ありうるので、とりあえずバッファにため込みます。

**文字列の比較処理 [#mb16c683]

単純に考えると『ヒントの文字1つずつ』を順に『罠名に含まれるか』チェックすればよさそうですが。~
同じ文字が複数あるケースがあるので、少し頭を使う必要があります。

今回は、文字を1文字ずつソートした文字列を作って、そこから1文字ずつ比較する、というやりかたをしました。~
もっとうまい方法もあるかもしれませんが。

例えば・・・
-『きゅうまのほうよう』という罠名をソートすると『うううきのほまゆよ』。
-ヒントも同様にソート。例えば『ほよ』とか。
--ヒント/罠名とに同じ文字がある場合、それだけここにその文字があるのがポイント。
-上記をもとに、1文字ずつ比較していく。
--ヒントの文字のほうが『奥になる文字』の場合、罠名の文字を読み捨てていく。~
ここでもし終端になってしまったら、その文字が罠名にないことが特定できるので、外れ。
--ヒントの文字のほうが『手前にある文字』の場合、罠名にそのヒント文字が含まれないことが確定なので、外れ。
--ヒントの文字と罠名文字とが同じであれば、ヒット。両方の注目点を1文字ずらす。
---罠名/ヒントに同じ文字が複数あることは、この『シフト』で判定するわけです。


まあそんな感じ。

#divendregion