Как хостить на выделенном сервере

## Вступление

Во времена, когда создавалась игра, все скрипты, отвечающие за запуск того или иного режима игры, писались на PHP, но после выхода игры в Steam Workshop скрипты пишутся на AngelScript. Скрипты кампании, а также режима Вторжение были переписаны на AS. Режим Man vs World был выпущен уже на AS.

Некоторые старые официальные скрипты не были переписаны, например, скрипты таких режимов, как Доминирование, Минимоды, Командное уничтожение, Десматч, Охота на мишек до сих пор остаются не переписанными на AS, тем не менее, они всё ещё могут функционировать.

Для работы со скриптами необходимо установить любой текстовый редактор, предназначенный для работы с языками программирования. Мы советуем использовать Notepad++.

**Внимание!** Перед настройкой запомните следующее. Все скрипты, с которыми вы будете работать, необходимо копировать, т.к. работая в оригинальных файлах есть риск потерять ваши настройки из-за обновления игры, которое может перезаписать их, или же, сломав структуру скрипта, неоткуда будет брать оригинальный код для исправления ошибок в коде. Мы будем работать со скриптами, которые запускают сервер, а также с их настройками. Скрипты будут иметь вид "*start\_\*режим\*.php*" или "*start\_\*режим\*.as*". А их основные настройки (название, порт и т.д.) будут содержаться либо в файле, имеющим вид "server\_settings\_\*режим\*.example.php" - в случае со скриптами на PHP, либо прямо в файле со скриптом, с помощью которого мы будем запускать сервер - в случае со скриптами на AS.

## Настройка сервера

### Макросы для упрощения работы

Для упрощения работы с консолью можете создать в той же директории, где находиться файл "*rwr\_server.exe*", файл с макросами. Назовите его "*commands.xml*" и вставьте в него это:

```
<command_aliases>
	<!--
   	Помните, что для запуска скриптов на AngelScript, а именно ко-оп кампании, режимов Вторжение и Man vs World,
   	  используется rwr_server.exe, а для запуска скриптов на PHP - написанный вручную .bat файл. Поэтому не пытайтесь
   	  запустить через rwr_server.exe скрипты на PHP, а через .bat файл - скрипты на AS.
   	Пояснения на примерах:
   	  - написав в консоли "startinv", запустится оригинальный скрипт режима Вторжение.
   	Изменяя названия копий скриптов не забывайте изменять их и тут, если собираетесь пользоваться этими макросами;
   	  - написав в консоли "ad", в чат выведется сообщение "Группа нашего сервера в ВКонтакте - *link*";
   	  - написав в консоли "map1", карта изменится на "map1";
   	  - написав в консоли "reset", сбросятся некоторые изменения на карте;
   	  - написав в консоли "action", изменятся некоторые параметры игры.
   	Вы можете создавать свои макросы поняв, как работают эти.
   	-->
   	<alias name="startinv" command="start_script media\packages\vanilla\scripts\start_invasion.as"/>
	<alias name="ad" command="say Группа нашего сервера в ВКонтакте - *link*"/>
	<alias name="map1" command="change_map media\packages\vanilla\maps\map1"/>
	<alias name="map2" command="change_map media\packages\vanilla\maps\map2"/>
	<alias name="map3" command="change_map media\packages\vanilla\maps\map3"/>
	<alias name="map4" command="change_map media\packages\vanilla\maps\map4"/>
	<alias name="map5" command="change_map media\packages\vanilla\maps\map5"/>
	<alias name="map6" command="change_map media\packages\vanilla\maps\map6"/>
	<alias name="action" command="compensation_factor 30; go_stealth; go_stealth; reset_vehicle 3 1 1; reset_vehicle 3 0 0; set_day_time 6.0; resync_all;"/>
	<alias name="reset" command="reset_vehicle 3 1 1; reset_vehicle 3 0 0; set_day_time 6.0; resync_all;"/>
</command_aliases>

```

Прочитав комментарий в начале кода, можно разобраться, как работать с макросами.

### Установка и обновление серверной сборки

В корневой директории сервера должны находиться бинарные файлы и папка "*media*" с режимами и картами - это называется серверной сборкой. Способы установки и обновления сборки зависят также от того, работаете ли вы удалённо через консоль или имеете физический доступ к серверу и можете работать с ним с помощью обычных устройств ввода - мыши и клавиатуры. Мы рассмотрим оба случая.

#### Удалённый доступ к серверу через консоль

Если у нас нет серверной сборки и мы собираемся её устанавливать, создаём в корневой директории сервера папку для файлов сервера и перемещаемся в неё (для обновления серверной сборки перемещаемся сразу к последнему абзацу):

```
mkdir rwr_server
cd rwr_server

```

Загружаем SteamCMD в эту же директорию, распаковываем его и запускаем (примечание: используйте команду "*quit*" в SteamCMD чтобы выйти):

* Работая под Linux:

```
Сначала устанавливаем зависимости, необходимые для запуска SteamCMD:
Ubuntu/Debian 64-бит:
sudo apt-get install lib32gcc1

RedHat/CentOS
yum install glibc libstdc++

RedHat/CentOS 64-бит
yum install glibc.i686 libstdc++.i686

Затем загружаем, распаковываем и запускаем:
curl -O https://steamcdn-a.akamaihd.net/client/installer/steamcmd\_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

```

* Работая под Windows:

```
curl -O https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip
unzip steamcmd.zip
steamcmd

```

* Работая под OS X:

```
curl -O https://steamcdn-a.akamaihd.net/client/installer/steamcmd\_osx.tar.gz
tar -xvzf steamcmd_osx.tar.gz
./steamcmd.sh

```

Загружаем скрипт для установки (обновления) сборки для SteamCMD:

```
curl -O http://www.runningwithrifles.com/wp/steamcmd\_update\_rwr.txt

```

Открываем скачанный скрипт и вводим учётные данные вашего аккаунта Steam заместо "*<username>*" и "*<password>*" соответственно:

```
nano steamcmd_update_rwr.txt

```

Заметьте, что Steam говорит об использовании собственных учётных записей на серверах:

"*По соображениям безопасности рекомендуется создать новый аккаунт Steam предназначенный для загрузки и обновления ваших серверов*".

Дело в том, что ваши данные хранятся в файле "*steamcmd\_update\_rwr.txt*" в открытом виде, что не есть хорошо. Но никто не мешает вам изменить структуру скрипта и сделать так, чтобы он запрашивал данные при каждом запуске.

А теперь устанавливаем сборку или если она у вас уже была установлена - обновляем:

```
Работая под Linux/OS X:
./steamcmd.sh + runscript steamcmd_update_rwr.txt

Работая под Windows:

```

Steam Guard, вероятнее всего, попросит код подтверждения, будьте готовы к этому, вводить его придётся только один раз.

И когда будет выпущено новое обновление - просто обновляете уже существующую сборку.

#### Физический доступ к серверу

##### Windows

Просто устанавливаем игру через Steam и при каждом обновлении файлы сервера сами будут обновляться.

##### Linux

Те же действия, что и при удалённом доступе.

### Кооперативная кампания, режимы Вторжение и Man vs World

Для начала **необходимо запустить консоль** сервера посредством запуска файла "*rwr\_server.exe"*, располагающегося в корневом каталоге игры. Далее действуем в зависимости от режима, который хотим запустить. И не забываем, что нужно работать с копиями скриптов.

Есть несколько файлов с настройками, которые не установлены по умолчанию. Их можно не скачивать, мы их упоминаем, чтобы вы знали о них, за что они отвечают и где их найти, если они понадобятся.

1. Информация о расположении сервера меняется в файле, который сначала надо скачать - modulaatio.com/wp/geoinfo.xml . В этом параметре - *value="Greyland", -* измените значение "*Greyland*"на необходимое.
2. Список администраторов запускаемого сервера изменяется в файле, который также нужно ещё скачать - modulaatio.com/wp/admins.xml . Просто копируем "*<item value="jackmayol"/>*", вставляем на новой строчке и в этом параметре - *value="jackmayol"*, - прописываем ник того, кого необходимо сделать администратором.
3. Затем, не изменяя названия, располагаем эти файлы в той же директории, в которой находиться файл, запускающий консоль ("*rwr\_server.exe*").

#### Кооперативная кампания

Оригинальный скрипт для запуска кооперативной кампании находиться по следующему пути: "*media\packages\vanilla\scripts\start\_campaign.as"*. Делаем его копию, переименовываем её, как нам нужно, и запускаем, выполнив в консоли следующую команду:

```
start_script media\packages\vanilla\scripts\start_this_copy_campaign.as

```

Настройки данного режима лежат по пути "*media\packages\vanilla\scripts\gamemodes\campaign*".

#### Вторжение

Оригинальный скрипт для запуска режима Вторжение находиться по следующему пути: "*media\packages\vanilla\scripts\start\_invasion.as"*. Делаем его копию, переименовываем её, как нам нужно, и запускаем, выполнив в консоли следующую команду:

```
start_script media\packages\vanilla\scripts\start_this_copy_invasion.as

```

##### Основные настройки

