É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>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
4391b36d45
commit
51427b5297
@@ -0,0 +1,29 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user