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

📄 mod05readinfo.bas

📁 这是诛仙外挂的源代码
💻 BAS
📖 第 1 页 / 共 5 页
字号:
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long
    
    Dim i As Integer
    Dim NpcTaskNum As Long, NpcTaskNumZ As Long, rwid As Long, NpcTaskAdrF As Long
    Dim BuffEnum(36) As Byte, BuffL As Long, NpcTaskName As String
    
    ProcessID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If ProcessID Then
        Main.ListLuck.Clear
        ReadProcessMemory ProcessID, ByVal PartAdr + &H4, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H8, TempAdr, 4, 0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H14, TempAdr, 4, 0&   '14'4d0
        ReadProcessMemory ProcessID, ByVal TempAdr + &H180, BaseAdr, 4, 0&
        
        ReadProcessMemory ProcessID, ByVal BaseAdr + &HF8, NpcTaskNum, 4, 0&                    'NPC任务总数量
        ReadProcessMemory ProcessID, ByVal BaseAdr + &HFC, NpcTaskNumZ, 4, 0&                   'NPC任务数量
        ReadProcessMemory ProcessID, ByVal BaseAdr + &HF0, NpcTaskAdrF, 4, 0&                   'NPC任务基址
        For i = 0 To NpcTaskNumZ - 1
            ReadProcessMemory ProcessID, ByVal NpcTaskAdrF + &H98 * i + &H38, rwid, 4, 0&       '任务id
            ReadProcessMemory ProcessID, ByVal NpcTaskAdrF + &H98 * i, TempAdr, 4, 0&    '
            ReadProcessMemory ProcessID, ByVal TempAdr, BuffEnum(0), 36, BuffL
            NpcTaskName = Left$(BuffEnum, 36)
            NpcTaskName = Trim(KillChr0(Trim(NpcTaskName)))
            
            Main.ListLuck.AddItem i & "|" & rwid & "|" & NpcTaskName
        Next i
    End If
    CloseHandle ProcessID
End Sub
'===============================================================================================
''按名称获取玩家位置
Function ReadPlayPos(PName As String) As String
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long, PPlayID As Long
    
    Dim i As Integer
    Dim PlayAdrB As Long, PlayNum As Long, PlayAdrF As Long, PlayMax As Long
    Dim PlayName As String, PlayX As Single, PlayY As Single
    Dim BuffEnum(36) As Byte, BuffL As Long
    
    PPlayID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If PPlayID Then
        '玩家相关
        ReadProcessMemory PPlayID, ByVal PartAdr + &H28, TempAdr, 4, 0
        ReadProcessMemory PPlayID, ByVal TempAdr + &H138, PlayAdrB, 4, 0
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H18, PlayAdrF, 4, 0                        '读出玩家列表的首地址
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H24, PlayMax, 4, 0                         '读出玩家数组的最大值
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H14, PlayNum, 4, 0                         '周围玩家数量
        Main.LVNpc(2).ListItems.Clear
        If PlayNum > 0 Then
            For i = 0 To PlayMax - 1
                BaseAdr = PlayAdrF + i * 4
                ReadProcessMemory PPlayID, ByVal BaseAdr, TempAdr, 4, 0
                If TempAdr > 0 Then
                    ReadProcessMemory PPlayID, ByVal TempAdr + &H4, BaseAdr, 4, 0
                    ReadProcessMemory PPlayID, ByVal BaseAdr + EcxPartX, PlayX, 4, 0            '目标位置X
                    ReadProcessMemory PPlayID, ByVal BaseAdr + EcxPartY, PlayY, 4, 0            '目标位置Y
                    ReadProcessMemory PPlayID, ByVal BaseAdr + EcxPartName, TempAdr, 4, 0       '目标名称
                    ReadProcessMemory PPlayID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
                    PlayName = Left$(BuffEnum, 36)
                    PlayName = Trim(KillChr0(Trim(PlayName)))
                    Erase BuffEnum
                    If PName = PlayName Then
                        ReadPlayPos = Trim(Str(Fix(PlayX))) & "|" & Trim(Str(Fix(PlayY)))
                        Exit Function
                    End If
                End If
            Next i
        End If
    End If
    CloseHandle PPlayID
    ReadPlayPos = "A|A"
End Function
''按名称获取玩家ID
Function ReadPlayId(PName As String) As Long
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long, PPlayID As Long
    
    Dim i As Integer
    Dim PlayAdrB As Long, PlayNum As Long, PlayAdrF As Long, PlayMax As Long
    Dim PlayName As String, PlayID As Long
    Dim BuffEnum(36) As Byte, BuffL As Long
    
    PPlayID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If PPlayID Then
        '玩家相关
        ReadProcessMemory PPlayID, ByVal PartAdr + &H28, TempAdr, 4, 0
        ReadProcessMemory PPlayID, ByVal TempAdr + &H138, PlayAdrB, 4, 0
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H18, PlayAdrF, 4, 0                        '读出玩家列表的首地址
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H24, PlayMax, 4, 0                         '读出玩家数组的最大值
        ReadProcessMemory PPlayID, ByVal PlayAdrB + &H14, PlayNum, 4, 0                         '周围玩家数量
        Main.LVNpc(2).ListItems.Clear
        If PlayNum > 0 Then
            For i = 0 To PlayMax - 1
                BaseAdr = PlayAdrF + i * 4
                ReadProcessMemory PPlayID, ByVal BaseAdr, TempAdr, 4, 0
                If TempAdr > 0 Then
                    ReadProcessMemory PPlayID, ByVal TempAdr + &H4, BaseAdr, 4, 0
                    ReadProcessMemory PPlayID, ByVal BaseAdr + EcxPartId, PlayID, 4, 0          '玩家ID
                    ReadProcessMemory PPlayID, ByVal BaseAdr + EcxPartName, TempAdr, 4, 0       '目标名称
                    ReadProcessMemory PPlayID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
                    PlayName = Left$(BuffEnum, 36)
                    PlayName = Trim(KillChr0(Trim(PlayName)))
                    Erase BuffEnum
                    If PName = PlayName Then
                        ReadPlayId = PlayID
                        Exit Function
                    End If
                End If
            Next i
        End If
    End If
    CloseHandle PPlayID
    ReadPlayId = 0
End Function
''按ID读取玩家名称
Function ReadNameById(TeamerID As Long) As String
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long, PNameID As Long
    
    Dim PlayAdrB As Long, PlayNum As Long, PlayAdrF As Long, PlayMax As Long
    Dim BuffEnum(36) As Byte, BuffL As Long, TeamerName As String
    PNameID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If PNameID Then
        ReadProcessMemory PNameID, ByVal PartAdr + &H28, TempAdr, 4, 0
        ReadProcessMemory PNameID, ByVal TempAdr + &H138, PlayAdrB, 4, 0
        ReadProcessMemory PNameID, ByVal PlayAdrB + &H18, PlayAdrF, 4, 0                        '读出玩家列表的首地址
        ReadProcessMemory PNameID, ByVal PlayAdrB + &H24, PlayMax, 4, 0                         '读出玩家数组的最大值
        If TeamerID <> 0 Then
            BaseAdr = PlayAdrF + (TeamerID Mod PlayMax) * 4
            ReadProcessMemory PNameID, ByVal BaseAdr, TempAdr, 4, 0
            ReadProcessMemory PNameID, ByVal TempAdr + &H4, TempAdr, 4, 0
            ReadProcessMemory PNameID, ByVal TempAdr + EcxPartName, TempAdr, 4, 0           '目标名称
            ReadProcessMemory PNameID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
            TeamerName = Left$(BuffEnum, 36)
            TeamerName = Trim(KillChr0(Trim(TeamerName)))
        End If
        Erase BuffEnum
    End If
    CloseHandle PNameID
    If Len(TeamerName) = 0 Then
        ReadNameById = "未知"
    Else
        ReadNameById = TeamerName
    End If
End Function
''按ID读取好友名称
Function ReadFNameById(FId As Long) As String
On Error Resume Next
    Dim BaseAdr As Long, TempAdr As Long, PFNameID As Long
    
    Dim FriendAdrB As Long, FriendNum As Long, FriendAdrF As Long, FriendMax As Long
    Dim BuffEnum(36) As Byte, BuffL As Long, FriendName As String
    PFNameID = OpenProcess(PROCESS_ALL_ACCESS Or PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, hProcId)
    If PFNameID Then
        ReadProcessMemory PFNameID, ByVal PartAdr + &H28, TempAdr, 4, 0
        ReadProcessMemory PFNameID, ByVal TempAdr + EcxFriend, FriendAdrB, 4, 0
        ReadProcessMemory PFNameID, ByVal FriendAdrB + &H24, FriendAdrF, 4, 0                   '好友列表的首地址
        ReadProcessMemory PFNameID, ByVal FriendAdrB + &H30, FriendMax, 4, 0                    '好友数组最大值
        ReadProcessMemory PFNameID, ByVal FriendAdrB + &H20, FriendNum, 4, 0                    '好友总数量
        
        If FriendNum > 0 Then
            If FId <> 0 Then
                BaseAdr = FriendAdrF + (FId Mod FriendMax) * 4
                ReadProcessMemory PFNameID, ByVal BaseAdr, TempAdr, 4, 0
                If TempAdr > 0 Then
                    ReadProcessMemory PFNameID, ByVal TempAdr + &H4, BaseAdr, 4, 0
                    ReadProcessMemory PFNameID, ByVal BaseAdr + &H18, TempAdr, 4, 0             '目标名称
                    ReadProcessMemory PFNameID, ByVal TempAdr, ByVal VarPtr(BuffEnum(0)), 36, BuffL
                    FriendName = Left$(BuffEnum, 36)
                    FriendName = Trim(KillChr0(Trim(FriendName)))
                    Erase BuffEnum
                End If
            End If
            Erase BuffEnum
        End If
    End If
    CloseHandle PFNameID
    If Len(FriendName) = 0 Then
        ReadFNameById = ReadNameById(FId)
    Else
        ReadFNameById = FriendName
    End If
End Function
''读取技能是否完成
Function ReadSDoStat(RSkillId As Long) As Boolean
    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, SkillLTime 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 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
            If RSkillId = SkillID Then
                ReadProcessMemory ProcessID, ByVal SkillAdr + &HC, SkillLTime, 4, 0             '技能剩余冷却时间
                If SkillLTime > 0 Then
                    ReadSDoStat = True
                Else
                    ReadSDoStat = False
                End If
                Exit Function
            End If
        Next i
    End If
    CloseHandle ProcessID
    ReadSDoStat = False
End Function

⌨️ 快捷键说明

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