Многие игры, созданные в наши дни, имеют собственную систему достижений, которая вознаграждает игроков/пользователей за выполнение определенных задач. Система значков здесь в stackoverflow точно такая же.
Есть некоторые проблемы, но для которых я не мог найти хороших решений.
Системы достижения должны постоянно следить за определенными событиями, думать о игре, которая предлагает от 20 до 30 достижений, например, в битве. Сервер должен будет проверить эти события (например: игрок избегал х-атак противника в этой битве или игрок шел х миль) все время.
- Как сервер может обрабатывать этот большой объем операций без замедления и, возможно, даже сбой?
Системы достижений обычно нуждаются в данных, которые используются только в основном движке игры и в любом случае от них не понадобятся, если бы не были эти неприятные достижения (подумайте, например: как часто игрок прыгал во время каждой битвы, вы не хотите хранить всю эту информацию в базе данных.). Я имею в виду, что в некоторых случаях единственным способом добавления достижения было бы добавление кода, который проверяет его текущее состояние на ядро игры, и обычно это очень плохая идея.
-
Как системы достижений взаимодействуют с ядром игры, которая содержит более позднюю ненужную информацию? (см. примеры выше)
-
Как они отделены от ядра игры?
Мои примеры могут показаться "безвредными", но подумайте о 1000+ достижениях, доступных в настоящее время в World of Warcraft, и о многих, много игроков онлайн в то же время, например.