Основные настройки данного режима - название, порт, примечание к серверу, максимальное количество игроков, возможность выбора фракции при заходе игрока и т.д. -, находятся в самом скрипте, примерно на 25-40 строках кода, и начинаются со строчки *settings.m\_startServerCommand = """*:

```
settings.m_startServerCommand = """
<command class='start_server'
   	server_name='InvasionEU'
   	server_port='1240'
   	comment='Coop campaign'
   	url=''
   	register_in_serverlist='1'
   	mode='COOP'
   	persistency='forever'
   	max_players='24'>
   	<client_faction id='0' />
</command>

```

, где

* **server\_name='InvasionEU'** - название сервера
* **server\_port='1240'** - порт для присоединения, по умолчанию рекомендуется ставить "*1234*"
* **comment='Coop campaign'** - примечание к серверу, которое отображается в списке серверов в игре и по адресу serverlist.modulaatio.com
* **url=''** - на данный момент данный параметр работает только в браузере. Он позволяет делать название сервера - *server\_name*, кликабельным, и открывать веб-сайт с указанным адресом
* **register\_in\_serverlist='1'** - значение "*1*" означает, что сервер виден всем в списке серверов и общедоступен, тогда как значение "*0*" означает, что ваш сервер не будет отображаться в списке серверов и для присоединения к нему необходимо будет иметь IP и порт сервера
* **mode='COOP'** - режим сервера, нет конкретных значений, но предполагается, что тут надо указывать "*COOP*"/"*PvP*"/"*PvPvE*"
* **persistency='forever'** - значение "*forever*" означает, что сервер будет сохранять статистику после каждой игры, тогда как значение "*match*" означает, что сервер будет сбрасывать статистику игроков в конце каждой игры
* **max\_players='24'** - максимальное количество игроков, которое может играть на вашем сервере. Учитывайте то, что нагрузка на ваш сервер растёт с количеством игроков экспоненциально, а не линейно. 32 игрока не используют в два раза больше ресурсов, чем 16. Пока что неизвестно, как рассчитывать это значение, поэтому рекомендуется оставлять стандартное
* **client\_faction id='0'** - значение "*-1*" означает, что при заходе смогут выбирать, за какую фракцию играть. Значение "*0*" означает, что при заходе все игроки автоматически будут приписывать к Гринбелтс, значение "*1*" означает, что при заходе все игроки автоматически будут приписывать к Грейколларс, а значение "*2*" означает, что при заходе все игроки автоматически будут приписывать к Браунпентс. Настоятельно не рекомендуется изменять этот параметр.

##### Другие настройки

Более сложные настройки данного режима находятся по пути "*media\packages\vanilla\scripts\gamemodes\invasion*".

#### Man vs World

Неизвестно точно, можно ли этот режим запустить на сервере. Оригинальный скрипт для запуска режима Man vs World находиться по следующему пути: "media\packages\man\_vs\_world\scripts\start\_campaign.as*"*. Делаем его копию, переименовываем её, как нам нужно, и запускаем, выполнив в консоли следующую команду:

```
start_script media\packages\man_vs_world\scripts\start_this_copy_campaign.as

```

### Доминирование, Минимоды, Командное уничтожение, Десматч, Охота на мишек

Для начала скачайте архив с интерпритатором PHP - runningwithrifles.com/wp/php.zip для Windows или runningwithrifles.com/wp/php5 - и распакуйте его по пути "*tools\php*" (папки "*php*" не будет - создайте её). Это нужно для того, чтобы сервер мог читать устаревшие PHP скрипты, ведь именно на PHP написаны скрипты этих режимов. И, если у вас Windows, скачайте вдобавок следующий файл - runningwithrifles.com/wp/metagame.xml, - и переместите его в корневую директорию сервера, туда, где находиться файл "*rwr\_server.exe*". Данный файл нужен для использования "*анонимных каналов для локального взаимодействия между процессами*".

Затем **необходимо запустить консоль** сервера посредством запуска файла "*rwr\_server.exe*" с параметром "*pipes*", располагающегося в корневом каталоге игры.

Если вы работаете удалённо через консоль с сервером на Windows или Linux или работаете с сервером под Linux, к которому вы имеете физический доступ - выполните следующие команды:

```
Работая под Linux:
./launch_server pipes

Работая под Windows:
rwr_server.exe pipes

```

Если вы имеете физический доступ к серверу и он на Windows, необходимо создать ярлык файла "*rwr\_server.exe*", кликнуть по ярлыку ПКМ, выбрать "Свойства" и в поле "Объект" после пути поставить пробел и дописать *-pipes -debug\_output*. И запускать сервер тогда следует только через этот ярлык.

Все скрипты режимов, написанные на PHP, находятся по пути "*media\packages\vanilla\scripts.legacy*". Всегда помним о том, что нужно работать с копиями скриптов.

Команда для запуска любого режима, скрипты которого написаны на PHP:

```
start_script media\packages\vanilla\scripts.legacy\start_*режим*.php

