-- ═══════════════════════════════════════════════════════════════ -- 076: Game progress (Квантик — Законы Мира, Фаза 1). -- -- Прогресс игрока по уровням игры «Квантик». Уровень идентифицируется -- строковым level_id (напр. 'phys-artillery-1'); сами уровни — это спеки -- SimForge (встроенные данные сейчас, custom_sims cat='game' в Ф5). -- -- Upsert хранит ЛУЧШИЙ результат: best_time_ms (минимальное время прохождения), -- best_stars (максимум собранных звёзд 0..3). attempts растёт на каждый submit. -- UNIQUE(user_id, level_id) — одна строка прогресса на пару игрок-уровень. -- user_id ON DELETE CASCADE — прогресс удаляется вместе с игроком. -- ═══════════════════════════════════════════════════════════════ CREATE TABLE IF NOT EXISTS game_progress ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE, level_id TEXT NOT NULL, -- идентификатор уровня (спека) best_time_ms INTEGER, -- лучшее (минимальное) время, мс best_stars INTEGER NOT NULL DEFAULT 0, -- лучшее число звёзд 0..3 attempts INTEGER NOT NULL DEFAULT 0, -- число попыток (++ на submit) completed_at TEXT DEFAULT (datetime('now')), -- время первого прохождения UNIQUE (user_id, level_id) ); CREATE INDEX IF NOT EXISTS idx_game_progress_user ON game_progress (user_id);