Fixed some mistakes on the iterator handling for spawn script timers
This commit is contained in:
parent
5fba62654e
commit
ff9eb3dd94
1 changed files with 10 additions and 2 deletions
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue