Как организовать ачивки для пользователей сайта?

Здравствуйте.
Пытаюсь сделать сайт, на котором администратор добавлял бы различные ачивки по игре DOTA2, а пользователи бы пытались их выполнить, причем проверка проводится автоматически. Вопрос в том как организовать хранение ачивок?
Единственное что мне пришло в голову, это хранить человеко-понятное описание ачивки и некоторую строку, в которой как нибудь закодировать предикат выполнимости ачивки, например:
Описание: выиграть игру раньше 20 минут с показателем GPM > 250.
Строка-предикат: "duration>20&GPM>250&winer"

Когда пользователь нажимает кнопку 'Выполнить', сервер парсит строку и, используя инфу об игре пользователя вычисляет предикат.
Вопросы:
1. Как лучше закодировать строку? Если я её закодирую так, как в примере, то придётся писать парсер (или как бы интерпретатор) для вычисления предиката. Или можно например сразу писать питоновский код в строке, чтобы интерпретатор питона сам её выполнил, как вы думаете?
2. Может быть есть еще какой нибудь способ это организовать?
3. Просто покритикуйте идею, если ничего больше в голову не пришло =)
Заранее спасибо!
  • Вопрос задан
  • 3200 просмотров
Пригласить эксперта
Ответы на вопрос 2
@kazhuravlev
питоновский код - не ок (пользователь может там прописать что угодно и нанести вред)
зато ты можешь придумать некоторый формат хранения таких данных на основе существующих структур. напрмиер можешь в некоторый JSON собрать хэш, и дальше разбирать ег она сервере
{
    'duration': {
        'greater_than': 20
    },
    'GPM': {
        'greater_than': 250    
} 
}
Ответ написан
FeNUMe
@FeNUMe
Хранить нужно в таком формате, в котором потом будет проще всего проверить, если нет никаких дополнительных требований. В самом простом случае достаточно обычного словаря с условиями и функции проверки. Передаете в функцию результаты боя и нужные словари с ачивками, в цикле проходите по словарю и сравниваете. Не забывая пропускать итерации где сразу ясно что ачивка не выполнена(если условий несколько и первое же провалено, то смысла проверять остальные нет - переходим к следующей ачивке).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы