aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/CriteriaHandler.cpp
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2023-10-15 16:42:17 +0200
committerGitHub <noreply@github.com>2023-10-15 16:42:17 +0200
commit10b06ff50f77cc0516c5f17adffef8eb75f1d555 (patch)
tree73b70118cb1431f680335f1249f4a6a6e2e43599 /src/server/game/Achievements/CriteriaHandler.cpp
parent0f7dd4eadf90a5407fd232d083485430d725152f (diff)
Core/Achievements: Fix CriteriaTypes related to areas and zones (#29367)
Diffstat (limited to 'src/server/game/Achievements/CriteriaHandler.cpp')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 8375e9943bf..9718600ccc7 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -551,11 +551,9 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::HonorLevelIncrease:
case CriteriaType::PrestigeLevelIncrease:
case CriteriaType::LearnAnyTransmogInSlot:
- case CriteriaType::CollectTransmogSetFromGroup:
case CriteriaType::CompleteAnyReplayQuest:
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
- case CriteriaType::EnterTopLevelArea:
SetCriteriaProgress(criteria, 1, referencePlayer, PROGRESS_ACCUMULATE);
break;
// std case: increment at miscValue1
@@ -662,16 +660,21 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
// miscValue1 is the ingame fallheight*100 as stored in dbc
SetCriteriaProgress(criteria, miscValue1, referencePlayer);
break;
+ case CriteriaType::EarnAchievement:
case CriteriaType::CompleteQuest:
case CriteriaType::LearnOrKnowSpell:
case CriteriaType::RevealWorldMapOverlay:
case CriteriaType::GotHaircut:
case CriteriaType::EquipItemInSlot:
case CriteriaType::EquipItem:
- case CriteriaType::EarnAchievement:
- case CriteriaType::RecruitGarrisonFollower:
case CriteriaType::LearnedNewPet:
+ case CriteriaType::EnterArea:
+ case CriteriaType::LeaveArea:
+ case CriteriaType::RecruitGarrisonFollower:
case CriteriaType::ActivelyReachLevel:
+ case CriteriaType::CollectTransmogSetFromGroup:
+ case CriteriaType::EnterTopLevelArea:
+ case CriteriaType::LeaveTopLevelArea:
SetCriteriaProgress(criteria, 1, referencePlayer);
break;
case CriteriaType::BankSlotsPurchased:
@@ -795,8 +798,6 @@ void CriteriaHandler::UpdateCriteria(CriteriaType type, uint64 miscValue1 /*= 0*
case CriteriaType::AccountObtainPetThroughBattle:
case CriteriaType::WinPetBattle:
case CriteriaType::PlayerObtainPetThroughBattle:
- case CriteriaType::EnterArea:
- case CriteriaType::LeaveArea:
case CriteriaType::DefeatDungeonEncounter:
case CriteriaType::ActivateGarrisonBuilding:
case CriteriaType::UpgradeGarrison:
@@ -1181,14 +1182,11 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::BankSlotsPurchased:
case CriteriaType::ReputationGained:
case CriteriaType::TotalExaltedFactions:
- case CriteriaType::GotHaircut:
- case CriteriaType::EquipItemInSlot:
case CriteriaType::RollNeed:
case CriteriaType::RollGreed:
case CriteriaType::DeliverKillingBlowToClass:
case CriteriaType::DeliverKillingBlowToRace:
case CriteriaType::DoEmote:
- case CriteriaType::EquipItem:
case CriteriaType::MoneyEarnedFromQuesting:
case CriteriaType::MoneyLootedFromCreatures:
case CriteriaType::UseGameobject:
@@ -1215,18 +1213,24 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CriteriaType::CompleteAnyReplayQuest:
case CriteriaType::BuyItemsFromVendors:
case CriteriaType::SellItemsToVendors:
- case CriteriaType::EnterTopLevelArea:
return progress->Counter >= requiredAmount;
case CriteriaType::EarnAchievement:
case CriteriaType::CompleteQuest:
case CriteriaType::LearnOrKnowSpell:
case CriteriaType::RevealWorldMapOverlay:
- case CriteriaType::RecruitGarrisonFollower:
+ case CriteriaType::GotHaircut:
+ case CriteriaType::EquipItemInSlot:
+ case CriteriaType::EquipItem:
case CriteriaType::LearnedNewPet:
case CriteriaType::HonorLevelIncrease:
case CriteriaType::PrestigeLevelIncrease:
+ case CriteriaType::EnterArea:
+ case CriteriaType::LeaveArea:
+ case CriteriaType::RecruitGarrisonFollower:
case CriteriaType::ActivelyReachLevel:
case CriteriaType::CollectTransmogSetFromGroup:
+ case CriteriaType::EnterTopLevelArea:
+ case CriteriaType::LeaveTopLevelArea:
return progress->Counter >= 1;
case CriteriaType::AchieveSkillStep:
return progress->Counter >= (requiredAmount * 75);
@@ -1593,10 +1597,14 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
return false;
break;
case CriteriaType::PVPKillInArea:
- case CriteriaType::EnterTopLevelArea:
+ case CriteriaType::EnterArea:
if (!miscValue1 || !DB2Manager::IsInArea(uint32(miscValue1), uint32(criteria->Entry->Asset.AreaID)))
return false;
break;
+ case CriteriaType::LeaveArea:
+ if (!miscValue1 || DB2Manager::IsInArea(uint32(miscValue1), uint32(criteria->Entry->Asset.AreaID)))
+ return false;
+ break;
case CriteriaType::CurrencyGained:
if (!miscValue1 || !miscValue2 || int64(miscValue2) < 0
|| miscValue1 != uint32(criteria->Entry->Asset.CurrencyID))
@@ -1630,6 +1638,11 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis
if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.PlayerLevel))
return false;
break;
+ case CriteriaType::EnterTopLevelArea:
+ case CriteriaType::LeaveTopLevelArea:
+ if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.ZoneID))
+ return false;
+ break;
default:
break;
}