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;
|
return &loc_res_pla;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GetSaveData() override
|
// GetSaveData/Load : la persistance generique d InstanceScript fait foi
|
||||||
{
|
// (l override uwow appelait GetBossSaveData, absent chez nous -> le renommage
|
||||||
std::ostringstream saveStream;
|
// avait cree une recursion infinie = crash SIGSEGV a la creation d instance)
|
||||||
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;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update(uint32 diff) override
|
void Update(uint32 diff) override
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user