ДонНТУ   Портал магистров

Создание собственного сервера в Counter‑Strike 1.6

Как я уже описывал ранее в биографии, какое‑то время до университета и непосредственно во время обучения я занимался созданием и поддержкой сервера в CS 1.6. В большей степени именно это повлияло на мой выбор направления обучения в университете, поэтому свой индивидуальный раздел я хотел бы посвятить данной теме.

Предыстория

Всё началось в довольно юном возрасте, около 12 лет, когда у меня не было собственного компьютера и я все свои школьные выходные просиживал в компьютерных клубах, играя в различные игры. По началу это были оффлайн игры, такие как Diablo 2, Max Payne, несколько частей серии GTA, NFS и так далее. Как‑то раз мы пришли в клуб с друзьями и решили поиграть во что‑то вместе, одной из таких игр стал как раз Counter‑Strike. По началу мне не понравилось и я отдавал предпочтение другим играм, но со временем я начал разбираться в игре и играть с другими людьми по LAN сети всё чаще. Однако у этих LAN серверов была одна проблема, ты не всегда мог на них поиграть: каждый такой сервер существовал только внутри сети компьютерного клуба и если ты приходил во время, когда людей мало или никто не играл в CS 1.6, то и ты в неё поиграть не мог, как и в случае, когда люди приходили поиграть только своей компанией и ставили на сервера пароли. Из‑за этого порой можно было просидеть несколько часов, так и не поиграв; порой так и происходило, но однажды один парень сказал мне, что я могу играть с другими людьми в любое время и ввёл мне IP какого‑то сервера. Для меня, ничего в то время не понимающего ребенка, это стало большим открытием, после которого я ещё чаще стал посещать компьютерные клубы, находя в интернете разные IP серверов и играя на них. Ещё большим открытием для меня стали сторонние модификации, именуемые в кругах игроков моды, в особенности зомби мод. В первый раз, когда я попал на один из таких серверов я испытал дикий восторг и удивление, мой не окрепший детский ум не мог поверить, что такое возможно в этой игре, в игре, в которую я играл уже не один месяц и казалось бы всё в ней знал. После того, как я поиграл на одном из таких модов, обычный CS 1.6 казался мне слишком скучным и не интересным, я искал сервера исключительно с такими модификациями, пока однажды не наткнулся на сервер, который понравился мне настолько, что я несколько следующих лет играл только на нём.

За время, проведенное на этом сервере, у меня появилось большое количество знакомых из России и Украины, которых я встретил на нём. Несмотря на то, что сервер был эстонским, русскоязычных игроков там было очень много, среди них некоторые мои одноклассники и друзья по школе, также посещавшие компьютерные клубы. Когда у меня появился компьютер я продолжал на нём играть вплоть до момента его закрытия. Причинами закрытия стало падения популярности CS 1.6, в связи с которой на рекламу сервера уходило больше денег и владельцы проекта попросту уже не получали с него выгоды.

Через какое‑то время после закрытия сервера мне написал один из людей, с которыми я там познакомился и предложил создать свой. У нас собралась команда около 6 человек, с которыми мы создали и содержали что‑то похожее на тот сервер, на котором мы познакомились. От меня тогда требовалось только следить за порядком в игре и скидываться деньгами на оплату хостинга каждый месяц. Помимо зомби сервера решили открыть ещё public‑сервер (стандартный Counter‑Strike 1.6 с минимумом модификаций) и deathmatch (ещё одна модификация стандартной игры). Команда разделилась на несколько частей, содержать все сервера было слишком дорого, а зомби сервер развивался хуже всех, поэтому он не проработал и двух месяцев, после чего его закрыли и сосредоточились на оставшихся двух, в последствии закрылся и паблик, deathmatch же проработал ещё 3 года, после чего его продали другому владельцу.

Первые шаги

Мне же, после закрытия зомби‑сервера жутко не хватало тех ощущений, я искал какой‑то замены и мне на глаза попалась одна из азиатских модификаций игры, – Counter‑Strike: Xtreme V6. Это было конечно не то, но хотябы что‑то, мне хотелось поменять в ней многие вещи под себя, я решил порыскать в файлах игры и как‑то интуитивно, без каких‑либо знаний в программировании нашел текстовые файлы, в которых можно было поменять цены оружия, урон, скорость и т. п. Таким нехитрыми изменениями я довел игру до того вида, в котором она мне хоть как‑то напоминала то, чего мне хотелось. Но, этого было мало и мне хотелось большего соответствия, я начал искать в интернете уроки по созданию серверов, прочитал несколько из них и решил сделать CS 1.6 с ботами, в которой вместо стандартной игры будет моя копия мода того самого сервера. За несколько дней я собрал копию сервера из готовых, общедоступных модификаций, выставленных в интернете и объединил её с самой игрой. В код модификаций я вносил минимальные изменения, так как не владел никакими навыками программирования, но на тот момент этого хватало для воссоздания того, чего мне хотелось. Так, несколько лет, когда на меня накатывала ностальгия я заходил и играл с ботами.

