本站首页    管理页面    写新日志    退出


«January 2020»
1234
567891011
12131415161718
19202122232425
262728293031

最新日志

Suprisingly Good Mar
Software Metric Issu
又过了一天
学做游戏
Software engineering
MICROSOFT新的DSL语言
介绍SME和研究 心得
A summary of SME
tips to improve engl
davidxiem

最近的评论

回复:学做游戏
回复:安装Nginx(负载均衡器)
回复:介绍SME和研究 心得
回复:目前想看/在看的电影和TV
回复:有点担心这次的examinatio
回复:观后感《非诚勿扰》
回复:观后感《非诚勿扰》
回复:生财有道
回复:总算是忙完了啦,要想想有哪些事情要
回复:Summary of this m

连接





[Progam]计算DIABLO2存档文件校验码的工具
davidxiem 发表于 2008-11-16 15:52:48

这两天有够糟糕的,居然不复习在打DIABLO2,而且这么老的游戏了我居然还是能玩的很起劲。我因为加错了技能点打算修改过来,可是现在1.12版的DIABLO居然没有一个可以用的修改器,于是只好重操旧业用文本编辑器修改存档了,可是改完以后发现进入不了游戏,显示"无法进入游戏,一般错误档案",于是分析一下存档文件,经过比较后发现应该是加了checksum,所有就到网上搜以下,真的给我发现有人提到了校验的算法。我觉得她写的不知道是什么语言,于是自己给改成了vb.net的程序,由于不是原创的,我就不写什么case study之类的东西了,原作:evilertoaster,地址是http://evilertoaster.wordpress.com/2008/05/19/diablo-2-111-save-file/, 我的计算器在这里下载: Diablo2 d2s checksum calculator download: 500)this.width=500'>DiabloChecksum.rar 使用方法:解压后里头有两文件夹,bin下的可以直接运行(需要.net framewokr2.0),选择d2s后即可。另外一个文件夹是原代码,供有兴趣的人继续研究。 代码如下:     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim savefile As String        Dim dialresult As DialogResult        dialresult = OpenFileDialog1.ShowDialog        If dialresult <> Windows.Forms.DialogResult.OK Then            Exit Sub        End If         savefile = OpenFileDialog1.FileName        Dim srcbytes() As Byte = File.ReadAllBytes(savefile)         srcbytes(12) = 0        srcbytes(13) = 0        srcbytes(14) = 0        srcbytes(15) = 0         Dim checksum(3) As Integer        For Each b As Byte In checksum            b = 0        Next         Dim boolcarry, temp As Integer        boolcarry = 0        temp = 0        For i As Integer = 0 To srcbytes.Length - 1            temp = srcbytes(i) + boolcarry            checksum(0) = checksum(0) * 2 + temp            checksum(1) = checksum(1) * 2            If checksum(0) > 255 Then                checksum(1) = checksum(1) + (checksum(0) - checksum(0) Mod 256) \ 256                checksum(0) = checksum(0) Mod 256            End If             checksum(2) = checksum(2) * 2            If checksum(1) > 255 Then                checksum(2) = checksum(2) + (checksum(1) - checksum(1) Mod 256) \ 256                checksum(1) = checksum(1) Mod 256            End If             checksum(3) = checksum(3) * 2            If checksum(2) > 255 Then                checksum(3) = checksum(3) + (checksum(2) - checksum(2) Mod 256) \ 256                checksum(2) = checksum(2) Mod 256            End If             If checksum(3) > 255 Then                checksum(3) = checksum(3) Mod 256            End If             If (checksum(3) And 128) <> 0 Then                 boolcarry = 1            Else                boolcarry = 0            End If         Next         Dim bytes(3) As Byte         Dim j As Integer = 0        For Each i As Integer In checksum            bytes(j) = CType(i, Byte)            j += 1        Next         TextBox1.Text = String.Format("The sum after modification is:{0:x} {1:x} {2:x} {3:x}", bytes(0), bytes(1), bytes(2), bytes(3))         Dim writefile As FileStream = File.Open(savefile, FileMode.Open)        writefile.Seek(12, SeekOrigin.Begin)        writefile.Write(bytes, 0, 4)        writefile.Flush()        writefile.Close()         lblmsg.Text = "Check sum bytes is successfully written."    End Sub

阅读全文(3613) | 回复(0) | 编辑 | 精华


发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



公告

 Anybody can contact me through Email:



or through instant message messageing

MSN davidxiem@hotmail.com

Thanks Nexodyne  for email icon generation.

专题

首页(174)
Progam(7)
english learning(41)
个人日志(72)
Forever QuakeIII(4)
Software Process(2)
lgp(13)
Movie and TV(12)
DataBase(0)
ILC(5)

留言

签写新留言

hihi

统计

blog名称:
日志总数:174
评论数量:98
留言数量:-1
访问次数:493777
建立时间:2007年7月20日

 

 

 


站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.016 second(s), page refreshed 144345742 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号