找冰封王座地图修改器加密地图修改器

  输入游戏中文名称或版面名称:
【转】魔兽争霸的地图验证漏洞和***图原理,兼谈魔兽联机机制
当前离线
1614470 帖子
987 主题
4 精华
0 积分
1143 贡献度
157 金元
5149 阅读权限
90 性别
男 在线时间
722 小时 注册时间
2008-12-24 最后登录
2011-8-3 帖子
987 积分
1143 贡献度
157 金元
5149 性别
男 在线时间
722 小时 注册时间
2008-12-24 跳转到
字体大小:
发表于 2009-5-7 14:29
【转】魔兽争霸的地图验证漏洞和***图原理,兼谈魔兽联机机制
在此推荐ay ’ blog
看了这篇文章,希望大家玩dota时,不要要随便怀疑对方开图,或者使用外挂让男胖无限爆人品船长永久潮汐,毕竟开图也是有限制了。
转自ay ’ blog,大家还可以从那里下来开图工具,但小开怡情常开伤身,满足一下好奇心就可以了。毕竟dota是一项难得好的竞技游戏,失去的公平性,乐趣也就没了(注:现在ay 兄已经到浩方实习去了)
好了下面是正文
魔兽争霸的地图验证漏洞和***图原理,兼谈魔兽联机机制
发表于: 原创, 游戏 | 作者: ay 标签: bug,dota,魔兽
最近老有人问我是不是出了改dota英雄技能的外挂,什么月骑无限大,剑圣无限斩,巫妖无限弹之类。
我在这里一并回答一下,并且稍微说说原理。因为我对地图方面其实是一窍不通,如果有说的不对的地方,还请指正。
其实这些现象都是使用了***地图导致的。本来魔兽争霸是有一个地图验证的,如果你跟主机的图不同,是进不去的(要下载地图)。但是魔兽对地图中的war3map.j文件是进行bcc(block check character)校验的,bcc不同于md5,bcc一般只是用来排错的,并不是加密算法。所以就有人写出了这样的代码,可以在b文件末尾添加上一些不起作用的字串,来让b文件的bcc校验码等于a文件(具体代码我就不贴出来了,很容易搜到)。于是呢,我们就可以做到随意修改地图中的war3map.j ,然后再处理一下,使之跟原来的war3map.j的bcc校验码相同。再把改过并处理后的war3map.j文件替换原来的,这样做出来的***地图,暴雪的验证会因为bcc校验相同,而把它认为和原版图是相同的。达到的效果就是,别人用正版图建主机,你可以进入,你用盗版图建主机,别人用正版图也可以进入。但是别以为可以为所欲为的修改war3map.j ,虽然你突破了验证这一关进入了游戏,但是魔兽的联机机制是没有办法突破的。
在这里稍微谈一下魔兽的联机机制,没兴趣的请略过这一段。魔兽联机时,一直有个同步机制,每个联机的玩家都会同时计算所有数据,一旦有不一致,就会导致掉线,这也是为什么用金山游侠之类的游戏修改器单机时可以改钱,联机时一改就掉线。因为你只能修改你自己的机器上的数据,而无法改别人的,单方面修改的结果就是造成你跟其他人不同,你就会掉线。当然,如果所有人同时修改的话,仍然是不会掉线的,所以现在有一些联机修改器,参加游戏的几个玩家一起开这个修改器,可以在玩rpg时改钱什么的,我几个同学就老是用这种修改器来通关一些很难打的rpg图。顺便说一下,这样玩下来保存的replay是无法正常播放的,因为replay只记录动作,你使用修改器的改动不会被记录,播放replay时会因为你并未像你游戏时那样修改数据,造成replay不合逻辑而出错。再顺便说一下吧,为什么所谓的人品外挂并不能实现。曾有人发帖抱怨,怎么蓝胖子次次放招都多重施法,怎么某人每次都暴击,他们是不是用了人品挂。其实这是不可能的,有人以为魔兽中的随机数据都是由主机计算的,这样主机就可以找到办法来修改随机数,造成每次都对他有利的结果。但是实际中并非如此,随机数也是所有人一起计算的,也就是说魔兽里的随机是个伪随机。在一局游戏一开始时,主机会发给每个玩家一个随机数种子(这个种子很有可能就是主机从建立主机到游戏开始所经历的毫秒数),之后的一整局中,所有的随机数都根据这个随机数种子,依照事先定好的算法计算出来,这样也就保证了所有人计算出同样的“随机”结果。另外,这个随机种子也会记录进replay,这也从一个侧面说明了魔兽里的随机是伪随机,如果是真的随机,replay就无法重现了。说的有点多了,下面回到正题。
因为魔兽联机机制的存在,你要是随意改了war3map.j,例如改成给自己增加10000的钱,但是别人是按照的没有修改的war3map.j,在别人机器中你是没有那么多钱的。这时你买一个8000的物品,在你自己机器上是可以的,因为你有10000的钱,但是在其他人机器上,你钱却根本不够!这样的不合理动作就会造成你跟其他人断开连接。
也就是说,你只能修改那些不会造成冲突的地方。例如有些***图可以显示出地图全开的效果,因为这些显示的东西只是在你本地机器上显示出来的,并不会对其他玩家照成冲突。类似这样的修改都是可行的,不会掉线。
那么,为什么会出现这种有变态技能效果的dota***图呢?我刚开始也很困惑,这么夸张的改动怎么竟然没有掉线?我跟朋友要了个***图玩的replay,在我的机器上,用正版dota地图播放,竟然完全再现了那些变态效果!因为我对地图方面并不了解,所以开始上网找资料,并通过qq向某些搞地图的高人请教,又下载了那个变态版dota***图和某平台私自山寨的所谓“原版”dota图,提取出来war3map.j来进行对比。经过n久的努力,总算搞明白他是怎么改出来这种效果的了。
原来是因为dota使用到了game cache,而***图是单方面修改了game cache中的数据,然后通过函数同步给了所有的玩家。通俗点说,game cache相当于一个池子,所有玩家共享这块区域,任意一个玩家都可以修改这个池中的数据,也可以发出通知,让所有人都来同步这个池子,这样就变相修改了其他人的数据。举个例子,例如dota里黑曜石的放逐技能,它可以减少一个人的智力,一分钟后再归还给他,dota里关于这个技能的函数,把目标和要归还的智力值记录在game cache中,1分钟之后会再从game cache取出目标和智力值,给目标加上相应的智力值,就完成了归还这个人的智力的过程。但是在***图中,这里增加了代码,先进行一个判断,如果黑曜石是本机玩家,会把game cache中记录的目标改成本方随机的一个队友,然后把game cache中记录的智力值改为500,然后通知所有玩家同步game cache中的这两个值,这样就完成了对所有人game chche中这两个值的修改。1分钟一到,dota就会向这个目标“归还”智力,这样,本方的一个玩家就凭空增加了500智力。(那个被减少智力的倒霉玩家就无法被归还了,可怜)
大致的原理就是这样了,具体细节我就不详细叙述了。不过dota用到game cache的地方其实并不多,所以能改的地方也就那几个。这也是为什么***图要专门改这几个地方,而不是改成例如加钱或者加攻击力或者直接胜利之类的,不是不想改,而是无法实现。另外,暴雪官方的地图是不会这样使用game cache的,所以不用担心对战地图被改(另外对战图还有暴雪标志的保护)。其他的rpg地图,如果本身没有用到game cache的,也就改不出来什么花样,最多显示个全图之类。
暴雪将会在1.23修补这个地图验证漏洞,目前1.23的补丁已经在测试中了,相信升级之后,这种改图***将不复存在。只是不知国内玩家到时是不是还要继续死守bug频出的1.20呢?
强行插入广告一则:浩方平台会再对地图进行自己的验证,md5验证,***图是无法通过的。
至于做山寨dota图的某平台嘛,就我目前来看,它是没有任何地图验证的,唉。
应广大群众强烈要求,这里给出山寨版dota 6.57c的***图链接地址,请大家自行围观(话说我参照这个做出了58b和59c的***图,活活活):
大爱苍井优
(C.C酱のDevil 晨晨)
当前离线
1721377 帖子
2750 主题
0 精华
1 积分
6779 贡献度
1212 金元
19207 阅读权限
100 性别
男 来自
天津 在线时间
540 小时 注册时间
2009-2-11 最后登录
2011-7-15 帖子
2750 积分
6779 贡献度
1212 金元
19207 性别
男 在线时间
540 小时 注册时间
2009-2-11 发表于 2009-5-7 17:15
万恶的山寨图啊~我被它恶心了好久的说~[em04] [em04]
冰封王座区欢迎你的到来,
有的人 只是生命里的流星 相濡以沫 不如相忘于江湖
当前离线
2217010 帖子
23 主题
0 精华
0 积分
-54 贡献度
-15 金元
61 阅读权限
0 在线时间
0 小时 注册时间
2009-9-27 最后登录
2010-2-18 帖子
23 积分
-54 贡献度
-15 金元
61 在线时间
0 小时 注册时间
2009-9-27 发表于 2009-9-27 20:39
支持官方地图!!![em04] (
GMT+8, 2011-8-4 21:56,
Proce ed in 0.064749 second(s), 4 queries, Gzip enabled
Powered by
2001-2009登录 只需一步,快速开始
当前离线
阅读权限
最后登录
2011-6-13
221274937
新人会员(初级), 积分 2329, 距离下一级还需 1671 积分
在线时间
75 小时
注册时间
2007-12-1
发表于 2008-4-16 18:05:50
关于标题
  这个标题是参考我喜爱的《银河英雄传说》7-4《解放,革命,谋略及其它》起的,没
什么别的意思,也就是把我要说的3个方面简单列举而已,当然关键是几者之间的关联,;
零 写在前面的话
  写这段的目的在于重新整理思路,并让大家对我写下回顾时的心情有所了解。
  我一开始接触魔兽是在Beta测试阶段,可以说是第一批玩魔兽的人,当时是以什么样
的心情来看待这个游戏的?我现在已不得而知,唯一还能保留的记忆就是我是因为喜欢Bl
izzard以前的游戏所以第一时间接触了beta阶段的魔兽。或许是激动,又或许是习惯于Bl
izzard游戏的一贯质量而能保持一种自然的平静,三年之后回头看那时的我,只能感叹时
光匆匆,转眼间物是人非,留下的只是淡淡的怀念。
  有道是万事开头难,所以这篇文章的开头我一直不知道如何入手,再想到那句“从哪
里来就回到哪里去”,我决定从我作为第一批玩魔兽的玩家开始讲述自己的故事。至于是
纪事本末体,纪传体还是编年(月/日)体,我想应该是前面两种混合吧,主线讲述我的事情
,涉及到一些重要人物的时候会以类似纪传体的方法进行单独的叙述。
  此外因为一些客观和主观的原因,我的私人事迹几乎无人知晓,所以这次回顾将会进
行全面的叙述,预计会进行很长的连载,估计连载结束时间为:2005年5月28日,也正好是
我在War3CN注册3周年纪念日,一个目前我还唯一能保留和我的魔兽行为相关的准确日期。
(修订附记:最后实际完成时间为5月15日,提前了两周)
  最后,我是工科学生,已经有很长时间没有写文章,文笔不到之处还请大家包涵。
壹 闲人的生活
  我进入大学是2001年秋,2002年春夏正是大一下半学期,这时大学的基础课程压得很
紧,又如何能和“闲人”联系得上?
  时间必须倒流到2002年元旦凌晨0点10分,我成为某医院2002年第二个住院者,住院原
因是踢足球导致腓骨骨折。1月5日我动了手术,脚踝打入3根钢钉,1月13日出院回校参加
期末考试;后经过一个寒假的观察,我被确定无法正常参加大一下半学期的正常活动因而
直接被判“重刑”--休学一学期。此事件留下两个后遗症:从此我不敢再踢足球;我同
届的同学以后都叫我学弟……
  既然不上课,又不能活动,我就成了典型吃白饭不做事的大闲人。父母为了让我能接
触更多的东西,在家装了10M LAN宽带上网,这也是我接触魔兽的开始。
  有了宽带的便利,我开始尽情在网上冲浪,过得无比悠闲自在,几乎忘记了脚上厚厚
的石膏和骨头里的钢钉。很快地,大约是三、四月份吧,我在魔兽的beta被破解为可以试
玩的时候第一时间下载了beta版以及升级包和破解补丁。由于界面上基本参考了星际争霸
的样子,虽然场景变成了3D,但对于早接触过3D游戏的我来说画面并没有特别惊艳之处,
感觉还是很容易就上手了。
  一开始只能联网打,我找不到人和我玩,只好对着游戏主菜单干瞪眼。后来总算出现
了有电脑AI的单机破解,不过是外挂的.ai文件,现在想来那就是Ja AI脚本吧(我没有打
开看过,猜测而已),虽然我现在对它是非常熟悉,但那时还是一点都不懂这些东西。渐渐
地,随着魔兽Beta版本的更新,Crack居然也越来越强大,最后把主菜单的所有显示项都破
解了而且可以进行战网联机游戏了(当然前提还是要有测试Beta CDKEY)。此时又一个我现
在非常熟悉的东西出现在我面前--战网私服,这是我接触War3CN的伊始,也标志着一个
闲人结束了整日在网上像没头苍蝇一样乱转的游手好闲的生活。
本篇后记:关于我受伤的事情,当时知道的网友还是有一些的,不过现在的朋友中知道的
很少,所以稍微介绍了一下,后面仍将有部分章节简述以后疗伤方面的一些关键事迹,大
家现在有什么疑问可以等以后的章节。:) (众人怒曰:有强行拉人看本文的嫌疑!)
本篇时段魔兽界大事年表:
2002/01/07 Beta测试注册开始
2002/02/07 Beta测试开始
2002/02/08 Beta 1.02发布
2002/02/13 Beta 1.03发布
2002/03/04 Beta 1.10发布
2002/03/16 Beta 1.12发布
贰 疯狂的春天
  艾略特在他的文中写道:“四月是最残酷的季节。”但在我看来,2002年的那个四月
