为了姚明我动“刀”──修改游戏数据库加强球员能力
软件世界
本人是个篮球迷,NBA新赛季已开战了一会,看了不过瘾,还要在游戏中玩一玩,从抽屉里翻出老的NBA2003的游戏,想在比赛前预演一下火箭对灰熊的比赛。一直比较习惯这款NBA2003里的操作,不料由于制作的时间比较早,里面的许多球员都已经换了东家,火箭更是先发五虎中除了姚明全部更换。而且在NBA2003游戏里姚明还是新秀,各方面的能力都显得弱不禁风。为了让我最关心的姚明在“赛场”上大展雄风,我只有来研究一番游戏,争取找到修改球员能力的方法。
实战操作
了解到游戏中数据库存取的原理后,修改相关数据就容易进行了。重点就是要修改currentdb下的数据,而不用管workingdb里的数据。
打开currentdb文件夹,可以看到很多相关的数据库文件,在这里只需要teams.dbf和players.dbf两个文件就能进行简单有效的修改。
这里,笔者用BCB自带的Database Desktop进行查看和修改。
图解操作步骤
(1)首先用它打开teams.dbf文件,可以看到第9行的火箭队资料,并且代号是8,而12行的湖人的代号是11。
(2)再打开players.dbf文件(图1),第1行的160编号的球员就是大鲨鱼奥尼尔,而且也能看到在NCIKNAME下有Shaq的绰号。
(3)仔细观察这一页表,能发现连续向下排列着湖人球员的名单,现在向右翻页,查找球员的其他具体资料,在其中找到球员所效力的球队代号的数据,修改奥尼尔的为8,而其他湖人队员还是11,这样就实现了奥尼尔转会火箭,见图2火箭队的大名单第5行O‘NEAL。
通过这种方法,只要找到火箭这个赛季实际转来的球员,就能通过修改数据库,自己实现转会。当然也能根据明星队的代号,打造自己心目中的全明星球队,甚至可以把五六十年代的明星球员拖到九十年代的明星球队的阵容中。
(4)有了上面修改的经验,再来进行姚明个人能力的数据修改。找到编号115的姚明(由于队员是按球队编号顺序排列的,根据球队编号顺序能很快找到姚明所在的火箭队的大名单)。
按图3的第一行姚明数据,修改附近的数值。由于NBA游戏里球员的一些能力是程序中通过一定的算法,把数据库中的几个值联系起来算出的游戏里实际能力值,所以这里只好把所有能力的数据都提高到90,并且PLAYRVALUE的值一定要调得比较高,不然显示的球员平均能力反而会降低。修改后(图3),姚明的所有能力基本上都有90多了。
验证修改成效
通过上面的修改后,姚明的能痢该加强了,下面我们就来测试一下成果。
进入1V1的街头篮球模式,选择和奥尼尔单挑,马上发现心爱的姚明3分远投也有50%以上的成功率,而盖帽更是对奥尼尔每投必盖,并且能够力压奥尼尔的飞身灌篮,见图4。
相关数据库知识
Database Desktop:是Borland公司提供的数据库工具,它具有图形化的界面,可以在其中方便地对数据表执行创建、浏览、修改等操作。功能强大,简便易用。
常见数据库表后缀名:
dBASE表:*.dbf
Access表:*.mdb
Paradox表:*.db
NBA 2003数据库原理
球员的数量众多,要存储这么多球员的数据,理想的方法当然是运用数据库技术了。所以我首先将数据库文件作为重点关注对象。
1.初探
通过查找游戏相关文件,发现:
(1)E:\Program Files\EA SPORTS\NBA Live 2003\database\Origdb目录
(2)C:\Documents and Settings\kin\My Documents\NBA Live 2003\目录
这两个下面都有数据库文件。前者是安装目录下的文件,orig是original的缩写,意思是原创的,里面的数据库文件就是备份的数据库文件。
而后者是游戏安装后会在个人账号文档中建立的一些游戏中需要修改的相关数据文件夹。在这个个人文档下也有database文件夹,里面只有currentdb和workingdb两个文件夹,有大量相关数据库文件。并且在进入游戏后,无法打开workingdb文件夹里的数据库文件。
2.尝试
我首先尝试修改workingdb里的数据库文件,来达到修改球员数据的目的。但实际修改中发现修改workingdb里的数据后,进入游戏,球员能痢还原成初值,且workingdb里的数据库文件也是如此。经过多次的修改发现:currentdb里是当前的数据库文件,而workingdb里是游戏中的数据库文件。
3.结论
经过分析,游戏开始时,首先应该读取的是currentdb里的数据库文件,并且覆盖掉workingdb里的数据库文件,因此workingdb里的数据库文件一直处于写状态,所以游戏中无法查看它的数据。这也就是为什么开始尝试修改workingdb里的数据,进入游戏后数据又还原的原因。
还要考虑的是玩游戏时可能会出现一些数据需要临时修改(例如玩赛季模式时球员总得分的记录和参加比赛的次数,相关数据在游戏中都需要及时修改)。这个时候先修改workingdb里的数据,当完成修改并保存后,游戏中workingdb里的数据库文件将全部复制到currentdb里。这样就不难看出,workingdb相当于一个临时文件夹。用于保护初始数据不被直接修改和复写要修改的数据。这样每次结束游戏后currentdb里都保留着最新的数据库文件,当下次开始游戏时,再读取这里面的数据。
感受
为了让姚明在游戏中更强大,我动用了Database Desktop这把“刀”。通过对它的使用和对数据库文件工作方式的了解,深刻的感受到了Database Desktop的强大和简便易用。同时在了解EA公司采用数个文件夹保存数据库的机制后,对这类数据库应用的安全性也有了切身的体会。
希望读者在看了本文之后,不但能体会修改游戏的乐趣,而且能对数据库工具在开发和维护中的独特作用有进一步的体会。在以后的实际应用中,大家也可以参照这种模式,在加强数据库管理的同时,实现数据库的实时修改和备份。