Несколько лет спустя, когда я уже начал учиться в университете мне написал один из ребят, с которыми мы пытались открыть сервер, просто поинтересоваться как у меня жизнь, в ходе разговора я показал ему несколько скриншотов игры, которую сделал и он предложил попробовать ещё раз создать сервер. К нам подключился ещё один знакомый, который 3 года содержал deathmatch сервер, я создал новую сборку, которую мы установили на хостинг и начали продвигать. В этот раз я никак финансово не вкладывался в проект, однако вся разработка модов для сервера и его развитие с программной части ложилась полностью на меня.

Разработка сервера

Стоит для начала объяснить, что сборкой называют ряд модификаций для сервера, объединенных в одном проекте. Каждую из таких модификаций называют плагином и каждый, зачастую, отвечает за разные дополнения в игре, например один плагин может добавить в игру парашют, раскрывающийся при нажатии на клавишу Е, а другой какое либо дополнительное оружие, которое можно купить в специальном магазине, какие‑то плагины можно использовать для всех модификаций игры, другие же возможно использовать только при определённом главном моде. Главный мод тоже является плагином и в него, как и во все остальные, можно вносить изменения, если имеется не скомпилированный файл. Все плагины для игры написаны при помощи дополнения, позволяющего создавать новые модификации для Half‑Life на языке Small (Pawn) – AMX Mod X (AMXX)[1], все файлы (в скомпилированном виде) имеют расширение amxx и используют этот модуль, в купе с рядом дополнений.

При создании нового сервера мне хотелось не копировать то, что нравилось в детстве, а создать что‑то новое, что‑то своё, взяв от оригинала всё лучшее. Первая версия нового проекта состояла целиком из готовых, скачанных из интернета плагинов. Нужно было создать сборку для хостинга в кратчайшие сроки, времени на то, чтобы во всём тщательно разбираться не было, поэтому я просмотрел каталоги готовых дополнений, подобрал, так называемый, скелет главных плагинов, который никогда не будет меняться (мультиязычный чат, автоматическая смена карт и т. п.), обвязку из дополнительных плагинов, заимствующих всё лучшее из старого сервера, и добавил несколько новых решений, которые казались мне удачными. Дальнейшей настройкой и обвязкой занимался уже на работающем сервере, выпуская всё под видом обновлений. Непосредственно для разработки и тестирования обновлений создал копию сервера у себя на компьютере, добавил ботов и все новые решения тестировал там.

Шло время, я разбирался в разработке плагинов всё лучше и лучше, сервер пользовался большой по меркам CS 1.6 того времени популярностью, днем на нём всегда было более 25 игроков из 32 доступных слотов и чтобы поддерживать этот интерес я старался регулярно выпускать обновления и дорабатывать уже существующие механики. Всё это занимало очень большое количество времени, его фактически едва хватало на учёбу, так как совершенно вся разработка, абсолютно вся техническая составляющая лежала на мне. Уже недостаточно было скачать готовые дополнения из интернета и добавить их на сервер, приходилось самостоятельно дорабатывать уже готовые, или же создавать новые плагины и такая ситуация была не только с кодом, визуальную и аудио часть контента тоже нужно было менять и это тоже требовало определённых навыков, которые пришлось осваивать. Рассмотрим их по порядку:

1. Моделирование

Для каждого нового предмета или персонажа зачастую приходилось самостоятельно искать в интернете модели, которые подходили бы по задумке, при этом они не должны были много весить, чтобы загрузка ресурсов с сервера игроком не была слишком длительной и не отталкивала (этот критерий также применялся ко всем остальным ресурсам). Человек в игре имеет одну модель – вид от третьего лица, зомби класс – 2 модели – вид от первого и от третьего лица, а оружие целых 3 – первое лицо, третье лицо и отдельная модель оружия, лежащего на земле; не редкими были случаи, когда каких‑то моделей из скачанных не хватало и приходилось делать их самостоятельно в программе MilkShape 3D, также часто приходилось нарочно ухудшать качество некоторых моделей, чтобы уменьшить их вес, также, я делал простые, но необходимые модели предметов, заменял модели рук у оружия и другие, не сложные, манипуляции.

2. Спрайты

Все эффекты в игре это файлы с расширением .spr, в простонародье называемые спрайтами. Они представляет собой набор растровых изображений, объединенных в один файл и воспроизводимых в нужные моменты. Эти файлы также зачастую нужно было искать, но каталогов с эффектами в интернете намного меньше, поэтому приходилось рыскать по другим серверам и качать другие модификации, чтобы находить необходимые эффекты. Практически все они изменялись, а многие были созданы самостоятельно, в этом помогали такие программы как Adobe Photoshop, Paint,net, SprView и Sprite Explorer.

3. Звуковые эффекты

В игре, также, очень много звуковых эффектов, но потребностей в них было не много, звуки выстрелов и эффектов мне доводилось подбирать лишь несколько раз. Однако, при окончании и старте новых раундов я вставлял отрывки из различных музыкальных треков в формате wav (так как формат mp3 зачастую выкручен на минимум и просто не слышен в пиратских версиях CS 1.6). Здесь для редактирования аудиофайлов я использовал программу Audicity и несколько онлайн ресурсов.

