Начало здесь: Как я Дота-лигу открывал. Часть 1

Конец 2007-го, снова зима, и снова время развиваться. Мы успешно перенесли лигу из умирающего Battle.Net в восходящий Good Game Client (позднее — Garena). Новые игроки приходят каждый день, лига растёт, всех радует отсутствие читеров, отличный пинг и лёгкий процесс начала игры. Игроки зазывали своих друзей в эту платформу из Battle.net, из локальных сетей и пиратских серверов — все шли в Garena. Холодный декабрь побуждал людей оставаться дома и играть. Постоянный онлайн игроков Warcraft на этой платформе в СНГ-секторе вырос с 1000 до 10 000 игроков. Очень скоро, Garena стояла в каждом компьютерном клубе, а онлайн-турниры проводились только на ней.
Всё отлично, и у нас был единственный и самый крутой бот на этой планете платформе…


Good Game Client


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

— где бы найти денег и спонсоров? как их найти, и где искать?
— куда дальше развивать лигу?

Простая и гениальная идея пришла довольно быстро — надо объединиться с самой лучшей и узнаваемой командой, и выпускать лигу от их имени! Им — пиар + спонсоры точно обрадуются, а нам — подарки от спонсоров, чтобы награждать победителей! Выбор сразу пал на лучшую на тот момент команду профессиональных игроков с дерзким названием SAY-PLZ, тем более она была из Москвы. Общий язык нашли, одобрение получили, лигу переименовали. Менеджер этой команды пообещал выбивать каждый сезон (3 месяца) по 1й видеокарте в приз самому лучшему игроку лиги. Это было лучше, чем ничего, и мы согласились. Тем более, они предоставили свой сайт как площадку, для ведения правил игры, разрешения споров и отбора игроков.

Лига получила новое дыхание, игроки почувствовали новый азарт — не только виртуальные очки, но и шанс выиграть лучшую на тот момент видеокарту от спонсора!

Конкуренция


Как полноценная лига, мы были в Garena одни. Тут не было конкурентов. Бот был только у нас. Это одновременно и хорошо (все лучшие игроки у нас), и плохо (без конкуренции сложно сказать — у тебя такой онлайн это хорошо, нормально или может быть и лучше?). Со временем, наши старые друзья из другой лиги попросили нас дать им такого-же бота, чтобы они переехали, наконец, из Battle.Net в Garena. С одной стороны это означало бы, что у нас станет меньше игроков. С другой стороны, это был бы интересный вызов — будет с кем соперничать! В итоге после недельки размышлений я дал им свою программу, под честное слово никому больше не давать, адаптировал их бота под Garena, и так у нас появился конкурент :). Забегая вперед скажу, что слово они своё сдержали, такой-же бот нигде не появлялся, они его никому не давали. Часть игроков начала перетекать между двумя лигами — если игрока забанили на пару часов на одной(например за плохое поведение), то он мог пойти играть на второй, и вернуться обратно. Мы ничего не стали с этим делать, и соблюдали нейтралитет по отношению друг к другу — они не лезли к нам, а мы не лезли к ним, каждый делает что хочет, и никто не говорит другому что надо делать. Так можно было брать только самое лучшее друг у друга.

Здравствуй, Garena !


Неожиданно для всех, платформу GGC переименовывают в Garena (от Global ARENA) и объявляют масштабный ребрендинг:


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

Пришло время поковырять наконец-то Garen'у, и посмотреть что можно из неё вытянуть. К сожалению, ассемблер я не знал от слова совсем, поэтому пытался как-то открыть служебные файлы, поискать какие-нибудь ресурсы платформы. Так мне попался на глаза некий файл RoomsEN.dat. На поверку оказался обычным файлом базы данных SQLITE. Используя программу SQLite Expert, я открыл файл и обнаружил интересные таблицы: [Rooms], [Servers]

В таблице Rooms я смог найти свою комнату Say-Plz Dota League Room. У этой комнаты был свой числовой номер, а в соседней колонке server_id, принимавшее значение от 1 до 6.

