From e1e51f52d1b7b23726a0e52d3032e43b45c6873b Mon Sep 17 00:00:00 2001 From: Yunfan Li Date: Wed, 31 Jul 2024 23:20:54 +0800 Subject: [PATCH] Fix triggers bug --- src/strategy/Engine.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/strategy/Engine.cpp b/src/strategy/Engine.cpp index c4ca7394..cf939ea9 100644 --- a/src/strategy/Engine.cpp +++ b/src/strategy/Engine.cpp @@ -470,7 +470,7 @@ bool Engine::HasStrategy(std::string const name) void Engine::ProcessTriggers(bool minimal) { - // std::unordered_map fires; + std::unordered_map fires; for (std::vector::iterator i = triggers.begin(); i != triggers.end(); i++) { TriggerNode* node = *i; @@ -486,7 +486,10 @@ void Engine::ProcessTriggers(bool minimal) if (!trigger) continue; - + + if (fires.find(trigger) != fires.end()) + continue; + if (testMode || trigger->needCheck()) { if (minimal && node->getFirstRelevance() < 100) @@ -500,22 +503,21 @@ void Engine::ProcessTriggers(bool minimal) if (!event) continue; - // fires[trigger] = event; + fires[trigger] = event; LogAction("T:%s", trigger->getName().c_str()); - MultiplyAndPush(node->getHandlers(), 0.0f, false, event, "trigger"); } } - // for (std::vector::iterator i = triggers.begin(); i != triggers.end(); i++) - // { - // TriggerNode* node = *i; - // Trigger* trigger = node->getTrigger(); - // if (fires.find(trigger) == fires.end()) - // continue; + for (std::vector::iterator i = triggers.begin(); i != triggers.end(); i++) + { + TriggerNode* node = *i; + Trigger* trigger = node->getTrigger(); + if (fires.find(trigger) == fires.end()) + continue; - // Event event = fires[trigger]; - - // } + Event event = fires[trigger]; + MultiplyAndPush(node->getHandlers(), 0.0f, false, event, "trigger"); + } for (std::vector::iterator i = triggers.begin(); i != triggers.end(); i++) {