You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.6 KiB
215 lines
6.6 KiB
-- ----------------------------------------------------------------------------
|
|
-- Lua globals
|
|
-- ----------------------------------------------------------------------------
|
|
local pairs = _G.pairs
|
|
|
|
-- ----------------------------------------------------------------------------
|
|
-- AddOn namespace
|
|
-- ----------------------------------------------------------------------------
|
|
local AddOnFolderName, private = ...
|
|
local Data = private.Data
|
|
|
|
Data.Achievements = {}
|
|
|
|
local AchievementID = {
|
|
AdventurerOfAzsuna = 11261,
|
|
AdventurerOfDrustvar = 12941,
|
|
AdventurerOfHighmountain = 11264,
|
|
AdventurerOfNazmir = 12942,
|
|
AdventurerOfStormheim = 11263,
|
|
AdventurerOfStormsongValley = 12940,
|
|
AdventurerOfSuramar = 11265,
|
|
AdventurerOfTiragardeSound = 12939,
|
|
AdventurerOfValsharah = 11262,
|
|
AdventurerOfVoldun = 12943,
|
|
AdventurerOfZuldazar = 12944,
|
|
AncientNoMore = 9678,
|
|
BloodyRare = 1312,
|
|
BrokeBackPrecipice = 9571,
|
|
ChampionsOfLeiShen = 8103,
|
|
CommanderOfArgus = 12078,
|
|
CutOffTheHead = 9633,
|
|
FightThePower = 9655,
|
|
Frostbitten = 2257,
|
|
Glorious = 7439,
|
|
GorgrondMonsterHunter = 9400,
|
|
Hellbane = 10061,
|
|
HeraldsOfTheLegion = 9638,
|
|
HighValueTargets = 9216,
|
|
ImInYourBaseKillingYourDudes = 7932,
|
|
JungleStalker = 10070,
|
|
KingOfTheMonsters = 9601,
|
|
LifeFindsAWayToDie = 13048,
|
|
MakingTheCut = 9617,
|
|
MillionsOfYearsOfEvolutionVsMyFist = 8123,
|
|
MushroomHarvest = 13027,
|
|
NaxtVictim = 11841,
|
|
OneManArmy = 7317,
|
|
PraiseTheSun = 8028,
|
|
Predator = 10334,
|
|
SabertronAssemble = 13054,
|
|
TerrorsOfTheShore = 11786,
|
|
TheSongOfSilence = 9541,
|
|
TimelessChampion = 8714,
|
|
UnboundMonstrosities = 12587,
|
|
UnleashedMonstrosities = 11160,
|
|
WakeTheDragon = 11178,
|
|
ZulAgain = 8078
|
|
}
|
|
|
|
private.Enum.AchievementID = AchievementID
|
|
|
|
-- [npcID] = criteriaID
|
|
local DefaultAchievementCriteriaNPCs = {
|
|
[AchievementID.AdventurerOfStormheim] = {
|
|
[92604] = true, -- Champion Elodie
|
|
[92609] = true, -- Tracker Jack
|
|
[92611] = true, -- Ambusher Daggerfang
|
|
[92613] = true, -- Priestess Liza
|
|
[92626] = true, -- Deathguard Adams
|
|
[92631] = true, -- Dark Ranger Jess
|
|
[92633] = true, -- Assassin Huwe
|
|
[92634] = true, -- Apothecary Perez
|
|
},
|
|
[AchievementID.AncientNoMore] = {
|
|
[86258] = true, -- Nultra
|
|
[86259] = true, -- Valstil
|
|
},
|
|
[AchievementID.ImInYourBaseKillingYourDudes] = {
|
|
[68317] = true, -- Mavis Harms
|
|
[68318] = true, -- Dalan Nightbreaker
|
|
[68319] = true, -- Disha Fearwarden
|
|
[68320] = true, -- Ubunti the Shade
|
|
[68321] = true, -- Kar Warmaker
|
|
[68322] = true, -- Muerta
|
|
},
|
|
[AchievementID.MillionsOfYearsOfEvolutionVsMyFist] = {
|
|
[69161] = true, -- Oondasta
|
|
},
|
|
[AchievementID.PraiseTheSun] = {
|
|
[69099] = true, -- Nalak¸
|
|
},
|
|
[AchievementID.Predator] = {
|
|
[96235] = true, -- Xemirkol
|
|
},
|
|
[AchievementID.UnleashedMonstrosities] = {
|
|
[106981] = true, -- Captain Hring
|
|
[106982] = true, -- Reaver Jdorn
|
|
[106984] = true, -- Soultrapper Mevra
|
|
},
|
|
[AchievementID.ZulAgain] = {
|
|
[69768] = true, -- Zandalari Warscout
|
|
[69769] = true, -- Zandalari Warbringer
|
|
[69841] = true, -- Zandalari Warbringer
|
|
[69842] = true, -- Zandalari Warbringer
|
|
},
|
|
}
|
|
|
|
local CriteriaType = {
|
|
NPCKill = 0,
|
|
Quest = 27,
|
|
Spell = 28,
|
|
Item = 36,
|
|
}
|
|
|
|
local CriteriaTypeFields = {
|
|
[CriteriaType.Quest] = "achievementQuestID",
|
|
[CriteriaType.Spell] = "achievementSpellID",
|
|
[CriteriaType.Item] = "achievementItemID",
|
|
}
|
|
|
|
local function AssignAchievementDataToNPC(npc, achievementAssetName, achievementID, achievementCriteriaID, isCriteriaCompleted)
|
|
npc.achievementAssetName = achievementAssetName
|
|
npc.achievementID = achievementID
|
|
npc.achievementCriteriaID = achievementCriteriaID
|
|
npc.isCriteriaCompleted = isCriteriaCompleted
|
|
end
|
|
|
|
local function TryAssignNPCToAchievement(npcDataField, achievement, achievementLabel, achievementAssetID, achievementAssetName, achievementCriteriaID, isCriteriaCompleted)
|
|
local foundMatch = false
|
|
|
|
for npcID in pairs(Data.NPCs) do
|
|
local npc = Data.NPCs[npcID]
|
|
|
|
if npc[npcDataField] == achievementAssetID then
|
|
foundMatch = true
|
|
|
|
AssignAchievementDataToNPC(npc, achievementAssetName, achievement.ID, achievementCriteriaID, isCriteriaCompleted)
|
|
achievement.criteriaNPCs[npcID] = npc
|
|
end
|
|
end
|
|
|
|
if not foundMatch then
|
|
private.Debug("** AchievementID.%s - (criteriaID %s): %s = %d, -- %s", achievementLabel, achievementCriteriaID, npcDataField, achievementAssetID, achievementAssetName)
|
|
end
|
|
end
|
|
|
|
local function InitializeAchievements()
|
|
for achievementLabel, achievementID in pairs(AchievementID) do
|
|
local _, name, _, isCompleted, _, _, _, description, _, iconTexturePath = _G.GetAchievementInfo(achievementID)
|
|
|
|
local achievement = {
|
|
ID = achievementID,
|
|
criteriaNPCs = {},
|
|
description = description,
|
|
iconTexturePath = iconTexturePath,
|
|
isCompleted = isCompleted,
|
|
name = name
|
|
}
|
|
|
|
Data.Achievements[achievementID] = achievement
|
|
|
|
local defaultNPCs = DefaultAchievementCriteriaNPCs[achievementID]
|
|
if defaultNPCs then
|
|
for npcID, criteriaID in pairs(defaultNPCs) do
|
|
local npc = Data.NPCs[npcID]
|
|
|
|
if _G.type(criteriaID) == "number" then
|
|
local assetName, _, isCriteriaCompleted = _G.GetAchievementCriteriaInfo(achievementID, criteriaID)
|
|
|
|
AssignAchievementDataToNPC(npc, assetName, achievementID, criteriaID, isCriteriaCompleted)
|
|
else
|
|
AssignAchievementDataToNPC(npc, nil, achievementID)
|
|
end
|
|
|
|
achievement.criteriaNPCs[npcID] = npc
|
|
end
|
|
end
|
|
|
|
for criteriaIndex = 1, _G.GetAchievementNumCriteria(achievementID) do
|
|
local assetName, criteriaType, isCriteriaCompleted, _, _, _, _, assetID, _, criteriaID = _G.GetAchievementCriteriaInfo(achievementID, criteriaIndex)
|
|
|
|
if criteriaType == CriteriaType.NPCKill then
|
|
if assetID > 0 then
|
|
local found
|
|
|
|
for _, map in pairs(Data.Maps) do
|
|
if map.NPCs[assetID] then
|
|
found = true
|
|
break
|
|
end
|
|
end
|
|
|
|
if found then
|
|
local npc = Data.NPCs[assetID]
|
|
|
|
AssignAchievementDataToNPC(npc, assetName, achievementID, criteriaID, isCriteriaCompleted)
|
|
achievement.criteriaNPCs[assetID] = npc
|
|
else
|
|
private.Debug("** AchievementID.%s - (criteriaID %d): NPC %s with assetID %d", achievementLabel, criteriaID, assetName, assetID)
|
|
end
|
|
end
|
|
else
|
|
local dataField = CriteriaTypeFields[criteriaType]
|
|
|
|
if dataField then
|
|
TryAssignNPCToAchievement(dataField, achievement, achievementLabel, assetID, assetName, criteriaID, isCriteriaCompleted)
|
|
else
|
|
private.Debug("** AchievementID.%s: Unknown criteria type %d, assetID %d", achievementLabel, criteriaType, assetID)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
private.InitializeAchievements = InitializeAchievements
|
|
|