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

📄 modwar3.bas

📁 war3修改.......................
💻 BAS
字号:
Attribute VB_Name = "modWar3"
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long

Public BroodHwnd As Long

Public Type t_MemInfo
    Address1 As Long        ' 源地址
    Mem0() As Byte          ' 源代码
    Mem1() As Byte          ' 修改-调转
    Address2 As Long        ' 转移-地址
    Mem2() As Byte          ' 转移-代码
    Address3 As Long        ' 寄存器的备份
    Address3Patch As Long   ' 待修改的地址与寄存器的偏移量
    
    Index As Long           ' DataGrid的Index
    Name As String          ' 这个修改的内容
    DataType As VbVarType   ' 3-Long 4-Single
End Type

Public Type t_MemManage
    Address1 As Long
    ok As Boolean
End Type

Public sMemory(1 To 12) As t_MemInfo
Public sMemoryState(1 To 12) As t_MemManage
Public Const sMemoryMin As Long = 1
Public Const sMemoryMax As Long = 12

' Patch 2007.1.31 - 处理智力的特殊代码
' Begin
Public tickStart1 As Long
' End

Public Sub dataInit(dataGrid As MSHFlexGrid)
    On Error Resume Next

    Dim i As Integer, j As Integer
    For i = sMemoryMin To sMemoryMax
        j = j + 1
        With sMemory(i)
            'dataGrid.TextMatrix(j, 0) = LoadResString(Trim(Str(j)) & "00")
            dataGrid.AddItem LoadResString(Trim(Str(j)) & "00"), j
            .Address1 = Val("&H" & LoadResString(Trim(Str(j)) & "01"))
            .Address2 = Val("&H" & LoadResString(Trim(Str(j)) & "02"))
            .Address3 = Val("&H" & LoadResString(Trim(Str(j)) & "03"))
            .Address3Patch = Val("&H" & LoadResString(Trim(Str(j)) & "04"))
            .DataType = Val(LoadResString(Trim(Str(j)) & "05"))
            .Mem0 = LoadResData(j * 100 + 0, "CUSTOM")
            .Mem1 = LoadResData(j * 100 + 1, "CUSTOM")
            .Mem2 = LoadResData(j * 100 + 2, "CUSTOM")
            .Index = j
        End With
    Next
End Sub

Public Sub goInject()
    Dim i As Integer
    Dim var1(0 To 3) As Byte
    For i = sMemoryMin To sMemoryMax
        var1(0) = 0
        var1(1) = 0
        var1(2) = 0
        var1(3) = 0
        
        If sMemory(i).Address1 <> 0 Then
            EditMem BroodHwnd, sMemory(i).Address2, sMemory(i).Mem2
            EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem1
            EditMem BroodHwnd, sMemory(i).Address3, var1
        End If
        sMemoryState(i).ok = False
        sMemoryState(i).Address1 = 0
    Next
End Sub

Public Sub findHero(dataGrid As MSHFlexGrid)
    Dim vMem(0 To 3) As Byte
    Dim vVal As Long
    Dim vRetLng As Long, vRetFloat As Single
    Dim i As Integer
    For i = sMemoryMin To sMemoryMax
        If sMemoryState(i).ok Then
            ' 恢复正常代码
            'EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem0
        Else
            ' 看写了数据吗?
            With sMemory(i)
                ReadMem BroodHwnd, .Address3, vMem
                CopyMemory ByVal VarPtr(vVal), vMem(0), 4
                If vMem(0) = 0 _
                And vMem(1) = 0 _
                And vMem(2) = 0 _
                And vMem(3) = 0 Then
                    ' 还没有搞定
                Else
                    ' 读取
                    ReadMem BroodHwnd, vVal + .Address3Patch, vMem
                    If .DataType = vbLong Then
                        CopyMemory ByVal VarPtr(vRetLng), vMem(0), 4
                        dataGrid.TextMatrix(.Index, 1) = Trim(Str(vRetLng))
                    ElseIf .DataType = vbSingle Then
                        CopyMemory ByVal VarPtr(vRetFloat), vMem(0), 4
                        dataGrid.TextMatrix(.Index, 1) = Trim(Str(vRetFloat))
                    End If
                    ' 记录、恢复正常代码
                    'sMemoryState(i).ok = True
                    'sMemoryState(i).Address1 = vVal
                    'EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem0
                    
                    ' Patch 2007.1.31 - 处理智力的特殊代码 ----------------
                    ' Begin
                    If i = 3 Then
                        ' “敏捷”刚刚找到
                        tickStart1 = GetTickCount
                    End If
                    If i = 4 Then  ' 当前是"智力"
                        If sMemoryState(3).ok And GetTickCount - tickStart1 > 3000 Then  ' “敏捷”已经找到&&已经超时3秒
                            ' 记录、恢复正常代码
                            sMemoryState(i).ok = True
                            sMemoryState(i).Address1 = vVal
                            EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem0
                        End If
                    Else           ' 普通情况
                        ' 记录、恢复正常代码
                        sMemoryState(i).ok = True
                        sMemoryState(i).Address1 = vVal
                        If sMemory(i).Address1 <> 0 Then
                            EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem0
                        End If
                    End If
                    ' Patch End -------------------------------------------
                End If
            End With
        End If
    Next
End Sub

Public Sub editHero(dataGrid As MSHFlexGrid)
    Dim vMem(0 To 3) As Byte
    Dim vVal As Long
    Dim vStr As String
    Dim vRetLng As Long, vRetFloat As Single

    Dim i As Integer
    For i = sMemoryMin To sMemoryMax
    With sMemory(i)
        'ReadMem BroodHwnd, .Address3, vMem
        'CopyMemory ByVal VarPtr(vVal), vMem(0), 4
        vVal = sMemoryState(i).Address1
        
        vStr = dataGrid.TextMatrix(.Index, 2)
        If Trim(vStr) <> "" And vVal <> 0 Then
        ' 改!
            dataGrid.TextMatrix(.Index, 1) = dataGrid.TextMatrix(.Index, 2)
            dataGrid.TextMatrix(.Index, 2) = ""
            If .DataType = vbLong Then
                vRetLng = Val(vStr)
                CopyMemory vMem(0), ByVal VarPtr(vRetLng), 4
            ElseIf .DataType = vbSingle Then
                vRetFloat = Val(vStr)
                CopyMemory vMem(0), ByVal VarPtr(vRetFloat), 4
            End If
            EditMem BroodHwnd, vVal + .Address3Patch, vMem
        End If
    End With
    Next
End Sub

' 解除修改的代码
Sub AntiRefresh()
    Dim vMem(0 To 3) As Byte
    Dim vVal As Long
    Dim vRetLng As Long, vRetFloat As Single
    Dim i As Integer
    For i = sMemoryMin To sMemoryMax
        sMemoryState(i).ok = True
        ' 恢复正常代码
        If sMemory(i).Address1 <> 0 Then
            EditMem BroodHwnd, sMemory(i).Address1, sMemory(i).Mem0
        End If
    Next
End Sub

⌨️ 快捷键说明

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