From df4e4949c873cd51427d45b03a62b375aaba8bfc Mon Sep 17 00:00:00 2001 From: In-line Date: Thu, 11 May 2017 11:35:38 +0400 Subject: [PATCH] Fix #427, AMTL Code porting (#436) * Fix crash in CTaskMngr::startFrame() * Fix crash in EventsMngr::executeEvents() * Fix loops * Fix loop iterators signess --- amxmodx/CEvent.cpp | 5 ++++- amxmodx/CTask.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/amxmodx/CEvent.cpp b/amxmodx/CEvent.cpp index 70db3f8c..b6cf7f4d 100755 --- a/amxmodx/CEvent.cpp +++ b/amxmodx/CEvent.cpp @@ -458,8 +458,11 @@ void EventsMngr::executeEvents() auto parseFun = m_ParseFun; m_ParseFun = nullptr; - for (auto &event : *parseFun) + auto lastSize = parseFun->length(); + for(auto i = 0u; i < lastSize; i++) { + auto &event = parseFun->at(i); + if (event->m_Done) { event->m_Done = false; diff --git a/amxmodx/CTask.cpp b/amxmodx/CTask.cpp index 0b8ff1de..ca46cc9f 100755 --- a/amxmodx/CTask.cpp +++ b/amxmodx/CTask.cpp @@ -269,8 +269,11 @@ bool CTaskMngr::taskExists(int iId, AMX *pAmx) void CTaskMngr::startFrame() { - for (auto &task : m_Tasks) + auto lastSize = m_Tasks.length(); + for(auto i = 0u; i < lastSize; i++) { + auto &task = m_Tasks[i]; + if (task->isFree()) continue; task->executeIfRequired(*m_pTmr_CurrentTime, *m_pTmr_TimeLimit, *m_pTmr_TimeLeft);