したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

【会員制】ZeazyUO総合スレ03【shadow氏】

89名も無きチーター:2018/03/28(水) 00:03:24 ID:P5CwS/2c0
確かにテキストボックスの位置も変わりましたよね。

アカウントを切り替えることはないので、そっちの分岐には行かず、
パスワード入力→Enter の方しか試していませんでした。
>88 さんの方法でアカウント名付きでもログイン成功しました。
情報ありがとうございます。

90名も無きチーター:2018/05/01(火) 23:47:12 ID:lS8B5fpk0
ZzEuo.pathfind が動作しないので uohook5.dll に代替機能を実装しました
PostMessage で動作するため ZeazyUO のスクリプト内から直接呼ぶことも可能です

ttps://www.axfc.net/u/3907427

修正履歴
- Pathfind による自動移動機能を追加
- プレイヤーのZ座標を取得するメソッド UOHOOK_GetZLoc() を追加
- それぞれの仕様は同梱のドキュメントを参照

EUO と同じ方式ですがメモリ書き換えは行っていません
実験的な機能追加のため、予告なく仕様変更する可能性があります
デバッグにご協力ください

PASS:この投稿の中にキーワードがあります
SHA1:33EB9E75C400AC4CBB03CED1D76F45E7C166299C uohook5_20180501_src.zip

91名も無きチーター:2018/05/02(水) 00:17:07 ID:Eu1I19OQ0
結果的に動作しなかったので、自分用メモ

- EUO のソースを見ると pathfind 機能は client.exe v6.0.6.2 より前と以降との2つのタイプがある
- ZzEuo.pathfind は恐らく前者のタイプで実装されているので現在は動作しない
- 前者のタイプは 0x53,0x55,0x56,0x57 (push ebx; push ebp; push esi; push edi;) という特徴的なバイト列を持つ
- ZeazyUO.exe 内ではこのバイト列は 1ヶ所しかない
- この 4 byte を 0x90,0x90,0x90,0x90 (nop) に変えたが ZzEuo.pathfind は動作しないまま
- 多分、この場所に到達する前のどこかで動作していない
- ZzMapData.getZ も動作していないので、そっちも怪しそうだが力尽きた

ソースが無いものをバイナリ変更するより、ソースがある方を書き換えるほうが楽
爺のソースが見たいなぁ。あと FL系のソースも見たい

[参考]
EUO の pathfind の実装
ttps://github.com/EUOCheffe/easyuo/blob/master/uo/uoevents.pas#L379

UOInterface の pathfind の実装
ttps://github.com/jaryn-kubik/UOInterface/blob/master/UOHooks/OtherHooks.cpp#L66

92名も無きチーター:2018/05/02(水) 00:31:50 ID:Eu1I19OQ0
デバッガでアタッチしてたら警告が出た
ビビリなのでエミュ鯖ですが・・・本番サーバーでも出るかもですね

ttps://www.axfc.net/u/3907468

爺の更新が止まっても uohook 側で機能追加していく道筋は示せたかも

93名も無きチーター:2018/05/13(日) 11:32:13 ID:SFM0Iuu60
おかげさまでZeazyUOが今でも使えるようになっていますが
ZeazyUOがパケットF7に対応していないため、
HSタイプの船などでオブジェクトを認識していないようです。
(船倉のモデルやidがとれない)

パケットF7はパケットF3を複数内包している形なので、
ためしにその分を丸ごと切り出して渡してみましたが
連結されたパケットを許容していないZeazyには反映されませんでした。

どのようにしたらいいものでしょう・・・。

94名も無きチーター:2018/05/13(日) 19:06:10 ID:SFM0Iuu60
ZeazyUOがGuideではなくPOLに準拠した処理が原因だったようです。

uohook5.cppで
*(u16*)(p+ 9) = pf3->amount1;
*( u8*)(p+11) = 0; // ZeasyUO用にここ追加
//*(u16*)(p+11) = pf3->x |= 0x80000000; //ZUOスレ 532様のオリジナルの修正
としたら(確認した範囲では)モデルやカラーが取得できました。
ただし、やはり古いせいかモデルが0x8000以上のものでは
その値を引いたものとして扱わないといけないようです。

95名も無きチーター:2018/05/14(月) 00:09:33 ID:E9iIDOHE0
検証ありがとうございます。
HS を持っておらず、何が問題なのかついていけてないのですが、
F7 が来たら F3 を複数送信するようにしてみたら、UOHOOK の F3 to 1A の処理でうまくいってなさそう、
ということですか?

で、POL のこの処理を実装したら、HSタイプの船のデルやカラーが取得できました、ってことですか?

