对我架设一个wow私服,意义有二:1. 玩wow过程中,碰到一些实现手法不解的地方,可以实时去调试。2. 基于此服务端模拟wow客户端若干特性,比如地图资源异步加载,角色并行状态处理等。
需要工具:
1. visual studio 2010(arcemu trunk windows版本解决方案使用),不建议强制修改visual studio版本,因为可能丢失工程配置参数信息。
2. mysql,SQLyog。(mysql数据库不用说了,随便什么版本,SQLyog主要是图形化mysql命令操作)。
3. svn (因为是源码编译嘛)。
源码下载:
1. 服务端程序arcemu trunk, https://arcemu.svn.sourceforge.net/svnroot/arcemu/trunk
2. 服务端使用的数据库whydb,
http://svn.xp-dev.com/svn/whydb-users我是这样放置代码的
编译源码:
1. 需要简单地修改几处源码,一,src/scripts/src/InstanceScripts/Raid_ZulGurub.cpp中的第184行,将
?/改成*/,很明显这是手误。二,src/arcemu-logonserver/LogonCommServer.cpp中的
第313~314行注释掉,解释下情况:因为wow每个游戏服务器他们叫做Realm,每个Realm都要注册到LogonServer中。考虑到不是我的Realm不能注册到我的LogonServer,所以存在这授权处理的一关。我去掉主要是烂的去改配置文件。三,src/arcemu-world/HackFixes.cpp中
第54~57行注释掉,解释下情况:因为官方只支持enUS和enGB,在加载spell.dbc的时候做了一个本地化核实。可以编译了。
2. 创建3个数据库arc_characters, arc_logon, arc_world.然后通过下图的操作
分别将sql目录下的3800_character_structure.sql导入到arc_characters里,将2834_logon_structure.sql导入到arc_logon里。然后再将sql/character_updates目录里高于3800打头的sql导入到arc_characters,同样将sql/logon_updates目录里高于2834打头的sql导入到arc_logon。为什么不导arc_world?呵呵,因为源码里带的arc_world只是表结构定义,里面并没有数据。这个要用whydb导入。进入whydb目录,双击tool.bat就行了。
回车
继续回车,就安装好了。
然后在arc_logon的表accounts里加入几个账号:
重点说明下,此数据库,服务端程式逻辑适用于3.3.5a版本,也就是wow大灾变前夕的前一个版本。
所以必须准备一个3.3.5a版本的wow。我用的台服的client,当然你用国服的也是一样。很不幸的是我从3.0.3一个个patch打上来的。
如果你也想和我一样过一过打patch的瘾,你可以去
http://tlax.5d6d.com/thread-1778-1-1.html一个个补丁下吧。
如下:
至于服务端configs里的*.conf,客户端的登陆配置,上网上随便找找就是了。
我要重点说下服务端适用的dbc和maps资源。如何从client取。
首先说dbc:编译解决方案mpqe_cpp.sln,然后将extractdbc.bat,mpqe_cpp.exe,SFmpq.dll拷贝到Data/zhTW目录下,然后执行bat就生成了dbc,然后将所有*.dbc拷贝到服务端的dbc目录里。
再次说maps:编译解决方案AD100.sln,然后将ad.exe拷贝到world of warcraft目录,和data同层,然后再将Data/zhTW里的locale-zhTW.MPQ拷贝到Data里(因为这个程序比较傻,他没有递归遍历到所有的档案,他想从locale-zhTW.MPQ里去找Map.dbc),然后执行ad.exe,然后将maps里所有的.bin文件拷贝到server的maps里就ok了,基本配置配置就可以跑了。
有什么不清楚的再讨论吧。