是最疯狂的,而这个疯狂一直延续到了六月初。
  疯狂的开始就是我开始研究Battle.net私服,记得最初在二月就有支持魔兽的BnetD出
现(也就是后来臭名昭著的WarForge,此乃后话,赞且不提)。在中国开始宣传流行还是在
四月。对于那时的我来说,网络服务器是一种很新鲜的事物,在此不得不先介绍一下我自
己之前这方面的学习经历:
  小学2年级接触PC,3年级学习BASIC,中学学习Pascal参加OI,凭借仅知的穷举2大算
法回溯和递归居然混进省前二十两次,大学开始学习C半年就休学在家。当时主要用Delph
i和BCB做程序,但还没有做过达到可以称为软件的大程序。
  当时我接触到的软件基本都是应用型,碰到这种服务器型Daemon式的软件觉得很新鲜
也很有趣,所以就迷上了研究怎么进行服务器配置等,不过还没有想到去看软件的源代码
。好奇的种子毕竟不是没有办法生根,对我来说这颗种子对我的意义之大,或许在当时无
论如何也想象不到吧,但现在的我每次想到那时的情形,都不得不由衷地感谢BnetD作者群
为我的人生带来如此迅速而巨大的转折。
  支持魔兽的BnetD不是本来的BnetD小组的产品,而是一些其他开发者通过研究魔兽的
协议而修改的BnetD,它的另一个名称上面已经说了,叫做WarForge。国内出现用于公众网
络的WarForge服务器应该是在三月吧,比我初次接触它还要早。我当时在研究者中算是后
辈,于是在一些国内外的论坛认真研究别人介绍的方法,学习一些C/S结构的基本原理和观
念和运用于联机游戏时的一些变化等。后来我在某个外国论坛参与了一些讨论,当时我已
经开始使用Soar作为网名和论坛帐号。不过在国内,我还没有认识各路神人,参与相关的
讨论等,只是在一些地方根据下载连接等找到外国的相关站点。
  随着渐渐已能适应脚踝里钢钉的感觉,已经不知不觉到了5月。在当时看来是几乎投入
全部精力研究魔兽私服战网游戏的情况下,我也同时在一些公众私服上练习玩魔兽,不过
水平一直提不高,这一点和我星际打得还不赖比实在是有点丢人,不过当时心思完全放在
研究服务器上可能也是导致玩得不好得原因之一吧。在这个春末,魔兽Beta也出现了几个
关键的版本更新,WarForge也不断升级提升稳定性和完善功能,我也在摸爬滚打中掌握了
一些自己的心得技巧。
  当时父母一直说休息在家的我不应该游手好闲,该学点什么对以后有帮助的东西.而
我正沉迷于魔兽Beta中,于是我决定从魔兽开刀做点什么东西。而从此也拉开了我制作魔
兽周边软件的序幕。
叁 处女作风波
  由于经验的匮乏,当然是先拿小软件开刀。当时我选中的就是魔兽的服务器Gateway修
改器。所谓的Gateway,在官方就是那4个服务器:US.West,US.East,Asia,Europe,而对于
私服来说则要通过修改Gateway列表来添加它们的ip使得客户端能连接过去。那时候的几个
服务器Gateway修改器显然都是一些研究破解/数据包分析的高手兼职做的,界面繁复,比
较难上手,而且都是英文版的。于是我决定做一个简单易用而且有中文版本的Gateway修改
  同样由于经验的匮乏,我想了几天才决定了软件的名字,叫做BNet Gateway Editor,
在现在看来实在是一点创意都没有,不过当时我的想法是软件名只有充分体现软件的作用
才能在初期为人所接受,当然后来我才知道事情不一定是这样,一些奇怪或者夸张的名称
也能引起他人的好奇和关注。
  大概是用了三五天的样子,完成了第一个版本,用的是RAD两巨头之一Delphi。为什么
没有使用VB?说起来我学习BASIC应该更早才是,这个就要讲到当时我的几个心态,一方面
我不喜欢编译好的可执行文件需要Runtime文件,另一方面我一直觉得VB的语法以及功能实
现上比较差(三年后的今天还要加上一条:速度太慢),故直接舍弃了VB。Delphi的VCL编程
还算熟练,而编程中的主要困难就是分析注册表中数据的结构,其中包含星际争霸、暗黑
2和魔兽的3个注册表项。
  第一个版本发布前我一直在思考应该发在什么地方,最后还是决定国内外都发一下,
于是在当时国内影响最大的War3CN论坛里注册了帐号Soar(之前我虽然经常去看东西,但是
没有注册帐号),发布了中英文两个语言版本,而在国外某论坛只发了英文版。这天就是值
得我纪念的5月28日,而Soar这个帐号也就一直沿用了下来。(修订附记:关于Soar这个帐
号名的来源,是汉堂公司著名战棋游戏炎龙骑士团2的主角的名字)
  当时软件的界面非常简单,用了个固定大小的小窗口,使用了文本、按钮和列表三个
最简单的控件拼起来的。不过也很容易理解,操作很方便,当时受到了一定程度的欢迎。
这令我有了一点信心,于是根据一些人的建议,进行修正和改进,在短短两周内发布了多
个版本。当然这也是经验匮乏的表现,有时候甚至一个不严重的小修正也要发个新版,后
来参与团队开发后我才理解到定义软件发布周期的方法。
  大约是在6月10日前后,一个所有程序员应该都碰到过的惨事发生在了我头上(不用说
也是经验不足导致),我在重装系统时未备份就直接格式化了工程源代码所在的分区,导致
2周多的辛苦付之东流。我因此而非常沮丧,一度有退出开发研究其它东西的想法。或许当
时如果我那么做了,我和魔兽的缘分也就止于做一个玩家了吧……然而在这时两件事情把
我挽救了回去。
本篇时段魔兽界大事年表:
2002/05/04 Beta 1.30发布
肆 初见正式版
  第一件事是魔兽正式版的出现,虽然Blizzard声明7月上市,但是6月14日盗版已经流
了出来(由此体会到内奸的可怕之处),我第一时间从0day的ftp上下载到了游戏的ISO镜像
。正式版的质量果然和Beta完全不一样,不仅各种bug基本消除,和硬件的兼容性也得到了
质的飞跃,对显卡的要求也有所降低。当然还有一点现在想来也是很佩服的,那就是电脑
的AI,当时单机和电脑对战,发现电脑的AI和那些Beta破解的AI比强横得有些吓人,比星
际也强了无数,我打了10盘才侥幸赢了一次,于是开始慢慢总结心得,并寻找适合自己的
种族,不过最后还是没有发现什么特别适合我的种族,大概就是那种菜鸟级的人的通病吧
,我一直到现在还是Random的。与此同时,支持正式版的私服软件也迅速诞生,WarForge
升级支持不说,还有另一个从BnetD改进的服务器软件也出现在大家的眼前,记忆中是叫W
ar3GaSM(修订附记:经过调查已经确认是这个名字,看来我记性还不差)。我当然也毫不犹
豫地投入服务器的研究中去,不过当时花的时间不多,主要是因为那第二件事,
  第二件事就是参加CET4的考试。因为休息在家父母总是说我要学这个学那个,于是帮
我报了CET4,我当时觉得CET4很简单,再说我在国外论坛和别人讨论也没有什么也没觉得
怎么困难,CET4还不用放在眼中。但是在父母面前总得做做样子,所以每天抽几个小时在
房间里研究CET4单词和考卷(其实一半以上时间在睡觉),最后参加考试时还比较得心应手
,尤其作文题目居然是My Use of Computer,这实在是太便宜了我,三下五除二就写完了
。CET4迎考一方面通过一个时间段缓解了我心中丢失源代码的郁闷,另一方面也让我心情
愉快了不少,所以考完后在各论坛也渐渐活跃起来。
  在这段活跃的时间里,我认识了几个对我后来有很大影响的人,其中我觉得最重要的
一个就是Ranyon,人称“蛋蛋”,当年War3CN的土皇帝。Ranyon这个帐号的来源,说起来
也真是无奈,居然是蛋蛋把星际中人族将军的名字Raynor拼错了,-_-!从War3CN成立到正
式版出来那段时间,War3CN论坛最活跃的一直是蛋蛋兄,他基本上每个月发贴量在2000以
上,我注册时已经达到了五位数,但是其中却没有多少是灌水,基本是讨论和回答别人的
问题(我比较讨厌重复回答相同的问题,这点我很佩服蛋蛋兄的耐心),就这点来说还算是
很称职的管理员。此后我在和他的交流互相学习了不少东西,而他也对我在某些问题的认
识和洞察力非常的吃惊,所以一直很看重我对于一些东西的看法。
  当时War3CN算是比较守法的论坛,不随便提供盗版的信息,不过还是有一些地下形式
