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.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 76e065f8ddc..dcc18fdf64a 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -381,7 +381,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
case CONDITION_HP_VAL:
{
if (Unit* unit = object->ToUnit())
- condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealth(), static_cast<uint32>(ConditionValue1));
+ condMeets = CompareValues(static_cast<ComparisionType>(ConditionValue2), unit->GetHealth(), static_cast<uint64>(ConditionValue1));
break;
}
case CONDITION_HP_PCT:
@@ -2397,7 +2397,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->ChrSpecializationIndex >= 0 || condition->ChrSpecializationRole >= 0)
{
- if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetSpecId(player->GetActiveTalentGroup())))
+ if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)))
{
if (condition->ChrSpecializationIndex >= 0 && spec->OrderIndex != uint32(condition->ChrSpecializationIndex))
return false;
@@ -2621,8 +2621,15 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
std::array<bool, AuraCount::value> results;
results.fill(true);
for (std::size_t i = 0; i < AuraCount::value; ++i)
+ {
if (condition->AuraSpellID[i])
- results[i] = player->HasAura(condition->AuraSpellID[i]);
+ {
+ if (condition->AuraCount[i])
+ results[i] = player->GetAuraCount(condition->AuraSpellID[i]) >= condition->AuraCount[i];
+ else
+ results[i] = player->HasAura(condition->AuraSpellID[i]);
+ }
+ }
if (!PlayerConditionLogic(condition->AuraSpellLogic, results))
return false;
@@ -2728,5 +2735,8 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
if (condition->MaxAvgEquippedItemLevel && uint32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL + 1))) > condition->MaxAvgEquippedItemLevel)
return false;
+ if (condition->ModifierTreeID && !player->ModifierTreeSatisfied(condition->ModifierTreeID))
+ return false;
+
return true;
}