Примеры:
Запуск режима Доминирование (известного как Классика) -
start_script media\packages\vanilla\scripts.legacy\start_classic.php
Запуск режима Десматч -
start_script media\packages\vanilla\scripts.legacy\start_deathmatch.php
и т.д. В папке "*scripts.legacy*" находиться много скриптов, которые можно запустить.

```

#### Основные настройки любого из этих режимов

Вы можете изменять некоторые настройки, с которыми запускается сервер. Файлы с настройками находятся в этой же директории и имеют вид "*server\_settings\_\*режим\*.example.php*". Поскольку файлы с настройками являются примерами (о чём говорит окончание в названии - "example"), настоятельно рекомендуется скопировать их и работать с копиями, т.к. работая в оригинальных файлах есть риск потерять ваши настройки из-за обновления игры, которое может перезаписать их.

По умолчанию, скрипт какого-либо их этих режимов берёт настройки для сервера по пути, который указан в нём обычно на 12-14 строках и имеет следующий вид (ничего страшного, если начало этой строчки немного отличается):

```
include_once(get_include_with_fallback("server_settings_*режим*.php", "server_settings_*режим*.example.php"));

```

Как мы видим, по умолчанию сервер попробует взять настройки из файла "*server\_settings\_\*режим\*.php*", если такой файл отсутствует, сервер попробует взять настройки из стандартного файла с настройками "*server\_settings\_\*режим\*.example.php*".

Скопировав, следуя рекомендации выше, файл "*server\_settings\_\*режим\*.example.php*", вы можете изменить его название на любое. Советуем просто убрать окончание "*.example*", тогда файл приобретёт вид "*server\_settings\_\*режим\*.php*" и ничего не нужно будет менять в файле скрипта.

Если же вы измените название файла с настройками на какое-то своё, то не забудьте указать в скрипте новое название файла с настройками в первом аргументе. К примеру, пусть наш файл с настройками будет называться "*settings\_deathmatch.php*", тогда мы просто меняем на наше название файла первый аргумент в этой строчке:

```
include_once(get_include_with_fallback("**settings\_deathmatch.php**", "server_settings_*режим*.example.php"));

```

#### Более сложные настройки любого из этих режимов

Более сложные настройки любого из этих режимов находятся по пути "*media\packages\vanilla\scripts.legacy\gamemodes\\*режим\*\map\_rotator\_\*режим\*.php*".

На данный момент известно о следующих параметрах в настройках, которые точно есть в файлах настроек таких режимов как Доминирование, Десматч, Командное уничтожение и Охота на Мишек:

* **ai\_accuracy** - устанавливает, насколько хороши боты. Значение выше усложняет игру с ботами, ниже - делает её легче. По умолчанию "*0.94*"
* **player\_ai\_compensation** - этот параметр отвечает за выдачу стороне с наименьшим количеством игроков дополнительных "компенсационных" ботов. За каждого вражеского игрока будет даваться то количество ботов, которое указано в значении этого параметра. По умолчанию обычно "*1*" или "*0*".
* **xp\_multiplier** - коэффициент, значение которого определяет сколько, относительно стандартного количества - *40XP*, будет выдаваться опыта за убийство. При значении коэффициента "*1.0*" при убийстве будет выдаваться стандартное количество опыта - 40. При значении коэффициента "0.5" при том же убийстве будет выдаваться половина от стандартного количества опыта - 20. По умолчанию значение обычно "*1.0*"
* **rp\_multiplier** - коэффициент, значение которого определяет сколько, относительно стандартного количества - *40RP*, будет выдаваться очков ресурсов за убийство. При значении коэффициента "*1.0*" при убийстве будет выдаваться стандартное количество RP - 300. При значении коэффициента "0.5" при том же убийстве будет выдаваться половина от стандартного количества RP - 150. По умолчанию значение обычно "*1.0*"
* **max\_soldiers** - максимальное на две команды количество ботов . Некоторые подсчитывают это значение следующим образом: "(*\*количество точек на карте\* x 20) + 20*", и называют это правилом жареной курицы (каждые дополнительные 0.5 кг курицы увеличивают время её прожарки на 20 минут + 20 минут). Таким образом, для "*map1*" с 14 контрольными точками устанавливается значение "*280*" ((14 x 20) + 20).

Используйте поиск по документу (горячие клавиши "*Ctrl+F*"), чтобы найти их.

Онлайн

Как хостить сервер • **Как хостить на выделенном сервере** • Кооператив