Ведущий инженер-энергетик из Норильска пилит WoW-сервер в одиночку. Вчера открыл ОБТ
Работал ведущим инженером в сфере энергетики. С 2014 года увлекаюсь разработкой игровых серверов — началось как хобби, затянуло серьёзно. Недавно попал под сокращение, живу в Норильске. Пока не могу устроиться на новую работу из-за компенсации от работодателя. Появилось много свободного времени — и я решил наконец довести до ума свой главный проект.
Сервер World of Warcraft, который я пилю с 2022 года. Называется Valor, версия WotLK 3.3.5a. Вчера открыл бету для всех.
Расскажу путь от первых попыток поднять сервер до рабочего проекта с 26 расами, 800 ботами и кастомным мировым боссом.
Как это началось
Играл на разных приватках — но нигде не мог найти то, что хотелось. Пустой мир, мёртвый аукцион, одни и те же стандартные расы. Подумал: «Да я сам лучше сделаю». Классическая ошибка.
Скачал исходники AzerothCore, поставил Ubuntu, два дня гуглил почему не компилируется. Оказалось — не тот компилятор. Добро пожаловать в разработку.
Первый сервер вообще стоял у меня дома на подоконнике. В Норильске. Кто не знает — это город за полярным кругом, где зимой бывает минус 50 и ветер сносит с ног. Однажды прихожу домой — а на системник с сервером намело снега через щель в окне. Сервер работал. В снегу. Охлаждение, так сказать, природное.
После этого случая я всё-таки перенёс сервер на нормальный хостинг в Красноярск. Но фото сохранил — на память.
Чему пришлось научиться
Опыт в энергетике помог с логикой и системным мышлением, но программирование — совсем другой мир. Всё с нуля. Без курсов, без менторов — только документация, Stack Overflow и упорство.
C++ — ядро сервера. Первые полгода боялся трогать что-то кроме конфигов. Потом начал править скрипты. Потом лез в ядро. Сейчас пишу свои модули и патчу баги в чужих.
Linux — сервер крутится на Ubuntu. Научился работать с systemd, nginx, iptables, fail2ban, MySQL. Когда первый раз настраивал файрволл — случайно заблокировал себе SSH. Пришлось ехать к серверу физически.
PHP/Laravel — сделал сайт с личным кабинетом и системой регистрации.
.NET — написал лаунчер с автообновлением клиента, чтобы игрокам не качать 15 гигов вручную.
DBC-файлы — бинарные файлы клиента с данными о расах, спеллах, моделях. Однажды случайно удалил папку с DBC для всех кастомных рас. 26 рас. Восстанавливал из облака три часа, попутно переосмысливая жизненные решения.
Мой напарник
Кстати, работаю я не совсем в одиночку. Мой кот Нафаня — бессменный тимлид проекта. Сидит рядом, контролирует процесс, иногда ложится на клавиатуру в самый ответственный момент. Пару раз «помогал» дебажить — случайно нажимал Enter и отправлял недописанные SQL-запросы в базу. Один раз удалил строку в конфиге хвостом. Но в целом — моральная поддержка бесценна. Когда в три часа ночи ловишь segfault, а рядом мурчит кот — уже не так одиноко.
26 рас — самая безумная часть
Захотел добавить расы из поздних дополнений в клиент 2008 года. Вулпера, Ворген, Пандарен, Драктир, Войд Эльф, Ночнорождённые, Зандалари, Кул-Тирас, и ещё куча. Каждая раса — это патч DBC, модели, фракции, стартовые зоны, все 10 классов.
Клиент 2008 года не знает что такое Вулпера, и ему от этого плохо. Каждая новая раса — это десятки правок в бинарных файлах, куча тестов и неизбежные баги на ровном месте.
800 ботов — чтобы мир не казался мёртвым
На любом новом сервере главная проблема — некому играть. Подключил модуль AI-ботов. 800 штук. Бродят по миру, качаются, записываются в данжи через LFG. Танк танкует, хил лечит, ДПС бьют. У них даже тактики на боссов прописаны — все данжи Вотлка плюс рейды: ICC, Ульдуар, Ониксия.
Но баги. Бот-танк заходит в Азжол-Неруб, группа прыгает в яму после первого босса — а бот стоит наверху. Не умеет прыгать с высоты. Пришлось писать автотелепорт: если бот в данже далеко от группы — перемещается к лидеру.
Ещё: сервер падал раз в сутки. Дебажил неделю. Оказалось — несколько ботов одновременно умирают, одновременно ищут кладбище, гонка потоков повреждает хэш-таблицу. Segfault. Добавил shared_mutex — починилось.
Мировой босс — Пуджа Нерасстроенный
Какой WoW без мировых боссов? Добавил своего — Пуджа Нерасстроенный. Да, отсылка к Dota. Огромная абоминация, бродит по Нордсколу, примерно 7 миллионов HP. Притягивает игроков хуком как Death Grip, бьёт Hateful Strike, плюётся слизью. На 5% здоровья впадает в ярость, а через 6 минут — берсерк. В одиночку не убить, нужна группа.
Дропает тринки из ToC, эмблемы фроста и триумфа, Primordial Saronite. Но самое забавное — когда его никто не бьёт, он патрулирует территорию и троллит в чат. «Пуджа хочет играть! Где его друзья?», «Никто не приходит к Пудже... Пуджа грустит», «Мясо... Пуджа чует свежее мясо...». А когда кто-то всё-таки приходит — «Пуджа голоден! Пуджа разорвёт!». Грустный одинокий босс, который просто хочет внимания.
Что есть на сервере к ОБТ
Кратко что удалось собрать за эти годы:
— 26 рас (10 стандартных + 16 кастомных) — Рейт x10, но каждый игрок настраивает под себя от x1 до x10 командой — 800 AI-ботов в мире и LFG — Рефорджинг и трансмогрификация — Мировой босс Пуджа Нерасстроенный — Аукцион-бот (АХ всегда наполнен) — Ежедневные бонусы каждый день недели — Кастомный лаунчер — Никакого доната за шмот
Почему без pay-to-win
Это принципиальный момент. Я сам играл в WoW 8 лет. За всё это время так и не прошёл цепочку квестов на Шадоумурн — это легендарное оружие из ICC, которое нужно выбивать месяцами. Реально сложная цель, к которой идёшь всем рейдом.
А потом заходишь на популярный сервер — и каждый пятый бегает с Шадоумурном. Купил за донат и пошёл. Ты качался полгода, собирал рейд, вайпался на Лич Кинге — а рядом чувак, который просто закинул денег и получил всё за пять минут. И он тебя ваншотит на БГ.
Это убивает весь смысл игры. Когда легендарное оружие можно купить — оно перестаёт быть легендарным. Новичок заходит, видит эту несправедливость и уходит. А за ним уходят и остальные.
На Valor я делаю сервер мечты — где все равны. Шадоумурн? Иди в ICC, собирай рейд, проходи цепочку. Как задумали разработчики. Купить нельзя. Ни за какие деньги.
VIP на сервере — это только удобства: банк, почта, ремонт в любом месте, телепорт друзей к себе. На силу персонажа не влияет вообще.
Прокси и пинг
Сервер стоит в Красноярске. Первый прокси поставил в Москве — пинг 160мс. Перенёс в Новосибирск — упал до 68мс. 800 км вместо 4000. География решает.
Что самое сложное
Не код. Самое сложное — мотивация. Когда сидишь один, пилишь фичу неделю, выкатываешь — и онлайн два человека. Включая тебя.
А потом кто-то заходит, играет три часа, пишет «офигенный сервер» — и ты понимаешь зачем.
Вчера открыл ОБТ. Страшно и волнительно одновременно. Если кому интересно — сервер называется Valor (valor.su). Заходите потыкать, буду рад любому фидбеку.


































