2004/04/19

なんかのはなし

クラブメンバーになった某氏のはからいにより、魔法実験助手としてひたすらダンプしたバイナリを見ながら仕様を推測して軽くまとめてたりします。

基本的にプログラム書こうが仕様書こうがバイナリ解析しようが常に中途半端で飽きて投げ出す人間なので(それはROやTWも同じだ)、どのぐらいこのほとぼりが続くかは分かりませんが、やっぱりこの手の「頭の体操」てきな作業は楽しいですね。

で、TWのパケットですが、その某氏がROよりも可変長が多いなんてことを言っていましたが、ざっと可変長が多いというより、ROみたいにカチッとした構造体ベースで送ってきてるんじゃなくて(ROの場合パケットタイプによって使わないフィールドもゴミとか詰めて既定のサイズで送ってきます)、本当にバイト単位でフラグにして行き当たりばったり(よく言えば臨機応変)にパケット作っているので、一連の処理の流れとしてパケットを解析しなければならないようで、これがなかなか面倒。

たとえば、ROならギルドに入っていたらそれ専用のパケットでキャラ情報を、入っていなかったら普通のパケットでキャラ情報を飛ばしてきますが、TWは全部同じ識別OPのパケットに入ってきまして、そのパケットにセッションID(ROと違ってTWはセッションIDベースです)、キャラ座標、キャラタイプ、マスターIDとキャラIDを文字列で送ってくるのは共通ですが、その次にクラブ加入しているかどうかのフラグ、加入していればクラブ名とエンブレム情報、呼称があれば呼称情報がついてきます。クラブ非加入ならなんもついてません。そのあと装備情報が最大8カ所分飛んできて(これもビットフラグになってて装備してる箇所だけ飛んでくる)、あと謎のデータのあとに看板情報という感じになってまして(とりあえずそんなわけでキャラ情報パケットは読めたっぽい)、解析する方には面倒そうな仕様になってるようですね。

まぁ、だからどうしたといわれると困るんですが、画面内チャットはセッションIDとメッセージが送られてくるので名前情報がついてないって事でして、ROとちがって名前情報要求sendパケットもないので(というか、パッシブに飛んでくるモノだから)そのへんがよつばが途中起動で画面内チャットをうまく保存できない理由のようです(仕様としか言いようがないですね)。チーム、クラブ、1:1、耳打ちは名前付きで飛んでくるのでこっちは問題なく保存できるようですね。

あ、ちなみに書いておきますと、TWで送られてくるキャラ情報では、キャラレベル情報は含まれておりません。まぁ、当たり前といえば当たり前ですけど、オーラ表示するだけのためにキャラレベルをサーバーからこっそり送るようになったROは一体何を考えてるんでしょうなぁ、とか思ってたんですが、なんか取引時に相手のレベル表示とかいう機能も海の向こうでは実装されてるみたいですね。意味あるのか知りませんけど。それ以前にROはいまだにAIDベースで通信ですか、とか思ったけど、TWもROでいうところのAIDの文字列がゲーム内でみれるからどっちもどっちですかね。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac