История запуска игры в социальных сетях

в 18:04, , рубрики: game development, unity3d, Вконтакте, издательство игр, разработка, разработка игр, социальные сети, метки: , , ,

История запуска игры в социальных сетях
Под конец весны 2013 года, я описывал историю плохого старта на Google Play. Пока с iOS заминки, решили закинуть игру в ВК и ОК. В статье я хочу поделиться особенностями запуска приложения под соц-сети, и расскажу про возникшие проблемы до и после релиза.

Особенности веб-плеерной версии

История запуска игры в социальных сетях
На этой платформе появилась возможность включить динамические тени, а не просто «бездушный» Projector, увеличить четкость текстур, а также улучшить глобальные параметры качества. Если для Android стояло «Fast», то тут можно было смело выбирать “Good”.

Еще нам понадобился футер для игры. В нем обычно размещают полезную информацию, кнопку приглашения друзей и ссылку на группу. Решил не морочится с Unity3d и сделал его прямо в HTML:
История запуска игры в социальных сетях

Подготовка серверной части

В веб-версии встал вопрос о надежном сохранении карьеры, рейтингов и платежей. Без этого приложение было бы неполноценным. Я смотрел в сторону знакомой мне связки PHP+MYSQL, которую я уже немного знал. Издатель негативно отнесся к этому решению (советовали перейти PostgreSQL), но я не послушал и делал по своему, так как мне было так проще.

Структура БД, тут хранятся все нужные данные

История запуска игры в социальных сетях

Основной файлик server.php вышел в ~300 строк, в нем описаны следующие возможности:

  • Регистрация игрока
  • Покупка и прокачка машинки
  • Покупка бензина (расходник)
  • Запись результата заезда

На этот файл игрок шлёт данные через POST и мы их пишем в БД. Не очень безопасно, но есть несколько простых проверок типа подписи через md5, которые защищают от школьников.

Ответ приходит примерно в таком виде:

{"id":"4","name":"Nolex","lvl":"7","coins":"9034","stamina":"40000","kill_zombies":"6952"}

Это JSON, для Unity3d советую использовать библиотеку JsonFx.Json.

Рейтинг – важный элемент игры, постоянно наблюдаю как игроки соревнуются там между собой, потому упомяну про скрипт rating.php. В нем было 8 запросов к БД, 4 из которых позже стали меня беспокоить.

SET @rownum:=0;
SELECT r2.`rank`, r2.`name`, r2.`points` FROM (SELECT @rownum:=@rownum+1 as rank, `salto` as `points`, `name`, `id` FROM `players` as `r1` WHERE `sn` = '1' ORDER BY `salto` DESC) as `r2` WHERE `id` = '999'

Это один из проблемных запросов определения позиции текущего игрока в выбранной категории. Когда игроков было мало, то это проходило моментально, но позже игроков стало больше, все стало тормозить и я убрал эту опцию. Сейчас, если игрок не попал в ТОП-100, то снизу просто отображаем его место как “> 100” и рядом заработанные очки. Иного решения я не смог придумать.

Позже, после релиза, появилась еще админка для игры, где я реализовал сводку последних данных, раздел статистики по всем соц-сетям, и рассылку оповещений с логированием в БД.
История запуска игры в социальных сетях

Баланс

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

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

Для этого я настроил полное логирование всех заездов. Тестеры покатались и появились данные, благодаря которым мы смогли узнать сколько в среднем игрок зарабатывает монет и сколько тратит бензина на каждом уровне. Далее мы просто урезали топливо под каждый уровень. Нужно было добиться того, чтоб уровень «сходу» не проходился, а игрока стопорило ближе к концу трассы. Это не касается первого уровня, который предназначен для завлечения игрока. Это важно.

Окно с предупреждением о малом кол-ве топлива

История запуска игры в социальных сетях

Интеграция в соц-сети

Сначала интегрировал в ВК, было легко, т-к уже не первый раз. От API мне нужно было немногое:

  • Получение персональных данных игрока
  • Приглашение друзей
  • Постинг на стену
  • Спам (рассылка)
  • Запись уровня игрока в базу соц-сети (друзям видно активность игроков при «апах»)
  • Оплата (наверное, самый ответственный пункт!)

Далее приступил к ОК, тут все сложнее. API не привычное, песочница неудобная, но быстро привыкаешь. Для запуска, нужно юридическое лицо (вот тут плюс издателя). Из особенностей в ОК можно выделить квадратную иконку (с острыми краями), название игры на русском языке в обязательном порядке и придирчивую модерацию (где-то с 5-го раза получилось ёё пройти).

Запуск игры

Статические файлы были загружены в облако к издателю (там файлик *.unity3d размером в 22 Мб, и несколько картинок). PHP+MYSQL разместил на своем слабенькой сервере, которым арендуем с напарником за 40$ / мес. Посчитав, что все в порядке, приступили к запуску.

В ВК произошло все очень быстро, нажали на кнопку проверки (процедура бесплатная, в залог берут 10 голосов). В тот же день приложение одобрили и оно попало в блок «Новые». Пошел первый траффик.
История запуска игры в социальных сетях

Сервер себя вел нормально, но не так хорошо, как хотелось. Запросы шли довольно медленно, иногда были задержки по 3 секунды, потому я напросился к своему знакомому, у которого был неплохой тарифный план на Хецнере.
Игра в топе продержалась около недели, с каждым днем она падала все ниже и ниже. В день было по 5-7к установок, потом упало до 2к.

Почти сразу я настроил рассылку оповещений и каждый день старался оповещать игроков, у которых восстановился бензин. Им приходило примерно такое сообщение:
История запуска игры в социальных сетях

Далее намечался запуск в ОК. Релиз нам назначили на 27 число, но по непонятной причине игра релизнулась и попала в «Новые» 24 июля и вот тогда серверу стало плохо от наплыва большого количества людей.

Скачек обращений к MySQL-базе

История запуска игры в социальных сетях

Таким образом нагнулся сервер моего товарища, на что он мне сказал «большое спасибо» (к слову, на сервере был 1 крупный проект, приносящий деньги). Появились тормоза и иногда выбивала ошибка «502 Bad Gateway». Такая ситуация была около суток.

Не ожидая такого поворота событий, я решил закинуть игру назад на свой сервак. Это было глупо, так как он упал через 20 минут после переезда.

Всем игрокам которые играли в эти дни и сталкивались с «лагами» я накинул по 1000 монеток и сделал рассылку. Это хорошая практика в подобных ситуациях.

В конечном счете, я переехал на сервер к издателю, где игра адекватно работает по сей день. Кстати, сервер довольно интересный, кэшируется постоянно. Правки php-файлов по sftp вступают в силу только через несколько минут. Не очень удобно, но похоже это какая-то «фишка» для оптимизации нагрузки, и надо сказать вполне удачная.

График регистраций в игре, тут видно примерно сколько трафа с ВК и ОК

История запуска игры в социальных сетях

Примерно такая же ситуация и по платежам, в ОК их больше, из чего можно сделать вывод, что там траф «пожирнее».

Немного цифр и заключение

  • Школьники нашли дырку в обучении. Можно было фармить по 10 монеток. Как говорит MySQL, один очень настойчивый мальчик проделал такую операцию 1200 раз и нафармил 12к монет.
  • На текущий момент игру установили уже более 130к человек (50% ВК / 50 ОК %).
  • Только 17% игроков дошло до последних уровней.
  • На днях в ВК отправили заявку в новые (уже платную), сняло 1к голосов, ждём.

Если подвести итог, то можно смело говорить, что нету большого смысла издавать подобную игру в соц-сетях, тут был больше спортивный интерес. В любом случае, было довольно занимательно наблюдать и влиять на весь этот процесс.

Автор: Nolex

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js