Посмотрев таблицу Servers, я обнаружил эти самые 6 серверов:


Один из них был сервером моей комнаты и нескольких (сотен) других комнат. Т.е. все комнаты Garen'ы тогда располагались всего на 6 серверах.

Реверс-инжиниринг Garena


Копаем дальше — почему в качестве IP-адреса используется целое число? Где привычные глазу 86.60.90.164? Я провёл не один вечер, поняв, что это число (например 243037643) нужно представить в шестнадцатеричном виде (hex): 0E7C75CB , а затем зеркально развернуть его: CB.75.7C.0E и представить их в десятичном виде: 203.117.124.14. Вуаля, мы наконец-то поняли как можно конвертировать IP в целое и обратно(честное слово, я гуглил, но видимо подписка на гугл закончилась). Поэтому мы берём наш 127.0.0.1, представляем в HEX: 7F000001, разворачиваем его задом-на-перед: 0100007F , получаем 16777343, подставляем в Базу данных, запускаем клиент и вуаля! Garena пытается соединиться с локальным 127.0.0.1, это соединение принимает моя программа на Autoit, транслирует весь трафик на настоящий сервер Garena и попутно сохраняет его для анализа. Наконец-то я получил загадочный трафик, который клиент отправлял на сервер!

Теперь я начал получать непонятные данные в бинарном виде. Для удоства представлял их в HEX, но всё равно не мог ничего понять. Меня охватило желание разобраться в этом протоколе, что же шлёт клиент! Для начала я записал команду отправки слова «Test» в общий чат, перехватил отправляемые данные и сохранил их. Далее я попытался сымитировать отправку этого слова в чат, отправил и… не увидел результата — в общем чате моё сообщение не виднелось. Как выяснилось позднее, сообщение увидели все пользователи, кроме меня самого — клиент Garena не отображает отправленные собою же сообщения, а показывает их сам в момент отправки.

Уже было что-то. Значит, в отправляемой строке были зашифрованные данные! В общем и целом я провел 23 часа, без перерыва на сон, чтобы разобраться в этом протоколе, и наконец-то расколол этот орешек, используя AutoIt, калькулятор и бумагу с ручкой! Раньше я ничего подобного не делал, и никогда не изучал сетевые протоколы, поэтому всё было для меня в новинку.

