Установить и настроить сервер WOW на базе Mangos

 

http://128bits.ru/

Как это ни странно в статье по установке World of Warcraft сервера
на базе mangos,оговорюсь, сразу ищите клиент, т.к. без него все будет
напрасно(как минимум начиная с версии 2.3.2 и выше).
Здесь будет описана установка «из портов» по
3 причинам: на момент установки серва офф.свн был закрыт,
статья по установке из свн есть на оффе, и из портов привычнее.

Необходимый софт:
svn клиент — если будете устанавливать из исходников по статье линк
на которую приведен в конце

/usr/ports/devel/subversion
/usr/ports/databases/mysql51-server
/usr/ports/sysutils/screen

И так поехали , ставим мангос :

cd /usr/ports/games/mangos
make install clean

Выбираем следующие опции

[x]Scriptdev2 - некая новая базза (за что отвечает пока сам не понял)
[CLI] CLI - коммнадная строка (NO COMMENT)
[RA] Remote adm support (удаленное управл для админа)
 (как юзать пока не знаю, в конфиге мангоса есть строчка
 на этот щет, у меня закоменчена)
[x]DBC - Собирать файлы DBC (воопще этот пункт меня в итоге начал смущать)
 (т.к. мне пришлось удалить все проинсатленные файлы)
 (и заливать те ДБЦ файлы, которые распаковал в винде)
 (на родные мангос ругался что не совместимо)

Создание баз:
Сразу нужно позаботиться о том чтобы был установлен
phpmyadmin, т.к. в будущем всеравно он понадобиться
либо разминаем пальцы в разрезе SQL в консоле ;-)

cd /usr/local/share/mangos/sql
ll
total 780
-r--r--r-- 1 root wheel 32645 Feb 26 21:32 characters.sql
-r--r--r-- 1 root wheel 634 Feb 26 21:32 create_mysql.sql
-r--r--r-- 1 root wheel 730 Feb 26 21:32 drop_mysql.sql
-r--r--r-- 1 root wheel 457627 Feb 26 21:32 mangos.sql
-r--r--r-- 1 root wheel 6626 Feb 26 21:32 realmd.sql
-r--r--r-- 1 root wheel 250025 Feb 26 21:32 updates.tar.gz
#Создаем базы и структуру по предложенным дампам
mysql -uroot -pparol_roota < create_mysql.sql
#Будут созданы базы mangos, realmd, characters
#Юзер этих 3ёх баз mangos
#Заливаем в созданные базы "структуру"
mysql -uroot -pparol_roota mangos < mangos.sql
mysql -uroot -pparol_roota realmd < realmd.sql
mysql -uroot -pparol_roota characters < characters.sql
#У нас еще есть база scriptdev2 делаем её тоже (если она идет
#в комплекте - значит нада, или пригодиться в будущем)
cd /usr/local/share/scriptdev2/sql
ll
total 78
-r--r--r-- 1 root wheel 171 Feb 26 21:33 create_database.sql
-r--r--r-- 1 root wheel 4442 Feb 26 21:33 mangos_additional_req.sql
-r--r--r-- 1 root wheel 64324 Feb 26 21:33 mangos_full_scripts.sql
-r--r--r-- 1 root wheel 2161 Feb 26 21:33 scriptdev2_structure.sql
drwxr-xr-x 2 root wheel 2048 Feb 26 21:33 updates
mysql -uroot -pparol_roota < create_database.sql (с ней тоже работает юзер mangos)
mysql -uroot -pparol_roota scriptdev2 < scriptdev2_structure.sql
#добавляеем изменения в бд мангос
mysql -uroot -pparol_roota mangos < mangos_additional.sql
mysql -uroot -pparol_roota mangos < mangos_full_scripts.sql

Теперь нам нужно заполнить игровой мир (можно без этого, но в итоге зайдя в игру не
будет нигде не монстров не квестов, ничего)
Мой выбор пал на проект EDB (и пока что я им доволен) так что его и будем юзать,
так же можно пробовать базы таких проектов как YTDB, UDB, Silvermoon.
Идем и качаем ~70мб http://svn2.assembla.com/svn/edb/Releases/Milestone-0.8.x/
После того как мы скачаем эту базу её нужно будет залить в бд mangos
заливаем на серв, распаковываем и…

mysql -uroot -ppasswd mangos < EDB_NAME.sql

Можно зайти в пхпмайадмин и посмотреть — какие есть изменеие, что у нас заполнилось
Заодно сразу слегка правим данные бд realmd. Можно сделать как сказано на оффе
мангоса (копи / пасте оттуда)

