Админим сервер Ultima Online 14 лет — Третья часть лонга
Дальше начался вполне закономерный ад, который довольно сильно давил психологически на всех. На меня, привыкшего к около безупречной работе нашего сервера и сделавшего для этого много, но допустившего эту ситуацию в целом. На игроков, которые несколько месяцев не могли нормально играть без ежечасных опасений откатов, часовых фризов, и любых самых неожиданных проблем с любыми взятыми элементами игры, которые ломались каждую неделю по десять раз. На нового программиста, потому что на него свалили огромный проект, к которому готов он не был не смотря на гонор по началу, и такой же огромный мой абьюз, которому позавидовала бы и солдат Джейн. Да и в целом, обстановка была достаточно веселой — если вы думаете, что видели в этой жизни токсичное общение, вы просто не были у нас в дискорде зимой 17-го.
В какой-то момент я опустил тентакли и смирился окончательно с неизбежностью бытия. Внутренне приняв наконец свое полное нежелание разруливать ситуацию и тотальное выгорание вкупе с виной за него, я прекратил тестировать обновления перед вводом на лайф сервер. Теперь и этим занимался наш новый кодер. Занимался он этим потому, что пришло понимание: если не сейчас — то никогда, и пора учиться делегировать полномочия.
С этого момента дозированными порциями и через фильтр «шит-контроля» решения начал принимать не только я один. Человек получил полный доступ ко всей кодовой базе и всем нашим наработкам за 7 лет, а также полную учетку в игре с максимальным уровнем доступа «Owner». Помимо этого, были выданы права администратора на нашем сайте, соц. сетях, дискорде и т.д., в общем — у нас появился второй полноценный администратор, впервые за все время.
Но, как вы, наверное, уже поняли, был и существенный минус — игроков наматывало на амбразуру такого шокового варианта обучения. Говоря честно, я не знаю, как люди играли у нас в тот период. На их месте я бы ушел через неделю искать другой проект, а я человек очень терпеливый. Если выражаться образно — вы живете годами в достатке в своем теплом особняке, не зная горя и в какой-то момент вам с ноги выламывают дверь, отбирают все, что есть, и дальше вы живете с бутылкой водки под протекающим мостом рядом с наркоманами, которые каждый день вас бьют и грабят. Вот насколько у нас все было плохо в тот период со стабильностью работы шарда и кривизной обновлений. Было стыдно и больно, но я уже точно осознавал, что эта та грань, при которой мы либо работаем дальше, либо все заканчивается через год просто угаснув. Потому, что я не могу себя заставить делать уже вообще ничего.
А теперь о хорошем — в этом году мы пообщались с разработчиком очень популярной софтины, которая использовалась всеми без исключения, в основном для ботоводства (она позволяет запускать персонажа с любой степенью автоматизации и сложных скриптов без запуска графического клиента игры). И получили уникальные ключи, работающие только с нашей сборкой шарда, которые позволяли детектить данный софт. Программа использовалась на всех серверах в мире, и мы были первыми из тех, кто смог ее определять на сервер-сайде. Это давало огромное преимущество по контролю ботов и ограничению зон и механик, которые могли использоваться игроками таким образом. И хотя я уже был знаком с разработчиком, и мы ранее немного общались, ключи были получены уже нашим вторым администратором. Так с ложкой меда в бочке дегтся, заканчивался очередной год.
В первые месяцы, пройдя через очередной миллиард ошибок и растеряв следующую часть игроков, скрипя всеми колесами, мы переводим клиент и сервер-сайд игры на последнее обновление официальных серверов — Endless Journey. Делаем это первыми в уже теперь ех-СНГ и третьими в мире, но опять же — первыми из старых серверов. Теперь можно сказать, что номинально за 8 лет разработки мы догнали официальный сервер, которому было к тому моменту больше 20 лет. Номинально потому, что часть обновления еще не была на должном уровне готова, однако аналогов и этому ни у кого не было.
Весной произошло два события. По классике — одно хорошее, одно не очень. Первое заключалось в том, что кодер наконец-то начал нащупывать почву под ногами, и сервер стал худо-бедно походить на себя в былые годы, в плане стабильности. Скилл рос как на дрожжах, и его хватило даже на ввод уникальной относительно конкурентов и сложной системы мультилогина. Смысл его работы заключался в том, чтобы человек при логине в игру мог выбирать несколько серверов из списка, как во всех современных играх. Таким образом, для примера, стало возможно отображать и мейн сервер и тест-сервер на одном окне логина в списке доступных шардов. До нас эта система в полноценном виде была реализована только у официалов.
Второе состояло в том, что сервер уже перешел на оплату хостинга за мой счет, потому что денег перестало хватать, что было вполне закономерной реакцией людей на тот бардак, что царил у нас последнее время. И хотя и я, и скриптер работали бесплатно, расходы все равно были выше. Тут надо пояснить, что сервер работал в минус и первые полтора года своего существования, и не редко — несколько месяцев в каждом году и в дальнейшем. Но тут я решил окончательно (опять же благодаря своему выгоранию), что, если Inceptum хочет жить — он должен самоокупаться любыми способами, но работать хоть на рубль, но в плюс и без участия моего кармана.
Первое, что было сделано — сокращены расходы на все лишнее, часть инфраструктуры переехала обратно в Россию, а все необязательные веб-сервисы переехали с выделенных VDS на одну. Второй волной был пересмотрен весь магазин пожертвований — исходя из покупательского спроса были скорректированы расценки на то, что в нем находилось. И наконец последнее, что было сделано — наше физическое железо было вывезено из датацентра. Как сейчас помню, это было в лютый летний дождь, когда затопило пол-Москвы, и я под дождем пол часа ждал такси из Химок, надеясь на то, что парни в ДЦ, любезно предложившие запаковать все в пупырку, чтобы не залило водой, сделали это на совесть. Пока я смотрел в окно машины на потоки воды, доходившие до порогов, в голове созрел план.

