查看完整版本: [-- [原创][PC][VB]存档修改器 简单教程 --]

胜利之歌超级论坛 -> PC修改专区 -> [原创][PC][VB]存档修改器 简单教程 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

乖小子 2006-04-22 08:44
请注意:转载人士。转载必须注明出处:零点小组http://www.0ddm.com/ 作者:乖小子

准备工具:
1。Microsoft Visual Basic 6.0 中文版
2。金山游侠(UltraEdit-32/FPE2001/GM8)这里用金山游侠为例,其他的工具请参照。
3。要修改的游戏(这里拿 英雄传说6SC 修改为例)

准备工作做好了,那么就开始了。

要做的是存档修改器,那首先得要有这个游戏的存档。(只有存档无法判断准确的地址的)首先进入游戏,最好有商店(战斗)的场面。在买卖之前 先存个档 。然后观看 米拉 和 晶石 的数量。记好了。然后打开 金山游侠。在左边会有一个,文件修改,点它。在上方会看到 新建 然后新建一个搜索项目。游戏存档位置在: C:\documents and Settings\你的系统用户名\Application Data\FALCOM\ED_SORA2
选择其中一个。。如果是查找 米拉 或 晶石 只要搜索一个 就可以了。这几个位置就在一块。 晶石随便搜索一种。我那 米拉 为例子吧 如果米拉数量多。那么搜索出来的地址就只有一个。如果少就会多出几个,然后进入 商店 买或卖一样东西,然后存档。米拉现在有多少,就切换到 金山游侠 里搜索多少(不是直接内存搜索,是搜索存档文件,就是最开始的。)

搜索完后,就会发现一个地址了:2534D
然后在 把每个晶石的数量 转为 16 进制(系统自带的计算器可转换)就会发现 2534D 的后面就是他们 16进制。
&H2534D
&H25355
&H25359
&H2535D
&H25361
&H25365
&H25369
&H2536D
上面的地址全找到了。那么怎么写修改器呢?

下面将是图文教程:

就选择:标准EXE

乖小子 2006-04-22 08:45

这一排是工具栏。详细的作用在我们制作当中会提到的。

右键点他:


选择 部件

乖小子 2006-04-22 08:46
按图所设,然后确定


选择他后 这个控件就会出现在工具栏的最下方:

乖小子 2006-04-22 08:46
下面我们就要开始设置修改器的界面了:

首先要建立一个 TEXTBOX 的控件 8个(米拉/1   晶石/7)
如果图:




乖小子 2006-04-22 08:47
然后我们选中其中一个 TEXTBOX 的控件

然后看右边的属性栏:


然后我们把 全部的 TEXT BOX 控件的名称改为: text1
在发现有相同的名称后会弹出:

然后点是

就发现属性栏会显示:


全部改好后,TEXTBOX控件名称就由 text1(0) - text1(7)
这下好看了吧? 这个控件就可以分 工了。

text1(0) 则是 米拉的地址
text1(1 - 7) 则是 7个晶石的地址

乖小子 2006-04-22 08:48
然后建立一个:Label,TextBOX,2个CommandButton
Label 不改名称
TextBOX名称改为:Text
第一个CommandButton 名称改为Command1
第二个CommandButton 名称改为Command2

位置请看图

乖小子 2006-04-22 08:49
现在对每个控件的 显示的那写字 我们改改。
前着为名称:后着为属性栏
Label1的Caption 改为 路径
Text的text 改为 空白(Text1的text 也改为空白)
Command1的Caption 改为 打开存档
Command2的Caption 改为 保存存档

如图:


也可以给每个 TEXT前加个说明,为了让大家改的是什么属性。
如图:

乖小子 2006-04-22 08:50
注意注意:
下面就是代码部分了。。

双击 上图的空白之处。

会出现:

乖小子 2006-04-22 08:51


Quote:
Private Sub Form_Load()


上面我们写入:

Quote:
Private lngAddr(7) As Long'这是8个属性的地址,是从0-7 共有8个


然后在下面加入:

Quote:

Private Sub LoadAddr()'每 个组 的地址,注意要按照(你刚才注释的每个TEXT前的名称来写哦,否者,改这个 读取存档后 却另一个被改。这就不好了。)
  lngAddr(0) = &H2534D
  lngAddr(1) = &H25355
  lngAddr(2) = &H25359
  lngAddr(3) = &H2535D
  lngAddr(4) = &H25361
  lngAddr(5) = &H25365
  lngAddr(6) = &H25369
  lngAddr(7) = &H2536D
End Sub


以上的顺序是: 钱 地 水 火 风 时 空 幻

如图:




还有一步忘说了。。

Quote:
Private Sub Form_Load()

End Sub


中间加入:

Quote:
LoadAddr'是加载界面时 把地址加载进去,等候的命令就剩下 读取 或 写入



如图:

乖小子 2006-04-22 08:52
好了,地址也写上去了。

先别说读这些地址,首先得打开文件 是吧?没有文件读什么东西?读空气? 说笑的

还记得 我们 刚才 加的控件么? 就是在 工具栏的最后一个

就是它

然后我们就选中他,把他拉到 界面上去。。这个东西啊,位置在什么地都没关系,只要要用这个控件,自己会出现滴。