Теперь добавляем свой реалмлист и аккаунт гма. xxx.xxx.xxx.xxx необходимо
заменить на ip на котором реалм будет слушать входящие подключения:
% mysql -u mangos -p realmd
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8016
Server version: 5.1.20-beta FreeBSD port: mysql-server-5.1.20

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> UPDATE realmlist SET name=’my super server’, address=’xxx.xxx.xxx.xxx’ WHERE id=’1′;
mysql> DELETE FROM account;
mysql> INSERT INTO `account` (`username`,`I`,`gmlevel`) VALUES

(‘megaadmin’,SHA1(CONCAT(UPPER(`megaadmin`),’:’,UPPER(`megapasword`))),’3′);
———
Либо правим все это через пхпмайдмин(думаю этот вариант лучше —
лишнего случайно не поудаляем, в крайнем случае, если где-то накосячили,
делаем откат на ноль по описсаным выше дампам) т.е. realmlist в бд
realmd, Аккаунты (их там по умолчанию если мне память не изменяет 3)
на мой взгляд просто лучше сразу удалить.
А потом в процессе уже игры уровни в игре GameMaster, admin,
moderator можно править либо с серв.консоли
либо через БД(пхпмайадмин).
Для бд — DB realmd , realmlist поле gmlevel — задаем значение : 0 — простой игрок,
1 — модератор, 2 — GM(GameMaster), 3 — Administrator

На этом этапе будем разворачивать мапы из клиента игры
vmap_assembler++_v2_Win32_260707.rar
И еще одну dbc_maps_vmap-extractor.rar (хотя по моему это одно и тоже)
Дальнейшии действия — разварачивание фалйов (dbc, maps, vmaps)происходят под виндой:

кидаем экстрактор в папку с ВоВом и запускаем распаковку dbc (~45-50M) maps (~1G)
vmaps (~2-1G)заливаем всё это счастье на вашу FreeBSD
(посредством ftp, smb, nfs, силой мысли) и копируем в
соответствующие папки, а именно

pwd
/usr/local/share/mangos
ll
total 164
drwxr-xr-x 2 root wheel 5632 Feb 21 14:32 dbc
drwxr-xr-x 2 root wheel 5632 Feb 26 21:33 dbc_old
drwxr-xr-x 2 root wheel 71168 Feb 21 11:52 maps
drwxr-xr-x 2 root wheel 512 Feb 26 21:32 sql
drwxr-xr-x 2 root wheel 80896 Feb 21 14:29 vmaps
#тоесть в dbc, maps, vmaps помещаем получнные файлы.
#Дира dbc_old - это родная та о которо написанно в самом начале,
#с родными файлам мангоса отказался запускаться сославшись
#на то что дбц у нас древнее и просьба разпоковать чего-нибудь
#посвежее, что мы и делаем в форточках.

Ну а пока экстарактор занимаеться своим делом можно заняться
ковырянием конфигов
файл /usr/local/etc/realmd.conf

# MaNGOS realmd configuration file
ConfVersion=2007062001

# Database connection settings for the realm server.
# Default: hostname;port;username;password;database
# .;somenumber;username;password;database - use named pipes at Windows
# Named pipes: mySQL required adding "enable-named-pipe" to [mysqld]
# section my.ini
# .;/path/to/unix_socket;username;password;database - use Unix sockets at
# Unix/Linux
# Unix sockets: experimental, not tested
# Вносим данные кактм образом подключаемся к базе Реалм
# В данном случае по петле
# формат : хост;порт;имя_польз_бд;пароль;имя_базы
LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"

# Logs directory setting.
# Important: Logs dir must exists, or all logs be disable
# Default: "" - no log directory prefix, if used log names isn't absolute
# path then logs will be stored

in current directory for run program.
LogsDir = ""

# Settings for maximum database-ping interval (minutes between pings)
MaxPingTime = 30

# Default RealmServerPort
RealmServerPort = 3724

# realmd daemon PID file
# Default: "" - do not create PID file
# "./realmd.pid" - create PID file (recommended name)
PidFile = ""

# Server console level of logging
# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug
# Default: 0
LogLevel = 0

# Include time in server console output [hh:mm:ss]
# Default: 0 (no time)
# 1 (print time)
LogTime = 0

# Logfile name
# empty name disable creating log file: LogFile =
# Default: "Server.log" - not recommended.
LogFile = "Realmd.log"

