diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-10-19 14:33:29 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-11-01 07:56:45 +0100 |
commit | 2d415b4621fd0620944aa02140c13ddee5e17ce9 (patch) | |
tree | 5efbb1599e507bef775da5d586e9037d5d3651e0 /src/server/game/Achievements/CriteriaHandler.cpp | |
parent | d25a2698d88243d6259a4b3730f85a878677a4f1 (diff) |
Core/DataStores: updated DB2 structures to 4.4.1
Diffstat (limited to 'src/server/game/Achievements/CriteriaHandler.cpp')
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 70 |
1 files changed, 23 insertions, 47 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index afb53ef3c99..a4eff377a86 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -597,6 +597,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0* case CriteriaType::HighestHealCast: case CriteriaType::HighestHealReceived: case CriteriaType::AzeriteLevelReached: + case CriteriaType::ReachRenownLevel: SetCriteriaProgress(criteria, miscValue1, referencePlayer, PROGRESS_HIGHEST); break; case CriteriaType::ReachLevel: @@ -3138,7 +3139,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 }); if (choiceItr == formModelData->Choices->end()) return false; - if (int32(reqValue) != formModelData->Displays[std::distance(formModelData->Choices->begin(), choiceItr)]->DisplayID) + if (int32(reqValue) != formModelData->Displays[std::distance(formModelData->Choices->begin(), choiceItr)]->CreatureDisplayInfoID) return false; break; } @@ -3270,51 +3271,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 break; } case ModifierTreeType::PlayerHasTraitNodeEntryInActiveConfig: // 340 - { - auto hasTraitNodeEntry = [referencePlayer, reqValue]() - { - for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs) - { - if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat) - { - if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID - || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) - continue; - } - - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) - if (traitEntry.TraitNodeEntryID == int32(reqValue)) - return true; - } - return false; - }(); - if (!hasTraitNodeEntry) - return false; - break; - } case ModifierTreeType::PlayerHasTraitNodeEntryInActiveConfigRankGreaterOrEqualThan: // 341 - { - auto traitNodeEntryRank = [referencePlayer, secondaryAsset]() -> Optional<uint16> - { - for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs) - { - if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat) - { - if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID - || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec)) - continue; - } - - for (UF::TraitEntry const& traitEntry : traitConfig.Entries) - if (traitEntry.TraitNodeEntryID == int32(secondaryAsset)) - return traitEntry.Rank; - } - return {}; - }(); - if (!traitNodeEntryRank || traitNodeEntryRank < int32(reqValue)) - return false; - break; - } + return false; case ModifierTreeType::PlayerDaysSinceLogout: // 344 if (GameTime::GetGameTime() - referencePlayer->m_playerData->LogoutTime < int64(reqValue) * DAY) return false; @@ -3389,6 +3347,24 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 return false; break; } + case ModifierTreeType::PlayerHasActiveTraitSubTree: // 385 + return false; + case ModifierTreeType::TargetCreatureClassificationEqual: // 389 + { + Creature const* targetCreature = Object::ToCreature(ref); + if (!targetCreature) + return false; + if (targetCreature->GetCreatureClassification() != CreatureClassifications(reqValue)) + return false; + break; + } + case ModifierTreeType::PlayerHasCompletedQuestOrIsReadyToTurnIn: // 392 + { + QuestStatus status = referencePlayer->GetQuestStatus(reqValue); + if (status != QUEST_STATUS_COMPLETE && status != QUEST_STATUS_REWARDED) + return false; + break; + } default: return false; } @@ -4059,8 +4035,8 @@ void CriteriaMgr::LoadCriteriaList() std::unordered_map<uint32 /*criteriaTreeID*/, ScenarioStepEntry const*> scenarioCriteriaTreeIds; for (ScenarioStepEntry const* scenarioStep : sScenarioStepStore) - if (scenarioStep->Criteriatreeid) - scenarioCriteriaTreeIds[scenarioStep->Criteriatreeid] = scenarioStep; + if (scenarioStep->CriteriatreeID) + scenarioCriteriaTreeIds[scenarioStep->CriteriatreeID] = scenarioStep; std::unordered_map<uint32 /*criteriaTreeID*/, QuestObjective const*> questObjectiveCriteriaTreeIds; for (auto const& [questId, quest] : sObjectMgr->GetQuestTemplates()) |