⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod05readinfo.bas

📁 这是诛仙外挂的源代码
💻 BAS
📖 第 1 页 / 共 5 页
字号:
Attribute VB_Name = "Mod05ReadInfo"
Option Explicit

''读取角色名称
Function ReadPartName(hWnd As Long) As String
On Error Resume Next
    Dim TempAdr As Long
    
    Dim TempPartName As String
    Dim ProcID As Long, hpID As Long
    Dim BuffEnum(36) As Byte, BuffL As Long
    
    GetWindowThreadProcessId hWnd, hpID
    ProcID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hpID)
    If ProcID Then
        ReadProcessMemory ProcID, ByVal FirstAdr, TempAdr, 4, 0                                 '内存基址
        ReadProcessMemory ProcID, ByVal TempAdr + &H1C, TempAdr, 4, 0                           '人物基址
        ReadProcessMemory ProcID, ByVal TempAdr + &H28, TempAdr, 4, 0
        ReadProcessMemory ProcID, ByVal TempAdr + EcxPartName, TempAdr, 4, 0                    '角色名称地址
        ReadProcessMemory ProcID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL           '临时角色名称
        TempPartName = Left$(BuffEnum, 36)
        TempPartName = Trim(KillChr0(Trim(TempPartName)))
        Erase BuffEnum
    End If
    CloseHandle ProcID
    ReadPartName = TempPartName
End Function
''仅读取一次的信息
Sub ReadOnce()
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long
    Dim BuffEnum(36) As Byte, BuffL As Long
    ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If ProcessID Then
        ReadProcessMemory ProcessID, ByVal FirstAdr, TempAdr, 4, 0                              '内存基址
        ReadProcessMemory ProcessID, ByVal TempAdr + &H1C, PartAdr, 4, 0                        '人物基址
        ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0                        '二级基址
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartId, PartId, 4, 0                    '人物ID
        ReadProcessMemory ProcessID, ByVal FirstAdr + EcxPartSex, PartSex, 1, 0                 '人物性别(0男,1女)
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartName, TempAdr, 4, 0                 '角色名称地址
        ReadProcessMemory ProcessID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL        '临时角色名称
        PartName = Trim(KillChr0(Left$(BuffEnum, 36)))
        Erase BuffEnum
    End If
    CloseHandle ProcessID
End Sub
''读取人物信息
Sub ReadPartInfo()
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long, PartMaxExpAdr As Long
    
    ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If ProcessID Then
        ReadProcessMemory ProcessID, ByVal EcxAlarmStat, AlarmStat, 4, 0                        '反外挂星星
        ReadProcessMemory ProcessID, ByVal EcxOnline, Online, 4, 0                              '在线状态
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal FirstAdr, TempAdr, 4, 0                              '内存基址
        ReadProcessMemory ProcessID, ByVal TempAdr + EcxAskStat, AskStat, 4, 0                  '邀请框状态
        ReadProcessMemory ProcessID, ByVal TempAdr + EcxAskStat - &HC, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H10, AskStatId, 4, 0                      '受邀人ID
        ReadProcessMemory ProcessID, ByVal TempAdr + &H14, TeamPara, 4, 0                       '接受邀请参数
        ReadProcessMemory ProcessID, ByVal PartAdr + &HD0, PartLine, 4, 0                       '当前线路
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal PartAdr + &H8, BaseAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal BaseAdr + &H88, MapID, 4, 0                          '地图ID
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0                        '二级基址
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal PartAdr + &H180, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H10, GodAndMan, 4, 0                      '天人合一状态
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxTrumpVer, TrumpVer, 4, 0                '当前法宝精力
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxTrump, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &HC, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H40, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &HB0, TrumpMaxVer, 4, 0                    '最大法宝精力
        '---------------------------------------------------------------------------------------
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartLevel, PartLevel, 2, 0              '等级
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartHp, PartHp, 4, 0                    '当前气血
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMaxHp, PartMaxHp, 4, 0              '最大气血
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMp, PartMp, 4, 0                    '当前真气
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartMaxMp, PartMaxMp, 4, 0              '最大真气
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartExp, PartExp, 8, 0                  '当前经验
        ReadProcessMemory ProcessID, ByVal EcxPartMaxExp + 8 * (PartLevel + 1), PartMaxExp, 8, 0
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartAttDis, PartAttDis, 4, 0            '人物攻击距离
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxBagMoney, BagMoney, 4, 0                '背包金钱
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSelObjId, SelObjId, 4, 0                '选中目标
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartX, PartX, 4, 0                      '位置X
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartY, PartY, 4, 0                      '位置Y
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxNpcWinStat, NpcWinStat, 1, 0            'NPC窗口状态
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxPartStat, TempAdr, 4, 0                 '打坐状态
        ReadProcessMemory ProcessID, ByVal TempAdr + &H14, TempAdr, 4, 0                        '打坐状态
        ReadProcessMemory ProcessID, ByVal TempAdr + &H4, PartStat, 4, 0                        '打坐状态
        CloseHandle ProcessID
        ''答题星星报警 为了能及时反应
        If AlarmStat = 1 Then
            Alarm
        End If
        If Online = 0 And Main.CheOther(2).Value = 1 Then
            mciExecute "play lost.wav"
            ComStart "停止"
        End If
        If PartHp = 0 And Main.CheSafe(6).Value = 0 Then
            mciExecute "play lost.wav"
        End If
    End If