# Logfile with timestamp of server start in name
# Default: 0 - no timestamp in name
# 1 - add timestamp in name in form Logname_YYYY-MM-DD_HH-MM-SS.
# Ext for Logname.Ext
LogTimestamp = 0

# Server file level of logging
# 0 = Minimum; 1 = Error; 2 = Detail; 3 = Full/Debug
# Default: 0
LogFileLevel = 0

# Color for messages (format "normal_color details_color debug_color error_color)
# Colors: 0 - BLACK, 1 - RED, 2 - GREEN, 3 - BROWN, 4 - BLUE, 5 - MAGENTA,
# 6 - CYAN, 7 - GREY,
# 8 - YELLOW, 9 - LRED, 10 - LGREEN, 11 - LBLUE, 12 - LMAGENTA,
# 13 - LCYAN, 14 - WHITE
# Default: "" - none colors
# "13 7 11 9" - for example 
LogColors = ""

# Used processors mask for multi-processors system (Used only at Windows)
# Default: 0 (selected by OS)
# number (bitmask value of selected processors)
UseProcessors = 0

# Process proirity setting (Used only at Windows)
# 0 (Normal)
# Default: 1 (HIGH)
ProcessPriority = 1

# Realm list Update up delay (updated at realm list request if delay expired).
# 0 (Disabled)
# Default: 20
RealmsStateUpdateDelay = 20

файл /usr/local/etc/mangos.conf

# Думал выложить тоже весь файл но , что-то он большой
# опишу лишь то что сам прописывал
# Database connection settings for the world server.
# Default: hostname;port;username;password;database
# .;somenumber;username;password;database - use named pipes at Windows
# Named pipes: mySQL required adding "enable-named-pipe" to [mysqld] s
# .;/path/to/unix_socket;username;password;database - use Unix sockets at Un
# Unix sockets: experimental, not tested
# Тоже что и в Реалме и в том же формате - прописываем тип подключения к БД
# логины/пароли в формате : "хост;порт;имя_польз_бд;пароль;имя_базы"
#
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"
#
# Включаем эффекты погоды
ActivateWeather = 1
# Прописываем приветстиве которое будут видеть все игроки
# Уже по факту входа в мир
Motd = "Welcome to My Cool WOW Privat Server."
# Устанавливаем рейты в игре (в моем случае это ПВП сервер,
# с легким качем и приятным дропом шмота и денег)
# не хватало напрягаться еще на своем же сервере, хотя с установленным
# уровнем аккаунта "3" - админ - на рейты поф, но тем не менее...
Rate.Health = 1
Rate.Mana = 1
Rate.Rage.Income = 1
Rate.Rage.Loss = 1
Rate.Focus = 1
Rate.Loyalty = 1

# Drop rates
# Default: 1
Rate.Drop.Items = 150
#--------
Rate.Drop.Items.Quality.Poor =150
Rate.Drop.Items.Quality.Common = 1
Rate.Drop.Items.Quality.Uncommon = 1
Rate.Drop.Items.Quality.Rare = 150
Rate.Drop.Items.Quality.Epic = 150
Rate.Drop.Items.Quality.Legendary = 200
Rate.Drop.Items.Quest =150
Rate.Drop.Money = 200

# XP rates
# Default: 1
Rate.XP.Kill = 150
Rate.XP.Quest = 150
Rate.XP.Explore = 150

# все остальные рейты , не трогал, по умолчанию остались

Теперь нам надо гдето взять сайт — чтобы народ как минимум мог
регестрировать себе аккаунты.
Небольшой оффтоп, но кто-то точно наступит на грабли просто уверен,
те у кого МУСЯ собрана не UTF-8, а что-то свое c CP1251, koi8-r или еще чего.
Для того чтобы у вас сайт не пошел «кракозябликами»
Когда будете подсовывать понравившейся сайт ставьте в index.php в начале

header("Content-type: text/html; charset=utf-8");

