From d0cd2aae8a3d3f64edfe005372602c76ed9f39ca Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 3 Feb 2024 11:09:53 -0500 Subject: [PATCH] Core/Achievements: Implemented DefeatDungeonEncounter and DefeatDungeonEncounterWhileElegibleForLoot criteria types Port From (https://github.com/TrinityCore/TrinityCore/commit/765f86fdc001ce352a706d2950197b1007d9afce) --- Source/Framework/Constants/AchievementConst.cs | 4 ++-- Source/Game/Achievements/CriteriaHandler.cs | 13 +++++++++++-- Source/Game/Maps/Instances/InstanceScript.cs | 6 ++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index 9a08bdf53..51912e183 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -605,7 +605,7 @@ namespace Framework.Constants RollAnyGreed = 94, // Roll any number on greed ReleasedSpirit = 95, /*NYI*/ // Released Spirit AccountKnownPet = 96, /*NYI*/ // Account knows pet "{Creature}" (Backtracked) - DefeatDungeonEncounterWhileElegibleForLoot = 97, /*NYI*/ // Defeat Encounter "{DungeonEncounter}" While Eligible For Loot + DefeatDungeonEncounterWhileElegibleForLoot = 97, // Defeat Encounter "{DungeonEncounter}" While Eligible For Loot // UNUSED 18{} = 98, // Unused // UNUSED 19{} = 99, // Unused // UNUSED 20{} = 100, // Unused @@ -673,7 +673,7 @@ namespace Framework.Constants ActivelyEarnPetLevel = 162, // (Player) Actively earn level {#Level} with a pet by a player EnterArea = 163, // Enter Map Area "{AreaTable}" LeaveArea = 164, // Leave Map Area "{AreaTable}" - DefeatDungeonEncounter = 165, /*NYI*/ // Defeat Encounter "{DungeonEncounter}" + DefeatDungeonEncounter = 165, // Defeat Encounter "{DungeonEncounter}" PlaceAnyGarrisonBuilding = 166, /*NYI*/ // Garrison Building: Place any PlaceGarrisonBuilding = 167, // Garrison Building: Place "{GarrBuilding}" ActivateAnyGarrisonBuilding = 168, // Garrison Building: Activate any diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 192806106..ffae2fa67 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -126,8 +126,10 @@ namespace Game.Achievements case CriteriaType.PlayerTriggerGameEvent: case CriteriaType.Login: case CriteriaType.AnyoneTriggerGameEventScenario: + case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: case CriteriaType.BattlePetReachLevel: case CriteriaType.ActivelyEarnPetLevel: + case CriteriaType.DefeatDungeonEncounter: case CriteriaType.PlaceGarrisonBuilding: case CriteriaType.ActivateAnyGarrisonBuilding: case CriteriaType.HonorLevelIncrease: @@ -385,7 +387,6 @@ namespace Game.Achievements case CriteriaType.AccountObtainPetThroughBattle: case CriteriaType.WinPetBattle: case CriteriaType.PlayerObtainPetThroughBattle: - case CriteriaType.DefeatDungeonEncounter: case CriteriaType.ActivateGarrisonBuilding: case CriteriaType.UpgradeGarrison: case CriteriaType.StartAnyGarrisonMissionWithFollowerType: @@ -409,7 +410,6 @@ namespace Game.Achievements case CriteriaType.BattlePetAchievementPointsEarned: case CriteriaType.ReleasedSpirit: case CriteriaType.AccountKnownPet: - case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: case CriteriaType.CompletedLFGDungeon: case CriteriaType.KickInitiatorInLFGDungeon: case CriteriaType.KickVoterInLFGDungeon: @@ -781,6 +781,7 @@ namespace Game.Achievements case CriteriaType.CatchFishInFishingHole: case CriteriaType.LearnSpellFromSkillLine: case CriteriaType.WinDuel: + case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: case CriteriaType.GetLootByType: case CriteriaType.LearnTradeskillSkillLine: case CriteriaType.CompletedLFGDungeonWithStrangers: @@ -790,6 +791,7 @@ namespace Game.Achievements case CriteriaType.UniquePetsOwned: case CriteriaType.BattlePetReachLevel: case CriteriaType.ActivelyEarnPetLevel: + case CriteriaType.DefeatDungeonEncounter: case CriteriaType.LearnAnyTransmogInSlot: case CriteriaType.ParagonLevelIncreaseWithFaction: case CriteriaType.PlayerHasEarnedHonor: @@ -1174,6 +1176,11 @@ namespace Game.Achievements break; case CriteriaType.EarnTeamArenaRating: return false; + case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: + case CriteriaType.DefeatDungeonEncounter: + if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) + return false; + break; case CriteriaType.PlaceGarrisonBuilding: case CriteriaType.ActivateGarrisonBuilding: if (miscValue1 != criteria.Entry.Asset) @@ -4068,9 +4075,11 @@ namespace Game.Achievements case CriteriaType.GainAura: case CriteriaType.CatchFishInFishingHole: case CriteriaType.LearnSpellFromSkillLine: + case CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot: case CriteriaType.GetLootByType: case CriteriaType.LandTargetedSpellOnTarget: case CriteriaType.LearnTradeskillSkillLine: + case CriteriaType.DefeatDungeonEncounter: return true; default: return false; diff --git a/Source/Game/Maps/Instances/InstanceScript.cs b/Source/Game/Maps/Instances/InstanceScript.cs index 3e5d75692..524616c9d 100644 --- a/Source/Game/Maps/Instances/InstanceScript.cs +++ b/Source/Game/Maps/Instances/InstanceScript.cs @@ -384,6 +384,12 @@ namespace Game.Maps dungeonEncounter = bossInfo.GetDungeonEncounterForDifficulty(instance.GetDifficultyID()); if (dungeonEncounter != null) { + instance.DoOnPlayers(player => + { + if (!player.IsLockedToDungeonEncounter(dungeonEncounter.Id)) + player.UpdateCriteria(CriteriaType.DefeatDungeonEncounterWhileElegibleForLoot, dungeonEncounter.Id); + }); + DoUpdateCriteria(CriteriaType.DefeatDungeonEncounter, dungeonEncounter.Id); SendBossKillCredit(dungeonEncounter.Id); if (dungeonEncounter.CompleteWorldStateID != 0)