Всё остальное также лежало на мне: все настройки на хостинге, окно рекламы на сервере, представляющее собой сайт на html, текстовое описание обновлений в виде статей, администрирование группы сервера вконтакте, подбор смотрителей и т. д.

Описание финальной версии сервера

Я не буду описывать все обновления, произведённый мной за всё время содержания сервера (около двух лет), чтобы не растягивать раздел, лишь вкратце опишу последнюю версию сборки сервера, с которой мы закрыли проект.

Стандартный зомби‑мод

Начну с описания того, что из себя в принципе представляет обычный зомби мод в CS 1.6. Зомби мод превращает стандартную CS 1.6 с борьбой террористов против контртеррористов в борьбу людей против зомби. В начале раунда все люди заодно, но по истечение 10 секунд один из людей становится зомби, который может заразить другого человека, ударив его. Главное преимущество зомби – большое количество ХП (несколько тысяч) и специальные способности. Существуют нескольких зомби‑классов, с набором своих плюсов и минусов, также в игре есть меню на М, в котором можно выбрать зомби‑класс, зайти в специальный магазин и купить экстра‑предметы за специальную валюту. Это основной режим игры, но также есть 5 дополнительных:

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

Моя версия мода

Итак, костяк плагинов, которые я загрузил ещё в первые дни создания так и остался в проекте, я лишь внёс некоторые изменения и оптимизировал какие‑то из плагинов. По сравнению с первой версией в игру было добавлено 5 дополнительных режимов игры и 2 дополнительных типа босс‑персонажей с собственными режимами и способностями, старые же 2 босса были полностью переработаны. Среди босс‑персонажей:

<Босс‑герои

Рисунок 1 – Босс‑герои

4 этих персонажа имеют соответствующие режимы раундов, когда один из игроков становится боссом, остальные – производные этих режимов, но все они имеют шанс наступления меньше, чем у стандартного режима – обычной инфекции.

Для сохранения баланса между новыми игроками и старыми было принято решение не сохранять игровую валюту с переходом на новую карту, а обнулять число кредитов каждый раз, в альтернативу этому была разработана моя собственная уровневая система, которая открывала дополнительные зомби‑классы, оружие и способности по достижении определенных уровней. Также, для сохранения баланса между игроками полностью переработана была и система привилегий, которая теперь давала преимущества, мало влияющие на игровой процесс и открывала доступ в специальный супер‑магазин, в котором игроки с привилегиями могли купить предметы и оружие, недоступное другим игрокам. Стоит заметить, что для игроков без привилегий не было никакой возможности получить это оружие, и даже при попытке подобрать его с земли высвечивалось сообщение о том, что данное оружие доступно только при определенной привилегии. Оружие не имело значительных преимуществ по сравнению с предметами из обычного магазина, но имело достаточно интересные эффекты и механику. Был переработан интерфейс игры и создано несколько вариантов, которые можно было менять через меню, исправлены все ошибки и доработаны все механики в старых зомби‑классах, предметах, функциях. Была полностью реализована двуязычная система (русский и английский), язык можно было поменять через меню, все сообщения и уведомления были реализованы на двух языках на выбор. Для разных персонажей были добавлены разные модели парашютов, в зависимости от персонажа. Полностью переработана система команд администраторов, все команды изменены на собственные и введены лимиты по времени таким образом, чтобы никто из игроков, которые приобрели привилегии не мог вносить разлад в игровой процесс и творить всё, что вздумается.

При покупке любого предмета в магазине в чате появлялось сообщение с описанием его возможностей, самыми интересными предметами на мой взгляд были:

С полным списком списком предметов и возможностей можно ознакомиться, посмотрев видеообзор, ссылку на который я прикреплю ниже [2]. Основные моменты я описал и мне кажется, для описания опыта принятия участия в каком‑то проекте этого достаточно.

Завершение

Шло время и я попросту начинал терять ко всему этому интерес. Мне нравилось создавать что‑то новое, нравилось заниматься разработкой, нравилось смотреть, как люди играют в то, что я создал, нравилось читать их реакцию, но я банально не видел в этом никаких перспектив, фактически я бессмысленно тратил кучу времени на дело, которое никогда мне не пригодится и ни во что не вырастет, на игру, которая давным‑давно утратила свою популярность и, можно сказать, доживает свои последние дни. Мы не получали прибыли от содержания сервера, напротив, мы работали себе в убыток, на чистом энтузиазме, это было своего рода хобби, где я тратил своё время, а мой товарищ деньги. Эти мысли долго преследовали меня и в конечном итоге я решил создать последнее обновление, в котором реализую все задумки, которые были у меня на тот момент, проработать все мелочи, использовать всё, чему научился и окончательно закончить с этим увлечением, поставив таким образом красивую точку. Я доделал последнее обновление, загрузил его на сервер, написал товарищу, с которым мы держали сервер о своих планах и мы вместе решили закрыть проект. Это был отличный опыт и я мало о чём жалею, но жизнь идёт своим чередом и нужно двигаться дальше.

Список ссылок

1. Сайт AMX Mod X в примерах (ссылка).

2. Видеообзор сервера (ссылка)