За неделю я продал сервер на авито, обеспечив нам небольшой задел по деньгам на несколько месяцев. После чего я откопал свой аккаунт на серч энгайнс, и в разделе хостингов создал тему, содержание которой можно свести к следующему: Мы делаем рассылки по нашей базе пользователей раз в пару месяцев на примерно 10 тысяч человек, у нас есть сайт с посещаемостью в день такой-то, есть игра, есть соц. сети и группы в мессенджерах, работаем много лет. Мы размещаем везде вашу рекламу включая ингейм, и в рассылки вставляем блок, который вы отправите, взамен нам нужно железо бесплатно, с конфигом не ниже указанного, на длительный срок.
Честно говоря, надежд у меня было совсем мало, однако сразу откликнулось два человека. Первый был от совсем маленького хостера, второй был от крупного хостера. Пребывая в режиме «я не очень умный» и решив, что с мелкими ребятами будет проще по-свойски решать вопросы, я выбрал первых. Через два неполных месяца наше сотрудничество прекратилось, потому что в какой-то момент мне написал их менеджер, и сказал — сорян, но у вас три дня, потом сервер мы освобождаем. Удалив всю их рекламу у нас и подумав, какие же это чудесные люди, я написал вторым, с вопросом, актуально ли еще их предложение, потому что мы кажется обделались с выбором. Мне ответил их директор, тогда еще сидевший под своей учеткой сам. Это был максимально странный экспириенс с моей стороны, воспринимающийся как параллельная ветка вселенной. Я разговаривал с человеком, который летел в самолете на переговоры в другую страну, на блог компании которого я был подписан на хабре, и обсуждал с ним игру, которой был 21 год.

Честно описав ему ту бездну, на которую они подписываются и ее перспективы, я получил на выбор ряд серверов. Предложения были от — на год мы можем дать вот это, или на сколько хотите — вот это. Поскольку на год нам предложили сервер способный взломать пентагон, обсчитывая прогноз погоды на пятое тысячелетие, я выбрал наиболее подходящий вариант «на насовсем». У меня было полное ощущение, что все показатели и расклады, которые я ему давал, ему совершенно не важны и не интересны, тем не менее, с вежливостью они все были выслушаны. Я понял, что основное это «я просто так хочу» а не «мне от вас надо это и это».
Забегая вперед, скажу, что мы уже 5 лет как размещены у них же бесплатно, и никогда никто с нас не требовал никаких отчетов ни по одной рассылке или рекламе с нашей стороны. За это время нам несколько раз меняли конфигурацию железа (она всегда оставалась в рамках наших запросов) перенося с ноды на ноду, несколько раз писала поддержка — объясните, как вы у нас размещаетесь бесплатно, и несколько раз писал я, когда у нас были технически проблемы, которые всегда устранялись оперативно. Поэтому даже если завтра нас отключат без всяких предупреждений — я безмерно благодарен за это время и возможность, потому что во многом это позволяло нам работать следующие годы. Если кому-то будет интересно, и кто-то до сюда дочитает — логотип хостера у нас на главной сайта.
А к концу года был установлен рекорд по количеству патчнотсов за год, который удерживается до сих пор. Почти дойдя до цифры в 500 пунктов. Если отбросить цифры и сконвертировать в более понятные величины — несколько тысяч изменений на сервер-сайде. Наш второй администратор и по совместительству новый кодер в свой первый полноценный год прибывал в том же режиме и состоянии, что и я в свой первый — интересно, новый опыт, новые вызовы, надежда на лучшее еще не мертва, жизненная энергия еще вращает маховик ответственности. И за всю эту продуктивность и год, который стоил трех, он получил немного денег, и новые комплектующие с недорогой периферией к ноутбуку, чтобы программировать было комфортнее. А комфортнее — значит больше. Учитывая количество потраченного на сервер времени и нервов с его стороны за этот период, это было грустная и злая ирония. Тем не менее, сумев разобраться со всеми самыми критичными организационными вопросами мы продолжали наш путь в будущее.
И в этом будущем наконец-то полностью дошли и перешли на систему паблишей (патчнотсов полностью) 1 к 1 с официальных серверов. До этого на протяжении 8 лет мы в большинстве своем работали только по тикетам от пользователей, когда что-то относительно офф. сервера работало не верно. И время от времени делали большой скачок, когда могли ввести все, что вышло на официальном сервере за год-два-три. После — снова правили ошибки после этих заходов. Минус системы был в том, что иногда у нас провисали какие-то механики или геймплей, в том плане, что игра была сшита из разных обновлений за разное время.

