From 8238ca092549a4435edffa206419e66c7a1d041e Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Thu, 27 Aug 2026 11:21:31 +0200 Subject: [PATCH] Brasserie : l instance n enregistrait jamais rien MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signale en jeu : « le donjon semble avoir declenche le done total au 1er boss, je n ai plus la liste des autres boss a tuer ». La chaine de sauvegarde etait construite par une methode Save() qui n etait APPELEE NULLE PART. Le tampon SaveDataBuffer restait donc vide, et InstanceScript::SaveToDB abandonne des que la chaine est vide : std::string data = GetSaveData(); if (data.empty()) return; Ni l etat des boss ni le masque des rencontres accomplies n atteignaient la base. Constate directement : completedEncounters = 0 et data = '' sur l instance 3 apres un boss tue. Second defaut cumule : Save() n ecrivait pas l en-tete « S S B » que Load() exige pour accepter la chaine. Meme appelee, la relecture aurait echoue -- la progression aurait ete perdue a chaque rechargement. GetSaveData() construit desormais la chaine lui-meme, en-tete compris (motif habituel de TrinityCore), ce qui supprime le tampon et Save(). SetBossState declenche aussi une sauvegarde : auparavant seule la mort d un hozen en provoquait une, via SetData. Verifie au passage, et ecarte : les 7 lignes instance_encounters ajoutees sont bien chargees (389 -> 396 au demarrage), le drapeau DUNGEON_BOSS est pose dynamiquement au chargement et IsDungeonBoss le relit correctement, et DifficultyID 0 est bien etendu a toutes les difficultes de la carte. A noter : Yan-Zhu the Uncasked (59479) n a aucun spawn sur la carte 961. Uncle Gao (59074) est present, donc l invocation par evenement reste plausible -- a verifier quand le donjon sera jouable jusque-la. Co-Authored-By: Claude Opus 5 --- .../instance_stormstout_brewery.cpp | 48 ++++++++++++++----- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/server/scripts/Pandaria/StormstoutBrewery/instance_stormstout_brewery.cpp b/src/server/scripts/Pandaria/StormstoutBrewery/instance_stormstout_brewery.cpp index 2680482..d5f5a6e 100644 --- a/src/server/scripts/Pandaria/StormstoutBrewery/instance_stormstout_brewery.cpp +++ b/src/server/scripts/Pandaria/StormstoutBrewery/instance_stormstout_brewery.cpp @@ -411,6 +411,12 @@ public: if (!InstanceScript::SetBossState(type, state)) return false; + // SylvaniaCore : sans ceci, seule la mort d'un hozen declenchait + // une sauvegarde (via SetData). Un boss tue ne laissait aucune + // trace, et la progression du donjon etait perdue au moindre + // rechargement. + SaveToDB(); + if (type == DATA_OOK_OOK) { if (state == DONE) @@ -435,26 +441,47 @@ public: return true; } - void Save() + // ============================================================== + // SylvaniaCore - sauvegarde de l'instance. + // + // SIGNALE EN JEU : « le donjon semble avoir declenche le done + // total au 1er boss, je n'ai plus la liste des autres boss ». + // + // L'instance n'enregistrait RIEN. La chaine etait construite par + // une methode `Save()` qui n'etait appelee nulle part ; le tampon + // `SaveDataBuffer` restait donc vide, et `InstanceScript::SaveToDB` + // abandonne des que la chaine est vide : + // + // std::string data = GetSaveData(); + // if (data.empty()) + // return; + // + // Ni l'etat des boss ni le masque des rencontres accomplies + // n'atteignaient la base. Constate directement en base : + // `completedEncounters = 0` et `data = ''` apres un boss tue. + // + // Second defaut, cumule : `Save()` n'ecrivait pas l'en-tete + // « S S B » que `Load()` exige pour accepter la chaine. Meme + // appelee, la relecture aurait echoue. + // + // `GetSaveData()` construit desormais la chaine elle-meme, en-tete + // compris. C'est le motif habituel de TrinityCore, et il supprime + // du meme coup le besoin du tampon et de `Save()`. + // ============================================================== + std::string GetSaveData() override { OUT_SAVE_INST_DATA; std::ostringstream saveStream; + saveStream << "S S B "; for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) saveStream << GetBossState(i) << ' '; saveStream << hozenSlain; - SaveDataBuffer = saveStream.str(); - SaveToDB(); OUT_SAVE_INST_DATA_COMPLETE; - NeedSave = false; - } - - std::string GetSaveData() override - { - return SaveDataBuffer; + return saveStream.str(); } void Load(char const* in) override @@ -494,9 +521,6 @@ public: OUT_LOAD_INST_DATA_COMPLETE; } - protected: - bool NeedSave; - std::string SaveDataBuffer; }; InstanceScript* GetInstanceScript(InstanceMap* map) const override