Історія створення карти світу для гри "C & C Tiberium Alliances". Постмортем

    Всім привіт! У цьому пості хотів би поділитися досвідом створення і розвитку сервісу для однієї відомої онлайн ігри.
 
Життя в ньому ще поки жевріє, але, думаю, вже можна підвести остаточні підсумки.
 
Про цю гру мені стало відомо задовго до її виходу, і я зміг потрапити в число перших бета-тестерів. Від браузерної гри багато не чекав, але інтерес взяв своє. Досить швидко я знайшов адекватне російськомовне ком'юніті і вступив в один з кланів.
 
 
 
Перше питання, яке постало "де я?". Слідуючи канонам жанру, я припустив, що мені треба побудувати радар. Але його чомусь не було. Далі я з подивом виявив, що в грі взагалі не передбачена мінікарта. Що було дуже дивно, враховуючи гігантське ігровий простір. До того ж, як потім з'ясувалося, у найближчі плани розробників її створення не входило.
 
Трохи повивчавши серверне API, знайшов звідки брати потрібні мені дані — списки користувачів з їх базами. За пару годин я написав парсер на php. Труднощі виникли тільки з авторизацією. Вона була дворівнева, з хешамі і своїми заголовками, але і вона піддалася. Зліпив на коліні сторіночку, де просто розставив імена гравців абсолютним позиціонуванням, залив на безкоштовний хостинг. Пошук по мапі здійснювався засобами браузера "ctrl + f", рівно як і масштабування карти через "ctrl + mousewheel". Цим творінням я поділився зі своїм кланом. Виявилося, що карти не вистачало не тільки мені. Побачивши її, соклановцев дуже зраділи, а керівництво клану "наказало" не розповсюджуватися про карту за межами клану.
 
Наступного дня я розмістив інформацію про карту на загальному ігровому форумі. За що був вигнаний з клану, але отримав тонну позитивного фідбек від гравців. Натхненний такою реакцією, я вирішив розвивати карту далі.
 
Спочатку я спробував замінити імена гравців на маркери з html тегів, але виглядало це все моторошно при масштабування. Друга спроба — була використовувати svg, але продуктивність залишала бажати кращого. Залишався тільки кинувся, і ось тут все зашаруділо вже набагато швидше.
 
Перший реліз на канвасе виглядав так:
 
 
Після впровадження ще парочки фіч, кількість відвідувань мого ресурсу досягло десяти тисяч в день. Разом із зростанням кількості користувачів, у грі відкривали все більше і більше ігрових серверів. У той момент один сервер (ігровий світ) Парс приблизно годину. Виходило, що із зростанням їх кількості, карта кожного окремого сервера оновлювалася все рідше і рідше. Актуальність даних швидко падала, користувачі почали скаржитися.
 
Впровадження curl multisocket хоч і скоротило час парсинга одного світу вдвічі, але остаточно вирішити проблему не могло. На мою удачу, мені в личку відписався один з розробників. Вказавши на функції в коді, які відповідали за роботу з протоколом передачі даних, створенням запитів і розбору інформації для отрисовки внутріігрового ландшафту. Після декількох експериментів з мінімізації кількості запитів, час парсинга одного сервера скоротилося до 6 хвилин.
 
Окрилений такою удачею, я з подвоєною ретельністю почав пиляти нові фічі. Додав можливості малювати тактичні маневри на карті і ділитися ними, повністю міняти міняти колірну схему і кастомизировать значки. І знову все вперлося в парсер, коли кількість світів підібралася до позначки 100.
 
 
Вирішено було переписати backend повністю. За основу був узятий ZeroMQ, з'явилися менеджери авторизації, парсинга, аплоаду, відповідно набір Воркер для них + система моніторингу цієї радості. Залишилося питання де це все захостіть. Для нормальної продуктивності проекту, витрати на хостинг були б просто космічними. Пошук сервера в ігровому ком'юніті не дав бажаних результатів. Вирішив питання купивши додому нове залізо з апаратною підтримкою віртуалізації. Тим більше давно хотів з цим поколупатися. Одну виртуалку зробив собі, прокинувши туди видюху і частина юсб портів. На інших підняв систему, причому частина віртуалок була linux, частина windows. У зв'язку з особливостями реалізації Біндінга 0mq. Також були проблеми аптайма сервісу, все ж не tier 4 :), але змінивши провайдера все стабілізувалося. Розігрітий парсер з новим залізом справлявся з сотнею світів за пару хвилин.
 
Карта прийняла такий вигляд:
 
 
Паралельно з цим я почав розробку клієнта під андроїд. Взяв своє php API, портував на Джаві і розширив його, реалізував базовий функціонал. Приблизно в цей же час до розробки захотів підключитися кодер з Чикаго, чому я був немало здивований. На його плечі лягла завдання реалізувати е-mail сповіщення гравця про атаку або знищення його бази. Колега на C # написав сабскрайбер до парсеру, який відстежував всі бази всіх гравців на всіх світах.
 
Але все в одну мить припинилося. Мій "інсайдер" розповів, що ЕА порахувало проект збитковим. Їх команду розформували і розкидали по інших проектах. Розробку гри заморозили. Відповідно розвиток клієнта і сервісу також перестало бути доцільним для мертвого проекту, і я поставив на них крапку.
 
В даний момент відвідуваність моєї картки 2.5 тисячі осіб. Доходи від реклами з липня 2012 року склали 5000 баксів. Донат менше 200.
 
P.S. Поки писав статтю hetzner раптом образився, що я їм з однієї IP роблю 100кк пост запитів з добу і заливаю 5тб трафив на місяць.
 
Лібу, яку написав для роботи з 0mq, можна подивитися тут https://github.com/limitium/0MQ , якщо когось зацікавить, то оформлю ридми і зроблю пакет для композери. Нічого не тече, оре 24/7 вже 2 роки.
Морду проекту можна подивитися тут github.com / limitium / C-CTA-map-frontend цікаве тільки рендер карти.
    
Джерело: Хабрахабр

0 коментарів

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