2012/03/22

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

決まり文句

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

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

アカウント名、キャラ名

前回の続きですが、今度はアカウント名とキャラ名をuo.cfgから取得する処理。

キャラクターがログアウトしたらuo.cfgを読み込んで名称を取得しようという考えです。

微妙にハマったのが、INIファイル読み込みだからと思ってGetProfileString使った所、uo.cfgにはセクション([xxx]ようなもの)が無くて、うまく読めなかった感じ。(結構ネット調べたんですが見つからなかったので、分かる方いたら教えて下さい・・・)

結局は正規表現で無理やり抜き出し(・・;

そもそもINIファイルじゃないっ って話かもしれませんが。

Form(抜粋)

    Private AcctName As String = ""
    Private PlayerName As String = ""
    Private UO_Path As String = ""
 
    <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_LOGOUT
                AcctName = UO_GetAcctID(UO_Path)
                PlayerName = UO_GetPlayerName(UO_Path)
                txtLog.AppendText(String.Format("AcctName:{1} AcctID:{2}{0}", vbCrLf, AcctName, AcctID))
                txtLog.AppendText(String.Format("PlayerName:{1} PlayerID:{2}{0}", vbCrLf, PlayerName, CharaID))
        End Select
        MyBase.WndProc(WMSG)
    End Sub
 
    Private Sub txtUOPath_TextChanged(sender As System.Object, e As System.EventArgs) Handles txtUOPath.TextChanged
        UO_Path = txtUOPath.Text
    End Sub

Module(抜粋)

    Public Const UOCFG_ACCTID As String = "AcctID"
    Public Const UOCFG_PLAYERNAME As String = "PlayerName"
 
    Public Function UO_GetAcctID(ByVal strFilePath As String) As String
        Dim Result As String = ""
 
        If (strFilePath.Trim = "") Then Return Result
        If Not (System.IO.File.Exists(strFilePath)) Then Return Result
 
        Dim sr As New System.IO.StreamReader(strFilePath)
        Dim buf As String = sr.ReadToEnd()
        sr.Close()
 
        Dim reg As New System.Text.RegularExpressions.Regex( _
            String.Format("{0}=[A-Z0-9]+", UOCFG_ACCTID), _
            System.Text.RegularExpressions.RegexOptions.IgnoreCase)
        Dim match As System.Text.RegularExpressions.Match = reg.Match(buf)
 
        If (match.Success) Then
            Dim ValueArray() As String = match.Value.Split("=")
            If (Not IsNothing(ValueArray(1))) Then
                Result = ValueArray(1)
            End If
        End If
 
        Return Result
 
    End Function
 
    Public Function UO_GetPlayerName(ByVal strFilePath As String) As String
        Dim Result As String = ""
 
        If (strFilePath.Trim = "") Then Return Result
        If Not (System.IO.File.Exists(strFilePath)) Then Return Result
 
        Dim sr As New System.IO.StreamReader(strFilePath)
        Dim buf As String = sr.ReadToEnd()
        sr.Close()
 
        Dim reg As New System.Text.RegularExpressions.Regex( _
            String.Format("{0}=[A-Z0-9]+", UOCFG_PLAYERNAME), _
            System.Text.RegularExpressions.RegexOptions.IgnoreCase)
        Dim match As System.Text.RegularExpressions.Match = reg.Match(buf)
 
        If (match.Success) Then
            Dim ValueArray() As String = match.Value.Split("=")
            If (Not IsNothing(ValueArray(1))) Then
                Result = ValueArray(1)
            End If
        End If
 
        Return Result
    End Function

ダウンロード

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

UOA_Tool.#006.zip

0 件のコメント:

コメントを投稿