т.к. наверняка все сайты сделаны под UTF-8. У остальных проблемм не будет.
По сайту сложно что-либо сказать, только то что — читайте ридми которое идет с сайтом
они могут требовать правки каких-то таблиц, либо их добавления.
Есть такой проект как WEboW (https://mangos.cjb.net/webow/forums/index.php)

cd /usr/local/scripts
# Если у вас еще не такой диры - то делам -))
cat realm.sh
#!/bin/sh
while true ; do
echo `date` ", Realm daemon crashed and restarted." >> /var/log/mangos/realmcrash
# запуск процесса Реалм с наивысшим приоритетом
nice -n -20 /usr/local/bin/mangos-realmd
done
chmod 755 realm.sh
cat mangos2.sh
#!/bin/sh
# Скрипт взят с оффа, но закоменчено практически все
# не понравилось что такой громоздкий процесс ставят в цикл
#while true ; do
#servlog='/usr/local/mangos/bin/Server.log';
#outpatch='/usr/local/mangos/bin/crash/';
#serverlog='/var/log/mangos/Server.log';
#outpatch='/var/log/mangos/';
#date=`date "+%Y-%m-%d_%H:%M:%S"`;
#echo "Server CRASHED !!! Start Bugreport System." >> $outpatch$date.txt;
#echo "Server.log Log FILE Last 30 Lines:" >> $outpatch$date.txt;
#cat $servlog | tail -n 30 >> $outpatch$date.txt;
#echo "" >> $outpatch$date.txt;
#echo "END bugtracker system." >> $outpatch$date.txt;
# Запуск сервера-мира с наивысшим приоритетом
nice -n -20 /usr/local/bin/mangos-worldd
#done
chmod 755 mangos2.sh
cat startwow
#!/bin/sh
cd /usr/local/scripts
screen -AmdS world /usr/local/scripts/mangos2.sh
screen -AmdS realm /usr/local/scripts/realm.sh

Делаем диру

mkdir -p /var/log/mangos

В принципе можно сразу сделать бэкапирование баз

cat wowbackup.sh
#!/bin/sh
#
# Delaem backup
#
current_year=`date '+%Y'`
current_month=`date '+%m'`
current_date=`date '+%d'`
#echo=/bin/echo
mysqldump="/usr/local/bin/mysqldump"
# Delaem diru
# В данном случае быкап баз делаеться на второй винт (не основной)
# который смонтирован в /mnt
# можно впринципе на NFS или на почту слать гггг -))
# я сделал как мне понравилось
# Быкапы каждодневные в формате дира: год/месяц/день/имя_базы
backup_dir="/mnt/backup/wow/${current_year}/${current_month}/${current_date}"
mkdir -p ${backup_dir} 2>/dev/null
#
#
#
#
${mysqldump} -umangos -pmangos mangos | gzip > ${backup_dir}/mangos.sql.gz
${mysqldump} -umangos -pmangos relamd | gzip > ${backup_dir}/realmd.sql.gz
${mysqldump} -umangos -pmangos characters | gzip > ${backup_dir}/characters.sql.gz
${mysqldump} -umangos -pmangos scriptdev2 | gzip > ${backup_dir}/scriptdev2.sql.gz
# Думаю gzip не помеха - база мангоса не маленькая

я закинул в крон на каждую ночь 4:30 Утра
в крон:

27 4 * * * /usr/local/scripts/wowbackup.sh

Можно запускать сервак,
для начала я порекомендавал бы запускать в ручную

mangos-world
и
mangos-realmd
хотя бы на момент настройки, отладки

Запускаем

/usr/local/scripts/startwow

Загрузки процесса mangos-world необходимо дождаться
т.к. там довольно много чего выгружаеться из базы…
всё, процессы загружены в screen’e
При необходимости можно зайти на серв , на скрин

для мира
screen -r world
для реалма
screen -r realm
Чтобы правильно откючиться жмем Cntrl+A, Cntrl+D

Прописываем в своем клиенте ВОВа в файл realmlist.wtf

set realmlist xxx.xxx.xxx.xxx
# xxx.xxx.xxx.xxx - имя либо ип-адресс фашего ВОВ сервера

Запускаем клиент, конектимся если в ДБ реалма правильно прописали адр серва и приветсвтие
то в клиенте увидите справа аля — My COOL WOW Srv. Значит вы попали куда надо.
Попадаем в мир , первое что делаем , это всетаки свой серв, пишем в консоле игры

.commands

и наблюдаем что мы можем, если ничего значит правим в БД gmlevel на 3 (т.е. админ на серве)
либо идем на серв , скреен -мир и там тоже командами ставим своему акку гмлелвел — 3
——-
Это всё. Играем и радуемся.
Версия на момент написания статьи:
mangos-5101 Free dedicated-server for World of Warcraft
Версия клиента которая проверена и поддерживаеться данным сервером
WOW 2.3.2 (7741)

Один отзыв

  1. liverpool shirt:

    liverpool shirt

    Thanks for the post. awesome!

Добавить комментарий