mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Achievements: Fix CriteriaTypes related to areas and zones (#29367)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -1132,6 +1132,8 @@ struct CriteriaEntry
|
||||
int32 AchievementID;
|
||||
|
||||
// CriteriaType::CompleteQuestsInZone = 11
|
||||
// CriteriaType::EnterTopLevelArea = 225
|
||||
// CriteriaType::LeaveTopLevelArea = 226
|
||||
int32 ZoneID;
|
||||
|
||||
// CriteriaType::CurrencyGained = 12
|
||||
@@ -1165,8 +1167,6 @@ struct CriteriaEntry
|
||||
// CriteriaType::PVPKillInArea = 31
|
||||
// CriteriaType::EnterArea = 163
|
||||
// CriteriaType::LeaveArea = 164
|
||||
// CriteriaType::EnterTopLevelArea = 225
|
||||
// CriteriaType::LeaveTopLevelArea = 226
|
||||
int32 AreaID;
|
||||
|
||||
// CriteriaType::AcquireItem = 36
|
||||
|
||||
@@ -662,8 +662,8 @@ enum class CriteriaType : uint8
|
||||
BattlePetReachLevel = 160, // (Account Only) Battle pet has reached level {#Level}
|
||||
PlayerObtainPetThroughBattle = 161, /*NYI*/ // (Player) Obtain a pet through battle
|
||||
ActivelyEarnPetLevel = 162, // (Player) Actively earn level {#Level} with a pet by a player
|
||||
EnterArea = 163, /*NYI*/ // Enter Map Area "{AreaTable}"
|
||||
LeaveArea = 164, /*NYI*/ // Leave Map Area "{AreaTable}"
|
||||
EnterArea = 163, // Enter Map Area "{AreaTable}"
|
||||
LeaveArea = 164, // Leave Map Area "{AreaTable}"
|
||||
DefeatDungeonEncounter = 165, /*NYI*/ // Defeat Encounter "{DungeonEncounter}"
|
||||
PlaceAnyGarrisonBuilding = 166, /*NYI*/ // Garrison Building: Place any
|
||||
PlaceGarrisonBuilding = 167, // Garrison Building: Place "{GarrBuilding}"
|
||||
@@ -725,7 +725,7 @@ enum class CriteriaType : uint8
|
||||
LearnTransmogIllusion = 223, /*NYI*/ // Learn Transmog Illusion
|
||||
LearnAnyTransmogIllusion = 224, /*NYI*/ // Learn Any Transmog Illusion
|
||||
EnterTopLevelArea = 225, // Enter Top Level Map Area "{AreaTable}"
|
||||
LeaveTopLevelArea = 226, /*NYI*/ // Leave Top Level Map Area "{AreaTable}"
|
||||
LeaveTopLevelArea = 226, // Leave Top Level Map Area "{AreaTable}"
|
||||
SocketGarrisonTalent = 227, /*NYI*/ // Socket Garrison Talent {GarrTalent}
|
||||
SocketAnySoulbindConduit = 228, /*NYI*/ // Socket Any Soulbind Conduit
|
||||
ObtainAnyItemWithCurrencyValue = 229, /*NYI*/ // Obtain Any Item With Currency Value "{CurrencyTypes}"
|
||||
|
||||
@@ -7557,13 +7557,17 @@ void Player::UpdateArea(uint32 newArea)
|
||||
|
||||
PushQuests();
|
||||
|
||||
UpdateCriteria(CriteriaType::EnterTopLevelArea, newArea);
|
||||
|
||||
UpdateMountCapability();
|
||||
|
||||
if ((oldAreaEntry && oldAreaEntry->GetFlags2().HasFlag(AreaFlags2::UseSubzoneForChatChannel))
|
||||
|| (area && area->GetFlags2().HasFlag(AreaFlags2::UseSubzoneForChatChannel)))
|
||||
UpdateLocalChannels(newArea);
|
||||
|
||||
if (oldArea != newArea)
|
||||
{
|
||||
UpdateCriteria(CriteriaType::EnterArea, newArea);
|
||||
UpdateCriteria(CriteriaType::LeaveArea, oldArea);
|
||||
}
|
||||
}
|
||||
|
||||
void Player::UpdateZone(uint32 newZone, uint32 newArea)
|
||||
@@ -7643,6 +7647,8 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
|
||||
SendInitWorldStates(newZone, newArea); // only if really enters to new zone, not just area change, works strange...
|
||||
if (Guild* guild = GetGuild())
|
||||
guild->UpdateMemberData(this, GUILD_MEMBER_DATA_ZONEID, newZone);
|
||||
UpdateCriteria(CriteriaType::EnterTopLevelArea, newZone);
|
||||
UpdateCriteria(CriteriaType::LeaveTopLevelArea, oldZone);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user