If (Graphic & 0x8000)
BYTE Increment Counter (increment graphic by this #)

あと、質問ばかりですみませんが、↓はスクリプト内での話ですか?

>ただし、やはり古いせいかモデルが0x8000以上のものでは
>その値を引いたものとして扱わないといけないようです。

ZeazyUO 本体は POL 準拠というのが分かったのはとても有用です
POL 準拠の上記処理を入れることは可能です

96名も無きチーター:2018/05/14(月) 00:46:45 ID:E9iIDOHE0
連投すみません

> *( u8*)(p+11) = 0; // ZeasyUO用にここ追加

↑は、パケット 1A に一つフィールドを追加したってことですよね
で、F7 to F3 to 1A のときは、multi だから 0 をセットしても、たまたま動いたってことでしょうか?

multi 以外で model_id が 0x8000 を超えた時に、何の値セットすればよいのか不明で、ちょっと困ってしまいました
ちなみに Razor は model_id & 0x7FFF としていて、フィールドを追加することはないようです(見てるソースが古いかもですが)

9794:2018/05/14(月) 07:25:22 ID:wZKjVyD20
>>95
>ZeazyUOがGuideではなくPOLに準拠した処理が原因だったようです。
すみません、私の勘違いです。
よく読んだらGuideもPOLも表現が違うだけで、同じでした。

今回の発端はアクセスできるオブジェクトのモデルIDに
0x8000以上の値をもつものが追加されていたことによるものです。
(簡単に見た限りでは徳之島船の「船倉」が0x916F〜0x9177)

そのため、ZeazyUO側の解釈ではフラグビットが立っているとみなされ、
正常なパケット扱いされずにオブジェクトの登録がされなかったようです。

対処としてF7パケットに対してはなにもせずスルーのまま、
convert F3 to 1Aのところで上記条件の場合にフィールド追加
という形で認識が正常に行われるようになりました。

9894:2018/05/14(月) 08:02:42 ID:wZKjVyD20
追加部分に書き込むべき内容については全く不明です。
クライアント(ZeazyUO)側へのものであることから>>94では
とりあえず0を入れてみた感じです。

https://www.axfc.net/u/3910789?key=1a
としたのが現状で、確認した狭い範囲の中では特に異常はなさそうです。

9994:2018/05/14(月) 08:05:42 ID:wZKjVyD20
訂正:
変更部分ミスってます。構造体の配置間違ってる

100名も無きチーター:2018/05/14(月) 14:03:13 ID:qrIgXOJ60
未確認なため、これらはすべて妄想です

修正案1
  *(u16*)(p+7) = pf3->model_id & 0x7FFF;

修正案2
  if (pf3->model_id & 0x8000)
    *(u16*)(p+11) = pf3->direction;

修正案3
  if (pf3->model_id & 0x8000)
    *(u16*)(p+11) = 0;

※全角空白注意

何れにせよ、スクリプト内では モデルID から 0x8000 を引いた値として認識されるなら、固定長で扱える分、修正案1 が良さそうです
ちなみに、532様のすごいところは、全てのフラグを立てることでパケットを常に固定長として扱えるようにしているところ

[仮説]
- art.mul 内では同じモデルでも、向きや色毎に異なるモデルID を持っているが、クライアント内ではそれらは同一のモデルID(基本モデルID と便宜的に呼ぶ) として扱われている
- 基本モデルID から art.mul 内の向き別・色別モデルID を求めるために、1A の追加フィールド (pf3->direction フィールド) が存在する
- 爺本体がこの追加フィールドを使用していないのであれば、修正案2 と修正案3 はどちらであっても違いはない。(描画のために必要な値で、爺では使用していない可能性が高い)

[制限事項]
- 0x8000 以上のモデルID を持つモデルは、スクリプト内では 0x8000 を引いた値として認識される
例) MODEL.TokunoSensou = 0x916F - 0x8000
- スクリプト内では、本当の 0x116F と 0x916F とを区別できない

101名も無きチーター:2018/05/14(月) 14:06:55 ID:qrIgXOJ60
>98 がリンク切れだったのですが、>100 は、その意図を汲み取ってると思ってます

ちなみに、0x8000 を引いたモデルとして認識されてるなら、アイテム名も変わってしまうんでしょうか?
自分で試せって感じですが…

10294:2018/05/15(火) 00:28:38 ID:20T89R.c0
>>100
修正案1にならってMSBを常時1ないしは0にしてみたところ、
サイズさえあわせておけばとりあえずトラブルはなさそうです。

ざっくり調べたところ、0x8000以上のモデルIDは結構使われているようです。
見た感じUOHS以降に追加されたものがそれにあてはまり、
今現在は0xA12Dまでが使用(準備)されているかと思われます。
なので、特定のオブジェクトを検索する際にはモデルIDだけでは
よろしくない場合もあることを念頭におく必要があるかもしれません。

10394:2018/05/15(火) 00:40:23 ID:20T89R.c0
寝ぼけてたようで>>102の修正です。
件の1バイトはどうやらMultiオブジェクトにのみ関わるようです

104名も無きチーター:2018/05/15(火) 02:07:14 ID:JTc0QdvE0
検証ありがとうございます。とても助かります。
当方でも試したところ

修正案1 (追加フィールド無し)は、
- ルナ場内の Moonstone Crystal も徳之島船の船倉 cargo hold も認識しなかった