的讨论和疑难解答,都是关于已经出现的盗版正式版的,虽然置顶和精华都还是Beta,那
时基本上就是蛋蛋为主,我辅助进行一些解答工作(还有几个人,比如Ayumi等留待以后介
  很快地,我们成为了War3CN疑难解答区的双璧,而魔兽的正式版也终于上市了,那天
是7月2日。仿佛盛大的节日一般,War3CN发贴量剧增,大家终于可以公开进行正式版的讨
论,所以各个都兴奋不已,而我也在这样欣喜的气氛中下了个新的决定……
本篇时段魔兽界大事年表:
2002/06/13 Blizzard宣布魔兽正式版压盘(Gold)
2002/06/14 Razor1911放出盗版的魔兽正式版1.00
2002/06/25 官方魔兽Beta测试结束
2002/07/02 魔兽正式版和Collection Edition在北美和欧洲同时上市,同时发布1.01补
伍 成功的无奈
  为了提高自己,我决定用完全重写Gateway编辑器,并且使用更多的控件和更多的功能
,但能保持原来的简单易用性。在这种情况下,BNetEditor就诞生了。
  制作BNetEditor大约用了一周的时间。当时正好是脚伤好到基本可以下地开始练习走
路的时候,所以每天都在写程序写到苦恼的时候撑着拐杖在家里转圈思考(受伤前我就有踱
方步思考的习惯)。因为之前编写BNet Gateway Editor的经验,整个内核用了不到2天就完
成了,之后都是在不断地修整界面,增加功能,提供了常见服务器列表,选择性导出为注
册表等诸多功能。大约是在7月8日前后的样子,BNetEditor的Beta版放出。
  起初并没有多少人关注BNetEditor,大家仍然使用BNet Gateway Editor为主,不过经
过了几天的置顶,收到了一些玩家的反馈和意见,我更新了若干个Beta版本后,渐渐地受
到较多人的注意,慢慢都转用BNetEditor,看到大家的支持和使用反馈,我觉得投入的心
血都是值得的。在经过一次自认为是完整的bug修正后我发布了1.0正式版,结果在几小时
内就发现了严重bug(测试经验不够的典型),于是立即发布1.01版进行修正,然后第二天又
发布了1.02,才算是把bug真正的除尽。当时我对于这种情况觉得比较尴尬,不过广大玩家
倒是比较宽容,对于最后的版本给予不错的评价。
  这个周期的开发对于我来说是学得最快最多的一个时段,短短1个月不到的时间里,我
对软件开发的认识简直有了质的飞跃,所学所得超过了以前的总和。在我现在看来,那个
夏天的经历,无疑是引导我人生的一个转折。没有那个夏天,就没有现在的我,更没有大
家现在看到的我的很多作品。
  打响名声不仅仅因为我做出了BNetEditor,在War3CN论坛的讨论中我经常扮演关键解
释和分析的角色,得到了很多玩家的欣赏和“盲目崇拜”(或许大家觉得崇拜是正常的,但
是我个人非常不喜欢这种感情倾向,我喜欢和别人像朋友一样交谈,乃至争论,后来这种
习惯曾被人称作以身份压人,也算是很无奈的事情,这是后话)。
  无奈就在这时出现了,蛋蛋因故有几天无法上网,要找人代理版主,于是就招上了我
。我这人在思想上是很倾向于中国古时的道家思想,喜欢无拘无束的出世生活,只在必要
的时候出现,平时过些平静闲适的生活是我的终极追求。而且我又非常的怕麻烦,也就是
不喜欢做自己觉得多余的事情,一般人称之为“懒惰”。然而我又非常重视朋友的情谊,
所以当被交予这个任务的时候,我非常严肃地告诉蛋蛋我接受这个任务但在他回来后要立
即把权利拿回去,我立即洗手不干。他有求于我当然一口答应,想不到这次算是上了个不
大不小的当。他回来的时候居然说让我继续挂着版主,不想管可以不管,我看推不掉,也
只能苦笑着接受,后来一直就被扣上版主的帽子没除掉。
  尽管我是非常的无辜和无奈,当时的魔兽却是势不可挡,连续几周拿下北美销售的冠
军,预订了无数的年度大奖,Blizzard再次证明了他们慢工出细活的强大实力(跳票之王只
有对游戏质量的承诺不会令人怀疑)。国内外无数魔兽站点如雨后春笋冒出来,而在一个偶
然的机会,我在一个国外的魔兽站点上看到了一个软件,这个软件又把我引导向了新的开
发方向……
本篇时段魔兽界大事年表:
2002/07/19 1.01B补丁发布
2002/08/01 魔兽成为7月北美和全球销售第一的游戏
陆 分析与研究
  这个软件的作者是BlackDick(一个很强的人,现在仍然很活跃,而且我每次看到这个
名字都有爆笑的冲动,想必大家也一样,呵呵),名称是repinfo,版本好似是0.03,能够
查看魔兽Replay的基本信息如游戏版本,地图名称等。当时我就很感兴趣,原来Replay的
内容是可以解析出来的。
  可是我自己用UltraEdit(以前修改游戏存档专用,^_^)打开Replay看却是完全的乱码
,根本没有规则的字符串在里面,当时我觉得应该是内容被加密了,于是向BlackDick讨教
Replay格式。第二天BlackDick就发布了repinfo 0.06并且附带了一个Replay文件基本格式
信息的文档。我迫不及待地进入研究--原来不是加密,只是将Replay的内容按照0x8000
字节分块用zlib压缩了而已(当时BlackDick只指出第一个压缩块,后来我才知道其实Repl
ay是由连续的压缩块组成)。repinfo 0.06已经能够分析出参与的玩家,只不过在格式解释
里比较含糊。
  看来只有自己研究了,一动手就卡壳了,用Delphi的TUncompre Stream解压replay的
压缩块的时候异常报错。好在经过一个月的锻炼已经觉得走路比较顺畅,脚踝里的钢钉的
感觉已经是若有若无,所以常常踱步苦思,经过两天的研究,我发现虽然报错但是解压出
来的数据是正确的,用try/final直接忽略异常就可以成功解压出来,终于实现了关键步骤
的突破。然后我把解压出来的内容存入二进制文件,再次祭出UltraEdit进行分析,然而分
析到游戏名和地图名那里却卡住了,这里有一些奇怪的字符,使得字符串像是被分裂和扭
曲的样子。一时间研究不透,我想就先把研究出来的部分做成软件吧。
  首先当然是写分析replay的引擎,由于已经解决了解压问题,可以说是一帆风顺。然
后界面上用的还是古老的固定大小窗口和控件列状排列,反正是初始版本,讲究一个完成
度,而不是实际效果。最终定名为Replay Info Viewer,大约在8月下旬的样子发布,这个
最初版本只能说是提供了基本的信息显示,甚至连参与玩家信息的显示都非常的不完整。
而我因为那个卡壳的问题一直解决不了,也很郁闷,渐渐在论坛的发贴量也大了起来。感
觉在论坛讨论确实能在一定程度上疏解心中的不快,和那种喝酒消愁的感觉很相似。这段
时间我已经的称号已经变成了“大大”或者大虾,当时确实有一种自己的成就被人认可的
欣喜,这也是能消缓那些郁闷的另一个原因吧。
  在这种不爽的心情的影响下,我当时在论坛以版主的身份定了一些严格的版规,比如
禁止重复提问等等,还大量删贴,那段时间有点过于严厉的管理当然招致一定的反感,后
来过了一段时间当我能很理智地面对以前地事情的时候,终于认识到了版主需要的不仅是
规矩,而且要能刚柔并济,非必要时应当保持一定的宽容。
  然后,开学的时间渐渐近了(隐约记得那年交大新生是9月7日开学吧,我休学后得重读
大一,所以跟新生一起……-_-!)。这时,Replay分析界的又一巨头的出现终于使得困惑我
许久的问题迎刃而解……
本篇时段魔兽界大事年表:
2002/08/08 暴雪首个MapHack惩罚声明
2002/08/15 1.02补丁发布
柒 重回校园
  时间应该是在9月初的样子,一个帐号为klieg的人出现在我的眼前,他整理出了一个
新的replay文档,对我碰到的那个奇怪的字符串部分格式进行了详细的解释(现在他的站点
还在:warcraft.kliegman.com,上面仍然有一些replay的工具,而cvs里有较为新的repl
ay格式文档,当然,此后最新的文档都是我更新的。修订附记:就在4月底那里的官方文档
又更新了,感谢blue和nagger的勤奋)。由于加密方式比较奇怪,所以我读了几遍才明白,
再拿来几个replay进行验证无误,总算是长出一口气。在klieg的文档中介绍了讨论repla
y格式的论坛所在站点:shadowflare.gameproc.com(原来的域名是shadowflare.ancillae
diting.net,后在2003年10月改为现在的),此后我就常常去那里参与讨论,参与和见证了
replay格式一步步被分析出来的全过程。
  我抓紧上学前的几天时间赶紧把需要完成的部分代码写好,发布了应该是最后一个版
本的Replay Info Viewer,时间恰好是去上学报名的前面一天晚上(此后我经常在假期最后
一天晚上发布软件,貌似已经成为习惯,^_^)。
  当时repinfo也被放在War3CN论坛里,大家经过比较后还是觉得repinfo界面好,但是
由于Replay Info Viewer更为简洁,而且是中文的。所以总算最后反响还不错,也有很多
人问我如何研究出格式的,我就把文档给他们看,结果大多数人在解压缩部分就看不懂,
剩下的基本上在那个字符串加密的地方也卡壳了,当时我只能感叹能认真深入研究的人实
在太少(现在的情况稍有好转,在中国已经有.NET的Replay分析库被做出来,还有很多人能
看懂文档并和我讨论)。
  那么replay文件中后面的数据是什么?当时还没有人研究出来,我经过几次分析后也
没有什么头绪,加上到了学校上网困难,也就没有下文了,想不到这个东西一放就是将近
一年……
  每日过着寝室-课堂两点一线的生活,我偶尔去网吧上上网,比较多的上网方法是去上
一届原来一起的同学那里上网,他们大二后都已经通网了。那段时间我在War3CN的活跃度
有所下降,不过在很多魔兽相关开发论坛的出没却有不减反增的趋势,特别是对私服软件
的研究更为深入,并且渐渐对服务器和游戏的通信等有了深入的认识。同时,我对私服软
件的历史则有了个大概的了解,能够区分各种服务器之间的联系和不同发展道路。
  当时国内的私服有3大阵营,一个是星际服务器,通常用FSGS;第二个是暗黑服务器,
通常用BnetD-thread+D2CS/D2DBS或者他们的GUI整合版BnetW,最后一个就是BnetD第三方
改版WarForge等。其中FSGS不是开放源代码的,无从研究其代码,而BnetD-thread和WarF
orge等都是BnetD的改版,前者是为了支持暗黑2开发的一个简易高效版本,修改者是中国
的高手onlyer和faster,后者是为了支持魔兽而开发的,作者群一直是神神秘秘的。不过
这也难怪,因为当时Blizzard正在告BnetD侵权,所以风声很紧,谁也不想当出头鸟。不过
WarForge的作者因为擅自使用原来的BnetD原来的源代码而不遵守前者的GPL而被排斥,因
而一直不能算是“得意”。在这种形势下,得到BnetD官方认可的后继者,现在真正的暴雪
服务器软件王者-PvPGN终于出现了……
本篇时段魔兽界大事年表:
2002/09/07 1.02A补丁发布
2002/09/08 Blizzard首次惩罚MapHacker,关闭20000帐号及对应CDKEY
2002/10/09 1.03补丁发布
2002/10/11 Blizzard删除大批使用Disco ect Hack的帐号战绩
捌 徘徊与摸索
  PvPGN的出现导致了一次服务器软件大换代,WarForge迅速淡出私服界(半年后又卷土
重来,不过已经不成气候,此乃后话),我的研究重点自然也迅速转移。
  那时候PvPGN发布时都是附带源代码的,可惜我那会儿C用得极少,大概加起来也就学
了几周的样子,信心本就不太足,再看源代码一大堆约百多个文件就晕了,不知道从何下
手的好。在代码堆里转了约莫几天的样子实在是无从理解,没奈何只有先放弃看源代码,
稍稍研究服务器的架设以及游戏端的配置的技巧。这些东西对我来说已经不是什么大的难
题,说研究是好听,其实也就是无聊之中摆弄一下而已。
  当时War3CN和奥美关系不错,有不能明着支持私服的宣传,所以在版上至多只能简单
地含沙射影几句,或讲讲游戏的服务器列表怎么改(当然是用BNetEditor,^^)。教育网内
讨论私服的也只有清华的几个BBS,而且很多也管得比较紧。当时blueink(教育网最大的魔
兽服务器,一直延续至今)已经架设好,只是我上网条件的限制,还不知道它的存在。在我
和blueink有交集前很长的一段时间,我也就是“单干”,一直小打小闹,始终没有什么像
样的东西弄出来。不过我继承了自己一向的习惯,把自己的知识向广度里扩展,对各种服
务器软件进行了一定程度的研究。那段时间也就是摸摸魔兽私服,再看看暗黑封闭战网的
架设原理,回头甚至还翻翻FSGS对Westwood游戏的支持情况,也就是这样在第一个学期的
前两个月里迷惘地徘徊着。
  那段时间里PvPGN推出了pvpgn-stats,一个php网页脚本式的排行榜页面,相当于官方
的ladder排名页面。这倒是引起了我对网页脚本尤其是php的极大兴趣,开始摸索着汉化p
vpgn-stats,甚至有自己重新实现一个的冲动,这个冲动到很晚才实现。不过php的知识迅
速地积累了起来,成为了日后的宝贵财富,也是我之后办起个人主页的技术基础。
  那段时间胡乱摸索的另一个方面就是mpq的技术。说起研究mpq,还得从replay格式说
起,讨论replay格式论坛所在的站点就是shadowflare开的,shadowflare就是sfmpq的作者
,我在那里看他的页面时对mpq产生了一定的兴趣,后来又在creationcampaig (现在已经
关了,以前是很著名的星际站点)看到了Quantom写的I ide MoPaQ,从而基本能理解mpq的
结构原理。简单地说来,mpq文件的格式就是一种压缩格式,把多个文件压缩在一个数据文
件里(很多公司的游戏,比如KCET的实况足球,奥汀的三国群英传都是用的类似的技术存储
数据),使用时再进行文件的读取。当时几个著名的mpq处理库为lmpqapi,sfmpq和storm.
dll函数入口,前两者因为能够修改mpq的内容而被广泛用于各种Blizzard游戏硬修改中,
至于storm.dll的函数入口则因为良好的兼容性主要用于读取文件。那时候最流行的三个m
pq工具则是winmpq,mpqview和mpq2k,各具特色而且使用都比较简单。后来我有幸能制作
自己的mpq工具也是因为多次使用它们后想综合大家的优点并提高运行效率,当然这又是很
久以后的事情了。
  在这样近乎于停滞不前的状态下,我在War3CN认识了Rance,一个可以说是对我产生最
大影响的朋友,由此我终于开始在私服界活跃起来。
本篇后记:回想起来,从七月到十月,短短四个月,我自己无论是精神状态还是技术能力
都发生了天翻地覆的变化,基本可以说是从一个玩家变成了一个魔兽周边技术的入门者(大
家不用对这个词有所微辞,当时有onlyer,sousou等前辈高人在,自己确实只能算入门者
本篇时段魔兽界大事年表:
2002/10/22 官方战网在线人数突破5万,注册用CDKEY超过百万
玖 战网联盟
  其实具体的时间我已经记不清楚,不过第一次看到Rance在War3CN的出没应该是在魔兽
1.02补丁出现的前后,之后到1.03补丁出现时我们有了一些接触。Rance是著名论坛“人品
问题”(
)的管理员,当时对魔兽的私服也很感兴趣,自己架设了一个。
  当时他和同在上海的我接触时主要是讨论一些服务器架设的问题,后来我们又认识了
无锡和广州的两个朋友(具体名字已经不太记得了,希望两位见谅)。此后大家越来越熟,
再加上当时3个服务器的人数都比较多,很多限于国内网络条件无法上战网玩的人都来玩了
,所以很快大家形成了一种要合作共同宣传的意向。而我则因为制作BNetEditor和研究pv
pgn-stats等私服战网关键技术而受命做技术支持。后来Rance让我做二把手。我以前一直
没有什么领导团队的经验,所以也就是纯技术工作为主,大家的合作等内容交给Rance处理
  在这样的形势下,我采用了自动更新技术和新的可伸缩界面的登录器很快地做了出来
,其实也就是BNetEditor采用服务器列表在线更新和绑定指定服务器做成的。那时我们几
个人在MSN上进行了一次小的商谈,最终确立组织的名字为Union of Chinese Warcraft S
ervers,简称UWS,中文名是中国魔兽服务器联盟。这个登录器就命名为UWS服务器登录器
  当时Rance在上海***游戏频道的工作比较轻松,白天管理UWS,晚上还能玩玩CS,有
时我也去凑凑热闹。在最初的一段时间里UWS的表现可以说是比较平淡,用户群基本还是原
来在3个服务器上的那些,宣传开展后也没有多出多少人。面对这种情况,我们又开了一次
会议,一方面由我负责加快技术方面的开发,而Rance则加大宣传力度。在这段时间里,R
ance和奥美的人接触过,奥美方面说只要不支持盗版就不会加以干涉,所以我们名义上要
求使用正版登陆战网。不过明眼人一看就知道,这其实根本是无法控制的,而且中国的盗
版玩家又这么多(我虽然有正版但是平时因为不上战网所以还是用盗版cdkey的)。
  接下来我负责的两个项目就是中文化的pvpgn-stats和tracker。前者我命名为PvPGN-
Ladder,最初是为UWS编写的内部版本,是参考pvpgn-stats用php重写,经过若干次的修正
和测试后已经可以成功地进行联盟3个服务器的直接访问和信息采取,因而将我们的ladde
r像官方战网那样按照不同的服务器整合到了同一个网站上便于浏览。至于tracker,首先
要解释一下这个工具的作用。当时BnetD类服务器都有tracker工具,也就是从各个服务器
收取带有各自服务器信息的UDP数据包并列表的工具,不过都是*nix版本的。我研究了tra
cker数据包的格式并做了一个win32的tracker,从而能让UWS能将各服务器的信息列表显示
。当时很多服务器都把信息目标地址指向我们的tracker,很快联盟的声势得到了空前的壮
大,而各服务器的在线人数也迅速飚升。加上PvPGN服务器的不断改进,稳定性不断提高,
服务器的运行效率也受到了玩家群的肯定。
  UWS的论坛也建了起来,我虽然是管理员之一,其实也只是管管技术和一些私服爱好者
研究研究。当时发了一些技术方面文章,后来曾有一篇介绍战网指令很受欢迎被四处转载
  不过很快到来的期末考试令我不得不停止手上的一些工作进入复习,而广大学生玩家
也因同样的理由而暂时离开了魔兽。因此UWS在这个时段内出现了一定程度的衰落。
本篇后记:昨晚有点事没能写,所以早上没有发,晚上特负荆请罪连写两篇
本篇时段魔兽界大事年表:
2002/11/04 1.04补丁发布
拾 新年的决心
  期末考试完后,放假的我反而更加忙碌,首先要全力恢复UWS的不景气现状,然后要根
据自己的意向再学点什么新的东西。当然War3CN那边也不能搁下,放假后论坛气氛空前高
涨,管理起来自然也是要累一些。
  在这种情况下我在开发方面的主要方向还是PvPGN-Ladder,顺带开始研究mpq的格式等
深入的技术。在年前我碰到了Kane和他的朋友Guru。他们两个以前都是参与FSGS开发的,
后来因为FSGS也和BnetD一样没落,所以改换门庭干脆自己做服务器软件,命名为BNCHN,
不过是只有他们内部使用的,而且和FSGS/PvPGN用文件/mysql数据库不一样的是他们直接
使用了承载能力更好的Oracle因而在性能上更为优异,当然前提条件是对服务器配置的要
求也比较高。当时用他们的优化内容主要就是用内存换速度。那时BNCHN在中国有3个服务
器北京,包头和云南,和UWS很像。Rance曾经想和他们合作,我也想看看他们的BNCHN到底
是怎么样的,不过商谈没有什么建树,后来就搁下了,不过我倒是和他们聊上了,讨论了
很多技术问题。
  那段时间我非常向往他们那种团队合作开发的经历,也很欣赏一些优化技术,所以后
来慢慢开始学习代码优化,然后拿Replay Info Viewer开刀开始改进代码,命名为W3RepI
  很快年关过去了,过年那几天大家都比较忙,我也没有做多少自己的事情,也就是疯
吃疯玩而已。等到恢复正常的习惯后我忽然似乎有了更多的想法,通过和kane等人的交流
,我认识到了真正的高手对待代码的一种态度。就在此时此刻,我终于下定决心要把PvPG
N的代码看懂。
  因为PvPGN是基于BnetD的,所以我先从BnetD的内核部分开始看起。当时BnetD已经关
闭但是cvs里的东西没删,所以我把cvs里的东西导出来慢慢阅读。BnetD没有什么开发文档
,所以基本上一小半是看注释,一大半是自己分析源代码。当时的我没有什么网络应用程
序开发,也没有跨平台的开发经验,身边也没有个高手指点,所以看起来非常的吃力,很
多东西要不停地google进行理解。时间也就这样不知不觉地过去,一看就是看到开学。
  在这段时间里,UWS的发展已经停滞不前,我们几个管理员之间的联系因为过年的关系
非常的少,甚至一度失去联络。后来慢慢地网站就冷了下来。当时我仍然在更新PvPGN-La
dder,不过也没有更多的可以进一步吸引玩家的方法,所以虽然苦恼但也无计可施(好在还
有私服源代码可以研究,不至于郁闷加无聊形成他人常说的自杀的条件,^_^)。
  开学前我又找到了官方的组织,也就是PvPGN的IRC,并且开始在上面活跃,参与了很
多讨论,英语水平也因此没有出现退步现象(一些人进了大学后英语退步是很正常的事情。
-_-)。并且还认识了dizzy和amadeus,两个在PvPGN开发之中至关重要的人物。他们当时也
对我看源代码提供了很大的帮助。值得一提的是amadeus正在为PvPGN做win32的GUI,我借
机学了不少Windows和界面相关的API。
本篇后记:很多事情的过程我都记得不太清楚,但是技术上的细节却倒背如流,到底我的
记忆力是好还是不好?为之一叹!
本篇时段魔兽界大事年表:
2003/01/31 1.05补丁发布
拾壹 个人主页
  很快寒假过去了,我又做了一次手术把脚踝里的钢钉拔除,不过伤口还要慢慢愈合,
所以走路还是一瘸一拐的。伤好了也算是好事,所以适应一下也就无所谓了,况且我又是
坐着搞技术居多。那段时间我在War3CN活动不多,精力都投在代码研究上,很多消息的传
递都是靠的论坛另一消息灵通人士Ayumi,1.05出来后很多东西都是他在处理(最终证实他
是男性是在很久以后,当时一直有人叫他玉米姐姐,这年头论坛人妖实在是多啊……)
  假期后,UWS日渐式微,我们几个管理人员之间的联系也是困难重重,Rance他们工作
上都忙了起来,而我也几乎是每天全天在搞技术工作。后来虽然没有正式解散,但是大家
渐渐淡出,UWS也就慢慢消失了。
  回想整个UWS,虽然不能说是昙花一现,但也是没有持续多少时间,总得来说责任在于
没有统一的管理和发展机制,各个合作者基本还是各自为政,缺乏必要的交流。尽管存在
这样那样的缺陷,我仍然从中学到了不少东西,比如一些合作的方法,管理的知识等等,
尽管都是皮毛,但比之不懂来说却已经是进了一大步。
  随着UWS的湮灭,那边的论坛已经没有人气,War3CN又不是技术为主的论坛,这时要找
一个能讨论技术的地方是当务之急。几经斟酌和考察,最终我选择了架设自己的网站,一
方面便于发布一些自己制作的东西,另一方面有自己的论坛进行讨论。
  这次总算是一个我能记得住的日期,2003年3月6日,我终于成功地注册了自己的域名
有了自己的空间。在3月初我已经开始写自己的网页php脚本以及后台,论坛是直接用的IP
B,一直到3月11日才正式写完,于是马上公布了自己的个人主页并开始宣传。新的网站自
然要点东西来吸引广大网友,我的定位是技术,所以在3天之内传了onlyer最新的D2GS,自
己学习php时做的php Replay Info Viewer等等。
  那时W3RepInfo也写到了关键的地方,我把mpq技术整合进去并直接使用ijl(Intel JP
EG Library)库从魔兽的地图中读取小地图显示,而mpq库用的是ActiveX控件MPQ Control
,用起来感觉还不错,只是对ActiveX这个技术一直有心结,总觉得效率不行。3月中旬把
W3RepInfo2发出来后受到好评,我的网站访问人数也迅速上升。论坛里讨论技术的人也慢
慢有了,虽然还是很少。
  当时冰封王座的Beta在3月3日刚刚发布,前10天只有内测用户能玩,不过在3月15日晚
上支持Beta的PvPGN和对应Loader都出来了,这对于正苦恼没有东西往网站上放的我来说无
疑是大好消息,立即上传。因为魔兽的成功,国内Beta测试的热情非常高涨,私服的出现
使得很多人开始研究如何架设私服进行游戏,于是网站的访问人数成功上升了一大步,只
不过由于没有自己的拳头产品,而且私服这些东西用户群毕竟不大,所以到底还是有较大
的局限性。
  撇开我的网站不说,当时PvPGN也有了一个对手,就是用Java重写的WarForge,不开放
源代码且只架设了2个服务器。那时据很多内部人员说WarForge无耻地直接转换了BnetD的
代码到Java,完全违反GPL,遭到大量的指责。那时我还没有接触OSD(Open Source Devel
opment,开放源代码开发),趁这个事件好好学习了一下一些OSD的基本常识,倒也是获益
  此后一段时间完全可以说是我最忙的时期,主要原因是校内有一个同学拜托我做事,
于是进入了忙到crazy的四月……
本篇后记:终于写完了一整年的事情,看来不用到5月28日就能写完了,不过后面的事情记
得更清楚,可能每章节时间跨度会小一点,;)
本篇时段魔兽界大事年表:
2003/02/28 TFT Beta提供下载
2003/03/02 TFT Beta300升级开放,测试正式开始
2003/03/15 TFT Beta 303
2003/03/22 TFT Beta 304
拾贰 朋友的事
  在这里要介绍一下交大的另一位校友,现在魔兽界的大哥级人物zax,应该也是在那个
学期初认识的吧,之前在War3CN论坛虽然也聊过,但是还互相不是很认识。后来知道他是
我学长后就聊得多了,然后知道他是Replays.Net的站长,于是我们两个网站交换了链接。
当然RN最后发展成这样的国际顶尖replay站点可以看出zax个人的能力和影响力。简单介绍
一下zax,当时上海交大的魔兽战队C_a(Cyber Arena)的队长,之前星际就打得很好,玩魔
兽用UD,非常强,当时的交大战队几员战将也是非常的厉害,战队几乎是所向披靡。zax自
己则是创立了Replays.Net及社区。
  这段时间和zax也就是交流而已,麻烦我做事的是另一个朋友blueskyer,当时交大暗
黑战网的管理员。他托我改进BnetD-thread并制作一些战网需要的网页。当时我对BnetD的
研究已经比较深入,大部分代码都已经完全理解,PvPGN的增加部分代码也已经在慢慢阅读
中,所以改进来说并没有太大难度,主要的障碍是我自己的C语言功力尚浅。我慢慢为Bne
tD-thread增加了一些实用的命令,增加了好友系统,写了win32-GUI(练习一下GUI编写,
其实自己觉得还是*nix效率高得多)。后来发布在自己的页面上。当时只有清华的紫霞在用
onlyer做的d2gs内部最新版本,外面的战网一般都是用不稳定的老版本。所有其它战网都
要和onlyer/faster联系才能取得内部版本,主要是为了防止用于一些商业用途(onlyer受
一些搞商业运作的私服战网所害被blizzard列为重点控诉对象,所以难免手段偏激,当时
虽然大家都不解,但是这么多时间下来相信大家也能够理解他的无奈了吧)。不过后来还是
在小范围被泄漏了出来,交大也拿到了这个内部版本并且架设起了战网,而我则要把Bnet
D-thread对新的D2GS特性的支持代码和自己做的修改合并起来,一段时间内一度非常的吃
力,不断测试服务器并修正bug,直到确认够稳定才敢正式投入使用。
  忽然想到一些题外话,当时服务器端怎么被泄漏出来的,很多人说是faster被朋友出
卖,之后1.10的贩卖案好似也是这么一回事,反正d2gs这个东西先后引起了不小的争执,
直到一年后d2gs 1.10放出才算是一个真正的了结。不过从这些争执上不难看出onlyer的实
力。如果没有onlyer,恐怕大家根本没有任何玩到暗黑封闭战网的希望吧,他绝对是国内
暗黑得以发扬光大的当之无愧的英雄啊。
   etd-thread改进的同时,我也正在着手制作PHP D2 Manager,一个网页管理程序,
可以让管理员直接进行服务器的管理和log查看,也能让玩家登陆对自己的帐号进行一定的
管理。当时在交大测试并且发布在自己的主页上。
  好像尽说暗黑的事情了,说说魔兽方面吧,这段时间主要花在看PvPGN代码,在IRC和
开发者们交谈以及研究Beta的一些东西上。由于Beta和原版的战网列表是放在注册表的不
同位置,所以我打算做一个Beta版用的Gateway Editor。
本篇时段魔兽界大事年表:
2003/03/30 TFT Beta 305
2003/04/10 TFT Beta 306
2003/04/20 TFT Beta 309
2003/05/04 TFT Beta 311(中间部分版本的发布时间已无从考证)
拾叁 非典与专注
  2003年的4月还有一件非常重大的事情,那就是非典在中国的大规模爆发,进而引发的
一系列社会防疫活动。最终我们这些学生只能在学校度过五一劳动节假期,甚至一直到期
末考试都不能离开学校(当然特殊情况可以打申请)。对于大多数学生来说应该是噩梦吧,
毕竟不能出去活动是很难受的,只有少量迷网游的,以及我这样每天坐电脑的才会不为所
动吧。其实对于我来说,甚至能更为激发自己的一种专注,全身心地投入研究中去(还有一
个关键原因是人心惶惶,大家都逃课,老师上课也提心吊胆,所以平时不用去上课,每天
都是从早上一直弄到晚上)。
  TFT Beta版的Gateway Editor就是在这种情况下诞生的。由于以前的开发经验,只用
了不到一天的时间就制作完成并放出,命名为War3X Gateway Editor,质量也得到了玩家
的认可。不过因为技术上没有使用任何新的东西,所以自己也觉得比较无聊,这个软件只
更新了几个版本进行了小的bug修正就宣告final了(而且Beta测试结束后就没用了,当然不
用更新得多勤快)。
  过了劳动节后,各宿舍楼之间已经禁止走动,加上无法出校门,本楼的网络又没通,
所以上网产生了极度的困难。当时的精力只好放在服务器代码研究上。由于投入的精力很
大,我甚至已经可以理解BnetD-thread对于BnetD的修改部分所产生的优化作用,还在PvP
GN中发现了一些bug。在理解PvPGN支持的telnet协议后我又制作了Battle.net VBot,现在
已经成为教育网私服blueink/md4u上某些人挂机的标准工具。
  研究代码对我的C语言功力提高的帮助是巨大的,而且通过对daemon这种极度需要性能
优化的服务器软件的代码的理解使我对代码优化产生了浓厚的兴趣,来说这也直接影响了
日后我写代码的风格。
  此外,我在自己的机器上架设了web服务器后继续做PHP D2 Manager和PvPGN-Ladder,
然后在五月的某一日躲过暗哨悄悄潜入大二宿舍楼上网更新网页并帮学校暗黑战网的管理
员更新服务器/网页。想起那时所冒的风险,简直就像地下党,后来谈起这事我和同学不免
都是苦笑不已。后来第二次去的时候采用了闯楼的方法,跑得比楼管理员快,溜进了某朋
友的寝室躲了一会儿,然后再转战暗黑战网管理员的寝室上网,这说起来就是一种惊险刺
激行为了,不过为了更新网页以及帮朋友做事还是值得的。
  当然一直研究这些东西也难免无聊,于是我终于拾起将近一年没有研究的Replay格式
开始重新研究。而在六一儿童节这天我们楼的网络终于通了(选这天通网也实在是够幽默的
),我终于又回到了全天候的上网的状态。就在这个燥热的六月,我在shadowflare的论坛
和blue兄聊上了,他就是第一个基本完成Replay信息格式分析的人……
本篇时段魔兽界大事年表:
2003/05/13 TFT Beta 312
2003/05/29 1.06补丁发布
2003/05/30 TFT Beta 314
拾肆 初夏的惊雷
  和blue兄聊上是因为看到他和我在做一样的事情--分析Replay的所有数据格式。不
过没有想到的是认识几天后,大概是6月5日的样子他就发布了一个w3g_format.txt的文档
,里面叙述了基本上可以说是比较完整的Replay格式,虽然action(动作区块)部分没有具
体讲解。当时我就知道离完全分析不远了,于是立即投入到一起研究的队伍中去,一同参
与的还有Nagger,和Julas。我们这几个人也就是后来Replay格式分析的4人组,之后还有
mike兄也作出了不小的贡献。
  大概是一周的时间吧,其实我自己没有帮上什么忙,只有很少的突破性进展,不过一
周后blue石破天惊地发布了完整的action(动作)部分的具体格式,不得不佩服他的技术能
力。我立即开始写自己的测试代码并进行bug检查。后来经过几次讨论blue又修正了几次文
档,并且逐渐完善。
  这时的我还没有着手开始开发新的Replay的工具,一方面格式文档虽然已经基本成型
,但是还有一些东西还是unknown(未知),需要进一步分析;一方面要准备期末考试;最主
要的还是另一个方面,也就是魔兽资料片TFT正式版(其实外国很多都是叫FT,前面那个Th
e不知道谁加上去的……)的横空出世。
  此次盗版TFT的出现要比暗黑和魔兽原版晚得多,5月29日压盘,6月18日才出现在0da
y的ftp上,然后很快传播到当时刚刚崛起的BT上。记忆中那时不知道0day的全部冲向BT,
估计当时TFT的种子和下载者到现在为之都是无人能破的记录吧,种子数到达过数万,下载
人数到达过6位数。那时觉得ftp慢所以也选择了BT,只看到硬盘满负荷运转,学校的100M
LAN带宽利用率奇高,下载速度平均达5Mb/s。3天之后又是一次具有网络大堵塞性质的疯
狂下载,对象是中文版的TFT,对于不懂英文的玩家来说可以说是福音,不过奥美翻译质量
实在是不敢恭维(大家公认,相信没有多少异议),所以我还是坚持用英文版。
  下到TFT后当然是马上投入游戏,打完任务再玩新的melee地图(当时还没有想到研究地
图编辑器的新功能,开始研究地图编辑器又是一个一年以后的故事)。而PvPGN和BNCHN都迅
速升级支持了TFT正式版。当时BNCHN还委托我写了BNCHN Starter,也就是UWS战网登录器
的一个翻版而已,所以没用多少时间,再说期末考试临近本来也用不上多少时间去做这个
  这个初夏的冲击实在是一波接着一波,上个月的无聊一扫而空,暗黑那边的事情已经
顾不上了,魔兽这方面的事情又多又杂,一边做事一边还在思考自己下一个要做什么,连
考试都是迷迷糊糊的差点写错东西。
  考完时已是6月末,当时非典事件渐渐平息,本以为要被关在学校没想到已经可以回家
了。前面不能出校门没法买票,最后买黄牛票我也忍了,做在回乡的火车上,我一边和同
乡兼同学聊天,一边在心中盘算暑假的计划。最后敲定第一个要完成的是BNetEditor的续
作BNetEditor 2。
本篇后记:终于要写到2003年7月了,对我来说绝对是我的魔兽史上最重要的一个月,请大
家拭目以待。
本篇时段魔兽界大事年表:
2003/05/29 TFT 正式版压盘(Gold)
2003/06/18 FLT放出TFT英文正式版
2003/06/21 TFT中文正式版出现(发布组织不详,疑为TLF)
拾伍 大作的诞生
  BNetEditor 2的基本目标是界面的改变,使用更为流行的样式和更为便捷的操作,并
且增加对更多游戏的支持。这些对我来说其实已经是比较简单的东西,所以几天就写完了
,发布了几个Beta就发了final,感觉上也没有什么可改进,不过后来证明程序还是有一些
奇怪的bug,我自己也一直没有空去检查,再加上前作太流行,该作并没有受到想象中的欢
迎,所以后来我自己评价各个作品时,把这个看成是失败作品。
  此后酝酿的就是更大的计划,做一个分析魔兽Replay动作以及APM的软件,也就是W3G
Master计划。说起这个名字,还要感谢zax,当时我不太会为软件起名,和几个人商量,
zax建议用这个名字,我一拍大腿说这个名字不错,于是就定下来了,后来就发展成为了一
个Master系列的软件。
  W3G Master内部Beta出现的时候正赶上jca的w3chart出世。当时我感觉双方各有所长
,我胜在分析速度,他胜在细节功能。因此我没有发布公开版本,只是给蛋蛋,zax等少数
好友进行内部测试调整,他们也发现了很多bug并提出了很多好的建议。到0.5的时候支持
了所有单位的显示,批量改名等功能并有了中文语言后我才于7月19日发布了第一个公开B
eta版本,该版本一出现就在国内市场完全压倒w3chart,迅速成为玩家的新宠,这应该是
我有史以来做得最受欢迎的软件吧。当时看到大家对它的赞誉,心理上还是非常满足的,
而且也受到激励要继续改进和完善这个软件。
  要说这个软件的存在意义,恐怕我自己没有各位擅长Ladder的玩家了解得多吧,反正
当时Replay动作分析出现后引起的震动是非常巨大的,引起了很多关于动作合理性以及AP
M高低等不同方面的讨论,而我作为一个APM仅120-150的菜鸟玩家,也只能在旁边傻笑,既
然自己对此没有什么深刻体会,也就没有什么可以发言的了。
  或许一开始写这个软件只是为了研究的新的技术吧,不过能有这样的影响却大大超出
了我原先的设想,随之而来的压力也就倍增。当时收到很多玩家的反馈和建议,我要慢慢
分析其中的bug原因以及建议的合理性和现实性,然后进行下一轮改进。暑假也没有什么事
情,除了高中同学聚会和玩之外就完全投入这方面的开发,基本和最初做软件一样几天一
个版本地迅速更新。然而想不到的是7月24日1.0正式版发布的时候又犯老毛病留下两个致
命bug,所以第二天立即发布了1.01这块遮羞布,只能感叹自己的不细心。
  特别介绍一下我在开发软件中用的工作组Quixotic Yawl Studio这个名字,3个单词的
首字母就是我名字3个字的声母字母。故意取了这样一个名字,纯粹好玩。再透露一点就是
Soar Chin中的Chin=秦,也就是我姓秦,;)
  W3G Master是我学习开发中的第二个关键转折,由这个软件开始我开始使用一些良好
