aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Conditions/ConditionMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index e154df64f7a..27c6f88ba93 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -43,6 +43,7 @@
#include "RaceMask.h"
#include "Realm.h"
#include "ReputationMgr.h"
+#include "Scenario.h"
#include "ScriptMgr.h"
#include "Spell.h"
#include "SpellAuras.h"
@@ -146,6 +147,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND
{ "Object Entry or Guid", true, true, true },
{ "Object TypeMask", true, false, false },
{ "BattlePet Species Learned", true, true, true },
+ { "On Scenario Step", true, false, false },
};
// Checks if object meets the condition
@@ -574,6 +576,13 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
static_cast<uint8>(ConditionValue2));
break;
}
+ case CONDITION_SCENARIO_STEP:
+ {
+ if (Scenario const* scenario = object->GetScenario())
+ if (ScenarioStepEntry const* step = scenario->GetStep())
+ condMeets = step->ID == ConditionValue1;
+ break;
+ }
default:
condMeets = false;
break;
@@ -778,6 +787,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() const
case CONDITION_BATTLE_PET_COUNT:
mask |= GRID_MAP_TYPE_MASK_PLAYER;
break;
+ case CONDITION_SCENARIO_STEP:
+ mask |= GRID_MAP_TYPE_MASK_ALL;
+ break;
default:
ABORT_MSG("Condition::GetSearcherTypeMaskForCondition - missing condition handling!");
break;
@@ -2602,6 +2614,15 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const
return false;
}
break;
+ case CONDITION_SCENARIO_STEP:
+ {
+ if (!sScenarioStepStore.LookupEntry(cond->ConditionValue1))
+ {
+ TC_LOG_ERROR("sql.sql", "%s has non existing ScenarioStep in value1 (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1);
+ return false;
+ }
+ break;
+ }
default:
TC_LOG_ERROR("sql.sql", "%s Invalid ConditionType in `condition` table, ignoring.", cond->ToString().c_str());
return false;