如图:

乖小子 2006-04-22 08:53
在:
Quote:
Private lngAddr(7) As Long


下面加上
Quote:
Private strFileName As String' 文件名


在最下面加入:


Quote:
Private Sub OpenSavedFile()'打开存档文件
  With CommonDialog1
    .DialogTitle = "打开《英雄传说6》SC 存档文件"'弹出的控件名称
    .CancelError = False'错误显示关闭
    .Filter = "存档文件 (SVDAT*.SAV)|SVDAT*.SAV"'选取的文件名以及后缀格式。
    .ShowOpen
    If Len(.FileName) = 0 Then'如果文件的地址为空则退出 OpenSavedFile
        Exit Sub
    End If
   
    strFileName = .FileName'这个是打开的文件
    Text.Text = .FileName'这个是把路径显示到Text
  End With
End Sub

乖小子 2006-04-22 08:53
打开文件结束了。

那就剩下(用什么控件来用这个) 怎么读取,怎么保存等

咋们先把所有的事件做好,在来怎么触发这些事件(好比RPG等者主角来触发任务一样)

打开有了,咋再写读取


Quote:
Private Sub OpenSavedFile()
…………
End Sub


下面加入:
Quote:
Private Sub ReadSavedFile()
End Sub


在这里面里,咋要先 定个变量
Quote:
Dim x As Integer'这个在后面一看就知道用在什么地方了
Dim lngVal(0 to 7) As Integer
'这是读取地址后的用到的变量


在继续加入:
Quote:
Open strFileName For Binary As #1
'这个大家在刚才看到了吧。打开刚才打开到的文件,把这个文件的编号 定为 #1 号

乖小子 2006-04-22 08:54
继续加入:
Quote:
for x = 0 to 7 '把X定为 0 到 7的循环数
    Get #1, lngAddr(x), lngVal(x)'读取 #1 号文件 的 lngAddr(x)地址 并定到 lngVal(x),也就是 读 lngAddr(0) 就定到 lngVal(0) ……循环。一直从0 到 7
next x '结束这一个循环


在加入一个:
Quote:
Close (1)'关闭1号文件(这里其实可以不关,在保存后在关闭也可以,我个人觉得关闭好点)


上面就是读取完了。算是简单吧
这一部分就差 显示了。

咋继续:
Quote:
For x = 0 To 7'再定一个循环
    Text1(x) = lngVal(x)'这个就是每个TEXTBOX里显示刚才读取到的数据
Next x'结束循环



Quote:
End Sub'这一部分就结束了

乖小子 2006-04-22 08:54
现在我们开始写保存的代码了:

这次我一次贴出来,并写上说明,请认真看哦:

Quote:
Private Sub SaveSavedFile()
  '定义变量类型
  Dim lngVal(0 To 7) As Long
  Dim x As Integer
  '读取写入值
  For x = 0 To 7
    lngVal(x) = "&H" & Hex(Text1(x))'这一步是因为那数值是10进,想写入到存档,必须要转换为 16 进制,这一步很关键的说。
  Next x
  '打开文件
  Open strFileName For Binary As #1'上次那个是 读取时打开文件,这时是保存再次打开。
 
  '写入数值
  For x = 0 To 7
    Put #1, lngAddr(x), lngVal(x)'写入转换到的16进制。
  Next x
  '关闭
  Close (1)'这里就必须关闭了。
End Sub

乖小子 2006-04-22 08:55
现在开始连接 各个事件。

双击 界面上的   打开存档

Quote:
Private Sub Command1_Click()

End Sub


在里面写上:

Quote:
OpenSavedFile'打开文件
If Len(strFileName) > 0 Then ReadSavedFile'如果已经打开文件则读取此文件的相关地址


在双击 保存存档

Quote:
Private Sub Command2_Click()

End Sub


写入
Quote:
Dim x As Integer
'-----------------------------------检查文本里的数值是否超过规定的字节------------------------------
  For x = 0 To 7
    If IsNumeric(Text1(x)) Then
        If Text1(x) < 0 Then Text1(x) = 0
        If x = 0 Then
          If Text1(x) > 99999 Then Text1(x) = 99999
        End If
        If x = 1 Or x = 2 Or x = 3 Or x = 4 Or x = 5 Or x = 6 Or x = 7 Then
          If Text1(x) > 9999 Then Text1(x) = 9999
        End If
    Else
        Text1(x) = ""
        Text1(x).SetFocus
    End If
  Next x
'-------------------------------------如果以上不正常则自动改为正常数值并继续下面事件-------------
SaveSavedFile'保存

乖小子 2006-04-22 08:55
源码在此:

啦啦123 2006-04-25 14:56
学到东西了

xiyoujia 2006-04-28 09:21
好东西DJxiexie

虫的传人 2006-05-03 15:19
实用的好文章,一个VB精简版才6MB,很不错,顶


查看完整版本: [-- [原创][PC][VB]存档修改器 简单教程 --] [-- top --]


Powered by PHPWind v6.3.2 Code © 2003-05 PHPWind
Time 0.088383 second(s),query:4 Gzip enabled

You can contact us