久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3261|回復: 0
打印 上一主題 下一主題
收起左側

發點這幾天研究龍OL的一些代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:108531 發表于 2016-3-12 16:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
'此模塊用于游戲數據的讀取,操作,存儲。
'Items:物品 Normal:普通 Task:任務 Current:當前 Floor:地表 PertainId:屬于
Option Explicit
'-------角色數據結構定義-----------
Private Type Role_Struct
    Name As String
    Id As Long
    Level As Integer
    Point(0 To 2) As Long
    Hp(0 To 1) As Long
    Mp(0 To 1) As Long
End Type
'-------物品數據結構定義-----------
Private Type Items_Struct
    Name As String
    Id As Long
    Type As Integer
    Number As Long
    Need_Level As Integer
End Type
'-------地面物品結構定義------------
Private Type Floor_Items_Struct
    Name As String
    Id As Long
    Type As Long
    Number As Long
    PertainId As Long
    Point(0 To 2) As Long
End Type
'-------怪物數據結構定義------------
Private Type Monster_Struct
    Name As String
    Id As Long
    Type As Integer
    Level As Integer
    Hp(0 To 1) As Long
    Mp(0 To 1) As Long
    Point(0 To 2) As Long
End Type
'-------游戲數據申明-----------------
'-------基址及偏移部分--------
Private Const Game_Address = &H704010
Private Const Item_Address = &H705010
Private Const FloorItem_Address = &H704DC8
Private Const Call_Address = &H419900
Private Const Task_Bag_Offset = &H78
Private Const Normal_Bag_Offset = &H68
Private Const Game_Call_Offset = &H64
'-------基址及偏移部分--------
Public Role_Data As Role_Struct
Public Role_Items(0 To 1, 0 To 19) As Items_Struct
Public Floor_Items(0 To 199) As Floor_Items_Struct, FloorItemsMax As Long
Public Monster_Data(0 To 199) As Monster_Struct, MonsterMax As Integer
Public Buff_Address As Long, Select_Monster As Monster_Struct
'-------過程用于得到角色信息數據------------
Public Sub GetRoleData()
Dim Role_Address As Long
    Role_Address = RM(Game_Address + &H70, 4)
    With Role_Data
        .Name = StripNulls(RM(Role_Address + &H144, &H10, 2))
        .Id = RM(Role_Address + &H13C, 4)
        .Level = RM(Role_Address + &H15C, 4)
        .Hp(0) = RM(Role_Address + &H184, 4)
        .Hp(1) = RM(Role_Address + &H180, 4)
        .Mp(0) = RM(Role_Address + &H18C, 4)
        .Mp(1) = RM(Role_Address + &H188, 4)
        .Point(0) = RM(Role_Address + &H14, 4, 1) \ 50
        .Point(1) = RM(Role_Address + &H18, 4, 1) \ 50
        .Point(2) = RM(Role_Address + &H1C, 4, 1) \ 50
    End With
End Sub
'------過程用于讀取角色任務背包信息-------------
Public Sub ReadTaskBag()
    GetRoleItems 1, Task_Bag_Offset
End Sub
'------過程用于讀取角色普通背包信息-------------
Public Sub ReadNormalBag()
    GetRoleItems 0, Normal_Bag_Offset
End Sub
'------過程得到當前選定怪物信息--------------
Public Sub GetSelectMonster()
Dim Select_Address As Long
     Select_Address = RM(Game_Address + &H70, 4)
     With Select_Monster
        .Id = RM(Select_Address + &H13C, 4)
        .Level = RM(Select_Address + &H15C, 4)
        .Name = RM(Select_Address + &H144, &H10, 2)
        .Hp(0) = RM(Select_Address + &H184, 4)
        .Hp(1) = RM(Select_Address + &H180, 4)
        .Mp(0) = RM(Select_Address + &H18C, 4)
        .Mp(1) = RM(Select_Address + &H188, 4)
        .Point(0) = RM(Select_Address + &H14, 4, 1) \ 50
        .Point(1) = RM(Select_Address + &H18, 4, 1) \ 50
        .Point(2) = RM(Select_Address + &H1C, 4, 1) \ 50
    End With
End Sub
'-------過程用于得到地面物品信息數據----------------------------
Public Sub GetFloorItems()
Dim HeadAddress As Long
    HeadAddress = RM(RM(&H704F78 + &H64 + 4, 4) + 4, 4)
    GetFloorItemsData HeadAddress
    GetFloorItemName
End Sub
Public Sub GetFloorItemsData(ByVal BaseAddress As Long)
Dim FloorAddress As Long
    If RM(BaseAddress + &H21, 1) = 0 Then
        GetFloorItemsData RM(BaseAddress, 4)
        Floor_Items(FloorItemsMax).Id = RM(BaseAddress + &H10, 4)
        FloorAddress = RM(BaseAddress + &H18, 4)
        With Floor_Items(FloorItemsMax)
            .Type = RM(FloorAddress + &HC, 4)
            .Number = RM(FloorAddress + &H10, 4)
            .PertainId = RM(FloorAddress + &H14, 4)
            .Point(0) = RM(FloorAddress + &H34, 4, 1) \ 50
            .Point(1) = RM(FloorAddress + &H38, 4, 1) \ 50
            .Point(2) = RM(FloorAddress + &H3C, 4, 1) \ 50
        End With
        FloorItemsMax = FloorItemsMax + 1
        GetFloorItemsData RM(BaseAddress + &H8, 4)
    End If
