2012/02/25

UOA ツール 開発 #002 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

基本な流れ

1.UOAに情報ちょうだいとお願いする(UOAにログイン)

 ↓

2.UOAにxxxを教えてとお願いする

 その場で値が戻ってくるのもあるし、

 非同期でウィンドウに通知してくるものもある。

 ↓

3.UOAに情報はもう要らないですとお願いする(UOAからログアウト)


※UOAのログイン数に制限があるので必ずログアウトはした方がいいです。

 デバック時にログインできなくなってしまったらUOA再起動という感じになります。


最低限必要なもの

FindWindow - ログインするときにUOAを見つけるのに必要

SendMessage - UOAにメッセージを送るのに必要

GlobalGetAtomName,GlobalDeleteAtom - UOAから文字列を受け取るときに必要

ウィンドウプロシージャー - 非同期で戻ってくるメッセージを受け取るのに必要



モジュールの定義がまだまだ足りないですが、

取説(UOA Infomation)と雛形(下記コード)があれば

VBが少ししか分からないという人でもある程度作れるのではないかと思う。

Form

Imports System.Runtime.InteropServices
Public Class form_name
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Sub WndProc(ByRef WMSG As Message)
        Select Case (WMSG.Msg)
            Case WM_UOA_RESOURCE_COUNT_FINISHED
            Case WM_UOA_SPELL_WAS_ATTEMPTED
            Case WM_UOA_LOGON
            Case WM_UOA_MAGERY_SKILL_LEVEL
            Case WM_UOA_CURRENT_INT_AND_MANA
            Case WM_UOA_SKILL_LEVEL
            Case WM_UOA_MACRO_FINISHED
            Case WM_UOA_LOGOUT
            Case WM_UOA_CURRENT_MAX_HP_AND_HP
            Case WM_UOA_CURRENT_DEX_AND_STAM
            Case WM_UOA_ADD_HOUSE_BOAT
            Case WM_UOA_FACET_LAND_INFO
            Case WM_UOA_POWER_HOUR_ENTERED
        End Select
        MyBase.WndProc(WMSG)
    End Sub
End Class

Module