Всю эту мешанину мы пытались свести к чему-то одному. К примеру, лучники могли работать с абилками 2016 года, а воины с абилками 2018. И хотя разница в формулах была невелика, система зависела от активности и добросовестности игроков — сдавать выгодные ошибки никто не хочет, но каждый хочет занерфить соседа. К этому году бесконечный поток сообщений вида «это работает не так, как на офе, вот ссылки и видео» иссяк. И впервые за все время мы начали переносить обновления по мере их выхода, сократив отставание от серверов разработчиков игры до нескольких месяцев, и придя к понятной линейной структуре апдейтов.
В этом же году первыми из крупных серверов, и первым — на последних обновлениях, поддержали разработчиков альтернативного клиента игры, и первыми среди всех серверов, что им пользовались, сделали рассылку с рекламой клиента по нашей базе. Забегая вперед, можно сказать, что по состоянию на конец 2023 на нем сейчас играет довольно много наших пользователей. Тут можно просто вставить цитату с форума:
«Не любите 3D клиент? Любите 2D, но слишком топорно, угловато и дергано? Кажется, у нас есть пилюля для вас — «2D» на стероидах, плавно, резво, красиво. Начнем издалека.
Моя история знакомства с данным творением такова — в конце декабря 16-го мне написал разработчик клиента с вопросом по uop-ам, к сожалению, помочь я с ним не смог, т.к. мы сами так и не доковыряли файлы анимации из новых версий (на тот момент), как пример, но зато мне стало известно вообще о том, что такой клиент существует.
С запуском на нашем сервере, на тот момент, было множество проблем, ибо мы всегда на острие апдейтов.
Последние офф. клиенты только-только вышли, а мы уже были переведены на них, в то время как с дремучих времен ничего не меняется, и большая часть серверов в СНГ как сидело на 2-4 версиях клиентов, так и сидит. Вполне ожидаемо, пилится все в первую очередь под них. В итоге, дай бог и с граблями все доходило до запуска игры по факту, но черного экрана по итогу, о чем я и указал, и через какое-то время вообще забыл об этом разговоре, как и о клиенте.
Вспомнил я о нем, когда в начале сентября от разработчика пришло сообщение о том, что теперь на последних версиях — играбельно, и проблем особых у нас быть не должно. Я обещал посмотреть в течении недели, в итоге, как это обычно со мной и бывает, дополз до теста через 3, и вот теперь пишу эту новость».
После чего была проведена большая работа, по итогам которой гордимся тем, что сейчас сервера использующие данный альтернативный клиент и последние аддоны игры идут про проторенной усердием разработчиков, и во многом — нашими баг-репортами, дороге.
Однако, на этом все хорошие новости за этот год заканчиваются. И хотя с точки зрения обновлений мы работали как обычно (несколько сотен пунктов + паблиши целиком), но действительно монументального и интересного ничего не делали, сосредоточившись на сокращении остывания от официалов. Учитывая то, что рекламу мы так больше и не давали, а у старых игроков накопилась усталость, мы вполне закономерно пришли к каскадной убыли онлайна с относительно небольших потерь в начале. Устали игроки, устали мы, нового притока нет. И мы решили — раз уж все и так хуже некуда, надо сделать прыжок в пропасть — сделать все правки, духу на которые раньше не хватало.
И исправить все ошибки, которые мы допускали за все эти годы, так, как если бы сразу со старта у нас был наш опыт в почти десять лет. Ведь когда есть онлайн — непопулярные решения чреваты его потерей. А когда ты уже его теряешь — какая к черту разница? И мы приступили к делу.
Итак, о непопулярных решениях, и о том, что привело к ситуации, при которой в принципе появилась необходимость в них. В начале нашего становления, как вы уже знаете, мы сильно отставали от официального сервера. И в какой-то момент показалась правильной следующая схема - мы не вводим какой-то кусок с т.н. офа, но вводим вещи с него. Выглядело это следующим образом: к примеру, у официалов выходит квест или ивент, за прохождение коих дается награда - предметы, свитки, маунты и иже с ним. Т.к. изначально мы отставали очень сильно по обновлениям, было решено сокращать отрыв, вводя новые предметы просто за какую-либо из ингейм валют (кроме доната). Это казалось логичным на тот момент, хотя легкое осознание возможных грядущих проблем прослеживалось уже тогда, но с мыслью "да когда они наступят, эти проблемы, никто не держит сервера по 10 лет в здравом уме" мы делали так из года в год.
Проблема заключалась в том, что на офе у людей уходило много времени и сил для получения предмета, который мог быть редким или мог быть получен в какой-то ограниченный срок ограниченным числом игроков. У нас же и по факту предмет был доступен всем, кто просто пофармит мобов и набьет нужное количество золота. Что создавало ситуации, когда вроде бы редкие ценные предметы в оригинале постепенно становились мусором у нас. Вот еще пример, уже более вопиющий - из-за неравномерной установки обновлений до определенного года, о чем было рассказано в предыдущей части, на сервере происходили перекосы по балансу, которые затыкались иногда просто свитками, дающими определенный бонус для оружия "угнетенного" класса. С точки зрения быстрой подгонки игры под текущие реалии оригинала с минимумом времязатрат — это работало.
Однако толком никто не думал, а что будет, когда баланс подтянется до необходимого через обновления, а свитки и оружие с бонусами останутся, создавая искусственный перекос уже в другую сторону. Так что на протяжении года подтягиваем все проблемные места сервера через боль и страдания оставшихся игроков до нормального состояния, в котором они должны были быть, если бы у нас к тому моменту было десятилетие опыта или же банально больше мозгов в моменте творения этой дичи. Все немыслимые непопулярные, но необходимые решения, которые копились как снежный ком год от года и на которые не хватало духа с высоким онлайном принимались с низким.
Этот год был во истину шоковым в полном понимании этого слова, потому что количество правок оружия, брони, крафта и всего, что уже было на руках у людей, было запредельным. Представьте, что вы ложитесь спать с хорошим луком из лута и в замечательных штанишках с крафта, а просыпаетесь с посредственным арбалетом в руках и в так себе ботинках, а ваш конь стал ламой, а еще с него сняли рарный цвет.
А теперь представьте, что вы тратили на это время, а иногда и Время (с большой буквы). Конечно, мы компенсировали игрокам все неудобства, прекрасно осознавая, какой это фиговый экспириенс и подрыв доверия. Тем не менее, время и настроение мы компенсировать не могли, но всегда давали что-то взамен забираемого и немного сверху.
Однако, резали мы по живому и жестко, а игроки расплачивались за наши ошибки. К этому добавился систематический накат обновлений, чтобы не просто переделывать и отбирать, а делать так, как должно было бы быть изначально. Ивент — значит ивент. Квест — значит квест, больше никакой халявы. И все вышеописанное без учета правок баланса скиллов, которые тоже были. К примеру, правка и пересчеты системы оверкаста. Оверкаст — это штраф ко времени каста заклинания, в том случае, если между соседними кастами прошло очень мало времени. Условно - штраф за зажимание кнопки и спам спеллами.
Данная
система ни на каких официальных ресурсах подробно описана не была, о
ней было лишь несколько упоминаний за десяток лет от игроков. То, как мы
это правили у нас, и выясняли все тайны этой чудесной приблуды тянет на
отдельный лонг. Если коротко - писали десятки скриптов и делали сотни
замеров на офе с огромной выборкой, доходившей до тысяч повторов,
учитывали поправку на пинг и качество соединения, считали среднее время
кастов, медианное, считали все до сотых миллисекунд, когда сервер
работал без оверкаста и когда включал его.