aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSubv <s.v.h21@hotmail.com>2012-12-30 16:03:25 -0500
committerSubv <s.v.h21@hotmail.com>2012-12-30 16:03:25 -0500
commitb4be02c8a0f48b68b094a1bc00caabf1f4e06d05 (patch)
tree74c2532cde43be49d7ac0519da68dc069dabc842
parent0aef9419b6939a92a6c64fb873bf3f7a4820088b (diff)
Core/Conditions: Rename CONDITION_INSTANCE_DATA to CONDITION_INSTANCE_INFO.
And allow it to be used with GetData, GetData64 and GetBossState.
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp26
-rw-r--r--src/server/game/Conditions/ConditionMgr.h9
2 files changed, 29 insertions, 6 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 37835618183..f66783fb89a 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -154,11 +154,27 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo)
case CONDITION_ACTIVE_EVENT:
condMeets = sGameEventMgr->IsActiveEvent(ConditionValue1);
break;
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
{
Map* map = object->GetMap();
- if (map && map->IsDungeon() && ((InstanceMap*)map)->GetInstanceScript())
- condMeets = ((InstanceMap*)map)->GetInstanceScript()->GetData(ConditionValue1) == ConditionValue2;
+ if (map && map->IsDungeon())
+ {
+ if (InstanceScript const* instance = ((InstanceMap*)map)->GetInstanceScript())
+ {
+ switch (ConditionValue3)
+ {
+ case INSTANCE_INFO_DATA:
+ condMeets = instance->GetData(ConditionValue1) == ConditionValue2;
+ break;
+ case INSTANCE_INFO_DATA64:
+ condMeets = instance->GetData64(ConditionValue1) == ConditionValue2;
+ break;
+ case INSTANCE_INFO_BOSS_STATE:
+ condMeets = instance->GetBossState(ConditionValue1) == ConditionValue2;
+ break;
+ }
+ }
+ }
break;
}
case CONDITION_MAPID:
@@ -367,7 +383,7 @@ uint32 Condition::GetSearcherTypeMaskForCondition()
case CONDITION_ACTIVE_EVENT:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
mask |= GRID_MAP_TYPE_MASK_ALL;
break;
case CONDITION_MAPID:
@@ -1899,7 +1915,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond)
break;
}
case CONDITION_AREAID:
- case CONDITION_INSTANCE_DATA:
+ case CONDITION_INSTANCE_INFO:
break;
case CONDITION_WORLD_STATE:
{
diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h
index 807b75c4ee6..520e786a66a 100644
--- a/src/server/game/Conditions/ConditionMgr.h
+++ b/src/server/game/Conditions/ConditionMgr.h
@@ -46,7 +46,7 @@ enum ConditionTypes
CONDITION_DRUNKENSTATE = 10, // DrunkenState 0, 0 true if player is drunk enough
CONDITION_WORLD_STATE = 11, // index value 0 true if world has the value for the index
CONDITION_ACTIVE_EVENT = 12, // event_id 0 0 true if event is active
- CONDITION_INSTANCE_DATA = 13, // entry data 0 true if data is set in current instance
+ CONDITION_INSTANCE_INFO = 13, // entry data type true if the instance info defined by type (enum InstanceInfo) equals data.
CONDITION_QUEST_NONE = 14, // quest_id 0 0 true if doesn't have quest saved
CONDITION_CLASS = 15, // class 0 0 true if player's class is equal to class
CONDITION_RACE = 16, // race 0 0 true if player's race is equal to race
@@ -152,6 +152,13 @@ enum RelationType
RELATION_MAX
};
+enum InstanceInfo
+{
+ INSTANCE_INFO_DATA = 0,
+ INSTANCE_INFO_DATA64,
+ INSTANCE_INFO_BOSS_STATE
+};
+
enum
{
MAX_CONDITION_TARGETS = 3