From 607f891fa860af2f73bc42e4e84275062736d9aa Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 22 Aug 2021 23:12:19 -0400 Subject: [PATCH] Core/Achievements: Several criteria fixes Port From (https://github.com/TrinityCore/TrinityCore/commit/bca465a5694101c476dc01aeafa95dfb3531e427) --- .../Framework/Constants/AchievementConst.cs | 10 ++-- Source/Game/Achievements/CriteriaHandler.cs | 56 +++++++++++-------- Source/Game/Entities/Player/Player.Items.cs | 12 ++-- Source/Game/Entities/Player/Player.cs | 1 + Source/Game/Handlers/LootHandler.cs | 4 +- 5 files changed, 48 insertions(+), 35 deletions(-) diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index 465c0851d..8e14652d1 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -526,7 +526,7 @@ namespace Framework.Constants GainReputation = 46, GainExaltedReputation = 47, VisitBarberShop = 48, - EquipEpicItem = 49, + EquipItemInSlot = 49, RollNeedOnLoot = 50, /// Todo Itemlevel Is Mentioned In Text But Not Present In Dbc RollGreedOnLoot = 51, HkClass = 52, @@ -567,8 +567,8 @@ namespace Framework.Constants GainReveredReputation = 87, GainHonoredReputation = 88, KnownFactions = 89, - LootEpicItem = 90, - ReceiveEpicItem = 91, + LootAnyItem = 90, + ObtainAnyItem = 91, SendEventScenario = 92, RollNeed = 93, RollGreed = 94, @@ -669,9 +669,10 @@ namespace Framework.Constants OwnHeirlooms = 189, ArtifactPowerEarned = 190, ArtifactTraitsUnlocked = 191, + OwnItemModifiedAppearance = 192, HonorLevelReached = 194, PrestigeReached = 195, - // 196 - CRITERIA_TYPE_REACH_LEVEL_2 or something + ActivelyReachLevel = 196, // 197 - Order Hall Advancement related OrderHallTalentLearned = 198, AppearanceUnlockedBySlot = 199, @@ -684,6 +685,7 @@ namespace Framework.Constants GainParagonReputation = 206, EarnHonorXp = 207, RelicTalentUnlocked = 211, + ExpansionLevel = 212, ReachAccountHonorLevel = 213, HeartOfAzerothArtifactPowerEarned = 214, HeartOfAzerothLevelReached = 215, diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 88f20362e..cbf3222d2 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -106,8 +106,8 @@ namespace Game.Achievements case CriteriaTypes.QuestAbandoned: case CriteriaTypes.FlightPathsTaken: case CriteriaTypes.AcceptedSummonings: - case CriteriaTypes.LootEpicItem: - case CriteriaTypes.ReceiveEpicItem: + case CriteriaTypes.LootAnyItem: + case CriteriaTypes.ObtainAnyItem: case CriteriaTypes.Death: case CriteriaTypes.CompleteDailyQuest: case CriteriaTypes.CompleteBattleground: @@ -139,7 +139,6 @@ namespace Game.Achievements case CriteriaTypes.OnLogin: case CriteriaTypes.PlaceGarrisonBuilding: case CriteriaTypes.UpgradeGarrisonBuilding: - case CriteriaTypes.OwnBattlePetCount: case CriteriaTypes.HonorLevelReached: case CriteriaTypes.PrestigeReached: case CriteriaTypes.CompleteQuestAccumulate: @@ -258,11 +257,12 @@ namespace Game.Achievements case CriteriaTypes.LearnSpell: case CriteriaTypes.ExploreArea: case CriteriaTypes.VisitBarberShop: - case CriteriaTypes.EquipEpicItem: + case CriteriaTypes.EquipItemInSlot: case CriteriaTypes.EquipItem: case CriteriaTypes.CompleteAchievement: case CriteriaTypes.RecruitGarrisonFollower: case CriteriaTypes.OwnBattlePet: + case CriteriaTypes.ActivelyReachLevel: SetCriteriaProgress(criteria, 1, referencePlayer); break; case CriteriaTypes.BuyBankSlot: @@ -352,6 +352,9 @@ namespace Game.Achievements } break; } + case CriteriaTypes.OwnBattlePetCount: + SetCriteriaProgress(criteria, referencePlayer.GetSession().GetBattlePetMgr().GetPetUniqueSpeciesCount(), referencePlayer); + break; case CriteriaTypes.ReachGuildLevel: SetCriteriaProgress(criteria, miscValue1, referencePlayer); break; @@ -447,6 +450,8 @@ namespace Game.Achievements case CriteriaTypes.MythicKeystoneCompleted: case CriteriaTypes.ApplyConduit: case CriteriaTypes.ConvertItemsToCurrency: + case CriteriaTypes.ExpansionLevel: + case CriteriaTypes.OwnItemModifiedAppearance: break; // Not implemented yet :( } @@ -794,7 +799,7 @@ namespace Game.Achievements case CriteriaTypes.GainReputation: case CriteriaTypes.GainExaltedReputation: case CriteriaTypes.VisitBarberShop: - case CriteriaTypes.EquipEpicItem: + case CriteriaTypes.EquipItemInSlot: case CriteriaTypes.RollNeedOnLoot: case CriteriaTypes.RollGreedOnLoot: case CriteriaTypes.HkClass: @@ -835,6 +840,7 @@ namespace Game.Achievements case CriteriaTypes.OwnBattlePet: case CriteriaTypes.HonorLevelReached: case CriteriaTypes.PrestigeReached: + case CriteriaTypes.ActivelyReachLevel: case CriteriaTypes.TransmogSetUnlocked: return progress.Counter >= 1; case CriteriaTypes.LearnSkillLevel: @@ -939,11 +945,13 @@ namespace Game.Achievements case CriteriaTypes.HighestHitDealt: case CriteriaTypes.HighestHitReceived: case CriteriaTypes.HonorableKill: + case CriteriaTypes.LootAnyItem: case CriteriaTypes.LootMoney: case CriteriaTypes.LoseDuel: case CriteriaTypes.MoneyFromQuestReward: case CriteriaTypes.MoneyFromVendors: case CriteriaTypes.NumberOfTalentResets: + case CriteriaTypes.ObtainAnyItem: case CriteriaTypes.QuestAbandoned: case CriteriaTypes.ReachGuildLevel: case CriteriaTypes.RollGreed: @@ -974,6 +982,7 @@ namespace Game.Achievements case CriteriaTypes.KnownFactions: case CriteriaTypes.ReachLevel: case CriteriaTypes.OnLogin: + case CriteriaTypes.OwnBattlePetCount: break; case CriteriaTypes.CompleteAchievement: if (!RequiredAchievementSatisfied(criteria.Entry.Asset)) @@ -1118,8 +1127,9 @@ namespace Game.Achievements if (miscValue1 != 0 && miscValue1 != criteria.Entry.Asset) return false; break; - case CriteriaTypes.EquipEpicItem: - // miscValue1 = itemSlot miscValue2 = itemid + case CriteriaTypes.EquipItemInSlot: + case CriteriaTypes.AppearanceUnlockedBySlot: + // miscValue1 = EquipmentSlot miscValue2 = itemid | itemModifiedAppearanceId if (miscValue2 == 0 || miscValue1 != criteria.Entry.Asset) return false; break; @@ -1164,16 +1174,6 @@ namespace Game.Achievements if (miscValue1 != 0 && miscValue1 != criteria.Entry.Asset) return false; break; - case CriteriaTypes.LootEpicItem: - case CriteriaTypes.ReceiveEpicItem: - { - if (miscValue1 == 0) - return false; - ItemTemplate proto = Global.ObjectMgr.GetItemTemplate((uint)miscValue1); - if (proto == null || proto.GetQuality() < ItemQuality.Epic) - return false; - break; - } case CriteriaTypes.HkClass: if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) return false; @@ -1187,6 +1187,7 @@ namespace Game.Achievements return false; break; case CriteriaTypes.HonorableKillAtArea: + case CriteriaTypes.TravelledToArea: if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) return false; break; @@ -1202,13 +1203,22 @@ namespace Game.Achievements case CriteriaTypes.HighestTeamRating: return false; case CriteriaTypes.PlaceGarrisonBuilding: + case CriteriaTypes.ConstructGarrisonBuilding: if (miscValue1 != criteria.Entry.Asset) return false; break; - case CriteriaTypes.TravelledToArea: + case CriteriaTypes.RecruitGarrisonFollower: if (miscValue1 != criteria.Entry.Asset) return false; break; + case CriteriaTypes.TransmogSetUnlocked: + if (miscValue1 != criteria.Entry.Asset) + return false; + break; + case CriteriaTypes.ActivelyReachLevel: + if (miscValue1 == 0 || miscValue1 != criteria.Entry.Asset) + return false; + break; default: break; } @@ -3860,7 +3870,7 @@ namespace Game.Achievements case CriteriaTypes.LootItem: case CriteriaTypes.ExploreArea: case CriteriaTypes.GainReputation: - case CriteriaTypes.EquipEpicItem: + case CriteriaTypes.EquipItemInSlot: case CriteriaTypes.HkClass: case CriteriaTypes.HkRace: case CriteriaTypes.DoEmote: @@ -4089,7 +4099,7 @@ namespace Game.Achievements case CriteriaTypes.CastSpell2: case CriteriaTypes.BeSpellTarget: case CriteriaTypes.BeSpellTarget2: - case CriteriaTypes.EquipEpicItem: + case CriteriaTypes.EquipItemInSlot: case CriteriaTypes.RollNeedOnLoot: case CriteriaTypes.RollGreedOnLoot: case CriteriaTypes.BgObjectiveCapture: @@ -4099,8 +4109,8 @@ namespace Game.Achievements case CriteriaTypes.GetKillingBlows: case CriteriaTypes.ReachLevel: case CriteriaTypes.OnLogin: - case CriteriaTypes.LootEpicItem: - case CriteriaTypes.ReceiveEpicItem: + case CriteriaTypes.LootAnyItem: + case CriteriaTypes.ObtainAnyItem: break; default: if (DataType != CriteriaDataType.Script) @@ -4402,7 +4412,7 @@ namespace Game.Achievements { Criteria entry = Global.CriteriaMgr.GetCriteria(criteriaId); - uint itemId = entry.Entry.Type == CriteriaTypes.EquipEpicItem ? miscValue2 : miscValue1; + uint itemId = entry.Entry.Type == CriteriaTypes.EquipItemInSlot ? miscValue2 : miscValue1; ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(itemId); if (itemTemplate == null) return false; diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index 23840ae02..280fa9d3e 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -1268,7 +1268,7 @@ namespace Game.Entities if (item != null) { ItemAddedQuestCheck(itemId, count); - UpdateCriteria(CriteriaTypes.ReceiveEpicItem, itemId, count); + UpdateCriteria(CriteriaTypes.ObtainAnyItem, itemId, count); UpdateCriteria(CriteriaTypes.OwnItem, itemId, 1); item.AddItemFlag(ItemFieldFlags.NewItem); @@ -1539,7 +1539,7 @@ namespace Game.Entities if (pItem != null) { ItemAddedQuestCheck(item, 1); - UpdateCriteria(CriteriaTypes.ReceiveEpicItem, item, 1); + UpdateCriteria(CriteriaTypes.ObtainAnyItem, item, 1); return EquipItem(pos, pItem, update); } @@ -1648,7 +1648,7 @@ namespace Game.Entities // only for full equip instead adding to stack UpdateCriteria(CriteriaTypes.EquipItem, pItem.GetEntry()); - UpdateCriteria(CriteriaTypes.EquipEpicItem, slot, pItem.GetEntry()); + UpdateCriteria(CriteriaTypes.EquipItemInSlot, slot, pItem.GetEntry()); UpdateAverageItemLevelEquipped(); @@ -1776,7 +1776,7 @@ namespace Game.Entities CheckTitanGripPenalty(); UpdateCriteria(CriteriaTypes.EquipItem, pItem.GetEntry()); - UpdateCriteria(CriteriaTypes.EquipEpicItem, slot, pItem.GetEntry()); + UpdateCriteria(CriteriaTypes.EquipItemInSlot, slot, pItem.GetEntry()); } } public void SendEquipError(InventoryResult msg, Item item1 = null, Item item2 = null, uint itemId = 0) @@ -4236,7 +4236,7 @@ namespace Game.Entities { // update quest counters ItemAddedQuestCheck(pItem.GetEntry(), pItem.GetCount()); - UpdateCriteria(CriteriaTypes.ReceiveEpicItem, pItem.GetEntry(), pItem.GetCount()); + UpdateCriteria(CriteriaTypes.ObtainAnyItem, pItem.GetEntry(), pItem.GetCount()); // store item Item pLastItem = StoreItem(dest, pItem, update); @@ -5934,7 +5934,7 @@ namespace Game.Entities SendNewItem(newitem, item.count, false, false, true); UpdateCriteria(CriteriaTypes.LootItem, item.itemid, item.count); UpdateCriteria(CriteriaTypes.LootType, item.itemid, item.count, (ulong)loot.loot_type); - UpdateCriteria(CriteriaTypes.LootEpicItem, item.itemid, item.count); + UpdateCriteria(CriteriaTypes.LootAnyItem, item.itemid, item.count); } else aeResult.Add(newitem, item.count, loot.loot_type); diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 4045a5ccd..89ab06a50 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -5259,6 +5259,7 @@ namespace Game.Entities } UpdateCriteria(CriteriaTypes.ReachLevel); + UpdateCriteria(CriteriaTypes.ActivelyReachLevel, level); PushQuests(); diff --git a/Source/Game/Handlers/LootHandler.cs b/Source/Game/Handlers/LootHandler.cs index 9677ef260..9a6c110f3 100644 --- a/Source/Game/Handlers/LootHandler.cs +++ b/Source/Game/Handlers/LootHandler.cs @@ -106,7 +106,7 @@ namespace Game player.SendNewItem(resultValue.item, resultValue.count, false, false, true); player.UpdateCriteria(CriteriaTypes.LootItem, resultValue.item.GetEntry(), resultValue.count); player.UpdateCriteria(CriteriaTypes.LootType, resultValue.item.GetEntry(), resultValue.count, (ulong)resultValue.lootType); - player.UpdateCriteria(CriteriaTypes.LootEpicItem, resultValue.item.GetEntry(), resultValue.count); + player.UpdateCriteria(CriteriaTypes.LootAnyItem, resultValue.item.GetEntry(), resultValue.count); } } } @@ -553,7 +553,7 @@ namespace Game target.SendNewItem(resultValue.item, resultValue.count, false, false, true); target.UpdateCriteria(CriteriaTypes.LootItem, resultValue.item.GetEntry(), resultValue.count); target.UpdateCriteria(CriteriaTypes.LootType, resultValue.item.GetEntry(), resultValue.count, (ulong)resultValue.lootType); - target.UpdateCriteria(CriteriaTypes.LootEpicItem, resultValue.item.GetEntry(), resultValue.count); + target.UpdateCriteria(CriteriaTypes.LootAnyItem, resultValue.item.GetEntry(), resultValue.count); } }