Import campagne : narration et notes MJ accumulees au lieu de premier-gagne
Une scene coupee entre deux morceaux perdait la moitie de ses gm_notes / player_narration (la regle premier-non-vide-gagne jetait la suite). Les deux champs sont desormais CONCATENES, avec dedoublonnage (overlap relu) et remplacement si un morceau apporte une version plus complete. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -163,8 +163,12 @@ class _TreeMerger:
|
||||
{"name": sname, "description": "", "player_narration": "",
|
||||
"gm_notes": "", "rooms": {}})
|
||||
self._fill_desc(s, sc)
|
||||
self._fill_field(s, sc, "player_narration")
|
||||
self._fill_field(s, sc, "gm_notes")
|
||||
# Narration/notes : CONCATÉNATION (pas premier-gagne) — une
|
||||
# scène coupée entre deux morceaux apporte la suite de son
|
||||
# contenu dans le morceau suivant ; la jeter perdrait la
|
||||
# moitié du donjon. Le doublon exact (overlap) est filtré.
|
||||
self._append_field(s, sc, "player_narration")
|
||||
self._append_field(s, sc, "gm_notes")
|
||||
for rm in sc.get("rooms", []) or []:
|
||||
rname = str(rm.get("name", "")).strip()
|
||||
if not rname:
|
||||
@@ -186,6 +190,23 @@ class _TreeMerger:
|
||||
if not node[field_name]:
|
||||
node[field_name] = str(src.get(field_name) or "").strip()
|
||||
|
||||
@staticmethod
|
||||
def _append_field(node: dict, src: dict, field_name: str) -> None:
|
||||
"""Accumule la valeur de `src` à la suite de l'existante (scène coupée
|
||||
entre deux morceaux). Ignore le vide et le contenu déjà présent (un
|
||||
morceau redondant — relecture d'overlap — ne duplique rien)."""
|
||||
new = str(src.get(field_name) or "").strip()
|
||||
if not new:
|
||||
return
|
||||
current = node[field_name]
|
||||
if not current:
|
||||
node[field_name] = new
|
||||
elif new not in current and current not in new:
|
||||
node[field_name] = current + "\n\n" + new
|
||||
elif current in new:
|
||||
# Le nouveau contenu ENGLOBE l'ancien (version plus complète) → on le prend.
|
||||
node[field_name] = new
|
||||
|
||||
def result(self) -> list[ArcProposal]:
|
||||
arcs: list[ArcProposal] = []
|
||||
for a in self._arcs.values():
|
||||
|
||||
Reference in New Issue
Block a user