的开发习惯,比如记录TODO,history,进行代码结构设计和优化等等。
本篇后记:对于我来说W3G Master的规模也算不上大作,不过大家都把他看成我的第一大
作,所以我就这么写了。
本篇时段魔兽界大事年表:
2003/07/01 TFT正式版发布并同时发布1.10升级补丁
2003/07/15 TFT 1.11补丁发布
2003/07/30 TFT 1.12补丁发布
拾陆 另一个方向
  在发布了W3G Master 1.01后,基本上就可以算是一个告一段落的成品,在开始下一循
环的开发前我还是先去研究一些其它东西拓展自己的视野。
  首先还是回到PvPGN,随着PvPGN 1.5的发布,功能已经基本稳定,剩下的就是补充没
有实现的官方战网的一些功能。当时我放下Replay这一块后稍微有了点时间,加上对PvPG
N的源代码已经非常了解,所以就尝试去实现战网的多语言功能。当时一起帮忙翻译的还有
另一位朋友KingoM。提到KingoM,当然又得好好介绍这位对我帮助很大的朋友。他是华中
科技大学的战网的管理员,那个战网命名就是KingoM,是现在教育网除了MD(原blueink)外
最大的战网,我和他认识后就一直探讨PvPGN的技术,后来他为我提供了cvs进行多语言翻
译的存放(虽然也就用了几天,不过还是要谢谢他),他也帮忙翻译了一些内容。由于他的
帮忙,PvPGN的多语言版本终于能在7月底我的生日及时发布。PvPGN 1.5 final发布后我又
立即做了对应的多语言版本,之后因为各个版本改进较大,而且我的实现方法也比较麻烦
,所以我就没有继续做这个多语言的版本。
  真正开始研究MPQ,是从那个八月初开始的。当时我在
