Как бы вы организовали ачивки игроков, с точки зрения сервера?
Привет.
Возьмём игру, к примеру херстоун и его ачивки.
Как бы выглядела система ачивок и наград к примеру на Питоне?
Первый подход, завести большое количество полей для каждого пользователя и увеличивать их если условия пройдены, по достижению лимита ( к примеру достигнута 3 ступень побед одной фракции) переставать увеличивать это поле, привёл к 30+ полей для каждого пользователя, есть ли подход оптимальнее?
Как пример приведу такие ачивки как "создать N карт", " Серия побед одной расы", "первое распыление", " собрать всех мурлоков"
Правильно ли я Вас понял, Отдельно хранить инстанс ачивки для каждого пользователя?
Тогда сразу вопрос, как мы будем следить за шкалой какого-то прогресса, например в собирании мурлоков?
Однажды реализовал так:
- база моделей ачивок. Модель ачивки содержит имя, и информацию о том, как проверять достижение. Либо данными из сущности (брать некие каунты), либо дергать колбэк, для более сложных расчетов.
- сами ачивки, ссылка на ачивку, ссылка на юзера, дату получения и тп.
Для ваших целей там же можно хранить процент достижения ачивки, та же ачивка, но с флагом "еще не получено"
Над нечто похожим думал с пол часа назад, набросал прототипчик (ногами не пинать!)
Думаю процент не так уж и важен, ведь у меня есть цель(сколько нужно) и текущее значение, посчитать не сложно)
Вот только 1 момент мне не очень нравится, если мы завели три ачивки на победы, а после добавили следующую стадию, (для примера было 1, 20 и 50 победа, мы добавили 100) то нужно прогресс последней ачивки как-то выставить на освновании текущих максимальных значений дочерних ачивок.
з.ы вот за пол часа написанный самопальный прототип.
pastebin.com/gLz1t8Qn