作者: reistlin
来源: http://www.reistlin.com/blog/387
更新时间: 2012.09
版权声明: 原创文章.转载请保留作者信息和原文完整.谢绝任何方式的摘要

wow.png

一,环境:

魔兽世界服务器端:
[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.exemake_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

标签: debian, linux, world of warcraft