安装MangOS

版本问题

mangos目前有三个分支,分别对应wow的不同版本:

  • 主分支对应资料片巫妖王之怒,版本号3.3.5a
  • mangos-one对应资料片燃烧的远征,版本号2.4.3
  • mangos-zero对应原版,版本号1.12.1或1.12.2

使用不同分支时,要求客户端的版本号一致,否则无法登录。详见http://getmangos.com/

因为只是研究目的,没必要用最新的版本,所以我选择用原版,即mangos-zero。


客户端安装

由于官方已经升级到资料片大灾变,所以只能自己找早期的安装程序和patch。悲剧的是原版的mac安装程序是PowerPC格式的,而从MacOS10.7(Lion)开始就不支持这种安装程序了。好在wow的Windows版和Mac是基本共通的,所以可以在Windows上安装好,再拷贝到Mac上打patch。

要注意一下安装好的Windows版是没有MacOS可执行程序的,而Mac版的patch缺需要这个文件。解决办法很简单,下载一个MPQ提取程序,比如MPQ Editor。用它打开文件World of Warcraft/Data/base.mpq,把里面的World of Warcraft.app提取出来,放到根目录World of Warcraft/下即可。

接下来就可以打patch了。Windows版安装好的版本号是1.0.1。还需要两个patch:

  • WoW-1.12.0-enUS-patch
  • WoW-1.12.0.5595-to-1.12.1.5875-enUS-patch

第二个找了我好久,链接在此,注意要注册账户才能下载。

如果需要其他patch可以去这些网站:

http://www.bastionofstormwind.com/content/view/33/34/

http://www.ausgamers.com/files/browsegame/html/3/218

http://www.fileplanet.com/100462/0/section/Patches


服务端安装

mangos-zero包含三个部分:引擎代码脚本代码数据库数据。都是通过git管理的,其中脚本代码不是必需的,所以先不装。此外还需要预先安装以下软件:

  • Git
  • CMake
  • MySQL Server

当然还有XCode的UNIX Development Support。


1.引擎安装

git clone https://github.com/mangos-zero/server.git ~/mangos-zero

由于使用cmake,安装很方便。进入目录后依次执行:

mkdir build; cd build; cmake ..; make; make install

cmake那一步可以添加参数-DDEBUG=1,开启debug模式。

make过程中可能会出错,提示UINT64的定义冲突:

/mangos-zero/src/framework/Platform/Define.h:113: error: conflicting declaration ‘typedef ACE_UINT64 uint64’

加个宏条件判断即可:


diff --git a/src/framework/Platform/Define.h b/src/framework/Platform/Define.h

index d3f85c6..5b53069 100644

--- a/src/framework/Platform/Define.h

+++ b/src/framework/Platform/Define.h

@@ -109,7 +109,11 @@ typedef ACE_INT64 int64;

 typedef ACE_INT32 int32;

 typedef ACE_INT16 int16;

 typedef ACE_INT8 int8;

+// Mac OS X hack against uint64 redefine

+#ifndef _UINT64

 typedef ACE_UINT64 uint64;

+#define _UINT64

+#endif

 typedef ACE_UINT32 uint32;

 typedef ACE_UINT16 uint16;

 typedef ACE_UINT8 uint8;

--


默认的安装路径是../mangos-server。


2.提取地图和dbc数据

引擎需要客户端中的地图和dbc数据,mangos-zero自带了提取工具ad。首先编译:

cd ~/mangos-zero/contrib/extractor

cmake -G "Unix Makefiles" -DCMAKE_OSX_ARCHITECTURES=i386

make -j3


然后执行,指定输入和输出路径:

./ad -i /Applications/World\ of\ Warcraft/ -o ~/mangos-server/bin/


3.MySQL配置

安装时把安装包里的MySQL.prefPane和MySQLStartupItem.pkg也装上,以后就可以在System Preferences里方便的控制了。


让shell可以执行mysql:

echo 'export PATH=$PATH:/usr/local/mysql/bin' >> ~/.bash_profile

source ~/.bash_profile


用root账户登陆mysql,这时是没有密码的,安全起见要设置一下:

mysql -u root

mysql>UPDATE mysql.user SET Password = PASSWORD('oranges') WHERE User = 'root';

mysql>FLUSH PRIVILEGES;

mysql>EXIT;


再次登陆,删除test数据库:

mysql -u root -p

