É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
@@ -11,9 +11,13 @@ import json
|
||||
# joueur entre dans un rayon de `perimetre_px` pixels autour de l'objet).
|
||||
#
|
||||
# Action (une seule par règle) :
|
||||
# - "quete" : quete_id (référence libre — l'éditeur de quête lui-même
|
||||
# reste à construire, cette action ne fait QUE mémoriser
|
||||
# la référence pour l'instant).
|
||||
# - "quete" : quete_id (id technique d'une quête — voir db/quests/,
|
||||
# choisie/créée via l'assistant "+ Action" qui ouvre
|
||||
# directement l'éditeur de quête, static/js/quests/
|
||||
# quest-editor.js) — une quête inexistante/supprimée
|
||||
# depuis reste une référence orpheline plutôt qu'une
|
||||
# contrainte SQL, comme le reste de ce moteur (voir
|
||||
# evenement_id ci-dessous, même principe).
|
||||
# - "attaque" : joue la pose "attack" du personnage si disponible (voir
|
||||
# personnage-controller.js) — pas de système de combat
|
||||
# (dégâts/PV...) pour l'instant, effet visuel seul.
|
||||
@@ -45,10 +49,10 @@ def _sanitize_action(raw_action, depth=1):
|
||||
return None # un seul niveau d'imbrication autorisé
|
||||
action = {"type": action_type}
|
||||
if action_type == "quete":
|
||||
quete_id = raw_action.get("quete_id")
|
||||
if not (isinstance(quete_id, str) and quete_id.strip()):
|
||||
try:
|
||||
action["quete_id"] = int(raw_action.get("quete_id"))
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
action["quete_id"] = quete_id.strip()
|
||||
elif action_type == "evenement":
|
||||
try:
|
||||
action["evenement_id"] = int(raw_action.get("evenement_id"))
|
||||
|
||||
Reference in New Issue
Block a user