diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-12-02 15:29:02 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-12-02 15:29:02 +0100 |
commit | 1fb4acc25ae89360e71d33a8f7cba99bcc028b32 (patch) | |
tree | 6a12714df0e1bd8a96b1f5452fbc4efcb83f7200 /src/server/game/Conditions | |
parent | 49699bc966e4543044da7f1fd75d57fbebfac4e4 (diff) |
Core/Quests: Implemented QUEST_OBJECTIVE_KILL_WITH_LABEL
Diffstat (limited to 'src/server/game/Conditions')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.h | 1 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index f431db82c34..60018c25803 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -157,6 +157,7 @@ ConditionMgr::ConditionTypeInfo const ConditionMgr::StaticConditionTypeData[COND { .Name = "Player Condition", .HasConditionValue1 = true, .HasConditionValue2 = false, .HasConditionValue3 = false, .HasConditionStringValue1 = false }, { .Name = "Private Object", .HasConditionValue1 = false, .HasConditionValue2 = false, .HasConditionValue3 = false, .HasConditionStringValue1 = false }, { .Name = "String ID", .HasConditionValue1 = false, .HasConditionValue2 = false, .HasConditionValue3 = false, .HasConditionStringValue1 = true }, + { .Name = "Label", .HasConditionValue1 = true, .HasConditionValue2 = false, .HasConditionValue3 = false, .HasConditionStringValue1 = false }, }; ConditionSourceInfo::ConditionSourceInfo(WorldObject const* target0, WorldObject const* target1, WorldObject const* target2) @@ -675,6 +676,14 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const condMeets = go->HasStringId(ConditionStringValue1); break; } + case CONDITION_LABEL: + { + if (Creature const* creature = object->ToCreature()) + condMeets = creature->HasLabel(ConditionValue1); + else if (GameObject const* go = object->ToGameObject()) + condMeets = go->HasLabel(ConditionValue1); + break; + } default: break; } @@ -893,6 +902,9 @@ uint32 Condition::GetSearcherTypeMaskForCondition() const case CONDITION_STRING_ID: mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_GAMEOBJECT; break; + case CONDITION_LABEL: + mask |= GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_GAMEOBJECT; + break; default: ABORT_MSG("Condition::GetSearcherTypeMaskForCondition - missing condition handling!"); break; @@ -2592,6 +2604,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const case CONDITION_GAMEMASTER: case CONDITION_PRIVATE_OBJECT: case CONDITION_STRING_ID: + case CONDITION_LABEL: break; case CONDITION_DIFFICULTY_ID: if (!sDifficultyStore.LookupEntry(cond->ConditionValue1)) @@ -3882,7 +3895,7 @@ int32 GetUnitConditionVariable(Unit const* unit, Unit const* otherUnit, UnitCond case UnitConditionVariable::IsMounted: return unit->GetMountDisplayId() != 0; case UnitConditionVariable::Label: - break; + return unit->IsCreature() && unit->ToCreature()->HasLabel(value) ? value : 0; case UnitConditionVariable::IsMySummon: return otherUnit && (otherUnit->GetCharmerGUID() == unit->GetGUID() || otherUnit->GetCreatorGUID() == unit->GetGUID()); case UnitConditionVariable::IsSummoner: diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 98ba91e204b..ed7b83c94e5 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -117,6 +117,7 @@ enum ConditionTypes CONDITION_PLAYER_CONDITION = 56, // PlayerConditionId 0 0 true if player satisfies PlayerCondition CONDITION_PRIVATE_OBJECT = 57, // 0 0 0 true if entity is private object CONDITION_STRING_ID = 58, + CONDITION_LABEL = 59, // Label 0 0 true if creature/gameobject has specified Label in CreatureLabel.db2/GameObjectLabel.db2 CONDITION_MAX }; |