mysql>DROP DATABASE IF EXISTS `test`;


删除可能会失败,是因为MySQL5.5会尝试删除数据库所在目录,但是该目录下有非数据库文件。解决办法是在shell下直接删除该文件:

rm /usr/local/mysql/data/test/.empy

然后再执行删除数据库指令。


关闭匿名访问:

mysql>DELETE FROM mysql.user WHERE User = '';


4.初始化数据库数据

首先下载mangos-zero对应的数据:

git clone https://github.com/mangos-zero/database.git ~/mangos-zero-db


然后在MySQL里新建用户mangos以及相应的数据库。mangos自带了一个脚本:mangos-zero/sql/create_sql.sql。但是不能直接用,因为默认的数据库名与mangos-zero的数据(上面下载的那个)不一致。数据库名必需换成:

mangos -> zp_world

characters -> zp_characters

realmd -> zp_realm


改好后就可以执行了:

mysql -u root -poranges < ~/mangos-zero/sql/create_mysql.sql


然后在mangos-zero-db/mysql_info里修改数据库账号和密码,再执行脚本(zp_script部分先注释掉):

cd ~/mangos-zero-db

./mysql_import


5.配置文件

首先复制一份默认配置:

cp ~/mangos-server/etc/realmd.conf.dist ~/mangos-server/etc/realmd.conf

cp ~/mangos-server/etc/mangosd.conf.dist ~/mangos-server/etc/mangosd.conf


然后将数据库名称,此外因为没有用vmap,所以要关闭vmap的相关选项:


diff mangosd.conf mangosd.conf.dist 

65,67c65,67

< LoginDatabaseInfo     = "127.0.0.1;3306;mangos;mangos;zp_realm"

< WorldDatabaseInfo     = "127.0.0.1;3306;mangos;mangos;zp_world"

< CharacterDatabaseInfo = "127.0.0.1;3306;mangos;mangos;zp_characters"

---

> LoginDatabaseInfo     = "127.0.0.1;3306;mangos;mangos;realmd"

> WorldDatabaseInfo     = "127.0.0.1;3306;mangos;mangos;mangos"

> CharacterDatabaseInfo = "127.0.0.1;3306;mangos;mangos;characters"

206,207c206,207

< vmap.enableLOS = 0

< vmap.enableHeight = 0

---

> vmap.enableLOS = 1

> vmap.enableHeight = 1


diff realmd.conf realmd.conf.dist

110c110

< LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;zp_realm"

---

> LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"



6.启动服务器

cd ~/mangos-server/bin

./mangosd

./realmd


mangosd可能会报错,提示找不到libsqlclient,更新一下动态库链接即可:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib mangosd

用指令otool -L mangosd可以查看当前动态库链接。


mangosd可能会报错,提示用户mangos对zp_world没有CREATE TEMPORARY TABLES的权限。加上即可:

GRANT CREATE TEMPORARY TABLES ON `zp_world`.* TO 'mangos'@'localhost';


mangos可能会报错,提示:

Assertion failed: (STRINGIZE(_ok == 0) && 0), function setPriority, file /Users/smallka/Projects/mangos-zero/src/shared/Threading.cpp, line 232.

/Users/smallka/Projects/mangos-zero/src/shared/Threading.cpp:232: Error: Assertion in setPriority failed: _ok == 0Abort trap: 6

查看代码是ACE_Thread::setprio函数返回错误,暂时不知道原因。要么去掉debug模式,要么注释掉这行先。


7.新建游戏账户

mangosd其实是个交互环境,直接输入指令:

mangos>account create smallka smallka


8.客户端登陆

编辑World of Warcraft/realmlist.wtf:

set realmlist 127.0.0.1


登陆后卡在"logging in to game server"是因为没有设置好gs的ip地址:

mysql -u mangos -pmangos

mysql>use zp_realm;

mysql>UPDATE realmlist SET address="127.0.0.1" WHERE id=1;


TODO

Mac版客户端的角色缺了头部贴图,@$$%$%#@%

 
 

参考资料

http://getmangos.com/wiki/Compile_MaNGOS_On_Mac_OS_X

http://www.jeremymeile.ch/jeremymeile.ch/Get_MaNGOS.html

http://getmangos.com/community/topic/8512/the-big-faq-thread/

http://getmangos.com/wiki/Administering_MaNGOS

你可能感兴趣的:(游戏)