End Sub
''读取技能
Sub ReadSkill()
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long
    
    Dim i As Integer
    Dim SkillFAdr As Long, SkillNum As Long, SkillAdr As Long
    Dim SkillID As Long, SkillLevel As Long
    Dim SNnameAdr As Long, SNnameb(65) As Byte, BuffL As Long, SNname As String
    Dim sFile As String, TempString As String
    Dim SkillKind As String, SkillBuff As String, SkillName As String
    
    Main.CboWar1.Clear              '主动技能
    Main.CboWar2.Clear              '主动技能
    Main.CboSafe(0).Clear           '队员加血技能
    Main.CboSafe(2).Clear           '加血技能
    ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If ProcessID Then
        ReadProcessMemory ProcessID, ByVal PartAdr + &H28, BaseAdr, 4, 0                        '二级基址
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSkillNum, SkillNum, 4, 0                '技能个数
        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxSkillFAdr, SkillFAdr, 4, 0              '已学技能首地址
        For i = 0 To SkillNum - 1
            ReadProcessMemory ProcessID, ByVal SkillFAdr + i * &H4, SkillAdr, 4, 0              '已学技能的第几个(Jn_i=0技能数-1)
            ReadProcessMemory ProcessID, ByVal SkillAdr + &H8, SkillID, 4, 0                    '技能ID
            ReadProcessMemory ProcessID, ByVal SkillAdr + &HC, SkillLevel, 4, 0                 '技能ID
            ReadProcessMemory ProcessID, ByVal SkillAdr + &H4, TempAdr, 4, 0
            ReadProcessMemory ProcessID, ByVal TempAdr + &H4, TempAdr, 4, 0
            ReadProcessMemory ProcessID, ByVal TempAdr + &H7E, SNnameAdr, 4, 0
            ReadProcessMemory ProcessID, ByVal SNnameAdr, SNnameb(0), 64, BuffL                 '技能名称
            SNname = Left$(SNnameb, 64)                                                         '名称
            SNname = Trim(KillChr0(Trim(SNname)))
            
            sFile = App.Path & "\ZhuXian.ini"
            TempString = Space$(100)
            GetPrivateProfileString& "SKILL", "Skill" & CStr(SkillID), "0", TempString, 100, sFile
            If InStr(Trim(TempString), ",") <= 1 Then
                WritePrivateProfileString& "SKILLN", "Skill" & CStr(SkillID), ",0," & SNname, sFile
            Else
                SkillKind = Mid(Trim(TempString), 1, InStr(Trim(TempString), ",") - 1)
                SkillBuff = Mid(Trim(TempString), InStr(Trim(TempString), ",") + 1)
                SkillBuff = Mid(SkillBuff, 1, InStr(SkillBuff, ",") - 1)
                If SkillBuff = "0" Then SkillBuff = ""
                SkillName = Left(Left(CStr(SkillID) & Space(4), 4) & "|" & SkillBuff & Space(8), 8) & "|" & SNname
                Select Case SkillKind
                    Case "1"            '主动技能
                        Main.CboWar1.AddItem SkillName
                    Case "2"            '辅助技能
                        Main.CboWar2.AddItem SkillName
                    Case "3"            '加血技能
                        Main.CboSafe(0).AddItem SkillName
                        Main.CboSafe(2).AddItem SkillName
                    Case "4"            '辅助技能
                        Main.CboSafe(1).AddItem SkillName
                End Select
            End If
        Next i
    End If
    CloseHandle ProcessID
