2026-10-12 23:54:03 +03:00
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
// Всё, что сохраняется в progress.json (отдельно от save.json с ресурсами и зданиями).
|
|
|
|
|
// JsonUtility умеет: числа, строки, bool, массивы, List<> из [Serializable]-классов.
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class MailItem
|
|
|
|
|
{
|
|
|
|
|
public int id;
|
|
|
|
|
public string title;
|
|
|
|
|
public string body;
|
|
|
|
|
public long sentTicks;
|
|
|
|
|
public bool read;
|
|
|
|
|
public bool claimed;
|
|
|
|
|
public List<RewardItem> rewards = new List<RewardItem>();
|
|
|
|
|
public bool HasRewards { get { return rewards != null && rewards.Count > 0; } }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class TrainingOrder
|
|
|
|
|
{
|
|
|
|
|
public int troopIndex;
|
|
|
|
|
public int count;
|
|
|
|
|
public long startTicks;
|
|
|
|
|
public long endTicks;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class ArenaOpponent
|
|
|
|
|
{
|
|
|
|
|
public string name;
|
|
|
|
|
public int power;
|
|
|
|
|
public int rating;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class ProgressData
|
|
|
|
|
{
|
|
|
|
|
// --- Профиль ---
|
|
|
|
|
public string playerName = "Командир";
|
|
|
|
|
public string playerId = "";
|
|
|
|
|
public int avatarIndex = 0;
|
|
|
|
|
public int level = 1;
|
|
|
|
|
public int xp = 0;
|
|
|
|
|
public long firstLaunchTicks = 0;
|
|
|
|
|
public int daysPlayed = 0;
|
|
|
|
|
public int lastLoginDay = -1;
|
|
|
|
|
|
|
|
|
|
// --- Настройки ---
|
|
|
|
|
public float musicVolume = 0.8f;
|
|
|
|
|
public float soundVolume = 0.8f;
|
|
|
|
|
public bool vibration = true;
|
|
|
|
|
public bool notifications = true;
|
|
|
|
|
public int quality = 1; // 0 низкое, 1 среднее, 2 высокое
|
|
|
|
|
public bool fps60 = true;
|
|
|
|
|
|
|
|
|
|
// --- Статистика (для профиля и заданий) ---
|
|
|
|
|
public float[] collected = new float[8]; // индекс = (int)ResourceType
|
|
|
|
|
public int battlesWon;
|
|
|
|
|
public int battlesLost;
|
|
|
|
|
public int troopsTrained;
|
|
|
|
|
public int arenaFights;
|
|
|
|
|
public int arenaWins;
|
|
|
|
|
public int questsDone;
|
|
|
|
|
|
|
|
|
|
// --- Задания ---
|
|
|
|
|
public List<string> claimedQuests = new List<string>();
|
|
|
|
|
public int dailyDay = -1;
|
|
|
|
|
public List<string> claimedDaily = new List<string>();
|
|
|
|
|
public float[] dailyCollected = new float[8];
|
|
|
|
|
public int dailyBattles;
|
|
|
|
|
public int dailyTroops;
|
|
|
|
|
public int dailyArena;
|
|
|
|
|
public int dailyMarches;
|
|
|
|
|
|
|
|
|
|
// --- Награда за вход ---
|
|
|
|
|
public int loginRewardIndex = 0; // какой день из 7 следующий
|
|
|
|
|
public int lastLoginRewardDay = -1;
|
|
|
|
|
|
|
|
|
|
// --- Почта ---
|
|
|
|
|
public List<MailItem> mail = new List<MailItem>();
|
|
|
|
|
public int nextMailId = 1;
|
|
|
|
|
public bool starterMailSent;
|
|
|
|
|
|
|
|
|
|
// --- Магазин ---
|
|
|
|
|
public int shopDay = -1;
|
|
|
|
|
public List<string> shopIds = new List<string>();
|
|
|
|
|
public List<int> shopCounts = new List<int>();
|
|
|
|
|
|
|
|
|
|
// --- Герой ---
|
|
|
|
|
public int heroLevel = 1;
|
|
|
|
|
|
|
|
|
|
// --- Войска ---
|
2026-10-23 18:33:04 +02:00
|
|
|
// Войска теперь хранит модуль Армии (save.json, секция "army"). Это поле -- только для переноса
|
|
|
|
|
// из старых сохранений: при первой загрузке его читает App/GameModules, потом оно обнуляется.
|
2026-10-12 23:54:03 +03:00
|
|
|
public int[] troops = new int[4];
|
2026-10-23 18:33:04 +02:00
|
|
|
public bool armyInModule; // войска уже перенесены в модуль Армии
|
2026-10-12 23:54:03 +03:00
|
|
|
public List<TrainingOrder> training = new List<TrainingOrder>();
|
|
|
|
|
|
|
|
|
|
// --- Бой (кампания) ---
|
|
|
|
|
public int battleStage = 1;
|
|
|
|
|
|
|
|
|
|
// --- Арена ---
|
|
|
|
|
public int arenaRating = 1000;
|
|
|
|
|
public int arenaTickets = 5;
|
|
|
|
|
public long arenaTicketTicks = 0;
|
|
|
|
|
public List<ArenaOpponent> arenaOpponents = new List<ArenaOpponent>();
|
|
|
|
|
|
2026-10-19 19:27:34 +02:00
|
|
|
// --- Карта мира (статистика для заданий; походы ведёт модуль Мира) ---
|
|
|
|
|
// Старая маленькая карта (панель "МИР", Meta/World) удалена 19.10.2026 -- осталась одна большая карта.
|
|
|
|
|
// marches оставлено только для переноса: солдаты из её походов возвращаются в город при загрузке.
|
|
|
|
|
public List<LegacyWorldMarch> marches = new List<LegacyWorldMarch>();
|
2026-10-12 23:54:03 +03:00
|
|
|
public int marchesSent;
|
|
|
|
|
public int worldWins;
|
|
|
|
|
public int worldLosses;
|
|
|
|
|
|
2026-10-19 19:27:34 +02:00
|
|
|
// --- Карта мира (сцена WorldMap) ---
|
2026-10-12 23:54:03 +03:00
|
|
|
public List<Bogatyri.World.MarchData> sashaMarches = new List<Bogatyri.World.MarchData>();
|
2026-10-23 18:33:04 +02:00
|
|
|
public List<LegacyMarchUnits> sashaMarchUnits = new List<LegacyMarchUnits>(); // только для переноса в модуль Армии
|
2026-10-12 23:54:03 +03:00
|
|
|
|
|
|
|
|
// --- Событие ---
|
|
|
|
|
public int eventWeek = -1;
|
|
|
|
|
public int eventPoints;
|
|
|
|
|
public int eventTroopRemainder;
|
|
|
|
|
public List<int> eventClaimed = new List<int>();
|
|
|
|
|
}
|
2026-10-19 19:27:34 +02:00
|
|
|
|
|
|
|
|
// Поход старой маленькой карты -- только чтобы при загрузке вернуть солдат в город (см. GameProgress.FixData)
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class LegacyWorldMarch
|
|
|
|
|
{
|
|
|
|
|
public int[] units = new int[4]; // отправлено
|
|
|
|
|
public int[] survivors = new int[4]; // вернутся домой
|
|
|
|
|
public bool returning;
|
|
|
|
|
}
|
2026-10-23 18:33:04 +02:00
|
|
|
|
|
|
|
|
// Состав похода из старого progress.json (раньше хранил мост ArmyBridge) -- только для переноса в модуль Армии
|
|
|
|
|
[Serializable]
|
|
|
|
|
public class LegacyMarchUnits
|
|
|
|
|
{
|
|
|
|
|
public int marchId;
|
|
|
|
|
public int[] units = new int[4];
|
|
|
|
|
}
|