魔兽世界 - MaNGOS (mangos-zero)
作者: reistlin
来源: http://www.reistlin.com/blog/387
更新时间: 2012.09
版权声明: 原创文章.转载请保留作者信息和原文完整.谢绝任何方式的摘要
一,环境:
魔兽世界服务器端:
[MaNGOS (mangos-zero)]
魔兽世界客户端:
[World of Warcraft] 1.12.1 (Build 5875)
二,介绍:
魔兽世界版本历史:
2005年 03月21日 World of Warcraft 限量公测
2005年 04月26日 World of Warcraft 全面公测
2005年 05月25日 魔兽世界版本 1.4.3 战争的召唤: PVP系统 荣誉系统
2005年 06月28日 魔兽世界版本 1.5.2 战场争锋: 战歌峡谷 奥特兰克山谷
2005年 08月09日 魔兽世界版本 1.6.1 进军黑翼之巢: 黑翼之巢 暗月马戏团
2005年 09月27日 魔兽世界版本 1.7.1 血神的复苏: 祖尔格拉布 阿拉希盆地
2005年 10月18日 魔兽世界版本 1.8 噩梦之龙: 希利苏斯
2006年 01月09日 魔兽世界版本 1.9 安其拉之门
2006年 04月04日 魔兽世界版本 1.10 勇士归来
2006年 06月27日 魔兽世界版本 1.11 纳克萨玛斯之影
2006年 09月19日 魔兽世界版本 1.12.1 战鼓震天: 户外战争 户外PVP
2006年 10月03日 魔兽世界版本 1.12.2 战鼓震天: 跨服战场 世界战场
三,软件:
mangos-zero [https://github.com/mangoszero/server]
scriptdev0 [https://github.com/scriptdev2/scriptdev2]
database [https://github.com/mangoszero/database]
四,安装:
1, 配置 apt 源 /etc/apt/sources.list
deb http://mirrors.163.com/debian squeeze main non-free contrib deb http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free deb http://mirrors.163.com/debian-security squeeze/updates main contrib non-free deb-src http://mirrors.163.com/debian squeeze main non-free contrib deb-src http://mirrors.163.com/debian squeeze-proposed-updates main contrib non-free deb-src http://mirrors.163.com/debian-security squeeze/updates main contrib non-free deb http://ftp.tw.debian.org/debian/ squeeze main deb-src http://ftp.tw.debian.org/debian/ squeeze main deb http://ftp.tw.debian.org/debian/ squeeze-updates main deb-src http://ftp.tw.debian.org/debian/ squeeze-updates main deb http://security.debian.org/ squeeze/updates main deb-src http://security.debian.org/ squeeze/updates main
2, 更新 debian 软件包, 更新基础环境
apt-get update apt-get upgrade
3, 安装 gcc g++ make cmake 编译环境, svn, git, MySQL, lrzsz, screen
apt-get install build-essential binutils gcc g++ cpp automake autoconf make cmake libmysql++-dev libtool libssl-dev subversion patch zlibc libc6 git-core mysql-server-5.1 mysql-server-core-5.1 lrzsz screen
4, 安装 mangos-zero, scriptdev0
cd ~ git clone https://github.com/mangos-zero/server.git cd server/src/bindings git clone https://github.com/mangos-zero/scriptdev0.git cd ~/server mkdir build cd build cmake -DPREFIX=/usr/local/mangos-zero .. make make install
如果编译失败,提示:
ACE library not found!
Readline library not found!
安装 ACE Library (The ADAPTIVE Communication Environment)
安装 Readline library
apt-get install libace-dev libreadline5 libreadline5-dev libncurses5 libncurses5-dev
5, 安装 database
cd ~ git clone https://github.com/mangos-zero/database.git
重要!
因为我们并不用 mangos-zero (server.git) 数据库 (路径: ~/server/sql).
而是使用 scriptdev0 (database.git ) 数据库 (路径: ~/database).
其数据库名称并不相同. 所以 ~/server/sql/create_mysql.sql 文件中的数据库名称需要做对应修改.
mangos-zero 数据库名称: mangos 修改为: zp_world
mangos-zero 数据库名称: characters 修改为: zp_characters
mangos-zero 数据库名称: realmd 修改为: zp_realm
新建 database scriptdev0 数据库: zp_scripts
vim ~/server/sql/create_mysql.sql
CREATE DATABASE `zp_world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `zp_characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `zp_realm` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE DATABASE `zp_scripts` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER ''mangos''@''localhost'' IDENTIFIED BY ''mangos''; GRANT ALL PRIVILEGES ON `zp_world`.* TO ''mangos''@''localhost''; GRANT ALL PRIVILEGES ON `zp_characters`.* TO ''mangos''@''localhost''; GRANT ALL PRIVILEGES ON `zp_realm`.* TO ''mangos''@''localhost''; GRANT ALL PRIVILEGES ON `zp_scripts`.* TO ''mangos''@''localhost'';
导入 create_mysql.sql 文件
mysql -u root -p < ~/server/sql/create_mysql.sql
编辑 mysql_info 脚本, 配置数据库用户名/密码
vim ~/database/mysql_info
# development (local) USER=mangos PASS=mangos HOST=localhost
运行 mysql_import 脚本, 导入数据库
~/database/mysql_import
五,配置:
1, 生成数据文件 map / vmap / dbc
下载文件到 WOW 客户端目录:
sz ~/server/contrib/extractor/ad.exe sz ~/server/contrib/vmap_extract_assembler_bin/make_vmaps.bat sz ~/server/contrib/vmap_extract_assembler_bin/vmap_assembler.exe sz ~/server/contrib/vmap_extract_assembler_bin/vmapExtractor3.exe
运行 ad.exe 和 make_vmaps.bat 自动生成 map vmap dbc
将 map vmap dbc 目录上传到 mangos-zero 服务器
2, 新建目录结构 data / logs / pids
新建 data 目录, 用于存放 map vmap dbc 文件
新建 logs 目录, 用于存放 mangos-zero 日志
新建 pids 目录, 用于存放 mangos-zero pid 文件
cd /usr/local/mangos-zero mkdir data logs pids
3, 配置文件 mangosd.conf / realmd.conf / scriptdevzero.conf
cd /usr/local/mangos-zero/etc
vim mangosd.conf
RealmID = 1 DataDir = "/usr/local/mangos-zero/data" LogsDir = "/usr/local/mangos-zero/logs" 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" LoginDatabaseConnections = 1 WorldDatabaseConnections = 1 CharacterDatabaseConnections = 1 MaxPingTime = 30 WorldServerPort = 8085 BindIP = "0.0.0.0"
LogSQL = 1 PidFile = "/usr/local/mangos-zero/pids/mangosd.pid" LogLevel = 1 LogTime = 1 LogFile = "Server.log" LogTimestamp = 0 LogFileLevel = 1 LogFilter_TransportMoves = 1 LogFilter_CreatureMoves = 1 LogFilter_VisibilityChanges = 1 LogFilter_Weather = 1 LogFilter_DbStrictedCheck = 1 LogFilter_PeriodicAffects = 0 LogFilter_PlayerMoves = 0 LogFilter_SQLText = 0 LogFilter_AIAndMovegens = 0 LogFilter_PlayerStats = 0 LogFilter_Damage = 0 LogFilter_Combat = 0 LogFilter_SpellCast = 0 WorldLogFile = "" WorldLogTimestamp = 0 DBErrorLogFile = "DBErrors.log" CharLogFile = "Char.log" CharLogTimestamp = 0 CharLogDump = 0 GmLogFile = "Gm.log" GmLogTimestamp = 0 GmLogPerAccount = 0 RaLogFile = "Ra.log" LogColors = ""
vim realmd.conf
LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;zp_realm" LogsDir = "/usr/local/mangos-zero/logs" MaxPingTime = 30 RealmServerPort = 3724 BindIP = "0.0.0.0" PidFile = "/usr/local/mangos-zero/pids/realmd.pid" LogLevel = 1 LogTime = 1 LogFile = "Realmd.log" LogTimestamp = 0 LogFileLevel = 1 LogColors = "" UseProcessors = 0 ProcessPriority = 1 WaitAtStartupError = 0 RealmsStateUpdateDelay = 20 WrongPass.MaxCount = 0 WrongPass.BanTime = 600 WrongPass.BanType = 0
vim scriptdevzero.conf
ScriptDevZeroDatabaseInfo = "127.0.0.1;3306;mangos;mangos;zp_scripts"
4, 启动脚本
cd /usr/local/mangos-zero/bin
新建一个 shell 脚本, 通过 screen 命令, 支持窗口管理, 后台启动/切换
启动: screen -S <窗口名称> <命令>
查看: screen -ls
前台: screen -r <窗口名称>
后台: CTRL+a d
vim mangosd.sh
#!/bin/bash check=`netstat -nlt | grep ":8085" | wc -l` if [ "${check}" -eq 0 ]; then screen -S mangosd ./mangosd else echo "[`date "+%Y-%m-%d %H:%M:%S"`] mangosd service running" fi
vim realmd.sh
#!/bin/bash check=`netstat -nlt | grep ":3724" | wc -l` if [ "${check}" -eq 0 ]; then screen -S realmd ./realmd else echo "[`date "+%Y-%m-%d %H:%M:%S"`] realmd service running" fi
chmod 750 mangosd.sh chmod 750 realmd.sh
启动服务器, WOW! 经典旧世, 我们来了!
root@reistlin:/usr/local/mangos-zero/bin# netstat -nlpt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5270/mysqld tcp 0 0 0.0.0.0:3724 0.0.0.0:* LISTEN 9610/realmd tcp 0 0 0.0.0.0:8085 0.0.0.0:* LISTEN 9579/mangosd