diff options
Diffstat (limited to 'src/game-server/trigger.cpp')
-rw-r--r-- | src/game-server/trigger.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/game-server/trigger.cpp b/src/game-server/trigger.cpp index 3309c754..8252fafc 100644 --- a/src/game-server/trigger.cpp +++ b/src/game-server/trigger.cpp @@ -51,11 +51,18 @@ void ScriptAction::process(Object *obj) void TriggerArea::update() { + std::set<Object*> insideNow; for (MovingObjectIterator i(getMap()->getInsideRectangleIterator(mZone)); i; ++i) { - if (mZone.contains((*i)->getPosition())) + if (mZone.contains((*i)->getPosition())) //<-- Why is this additional condition necessary? Shouldn't getInsideRectangleIterator already exclude those outside of the zone? --Crush { - mAction->process(*i); + insideNow.insert(*i); + + if (!mOnce || mInside.find(*i) == mInside.end()) + { + mAction->process(*i); + } } } + mInside.swap(insideNow); //swapping is faster than assigning } |