Разработка системы ежедневных заданий мобильной игры

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Разработка системы ежедневных заданий мобильной игры
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Разработка системы ежедневных заданий мобильной игры

Ежедневные задания — главный механизм ежедневного возврата в игру. Если достижения дают долгосрочные цели, то daily quests решают вопрос «зачем открыть игру сегодня». Для casual-игр с DAU менее 100k правильно реализованные ежедневки увеличивают Day-7 retention в полтора-два раза — при условии, что задания реально интересные, а не «войди в игру 3 раза».

Генерация заданий: статические vs динамические

Статические задания — фиксированный пул заданий, из которого случайно выбираются 3-5 на день. Просто в реализации, предсказуемо для игрока, но быстро приедается.

Динамические задания — генерируются на основе прогресса игрока и активности. Новичку дают «пройди 3 уровня», ветерану — «собери 500 ресурсов типа X». Сложнее в реализации, лучше retention.

Схема данных для динамической системы:

[Serializable]
public class QuestTemplate
{
    public string templateId;
    public string type;           // "complete_levels", "collect_items", "defeat_enemies"
    public int[] targetValues;    // варианты сложности: [3, 5, 10]
    public string[] targetParams; // для collect: ["wood", "stone", "gold"]
    public QuestRewardTier[] rewardTiers; // награда по сложности
    public int minPlayerLevel;
    public int maxPlayerLevel;    // -1 = без ограничения
}

[Serializable]
public class ActiveQuest
{
    public string questId;
    public string templateId;
    public string type;
    public string targetParam;
    public int targetValue;
    public int currentValue;
    public bool isCompleted;
    public bool rewardClaimed;
    public DateTime expiresAt;
}

DailyQuestManager: генерация и трекинг

public class DailyQuestManager : MonoBehaviour
{
    private const int QUEST_SLOTS = 3;
    private List<ActiveQuest> _activeQuests = new();
    private QuestDatabase _database;

    public void GenerateDailyQuests()
    {
        _activeQuests.Clear();
        var playerLevel = PlayerData.Level;
        var random = new System.Random(GetDailySeed()); // seed = дата, одинаковы для всех

        var eligibleTemplates = _database.Templates
            .Where(t => playerLevel >= t.minPlayerLevel &&
                        (t.maxPlayerLevel == -1 || playerLevel <= t.maxPlayerLevel))
            .ToList();

        var selectedTemplates = eligibleTemplates
            .OrderBy(_ => random.Next())
            .Take(QUEST_SLOTS)
            .ToList();

        foreach (var template in selectedTemplates)
        {
            var difficulty = SelectDifficulty(template, playerLevel);
            _activeQuests.Add(CreateQuestFromTemplate(template, difficulty));
        }

        SaveQuests();
    }

    private int GetDailySeed()
    {
        // Все игроки получают одинаковый набор заданий в один день
        // (или не одинаковый - зависит от дизайн-решения)
        return DateTime.UtcNow.Date.GetHashCode() ^ PlayerData.UserId.GetHashCode();
    }

    public void TrackProgress(string questType, string param, int amount)
    {
        foreach (var quest in _activeQuests.Where(q => !q.isCompleted && q.type == questType))
        {
            if (!string.IsNullOrEmpty(quest.targetParam) && quest.targetParam != param) continue;

            quest.currentValue += amount;
            if (quest.currentValue >= quest.targetValue)
            {
                quest.isCompleted = true;
                OnQuestCompleted(quest);
            }
        }
        SaveQuests();
    }
}

Интеграция в геймплей

Трекинг заданий должен быть бесшовным — игрок не думает «надо нажать кнопку учёта», он просто играет:

// В системе боёвки:
void OnEnemyDefeated(Enemy enemy)
{
    DailyQuestManager.Instance.TrackProgress("defeat_enemies", enemy.type, 1);
    AchievementsManager.Instance.TrackEvent("enemy_defeated", 1);
    // ...
}

// В системе сбора ресурсов:
void OnResourceCollected(string resourceId, int amount)
{
    DailyQuestManager.Instance.TrackProgress("collect_items", resourceId, amount);
    // ...
}

Один вызов из геймплейной системы — все задания с нужным типом обновляются автоматически.

Система наград и streak

Ежедневные задания работают лучше в паре с серией выполнения (quest streak):

// При завершении всех заданий дня
void OnAllQuestsCompleted()
{
    var streak = PlayerPrefs.GetInt("daily_quest_streak", 0);
    var lastCompletedDate = PlayerPrefs.GetString("quest_last_completed", "");
    var yesterday = DateTime.UtcNow.Date.AddDays(-1).ToString("yyyy-MM-dd");
    var today = DateTime.UtcNow.Date.ToString("yyyy-MM-dd");

    streak = (lastCompletedDate == yesterday) ? streak + 1 : 1;
    PlayerPrefs.SetInt("daily_quest_streak", streak);
    PlayerPrefs.SetString("quest_last_completed", today);

    var reward = CalculateStreakReward(streak);
    InventoryManager.Instance.AddReward(reward);

    GameAnalytics.NewDesignEvent("DailyQuests:StreakCompleted", streak);
}

На 7-й день серии выдаём особую награду. На 30-й — исключительную. Это создаёт долгосрочную цель поверх ежедневных задач.

Серверная генерация vs клиентская

Для игр без читерской угрозы — клиентская генерация проще. Для игр с реальными наградами (IAP-эквивалент) — генерация и выдача наград только через сервер (PlayFab Cloud Script). Клиент запрашивает задания, сервер возвращает сгенерированный список и верифицирует прогресс перед выдачей награды.

Что входит в работу

  • Проектирование шаблонов заданий и системы сложности
  • Реализация DailyQuestManager с генерацией и трекингом прогресса
  • Интеграция трекинга в геймплейные системы
  • Система streak с нарастающими наградами
  • Сброс заданий по расписанию (UTC midnight)
  • UI: список заданий, прогресс-бары, экран получения награды
  • Серверная генерация и валидация (PlayFab, при необходимости)

Сроки

Клиентская система с базовым набором заданий: 4–7 дней. Полная система с серверной генерацией, streak и сложным UI: 2–3 недели. Стоимость рассчитывается индивидуально.