接触到了Ladik
写的开放源代码的StormLib,一下子就着迷了,立即投入代码的研究中去。Ladik是继Qua
ntum后第二个独立破解出MPQ格式的人,而且比Quantum更强的是放出了一个开放源代码的
库。另外值得一提的是athena2000.myrice.com这个站点的站长,他也独立研究出了MPQ的
格式,也是我非常佩服的一个人。我当时研究MPQ的格式基本就是参考这两个人的网站上的
一些叙述和StormLib的源代码。
  MPQ的格式简单地来说就是一个压缩包,只不过加入了索引和加密验证等各种加速和安
全结构,使得游戏中的读取快捷方便,操作上也比较容易控制。当然,安全结构还是使得
破解相对麻烦了点,也难怪破解者这么受人尊敬,我自己则是一个标准的菜鸟,对破解一
窍不通(本来此时就应该把擅长破解的e er大虾拉出来介绍,不过考虑到他还没有和我的
故事有交集,所以留到以后吧)。
  一开始研究MPQ格式只是直接使用StormLib,写了MPQ2003,一个不需要任何外部dll的
MPQ命令行软件,功能上来说至少我自己觉得比较满意,MPQ2k能做的它都能做,还增加了
一些功能。
  做MPQ2003大概是经过了20天的样子,一直到1.32就连源代码也发布了。这段时间里我
又和当时清华战网blueink的管理员shentimmy和Aruth认识,并且聊得还比较多。在TFT推
出后blueink很快就用最新的PvPGN支持了,他们有些技术上的问题和我探讨。shentimmy是
那时清华smth战队的队长,Aruth则是负责服务器为主。
  假期的最后一天依然是猛写代码,发布了MPQ2003 1.5。之后终于迎来了大二的生活…
本篇后记:回答一下replays.net上某人关于UWS和BNCHN的提问:UWS最后因为缺乏管理和
人气,大家又都很忙,最后Rance只好关闭这个组织。BNCHN的衰落具体情况我也不清楚,
要问那些人,总体来说原因也是差不多吧。
本篇时段魔兽界大事年表:
2003/08/15 TFT销售突破百万
拾柒 团队活动
  上大二之后认识了很多学校CA战队的同学,当然是zax介绍的功劳,不过一直是一个地
下组织,没有自己的根据地和组织结构。后来到社团招新的时候上海交大的电子竞技联盟
终于被校团委批准成立,CA战队也就作为它的魔兽部门。之所以用“终于”这个词,主要
还是因为社团通过申请还是非常不容易的,学校一直对电脑游戏保持有害的观点。不过非
点期间因为大家不能户外运动,团委和几个社团联合举办的线上比赛取得了不错的效果,
从一定程度上改变了这些观点,最后才算是通过这个申请。由于大学里玩电脑游戏的人数
量实在不少,所以最后招收了不少社团成员。
  电子竞技联盟第一次大会的召开具体时间已经不太记得,只知道是一个晚上,先是各
游戏(CS/星际/魔兽/KOF等)部门部长在zax的安排下按照次序发言,后面才是“行政”部门
发言,技术部放在最后,记得当时我还想招几个成员做点事,后来留了联系方法居然回头
太忙忘了,而且后来技术部确实从来没做过事情,实在汗颜。
  后来又举办了电竞协会的第一次比赛,我去当魔兽组的裁判,并感觉到自己第一次融