Imports System.Runtime.InteropServices
Module module_name
 
    <DllImport("user32.dll", CharSet:=CharSet.Auto, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function FindWindow( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Integer
    End Function
 
    <DllImport("user32.dll", CharSet:=CharSet.Auto, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function SendMessage( _
        ByVal hWnd As Integer, _
        ByVal wMsg As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) As Integer
    End Function
 
    <DllImport("kernel32.dll", CharSet:=CharSet.Unicode, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function GlobalGetAtomName( _
        ByVal nAtom As Integer, _
        ByVal lpBuffer As System.Text.StringBuilder, _
        ByVal nSize As Integer) As Integer
    End Function
 
    <DllImport("kernel32.dll", CharSet:=CharSet.Unicode, _
    CallingConvention:=CallingConvention.StdCall)> _
    Public Function GlobalDeleteAtom( _
        ByVal nAtom As Integer) As Integer
    End Function
 
    Public Const UOA_CLASSNAME As String = "UOASSIST-TP-MSG-WND"
    Public UOA_hWnd As Integer
    Public Const WM_USER As Short = &H400S
    Public Const WM_UOA_REQUEST_DATA As Integer = WM_USER + 200
    Public Const WM_UOA_UCOUNT_RESOURCES As Integer = WM_USER + 201
    Public Const WM_UOA_GET_COORDS As Integer = WM_USER + 202
    Public Const WM_UOA_GET_SKILL As Integer = WM_USER + 203
    Public Const WM_UOA_GET_STAT As Integer = WM_USER + 204
    Public Const WM_UOA_SET_ACTIVE_MACRO As Integer = WM_USER + 205
    Public Const WM_UOA_PLAY_MACRO As Integer = WM_USER + 206
    Public Const WM_UOA_DISPLAY_TEXT As Integer = WM_USER + 207
    Public Const WM_UOA_REQUEST_HOUSE_BOAT_INFO As Integer = WM_USER + 208
    Public Const WM_UOA_ADD_COMMAND_LINE As Integer = WM_USER + 209
    Public Const WM_UOA_GET_USER_ID As Integer = WM_USER + 210
    Public Const WM_UOA_GET_SHARD_NAME As Integer = WM_USER + 211
    Public Const WM_UOA_ADD_USER_TO_PARTY As Integer = WM_USER + 212
    Public Const WM_UOA_GET_UO_WINDOW_HANDLE As Integer = WM_USER + 213
    Public Const WM_UOA_GET_POISON_STATUS As Integer = WM_USER + 214
    Public Const WM_UOA_SET_SKILL_LOCK As Integer = WM_USER + 215
    Public Const WM_UOA_GET_ACCOUNT_IDENTIFIER As Integer = WM_USER + 216
    Public Const WM_UOA_RESOURCE_COUNT_FINISHED As Integer = WM_USER + 301
    Public Const WM_UOA_SPELL_WAS_ATTEMPTED As Integer = WM_USER + 302
    Public Const WM_UOA_LOGON As Integer = WM_USER + 303
    Public Const WM_UOA_MAGERY_SKILL_LEVEL As Integer = WM_USER + 304
    Public Const WM_UOA_CURRENT_INT_AND_MANA As Integer = WM_USER + 305
    Public Const WM_UOA_SKILL_LEVEL As Integer = WM_USER + 306
    Public Const WM_UOA_MACRO_FINISHED As Integer = WM_USER + 307
    Public Const WM_UOA_LOGOUT As Integer = WM_USER + 308
    Public Const WM_UOA_CURRENT_MAX_HP_AND_HP As Integer = WM_USER + 309
    Public Const WM_UOA_CURRENT_DEX_AND_STAM As Integer = WM_USER + 310
    Public Const WM_UOA_ADD_HOUSE_BOAT As Integer = WM_USER + 311
    Public Const WM_UOA_DELETE_HOUSE_BOAT As Integer = WM_USER + 312
    Public Const WM_UOA_FACET_LAND_INFO As Integer = WM_USER + 313
    Public Const WM_UOA_POWER_HOUR_ENTERED As Integer = WM_USER + 314
 
    Public Function fncGetHIWORD( _
        ByVal i As Integer) As Integer
        Dim HIWORD As Integer = ((i And &HFFFF0000) \ 65536) And 65535
        Return HIWORD
    End Function
 
    Public Function fncGetLOWORD( _
        ByVal i As Integer) As Integer
        Dim LOWORD As Integer = i And 65535
        Return LOWORD
    End Function
 
    Public Function fncGetHILO( _
        ByVal HI As Integer, _
        ByVal LO As Integer) As Integer
        Dim i As Integer
        i = HI * 65536
        i = i Or (LO And 65535)
        Return i
    End Function
 
    Public Function fncGetWindowHandle( _
        ByVal pClassName As String) As Integer
        Return FindWindow(pClassName, vbNullString)
    End Function
 
    Public Function UOALink_SendMessage( _
        ByVal WM_UOA As Integer, _
        ByVal wParam As Integer, _
        ByVal lParam As Integer) As Integer
        Dim Result As Integer
        mUOAWnd = fncGetWindowHandle(UOA_CLASSNAME)
        If mUOAWnd = 0 Then
            Return -1
        End If
        Result = SendMessage(mUOAWnd, WM_UOA, wParam, lParam)
        Return Result
    End Function
 
    Public Function fncGetAtomString( _
        ByVal nAtom As Integer) As String
        Dim tmpLength As Integer = 256
        Dim tmpString = New System.Text.StringBuilder(tmpLength)
        Dim Result As Integer
        Result = GlobalGetAtomName(nAtom, tmpString, tmpLength)
        Result = GlobalDeleteAtom(nAtom)
        Return tmpString.ToString
    End Function
End Module

ダウンロード

開いたら File→Download で保存することができます。

UOA_Tool.#002.zip

2012/02/24

[blogger css customize]


なんとなくいい背景だったのでCSSをいぢってみたが、
すごく重くなった感が気になりました。。。

半透明と角丸のCSS追加です。


テンプレート→カスタマイズ→アドバンス→CSSを追加
div.post-outer {
        background-color: #000000;
        filter: alpha(opacity=50);
        opacity:0.5;
        -webkit-border-radius: 10px;
        -moz-border-radius: 10px;
        border-radius: 10px;
}

2012/02/22

UOA ツール 開発 #001 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

情報元

元となる情報は、たまたま見つけたUOAホームページの隠しページでした、ウィンドウメッセージをやり取りして情報を提供するようなことが書かれてます。

あとはスキル関連の値を調べるのが面倒で調べてたら、delphiのプロジェクトを見つけたという感じです。

できることは、

「簡単なステータス管理」

「ただのMAPツール」

「リソース管理」

「UOAマクロ実行」

「スキル管理」

「詠唱ツール」

「画面に文字表示」

「ユーザーコマンドライン追加」


リソース管理、ステータス管理、詠唱ツール、スキル管理はUO内だけでも十分だし、マクロ、MAPツールは他の高性能ツール使ったほうがよさげ・・・

画面に文字表示は・・・

 ゲームを開始してから1時間がたちました.

 ゲームを開始してから2時間がたちました..

 ゲームを開始してから3時間がたちました...

 (うざっ)

もっと実用的な管理のためだったら使えそうですね。


大してできることはないじゃないですかって感じですが、自分好みの分かりやすいツールは作れそうです。

UOAssist information(こちらはもう見れなくなってるので貼り付け。)

UOAssist Interface for Delphi

 

SourceForgeにあるので見つかると思います。

2012/02/19

UOA ツール 開発 #000 - UO UOA TOOL for Visual Basic , 自動化、便利、マクロ、自分で管理などなど(ソース付き)

決まり文句

この記事で紹介しているのはネットゲームのウルティマオンラインのツール開発に関する内容ですが、ウィンドウメッセージを送ったり受け取ったりしたことの無い方には、VBでアプリケーション間通信の手助けとなるコードが書かれてるかもしれません。

途中からこの記事を見た方は、こちらから全て見ることができます。

初めに。

ふと気づいたら、昔のツール資料がなくなっているのに気づいて、やはり忘れないようにめもめも・・・

めもめもしていくのは、MMOのウルティマオンラインのツールについてですが・・・

ちょっと古いゲームですね。。。

UOの公式ツールである「UOA」に関してのツール作成の情報となります。パケット弄ったりはしないのでチートツールにはならない!?かと思います。

簡単にいうと、UOのクライアントとのやり取りはUOAが行っているので、ちょこっと情報をもらって、外部からUOAを操作しちゃおうかなってツール。

言語はVisual Basic 2010 Expressでめもめもです。

過去に作ったツール

UO Mining Master(掘り 支援 ツール)

※火ゴキと散歩してるだけで掘ってくれるツール。。。

※狙った鉱石をちょこっと操作で集めるようなツール。。。

[Totem Plugin Install for movie]

-->Repository

# yum --enablerepo=dag install gstreamer-ffmpeg
# yum --enablerepo=dag install gstreamer-plugins-base
# yum --enablerepo=dag install gstreamer-plugins-good
# yum --enablerepo=dag install gstreamer-plugins-bad
# yum --enablerepo=dag install gstreamer-plugins-ugly
#

[opencore-amr install]

http://sourceforge.net/projects/opencore-amr/
# tar zxf opencore-amr-0.1.2.tar.gz
# cd opencore-amr-0.1.2
# ./configure
# make
# make install

[NASM]

http://www.nasm.us/pub/nasm/releasebuilds/
# tar jxf nasm-2.09.05.tar.bz2
# cd nasm-2.09.05
# ./configure
# make
# make install