修正案2 と修正案3 (追加フィールドあり)は、
- 両方ともルナ場内の Moonstone Crystal を 0x9CBB ではなく 0x1CBB としてを認識した
- 両方とも徳之島船の船倉 cargo hold を 0x916F ではなく 0x116F として認識した
- ただ、ヘイブンの徳之島船の船倉は時々うまく検索にヒットしなかった

の結果となりました。94様とは修正案1 の結果が異なるようですが、修正案2 か 3 が無難かもです

別の検証で、pilow (緑地に金色のハート) は、バックパック内では 0x9E1D として認識しますが、
地面に置くと、0x1E1D として認識されます

この辺の違いも考慮してスクリプト書く必要がありそうです
理想は、爺本体のバイナリ書き換えたいですが大変そう…

あと、0x8000 を超えるモデルID については、当方でも画像を作りましたので参考まで

ttps://dotup.org/uploda/dotup.org1533922.jpg.html
ttps://dotup.org/uploda/dotup.org1533923.jpg.html
ttps://dotup.org/uploda/dotup.org1533924.jpg.html

105名も無きチーター:2018/05/16(水) 02:08:03 ID:b/fPLQPA0
ZeazyUO.exe のバイナリ変更

66 25 FF 7F 66 89 43 0C 66 3D 06 20
でバイナリサーチすると(爺のバージョンによらず) 1ヶ所に絞れると思う
そこを下記のように書き換え (FF 7F を FF FF)
66 25 FF FF 66 89 43 0C 66 3D 06 20

意味は eax &= 0x7FFF を eax &= 0xFFFF に変更
この変更と uohook5.cpp ソースの修正案2 か 3 の変更とを合わせると
地面のアイテムも 0x8000 引いた値とならず、元のモデルID で認識されました

解析結果は別途あげるかも
ほんと、94様のおかけです

106名も無きチーター:2018/05/20(日) 20:08:11 ID:dYAM8.eM0
>>105様によるZeazyUO.exe書換え情報のおかげで、
モデルIDの取得・判別はうまくいくようになりました。
ありがとうございます。

なお、パケットF6を受信してもZeazyがスルーしているため、
船の移動時に自身ないしは同乗しているオブジェクトの位置情報が
更新されないという不具合もあったりします。
ただこれはZzInfo.getXYFromMemoryをオンにしてやれば
追従してくれるので問題はなさそうです。

107名も無きチーター:2018/05/23(水) 02:33:53 ID:mCrbBH6c0
報告ありがとうございます。動いているようでよかったです。

F6 については 爺もハンドリングしてませんし、uohook 側での対応も難しそうそうなので
>106 の対処法が良いように思います。

(船の座標が変わった後、サーバーからプレイヤーの座標更新パケットが来るわけではなく
パケットのやり取り無しに、クライアント内部でプレイヤーの座標を再計算しているぽい?)

(爺内の座標とクライアント内の座標がずれたときは、何でもいいのでパケット受信すれば、
同期される作りになっています。なので、open paperdoll とか open status とか適当に
送信するのでもいけそうですが、それより >106 の方法が簡単ですね)

話変わって、パケット 78 についても潜在的には 1A と同じ問題を抱えていて
装備品やペットで 0x8000 以上のモデルID の場合 0x8000 を引いた値で認識される気がします。

まあ、今は問題起きてないようなので、その時が来れば修正する感じですかね

108名も無きチーター:2019/09/18(水) 17:12:59 ID:/PTDBW8w0
パケットを、使って直接ログインさせたいのですが、何か参考になる情報は無いでしょうか。

爺の公式が健在な頃に落としたスクリプトは、クライアント上でID PASを入力する方式でした。
色々思案してるのですが、解決できません。

109名も無きチーター:2019/09/19(木) 01:24:00 ID:5jET.t2A0
C->S: 0x80: Account Login Request (Login Request)
S->C: 0xA8: Servers List (Game Server List)
C->S: 0xA0: Play Server (Select Server)
S->C: 0x8C: Play Server Accept (Connect To Game Server)

* ここまでの接続先IPはログインサーバー、次からの接続先IPはゲームサーバー

C->S: 0x91: Game Server Login
S->C: 0xA9: Characters List (Characters / Starting Locations)
C->S: 0x5D: Play Character (Login Character)

* C = Client, S = Server.
* 0x73 の Ping パケットが時々流れるらしい
* 下記リンク先を参考にしただけで、実際に試したわけではないので誤っている可能性があります
* Razor でパケット記録して観察するとよいと思います

ttps://sites.google.com/site/ultimaonlineoldpackets/protocol/login-server
ttps://sites.google.com/site/ultimaonlineoldpackets/protocol/game-server-login

110名も無きチーター:2019/09/19(木) 14:26:28 ID:lgHvX2bM0
>>109
ありがとうございます。

頂いた情報を元に、トライして見ます。

111<垢ぼ〜ん>:<垢ぼ〜ん>
<垢ぼ〜ん>


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板