通过服务端发送客户端补丁到玩家电脑中自动安装


这是一个试验性功能.可以让玩家自动的安装特定的补丁后才可进入游戏.下面说明一下这个功能的用法.

服务端根目录下的patches文件夹用于存放更新补丁.

正常情况下.玩家使用wow.exe[zhCN,12340]可以正常进入游戏.

但是如果服务端更新了一些内容需要玩家安装新的补丁.

那么,可以在patches创建一个新的mpq:命名为12340-zhCN.mpq,下称安装包.

重启authserver.exe,服务器就会加载安装包12340-zhCN.mpq.

当这个时候,玩家如果使用wow.exe[zhCN,12340]登陆

那么服务器将开始把安装包12340-zhCN.mpq发送到玩家的客户端中 avatar

玩家只需要点击确认安装即可 avatar


安装包的制作:

安装包与一般的魔兽世界mpq补丁不一样

我们可以把安装包当作一个压缩包来理解.我们可以在它里面放入任何的文件.

而它里面需要包含一个文档prepatch.lst,用于告诉wow.exe在玩家接收到这个安装包的时候应该如何安装这个补丁

这是一个简易的安装包结构

- 12340-zhCN.mpq 文件目录
   - prepatch.lst
   - Installer-12340.exe

prepatch.lst的内容

extract Installer-12340.exe
execute Installer-12340.exe

很好理解,第一行解压Installer-12340.exe,第二行执行Installer-12340.exe.这就是一个很简单的安装包了

其中Installer-12340.exe是一个安装程序: avatar

这是使用老外的一个开源项目做的.可以把补丁打包成一个安装程序.(看起来更有官方的样子)

ps:execute不单仅仅只能执行.exe,也支持.bat


所以我们可以使用更简便的方式:

- 12340-zhCN.mpq的内容
   - prepatch.lst
   - patch-zhCN-6.MPQ
   - patch.bat
   - wow.exe

prepatch.lst的内容

extract patch-zhCN-6.MPQ
extract patch.bat
execute patch.bat
extract wow.exe
execute wow.exe

这个的安装过程是:解压MPQ补丁patch.bat,执行patch.bat,bat剪切补丁到应该放置的目录,解压wow.exe,运行wow.exe

ps:因为是使用wow.exebuild号判定是否需要更新,所以更新后的wow.exebuild需要和之前的不一样.所以这里采取更换了一个wow.exe.

当然,你也可以使用我之前折腾的wowVer.exe工具,就不需要吧这个wow.exe包进去了(我就是为了实现这个服务端发送补丁的功能才搞的那个工具 - -).这样可以大幅减少安装包的大小.wowVer.exe只有7.50KB,对比wow.exe7.34MB无疑把安装包的大小减少了很多.

所以优化一下:


- 12340-zhCN.mpq的内容
   - prepatch.lst
   - patch-zhCN-6.MPQ
   - run.bat
   - wowVer.exe

prepatch.lst的内容

extract patch-zhCN-6.MPQ
extract wowVer.MPQ
extract run.bat
execute run.bat

prepatch.lst的过程很好理解,解压补丁patch-zhCN-6.MPQ,wowver.exerun.bat,并执行run.bat


run.bat的内容

move /y "patch-zhCN-6.MPQ" "data/zhCN/patch-zhCN-6.MPQ"
ping -n 1 127.0.0.1>nul
wowver.exe wow.exe 3 3 5 12341 1

同样也很简单,移动补丁patch-zhCN-6.MPQdata/zhCN中,延时1秒(防止wow.exe没来得及关闭导致被占用而使得wowver.exe不能对其修改),使用wowver.exe修改wow.exe的build.


这样就完成了安装包的制作了,在玩家登入的时候,就会自动安装这个安装包以更新玩家的客户端.

不过这个时候还有一个步骤,就是数据库auth.game_build_list 表格中需要新加一条数据12341.添加完成后重启authserver.exe

那么玩家就能通过新的版本12341进入游戏了.


后记

总之,这个功能算是完成了..

制作安装包的过程第一次是比较麻烦的.不过做好了之后只要东西放着.做一个基础的.mpq,每次只要复制一个新的,把东西丢进去,改个名字就ok了.

不过吧.这个功能其实就是看着好玩罢了,实用性不高.

emmmmmmmmm

即便如此,我还是弄好了这个玩意.

对于大多数人来说,把补丁放到网盘让玩家下载安装其实就可以了.

事实上.一些模型,贴图等还是弄网盘比较好.

这个热更新更适用于dbc方面的更新.

比如使用我提供的wow.exe,可以直接在客户端根目录中建立文件夹DBFilesClient

然后dbc只要解压到这里就行了,连mpq都不用.

这是比较理想的.

其实我想做一个dbc比对,用两个dbc做比较,A与B有什么差异,然后生成一个应用到A补丁.然后A使用后可以变成B

同样道理.服务端更新了,新的dbc和旧的dbc比对,生成补丁,弄到安装包中,玩家接收到,应用补丁到原有的dbc上.就变成和服务端一样的最新dbc了.

当然这个工具也不单单是为了更新补丁的,如果弄出来的话,可以记录dbc从头到尾经过了什么修改.

en 如果搞定了的话.. 这发送的安装包大小估计会更小.不过懒得做啊 (¬з¬)