Brasserie : l instance n enregistrait jamais rien
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 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user