Files
Forge-Engine/db/quests/ensure_quests_schema.py
T
williamandClaude Sonnet 5 51427b5297
Build and deploy / test-python (push) Successful in 6m14s
Build and deploy / test-js (push) Successful in 51s
Build and deploy / build-and-push (push) Skipped
Build and deploy / deploy (push) Skipped
Éditeur de quêtes : titre/objectif/récompense/statut/résultat + dialogue à 3 colonnes
Nouvel espace "🗺️ Quêtes" (game-wide, comme les événements
personnalisés) : liste de cartes + "+ Nouvelle quête", chaque carte
ouvrant une modale d'arbre de dialogue en bulles de théâtre
("speaker: texte"), une colonne par statut de quête (nouvelle/en
cours/terminée) puisque le dialogue joué dépend de l'état de la
quête au moment où le joueur parle au PNJ. Bulles alternées
joueur/PNJ, couleur différente selon qui parle.

L'action "Déclencher une quête" de l'éditeur de collision n'est plus
un champ texte libre : elle ouvre directement CETTE MÊME modale
(picker de quêtes existantes + création à la volée), et finalise la
règle avec l'id numérique de la quête choisie — collision_rules.py
migré en conséquence (quete_id devient un entier, comme evenement_id).

Corrige aussi la miniature d'objet de la carte "🧩 Collision", 3× plus
grande (120px) comme demandé.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-02 20:24:57 +02:00

30 lines
1.2 KiB
Python

from ..connection import connect
def ensure_quests_schema(slug):
"""Migration légère (même principe que ensure_custom_events_schema.py) :
crée _quests si absente. Une quête vit pour TOUT le jeu (pas par écran),
référencée par id technique depuis l'action "quete" d'une règle de
collision (voir screens/rendering/collision_rules.py, quete_id). Les
dialogues (voir static/js/quests/quest-editor.js — 3 colonnes
nouvelle/en_cours/terminee) sont stockés en JSON plutôt qu'une table à
part : jamais interrogés/filtrés côté SQL, toujours lus/réécrits en
bloc pour UNE quête à la fois (même convention que _scene_objects.attributes)."""
conn = connect(slug)
conn.execute(
"""
CREATE TABLE IF NOT EXISTS _quests (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
objectif TEXT DEFAULT '',
recompense_score INTEGER DEFAULT 0,
status TEXT DEFAULT 'nouvelle',
resultat TEXT,
dialogues_json TEXT DEFAULT '{}',
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);
"""
)
conn.commit()
conn.close()