- UO のパケットは基本的に big endian (ネットワークバイトオーダー)
- ただし length フィールドの 2 byte だけ little endian 、という変態仕様
- 一方 uohook では、全てのフィールドを big endian で扱えるように length の 2 byte を BE から LE に変換している
- ただし、これも片手落ちで、クライアントからサーバへのパケットだけは変換していない
- つまり
- server to client : ツール側では全てを BE として扱える
- uohook to client : ツール側では全てを BE として扱える
- uohook to server : ツール側では全てを BE として扱える
- client to server : length の 2 byte のみ LE として扱う必要がある
- UOHOOK_GetPacketLength の戻り値は LE
- 対応策としては
- client to server のときは、length フィールドの長さ(BE)を使わず、UOHOOK_GetEvent の第二引数や UOHOOK_GetPacketLength の戻り値を長さ(LE)として使用する
- ちなみに、
- uohook5s は client to server のときも BE に変換している
- つまり全てのケースで BE として扱える
- uohook5s の作者様が互換性が無いと言っているのはこのこと (uohook5s の client to server の length は BE)