End Sub
Public Sub GetFloorItemName()
Dim HeadAddress1 As Long, Headaddress2 As Long, tmp_Address As Long
Dim Dest_Address As Long, i As Long, j As Long, k As Long
Dim testAddress As Long
    HeadAddress1 = RM(RM(FloorItem_Address + 8, 4) + 4, 4)
    Headaddress2 = RM(RM(FloorItem_Address + &H14, 4) + 4, 4)
    For i = 0 To FloorItemsMax - 1
        k = Floor_Items(i).Type
        If k = -&HB Then
            Floor_Items(i).Name = Floor_Items(i).Number & "銀"
        Else
            If k < &H7A1200 Then
                tmp_Address = HeadAddress1
                Do While RM(tmp_Address + &HB1, 1) = 0
                    j = RM(tmp_Address + &HC, 4)
                    If (j < k) Then
                        tmp_Address = RM(tmp_Address + &H8, 4)
                    Else
                        Dest_Address = tmp_Address
                        If (j = k) Then Exit Do
                        tmp_Address = RM(tmp_Address, 4)
                    End If
                    DoEvents
                Loop
            Else
                tmp_Address = Headaddress2
                Do While RM(tmp_Address + &H12D, 1) = 0
                    j = RM(tmp_Address + &HC, 4)
                    If (j < k) Then
                        tmp_Address = RM(tmp_Address + &H8, 4)
                    Else
                        Dest_Address = tmp_Address
                        If (j = k) Then Exit Do
                        tmp_Address = RM(tmp_Address, 4)
                    End If
                    DoEvents
                Loop
            End If
            Floor_Items(i).Name = StripNulls(RM(RM(Dest_Address + &H10 + &H99, 4) + &H40, &H10, 2))
        End If
    Next
End Sub

'-------過程用于得到怪物數組信息數據------------
Public Sub GetMonster()
Dim HeadAddress As Long
    HeadAddress = RM(RM(Game_Address + &H78, 4) + 4, 4)
    GetMonsterData HeadAddress
End Sub
Public Sub GetMonsterData(ByVal BaseAddress As Long)
Dim MonsterAddress As Long
    If RM(BaseAddress + &H15, 1) = 0 Then
        GetMonsterData RM(BaseAddress, 4)
        MonsterAddress = RM(BaseAddress + &H10, 4)
        With Monster_Data(MonsterMax)
            .Id = RM(MonsterAddress + &H13C, 4)
            .Level = RM(MonsterAddress + &H15C, 4)
            .Type = RM(RM(MonsterAddress + &H2E4, 4) + 4, 1)
            .Name = StripNulls(RM(MonsterAddress + &H144, &H10, 2))
            .Hp(0) = RM(MonsterAddress + &H184, 4)
            .Hp(1) = RM(MonsterAddress + &H180, 4)
            .Mp(0) = RM(MonsterAddress + &H18C, 4)
            .Mp(1) = RM(MonsterAddress + &H188, 4)
            .Point(0) = RM(MonsterAddress + &H14, 4, 1) \ 50
            .Point(1) = RM(MonsterAddress + &H18, 4, 1) \ 50
            .Point(2) = RM(MonsterAddress + &H1C, 4, 1) \ 50
        End With
        MonsterMax = MonsterMax + 1
        GetMonsterData RM(BaseAddress + &H8, 4)
    End If
End Sub
'-------過程用于得到角色物品信息數據-------------
'參數1:背包序號,參數2:背包偏移
'背包數據結構為以(有物品的)背包序號(生成的)二叉排序樹
Public Sub GetRoleItems(Bag_SerNum As Integer, Bag_Offset As Long)
Dim Items_First_Address As Long, tmp_Address As Long, Dest_Address As Long, Type_Address As Long
Dim i As Integer, j As Integer
    j = -1
    Items_First_Address = RM(RM(RM(Item_Address + Bag_Offset, 4) + 8, 4) + 4, 4)
    For i = 0 To 19
        tmp_Address = Items_First_Address                   '二叉樹根結點
        Do While RM(tmp_Address + &H15, 1) = 0              '是否為葉子結點
            j = RM(tmp_Address + &HC, 1)                    '讀取背包序號
            If (j < i) Then           '                     '大于根結點
                tmp_Address = RM(tmp_Address + &H8, 4)      '查找右子樹
            ElseIf (j = i) Then                             '等于根結點
                Dest_Address = tmp_Address                  '查找到
                Exit Do                                     '跳出循環
            ElseIf (j > i) Then                             '小于根結結點
                tmp_Address = RM(tmp_Address, 4)            '查找左子樹
            End If
            DoEvents
        Loop
        If i <> j Then                                      '不相等則說明沒有找到,即該背包格子為空
            With Role_Items(Bag_SerNum, i)
                .Name = ""
                .Id = 0
                .Need_Level = .Id
                .Number = .Id
                .Type = .Id
            End With
        Else
            Dest_Address = RM(Dest_Address + &H10, 4)       '得到背包格子類物品的基址
            Type_Address = RM(RM(Dest_Address, 4) + &H8, 4) '得到物品類型的地址
            With Role_Items(Bag_SerNum, i)
                .Name = StripNulls(RM(RM(RM(Dest_Address + &H8, 4) + &H99, 4) + &H40, &H10, 2)) '物品名稱
                .Id = RM(Dest_Address + &H14, 4)            '物品ID
                .Need_Level = 1
                .Number = RM(Dest_Address + &H18, 1)        '物品數量
                If RM(Type_Address, 1) = &H8B Then          '得到物品類型
                    .Type = RM(RM(Dest_Address + &H8, 4) + &H7A, 1)
                Else
                    .Type = RM(Dest_Address + &H8C, 1)
                End If
            End With
        End If
    Next
