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>
22 lines
789 B
Python
22 lines
789 B
Python
import json
|
|
|
|
from ..connection import connect
|
|
from .ensure_quests_schema import ensure_quests_schema
|
|
from .get_quest import get_quest
|
|
from .sanitize_quest_dialogues import sanitize_quest_dialogues
|
|
|
|
|
|
def set_quest_dialogues(slug, quest_id, raw_dialogues):
|
|
"""Toujours les 3 colonnes ENTIÈRES (nouvelle/en_cours/terminee) en un
|
|
bloc — même convention "replace-all" que set_scene_object_collision_rules.py,
|
|
jamais une réplique isolée."""
|
|
ensure_quests_schema(slug)
|
|
if get_quest(slug, quest_id) is None:
|
|
return None
|
|
dialogues = sanitize_quest_dialogues(raw_dialogues)
|
|
conn = connect(slug)
|
|
conn.execute("UPDATE _quests SET dialogues_json = ? WHERE id = ?", (json.dumps(dialogues), quest_id))
|
|
conn.commit()
|
|
conn.close()
|
|
return dialogues
|