summaryrefslogtreecommitdiff
path: root/src/game-server/trigger.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game-server/trigger.cpp')
-rw-r--r--src/game-server/trigger.cpp11
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
}