diff options
Diffstat (limited to 'src/server/game/Conditions/ConditionMgr.cpp')
| -rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 16 |
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; } |
