![]() |
UOLink2 開発者向け情報 | ![]() |
UOLink2と外部ツールの連携仕様を記述します。
UOBInterfaceは、UOLinkが外部連携アプリ用に用意しているインタフェースです。
◎利用方法
アプリからまず、UOLinkにログイン要求を出します。
命令をコマンド形式でUOLinkに発行し、リプライを受け取ります。
アプリ終了時にはUOLinkにログアウトを発行してください。
◎利用条件
本機能の利用に条件はありませんが、使用されたツールを公開される場合にはご一報ください。
◎サンプルプログラム
UOBInterfaceと、UOA連携(UOAInterface)を確認することができます。
開発環境はBorlandC++Builder ver.5.0 です。
(内容は薄いためC++の知識があれば読めると思います)
InterfaceTest.lzh
※ VB用のサンプルプログラムを、ななしん様が作成されています。
VBで開発されている方は参項にどうぞ。
「うおあかのページ」/ ななしん様
基本
ウィンドウ検索
HWND hUOLinkWnd = FindWindow( "TUOLink", NULL );
■ App → UOLink
◎ログイン要求
WM_USER + 600
◎ログアウト要求
WM_USER + 601
◎コマンド
WM_USER + 602
■ UOLink → App
◎ログイン応答
WM_USER + 600
◎コマンド応答
WM_USER + 602
◎Binaryメッセージ
WM_USER + 603
ログイン要求
方向:App→UOLink
MessageID:WM_USER + 600
WParam:ApplicationのWindowハンドル
LParam:なし
ログイン応答
方向:UOLink→App
MessageID:WM_USER + 600
WParam:結果
0:OK
1:NG
LParam:NG時のエラーコード
ログアウト要求
方向:App→UOLink
MessageID:WM_USER + 601
WParam:Windowハンドル
LParam:なし
コマンド発行
方向:App→UOLink
MessageID:WM_USER + 602
WParam:Windowハンドル
LParam:1文字分のデータ('a'とか)
"WaitForOpenContainer"を実行する場合は
'W','F','O','C','\0'
をWM_USER + 602でUOLinkに送信する。
必ず終端に\0をつけなければならない。
コマンド応答(テキスト/非定期あり)
方向:UOLink→App
MessageID:WM_USER + 602
WParam:\0終端の文字列を1文字ずつ送信する
LParam:コマンド応答の種別
非定期レスポンスを持つコマンドを使用する際にチェックすること。
0:一般応答
1:WaitForOpenContainer
2:WatchingMyBackpack
3:WaitForLoginStatus
4:WaitForOpenBook
5:WatchingSkills
非定期メッセージ(バイナリ)
方向:UOLink->App
MessageID:WM_USER + 603
WParam:0=送信開始、1=送信中、2=終了
LParam:WParamが1の時に1バイト分のデータを送信
コマンド一覧
| WaitForOpenContainer | 開いたコンテナの取得 |
| WaitForBulkGump | バルクBOOKの情報を収集 |
| WatchingMyBackpack | バックパックの監視 |
| WatchingSkills | スキル変化を監視 |
| WaitForLoginStatus | ログイン状態の監視 |
| WaitForOpenBook | 開いた本の情報を取得 |
| GetMyInfo | 自キャラの情報を取得する |
| GetMyBackpack | バックパックの内容を取得 |
| GetMyWear | 装備品を取得 |
| GetSkills | スキル値を取得 |
| GetCreatureList | 周囲のクリーチャーを取得 |
| BuyFromPCVendor | PCベンダーから買う |
| DisplaySystemMessage | メッセージの表示 |
| ExecMotion | モーションの実行 |
WaitForOpenContainer(開いたコンテナの情報を収集)
◎書式
WFOC,arg1
◎引数
arg1:
0:コンテナ待ち状態に入る。
1:コンテナ待ち状態を解除する。
◎説明
モード終了を受信するまでコンテナが開かれる度に情報を
アプリに送信する。
送信フォーマット
複数行の文字列を送信するが、1行目の値によって、
2行目以降があるかどうかを判断する。
・1行目:"0\n"の場合
コンテナ情報
\0を受信するまで1行1アイテムで情報が続く。
**2行目以降のアイテム情報**
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n\0
・1行目:"1\n"の場合
UOLinkは要求を受け付けた
すぐに"\0"を送信する。(2行目以降はない)
(これは"WFOC,0"に対する応答)
・1行目:"2\n"の場合
UOLinkは要求を受け付けることができなかった
すぐに"\0"を送信する。(2行目以降はない)
(これは"WFOC,1"に対する応答)
・1行目:"3\n"の場合
コンテナが開かれました(情報収集開始)。
**2行目はコンテナの情報**
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\0
WaitForBulkGump(バルクBOOKの情報を収集)
◎書式
WFBG,arg1,arg2
◎引数
arg1:
0:バルクBOOKガンプ待ち状態に入る。
1:バルクBOOKガンプ待ち状態を解除する。
arg2:
0 : 自動でページをめくらない。(省略時のデフォルト)
1 : 自動でページをめくる。
◎説明
バルクBOOK待ち状態中にバルクBOOKのガンプが開かれた場合、
そのパケット情報を丸ごとAppにBinaryメッセージ(WM_USER + 603)で送信する。
同時に2つ以上のアプリがWFBGを利用している場合、
あとから発行したWFBGのarg2が有効になる。
(これは仕様ミスだけど、今はBODProくらいしか使用するアプリないだろう…
ということでこのまま保留。)
WatchingMyBackpack(バックパックの監視)
◎書式
WMBP,arg1,arg2
◎引数
arg1:
0:監視状態に入る
1:監視状態を解除する
arg2:
監視するモデルIDを":"で区切って指定する。
全てのアイテムを監視する場合は"0"を指定する。
※arg1が1の場合は無効となる。
◎説明
自キャラのBackPackを監視する。
・BackPackにアイテムが出現した。
・BackPackからアイテムが消失した。
UOLinkが上記変化を察知した場合、
コマンド応答(WM_USER + 602)で非定期にアプリに送信する。
送信される内容は以下の通り。
MessageType\tObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\0
MessageTypeが1の場合「アイテムが出現した」とし、
2の場合「アイテムが消失した」とする。
※監視対象はBackPackのルート階層のみ…
例)
// BulkDeed, BulkBookを監視すたーと
WMBP,0,2258:2259
// 監視終了
WMBP,1
// 全アイテムの監視をすたーと
WMBP,0,0
// 監視終了
WMBP,1
WatchingSkills(スキル変化を監視)
◎書式
WSKL,arg1
◎引数
arg1:
0:監視状態に入る
1:監視状態を解除する
◎説明
スキル変化を監視し、変化を察知した場合
コマンド応答(WM_USER + 602)で非定期にアプリに送信する。
送信される文字列の書式は以下のとおり。
SkillName\tBase\tState\tCap\n
SkillName\tBase\tState\tCap\n
...(変化したスキルの数だけ繰り返す)
SkillName\tSkill\tBase\tCap\n\0
WaitForLoginStatus(ログイン状態の監視)
◎書式
WFLS LST,arg1
◎引数
arg1:
0:監視状態に入る
1:監視状態を解除する
◎説明
ログイン/ログアウトを監視し、変化を察知した場合
コマンド応答(WM_USER + 602)で非定期にアプリに送信する。
送信される内容は以下の通り。
・キャラがログインした場合
0\tShardName(IP)\tPlayerID\tPlayerName\0
・キャラがログアウトした場合
1\tPlayerID
WaitForOpenBook(開いた本の情報を取得)
◎書式
WFOB,arg1
◎引数
arg1:
0:ブック待ち状態に入る。
1:ブック待ち状態を解除する。
◎説明
本が開かれた時に、その内容をアプリに送信する。
送信される内容は以下の通り。
Title=タイトル\0 // ←必ずこれが初送信
Author=作者名\0
Page=ページ数\0
ObjectId=オブジェクトID\0 // 16進表記 40faff34 とか
ModelId=モデルID\0 // 16進表記:不明の場合 ffff
ColorId=色ID\0 // 16進表記:不明の場合 ffff
Writeable=書き込み可能?\0 // 値は true か false
Wait=情報読み込みの待ちが発生する?\0 // 値は true か false
for( ページ数 ){
LineNum=このページの行数\0 // ページ毎の最初に送信される
for( 行数 ){
Line=1行の文字列\0 // SJIS変換されている
}
}
※文字列のエスケープはないが、前方一致で「=」を含めて固定チェックすれば無問題。
※読み込み待ちが発生しない(Wait=false)場合
①プレーヤーが本を開く
②アプリにすぐに全ページの情報が渡される
※読み込み待ちが発生する(Wait=true)場合
①プレーヤーが本を開く
②アプリにWait=trueまではすぐに渡される
③UOLinkがページ情報を読み取りながら少しずつ情報をアプリに渡していく
※UOLinkが本の情報を収集中に、別の本を開いた場合
収集中のデータは破棄され、新しい本のTitle=から送信が始まる。
GetMyInfo(自キャラの情報を取得する)
◎書式
GMCI,arg1
◎引数
arg1:
取得する属性タイプを指定する。
"PID":PlayerID
"SNM":ServerName
"PNM":PlayerName
"FAC":Facet
"POS":Position(xLoc : yLoc : Direction)
"HIT":HitPoints(Current/Max)
"MAN":Mana(Current/Max)
"STM":Stamina(Current/Max)
"SDI":STR/DEX/INT (StatusLimit)
"RES":AR/FR/CR/PR/ER
"WEI":Weight(Current/Max)
"GLD":Gold
"LCK":Luck
"FLW":Follower(Current/Max)
"WDM":WeaponDamage(Min-Max)
"STT":State
"BKP":BackpackID
"BNK":BankID
"LOB":LastObject
"LTA":LastTarget
"LAR":LastArmRight
"LAL":LastArmLeft
"LPU":LastPickup
"LCI":LastContainerID
"LSK":LastSkill
"LSP":LastSpell
◎説明
UOBrowser2のTOPタブに表示されているとおりに送信する。
終端は'\0'で判定すること。
GetMyBackpack(バックパックの内容を取得)
◎書式
GMBP
◎引数
なし
◎説明
バックパックの中身を取得する。
返却される文字列の書式は以下のとおり。
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tColor\n\0
'\0'に達するまで、アイテム分だけ\nで区切って送信する。
GetMyWear(装備品を取得)
◎書式
GMWR
◎引数
なし
◎説明
自キャラの装備情報を取得する。
返却される文字列の書式は以下のとおり。
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tLayer\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tLayer\tColor\n
ObjectID\tModelID\tName\tCount\txLoc\tyLoc\tLayer\tColor\n\0
'\0'に達するまで、アイテム分だけ\nで区切って送信する。
GetSkills(スキル値を取得)
◎書式
GSKL
◎引数
なし
◎説明
全スキル値を取得する。
返却される文字列の書式は以下のとおり。
SkillName\tBase\tState\tCap\n
SkillName\tBase\tState\tCap\n
...
SkillName\tSkill\tBase\tCap\n\0
'\0'に達するまで、スキル分だけ\nで区切って送信する。
GetCreatureList(クリーチャーのリストを取得)
◎書式
GCRT
◎引数
なし
◎説明
自分の周囲18マス以内に存在するクリーチャーの一覧を取得する。
返却される文字列の書式は以下のとおり。
CreatureID\tModelID\tName\txLoc\tyLoc\tNotoriety\n
CreatureID\tModelID\tName\txLoc\tyLoc\tNotoriety\n
...
CreatureID\tModelID\tName\txLoc\tyLoc\tNotoriety\n\0
'\0'に達するまで、クリーチャーの数だけ\nで区切って送信する。
※ Notorietyでクリーチャーのネームカラーを判断できる
・0x01 : Blue
・0x02 : Green
・0x03 : Gray
・0x04 : Gray
・0x05 : Orange
・0x06 : Red
・0x07 : Yellow
BuyFromPCVendor(PCベンダーから買う)
◎書式
BFPV,arg1
◎引数
arg1:
オブジェクトID(16進文字列で指定)
◎説明
PCベンダーからアイテムを買う。
このコマンドを発行してもベンダーに買う要求を出すだけで、
確認画面でのボタン押下は行わない。
DisplaySystemMessage(メッセージの表示)
◎書式
SYSM,arg1
◎引数
arg1:
表示するメッセージ
◎説明
システムメッセージを左下に表示する。
例)
// 左下にシステムメッセージを表示
DMSG,めっせーじ
ExecMotion(モーションの実行)
◎書式
XMOT,arg1
◎引数
arg1:
実行するモーションID
以下の番号を指定する。
0:その場で歩く
1:その場で走る
2:辺りを見回す
3:腰に手を当てる
4:挨拶
5:敬礼
6:顔を拭う
7:攻撃スタイル(short)
8:攻撃スタイル(long)
9:ナイフによる攻撃
10:突き上げる攻撃
11:剣による攻撃1(掘り)
12:剣による攻撃2
13:剣による攻撃3
14:槍による攻撃
15:弓による攻撃
16:クロスボウによる攻撃
17:拳を振り下ろす
18:戦闘状態で歩く
19:呪文詠唱
20:両手を上方に広げる
21:攻撃を受けた
22:後ろに倒れる
23:前に倒れる
24:馬に乗る(short)
25:馬に乗る(midium)
26:馬に乗る(long)
27:馬に乗りつつ剣で攻撃
28:馬に乗りつつ弓で攻撃
29:馬に乗りつつクロスボウで攻撃
30:馬に乗りつつ槍で攻撃
31:防御
◎説明
自キャラのモーションを実行する。
↓ 気に入って頂けましたら、クリックをお願いします。