入了学校的集体活动,毕竟以前一直都是单干,能和大家一起活动的机会是不多的。这次
团队活动也影响了我之后的一个决定,留到下两篇再讲
  一边处理社团活动我自然也没闲着,Replay部分W3G Master几乎是几天一个版本,从
1.1更新到1.7只用了短短一个月时间,其间根据julas和我的一个讨论增加了随机种族判断
,其实很简单,判断一个人第一个造的农民的类型;根据一些玩家的要求增加了Replay信
息输出功能;增加了nagger和blue的文档补充的大量动作区块;最重要的改进就是在1.5和
1.6先后增加的APM曲线图和单位统计直方图,这也是实现了原本w3chart的一个优势功能。
  MPQ方面的开发也是齐头并进,MPQ2003因为和某工程名冲突所以改名为MPQEx,代码不
断改写增强,发布了1.6。背后悄悄进行的还有MPQ Workshop的开发,这是一个图形化的M
PQ操作工具,目标是速度快,界面操作友好。基本界面参考windows的资源管理器和WinRA
R的长处,不过后来停了好长时间,那时都忙在PvPGN上了,这是后话。
  至于服务器软件研究方面,PvPGN所有的代码都已经读完,开始在PvPGN的开发IRC里和
开发团队进行开发方面的深入讨论。当时PvPGN的成员Pandemonium很照顾我(后来我做地图
就用这个名字,其实最初是他用的,^_^),经常和我研讨,也指点我一些本来我虽然看过
去了但是不太明白的东西。老大dizzy和windows开发牛人amadeus还是经常神龙见首不见尾
,只能偶尔逮住他们聊几句。
  国内部分主要是参与blueink的建设和改进,shentimmy和aruth甚至放心地把服务器的
远程管理帐号给我用,我自然不能辜负他们的期望(知道我重义气所以来套我-_-),一边管
理服务器一边进行少量的代码更新,其间还多次获得了宝贵的崩溃bug并汇报给了PvPGN开
发小组。KingoM那边一直和我聊得很欢,更新什么也很勤快,不过因为blueink光芒太耀眼
,KingoM只能作为blueink崩溃重启时的临时服务器用。
  9月结束后我就回到了家过国庆节,很难得地没能在最后假期一天发布软件,不过还是
完成了W3G Master 1.8的大部分功能,然后就迎来了又一个忙碌的十月……
拾捌 团队开发
  国庆节回到学校后我连夜赶工,把计划中的1.9要实现的功能也实现了,在第二天发布
了W3G Master 1.9,实现了所有直方图,增加了显示聊天记录等功能。W3G Master开发到
这个程度功能上基本上算是告一段落,所差的只是一些bug修正而已。
  此后的一周可算是过得浑浑噩噩,每日上上网到各个论坛去看看东西,再和朋友聊聊
天,基本没看进行开发工作,时间基本放在看PvPGN最新的改进上。终于某一天看到了遗留
产品MPQ Workshop,想到这个东西还没开发完,于是起手开始做,距离W3G Master 1.9 两
周后才发布了MPQ Workshop 0.5,三天后迅速完善功能发布0.6。MPQ Workshop因为中文化
以及极高的速度(快于当时的所有MPQ GUI工具)而受到国内用户的亲睐,不过还留下一些b
ug,特别是批量解压。然而此后该工具一放又是半年……
  进入11月的时候和另两个好友Aydge(阿吉兄)和smallthing开始聊得多了起来,Aydge
的站长,其战网也就是原来的lostcity。他也是我在学习过程非
常好的一个朋友,互相探讨D2服务器的技术为多。当时他还改进了BnetD支持了物价表命令
等,后来我还发在了自己的网站上。smallthing是天津大学的战网的管理员,后来还在做
FF7 PC版的汉化,听说后来还负责领导天大的ACM队伍,反正也是个很有能力的人。当时通
过和他们以及KingoM的聊天发现要想再进一步提高自己对战网服务器的认识光是研究代码
和少量修改已经不够,而是要进行功能实现和改进。就是在那时我确立了么加入PvPGN开发
小组的决心。
  下定决心之后就投入行动,到IRC找到各位开发者提出加入开发的要求,由于大家以前
还不算陌生,dizzy点头之后我就算是PvPGN开发组的一员了。第一个工作就是让我改进好
友列表的效率,并习惯PvPGN制定的编码习惯。最初不放心还没有给我cvs权限,让我提交
代码补丁。后来我提交的第一个代码补丁惨遭否决,被dizzy称为mi understanding,令
我比较郁闷。经过dizzy的详细解说后我重写了代码,终于得到认可,被直接采纳,frien
d.c/friend.h两个文件就这样被放加入到了PvPGN 1.6.0中。这整个过程是发生在11月底。
  那段时间除了完成上面派下的任务,每天就是在上午、半夜(因为时差的原因)和dizz
y,Pandemonium两个人谈论以后开发的重点,开发的技巧等等。以至于后来差点时差被倒
了过去。
  完成friend系统后,我的编码能力得到dizzy的认可,后来就把cvs的更新权限给了我
。又派给我bug修正的几个任务。到12月初的时候,我已经基本适应了团队开发,也学到了
不少合作的东西,感觉上和以前个人开发还是有很大的不同,如果处理不好反而严重影响
  这段时间暴雪官方很平静,没有发布什么新版本,所以很多额外的对新版本要做的研
究都省了,也难怪能投入这么多时间进行服务器的开发。而PvPGN小组也决定开始做新的功
能,一个当时PvPGN用户都急切想要看到的功能,而我也非常激动地要求负责完成这个功能
本篇后记:忽然发现拾贰章写错了一些东西,那时D2 1.10还没出,今天特地大大地修改了
一番,最后把所有章节出合集的时候估计还会发现记忆中的错误,望大家见谅
拾玖 工作和学习
  出乎意料地,dizzy居然批准了我这个刚加入不久的人负责大家企盼已久的clan部分的
实现。这对我来说是个鼓舞也是个挑战。自己以前还从来没有进行过这样的需要同时兼顾
系统和接口的开发。当时clan部分的最初一小部份已经由Pandemonium和另一个法国人做了
个开头。
  由于clan部分的数据包完全没有资料,所以还得从数据包的结构开始研究。采用 if
fer进行数据包抓取。我从最初的clan建立开始,逐步抓包,当时还要感谢CA战队的队友和
一些朋友参与帮忙(因为至少9人才能建立clan)。建立clan这个最难的部***决后,后面的
一些简单操作的数据包都比较简单,很快就逐步分析了出来。此时要再介绍一个网站,ht
tp://botdev.valhallalegends.com(简称vL,该站点的战队就叫vL战队),一个专门研究战
网数据包等内容的网站,内有专门的讨论论坛和一个 etdocs子站,后者是介绍各种战网
数据包的结构的一个文档站点。当时我在vL论坛和一些人进行了长足的讨论,对一些无法
确认用途的数据包内容进行了一一确认,最后基本完成了对clan部分16个数据包结构的定
  研究结构时就已经开始进行一些初级的编码,对于一些简单的clan结构已经写完。等
到数据包研究完成后就开始夜以继日地大量编码。每天都要凌晨4、5点睡觉,早上10点起
床继续,大概持续了两周的时间。
  编码完成后的测试基本是依赖blueink和KingoM两个战网,其间真的非常感谢各个管理
员的bug汇报,当时的crash机率相当的高,两个战网经常无故抽风,而我留下的bug数量也
算是惊人,又修正了足足十天才敢把代码提交给dizzy审查,然后提交进cvs。
  而后PvPGN 1.6.0的pre版本出来的时候仍然是bug多多,crash连连,韩国的PvPGN专用
测试服务器使用valgrind进行内存泄漏判断,每天都要汇报很多内存泄漏的log记录。所以
尽管代码已经提交,但我每天还要检查各种问题。
  不过这时已经没有集中开发的那段时间忙,而魔兽1.13已经到来,replay一些数据结
构发生了改变,所以经过和nagger等人的讨论后立即推出了W3G Master 1.95支持新版本。
  然后我还尝试用PHP分析replay格式,在zlib解压上面卡住了,后来得到BlackDick的
指点,终于明白了问题所在,把数据解压成功,后面的事情也就一帆风顺,慢慢把代码堆
砌了起来,然后就在shadowflare的论坛发了一些内部版本让大家测试分析。因为PHP的编
码已经比较纯熟,而replay的结构分析早已轻车熟路,最后虽然是测试版本,也已经有很
不错的表现。
  而就在那时,zax看中了PHP分析的潜力,要我帮replays.net做详细的分析引擎,我当
然是义不容辞接了下来,却导致了PHP的replay分析代码因为保密需要没能发布在自己的网
页上,这一点非常遗憾,当然这是工作需要,自己心里并没有什么觉得不好的就是了。
  如果说为PvPGN编码是工作为主,兼顾学习新的东西的话,那么自己的W3G Master等软
件就是为了不断学习新的知识。PvPGN是第一个我把自己所学的知识用于工作实践的对象,
尽管这个工作无报酬,但我却能从中得到不少乐趣。
本篇后记:五一总是在下午写文章,在家晚上不能熬夜,但是起床也不早,加上中午常常
要吃饭什么的,所以一拖就到了下午,回到学校后应该会恢复正常。
本篇时段魔兽界大事年表:
2003/12/07 War3 Art Tool发布,一个3DS Max的插件用于编辑魔兽自己的模型文件
2003/12/15 TFT 1.13补丁发布
2003/12/19 TFT 1.13b补丁发布
2003/12/24 TFT荣膺Game ot评选最佳多人游戏和最佳资料片两个奖项
贰拾 新版本的冲击
  进入2004年后,很快迎来了大二的寒假,这时迎来的就是暴雪迅速的版本更新。暗黑
1.10正式版推出,同时魔兽从1.13b到1.14再到1.14b用了不到一个月的时间,而且这些新
版本的改动都比较大。
  作为PvPGN的工作组成员,当然是先研究1.13之后的版本的支持问题。从1.13开始暴雪
对ladder信息进行了加密,传输时发送给客户端的都是加密过的内容,当时我和Pandae(我
们内部对Pandemonium兄的简称)讨论这个格式,后来dizzy也帮忙分析,一直没有什么头绪
,creeplord(PvPGN最初的小组负责人,后慢慢淡出,但现在在PvPGN内仍有活动)看了一下
也不行。后来我忽然看到几个熟悉的字符,联想到replay的格式后基本肯定应该是和repl
ay一样采用了压缩和加密校验码,于是把官方数据包解压出来分析,总算得到了比较完整
的结构信息。此后经过几次测试论证了加密校验码在客户端不验证,可以随便填数字,这
才放心地把这个部分写了出来,完成了对1.13的支持,源代码里也就多了zlib目录和anon
game_infos.c/anongame_infos.***件(大多是dizzy和Pandae的功劳,我当时还在一边修正
clan一边做自己的软件,他们那边的研究我只是提供一些参考意见而已)。
  然后就是2004年初那时国内闹得沸沸扬扬的暗黑1.10的支持,也是那年初暴雪的重头
