Як я продовжив справу Доту-ліги

Попередні частини (не за моїм авторством):
habrahabr.ru/post/316540
habrahabr.ru/post/316620

Піднесення Хоруса
Тимс був автором бота, а я був тим самим «прошаренным адміном», який допілівал його код.

Можна довго сперечатися, що кому належало, хто правий і хто винен, але факт залишається фактом — одна ліга розкололася на дві. Власник бренду say-plz і спонсор поставив мене адміном sP Dota League, а Тимс в той же момент розгорнув RIHL (Ukrainian In-House League. Між лігами була війна за гравців, без застосування хіба що ядерної зброї.

Як стався розвал з моєї точки зоруВласником домену та хостингу say-plz був менеджер команди і спонсор під ніком Матрикс. Він не знав, що відбувається на лізі і не особливо вникался в подробиці. І після того, як Тимсу були пред'явлені звинувачення в неадекватній поведінці і продажу модераторского доступу за гроші, у нього був діалог зі спонсором, в якому Тимс заявив приблизно наступне: «це моя ліга, що хочу, то і роблю». Після чого Матрикс запитує мене — чи я зможу потягнути всі без участі Тимса? Я відповідаю йому — да. Ну а потім Матрикс знімає права доступу з Тимса, зробивши мене новим СЕО.

Після того, як став адміном я, були внесені деякі зміни в політику ліги.
1. Жодних необґрунтованих банів з особистої неприязні.
2. Рівні покарання і для відомих гравців, і для новачків. Бан на 14 днів за навмисний вихід з гри.
3. Моментальний демоут (з модерів в юзери) тих, хто зловживає своїми правами — разбанивал друзів, або наприклад намагався продати воучи (доступ до ліги) за гроші.

Продовження життя в Garena
В той час у нас було два дивізіони — SP1 і SP2. На першому грали самі просунуті і скилловые гравці. З цим була проблема, тому що гравців SP1 було мало, багато хто не хотіли чекати, поки збереться гра на першому дивізіоні і йшли грати на SP2. Спочатку проблема була вирішена таким способом, перш ніж піти на сп2, треба зіграти на сп1 хоча б один раз за день. А з переїздом в IRC кімнати були об'єднані, про це буде трохи пізніше.

Бот, на відміну від звичайних ігор у першій доті, враховував усю твою статистику. І це були не тільки перемоги-поразки-окуляри, але і така річ як «стрик», тобто перемоги поспіль. І якщо 2-3 або навіть 5 перемог поспіль в доті — нормальна ситуація, 10, 20 — це вже щось з розряду геть що виходить. На нашій лізі був такий легендарний гравець Vigoss, який побив абсолютно всі рекорди, у нього було 60 (!!!) перемог поспіль.

А найцікавіше, що при перемозі над гравцем з стрік, переможцям давали бонусні очки. Всі з нетерпінням чекали моменту, коли ж Вігосс втратить корону, і це все-таки сталося.

Я навіть знайшов лог бота цієї легендарної гри тривалістю всього 23 хвилини:
Game 4629.
Scourges won-63/+63.Mode: chall 3x3 ggc,Length 23min Draw/Sent/Scou results: 0/0/4PLZ4629.
Sentinels: vigoss sahka Sp- >
Scourges: Traffic-Roger Traffic|Dark Traffic|Tunes.
Scourges got 382 BONUS points for breaking streak of vigoss; streak of sahka;


Стрик був настільки великим (+55/60 у вигосса і сашка), що навіть не показувалося його назва. В боті тимса назви були визначені лише 50, все що вище +10 називалося просто Holy Shit. Ніхто навіть уявити не міг, що у кого-то буде стрик 50+.

Розробка бота під IRC
Garena була не просто глючной, а неймовірно глючной. Наприклад, там можна було запускати одного і того ж бота в двох кімнатах, він відповідав на повідомлення і працював цілком нормально. Одного разу ліга піддалася нападу скаженого хакера з Казахстану, який якимось чином міг «ресетить» всю кімнату, у всіх вилітали ігри і траплялися дисконнекты. Це зараз якщо тебе викинуло, ти можеш просто зайти заново і почати грати, але не в першій доті. Дисконект — це все, кінець. Зазвичай гра або продовжувала йти 4х5, або ж завантажувався заздалегідь зроблений сейв.

Використовувати не зовсім надійний StealthBot (знали б ви, як Тимс прикрутив його до Garena!) і Visual Basic Script не було ніякого бажання, тому було вирішено переводити лігу на IRC, і писати бота під нього. Саме так працювала ліга IHCS, яка була еталоном на той момент. Я почав займатися улюбленою справою всіх програмістів, які одного разу намагалися розбиратися в чужому коді — ПЕРЕПИСАТИ ВСЕ З НУЛЯ, вже сам зробиш ідеально!

Отже, мені потрібно було зробити бота для IRC, якимось чином прикрутити до нього MySQL і змусити працювати на сервері Quakenet в IRC. Це був шлях, повний болю і страждань. Напевно, саме так і стають програмістами, самостійно вирішуючи якусь нову проблему, коли навіть гугл не в силах дати тобі відповідь.

Для IRC платформи я взяв Eggdrop, по дефолту в ньому не було майже нічого, але мені потрібна була лише підтримка скриптів, які писались на мові TCL. Мова була хоч і новий для мене, але досить простий, без надмірностей. Він був приємніше, ніж VBS, і розробка в цілому йшла нормально. Ось тільки Eggdrop відмовлявся компілюватися на VPS. Перемагаючи, довелося якось правити исходники, щоб змусити його працювати. Це була перемога. Мій перший IRC бот завівся і написав на каналі перші фрази.

Переїзд в IRC на сервер Quakenet
Спочатку був зроблений бот для тестгеймов. Це для тих, хто ще не мав доступу на лігу, але дуже хотів туди потрапити. Гравці заходили на канал, чекали модератора, який починає гру, а потім приймає рішення, кому дати інвайт. Зазвичай цей канал заспамливался фразами «ТГ!» і гравцям було нічим зайнятися. Надалі саме цей канал став широко відомої у вузьких колах лігою «сп3», на якій можна було грати і отримувати окуляри (нагадаю, що саме через статистики перемог-поразок гравці воліли ліги, першої доті не було ніякої вбудованої статистики взагалі). В кінці місяця серед кращих гравців проводився суперфінал, в якому можна було відразу потрапити на основну лігу. Сп3 була досить лампової, і на неї грали навіть деякі гравці з основних дивізіонів, коли не хотілося особливо напружуватися.

Потім і основний бот був переведений на платформу IRC. Замість двох окремих дивізіонів з різними чатами, було вирішено зробити один загальний чат, але з градацією гравців. Гравці SP1 підсвічувалися синім кольором, SP2 кольору не мали.

Крім цього, я значно оновив систему ролей. Замість ієрархії виду Гравець -> Хост -> Модератор -> Воучер -> Адмін, я зробив 3 гілки — гравці, модератори та воучеры. Кожен міг мати абсолютно різний доступ, і це було дуже зручно. Воучеры перестали бути «крутими модераторами», і в їх обов'язки не входило розгляд скарг, вони займалися тільки инвайтами нових гравців.

Також була покращена система розрахунку очок. В боті Тимса вважалося відношення очок твоєї команди та команди суперника, чим менше у вашій, тим більше давало в разі перемоги. Я змінив це і зробив, що враховується не твоя команда, а тільки твої окуляри. Завдяки цьому, стало простіше вилазити з низького рейтингу, і складніше займати високі місця. Надалі я додав ще одну штуку — залежність досвіду від репутації.

Про цензурах і репутаціїлізі була така штука — censure. За допомогою бота і команди .censure <нік> <причина> його міг видати будь-який гравець кому завгодно, навіть просто так. Якщо ти видаєш, і у тебе, і у мети знімаються бали репутації. Якщо ти почнеш видавати їх всім підряд — ризикуєш сам втратити її.

Репутація спочатку не впливала ні на що, її було близько 50 одиниць, і цензур знімав 3. Якщо вона закінчувалася, ти отримував бан на 3 дні, і репутація знову ставала дорівнює 50. Наступний бан був вже на 6 днів, і так далі по +3 за кожен.

Потім я ввів деякі коефіцієнти, якщо у тебе було мало репутації — кількість отриманих очок за перемогу зменшувалися аж до 40%. Гравці стали набагато ретельніше стежити за своєю поведінкою.

Хоча, і приколи з цим були теж. Була одна легендарна особистість під ніком MarcoDeLacrosso, він писав сумішшю каПСЛОКа иОБЫЧНОГОтекста і ИНОГДАБЕЗпробелов. Називав всіх школярами, ще до того як це взагалі стало вважатися образою. При цьому Марко вів себе досить адекватно, але після гри КОЖЕН вважав своїм обов'язком дати йому цензур. Коли він відлітав у бан через відсутність репутації, то чекав кілька тижнів, щоб знову почати грати. За цей час за ним вже багато встигли скучити, запитували, коли ж його разбанят.

Порівняно з ботом в Garena, що відвалювався, і ліга просто вставала, Eggdrop був надійний, як автомат Калашникова. Бот був на каналі 24 години на добу, 7 днів в тиждень. Ніхто і ніколи не міг його покласти. За невеликим винятком.

Один особливо жвавий гравець отримав бан і почав погрожувати нас покласти. І якщо айпі бота був прихований, то сайт ліги був у відкритому доступі. Хостинг мені люб'язно надав друг, тому що багато ресурсів нам не треба було. Загалом, після 10-гігабітного ДДОСа, я залишився без хостингу. Мій друг, якого просто послав хостер.

Я знайшов якийсь недорогий VPS на американському сайті, найсмішніше, що через місяць вони не стали вимагати оплати, все працювало як раніше. Так тривало цілий рік, поки вони в один момент не відрубали сервер. Я припускав, що рано чи пізно це мало статися, і просто відновив бекапи на іншому сервері.

Веб-проекти
Т. к. на лізі по суті всі команди виводилися через бота в текстовому вигляді, іноді це було незручно. Наприклад, треба подивитися всі ігри конкретного гравця, і з ким він грав. Через бота це б займало вічність — вивести список ігор, потім вивести кожну і так далі. Завдяки тому, що дані зберігалися в MySQL, було досить легко відобразити все це на сайті. Першу версію на Perl робив один з адміністраторів під ніком Tycooon.

Але після того, як я переписав бота, потрібно переписати і сайт. Tycooon взяв модний на той момент Ruby on Rails, але сайт так і не доробив. Я зрозумів, що треба братися самому. Починати вчити Rails як перший web-фреймворк (без досвіду з PHP) було набагато складніше, ніж написати IRC бота. Я ще навіщо-то дбав про юзерах з вимкненим javascript, мій код виглядав максимально жахливо. Мені було абсолютно незрозуміло, як працюють асоціації, коли писати includes :people, а коли includes :person. Але все це я успішно вирішив, сайт був запущений на радість гравцям.

На сайті була зроблена дуже зручна подача скарг, гравець міг приховати свій нік від модераторів чи інших гравців, щоб уникнути упередженого ставлення. Можна було швидко подивитися, хто з модераторів працює, а хто нічого не робить. Кожна закрита скарга зараховувалася, і модератори буквально вихоплювали їх один у одного, щоб отримати +1 в статистику.

Захід ліги
Під моїм керівництвом ліга проіснувала приблизно 4-5 років. Аж до виходу доти 2, а в ній, як відомо, статистика була вже в клієнті. Мене самого до того часу вже практично перестали цікавити ігри, я займався цим проектом, тому що мені було цікаво. Більшість гравців перейшли на другу доту, і ліга стала просто не потрібна. Це були дуже веселі і цікаві часи, і я зовсім не шкодую, що витратив на неї час.

Не знаю, як би повернулася моя доля, якби доту пройшла повз мене. У тому числі завдяки їй я зараз я Ruby on Rails розробник в одній з московських компаній, і мені дуже подобається те, чим я займаюся. На цьому я і закінчу розповідь, сподіваюся, читати було цікаво :)
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.