End Sub
'-------New一塊數據區用于游戲Call用--------------
Public Sub NewBuff()
    Buff_Address = NewMEM(&H100)
End Sub
'-------Delect數據區--------------
Public Sub DelectBuff()
    DelectMEM Buff_Address, &H100
End Sub
'-------過程ID選則人物-----------------
Public Sub SelectPeopleId(ByVal Id As Long)
    Init_FunDataAddress Buff_Address, &H688490
    WM Buff_Address + &H24, "01000000"
    WM Buff_Address + &H28, NumberToByte(Id, 4)
    WM Buff_Address + &H38, "01000000"
    GameFun Buff_Address
    Over_FunDataAddress Buff_Address, &H38
End Sub
'-------過程ID選則怪物-----------------
Public Sub SelectMonsterId(ByVal Id As Long)
    Init_FunDataAddress Buff_Address, &H688490
    WM Buff_Address + &H24, "01000000"
    WM Buff_Address + &H28, NumberToByte(Id, 4)
    WM Buff_Address + &H48, "02000000"
    GameFun Buff_Address
    Over_FunDataAddress Buff_Address, &H48
End Sub
'-------過程游戲角色使用物品---------------------------
Public Sub RoleUseItems(ByVal ItemId As Long)
    WM Buff_Address, "ED0090E6"
    WM Buff_Address + &H24, "01000000"
    WM Buff_Address + &H28, NumberToByte(ItemId, 4)
    WM Buff_Address + &H2C, "0100FFFF"
    WM Buff_Address + &H68, "01000000"
    GameFun Buff_Address
End Sub

'-------游戲功能調用CALL-----------------
Public Sub Init_FunDataAddress(ByVal FunDataAddress As Long, ByVal InitData As Long)
Dim asm As New AsmCall
    With asm
       .Pushad
       .Push 0
       .Push InitData
       .Mov_ECX FunDataAddress
       .Mov_EAX &H44E130
       .Call_EAX
       .Popad
       .Ret
       .Run_ASM Pid
    End With
End Sub

Public Sub GameFun(ByVal FunDataAddress As Long)
Dim asm As New AsmCall
    With asm
       .Pushad
       .Push FunDataAddress
       .Mov_EAX Item_Address
       .Mov_EAX_DWORD_Ptr_EAX_Add Game_Call_Offset
       .Mov_ECX_EAX
       .Mov_EAX Call_Address
       .Call_EAX
       .Popad
       .Ret
       .Run_ASM Pid
     End With
End Sub
Public Sub Over_FunDataAddress(ByVal FunDataAddress As Long, ByVal Offset As Long)
Dim asm As New AsmCall
    With asm
       .Pushad
       .Mov_DWORD_Ptr FunDataAddress + Offset, -1
       .Mov_ECX FunDataAddress
       .Mov_EAX &H5789D0
       .Call_EAX
       .Popad
       .Ret
       .Run_ASM Pid
    End With
End Sub


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩精品一区二区三区蜜桃 | 午夜日韩 | 久久一| 国产情侣在线看 | 国产一区二区三区www | 亚洲成av人影片在线观看 | 色偷偷噜噜噜亚洲男人 | 成人一区二 | sese视频在线观看 | 视频一区二区三区四区五区 | 成人a视频在线观看 | 精品乱子伦一区二区三区 | 免费在线观看毛片 | 在线观看亚洲一区二区 | 亚洲精品一区二区在线观看 | 91免费看片 | 天天插天天狠天天透 | 日韩精品在线观看一区二区 | 午夜在线视频 | 国产欧美一区二区三区久久人妖 | 91视频在线看 | 性色av一区二区三区 | 国产成人免费 | 亚洲日韩中文字幕 | 超碰人人人人 | 中文在线视频 | 久久国产精品免费一区二区三区 | 99re视频在线| 亚洲精品视频免费 | 久综合 | 国产玖玖| 一区二区三区视频在线 | 亚洲欧美激情精品一区二区 | 国产精品一区二区三区在线播放 | 日韩二区| 国产在线观看福利 | 中文字幕三区 | 日本在线网站 | 欧美理论片在线 | 精品视频在线播放 | 久久久久久久一区 |