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.
256 lines
8.3 KiB
256 lines
8.3 KiB
|
5 years ago
|
-- ========================================================================= --
|
||
|
|
-- SylingTracker --
|
||
|
|
-- https://www.curseforge.com/wow/addons/sylingtracker --
|
||
|
|
-- --
|
||
|
|
-- Repository: --
|
||
|
|
-- https://github.com/Skamer/SylingTracker --
|
||
|
|
-- --
|
||
|
|
-- ========================================================================= --
|
||
|
|
Syling "SylingTracker.Keytone" ""
|
||
|
|
-- ========================================================================= --
|
||
|
|
import "SLT"
|
||
|
|
-- ========================================================================= --
|
||
|
|
_Active = false
|
||
|
|
-- ========================================================================= --
|
||
|
|
RegisterContentType = API.RegisterContentType
|
||
|
|
RegisterModel = API.RegisterModel
|
||
|
|
TruncateDecimal = Utils.Math.TruncateDecimal
|
||
|
|
-- ========================================================================= --
|
||
|
|
GetPowerLevelDamageHealthMod = C_ChallengeMode.GetPowerLevelDamageHealthMod
|
||
|
|
GetActiveKeystoneInfo = C_ChallengeMode.GetActiveKeystoneInfo
|
||
|
|
GetAffixInfo = C_ChallengeMode.GetAffixInfo
|
||
|
|
GetMapInfo = C_ChallengeMode.GetMapUIInfo
|
||
|
|
GetActiveChallengeMapID = C_ChallengeMode.GetActiveChallengeMapID
|
||
|
|
GetDeathCount = C_ChallengeMode.GetDeathCount
|
||
|
|
GetWorldElapsedTimers = GetWorldElapsedTimers
|
||
|
|
GetWorldElapsedTime = GetWorldElapsedTime
|
||
|
|
EJ_GetCurrentInstance = EJ_GetCurrentInstance
|
||
|
|
EJ_GetInstanceInfo = EJ_GetInstanceInfo
|
||
|
|
GetInfo = C_Scenario.GetInfo
|
||
|
|
GetStepInfo = C_Scenario.GetStepInfo
|
||
|
|
GetCriteriaInfo = C_Scenario.GetCriteriaInfo
|
||
|
|
-- ========================================================================= --
|
||
|
|
_KeystoneModel = RegisterModel(Model, "keystone-data")
|
||
|
|
-- ========================================================================= --
|
||
|
|
RegisterContentType({
|
||
|
|
ID = "keystone",
|
||
|
|
DisplayName = "Keystone (Mythic +)",
|
||
|
|
DefaultOrder = 30,
|
||
|
|
DefaultModel = _KeystoneModel,
|
||
|
|
DefaultViewClass = KeystoneContentView,
|
||
|
|
Events = { "PLAYER_ENTERING_WORLD", "CHALLENGE_MODE_START" },
|
||
|
|
Status = function()
|
||
|
|
return GetActiveKeystoneInfo() > 0
|
||
|
|
end
|
||
|
|
})
|
||
|
|
-- ========================================================================= --
|
||
|
|
__ActiveOnEvents__ "PLAYER_ENTERING_WORLD" "CHALLENGE_MODE_START"
|
||
|
|
function ActiveOn(self)
|
||
|
|
return GetActiveKeystoneInfo() > 0
|
||
|
|
end
|
||
|
|
-- ========================================================================= --
|
||
|
|
function OnActive(self)
|
||
|
|
self:UpdateKeystoneInfo()
|
||
|
|
self:UpdateTimer()
|
||
|
|
self:UpdateObjectives()
|
||
|
|
self:UpdateInstanceMap()
|
||
|
|
CHALLENGE_MODE_DEATH_COUNT_UPDATED()
|
||
|
|
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
|
||
|
|
function OnInactive(self)
|
||
|
|
_KeystoneModel:ClearData()
|
||
|
|
end
|
||
|
|
-- ========================================================================= --
|
||
|
|
-- Helper function for getting the enemy forces percentage
|
||
|
|
local function GetPercentageString(current, total)
|
||
|
|
local decimal = 2
|
||
|
|
|
||
|
|
if decimal == 0 then
|
||
|
|
return format("%i%%", math.floor(current/total*100))
|
||
|
|
elseif decimal == 1 then
|
||
|
|
return format("%.1f%%", TruncateDecimal(current/total*100, 1))
|
||
|
|
elseif decimal == 2 then
|
||
|
|
return format("%.2f%%", TruncateDecimal(current/total*100, 2))
|
||
|
|
end
|
||
|
|
|
||
|
|
return format("%i", current/total*100)
|
||
|
|
end
|
||
|
|
|
||
|
|
__SystemEvent__ "SCENARIO_CRITERIA_UPDATE" "CRITERIA_UPDATE" "SCENARIO_UPDATE"
|
||
|
|
function UpdateObjectives()
|
||
|
|
local dungeonName, _, numObjectives = GetStepInfo()
|
||
|
|
local completed = select(7, GetInfo())
|
||
|
|
|
||
|
|
local objectivesData = {}
|
||
|
|
|
||
|
|
for index = 1, numObjectives do
|
||
|
|
local description, _, completed, c, totalQuantity, _, _, quantityString,
|
||
|
|
_, _, _, _, isWeightProgress = GetCriteriaInfo(index)
|
||
|
|
|
||
|
|
local data = {
|
||
|
|
text = description,
|
||
|
|
isCompleted = completed
|
||
|
|
}
|
||
|
|
|
||
|
|
if isWeightProgress then
|
||
|
|
-- if there is weight progress, we can say this is 'Enemy Forces'
|
||
|
|
local quantity = tonumber(strsub(quantityString, 1, -2))
|
||
|
|
|
||
|
|
data.hasProgressBar = true
|
||
|
|
data.progress = quantity
|
||
|
|
data.minProgress = 0
|
||
|
|
data.maxProgress = totalQuantity
|
||
|
|
-- data.progressText = string.format("%i/%i", quantity, totalQuantity)
|
||
|
|
data.progressText = format("%i/%i (%s)", quantity, totalQuantity, GetPercentageString(quantity, totalQuantity))
|
||
|
|
else
|
||
|
|
data.hasProgressBar = nil
|
||
|
|
end
|
||
|
|
|
||
|
|
objectivesData[index] = data
|
||
|
|
end
|
||
|
|
|
||
|
|
local data = {
|
||
|
|
name = dungeonName,
|
||
|
|
numObjectives = numObjectives,
|
||
|
|
completed = completed,
|
||
|
|
objectives = objectivesData
|
||
|
|
}
|
||
|
|
|
||
|
|
_KeystoneModel:AddData(data, "keystone")
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
|
||
|
|
__SystemEvent__()
|
||
|
|
function CHALLENGE_MODE_DEATH_COUNT_UPDATED()
|
||
|
|
_M:UpdateDeathCount()
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
|
||
|
|
__Async__()
|
||
|
|
function UpdateTimer(self)
|
||
|
|
local _, elapsed, type = GetWorldElapsedTime(1)
|
||
|
|
if type == LE_WORLD_ELAPSED_TIMER_TYPE_CHALLENGE_MODE then
|
||
|
|
local nextElapsed = elapsed + 1
|
||
|
|
local nextTime
|
||
|
|
|
||
|
|
while elapsed ~= nextElapsed do
|
||
|
|
_, elapsed = GetWorldElapsedTime(1)
|
||
|
|
nextTime = GetTime()
|
||
|
|
|
||
|
|
Next()
|
||
|
|
end
|
||
|
|
|
||
|
|
_KeystoneModel:AddData({ startTime = nextTime - elapsed}, "keystone")
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
__SystemEvent__()
|
||
|
|
function WORLD_STATE_TIMER_START(timerID)
|
||
|
|
_M:UpdateTimer()
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
|
||
|
|
__SystemEvent__()
|
||
|
|
function WORLD_STATE_TIMER_STOP(timerID)
|
||
|
|
_KeystoneModel:AddData({ completed = true }, "keystone")
|
||
|
|
_KeystoneModel:Flush()
|
||
|
|
end
|
||
|
|
|
||
|
|
function UpdateKeystoneInfo()
|
||
|
|
local level, affixes, wasEnergized = GetActiveKeystoneInfo()
|
||
|
|
local numAffixes = #affixes
|
||
|
|
local affixesData = {}
|
||
|
|
|
||
|
|
for index, affixID in ipairs(affixes) do
|
||
|
|
local name, desc, texture = GetAffixInfo(affixID)
|
||
|
|
|
||
|
|
affixesData[index] = {
|
||
|
|
name = name,
|
||
|
|
desc = desc,
|
||
|
|
texture = texture,
|
||
|
|
affixID = affixID
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
_KeystoneModel:AddData({
|
||
|
|
level = level,
|
||
|
|
affixes = affixesData,
|
||
|
|
numAffixes = numAffixes,
|
||
|
|
wasEnergized = wasEnergized
|
||
|
|
}, "keystone")
|
||
|
|
end
|
||
|
|
|
||
|
|
function UpdateInstanceMap(self)
|
||
|
|
local mapID = GetActiveChallengeMapID()
|
||
|
|
if mapID then
|
||
|
|
local _, _, timeLimit, texture = GetMapInfo(mapID)
|
||
|
|
_KeystoneModel:AddData({
|
||
|
|
timeLimit = timeLimit,
|
||
|
|
texture = texture
|
||
|
|
}, "keystone")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
function UpdateDeathCount()
|
||
|
|
local death, timeLost = GetDeathCount()
|
||
|
|
_KeystoneModel:AddData({
|
||
|
|
death = death,
|
||
|
|
timeLost = timeLost,
|
||
|
|
}, "keystone")
|
||
|
|
end
|
||
|
|
-- ========================================================================= --
|
||
|
|
-- Debug Utils Tools
|
||
|
|
-- ========================================================================= --
|
||
|
|
if ViragDevTool_AddData then
|
||
|
|
ViragDevTool_AddData(_KeystoneModel, "SLT Keystone Model")
|
||
|
|
end
|
||
|
|
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
-- Fixture DATA --
|
||
|
|
-----------------------------------------------------------------------------
|
||
|
|
-- function LoadFixtures(self)
|
||
|
|
-- local affixesData = {}
|
||
|
|
-- for i = 1, 4 do
|
||
|
|
-- local name, desc, texture = GetAffixInfo(i)
|
||
|
|
-- affixesData[i] = {
|
||
|
|
-- name = name,
|
||
|
|
-- desc = desc,
|
||
|
|
-- texture = texture,
|
||
|
|
-- affixID = i
|
||
|
|
-- }
|
||
|
|
-- end
|
||
|
|
|
||
|
|
-- local data = {
|
||
|
|
-- icon = 1411869,
|
||
|
|
-- name = "L'Arcavia",
|
||
|
|
-- numObjectives = 5,
|
||
|
|
-- death = 2,
|
||
|
|
-- timeLost = 10,
|
||
|
|
-- level = 14,
|
||
|
|
-- affixes = affixesData,
|
||
|
|
-- objectives = {
|
||
|
|
-- [1] = { isCompleted = false, text = "Ivanyr vaincu"},
|
||
|
|
-- [2] = { isCompleted = false, text = "Corstilax vaincu"},
|
||
|
|
-- [3] = { isCompleted = false, text = "General Xakal vaincu"},
|
||
|
|
-- [4] = { isCompleted = false, text = "Nal'tira vaincue"},
|
||
|
|
-- [5] = { isCompleted = false, text = "Conseiller Vandros vaincu"},
|
||
|
|
-- [6] = {
|
||
|
|
-- isCompleted = false,
|
||
|
|
-- text = "Force Enemie",
|
||
|
|
-- hasProgressBar = true,
|
||
|
|
-- progress = 50,
|
||
|
|
-- minProgress = 0,
|
||
|
|
-- maxProgress = 250,
|
||
|
|
-- progressText = "50 / 250"
|
||
|
|
-- }
|
||
|
|
-- }
|
||
|
|
-- }
|
||
|
|
|
||
|
|
-- _KeystoneModel:AddData(data, "keystone")
|
||
|
|
-- _KeystoneModel:Flush()
|
||
|
|
-- end
|