Примерный состав пакета
4 байта — длина пакета
2 байта — тип данных (вход в комнату, выход из комнаты, новое сообщение
остальные байты — полезная нагрузка, в зависимости от типа данных. Если это сообщение в чат, то тут был тип сообщения — публичное, личное, жирным. Далее шёл ID пользователя, и текст сообщения.

Один знакомый потом сказал, что протокол почти полностью повторяет протокол в Lineage II.

Был уже обед, а я не спал больше суток. Пора было лечь спать, и хорошенько выспаться, я чувствовал, что стоял на пороге нового прорыва!

Спал мало — так сильно было желание написать новую версию бота, которая работала бы уже без самого клиента Garena, а общалась бы с сервером напрямую. Еще 1 день, и у меня уже был рабочий прототип. Через 2 дня я перевёл бота на новую версию — клиент Garena уже не требовался, бот стал отвечать на сообщения практически мгновенно (раньше ответ занимал 2 секунды). Я не оставил попыток изучения протокола, и оказалось, что серверы Garena совсем не проверяют, от кого пришли данные. Вообще. Абсолютно. Можно было отправить пакет, что пользователь HeLRa написал в чат: «Hello». А можно было отправить в чат, что пользователь изменил иконку у своего ника (всего было доступно около 64 разных иконок на выбор). Это натолкнуло меня на мысль разукрасить чат, чтобы пометить игроков по их рангу, или уровню доступа. Администраторы были с самыми крутыми иконками, модераторы по проще, а все остальные — с иконкой минотавра.


Все пользователи были в шоке, какой «беспредел» творится в нашей комнате(канале), но это был наш канал, и в целом всех всё устраивало. Примерно через неделю, к нам зачастили какие-то люди с голубыми никами — оказалось, это глобальные администраторы Garena. Они заходили, тихонько ворчали, чего это мы тут беспредельничаем, но т.к. такой «взлом» был лишь в одной комнате(а не по всей гарене), то последствий не возникло, а через пару недель они этот баг пофиксили, вместе с уязвимостью отправки сообщения от имени другого пользователя.

Вступление в лигу


Уже март 2008, наша лига имеет самого крутого бота, у нас постоянно проходят игры на очень высоком уровне, а на форуме висит куча Vouch-request'ов(запросов на вступление в лигу).

Раньше, чтобы попасть к нам на лигу, игрок должен был разместить своё короткое резюме — в каких командах он играл, как долго играет, кто любимый герой, и приложить запись со своей самой лучшей игры, где он потел и старался. Через какое-то время, его заявку рассматривал какой-нибудь модератор и выносил решение — стоит он нашей лиги, или нет. Со временем, заявок стало так много, что модераторы уже не справлялись, а набирать больше модераторов — значит терять контроль над всем этим. Поэтому мы изменили схему, и теперь, чтобы попасть на лигу, нужно было собраться в определенный день в определенное время, и сразиться с другими желающими попасть на лигу(отборы, test game). За всем этим в прямом эфире наблюдал модератор, и отмечал самых полезных игроков, которым стоит дать приглашение.

Эта схема позволила модератору вместо просмотра часового реплея, за один раз рассматривать сразу 10 кандидатур, и приглашать по 1-3 человека(а иногда и никого). Отмечалось как персональный навык игры, так и игра в команде: иногда какой-то игрок начинал возникать: «как же так, я наубивал больше всех, у меня оказался самый сильный и раскачанный герой, а вы мне не дали приглашение!», на что ему отвечали, что он всю игру спокойно раскачивал героя в сторонке, в то время как вся оставшаяся команда кое-как отбивалась от нападений противника, и после 30 минут спокойной раскачки — этот герой естественно был самым сильным, и если бы не сильная команда, то они бы проиграли намного раньше.

Набор в лигу напоминал вступление в Бойцовский клуб — люди должны были доказать, что достойны :)

Как еще иногда отбирали
Иногда модераторы добавляли игроков без тест-игры, особенно когда их лучшие друзья клялись, что этот игрок достоен и ручается за него!

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

Когда ты самый главный на лиге, и ты очень молодой, а сотни людей просятся на лигу, а другая просит тебя дать им админа, то волей-неволей у тебя появляется звёздная болезнь. Она поразила и меня. Стыдно об этом писать, но без этой стороны медали, вся история получится не полной: Я стал самым злым и беспощадным админом. Когда я садился поиграть в своей лиге, то со мной боялись играть. Если кто-то в команде тупил(нарочно, или нет), то я мог прямо во время игры выписать ему бан(на время), а то и выгнать с лиги! Просто, что он не оказался в нужное время в нужном месте. Со временем, дошло даже до того, что если я вступал в игру, то большинство вступивших сразу отменяли свою регистрацию, и никто не хотел зайти, потому-что боялись зайти. Я стал немного хитрее и стал использовать другие аккаунты, под которыми меня никто не знал, но всё равно выписывал баны. С одной стороны, я создавал самую крутую лигу, а с другой, сам же её и губил…

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

Про деньги


Со временем, меня всё чаще посещала мысль: Как мне можно заработать на этом? Развращать лигу «разбаниванием за деньги», или «приглашение за деньги» я не хотел, поэтому искал новые возможности.

Спонсоры были довольно скудные, и давали только видеокарту раз в 3 месяца.

