Fixed some mistakes on the iterator handling for spawn script timers

This commit is contained in:
Emagi 2024-03-29 07:10:11 -04:00
parent 5fba62654e
commit ff9eb3dd94

View file

@ -4326,12 +4326,14 @@ void ZoneServer::StopSpawnScriptTimer(Spawn* spawn, std::string functionName){
if(spawn_script_timers.size() > 0){ if(spawn_script_timers.size() > 0){
set<SpawnScriptTimer*>::iterator itr; set<SpawnScriptTimer*>::iterator itr;
SpawnScriptTimer* timer = 0; SpawnScriptTimer* timer = 0;
for (itr = spawn_script_timers.begin(); itr != spawn_script_timers.end(); itr++) { for (itr = spawn_script_timers.begin(); itr != spawn_script_timers.end(); ) {
timer = *itr; timer = *itr;
if(timer->spawn == spawn->GetID() && (functionName == "" || timer->function == functionName) && remove_spawn_script_timers_list.count(timer) == 0) { if(timer->spawn == spawn->GetID() && (functionName == "" || timer->function == functionName) && remove_spawn_script_timers_list.count(timer) == 0) {
itr = spawn_script_timers.erase(itr); itr = spawn_script_timers.erase(itr);
safe_delete(timer); safe_delete(timer);
} }
else
itr++;
} }
} }
MRemoveSpawnScriptTimersList.releasewritelock(__FUNCTION__, __LINE__); MRemoveSpawnScriptTimersList.releasewritelock(__FUNCTION__, __LINE__);
@ -4366,7 +4368,13 @@ void ZoneServer::DeleteSpawnScriptTimers() {
for (itr = remove_spawn_script_timers_list.begin(); itr != remove_spawn_script_timers_list.end(); itr++) { for (itr = remove_spawn_script_timers_list.begin(); itr != remove_spawn_script_timers_list.end(); itr++) {
timer = *itr; timer = *itr;
spawn_script_timers.erase(timer); set<SpawnScriptTimer*>::iterator itr2;
itr2 = spawn_script_timers.find(timer);
if(itr2 != spawn_script_timers.end())
spawn_script_timers.erase(itr2);
safe_delete(timer); safe_delete(timer);
} }
remove_spawn_script_timers_list.clear(); remove_spawn_script_timers_list.clear();