diff --git a/Source/Framework/Constants/AchievementConst.cs b/Source/Framework/Constants/AchievementConst.cs index 0722a7bc2..f29452539 100644 --- a/Source/Framework/Constants/AchievementConst.cs +++ b/Source/Framework/Constants/AchievementConst.cs @@ -101,18 +101,21 @@ namespace Framework.Constants public enum CriteriaAdditionalCondition { SourceDrunkValue = 1, - Unk2 = 2, + SourcePlayerCondition = 2, ItemLevel = 3, TargetCreatureEntry = 4, TargetMustBePlayer = 5, TargetMustBeDead = 6, TargetMustBeEnemy = 7, SourceHasAura = 8, + SourceHasAuraType = 9, TargetHasAura = 10, TargetHasAuraType = 11, + SourceAuraState = 12, + TargetAuraState = 13, ItemQualityMin = 14, ItemQualityEquals = 15, - Unk16 = 16, + SourceIsAlive = 16, SourceAreaOrZone = 17, TargetAreaOrZone = 18, MapDifficultyOld = 20, @@ -134,7 +137,7 @@ namespace Framework.Constants TargetLevel = 40, TargetZone = 41, TargetHealthPercentBelow = 46, - Unk55 = 55, + TargetPlayerCondition = 55, MinAchievementPoints = 56, RequiresLfgGroup = 58, Unk60 = 60, @@ -162,13 +165,16 @@ namespace Framework.Constants //CRITERIA_ADDITIONAL_CONDITION_UNK87 = 87, // Achievement id BattlePetSpecies = 91, Expansion = 92, + RewardedQuest = 110, + CompletedQuest = 111, + CompletedQuestObjective = 112, // NYI, QuestObjectiveID GarrisonFollowerEntry = 144, GarrisonFollowerQuality = 145, GarrisonFollowerLevel = 146, GarrisonRareMission = 147, // NYI GarrisonBuildingLevel = 149, // NYI GarrisonMissionType = 167, // NYI - PLayerItemLevel = 169, // NYI + PlayerItemLevel = 169, // NYI GarrisonFollowILvl = 184, HonorLevel = 193, PrestigeLevel = 194 diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index 140769eb6..2f130ed70 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -1189,6 +1189,13 @@ namespace Game.Achievements uint reqValue = tree.Entry.Asset; switch ((CriteriaAdditionalCondition)reqType) { + case CriteriaAdditionalCondition.SourcePlayerCondition: // 2 + { + PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(reqValue); + if (playerCondition == null || !ConditionManager.IsPlayerMeetingCondition(referencePlayer, playerCondition)) + return false; + break; + } case CriteriaAdditionalCondition.ItemLevel: // 3 { // miscValue1 is itemid @@ -1217,6 +1224,10 @@ namespace Game.Achievements if (!referencePlayer.HasAura(reqValue)) return false; break; + case CriteriaAdditionalCondition.SourceHasAuraType: // 9 + if (!referencePlayer.HasAuraType((AuraType)reqValue)) + return false; + break; case CriteriaAdditionalCondition.TargetHasAura: // 10 if (unit == null || !unit.HasAura(reqValue)) return false; @@ -1225,6 +1236,14 @@ namespace Game.Achievements if (unit == null || !unit.HasAuraType((AuraType)reqValue)) return false; break; + case CriteriaAdditionalCondition.SourceAuraState: // 12 + if (!referencePlayer.HasAuraState((AuraStateType)reqValue)) + return false; + break; + case CriteriaAdditionalCondition.TargetAuraState: // 13 + if (!unit || !unit.HasAuraState((AuraStateType)reqValue)) + return false; + break; case CriteriaAdditionalCondition.ItemQualityMin: // 14 { // miscValue1 is itemid @@ -1326,6 +1345,16 @@ namespace Game.Achievements if (unit == null || unit.GetHealthPct() >= reqValue) return false; break; + case CriteriaAdditionalCondition.TargetPlayerCondition: // 55 + { + if (unit == null || !unit.IsPlayer()) + return false; + + PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(reqValue); + if (playerCondition == null || !ConditionManager.IsPlayerMeetingCondition(unit.ToPlayer(), playerCondition)) + return false; + break; + } case CriteriaAdditionalCondition.RatedBattlegroundRating: // 64 if (referencePlayer.GetRBGPersonalRating() < reqValue) return false; @@ -1341,6 +1370,14 @@ namespace Game.Achievements if (miscValue1 != reqValue) return false; break; + case CriteriaAdditionalCondition.RewardedQuest: // 110 + if (!referencePlayer.GetQuestRewardStatus(reqValue)) + return false; + break; + case CriteriaAdditionalCondition.CompletedQuest: // 111 + if (referencePlayer.GetQuestStatus(reqValue) != QuestStatus.Complete) + return false; + break; case CriteriaAdditionalCondition.GarrisonFollowerEntry: // 144 { if (!referencePlayer)