ToS : fix crash SIGSEGV a la creation d instance (recursion infinie GetSaveData)
Le harnais bot a intercepte 3 crashs avant tout joueur : mon renommage de la passe 4 (GetBossSaveData -> GetSaveData, la suggestion du compilateur) avait transforme l override GetSaveData en appel recursif infini -> stack overflow des qu une instance 1676 se cree. Fix racine : suppression des overrides GetSaveData/Load du module, la persistance generique d InstanceScript (SetBossState) fait foi dans les deux sens. LECON : ne jamais accepter aveuglement le did-you-mean du compilateur quand la fonction suggeree est celle qu on est en train de definir. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -503,45 +503,9 @@ public:
|
||||
return &loc_res_pla;
|
||||
}
|
||||
|
||||
std::string GetSaveData() override
|
||||
{
|
||||
std::ostringstream saveStream;
|
||||
saveStream << "T O S " << GetSaveData();
|
||||
return saveStream.str();
|
||||
}
|
||||
|
||||
void Load(const char* data) override
|
||||
{
|
||||
if (!data)
|
||||
{
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_LOAD_INST_DATA(data);
|
||||
|
||||
char dataHead1, dataHead2, dataHead3;
|
||||
|
||||
std::istringstream loadStream(data);
|
||||
loadStream >> dataHead1 >> dataHead2 >> dataHead3;
|
||||
|
||||
if (dataHead1 == 'T' && dataHead2 == 'O' && dataHead3 == 'S')
|
||||
{
|
||||
for (uint32 i = 0; i < MAX_ENCOUNTER; ++i)
|
||||
{
|
||||
uint32 tmpState;
|
||||
loadStream >> tmpState;
|
||||
if (tmpState == IN_PROGRESS || tmpState > SPECIAL)
|
||||
tmpState = NOT_STARTED;
|
||||
SetBossState(i, EncounterState(tmpState));
|
||||
}
|
||||
}
|
||||
else
|
||||
OUT_LOAD_INST_DATA_FAIL;
|
||||
|
||||
OUT_LOAD_INST_DATA_COMPLETE;
|
||||
|
||||
}
|
||||
// GetSaveData/Load : la persistance generique d InstanceScript fait foi
|
||||
// (l override uwow appelait GetBossSaveData, absent chez nous -> le renommage
|
||||
// avait cree une recursion infinie = crash SIGSEGV a la creation d instance)
|
||||
|
||||
void Update(uint32 diff) override
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user