diff options
author | Subv <s.v.h21@hotmail.com> | 2012-12-30 16:03:25 -0500 |
---|---|---|
committer | Subv <s.v.h21@hotmail.com> | 2012-12-30 20:22:57 -0500 |
commit | 82f3b24e8a3f2b86f09bcf7d06bffbecaef0bc6f (patch) | |
tree | 6e9b8ce6bc32b80133dac217e232519a903ae053 /src | |
parent | e7d02bfb7f4ab2a511badfad9c2b90725c6fb3da (diff) |
Core/Conditions: Rename CONDITION_INSTANCE_DATA to CONDITION_INSTANCE_INFO.
And allow it to be used with GetData, GetData64 and GetBossState.
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 26 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.h | 9 |
2 files changed, 29 insertions, 6 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 34e48c62771..304b153b000 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: @@ -1930,7 +1946,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 95b564dc0ee..22e1fd6592d 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 @@ -153,6 +153,13 @@ enum RelationType RELATION_MAX }; +enum InstanceInfo +{ + INSTANCE_INFO_DATA = 0, + INSTANCE_INFO_DATA64, + INSTANCE_INFO_BOSS_STATE +}; + enum { MAX_CONDITION_TARGETS = 3 |