End Sub
''读取目标信息
Sub ReadSelObjInfo()
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long
    
    Dim NextTempAdr As Long, NSelObjId As Long
    Dim MonAdrB As Long, MonNum As Long, MonAdrF As Long, MonMax As Long
    Dim PlayAdrB As Long, PlayNum As Long, PlayAdrF As Long, PlayMax As Long
    Dim BuffEnum(36) As Byte, BuffL As Long
    ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If ProcessID Then
        If SelObjId <> 0 Then
            If SelObjId < 0 Then
                ReadProcessMemory ProcessID, ByVal PartAdr + &H8, TempAdr, 4, 0
                ReadProcessMemory ProcessID, ByVal TempAdr + &H20, MonAdrB, 4, 0
                ReadProcessMemory ProcessID, ByVal MonAdrB + &H18, MonAdrF, 4, 0                '读出怪物列表的首地址
                ReadProcessMemory ProcessID, ByVal MonAdrB + &H24, MonMax, 4, 0                 '读出怪物数组的最大值
                If (SelObjId Mod MonMax) + 788 > MonMax Then
                    BaseAdr = MonAdrF + (((SelObjId Mod MonMax) + 788) Mod MonMax) * 4
                Else
                    BaseAdr = MonAdrF + ((SelObjId Mod MonMax) + 788) * 4
                End If
                ReadProcessMemory ProcessID, ByVal BaseAdr, TempAdr, 4, 0
                
                '新加的下面3行
                Do While TempAdr > 0
                    ReadProcessMemory ProcessID, ByVal TempAdr + 0, NextTempAdr, 4, 0
                    If TempAdr > 0 Then
                        ReadProcessMemory ProcessID, ByVal TempAdr + &H4, BaseAdr, 4, 0
                        '新加的下面2行
                        ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonID, NSelObjId, 4, 0          '怪物ID
                        If NSelObjId = SelObjId Then
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonKind, SelObjKind, 2, 0       '目标类型
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonLevel, SelObjLevel, 2, 0     '目标等级
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonHp, SelObjHp, 4, 0           '目标当前气血
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonMaxHp, SelObjMaxHp, 4, 0     '目标气血上限
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonX, SelObjX, 4, 0             '目标位置X
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonY, SelObjY, 4, 0             '目标位置Y
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonSel, SelObjSel, 4, 0         '目标的目标的ID
                            ReadProcessMemory ProcessID, ByVal BaseAdr + EcxMonName, TempAdr, 4, 0          '目标名称
                            ReadProcessMemory ProcessID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
                            SelObjName = Left$(BuffEnum, 36)
                            SelObjName = Trim(KillChr0(Trim(SelObjName)))
                            '新加下面5行
                            Exit Sub
                        End If
                    End If
                    TempAdr = NextTempAdr
                Loop
            ElseIf SelObjId = PartId Then
                SelObjX = PartX
                SelObjY = PartY
                SelObjLevel = PartLevel

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -