01 декабря 2017

История Bastion Siege #3

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

В какой-то момент число активных за сутки пользователей перевалило за сотню и начало двигаться к двум сотням. Тут-то и пришли первые репорты от пользователей. Приходит по два, а то и по три сообщения вместо одного при нажатии какой либо кнопки. Или сообщение не приходит вовсе. Эта проблема бытовала значительное время и чем больше игроков становилось, тем чаще на нее жаловались. Воспроизвести баг ни я, ни кто-либо из игроков не мог, поэтому первые фиксы вносились на теоретически проблемные места. Но это не помогало раз за разом. Даже изредка начинал грешить на Telegram, но почему тогда у других все хорошо? 

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

Еще одной глобальной проблемой игры были лимиты Telegram. Нельзя вот так просто взять и разослать всем и все. Сервис заботится о своих пользователях. Да и о своих серверах тоже. Поэтому есть определенные ограничения на частоту отправки, нарушив которые сообщения переставали приходить игроку в течении нескольких секунд или минут. Опять же, когда игроков было мало, я закрывал глаза на эту проблему, если такова случалась. Советовал обратившемуся игроку не жать на все кнопки как осатонелому. Но с ростом числа игроков небольшая проблемка переросла в огромный поток жалоб от игроков. Тогда-то я понял, что откладывать поиск решения проблемы больше не получится. Решение проблемы опубликовано мною на небезызвестном Хабре под заголовком "Лимиты Telegram bot API и работа с ними на Go". Искренне надеюсь, что статья приносит людям пользу.

Конечно же, багов было намного больше. Некоторые были совсем незначительные, вроде ошибки в слове, неточности в разделе "Помощь" и в таком духе. А некоторые значительно влияли на механику. Например, после одного релиза из-за ошибки округлений появилась возможность покупать единицу ресурса бесплатно. Но, к моему счастью, опять же нашлись добрые люди, которые тут же сообщили о проблеме. 

Случалось и такое, что баг становился особенностью. Так я по невнимательности забыл запретить добавление лучников на стену и инженеров на требушет. И, если своевременно пополнять лучников и инженеров, это могло изменить ход боя. Игроки так были рады возможности хоть какого-то влияния на ход боя, что я решил оставить эту проблему до появления альтернативного участия в бою.

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

Комментариев нет:

Отправить комментарий