Core/Achievements: Fix CriteriaTypes related to areas and zones

Port From (https://github.com/TrinityCore/TrinityCore/commit/10b06ff50f77cc0516c5f17adffef8eb75f1d555)
This commit is contained in:
hondacrx
2024-02-01 10:55:35 -05:00
parent c00a8d32ea
commit fde94074be
3 changed files with 37 additions and 17 deletions
@@ -666,8 +666,8 @@ namespace Framework.Constants
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}"
@@ -729,7 +729,7 @@ namespace Framework.Constants
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}"
+25 -12
View File
@@ -133,11 +133,9 @@ namespace Game.Achievements
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, ProgressType.Accumulate);
break;
// std case: increment at miscValue1
@@ -246,16 +244,21 @@ namespace Game.Achievements
// 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:
@@ -381,8 +384,6 @@ namespace Game.Achievements
case CriteriaType.AccountObtainPetThroughBattle:
case CriteriaType.WinPetBattle:
case CriteriaType.PlayerObtainPetThroughBattle:
case CriteriaType.EnterArea:
case CriteriaType.LeaveArea:
case CriteriaType.DefeatDungeonEncounter:
case CriteriaType.ActivateGarrisonBuilding:
case CriteriaType.UpgradeGarrison:
@@ -767,14 +768,11 @@ namespace Game.Achievements
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:
@@ -801,18 +799,24 @@ namespace Game.Achievements
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);
@@ -1148,10 +1152,14 @@ namespace Game.Achievements
return false;
break;
case CriteriaType.PVPKillInArea:
case CriteriaType.EnterTopLevelArea:
case CriteriaType.EnterArea:
if (miscValue1 == 0 || !Global.DB2Mgr.IsInArea((uint)miscValue1, criteria.Entry.Asset))
return false;
break;
case CriteriaType.LeaveArea:
if (miscValue1 == 0 || Global.DB2Mgr.IsInArea((uint)miscValue1, criteria.Entry.Asset))
return false;
break;
case CriteriaType.CurrencyGained:
if (miscValue1 == 0 || miscValue2 == 0 || (long)miscValue2 < 0
|| miscValue1 != criteria.Entry.Asset)
@@ -1185,6 +1193,11 @@ namespace Game.Achievements
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
case CriteriaType.EnterTopLevelArea:
case CriteriaType.LeaveTopLevelArea:
if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset)
return false;
break;
default:
break;
}
+9 -2
View File
@@ -134,13 +134,17 @@ namespace Game.Entities
PushQuests();
UpdateCriteria(CriteriaType.EnterTopLevelArea, newArea);
UpdateMountCapability();
if ((oldAreaEntry != null && oldAreaEntry.GetFlags2().HasFlag(AreaFlags2.UseSubzoneForChatChannel))
|| (area != null && area.GetFlags2().HasFlag(AreaFlags2.UseSubzoneForChatChannel)))
UpdateLocalChannels(newArea);
if (oldArea != newArea)
{
UpdateCriteria(CriteriaType.EnterArea, newArea);
UpdateCriteria(CriteriaType.LeaveArea, oldArea);
}
}
public void UpdateZone(uint newZone, uint newArea)
@@ -223,6 +227,9 @@ namespace Game.Entities
Guild guild = GetGuild();
if (guild != null)
guild.UpdateMemberData(this, GuildMemberData.ZoneId, newZone);
UpdateCriteria(CriteriaType.EnterTopLevelArea, newZone);
UpdateCriteria(CriteriaType.LeaveTopLevelArea, oldZone);
}
}