В платформе Garena можно было прокачать свой аккаунт, купив «Gold Account» — твой ник становился оранжевым(золотым), и ты мог заходить почти в любую комнату, даже если она заполнена. Вот только купить его можно было только через PayPal. В то время у многих небыло даже пластиковых карт, а из платежных систем самой популярной была WebMoney (Яндекс.деньги только-только появлялись, поэтому не в счёт). Купить Gold Account за WebMoney было нельзя, и так я стал посредником — покупал Gold Account'ы в Garena, и продавал их за WebMoney с наценкой. Я написал второго бота, который ходил по всем СНГ-комнатам в Garena и давал короткую рекламу о продаже Gold Account'ов. В месяц удавалось заработать до 2-х тысяч рублей. Разница между 0 и 2000 была огромной, и я почувствовал, что могу «легко зарабатывать в интернете». Время от времени мне писали люди, желающие купить Gold Account, но сомневающиеся — можно ли мне доверять. Самым весомым моим аргументом было то, что я главный администратор дота-лиги, и продаю аккаунты давно. Люди доверяли, покупали, приходили еще.

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

Новый поставщик


Уже во всю идёт лето 2008го года, мне пишет какой-то парниша, который может мне продавать Gold Account'ы в 2 раза дешевле. Я не стал задавать вопросы, и просто начал у него их закупать, увеличив свою прибыль. Как выяснилось позднее, он закупал краденные пластиковые карты на хакерских форумах, и закупал на них Gold Account'ы. И он такой был не один. Администрация Garena приняла меры, и запретила всем пользователям, кроме модераторов секций garena рассылать предметы. Теперь ни я, ни он, никто не мог отправлять предметы, и лавочка прикрылась (на какое-то время). К счастью, у моего знакомого был аккаунт модератора секции garena, так-что он мог отправлять предметы, и я начал закупать и отправлять GoldAcc уже через него.

Через какое-то время, мне снова пишет этот самый поставщик, который неплохо нажился на этих махинациях, и предложил мне сделку, от которой я не смог отказаться — он купит у меня доступы модератора лиги за довольно внушительную для тех времён деньги

сколько?
достаточно много для студента, но очень мало для взрослого человека.

Мне очень сложно это объяснить, но у нас была «лига джентельменов», у нас не было принято что-то продавать, например продавать доступы на лигу, или повышения. У нас был принцип — "если достоин — будешь с нами".

Но тут я пошел на нарушение этого негласного принципа, и часть модераторов и администраторов стали осуждать этот поступок, мол «продался». Со своей же стороны я считал себя имеющим полное право раздавать доступы тем людям, кому считал нужным, а учитывая свой вклад, который я внёс в лигу, создав её с нуля, я не считал нужным перед кем-то отчитываться. Это было началом конца…

Присмотри за сервером


В то время я помимо учёбы и лиги, успевал подрабатывать приходящим админом в небольшой гос.конторе. У них был безлимитный интернет и небольшой сервачок, на котором я по соседству и разместил своего бота. Успешно закрыв сессию, я уехал на каникулы в свои родные края, в которых с интернетом было всё очень плохо. Чтобы лига жила, я попросил самого технически-прошаренного админа B присматривать за ботами, и перезапускать их если что.

Лето прошло, я вернулся в Москву. За это время бот немного преобразился — прошаренный админ B разобрался в моём коде, всё понял и даже его улучшил, сделав несколько давно ожидаемых вещей.

— «Ну что-ж, отлично!» — подумал я, и обрадовался, что у меня теперь есть помощник.

Начало конца


Наступил октябрь 2008 года. Противоречия в лиге достигли своего апогея, администраторы разбились на 2 лагеря: «Он имеет полное право распоряжаться своей лигой как хочет!», и: «Мы тоже вносили свой вклад в развитие лиги, и имеем такое же право на управление лигой!»

В этот критический момент, вдруг объявился менеджер профессиональной команды (которая распалась еще полгода назад). Он был и оставался владельцем сайта с форумом на котором всё крутилось. Ему пожаловался один недовольный админ B, и предъявил, в чём я его не устраиваю:

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

Менеджер пишет эти претензии мне в ICQ, спрашивает — «что за дела? что ты творишь на моей лиге?». Очень странно было это читать от человека, который впервые в жизни объявился на лиге, и сказал, что это его лига.

Он требовал:

1. снять полномочия с модератора — «ок, сделаем»
2. быть поадекватнее — «конечно, не вопрос, но я баню только самых плохих игроков! честное слово!»
3. Убрать админа А. — а вот этого я сделать не мог. Этот админ был одним из двух людей, которые были со мной с самого начала у истоков. Именно с ним я проговаривал и придумывал, как должна работать лига. Он сидел со мной в безлюдном чате в 3 часа ночи, ожидая, когда я допишу новый код, и тестируя его вместе со мной. Он был мне не просто другом, а товарищем. Я не мог снять с него доступы и бросить. Да и какая вообще разница, что у неактивного пользователя админские права? Я пошел на принцип, и отказался выполнять этот пункт.

Переворот


Дальнейшие события разворачивались очень быстро. Сначала меня забанили на нашем же канале в Garena. Затем забанили моего бота, а админ B имея доступы на сервер, всегда имел у себя последнюю версию бота. База данных была на сервере, которым также владел менеджер, поэтому пользователи ничего не почувствовали. На форуме меня забанили еще через 15 минут. Я остался без доступов к каналу, без доступа к сайту, без свежей базы данных пользователей. Единственная площадка, где я мог вести спор — относительно независимая продота. Там начались дичайшие разборки, грязь, кровь и помидоры.

Те администраторы, которые начали бунтовать против переворота, лишились админства очень быстро. Некоторые модераторы, поддержавшие переворот получили долгожданное повышение в админы. Власть перешла в другие руки.

Я считал, что правда на моей стороне. А раз правда за мной — то народ поймёт, что меня кинули, и не будет там играть. Я был слишком наивен. Я не знал, что можно используя хитрые слова и длинный язык перевернуть правду с ног на голову, выставить меня в грязи и выставить виноватым. Некогда молчаливые модераторы высказали мне всё, что обо мне думают, не рискуя лишиться доступов. Единственный пункт, с которым я был согласен — это то, что я неадекватно банил людей, но и это был не повод отбирать у меня моё детище, моё творение, годы моей жизни!

Спор на независимой площадке ни к чему не привёл. Администраторы Garena старались не вмешиваться активно в конфликт, но могли передать мне права на комнату, если я докажу, что я владелец бота. Им достаточно было, чтобы бот произнёс в чат: Бот написал Tims. К сожалению, админы Garena подключились слишком поздно, я уже потерял всякую власть, а все игроки были настроены против меня, и мне даже не хотелось возвращать себе лигу. Отныне у корабля новый капитан!

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

Что там про судьбу?


Это был очень тяжелый период в моей жизни. Но я ведь парень предприимчивый, верно?
Смотря из будущего в прошлое могу сказать, что эти события развязали мне руки, освободили меня от тяжелой ноши следить постоянно за ботами, за лигой, за админами и за игроками, и позволили заняться наконец-то сайтостроением, до которого у меня так и не доходили руки. Только несколькими годами после я понял, что этот переворот позитивно отразился на моей жизни, чем если бы он не происходил. Как жаль, что в тот момент я этого не понимал — я сэкономил бы себе кучу нервов.
Через месяц я собрался с силами, и сделал новый амбициозный проект, там же — в Garena.

Продолжение следует…

PS: Много лет спустя, я списался с админом B, мы друг друга простили, а я его даже поблагодарил за всё это.
Поделиться с друзьями
-->

Комментарии (28)


  1. PapaBubaDiop
    01.12.2016 20:34
    +8

    Я ваще не в теме, но читать интересно.


    1. slovak
      01.12.2016 22:59
      +3

      А я краем зацепил — прочитал взахлеб!

      Когда появилась гарена — уже не играл, наблюдал, как играют друзья.


  1. fessoga5
    01.12.2016 21:33
    +4

    А я вообще в теме, сидел в третьей комнате пока гарена не начала нагибаться. Потом был iccup


  1. Nayon
    01.12.2016 21:46
    +1

    Виза, спасибо за этот пост, прям выдавил воспоминания, которые я уже давно позабыл.

    Сразу вспомнил как какой-то недовольный игрок, которому я после 3-х игр поставил 0 очков затаил на меня злобу.
    И когда я, решив воспользоваться данной мне властью — просто без игр через бота проставил своему другу нужное количество очков, чтобы попасть в сп2 кажется, этот обиженный игрок заскриншотил это дело и зарепортил. После чего я потерял роль мастера-приемщика :D

    Этот маленький случай стал для меня тогда большим уроком. Уже тогда я понял, что мне надо сильно работать над собой и что имея даже малейшие рычаги управления — я теряю контроль и иду на поводу самых низменных потребностей вроде «желания народного признания».


    1. TimsTims
      01.12.2016 21:58
      +2

      Виза был после меня :) все эти истории до него


      1. Nayon
        01.12.2016 22:35
        +2

        неловко вышло :D

        Viza — это админ B? Или даркер админ B?

        Я вообще не в курсе ваших скандалов, интриг и расследований)


        1. TimsTims
          01.12.2016 22:45
          +1

          Суть статьи не столько в скандалах, сколько о своих историях переживаний и преодолении трудностей.
          А имена, люди, лица — дело десятое, поэтому стараюсь писать без конкретных имён и ников.


        1. Vizakenjack
          02.12.2016 01:17

          Всё что было в IRC — уже я


  1. Kadmor
    01.12.2016 21:46
    +2

    Санта-барбара какаято)


    1. TimsTims
      01.12.2016 22:05
      +5

      Скандалов, интриг и расследований было гораздо больше, но из пришлось оставить за кадром, чтобы не перегружать статьи лишней информацией. Например, был бойкот одного модератора из Питера, грозившего что если его не повысят до админов, то с лиги уйдут все игроки Питера. Мы решили не вести переговоров с террористами и забанили его. Игроки никуда не уходили )))


      1. TimsTims
        02.12.2016 12:02

        А еще со времен Battle.Net'а был один интересный человек из Румынии. Он был никем. Он не умел кодить, он плохо играл в доту, но у него были большие амбиции. Он мечатал сделать свою закрытую дота-лигу в Румынии. Он много раз просил меня подарить ему бота, просил научить написать такого бота, просил бота у наших конкурентов-соотечественников, через полгода у него откуда-то появился лига-бот в Battle.net. Оказалось, что он отправил руководителю лиги-конкурента ссылку на картинку, через которую залил ему трояна, и так он смог скачать себе копию бота у наших конкурентов.
        Казалось бы можно его забыть, но он вслед за всеми перебрался в Garena, и открыл лигу там. Каким-то образом он и там смог открыть бота и вести какую-никакую румынскую лигу. Амбиции его не оставили, он добился покровительства администрации Garena, и ему дали высокие уровни доступа в Garena, он стал румынским представителем Garena, и стал довольно известным румыном в Garena))). Больше я о нём ничего не слышал


  1. QtRoS
    02.12.2016 00:40
    +1

    Спасибо за статью, было очень интересно почитать… Я видел и GGC, и Garena, много времени там провел, видел каких-то ботов, может даже Вашего, но тогда был молод и от программирования далек :)


    1. QtRoS
      02.12.2016 00:48

      UPD О, еще что вспомнил — для сайта GoodGame.ru некто делал похожую на Garena программу для организации игр по WarCraft III. Вроде бы название как-то с пандами было связано… До беты дошла разработка, но в «продакшн» не вышла, как я знаю. Я тогда вызвался помочь, но толков было практически ноль, разве что глупые вопросы «А как делать программы?» :) Помнится, на WxWidgets был UI, а пока я гуглил по фреймворку информацию, то и дело попадался Qt, и вот уже спустя некоторое время вернувшись к нему неплохо подрос по навыкам… Ну ладно, это лирика. Может быть тот умелец найдется на Хабре? Отзовись, было бы интересно пообщаться спустя столько времени.


  1. scronheim
    02.12.2016 08:37
    +2

    Прочитал взахлёб. Автор, спасибо за интересную историю!


  1. HexaByte
    02.12.2016 08:46

    "«взлом» был лишь в одной комнате" — не совсем так. Я в свое время вдоволь наигрался с этой фишкой с чатом)
    Для перехвата и подмены пакетов использовал WPE Pro)) очень много подставы для любителей побеседовать в общем чате. алсо была возможность менять имя в варкрафте)


  1. MINYSMOAL
    02.12.2016 11:27

    Почему кстати не думали сделать в те времена что-то по типу iccup?
    Сам сначала играл в ггц, потом друзья показали iccup(сезон2) и ггц был забыт как страшный сон.


    1. TimsTims
      02.12.2016 11:35

      iccup — замечательный проект, но он появился гораздо позже, и стал возможным, когда распространились Хост-боты, а народ устал от гарены. На тот момент хостботы были редкостью. Также, сказался недостаток знаний и опыта — хост боты и сервер PVPGN написаны на C++, которым я не владел.

      Самым правильным и доступным решением было — создавать лигу на сайте, чтобы можно было начать игру и найти игроков через сайт, но времени на эту реализацию не хватило, мы в гарене просидели всего 1-2 года :)


      1. MINYSMOAL
        02.12.2016 12:07

        Помню была платформа Dotalicious Gaming. Там вроде как похожая реализация была которую вы описали. Сначала на сайте рума заполнялась и только потом происходил автоматический запуск варкрафта с игрой. Позиционировали они себя скорее как лигу для серьезных игроков по сравнению с тем же iccup, на котором уровень игры стал падать.
        Но не взлетело что-то. Все-таки на икапе было и удобнее как-то, игра стартовалась быстрее т.к. игроков было больше, да и правила были не такими жесткими. Думаю, в любом случае вам нужно было в итоге перейти от лиги к «платформе для всех» для монетизации и расширения. :)


  1. sh1RoKen
    02.12.2016 12:13
    +1

    Спасибо за статью! С ностальгией вспомнил времена SP и MYM лиг. На тот момент это был единственный способ поиграть в хоть как-то адекватную и соревновательную доту. Не думал, что за этими проектами такая серьезная история.


  1. ImLoaD
    02.12.2016 13:25

    Безумно интересно. Спасибо


  1. EkaterinaSava
    02.12.2016 15:33
    +1

    Спасибо за статьи! Я как бывший модератор 2 и 3 Russia High Lvl Room читала со слезой на глазах и приятными воспоминаниями о тех днях :)


  1. ansaril3
    02.12.2016 19:31
    -2

    Классная статья!
    От одной лишь картинки с заголовка сжалось сердце и появилось чувство ностальгии :)

    Сколько счастливых часов было проведено за этой игрой…
    image


  1. anetto
    04.12.2016 19:46
    +1

    Мне, как давнему любителю скриптовых игр в Warcraft 3 (в том числе ранних версий доты), было бы крайне интересно прочитать немного шире про техническую часть.
    С чего начинал good game client, если там не было хост-ботов? Игры можно было начать, только если появлялся хост-игрок?
    Как концептуально устроены хост-боты? Ведь хост-игрок занимает слот. Плюс эмулировать много таких — ресурсоёмкая задача.
    Известно ли вам, как сейчас дела обстоят с хост-ботами? Я видел ботов сразу на несколько площадок, где совместно можно играть из iccup, garena и других, неизвестных мне клиентов.
    Какое железо требуется для запуска хост-бота? А сотни?


    1. mayorovp
      04.12.2016 20:18
      +1

      Хост-бот не делает никаких сложных вычислений, он просто пересылает данные от одного клиента к другому.


      Протокол в варике устроен так, что по сети ходят не игровое состояние — а команды, отдаваемые игроками. А само игровое состояние клиенты рассчитывают самостоятельно. Поэтому хост-бот требует намного меньше ресурсов, чем обычный варик.


      Хост-игрок на боте занимает слот только в лобби. Перед стартом игры (или если набралось 12 игроков) он посылает всем клиентам сообщение что он отключился, поэтому в самой игре он участия не принимает. Хост-бот занимается только пересылкой пакетов.


      Что же до good game client — там просто в варик встроили простой vpn-клиент без шифрования.


    1. TimsTims
      05.12.2016 10:21

      > С чего начинал good game client, если там не было хост-ботов?
      Изначально он задумывался как площадка для игр в стандартный Warcraft 3 TFT, на развитие. В то время в Warcraft только так и играли, а дота только начала появляться. Этот клиент позволял игрокам создавать прямые udp-тоннели между друг другом, как это примерно делал Skype(но без upnp). Таким образом, необходимость в белом IP отпадает, главное возможность установить туннели.
      Пользователь anetto немного лукавит, упоминая VPN — там VPN'ом и не пахнет(нету ни отдельного интерфейса, ни маршрутизации, а только обеспечение потребностей игры).

      > Как концептуально устроены хост-боты?
      anetto правильно сказал, что хостбот передаёт только команды пользователей, и текущее «время игры». Клиенты на местах сами рассчитывают что произошло, какой юнит где должен оказаться итд.

      > Ведь хост-игрок занимает слот
      Хостбот вообще не занимает места, он чисто виртуальный и невидимый, а в чат игры пишет от имени любого пользователя. т.е. игра может быть создана с 0 из 10 игроков(без обязательного хост-игрока).

      > Я видел ботов сразу на несколько площадок, где совместно можно играть из iccup, garena и других, неизвестных мне клиентов.
      Хостботы (2010 года) (мы говорим про Ghost Bot) позволяли коннектиться как к официальному Bnet, так и сразу к нескольким PVPGN-серверам, или локальной сетью. Механика такая: когда кто-то создаёт игру в Bnet, или в PVPGN, или даже в Локальной сети, то чтобы подключиться в игру — нужно просто знать IP-адрес и порт (обычно 6112, но может меняться в настройках игры). Таким образом, список игр в Battle.Net и PVPGN это не более, чем список ip-адресов и портов, куда надо цепляться. Это могут быть ip из локальной сети, или интернета, самому клиенту Warcraft это без разницы, он просто заходит. Таким образом, один и тот же ip:port могли «спамиться» на разных серверах — как на Bnet, так и на pvpgn и garena, игроки просто туда заходили.

      Еще одна интересная механика у Ghost бота была — auto-reconnect tool. Как известно, Warcraft 3 был создан очень давно, и в нём не доделали нормально процедуру переподключения к игре, и это была проблема. Создатель Ghost сделал еще одну тулзу — она подменяла все списки ip:port в battle.net на свои локальные 127.0.0.1:port, и пускала трафик через себя. Если удалённый хост был запущен на Ghost бот, то при разрыве соединения — эта тулза пыталась переподключиться к серверу, в то же время поддерживая соединение с клиентом Warcraft, чтобы тот не рвал соединение, а пытался переподключиться. Эта тулза также используется на iccup.

      > Какое железо требуется для запуска хост-бота?
      Т.к. эта прога передаёт (ретранслирует) только команды игроков, и время игры, а не высчитывает всех персонажей или их здоровье, то железо требуется простое. Самое главное, на чём нужно было сосредоточиться — это пинг.


  1. MilleresOfficial
    04.12.2016 19:46
    +1

    Очень классные статьи. Сам как дотер читал их на одном дыхании. Готов дальше и дальше читать подобные статьи. Спасибо.


  1. mexahuk61
    05.12.2016 09:49

    Ничего не понял, что за боты такие. Но читать было чертовски интересно.


  1. mDwka
    05.12.2016 13:53
    -1

    Спасибо Тимсу за код, расширил свои знания, когда он как то мне скинул код бота.
    Ток вот не понял, зачем он в батлнете из этой статьи с другом в 3 часа ночи тестили бота.
    Когда я писал своего бота, было удобней его тестить на PvPGN сервере который стоял прямо на домашней машине. Запуская сразу 20 стелсботов которые имитируют пользователей на канале. В гарену правда я не импортировал бота, так как время доты умирало уже на тот момент, что она сейчас и сделала, ведь лига легенд лучшая игра галактики. :buba: 00)00 сорян за запятые бесят они в русском языке после инглиша.