Создаем свой сервер CS
В первую очередь убедитесь, что железо вашего сервера соответствует минимальным требованиям самой Half-life. Только после этого можно пытаться установить собственный Counter-Strike сервер. Не забывайте, что существует множество способов настройки игровых серверов, а советы, приведенные ниже – лишь описание того, как это делал автор.
ФАЙЛЫ КОНФИГУРАЦИИ:
* Чтобы выставить настройки на сервере, их надо прописать в файле /cstrike/server.cfg. Есть несколько способов того, как это сделать. Один из них – раздобыть чей-нибудь работающий конфиг и отредактировать его. Другой путь – найти описание серверных команд, выбрать нужные и вписать каждую по отдельности.
СОЗДАНИЕ .bat ФАЙЛА:
* Лучше всего создавать отдельную папку с ярлыками для создания игровых серверов. Также там можно расположить несколько .bat файлов для создания выделенных серверов. Сделать батник проще простого: создайте текстовый файл, поместите туда командную строку для запуска сервера и сохраните как файл с расширением .bat или просто измените расширение .txt на .bat после сохранения.
КОМАНДНАЯ СТРОКА:
* Настройки сервера можно задать не только в конфиге. Для каждого отдельного сервера нельзя создать свой конфиг (даже из командной строки, используя +exec…), поэтому лучше прописать некоторые настройки прямо в командной строке. К ним относятся, например, имя хоста или название сервера. Если вы используете несколько портов, то, скорее всего, не захотите, чтобы все сервера назывались одинаково. Если так и есть, вы указываете имя хоста не в конфиге, а в командной строке. А так как для каждого порта у вас будет отдельная командная строка, в ней очень удобно указывать специфические настройки для каждого сервера. Из прочих команд в командной строке вам может понадобиться maxplayers (+maxplayers 20), пароль для соединения с сервером для ограничения доступа (+sv_password match), и т.д. Например:
С:\gameservers\hlserver\hlds.exe -game cstrike -port 27015 +maxplayers 20 +sv_password match +hostname "My Server” +mp_timelimit 40 +map de_dust
СОЗДАНИЕ НЕСКОЛЬКИХ СЕРВЕРОВ:
* Зачем запускать только один сервер, если можно без проблем запустить много? Если железо (и оперативка в частности), может поддерживать больше серверов, можно элементарно запустить несколько серверов на разных портах. По умолчанию первый сервер настраивается на порт 27015. Для запуска дополнительных серверов надо всего лишь создать дополнительные командные файлы. Скопируйте командную строку, которая создает первый сервер, и измените или добавьте "-port XXXXX”, где X – номер порта. Большинство админов просто увеличивают номер каждого следующего порта на один, начиная с 27015, но вы можете использовать совершенно любой номер (при условии, что он не занят). НЕЛЬЗЯ использовать один и тот же порт для нескольких серверов, даже если это совершенно другая игра.
ServerDoc СПАСЕТ ОТ КРАХА:
* Самая большая проблема, с которой приходится сталкиваться админам при запуске Half-Life серверов – это то, что сервер может упасть в самый неподходящий момент (например, когда вас нет рядом). К счастью, в природе существует такая программа как ServerDoc. Она поддерживает жизнеспособность сервера и избавляет от необходимости ежедневной проверки. ServerDoc запускается из-под Half Life и отслеживает состояние игры каждые несколько секунд, убеждаясь в том, что он работает нормально. Если выяснится, что процесс Half Life остановлен, программа сама перезапустит его. К сожалению, в NT есть одна загвоздка, которая не дает ServerDoc перезапускать программы. Это программа диагностики Dr. Watson, встроенная в NT. Иногда она требует кликнуть мышью на выдаваемых сообщениях, чтобы позволить ServerDoc перезапустить программу, которая больше не хочет работать. Программу Dr. Watson можно легко отключить, но лучше этого не делать, если только вы полностью не распоряжаетесь сервером. Ниже приведены примеры батников с новой командной строкой, включающей ServerDoc. Единственное изменение – добавлен serverdoc.exe в начале обычной строки запуска сервера Half Life:
С:\gameservers\serverdoc\serverdoc.exe C:\gameservers\hlserver\hlds.exe -game cstrike -port 27015 +maxplayers 20 +sv_password match +hostname "Me Server” +mp_timelimit 40 +map de_dust
ПЛАНИРОВАНИЕ В NT:
* ServerDoc может не только поддерживать сервер в рабочем состоянии, но и даже имеет встроенный планировщик задач. Однако, его немного сложно освоить, а значит – и эффективно использовать. Если необходимо запускать сервер по расписанию, то это проще сделать из встроенного Планировщика задач. В NT4 в Планировщик можно попасть из Моего Компьютера, а если его там нет, установите с дистрибутива ОС. Есть только одна проблема – эта прога не умеет в назначенное время выгружать программы. Хотя, может быть, это можно сделать и по-другому.
ПАТЧИ И АПГРЕЙДЫ:
* Патчи – это здорово! Они решают проблемы, которые уже давно не дают вам жить. Но админы серверов должны помнить, что иногда патчи ломают больше, чем строят. Обычно патчи выходят в двух исполнениях – полная версия, которая апгрейдит любую версию до текущей, и частичная, которая апгрейдит только предыдущую версию до текущей. ВСЕГДА лучше использовать полные версии. Почему? Потому что можно столкнуться с большим количеством проблем, когда пытаешься устанавливать много патчей, один поверх другого. На всякий случай можно всегда держать под рукой 90-метровый дистрибутив hlserver и реинсталлировать его каждый раз, когда хотите пропатчить его заново. Но проверьте, сохранили ли вы конфиг, иначе придется помучаться пару ночей, переконфигурируя сервер.
Создание плагина
Итак, извлекаем содержимое архива AMX Studio в папку scripting нашего AMXX-мода и запускаем AMXX-Studio.
Теперь необходимо настроить рабочую среду для себя как можно удобнее.
Неплохим вариантом было бы сделать так, чтобы готовые плагины сразу
помещались в папку plugins. Для этого жмём Tools, затем Settings. В
появившемся окне видим слева структурное дерево, в котором выбираем
ветвь Compiller settings. В поле Compiller указываем путь к файлу
amxxpc.exe (наш компилятор), который лежит в папке scripting. В Default
Output Directory вписываем путь к папке plugins нашего AMXX мода.
Настройка завершена, жмём Ок.
Теперь мы можем приступить к написанию скриптов – будущих плагинов. Язык, используемый для написания AMX-скриптов, называется Pawn, именно с ним мы и будем работать. Жмём File , New , Plugin. На экране появляется окно для редактирования с текстом
/* Plugin generated by AMXXX-Studio */
#include
#include
#define PLUGIN "New Plug-In”
#define VERSION "1.0″
#define AUTHOR "Admin”
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here…
}
Сразу следует пояснить что всё это значит. Начнём с первой строки –
она ограничена символами /* */ – это символические скобки, в которые
можно записывать комментарии. Комментарии сохраняются только в скрипте, а
при компилировании они просто игнорируются. Следовательно от
комментариев только польза.
Далее мы видим строки
#include
#include
Директивой #include включается определённый модуль для работы с его
объявлениями, как в С. Все эти модули хранятся в папке
scripting/include. При использовании тех или иных модулей, нужно
обязательно учесть, что получившийся в результате плагин будет требовать
от пользователя включения этих модулей в файле modules.ini, который
лежит в папке configs. Для включения модуля, достаточно
раскомментировать соответствующую ему строку.
Следующие три строчки
#define PLUGIN "New Plug-In”
#define VERSION "1.0″
#define AUTHOR "Admin”
Сообщают информацию об имени будущего плагина, его версии и авторе в виде констант. Эти константы в дальнейшем могут использоваться, и далее мы это видим
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
// Add your code here…
}
Итак, мы подошли к первой функции нашего скрипта plugin_init(). Вы, возможно, уже заметили, что все модули, написанные на Pawn, не содержат классов. В тонкости языка мы углубляться не будем, но лишь отметим, что данный язык используется для написания высокопроизводительных и быстродействующих модулей с монолитной структурой. Эти модули затем компиллируются в бинарные файлы. Тем самым обеспечиваются все необходимые условия для максимального быстродействия.
Вернёмся к нашей функции plugin_init(). Эту функцию исполняет сервер при старте, либо переходе на следующую карту. В теле функции обязательно должна присутствовать строка
register_plugin(PLUGIN, VERSION, AUTHOR)
которая регистрирует плагин в памяти функцией уже другого модуля register_plugin()
О чём говорит строка // Add your code here…, я думаю догадаться можно легко .
Итак, я пояснил некоторые особенности языка скриптинга амх-мода, теперь можно создать один простой плагин в качестве примера. Этот плагин будет делать игрока бессмертным, в какой-то степени, а именно будет давать 999999 HP к здоровью.
Начнём. Жмём File, New, Plugin.
Сразу после закрывшейся фигурной скобки функции plugin_init() создаём новую функцию
godme(id,level,cid){
}
id, level, cid – аргументы функции (параметры), причём эти параметры
уже имеет каждый клиент, поэтому их инициализация в теле функции не
трабуется (инициализация – присвоение начального значения переменной).
Эти аргументы уже имеют свои значения, например человек, подключившийся к
серверу получает на нём номер id, обычно соответствующий номеру
занемаемого им слота (например id = 4), level – уровень привелегий
(например level = ADMIN – уровень привилегий администратора), параметр
cid нам не нужен, поэтому оставим его без внимания. Эти параметры
понадобятся нам для того, чтобы ограничить доступ к функции бессмертия,
предоставив его лишь администраторам сервера.
Используем эти параметры в следующей конструкции:
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
Эта запись читается так: Если игрок не имеет уровень привелегий ADMIN, то прерывание работы плагина и возврат в его начало.
Возврат в начало организуется строкой
return PLUGIN_HANDLED
При этом весь код, расположенный ниже, не выполняется.
Применим эту конструкцию к нашей функции:
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
}
после строки
return PLUGIN_HANDLED
пишем код, который будет выполняться в случае, если игрок – админ. А
именно нам необходимо реализовать присвоение 999999 HP. Это делается
следующим образом:
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED
В результате мы будем иметь готовую функцию, которая присваивает очень много здоровья игроку
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED
}
Теперь нужно пояснить всё написанное.
Начнём со строки new health[32] – так задаётся строка в С (как массив из
символов, где каждый символ – это его числовой код), имеющая длину 32
символа. Стоит отметить, что символы здесь нумеруются от 0 до 31, а не
от 1 до 32. Следующая строка задаётся также.
Далее функцией read_argv(pos,output[],len) производим чтение данных
при вводе с консоли, то есть наша функция будет выполняться консольной
командой dodme (user) (health), которую мы позже зарегистрируем, а
сейчас нужно понять лишь то, что в строке read_argv(1, name, 31) функция
read_argv будет читать имя игрока (user) , распологающееся на первой
позиции, которому мы хотим дать много здоровья и заносить его в строку
name.
Дале читаем с консоли количество сообщаемого здоровья той же функцией, но уже в строку health и со второй позиции
read_argv(2,health, 31)
Далее видим
new player = cmd_target(id, name, 5)
player – это переменная, число неопределённого типа, компилятор сам
подбирает для него тип, мы лишь задаём значение переменной. А значением
для переменной player будет возвращаемое значение функции cmd_target(id,
name, 5).
Эта функция меет очень важное значение для управления командой. Он
позволяет по отрезку из имени игрока определить его id. Например, если
ник игрока -=~PRO100Otec ~=-, то достаточно будет написать в консоле
godme otec 999999 для того, чтобы этому игроку присвоить много здоровья.
Id игрока, определённый данным методом помещается в переменную player.
Далее строка new hps = str_to_num(health) – тут задаётся новая
переменная hps, которая будет содержать количество здоровья в виде числа
(так как при чтении с консоли образуется строка, то её необходимо
перевести в число для использования в функции set_user_health(player,
health). Перевод строки в число производится функцией str_to_num(str),
возвращающим значение строки в виде числа.
Теперь нам остаётся лишь сделать бессертным нашего избранника функцией
set_user_health (player, hps)
В конце добавляем return PLUGIN_HANDLED, чтобы прекратилось выполнение плагина. В нашем случае он и без этой строки будет исправно работать, но во многих случаях следует использовать данную конструкцию.
Теперь необходимо зарегистрировать консольную команду godme, которой мы будем добавлять здоровье. Для этого в конец тела метода plugin_init() вписываем строку
register_concmd("godme”,”godme”,ADMIN_SLAY,”godme”)
название команды задаётся в кавычках на первой позиции после открытия скобок (оно не обязательно должно совпадать с именем функции, просто в качестве простого примера я решил сделать именно так), далее идёт имя функции в ковычках, а затем уровень привелегий level, по которому и идёт проверка в теле нашей функции. В нашем случае level = ADMIN_SLAY, тоесть каждый админ, имеющий в своих правах директиву ‘e’ (имеется ввиду директива прав в файле users.ini например "botinok” "12345″ "bcdefghijklmnopqrstuvwxy” "a”), отвещающую за slap и slay команды, может иметь право делать бессмертным любого другого игрока.
Осталось лишь подключить используемые модули. Помимо стандартных нужно подключить ещё 2 дополнительных модуля: fun и AMXXmisc, так как метод set_user_health() принадлежит модулю fun, а cmd_access() – AMXXmisc. Для этого запишем в самом верху скрипта
#include
#include
#include
Всё, скрипт готов, если вы всё делали правильно, то он примет следующий вид:
/* Plugin generated by AMXXX-Studio */
#include
#include
#include
#define PLUGIN "New Plug-In”
#define VERSION "1.0″
#define AUTHOR "Admin”
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("godme”,”godme”,ADMIN_SLAY,”godme”)
}
public godme(id, level, cid)
{
if (!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new health[32]
new name[32]
read_argv(1, name, 31)
read_argv(2,health, 31)
new player = cmd_target(id, name, 5)
new hps = str_to_num(health)
set_user_health (player, hps)
return PLUGIN_HANDLED
}
Теперь жмём кнопку Compile, похожую на зелёный треугольник и наш скрипт превращается в откомпиллированный готовый плагин и отправляется в папку plugins.
Нам остаётся лишь зарегистрировать его в файле plugins.ini, добавив туда строку makeserv_plugin_me.amxx
Запуск сервера через консоль
Так как запуск сервера сильно потребляет ресурсы, хочу предложить вам альтернативный запуск сервера, в консольном режиме
1)Делаем ярлык файла hlds.exe (Находится hlds.exe тут(путь может отличаться) C:\Program Files\Valve\hlds.exe)
2)Нажимаем на ярлык правой кнопкой, в поле Обьект:, после
"C:\Program Files\Valve\hlds.exe” дописываем следующее:
-game cstrike -console -insecure +maxplayers 20 +sv_lan 1 +port ПОРТ +map de_dust2
Должно получиться что то вроде
"C:\Program Files\Valve\hlds.exe” -game cstrike -console -insecure +maxplayers 20 +sv_lan 1 +port 27015 +map de_dust2
Доп инф:Инфо:
-game cstrike (указываем, что это Counter Strike сервер)
-console (консольный режим)
-insecure (valve использует свой собственный античит VAC, но его нет
смысла устанавлить на кракнутые No-Steam сервера, потому что он банит
только легальных клиентов)
-nomaster (указываем, что сервер не будет показан в глобальной базе
данных серверов, мы ведь не хотим чтобы нас поймали с кракнутым
сервером)
+maxplayers 20 (указывает, что на сервере смогут играть максимально 20 игроков)
+sv_lan 1 (эта строка должна быть ОБЯЗАТЕЛЬНО, если только сервер не рассчитан для легальных клиентов)
+map de_dust2 (указывает, какая карта будет загружаться первой, после запуска сервера)
Сервер видно в поиске + поддержка steam
Делаем сервер видимым в Find SeRveR + 47-48 протокол.
В общем это всё делается с помощью мода dproto.
Качаем dproto-0.3.7
В папке addons создаем папку dproto и копируем в неё файл dproto.so или
dproto.dll в зависимости от операционной системы Linux или Windows
соответственно.
Открываем /addons/metamod/plugins.ini и добавляем следующую строчку:
Linux:
linux addons/dproto/dproto_i386.so
Windows:
win32 addons\dproto\dproto.dll
Файл dproto.cfg кидаем в корень сервера.
(не в cs1.6/cstrike/ а в папку с игрой cs 1.6) Корректируем конфиг,
устанавливая необходимые Вам параметры (настройки по умолчанию
достаточны для работы модуля)
Ну вот собственно и всё.
Админские команды
Админские команды и админские команды меню
vote – выводит id игрока и его ник. Удобно использовать именно id игрока, а не его имя, например: amx_kick #127.
amx_kick [reason] – кикнуть игрока с сервера
amx_ban [reason] – забанить игрока на сервере
amx_banid [reason] – забанить игрока на сервере по SteamID/WonID
amx_banip [reason] – забанить игрока по IP
amx_unban – разбанить игрока
amx_slay – убить игрока
amx_slap [power] – пнуть игрока.
amx_leave [tag] [tag] [tag] – оставить на сервере только игроков с определёным "tag” в имени
amx_pause – поставить/убрать паузу
amx_who – показать у кого какие права на сервере…
amx_cvar [value] – изменить или отобразить значения cvar-ов. Т.е. можно изменить на отличное от сервеного значение, к примеру, mp_timelimit.
amx_map – сменить карту
amx_cfg – выполнить конфиг
amx_rcon – выполнить команду в консоле сервера.
amx_plugins – список всех загруженых плагинов
amx_modules – аналогично список всех загруженых модулей
Чат админов и админские команды меню
amx_say – отправить сообщение всем игрокам
amx_chat – отправить сообщение админам
amx_psay – отправить приватное сообщение
amx_tsay – отправить сообщение всем игрокам (слева жирным)
amx_csay – тоже что и выше только по центру экрана
Админские голосования
amx_votemap [map] [map] [map] – начать голосование за смену карты
amx_votekick – начать голосование на кик игрока
amx_voteban – Начать голосование на бан игрока
amx_vote – просто так любое голосование типа Вася му№;%№ 1. Да 2. Да конечно
amx_cancelvote – прервать последнее голосование
Say…
say /hp – показать информацию о Вашем убийце
say /statsme – отобразить Вашу статистику
say /stats – показать статистику остальных
say /top15 – отобразить 15 лучших игроков
say /rank – отобразить Ваше место на сервере.
say nextmap – отображает какая карта будет следующей
say timeleft – сколько времени до конца текущей карты
say thetime – отображает текущее время
Меню и админские команды меню
amx_cvarmenu – меню cvars’ов
amx_mapmenu – отображать меню смены карты
amx_kickmenu – отображать меню kick
amx_banmenu – меню бан
amx_votemapmenu – отображать меню выбора карт на голосование
amx_slapmenu – меню slap (пнуть игрока)
amx_teammenu – отображать меню выбора команды игрока
amx_clcmdmenu – меню клиентских команд
amx_restmenu – ограничение на использование оружия в игре
amx_teleportmenu – меню телепортаций
amx_statscfgmenu – отобразить меню конфигурации статистики
amx_statscfg [parameters] – отображает справку по конфигурации статистики