戏。毫无疑问,要完整支持D2 1.10只能靠onlyer大大。d2gs 1.10也算是比较快地做出来
了,然而还是只有内部版本,还采用了一些网络验证来防止外面的人盗用,使用了RSA进行
不对称密钥加密。至于程序则用专业的反调试工具进行了加密。不过,后来还是被人进行
进程dump后破解了发布出来,名义上是一个陌生的小组,其实就是PvPGN的某成员伪装成一
个小组开发,为了不被指责。所以PvPGN迅速推出支持这个破解d2gs的版本也就在清理之中
了(算我一份功劳,我从某处为PvPGN小组获得了d2gs的内部版本,而且还参与了支持1.10
的d2cs/d2d 两部分代码的改动工作,或许有人要指责我,不过我觉得作为PvPGN的一员,
拿到这种东西不共享才算是对自己的工作不负责吧)。当然接着就出现了前面提到的北邮某
人贩卖内部d2gs版本,安游在线和山东某站开始支持1.10的事件,接着越闹越大,某站站
长还告诉我要买d2gs的内幕(此处限于保密需要,省去此人身份),后来终于让faster老大
知道了,通过和onlyer大大的商量,最终决定发布公开版本的d2gs 1.10,那是在过了寒假
之后了,寒假里我们还是使用破解的d2gs和改动过的PvPGN来支持1.10。
  最后要提一下寒假期间我在replay方面的研究,这里特别提一下1.14-1.14b这个版本
的更新,不要小看只是一个字母的修正,暴雪为了修正一些bug对数据包结构进行了很大的
调整,一些动作区块结构发生了根本性的变化,特别是0x19/0x1A这两个涉及到选择子分组
的动作,导致我们在论坛研究的人猜测加臆断地下了一些可笑的结论,直到1.17出来后才
被更正。那时对结构的认识虽然是错误的,但是用于APM的分析来说倒也不会出错,所以W
3G Master 1.99还是迅速地推出,而且后来也没有再改进过(记得还出过一个1.995的cras
h修正,但是那个也算是1.99)。
  寒假的最后一天把自己认为修正完clan部分的PvPGN 1.6.0内部beta发出来后总算是结
束了一个寒假的忙碌。
本篇后记:d2gs 1.10的很多事情都涉及一些争议和破解等方面的东西,所以这里语焉不详
,希望大家也不要追问什么东西,因为公布到这样的程度已经算是极限了。
本篇时段魔兽界大事年表:
2004/01/07 TFT 1.14补丁发布
2004/01/12 TFT 1.14b补丁发布
贰拾壹 改变
  新学期初也就是帮Replays.Net做PHP分析的最后完善部分。当时由于RN空间的问题不
能支持zlib解压所以我用我的主页空间存放了关键的分析引擎部分。这样一忙就是两周。
  闲下来后第一件事就是自己的网站续费,还正赶上了onlyer公开发布D2GS 1.10,所以
大大地更新了一番网站。
  公开发布的D2GS和原来的内部版本比去掉了不对称加密验证和网络验证加密,和1.09
公开的版本比只是增加了一些1.10专有的配置比如Clone Diablo的支持等等。相应地,d2
cs/d2d 端也和原来的内部版/crack版比有了一定的改动,这个任务自然又是交给我来处
理。一周后发布的PvPGN 1.6.1已经能完美支持D2GS 1.10,从那之后到现在d2cs/d2d 基
本就没有再动过,大概也就改了几处逻辑和内存泄漏bug。
  与此同时,为了庆祝建站一周年,我还特意制作了C++版本的魔兽Replay分析库并和P
vPGN 1.6.1同时放出。其结构基本参考了BWRepLib(bwchart作者jca兄的星际Replay分析库
)。第一个发布的是0.5 Beta,很多方面还有不少缺陷,不过基本的构架已经确定了下来,
日后每次的改动基本都是小的改动和代码增加。
  此时我已经有了一个计划,准备废弃W3G Master,用C++重写并且同时支持星际争霸的
Replay。BWRepLib是现成的,而W3RepLib是自己写的,所以技术上不存在任何难点。不过
W3RepLib还需要进一步完善,于是整个3月的后两周就一直扑在W3RepLib上,从四面八方搜
刮来无数的Replay进行测试,不断进行bug修正。那时有个难点是支持多语言的魔兽版本,
因为单位名称翻译如果仅使用英文的话,在国内市场会比较不利,所以至少要能兼容中文
版。于是我就制作了一个命令行的工具从最新的patch里提取翻译内容,从而省却了手动输
入的麻烦。
  而replay格式研究方面也渐渐停滞不前,由于格式研究基本到了头,blue和nagger的
活动也就少了起来,反而是julas和mike活动比较多。我们几个还是常常对一些新的发现进
行研究。当时的突破是对1.13以来暴雪新推出的tournament的特殊replay结构进行了全面
的解释。而我自己则开始了Replay格式文档的中文翻译工作。Replay文档停止更新很长时
间后,我又负责起了加入最新的研究成果并进行第三方更新的工作。
  在这一个月的时间里,我觉得自己在很多方面发生了改变,首先将一些开发的被动现
象扭转了过来,自己积极地要开发后台库并能坚决地舍弃W3G Master启动新计划,主动接
过Replay研究的一些工作,还扩展自己的研究方向开始看星际的Replay格式。这个改变也
是有一些个人原因的,当时开发状态不是特别好,有时会犯迷糊,所以决定做点其它东西
激励一下自己,同时也是对自己要求的进一步提高。
  很快3月就过去了(还记得4月1日愚人节又爆出了所谓比尔·盖茨归天的假新闻,当时
我不由嗤之以鼻)。一进入2004年的4月,也就标志着我离GA这个组织已然不远了……
本篇后记:终于要提到GA了,整个回忆录也已经过了2/3,剩下的最后一年的历程可以说是
比较崎岖,中间有几次空白期,怎么安排章节还要好好想想。
贰拾贰 初识GA
  2004年的4月,我的状态可以说是比较差,写程序时经常晕乎(今年也是这样,难道是
生理周期!?),人有点懒洋洋的。那时做程序的时间越来越少,在blueink上玩魔兽的时间
越来越长,而且除了玩2v2就是拼命玩RPG地图。于是整个4月的前半个月基本都玩掉了。
  就是在这样不断玩RPG地图的过程,我逐渐对魔兽地图制作产生了兴趣,有了自己做个
地图的想法。我这个人喜欢说做就做,于是立即开始上网收集做图的一些资料。首先就是
访问国际知名站点wc3campaig 看看有什么好用的辅助工具,再稍微看了一点论坛里的地
图制作注意事项,然后就开始动工。
  第一个制作的地图是aos(3c)型的,命名为The War of 2 Castle,基本系统参考3C,
另外加上Tides of Blood的一些特殊设定。
  第一步是画地形,因为缺乏经验,随便画了个上下左右皆对称的地图,基本就是直方
体和特殊物体结合,看上去非常的僵硬。不过想想当时一点一点画了然后复制-粘贴-翻
转,还是比较辛苦的(由此可见那些优秀的地形制作一定更累,不得不表示钦佩)。
  第二步就是设计英雄和技能。这个部分相对来说要容易一些,但是可以算是个体力活
,每个想好的技能必须把等级设到指定值,然后进行一定的效果计算后分配各个等级的参
数,虽然没什么技术性,但是确实非常的麻烦。每天只能做几个英雄,由于一开始设定是
两边各做12个英雄,所以基本是花了5天左右的样子才全设计完,后来写脚本过程中还进行
了一定的平衡改动,加入了一些脚本控制的技能。
  第三步是做触发和脚本。这方面因为涉及较多的技巧和经验,我这个刚入门的当然是
一窍不通,只好再去论坛翻,于是就找上了Goblin Acedemy(简称GA),在论坛翻了一些别
人发的帖子,明白了地图的做法分为触发和脚本两种,前者是易用的图形化方法,后者是
灵活性大的Ja 脚本代码编写。因为我自己就是学编程,当然是直接选择后者(奉劝其他初
学者不要学我,应该从触发开始学比较容易上手)。这段时间一边写脚本一边在GA论坛和大
家讨论一些问题,用的帐号就是后来GA内大家比较熟悉的c-a。就是在这时认识了一大批G
A的元老,那时还和DaneXX以及moonlight两大元老发生了多次争论,感觉上比较有趣(他们
知道我身份后居然说我用身份压人,真是没天理啊,我只是喜欢这样的讨论气氛而已)。值
得一提的是又见到了久违的hare613兄,他本来在War3CN就和我很熟,当时还和我提过他们
的GA组织,只不过因为那时我对地图制作还不感兴趣所以没记住。后来我有一段时间不去
War3CN,没想到又在GA看到他。
  做脚本只用了3天时间,其后就是修正工作和后期处理如制作预览图片等等。等到发布
测试版本的时又过了两三天的样子。那时候在blueink玩的都在ytht(一塌胡涂)论坛讨论魔
兽RPG地图的制作,所以我也去那里发布地图,还很快和其它地图制作者打成一片,在那里
我用的帐号是Pandemonium。
  一开始我没有用自己Soar的帐号还是基于两点考虑,一是两个不同的方面最好用不同
的帐号,二是当是状态不好很多程序没有继续改进反而去做地图怕被人揪出来打屁股。等
到后来我发布了几个软件的后续版本后才敢公布这几个帐号是同一个人。
  在GA里,我和一些人虽然认识没多久,也算是非常熟,而且根据GA的规矩,来讨论做
图的只要愿意,一律算是GA组织的人。所以我也就这样稀里糊涂地进了GA。当然,还是要
感谢那时GA对我提供的帮助。
本篇后记:初步确定要写30章,估计12日左右写完,此后还要后期整理和校对,到时会作
为合集发出来。
贰拾叁 四线作战
  5月的初期(包括五一休息在家的时间)都是在做地图,自己的图不断改进,很快加入了
宠物功能和交配功能,一直发布到了1.02 final,也就停下来了(和我以前的软件一样,功
能完善到一定程度就停滞了)。此后就着手做一个即时制的大富翁地图。由于大富翁设计较
多的数字运算,而且实现方法和RTS的模式有很大区别。加上我又想做通用性强一点的脚本
,尽量不用定死的数据,结果脚本写得好似天书一般,自己看起来都很累,所以进度非常
缓慢。好在有ytht和GA的一帮ma er一起讨论问题,很多时候自己想不通的东西大家一讨
论就明了了。这其中就接触到了GA的几个地图理论专家如Dane.XX和麦德三世,在ytht几个
实干型的ma er如lars和flame,以及在ytht和GA两边都出没的e er大虾等人,后来大家
都讨论得比较多。
  这时已经到了五月中旬,我把自己以前做的MPQ Workshop的内部版本给GA的一些朋友
看了,他们都认为这个工具很有用,应该继续开发下去。于是立即开始恢复这个软件的开
发。因为许久没看,很多代码结构已经忘却,所以回头第一件事就是研究源代码,自己看
懂了才开始开发(-_-,也实在是无奈,自己研究自己的代码,不过从另一个侧面也说明代
码结构不是很好)。当时的内部版本只支持读取和解压,我要补充的就是写入部分,包括建
立MPQ文件以及添加删除改名等功能,还要进行良好的目录管理和更新。好在后台的Storm
Lib库写得不错,这些功能都有基本函数,我的工作也就是把这些函数应用到目录树上去而
已。然后到底是第一次用BCB写这种规模的软件,结构定义仍然比较混乱,有些bug检查起
来有点费力(由此认识到C++和VCL配合的一些问题,从而也能理解Borland最终在C++方面放
弃VCL的心情)。
  与此同时,魔兽1.15的补丁也

参考资料

 

随机推荐