@@ -192,32 +192,38 @@ EventMgr::EventMgr(Eluna* _E) : E(_E)
192192
193193EventMgr::~EventMgr ()
194194{
195- if (! processors. empty () )
196- for (ProcessorSet::const_iterator it = processors. begin (); it != processors. end (); ++it) // loop processors
197- (*it)-> RemoveEvents_internal ();
195+ for ( auto * processor : processors)
196+ processor-> RemoveEvents_internal ();
197+
198198 globalProcessor->RemoveEvents_internal ();
199199}
200200
201201void EventMgr::UpdateProcessors (uint32 diff)
202202{
203203 if (!processors.empty ())
204- for (ProcessorSet::const_iterator it = processors.begin (); it != processors.end (); ++it) // loop processors
205- (*it)->Update (diff);
204+ {
205+ // iterate a copy because processors may be destroyed during update (creature removed by a script, etc)
206+ ProcessorSet copy = processors;
207+
208+ for (auto * processor : copy)
209+ processor->Update (diff);
210+ }
211+
206212 globalProcessor->Update (diff);
207213}
208214
209215void EventMgr::SetStates (LuaEventState state)
210216{
211- if (! processors. empty () )
212- for (ProcessorSet::const_iterator it = processors. begin (); it != processors. end (); ++it) // loop processors
213- (*it)-> SetStates (state);
217+ for ( auto * processor : processors)
218+ processor-> SetStates (state);
219+
214220 globalProcessor->SetStates (state);
215221}
216222
217223void EventMgr::SetState (int eventId, LuaEventState state)
218224{
219- if (! processors. empty () )
220- for (ProcessorSet::const_iterator it = processors. begin (); it != processors. end (); ++it) // loop processors
221- (*it)-> SetState (eventId, state);
225+ for ( auto * processor : processors)
226+ processor-> SetState (eventId, state);
227+
222228 globalProcessor->SetState (eventId, state);
223229}
0 commit comments