求泰坦之旅修改器1.08版修改器

爱翔广宇揽冬日之傲骨梅花 飞入梦境待晓时其清水芙蓉
给初学者:用VB写外挂 ———— 实战三:泰坦之旅V1.08 十项属性修改器——另一种无输入焦点时响应按键的方法
前几天发布了泰坦之旅V1.08 十项属性修改器1.0.0版本,这里的代码将是1.1.0版本的代码。
首先,来说一下思路,我们要实现的是一些修改功能及其恢复,先复习一下前几次说到的函数:
我们利用下面这个函数来获取游戏进程指定地址(我们将要修改的地址)的数据,将其保存起来。
Public Function GetData(ByVal lppid As Long, ByVal lpAddress As Long, SaveData() As Byte, Optional ByVal dtLen As Long = 4)Dim pHandle As Long ' 储存进程句柄' 使用进程标识符取得进程句柄pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)' 在内存地址中读取数据ReadProcessMemory pHandle, ByVal lpAddress, ByVal VarPtr(SaveData(0)), dtLen, 0&' 关闭进程句柄CloseHandle pHandleEnd Function
我们利用下面这个函数,来修改游戏内存,我们要修改的和恢复的都是用这个写回去。
'将修改内存Public Function SetData(ByVal lppid As Long, ByVal lpDestAddr As Long, lpSrcAddr() As Byte, Optional ByVal dtLen As Long = 4) As BooleanOn Error GoTo mErrDim lBytesReadWrite As LongDim pHandle As Long ' 储存进程句柄' 使用进程标识符取得进程句柄pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)WriteProcessMemory pHandle, ByVal lpDestAddr, ByVal VarPtr(lpSrcAddr(0)), dtLen, 0&' 关闭进程句柄CloseHandle pHandleSetData = TruemErr:End Function
修改器的思路是这样的:一般的,比较容易实现的功能,我们使用直接修改代码的方法,例如在快速升级这里,我们直接将游戏里面MOVE [***],EAX修改为MOVE [***],ESP,这样,经验增加的就很多了,当然,这是通过搜索经验,然后锁定改变经验地址数据的代码来实现的。稍微复杂一些的,我们跟踪以后,将代码跳转到指定位置,在新位置调用我们的汇编代码,而后,返回到跳转前的位置继续执行;这里,有些修改,我们不是直接修改了改变数据的代码地址,而是跟踪到调用处去修改。这里说的新代码地址是直接用CE查看得到的可用地址,本来想讲一下为指定进程申请内存空间而后把代码跳转到新空间内运行的,但是想来没有必要,一般程序都有这个空地址的,这个技术会用一个新帖子给大家介绍,但用的主要技术并非我写的代码。
使用的工具:
CE5.3、SPY+++、TSPYXP、Ollydbg_fix
如果你没有这些软件,可以象我索取。
以下介绍一种热键技术,当写这个修改器的时候,可以发现我们以前介绍的“全局热键”不好用了,也就是说“红色警戒修改器”那里介绍的用RegisterHotKey定义的热键在该游戏界面下无响应,我在论坛里发帖子请教,有朋友介绍用GetKeyState试试,但是我写了代码没有成功(详细见),而后用eXeScope查看了一下下载游戏时带的那个5项属性修改器(Titan_edit_06_07_13)调用的API函数,发现它调用了USER32.DLL的GetAsyncKeyState函数,看见这个名字想必大家都意识到它和按键获取有关,查了一下API说明,有这样一句话引起了我的注意:微软的win32手册指出:倘若输入焦点从属于与调用函数的输入线程不同的另一个输入线程,则返回值为0(例如,一旦另一个程序拥有焦点,则它应返回零)。证据显示,函数实际是在整个系统的范围内工作的。接下来翻看了一下Swinapi,里面有一个完整代码,介绍了该函数的调用,直接把代码复制到VB编辑器,修改代码将得到的按键信息输出到DEBUG,运行,进入游戏,按下一个按键,切回来,发现按键被拦截了,但是只按了一下却出现了N个提示,稍做修改,就达到了要求,详细可以参看下面的代码。
以上就是所有问题的详细叙述了,没别的好说,把代码贴出来给大家共享一下:(注意代码前的说明)
本代码共1一个窗体(Form1)、3个模块(Module1、Module2、Module3)、一个资源文件(LOGO.RES)为调试时不会出现错误,我已经把LOAD函数内加载资源语句注释掉了。
以下请另存为工程1.VBP(复制并保存为文件):
Type=ExeForm=Form1.frmReference=*/G{0-}#2.0#0#C:/WINDOWS/System32/stdole2.tlb#OLE AutomationModule=Module1; Module1.basModule=Module2; Module2.basModule=Module3; Module3.basResFile32="LOGO.RES"IconForm="Form1"Startup="Form1"HelpFile=""Title="泰坦之旅V1.08 十项属性修改器"ExeName32="泰坦之旅V1.08 十项属性修改器.exe"Command32=""Name="泰坦之旅修改器"HelpContextID="0"CompatibleMode="0"MajorVer=1MinorVer=1RevisionVer=1AutoIncrementVer=0ServerSupportFiles=0VersionCompanyName="YY"VersionProductName="泰坦之旅V1.08 十项属性修改器"CompilationType=-1OptimizationType=0FavorPentiumPro(tm)=0CodeViewDebugInfo=0NoAliasing=0BoundsCheck=0OverflowCheck=0FlPointCheck=0FDIVCheck=0UnroundedFP=0StartMode=0Unattended=0Retained=0ThreadPerObject=0MaxNumberOfThreads=1DebugStartupOption=0
[MS Transaction Server]AutoRefresh=1
'以下请保存为(Form1.frm)
VERSION 5.00Begin VB.Form Form1
AutoRedraw
BorderStyle
'Fixed Dialog
"泰坦之旅v1.08十项属性修改器V1.1.0"
ClientHeight
ClientLeft
ClientWidth
"泰坦之旅v1.08十项属性修改器"
ScaleHeight
ScaleWidth
ShowInTaskbar
StartUpPosition =
Begin VB.Frame Frame3
Begin VB.PictureBox PicSoft
Appearance
BorderStyle
MousePointer
'Arrow and Question
"Form1.frx":0000
ScaleHeight
ScaleWidth
Begin VB.Frame Frame2
Begin VB.PictureBox PicBBS
Appearance
BorderStyle
MousePointer
'Arrow and Question
"Form1.frx":2572
ScaleHeight
ScaleWidth
Begin VB.Frame Frame6
Begin VB.PictureBox LogoPic
Appearance
BorderStyle
"Form1.frx":47D4
MousePointer
ScaleHeight
ScaleWidth
Begin VB.Frame Frame1
Begin VB.Label Label4
"启动成功.注意:修改成功无提示;按下第2次撤消修改!"
Begin VB.Label LabF
&H00FF0000&
Begin VB.Label LabMSG
EndEndAttribute VB_Name = "Form1"Attribute VB_GlobalNameSpace = FalseAttribute VB_Creatable = FalseAttribute VB_PredeclaredId = TrueAttribute VB_Exposed = False'请保留作者信息:'ZCSOR于06-9-10开发'E-MAIL:'本代码主要演示当游戏界面下用RegisterHotKey定义的全局热键不能被接收时如何定义一种可接收的热键
Option Explicit
Private Sub Form_Load()'SetLogo 101
加载资源文件'初始化要写入的数据Call SetAas: SetI: SetDi: SetNsr: SetIlu: SetIm: SetIap: SetIsk: SetIe: SetIh'Debug.Print Aas(0), I(0), Di(0), Nsr(0), Ilu(0), Im(0), Iap(0), Isk(0), Ie(0), Ih(0)ToKen
'开始热键获取SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
LabMSG.Caption = "F1 :无限生命(INFINITE HEALTH)" & vbCrLf & _
"F2 :无限魔法(INFINITE ENERGY)" & vbCrLf & _
"F3 :无限技能(INFINITE SKILL POINTS)" & vbCrLf & _
"F4 :无限属性(INFINITE ATTRIBUTE POINTS)" & vbCrLf & _
"F5 :无限金钱(INFINITE GOLO)" & vbCrLf & _
"F6 :开通所有技能(ACCESS ALL SKILLS)" & vbCrLf & _
"F7 :无技能恢复等待(NO SKILL RECHARGE)" & vbCrLf & _
"F8 :右键卖出物品不消失(DUPE ITEMS)" & vbCrLf & _
"F9 :不建议-隐身,只能自己打(INVISIBILITY)" & vbCrLf & _
"F10:不建议-直接到25,以后要同级怪(LEVEL UP)"SetMsgPicBBS.ToolTipText = ""PicSoft.ToolTipText = ""LogoPic.ToolTipText = "按左键打开Blog,按右键打开软件列表"End Sub
Private Sub Form_Unload(Cancel As Integer)'停止热键获取
KillTimer Me.hwnd, 0' "爱翔广宇揽东日之傲骨梅花 飞入梦境待晓时其清水芙蓉"
Private Sub SetLogo(ByVal ResID As Long)
LogoPic.Picture = LoadResPicture(ResID, 0)End Sub
Private Sub LogoPic_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)Select Case Button
Shell "Rundll32.exe url.dll, FileProtocolHandler "
Shell "Rundll32.exe url.dll, FileProtocolHandler "
MsgBox "按左键打开Blog,按右键打开软件列表"End SelectEnd Sub
Private Sub PicBBS_Click()Shell "Rundll32.exe url.dll, FileProtocolHandler "End Sub
Private Sub PicSoft_Click()LogoPic_MouseUp 2, 0, 1, 1End Sub
'以下保存为Module1.bas,或者复制到Module1编辑页都可以(Module2、Module3也可类似处理)
'负责权限,内存读写Option Explicit
'查找窗体写内存等Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPrivate Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As LongPrivate Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000Private Const SYNCHRONIZE = &H100000Private Const SPECIFIC_RIGHTS_ALL = &HFFFFPrivate Const STANDARD_RIGHTS_ALL = &H1F0000Private Const PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFFPrivate Const PROCESS_VM_OPERATION = &H8&Private Const PROCESS_VM_READ = &H10&Private Const PROCESS_VM_WRITE = &H20&
'权限提升Private Declare Function GetCurrentProcess Lib "kernel32" () As LongPrivate Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As LongPrivate Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As LongPrivate Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Const TOKEN_ASSIGN_PRIMARY = &H1Private Const TOKEN_DUPLICATE = (&H2)Private Const TOKEN_IMPERSONATE = (&H4)Private Const TOKEN_QUERY = (&H8)Private Const TOKEN_QUERY_SOURCE = (&H10)Private Const TOKEN_ADJUST_PRIVILEGES = (&H20)Private Const TOKEN_ADJUST_GROUPS = (&H40)Private Const TOKEN_ADJUST_DEFAULT = (&H80)Private Const TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or TOKEN_ASSIGN_PRIMARY Or _TOKEN_DUPLICATE Or TOKEN_IMPERSONATE Or TOKEN_QUERY Or TOKEN_QUERY_SOURCE Or _TOKEN_ADJUST_PRIVILEGES Or TOKEN_ADJUST_GROUPS Or TOKEN_ADJUST_DEFAULT)Private Const SE_PRIVILEGE_ENABLED = &H2Private Const ANYSIZE_ARRAY = 1
Private Type LUID
lowpart As Long
highpart As LongEnd Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As LongEnd Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTESEnd Type
Private GamePid As Long
' 储存进程标识符( Process Id )Private msgStr(1 To 10) As String'提升权限为高Public Function ToKen() As BooleanDim hdlProcessHandle As LongDim hdlTokenHandle As LongDim tmpLuid As LUIDDim tkp As TOKEN_PRIVILEGESDim tkpNewButIgnored As TOKEN_PRIVILEGESDim lBufferNeeded As LongDim lp As LonghdlProcessHandle = GetCurrentProcess()lp = OpenProcessToken(hdlProcessHandle, TOKEN_ALL_ACCESS, hdlTokenHandle)lp = LookupPrivilegeValue("", "SeDebugPrivilege", tmpLuid)tkp.PrivilegeCount = 1tkp.Privileges(0).pLuid = tmpLuidtkp.Privileges(0).Attributes = SE_PRIVILEGE_ENABLEDlp = AdjustTokenPrivileges(hdlTokenHandle, False, tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded)ToKen = lpEnd Function
'获取内存内容,本函数返回值为当前该地址数值(10进制)'Public Function GetData(ByVal lppid As Long, ByVal lpADDress As Long, Optional ByVal dtLen As Long = 4) As Long'Dim pHandle As Long ' 储存进程句柄' 使用进程标识符取得进程句柄'pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)' 在内存地址中读取数据'ReadProcessMemory pHandle, ByVal lpADDress, ByVal VarPtr(GetData), dtLen, 0&' 关闭进程句柄'CloseHandle pHandle'End Function
'获取内存内容,该函数在调用时将SaveData()作为参数传入,函数无返回值,调用后SaveData()内容即为当前地址内容(BYTE数组)Public Function GetData(ByVal lppid As Long, ByVal lpAddress As Long, SaveData() As Byte, Optional ByVal dtLen As Long = 4)Dim pHandle As Long ' 储存进程句柄' 使用进程标识符取得进程句柄pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)' 在内存地址中读取数据ReadProcessMemory pHandle, ByVal lpAddress, ByVal VarPtr(SaveData(0)), dtLen, 0&' 关闭进程句柄CloseHandle pHandleEnd Function
'将修改内存Public Function SetData(ByVal lppid As Long, ByVal lpDestAddr As Long, lpSrcAddr() As Byte, Optional ByVal dtLen As Long = 4) As BooleanOn Error GoTo mErrDim lBytesReadWrite As LongDim pHandle As Long ' 储存进程句柄' 使用进程标识符取得进程句柄pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, lppid)WriteProcessMemory pHandle, ByVal lpDestAddr, ByVal VarPtr(lpSrcAddr(0)), dtLen, 0&' 关闭进程句柄CloseHandle pHandleSetData = TruemErr:End Function
Public Function GetPid(lpClassName As String, lpWindowName As String) As Long' 取得进程标识符GetWindowThreadProcessId FindWindow(lpClassName, lpWindowName), GetPidEnd Function
Public Sub Xiugai(ByVal Fx As String)
On Error GoTo m_Err
Dim msgStr As String
'临时字符,标志是修改还是恢复
GamePid = GetPid("Titan Quest", "Titan Quest")
'获取游戏进程PID
If GamePid = 0 Then
Form1!Label4.Caption = "请先启动游戏!"
Exit SubEnd IfIf mGetOver = False Then Get_B '若没有备份原来的内存数据则备份它
'根据参数进行相应的写内存操作Select Case Fx
'*******************************************************
'*******************************************************
If mSetOver(1) Then
SetData GamePid, &H163F700, IhEx_B(), 30
SetData GamePid, &H1547A52, Ih_B(), 6
msgStr = "恢复"
SetData GamePid, &H163F700, IhEx(), 30
SetData GamePid, &H1547A52, Ih(), 6
msgStr = "修改"
mSetOver(1) = Not mSetOver(1)
'*******************************************************
'*******************************************************
If mSetOver(2) Then
SetData GamePid, &H163F750, IeEx_B(), 30
SetData GamePid, &H1547B5A, Ie_B(), 6
msgStr = "恢复"
SetData GamePid, &H163F750, IeEx(), 30
SetData GamePid, &H1547B5A, Ie(), 6
msgStr = "修改"
mSetOver(2) = Not mSetOver(2)
'*******************************************************
'*******************************************************
If mSetOver(3) Then
SetData GamePid, &H1597368, Isk_B(), 1
msgStr = "恢复"
SetData GamePid, &H1597368, Isk(), 1
msgStr = "修改"
mSetOver(3) = Not mSetOver(3)
'*******************************************************
'*******************************************************
If mSetOver(4) Then
SetData GamePid, &H15972A9, Iap_B(), 1
SetData GamePid, &H15972BB, Iap_B(), 1
SetData GamePid, &H15972CD, Iap_B(), 1
SetData GamePid, &H15972DF, Iap_B(), 1
SetData GamePid, &H15972F1, Iap_B(), 1
msgStr = "恢复"
SetData GamePid, &H15972A9, Iap(), 1
SetData GamePid, &H15972BB, Iap(), 1
SetData GamePid, &H15972CD, Iap(), 1
SetData GamePid, &H15972DF, Iap(), 1
SetData GamePid, &H15972F1, Iap(), 1
msgStr = "修改"
mSetOver(4) = Not mSetOver(4)
'*******************************************************
'*******************************************************
If mSetOver(5) Then
SetData GamePid, &H163F7A0, ImEx_B(), 21
SetData GamePid, &H1539439, Im_B(), 6
msgStr = "恢复"
SetData GamePid, &H163F7A0, ImEx(), 21
SetData GamePid, &H1539439, Im(), 6
msgStr = "修改"
mSetOver(5) = Not mSetOver(5)
'*******************************************************
'F10 立即升级
'*******************************************************
Case "F10"
If mSetOver(10) Then
SetData GamePid, &H1597492, Ilu_B(), 1
msgStr = "恢复"
SetData GamePid, &H1597492, Ilu(), 1
msgStr = "修改"
mSetOver(10) = Not mSetOver(10)
'*******************************************************
'F7 无技能冷却
'*******************************************************
If mSetOver(7) Then
SetData GamePid, &H15F9E1A, Nsr_B(), 4
msgStr = "恢复"
SetData GamePid, &H15F9E1A, Nsr(), 4
msgStr = "修改"
mSetOver(7) = Not mSetOver(7)
'*******************************************************
'F8 道具复制 SetDi
'*******************************************************
If mSetOver(8) Then
SetData GamePid, &H455011, Di_B(), 6
msgStr = "恢复"
SetData GamePid, &H455011, Di(), 6
msgStr = "修改"
mSetOver(8) = Not mSetOver(8)
'*******************************************************
'F9 隐身 SetI
'*******************************************************
If mSetOver(9) Then
SetData GamePid, &H1563195, I_B(), 1
msgStr = "恢复"
SetData GamePid, &H1563195, i(), 1
msgStr = "修改"
mSetOver(9) = Not mSetOver(9)
'*******************************************************
'F6 开通所有技能
'*******************************************************
If mSetOver(6) Then
SetData GamePid, &H474C5C, Aas_B(), 2
SetData GamePid, &H47328B, AasEx_B(), 1
SetData GamePid, &H473455, AasExEx_B(), 6
msgStr = "恢复"
SetData GamePid, &H474C5C, Aas(), 2
SetData GamePid, &H47328B, AasEx(), 1
SetData GamePid, &H473455, AasExEx(), 6
msgStr = "修改"
mSetOver(6) = Not mSetOver(6)End SelectSetMsgForm1!Label4.Caption = Fx & msgStr & "成功!"
'显示修改/恢复项目是否成功
Exit Subm_Err:Form1!Label4.Caption = Fx & "修改失败啦!"MsgBox Err.DescriptionEnd Sub
'将游戏中将被修改的原始数据读回保存Public Sub Get_B()
GetData GamePid, &H163F700, IhEx_B(), 30
GetData GamePid, &H1547A52, Ih_B(), 6
GetData GamePid, &H163F750, IeEx_B(), 30
GetData GamePid, &H1547B5A, Ie_B(), 6
GetData GamePid, &H1597368, Isk_B(), 1
GetData GamePid, &H15972A9, Iap_B(), 1
GetData GamePid, &H15972BB, Iap_B(), 1
GetData GamePid, &H15972CD, Iap_B(), 1
GetData GamePid, &H15972DF, Iap_B(), 1
GetData GamePid, &H15972F1, Iap_B(), 1
GetData GamePid, &H163F7A0, ImEx_B(), 21
GetData GamePid, &H1539439, Im_B(), 6
GetData GamePid, &H1597492, Ilu_B(), 1
GetData GamePid, &H15F9E1A, Nsr_B(), 4
GetData GamePid, &H455011, Di_B(), 6
GetData GamePid, &H1563195, I_B(), 1
GetData GamePid, &H474C5C, Aas_B(), 2
GetData GamePid, &H47328B, AasEx_B(), 1
GetData GamePid, &H473455, AasExEx_B(), 6
mGetOver = True '修改备份标志End Sub
Public Sub SetMsg()
'修改是否修改信息Dim i As LongForm1!LabF.Caption = ""For i = 1 To 10
If mSetOver(i) Then msgStr(i) = "ON" & vbCrLf Else msgStr(i) = "OFF" & vbCrLf
Form1!LabF.Caption = Form1!LabF.Caption & msgStr(i)Next i
'以下为Module2
'负责热键的定义和获取,结束的函数在FORM1的UNLOAD过程Option Explicit
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As LongDeclare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As LongDeclare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Global Cnt As Long, Ret As Long'获取按下的是哪个键Function GetPressedKey() As Long
For Cnt = 112 To 121
'112-121 为 F1-F10
If GetAsyncKeyState(Cnt) && 0 Then
GetPressedKey = Cnt
If Ret = Cnt Then Exit Function '如果按下的键重复,表示一次按键还没有结束,不重复进行修改
Select Case Cnt
Xiugai "F5"
Xiugai "F6"
Xiugai "F7"
Xiugai "F8"
Xiugai "F9"
Xiugai "F1"
Xiugai "F2"
Xiugai "F3"
Xiugai "F4"
Xiugai "F10"
End Select
Next CntEnd Function'回调Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)
Ret = GetPressedKeyEnd Sub
'以下为Module3
'负责数据定义Option Explicit
'写入数据,及备份原来数据Public Ilu(0) As Byte
'立即升级(instant level up),Public Ilu_B(0) As Byte
Public Di(5) As Byte
'道具复制(dupe items)Public Di_B(5) As Byte
Public Nsr(3) As Byte
'无技能冷却(no skill recharge)Public Nsr_B(3) As Byte
Public Aas(1) As Byte
'开通所有技能(access all skills)Public AasEx(0) As BytePublic AasExEx(5) As BytePublic Aas_B(1) As BytePublic AasEx_B(0) As BytePublic AasExEx_B(5) As Byte
Public i(0) As Byte
'永远不被敌人看见(invisibility)Public I_B(0) As Byte
Public Ih(5) As Byte
'无限生命Public IhEx(29) As BytePublic Ih_B(5) As BytePublic IhEx_B(29) As Byte
Public Ie(5) As Byte
'无限魔法Public IeEx(29) As BytePublic Ie_B(5) As BytePublic IeEx_B(29) As Byte
Public Isk(0) As Byte
'无限技能Public Isk_B(0) As Byte
Public Iap(0) As Byte
'无限属性Public Iap_B(0) As Byte
Public Im(5) As Byte
'无限金钱Public ImEx(20) As BytePublic Im_B(5) As BytePublic ImEx_B(20) As Byte
Public mSetOver(1 To 10) As Boolean
'是否经过修改Public mGetOver As Boolean
'是否已经备份数据
Public Sub SetIlu()Ilu(0) = &H66End Sub
Public Sub SetNsr()Nsr(0) = &H33: Nsr(1) = &HC0: Nsr(2) = &H90: Nsr(3) = &H90End Sub
Public Sub SetDi()Di(0) = &HE9: Di(1) = &H1: Di(2) = &H1: Di(3) = &H0: Di(4) = &H0: Di(5) = &H0End Sub
Public Sub SetAas()Aas(0) = &H90: Aas(1) = &H90: AasEx(0) = &HEBAasExEx(0) = &H90: AasExEx(1) = &H90: AasExEx(2) = &H90: AasExEx(3) = &H90: AasExEx(4) = &H90: AasExEx(5) = &H90End Sub
Public Sub SetI()i(0) = &HEBEnd Sub
Public Sub SetIh()IhEx(0) = &HD9: IhEx(6) = &H81: IhEx(7) = &HFD: IhEx(8) = &HA4: IhEx(9) = &HF9: IhEx(10) = &H22: IhEx(11) = &H0: IhEx(12) = &HFIhEx(13) = &H85: IhEx(15) = &H83: IhEx(16) = &HF0: IhEx(17) = &HFF: IhEx(18) = &HC7: IhEx(19) = &H46: IhEx(21) = &H0: IhEx(22) = &H40IhEx(23) = &H9C: IhEx(24) = &H45: IhEx(25) = &HE9: IhEx(27) = &H83: IhEx(28) = &HF0: IhEx(29) = &HFFIhEx(1) = &H56: IhEx(2) = &H18: IhEx(3) = &HD8: IhEx(4) = &H65: IhEx(5) = &HEC: IhEx(14) = &H46: IhEx(20) = &H18: IhEx(26) = &H3AIh(0) = &HE9: Ih(4) = &H0: Ih(5) = &H90: Ih(1) = &HA9: Ih(2) = &H7C: Ih(3) = &HFEnd Sub
Public Sub SetIe()IeEx(0) = &HD9: IeEx(6) = &H81: IeEx(7) = &HFD: IeEx(8) = &HA4: IeEx(9) = &HF9: IeEx(10) = &H22: IeEx(11) = &H0: IeEx(12) = &HFIeEx(13) = &H85: IeEx(15) = &H83: IeEx(16) = &HF0: IeEx(17) = &HFF: IeEx(18) = &HC7: IeEx(19) = &H46: IeEx(21) = &H0: IeEx(22) = &H40IeEx(23) = &H9C: IeEx(24) = &H45: IeEx(25) = &HE9: IeEx(27) = &H83: IeEx(28) = &HF0: IeEx(29) = &HFFIeEx(1) = &H5E: IeEx(2) = &H2C: IeEx(3) = &H83: IeEx(4) = &HC4: IeEx(5) = &HC: IeEx(14) = &HFE: IeEx(20) = &H2C: IeEx(26) = &HF2Ie(0) = &HE9: Ie(4) = &H0: Ie(5) = &H90: Ie(1) = &HF1: Ie(2) = &H7B: Ie(3) = &HFEnd Sub
Public Sub SetIsk()Isk(0) = &H90End Sub
Public Sub SetIap()Iap(0) = &H90End Sub
Public Sub SetIm()ImEx(0) = &H8B: ImEx(1) = &H81: ImEx(2) = &H48: ImEx(3) = &H9: ImEx(4) = &H0: ImEx(5) = &H0: ImEx(6) = &HC7: ImEx(7) = &H81ImEx(8) = &H48: ImEx(9) = &H9: ImEx(10) = &H0: ImEx(11) = &H0: ImEx(12) = &HFF: ImEx(13) = &HC9: ImEx(14) = &H9A: ImEx(15) = &H3BImEx(16) = &HE9: ImEx(17) = &H8A: ImEx(18) = &H9C: ImEx(19) = &HEF: ImEx(20) = &HFFIm(1) = &H62: Im(2) = &H63: Im(3) = &H10: Im(0) = &HE9: Im(4) = &H0: Im(5) = &H90End Sub
这就是全部代码了。
成品程序在下载区里面有,但是里面没有附加代码。程序比前一版本大不少,原因就是里面多了2个图片。
程序界面上面3个图片框可连接到相关讨论、我的博客、下载列表等。
1.1.0我发到下载区了,可是没发布,不知道为什么,可能是以为我发重了吧,大家去网上找找,应该在其他地方还有。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 泰坦之旅十周年修改器 的文章

 

随机推荐