Fixed things about the Real Time DPS; Open Raid Lib Update

This commit is contained in:
Tercio Jose
2023-07-17 22:02:35 -03:00
parent e2e2369a81
commit 72120a8a3e
12 changed files with 292 additions and 449 deletions
+1
View File
@@ -41,3 +41,4 @@ plugins/Details_Streamer/.github/workflows/release.yml
plugins/Details_TinyThreat/.github/workflows/release.yml
plugins/Details_Vanguard/.github/workflows/release.yml
photoshop/ten_years_skin.tga
*.yml
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Terciob19
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,8 @@
## Interface: 100105
## Title: LuaServerDefinitions
## Notes: Development Tools
## Version: #@project-version@
## X-Curse-Project-ID: 889573
LuaServerDefinitions.lua
+20 -11
View File
@@ -23,6 +23,8 @@ BUGS:
--]=]
LIB_OPEN_RAID_CAN_LOAD = false
local versionString, revision, launchDate, gameVersion = GetBuildInfo()
local isExpansion_Dragonflight = function()
@@ -37,19 +39,15 @@ if (WOW_PROJECT_ID ~= WOW_PROJECT_MAINLINE and not isExpansion_Dragonflight()) t
end
local major = "LibOpenRaid-1.0"
local CONST_LIB_VERSION = 105
local CONST_LIB_VERSION = 107
if (not LIB_OPEN_RAID_MAX_VERSION) then
LIB_OPEN_RAID_MAX_VERSION = CONST_LIB_VERSION
else
LIB_OPEN_RAID_MAX_VERSION = math.max(LIB_OPEN_RAID_MAX_VERSION, CONST_LIB_VERSION)
if (LIB_OPEN_RAID_MAX_VERSION) then
if (CONST_LIB_VERSION <= LIB_OPEN_RAID_MAX_VERSION) then
return
end
end
LIB_OPEN_RAID_CAN_LOAD = false
local unpack = table.unpack or _G.unpack
--declae the library within the LibStub
--declare the library within the LibStub
local libStub = _G.LibStub
local openRaidLib = libStub:NewLibrary(major, CONST_LIB_VERSION)
@@ -58,8 +56,11 @@ local unpack = table.unpack or _G.unpack
end
openRaidLib.__version = CONST_LIB_VERSION
LIB_OPEN_RAID_CAN_LOAD = true
LIB_OPEN_RAID_MAX_VERSION = CONST_LIB_VERSION
--locals
local unpack = table.unpack or _G.unpack
openRaidLib.__errors = {} --/dump LibStub:GetLibrary("LibOpenRaid-1.0").__errors
@@ -2376,6 +2377,14 @@ function openRaidLib.CooldownManager.OnReceiveUnitCooldowns(data, unitName)
--unpack the table as a pairs table
local unpackedTable = openRaidLib.UnpackTable(data, 1, true, true, CONST_COOLDOWN_INFO_SIZE)
--[=[ --debug for data received from Evokers
local _, class = UnitClass(unitName)
if (class == "EVOKER") then
print(unitName)
dumpt(unpackedTable)
end
--]=]
--add the list of cooldowns
openRaidLib.CooldownManager.AddUnitCooldownsList(unitName, unpackedTable)
end
@@ -358,7 +358,7 @@ do
[89766] = {class = "WARLOCK", specs = {266}, cooldown = 30, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, pet = 17252, type = 6, charges = 1}, --Axe Toss (pet felguard ability)
[351338] = {class = "EVOKER", specs = {1467, 1468}, cooldown = 40, silence = 4, talent = false, cooldownWithTalent = false, cooldownTalentId = false, charges = 1, type = 6}, --Quell (Evoker)
--paladin
--~paladin
-- 65 - Holy
-- 66 - Protection
-- 70 - Retribution
@@ -394,7 +394,7 @@ do
[389539] = {cooldown = 120, duration = 20, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 2}, --Sentinel
[31935] = {cooldown = 13, duration = 0, specs = {66}, talent = false, charges = 1, class = "PALADIN", type = 6}, --Avenger's Shield
--warrior
--~warrior
-- 71 - Arms
-- 72 - Fury
-- 73 - Protection
@@ -425,7 +425,7 @@ do
[385952] = {cooldown = 45, duration = 4, specs = {73}, talent = false, charges = 1, class = "WARRIOR", type = 5}, --Shield Charge
[1160] = {cooldown = 45, duration = 8, specs = {73}, talent = false, charges = 1, class = "WARRIOR", type = 2}, --Demoralizing Shout
--warlock
--~warlock
-- 265 - Affliction
-- 266 - Demonology
-- 267 - Destruction
@@ -452,7 +452,7 @@ do
[6358] = {cooldown = 30, duration = 30, specs = {265, 266, 267}, talent = false, charges = 1, class = "WARLOCK", type = 8, pet = 184600}, --Seduction
[261589] = {cooldown = 30, duration = 30, specs = {265, 266, 267}, talent = false, charges = 1, class = "WARLOCK", type = 8}, --Seduction (Sacrifice)
--shaman
--~shaman
-- 262 - Elemental
-- 263 - Enchancment
-- 264 - Restoration
@@ -487,7 +487,7 @@ do
[305483] = {cooldown = 45, duration = 5, specs = {262, 263, 264}, talent = false, charges = 1, class = "SHAMAN", type = 8}, --Lightning Lasso
[197214] = {cooldown = 40, duration = 2, specs = {262}, talent = false, charges = 1, class = "SHAMAN", type = 8}, --Sundering
--monk
--~monk
-- 268 - Brewmaster
-- 269 - Windwalker
-- 270 - Restoration
@@ -521,7 +521,7 @@ do
[115078] = {cooldown = 45, duration = 60, specs = {268, 269, 270}, talent = false, charges = 1, class = "MONK", type = 8}, --Paralysis
--hunter
--~hunter
-- 253 - Beast Mastery
-- 254 - Marksmenship
-- 255 - Survival
@@ -548,7 +548,7 @@ do
[236776] = {cooldown = 40, duration = 0, specs = {253, 254, 255}, talent = false, charges = 1, class = "HUNTER", type = 8}, --High Explosive Trap
--druid
--~druid
-- 102 - Balance
-- 103 - Feral
-- 104 - Guardian
@@ -585,7 +585,7 @@ do
[205636] = {cooldown = 60, duration = 10, specs = {102}, talent = false, charges = 1, class = "DRUID", type = 5}, --Force of Nature
[200851] = {cooldown = 60, duration = 10, specs = {104}, talent = false, charges = 1, class = "DRUID", type = 2}, --Rage of the Sleeper
--death knight
--~death knight
-- 252 - Unholy
-- 251 - Frost
-- 252 - Blood
@@ -615,7 +615,7 @@ do
[194679] = {cooldown = 25, duration = 4, specs = {252}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 2}, --Rune Tap
[194844] = {cooldown = 60, duration = 0, specs = {251}, talent = false, charges = 1, class = "DEATHKNIGHT", type = 1}, --Bonestorm
--demon hunter
--~demon hunter
-- 577 - Havoc
-- 581 - Vengance
[198589] = {cooldown = 60, duration = 10, specs = {577}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Blur
@@ -637,7 +637,7 @@ do
[212084] = {cooldown = 60, duration = 2, specs = {581}, talent = false, charges = 1, class = "DEMONHUNTER", type = 2}, --Fel Devastation
[203720] = {cooldown = 20, duration = 6, specs = {581}, talent = false, charges = 2, class = "DEMONHUNTER", type = 2}, --Demon Spikes
--mage
--~mage
-- 62 - Arcane
-- 63 - Fire
-- 64 - Frost
@@ -665,10 +665,13 @@ do
[122] = {cooldown = 30, duration = 6, specs = {63, 64, 62}, talent = false, charges = 1, class = "MAGE", type = 8}, --Frost Nova
[157980] = {cooldown = 25, duration = 0, specs = {62}, talent = false, charges = 1, class = "MAGE", type = 8}, --Supernova
[414660] = {cooldown = 120, duration = 60, specs = {63, 64, 62}, talent = false, charges = 1, class = "MAGE", type = 4}, --Mass Barrier
[414664] = {cooldown = 300, duration = 12, specs = {63, 64, 62}, talent = false, charges = 1, class = "MAGE", type = 5}, --Mass Invisibility (only out of combat)
-- This needs more work to actually function
--[342245] = {cooldown = 60, duration = 0, specs = {}, talent = false, charges = 1, class = "MAGE", type = 2}, --Alter Time
--priest
--~priest
-- 256 - Discipline
-- 257 - Holy
-- 258 - Shadow
@@ -705,7 +708,7 @@ do
[108920] = {cooldown = 60, duration = 20, specs = {256, 257, 258}, talent = false, charges = 1, class = "PRIEST", type = 8}, --Void Tendrils
--rogue
--~rogue
-- 259 - Assasination
-- 260 - Outlaw
-- 261 - Subtlety
@@ -727,7 +730,7 @@ do
[384631] = {cooldown = 90, duration = 12, specs = {261}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Flagellation
[277925] = {cooldown = 60, duration = 4, specs = {261}, talent = false, charges = 1, class = "ROGUE", type = 1}, --Shuriken Tornado
--evoker
--~evoker
-- 1467 - Devastation
-- 1468 - Preservation
-- 1473 - Augmentation
@@ -911,6 +914,7 @@ do
[106898] = {106898,77764,77761},
[77764] = {106898,77764,77761},
[77761] = {106898,77764,77761},
[232633] = {155145, 28730, 25046, 80483, 129597, 69179, 50613, 202719, 232633}, --Arcane Torrent
}
LIB_OPEN_RAID_SPECID_TO_CLASSID = {
@@ -964,17 +968,17 @@ do
[1467] = 13,
[1468] = 13,
[1473] = 13,
}
LIB_OPEN_RAID_DATABASE_LOADED = true
end
--this will make sure to always have the latest data
--/dumpt LIB_OPEN_RAID_BLOODLUST
C_Timer.After(0, function()
if (openRaidLib.__version == LIB_OPEN_RAID_MAX_VERSION) then
loadLibDatabase()
end
end)
loadLibDatabase()
end
end
+63
View File
@@ -1233,6 +1233,69 @@ Details222.UnitIdCache.Party = {
[4] = "party4",
}
Details222.UnitIdCache.Boss = {
[1] = "boss1",
[2] = "boss2",
[3] = "boss3",
[4] = "boss4",
[5] = "boss5",
[6] = "boss6",
[7] = "boss7",
[8] = "boss8",
[9] = "boss9",
}
Details222.UnitIdCache.Nameplate = {
[1] = "nameplate1",
[2] = "nameplate2",
[3] = "nameplate3",
[4] = "nameplate4",
[5] = "nameplate5",
[6] = "nameplate6",
[7] = "nameplate7",
[8] = "nameplate8",
[9] = "nameplate9",
[10] = "nameplate10",
[11] = "nameplate11",
[12] = "nameplate12",
[13] = "nameplate13",
[14] = "nameplate14",
[15] = "nameplate15",
[16] = "nameplate16",
[17] = "nameplate17",
[18] = "nameplate18",
[19] = "nameplate19",
[20] = "nameplate20",
[21] = "nameplate21",
[22] = "nameplate22",
[23] = "nameplate23",
[24] = "nameplate24",
[25] = "nameplate25",
[26] = "nameplate26",
[27] = "nameplate27",
[28] = "nameplate28",
[29] = "nameplate29",
[30] = "nameplate30",
[31] = "nameplate31",
[32] = "nameplate32",
[33] = "nameplate33",
[34] = "nameplate34",
[35] = "nameplate35",
[36] = "nameplate36",
[37] = "nameplate37",
[38] = "nameplate38",
[39] = "nameplate39",
[40] = "nameplate40",
}
Details222.UnitIdCache.Arena = {
[1] = "arena1",
[2] = "arena2",
[3] = "arena3",
[4] = "arena4",
[5] = "arena5",
}
function Details222.Tables.MakeWeakTable(mode)
local newTable = {}
setmetatable(newTable, {__mode = mode or "v"})
+7 -5
View File
@@ -2589,12 +2589,14 @@ local actor_class_color_r, actor_class_color_g, actor_class_color_b
percentText = percentText or ""
if ((Details.time_type == 3 or (Details.combat_log.evoker_show_realtimedps and Details.playerspecid == 1473)) and Details.in_combat) then --real time
local actorSerial = thisLine:GetActor().serial
local currentDps = Details.CurrentDps.GetCurrentDps(actorSerial)
if (currentDps and currentDps > 0) then
currentDps = Details:ToK2(currentDps)
if (thisLine:GetActor()) then
local actorSerial = thisLine:GetActor().serial
local currentDps = Details.CurrentDps.GetCurrentDps(actorSerial)
if (currentDps and currentDps > 0) then
currentDps = Details:ToK2(currentDps)
end
perSecondText = currentDps
end
perSecondText = currentDps
end
--check if the instance is showing total, dps and percent
+95 -16
View File
@@ -182,10 +182,23 @@
---@field key3 controlflags
---@field key4 valueamount
---@class evokereonsbreathinfo : table
---@field key1 serial
---@field key2 actorname
---@field key3 controlflags
---@field key4 unit
---@field key5 unixtime
---@field key6 number
---@field key7 number
--store all information about augmentation evokers ~roskash
local augmentation_cache = {
ebon_might = {},
prescience = {},
---@type table<serial, evokereonsbreathinfo[]>
breath_targets = {},
flyaway = {},
flyaway_timer = {},
}
local empower_cache = {}
@@ -1229,7 +1242,7 @@
end
end
if (spellId == 404908 and augmentation_cache.prescience[sourceSerial]) then
if (spellId == 404908 and augmentation_cache.prescience[sourceSerial]) then --fate mirror
---actor buffed with prescience -> list of evokers whose buffed
---@type table<serial, evokerinfo[]>
local currentlyBuffedWithPrescience = augmentation_cache.prescience[sourceSerial]
@@ -1253,6 +1266,42 @@
end
end
if (spellId == 409632) then
local breathTargets = augmentation_cache.breath_targets
---@type evokereonsbreathinfo[]
local evokerWithEonsApplications = breathTargets[targetSerial]
if (evokerWithEonsApplications) then
--this table consists in a list of evokers who applied eon's breath on the target
for i = 1, #evokerWithEonsApplications do
---@type evokereonsbreathinfo
local evokerInfo = evokerWithEonsApplications[i]
local appliedTime = evokerInfo[5]
local duration = evokerInfo[6]
if (detailsFramework:IsNearlyEqual(time, appliedTime + duration, 0.05)) then
local evokerName = evokerInfo[2]
if (evokerName ~= Details.playername) then
local evokerSerial = evokerInfo[1]
local evokerFlags = evokerInfo[3]
---@type actor
local evokerActor = damage_cache[evokerSerial]
if (not evokerActor) then
evokerActor = _current_damage_container:PegarCombatente(evokerSerial, evokerName, evokerFlags, true)
end
if (evokerActor) then
evokerActor.extra_bar = evokerActor.extra_bar + amount
end
end
end
end
end
end
--actor owner (if any)
if (ownerActor) then --se for dano de um Pet
ownerActor.total = ownerActor.total + amount --e adiciona o dano ao pet
@@ -2528,6 +2577,24 @@
---@type evokerinfo
local evokerInfo = {sourceSerial, sourceName, sourceFlags, amount}
table.insert(augmentation_cache.prescience[targetSerial], evokerInfo)
elseif (spellId == 409560) then
local unitIDAffected = Details:FindUnitIDByUnitSerial(targetSerial)
if (unitIDAffected) then
local duration, expirationTime = Details:FindDebuffDuration(unitIDAffected, spellId)
if (duration) then
local breathTargets = augmentation_cache.breath_targets[targetSerial]
if (not breathTargets) then
augmentation_cache.breath_targets[targetSerial] = {}
breathTargets = augmentation_cache.breath_targets[targetSerial]
end
--evoker serial, evoker name, evoker flags, target unitID, unixtime, duration, expirationTime (GetTime + duration)
---@type evokereonsbreathinfo
local eonsBreathInfo = {sourceSerial, sourceName, sourceFlags, unitIDAffected, time, duration, expirationTime}
table.insert(breathTargets, eonsBreathInfo)
end
end
end
if (buffs_makeyourown[spellId]) then
@@ -3678,20 +3745,20 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
--serach key: ~interrupts
---comment: this function is called when a spell is interrupted
---@param token string
---@param time number
---@param sourceSerial string
---@param sourceName string
---@param sourceFlags number
---@param targetSerial string
---@param targetName string
---@param targetFlags number
---@param time unixtime
---@param sourceSerial guid
---@param sourceName actorname
---@param sourceFlags controlflags
---@param targetSerial guid
---@param targetName actorname
---@param targetFlags controlflags
---@param targetFlags2 number
---@param spellId number
---@param spellName string
---@param spellType number
---@param extraSpellID number
---@param extraSpellName string
---@param extraSchool number
---@param spellId spellid
---@param spellName spellname
---@param spellType spellschool
---@param extraSpellID spellid
---@param extraSpellName spellname
---@param extraSchool spellschool
function parser:interrupt(token, time, sourceSerial, sourceName, sourceFlags, targetSerial, targetName, targetFlags, targetFlags2, spellId, spellName, spellType, extraSpellID, extraSpellName, extraSchool)
--quake affix from mythic+
if (spellId == 240448) then
@@ -6093,7 +6160,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
if (not parserDebug[token]) then
parserDebug[token] = true
print(token)
--print(token)
end
if ( spellId == 409632 ) then
@@ -6164,10 +6231,21 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
--print(time, token, hidding, who_serial, who_name, who_flags, who_flags2, target_serial, target_name, target_flags, target_flags2, spellId, spellName, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, unknown1, unknown2, unknown3, unknown4, unknown5)
end
if (spellId == 409560) then --temporal would
local spellschool, auraType, amount = A3, A4, A5
print(time, token, spellName, sourceName, targetName, spellschool, auraType, amount, A6, A7, A8, A9, A10)
end
if (spellName == "Ebon Might") then
--6/30 14:19:19.299 SPELL_AURA_REMOVED,Player-5764-00018FF1,"Termøhead-Iridikron",0x518,0x0,Player-5764-0001977A,"Drgndeesnutz-Fyrakk",0x518,0x0,395152,"Ebon Might",0xc,BUFF
local spellschool, auraType, amount = A3, A4, A5
print(token, spellName, sourceName, targetName, spellschool, auraType, amount, A6, A7, A8, A9, A10)
--print(token, spellName, sourceName, targetName, spellschool, auraType, amount, A6, A7, A8, A9, A10)
end
if (spellName == "Breath of Eons") then
--6/30 14:19:19.299 SPELL_AURA_REMOVED,Player-5764-00018FF1,"Termøhead-Iridikron",0x518,0x0,Player-5764-0001977A,"Drgndeesnutz-Fyrakk",0x518,0x0,395152,"Ebon Might",0xc,BUFF
local spellschool, auraType, amount = A3, A4, A5
print(time, token, spellName, sourceName, targetName, spellschool, auraType, amount, A6, A7, A8, A9, A10)
end
if (token == "SPELL_CAST_START") then
@@ -6331,6 +6409,7 @@ local SPELL_POWER_PAIN = SPELL_POWER_PAIN or (PowerEnum and PowerEnum.Pain) or 1
Details:Destroy(augmentation_cache.ebon_might) --~roskash
Details:Destroy(augmentation_cache.prescience)
Details:Destroy(augmentation_cache.breath_targets)
cacheAnything.track_hunter_frenzy = Details.combat_log.track_hunter_frenzy
+50
View File
@@ -68,6 +68,56 @@
Details.FadeHandler.frames[frame] = nil
end
local predicateFunc = function(spellIdToFind, _, _, name, texture, count, debuffType, duration, expirationTime, _, _, _, spellID)
print(name, texture, count, debuffType, duration, expirationTime, spellID)
if (spellIdToFind == spellID) then
return true
end
end
function Details:FindDebuffDuration(unitId, spellId)
local name, texture, count, debuffType, duration, expirationTime = AuraUtil.FindAura(predicateFunc, unitId, "HARMFUL", spellId)
if (name) then
return duration, expirationTime
end
end
function Details:FindUnitIDByUnitSerial(unitSerial)
--boss
for i = 1, 9 do
local unitId = Details222.UnitIdCache.Boss[i]
if (UnitExists(unitId)) then
if (UnitGUID(unitId) == unitSerial) then
return unitId
end
else
break
end
end
--nameplate
for i = 1, 40 do
local unitId = Details222.UnitIdCache.Nameplate[i]
if (UnitExists(unitId)) then
if (UnitGUID(unitId) == unitSerial) then
return unitId
end
end
end
--arena enemies
for i = 1, #Details222.UnitIdCache.Arena do
local unitId = Details222.UnitIdCache.Arena[i]
if (UnitExists(unitId)) then
if (UnitGUID(unitId) == unitSerial) then
return unitId
end
else
break
end
end
end
Details.FadeHandler.OnUpdateFrame = CreateFrame("frame", "DetailsFadeFrameOnUpdate", UIParent)
Details.FadeHandler.OnUpdateFrame:SetScript("OnUpdate", function(self, deltaTime)
for frame, frameSettings in pairs(Details.FadeHandler.frames) do
+7
View File
@@ -2250,6 +2250,13 @@ local iconFrame_OnEnter = function(self)
end
end
if (actor.spec == 1473) then
local damageDone = math.floor(actor.total + actor.extra_bar)
GameCooltip:AddLine("Evoker Predicted Damage:", Details:Format(damageDone) .. " (" .. Details:Format(damageDone / Details:GetCurrentCombat():GetCombatTime()) .. ")", 1, "white")
GameCooltip:AddIcon([[]], 1, 1, 1, 20)
Details:AddTooltipBackgroundStatusbar()
end
GameCooltip:SetOption("FixedHeight", height)
GameCooltip:ShowCooltip()
@@ -1,401 +0,0 @@
--uiobject: is an object that represents a UI element, such as a frame, a texture, or a button. UIObjects are the base class for all UI elements in the WoW API.
--3D World: is an object which is placed behind|below all UI elements, cannot be parent of any object, in the 3D World object is where the game world is rendered
--size: corresponds to the height and height of an object, it is measure in pixels, must be bigger than zero.
--scale: the size of an object is multiplied by this value, it is measure in percentage, must be between 0.65 and 2.40.
--alpha: corresponds to the transparency of an object, the bigger is the value less transparent is the object, it is measure in percentage, must be between 0 and 1, zero is fully transparent and one is fully opaque.
--controller: abstract term to define who's in control of an entity, can be the server or a player.
--npc: an entity shown in the 3d world with a name and a health bar, can be friendly or hostile, can be interacted with, always controlled by the server.
--player: is an entity that represents a player character, the controller is always player.
--pet: represents a npc controlled by the server and can accept commands from the player.
--guadians: represents a npc, the server has the possess of the controller, don't accept commands like pets, helps attacking the enemies of the npc or player.
--role: is a string that represents the role of a unit, such as tank, healer, or damage dealer. only players can have a role.
---@alias role
---| "TANK"
---| "HEALER"
---| "DAMAGER"
---| "NONE"
---@alias anchorpoint
---| "topleft"
---| "topright"
---| "bottomleft"
---| "bottomright"
---| "top"
---| "bottom"
---| "left"
---| "right"
---| "center"
---@alias framestrata
---| "background"
---| "low"
---| "medium"
---| "high"
---| "dialog"
---| "fullscreen"
---| "fullscreen_dialog"
---| "tooltip"
---| "BACKGROUND"
---| "LOW"
---| "MEDIUM"
---| "HIGH"
---| "DIALOG"
---| "FULLSCREEN"
---| "FULLSCREEN_DIALOG"
---| "TOOLTIP"
---@alias sizingpoint
---| "top"
---| "topright"
---| "right"
---| "bottomright"
---| "bottom"
---| "bottomleft"
---| "left"
---| "topleft"
---@alias drawlayer
---| "background"
---| "border"
---| "artwork"
---| "overlay"
---| "highlight"
---@alias buttontype
---| "AnyUp"
---| "AnyDown"
---| "LeftButtonDown"
---| "LeftButtonUp"
---| "MiddleButtonUp"
---| "MiddleButtonDown"
---| "RightButtonDown"
---| "RightButtonUp"
---| "Button4Up"
---| "Button4Down"
---| "Button5Up"
---| "Button5Down"
---@alias justifyh
---| "left"
---| "right"
---| "center"
---@alias justifyv
---| "top"
---| "bottom"
---| "middle"
---@alias orientation
---| "HORIZONTAL"
---| "VERTICAL"
---@alias width number property that represents the horizontal size of a UI element, such as a frame or a texture. Gotten from the first result of GetWidth() or from the first result of GetSize(). It is expected a GetWidth() or GetSize() when the type 'height' is used.
---@alias height number property that represents the vertical size of a UI element, such as a frame or a texture. Gotten from the first result of GetHeight() or from the second result of GetSize(). It is expected a GetHeight() or GetSize() when the type 'height' is used.
---@alias red number color value representing the red component of a color, the value must be between 0 and 1. To retrieve a color from a string or table use: local red, green, blue, alpha = DetailsFramework:ParseColors(color)
---@alias green number color value representing the green component of a color, the value must be between 0 and 1. To retrieve a color from a string or table use: local red, green, blue, alpha = DetailsFramework:ParseColors(color)
---@alias blue number color value representing the blue component of a color, the value must be between 0 and 1. To retrieve a color from a string or table use: local red, green, blue, alpha = DetailsFramework:ParseColors(color)
---@alias alpha number @number(0-1.0) value representing the alpha (transparency) of a UIObject, the value must be between 0 and 1. 0 is fully transparent, 1 is fully opaque.
---@alias unit string string that represents a unit in the game, such as the player, a party member, or a raid member.
---@alias health number amount of hit points (health) of a unit. This value can be changed by taking damage or healing.
---@alias spellid number each spell in the game has a unique spell id, this id can be used to identify a spell.
---@alias actorname string name of a unit
---@alias spellname string name of a spell
---@alias spellschool number each spell in the game has a school, such as fire, frost, shadow and many others. This value can be used to identify the school of a spell.
---@alias actorid string unique id of a unit (GUID)
---@alias serial string unique id of a unit (GUID)
---@alias color table, string @table(r: red|number, g: green|number, b: blue|number, a: alpha|number) @string(color name) @hex (000000-ffffff) value representing a color, the value must be a table with the following fields: r, g, b, a. r, g, b are numbers between 0 and 1, a is a number between 0 and 1. To retrieve a color from a string or table use: local red, green, blue, alpha = DetailsFramework:ParseColors(color)
---@alias scale number @number(0.65-2.40) value representing the scale factor of the UIObject, the value must be between 0.65 and 2.40, the width and height of the UIObject will be multiplied by this value.
---@alias script string, function is a piece of code that is executed in response to a specific event, such as a button click or a frame update. Scripts can be used to implement behavior and logic for UI elements.
---@alias event string is a notification that is sent to a frame when something happens, such as a button click or a frame update. Events can be used to trigger scripts.
---@alias backdrop table @table(bgFile: string, edgeFile: string, tile: edgeSize: number, backgroundColor: color, borderColor: color) is a table that contains information about the backdrop of a frame. The backdrop is the background of a frame, which can be a solid color, a gradient, or a texture.
---@alias npcid number a number that identifies a specific npc in the game.
---@alias textureid number each texture from the game client has an id.
---@alias texturepath string access textures from addons.
---@alias unixtime number
---@alias valueamount number used to represent a value, such as a damage amount, a healing amount, or a resource amount.
---@class _G
---@field RegisterAttributeDriver fun(statedriver: frame, attribute: string, conditional: string)
---@field RegisterStateDriver fun(statedriver: frame, attribute: string, conditional: string)
---@field UnitGUID fun(unit: string): string
---@field UnitName fun(unit: string): string
---@field GetCursorPosition fun(): number, number return the position of the cursor on the screen, in pixels, relative to the bottom left corner of the screen.
---@field C_Timer C_Timer
---@class timer : table
---@field Cancel fun(self: timer)
---@field IsCancelled fun(self: timer): boolean
---@class C_Timer : table
---@field After fun(delay: number, func: function)
---@field NewTimer fun(delay: number, func: function): timer
---@field NewTicker fun(interval: number, func: function, iterations: number|nil): timer
---@class C_ChallengeMode : table
---@field GetActiveKeystoneInfo fun(): number, number[], boolean @returns keystoneLevel, affixIDs, wasActive
---@class tablesize : {H: number, W: number}
---@class tablecoords : {L: number, R: number, T: number, B: number}
---@class texturecoords: {left: number, right: number, top: number, bottom: number}
---@class objectsize : {height: number, width: number}
---@class texturetable : {texture: string, coords: texturecoords, size: objectsize}
---@class uiobject
---@field GetObjectType fun(self: uiobject) : string
---@field Show fun(self: uiobject) make the object be shown on the user screen
---@field Hide fun(self: uiobject) make the object be hidden from the user screen
---@field SetShown fun(self: uiobject, state: boolean) show or hide the object
---@field IsShown fun(self: uiobject) : boolean return if the object is shown or not
---@field SetAllPoints fun(self: uiobject, target: uiobject|nil) set the object to be the same size as its parent or the target object
---@field SetParent fun(self: uiobject, parent: frame) set the parent object of the object
---@field SetSize fun(self: uiobject, width: width|number, height: height|number) set the width and height of the object
---@field SetWidth fun(self: uiobject, width: width|number) set only the width of the object
---@field SetHeight fun(self: uiobject, height: height|number) set only the height of the object
---@field SetAlpha fun(self: uiobject, alpha: alpha|number) set the transparency of the object
---@field SetScale fun(self: uiobject, scale: scale|number)
---@field GetWidth fun(self: uiobject) : width|number
---@field GetHeight fun(self: uiobject) : height|number
---@field GetScale fun(self: uiobject) : scale|number
---@field GetAlpha fun(self: uiobject) : alpha|number
---@field GetSize fun(self: uiobject) : width|number, height|number
---@field GetParent fun(self: uiobject) : frame
---@field GetPoint fun(self: uiobject, index: number): string, frame, string, number, number
---@field GetCenter fun(self: uiobject): number, number
---@field SetPoint fun(self: uiobject, point: anchorpoint, relativeFrame: uiobject, relativePoint: anchorpoint, xOffset: number, yOffset: number)
---@field ClearAllPoints fun(self: uiobject)
---@field CreateAnimationGroup fun(self: uiobject, name: string|nil, templateName: string|nil) : animationgroup
---@class animationgroup : uiobject
---@field CreateAnimation fun(self: animationgroup, animationType: string, name: string|nil, inheritsFrom: string|nil) : animation
---@field GetAnimation fun(self: animationgroup, name: string) : animation
---@field GetAnimations fun(self: animationgroup) : table
---@field GetDuration fun(self: animationgroup) : number
---@field GetEndDelay fun(self: animationgroup) : number
---@field GetLoopState fun(self: animationgroup) : boolean
---@field GetScript fun(self: animationgroup, event: string) : function
---@field GetSmoothProgress fun(self: animationgroup) : boolean
---@field IsDone fun(self: animationgroup) : boolean
---@field IsPaused fun(self: animationgroup) : boolean
---@field IsPlaying fun(self: animationgroup) : boolean
---@field Pause fun(self: animationgroup)
---@field Play fun(self: animationgroup)
---@field Resume fun(self: animationgroup)
---@field SetDuration fun(self: animationgroup, duration: number)
---@field SetEndDelay fun(self: animationgroup, delay: number)
---@field SetLooping fun(self: animationgroup, loop: boolean)
---@field SetScript fun(self: animationgroup, event: string, handler: function|nil) "OnEvent"|"OnShow"
---@field SetSmoothProgress fun(self: animationgroup, smooth: boolean)
---@field Stop fun(self: animationgroup)
---@class animation : uiobject
---@field GetDuration fun(self: animation) : number
---@field GetEndDelay fun(self: animation) : number
---@field GetOrder fun(self: animation) : number
---@field GetScript fun(self: animation, event: string) : function
---@field GetSmoothing fun(self: animation) : string
---@field IsDone fun(self: animation) : boolean
---@field IsPaused fun(self: animation) : boolean
---@field IsPlaying fun(self: animation) : boolean
---@field Pause fun(self: animation)
---@field Play fun(self: animation)
---@field Resume fun(self: animation)
---@field SetDuration fun(self: animation, duration: number)
---@field SetEndDelay fun(self: animation, delay: number)
---@field SetOrder fun(self: animation, order: number)
---@field SetScript fun(self: animation, event: string, handler: function|nil)
---@field SetSmoothing fun(self: animation, smoothing: string)
---@field Stop fun(self: animation)
---@class line : uiobject
---@field GetEndPoint fun(self: line) : relativePoint: anchorpoint, relativeTo: anchorpoint, offsetX: number, offsetY: number
---@field GetStartPoint fun(self: line) : relativePoint: anchorpoint, relativeTo: anchorpoint, offsetX: number, offsetY: number
---@field GetThickness fun(self: line) : number
---@field SetStartPoint fun(self: line, point: anchorpoint, relativeFrame: uiobject|number, relativePoint: anchorpoint|number, xOffset: number|nil, yOffset: number|nil)
---@field SetEndPoint fun(self: line, point: anchorpoint, relativeFrame: uiobject|number, relativePoint: anchorpoint|number, xOffset: number|nil, yOffset: number|nil)
---@field SetColorTexture fun(self: line, red: number, green: number, blue: number, alpha: number)
---@field SetThickness fun(self: line, thickness: number)
---@class frame : uiobject
---@field CreateLine fun(self: frame, name: string|nil, drawLayer: drawlayer, templateName: string|nil, subLevel: number|nil) : line
---@field SetID fun(self: frame, id: number) set an ID for the frame
---@field SetAttribute fun(self: frame, name: string, value: any)
---@field SetScript fun(self: frame, event: string, handler: function|nil)
---@field GetScript fun(self: frame, event: string) : function
---@field SetFrameStrata fun(self: frame, strata: framestrata)
---@field SetFrameLevel fun(self: frame, level: number)
---@field SetClampedToScreen fun(self: frame, clamped: boolean)
---@field SetClampRectInsets fun(self: frame, left: number, right: number, top: number, bottom: number)
---@field SetMovable fun(self: frame, movable: boolean)
---@field SetUserPlaced fun(self: frame, userPlaced: boolean)
---@field SetBackdrop fun(self: frame, backdrop: backdrop|table)
---@field SetBackdropColor fun(self: frame, red: red|number, green: green|number, blue: blue|number, alpha: alpha|number)
---@field SetBackdropBorderColor fun(self: frame, red: red|number, green: green|number, blue: blue|number, alpha: alpha|number)
---@field SetHitRectInsets fun(self: frame, left: number, right: number, top: number, bottom: number)
---@field SetToplevel fun(self: frame, toplevel: boolean)
---@field SetPropagateKeyboardInput fun(self: frame, propagate: boolean)
---@field SetPropagateGamepadInput fun(self: frame, propagate: boolean)
---@field StartMoving fun(self: frame)
---@field IsMovable fun(self: frame) : boolean
---@field StartSizing fun(self: frame, sizingpoint: sizingpoint|nil)
---@field StopMovingOrSizing fun(self: frame)
---@field GetAttribute fun(self: frame, name: string) : any
---@field GetFrameLevel fun(self: frame) : number
---@field GetFrameStrata fun(self: frame) : framestrata
---@field GetNumChildren fun(self: frame) : number
---@field GetNumPoints fun(self: frame) : number
---@field GetNumRegions fun(self: frame) : number
---@field GetName fun(self: frame) : string
---@field GetChildren fun(self: frame) : frame[]
---@field GetRegions fun(self: frame) : region[]
---@field CreateTexture fun(self: frame, name: string|nil, layer: drawlayer, inherits: string|nil, subLayer: number|nil) : texture
---@field CreateFontString fun(self: frame, name: string|nil, layer: drawlayer, inherits: string|nil, subLayer: number|nil) : fontstring
---@field EnableMouse fun(self: frame, enable: boolean) enable mouse interaction
---@field SetResizable fun(self: frame, enable: boolean) enable resizing of the frame
---@field EnableMouseWheel fun(self: frame, enable: boolean) enable mouse wheel scrolling
---@field RegisterForDrag fun(self: frame, button: string) register the frame for drag events, allowing it to be dragged by the mouse
---@field SetResizeBounds fun(self: frame, minWidth: number, minHeight: number, maxWidth: number, maxHeight: number) set the minimum and maximum size of the frame
---@field RegisterEvent fun(self: frame, event: string) register for an event, trigers "OnEvent" script when the event is fired
---@field HookScript fun(self: frame, event: string, handler: function) run a function after the frame's script has been executed, carrying the same arguments
---@class button : frame
---@field Click fun(self: button)
---@field SetNormalTexture fun(self: button, texture: textureid|texturepath)
---@field SetPushedTexture fun(self: button, texture: textureid|texturepath)
---@field SetHighlightTexture fun(self: button, texture: textureid|texturepath)
---@field SetDisabledTexture fun(self: button, texture: textureid|texturepath)
---@field SetCheckedTexture fun(self: button, texture: textureid|texturepath)
---@field SetNormalFontObject fun(self: button, fontString: fontstring)
---@field SetHighlightFontObject fun(self: button, fontString: fontstring)
---@field SetDisabledFontObject fun(self: button, fontString: fontstring)
---@field SetText fun(self: button, text: string)
---@field GetText fun(self: button) : string
---@field SetTextInsets fun(self: button, left: number, right: number, top: number, bottom: number)
---@field GetTextInsets fun(self: button) : number, number, number, number
---@field SetDisabledTextColor fun(self: button, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field GetDisabledTextColor fun(self: button) : number, number, number, number
---@field SetFontString fun(self: button, fontString: fontstring)
---@field GetFontString fun(self: button) : fontstring
---@field SetButtonState fun(self: button, state: string, enable: boolean)
---@field GetButtonState fun(self: button, state: string) : boolean
---@field RegisterForClicks fun(self: button, button1: nil|buttontype, button2: nil|buttontype, button3: nil|buttontype, button4: nil|buttontype)
---@field GetNormalTexture fun(self: button) : texture
---@field GetPushedTexture fun(self: button) : texture
---@field GetHighlightTexture fun(self: button) : texture
---@field GetDisabledTexture fun(self: button) : texture
---@class statusbar : frame
---@field SetStatusBarColor fun(self: statusbar, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field SetStatusBarTexture fun(self: statusbar, path: string|texture)
---@field GetStatusBarTexture fun(self: statusbar) : texture
---@field SetMinMaxValues fun(self: statusbar, minValue: number, maxValue: number)
---@field SetValue fun(self: statusbar, value: number)
---@field SetValueStep fun(self: statusbar, valueStep: number)
---@field SetOrientation fun(self: statusbar, orientation: orientation)
---@field SetReverseFill fun(self: statusbar, reverseFill: boolean)
---@field GetMinMaxValues fun(self: statusbar) : number, number
---@field GetValue fun(self: statusbar) : number
---@field GetValueStep fun(self: statusbar) : number
---@field GetOrientation fun(self: statusbar) : orientation
---@field GetReverseFill fun(self: statusbar) : boolean
---@class scrollframe : frame
---@field SetScrollChild fun(self: scrollframe, child: frame)
---@field GetScrollChild fun(self: scrollframe) : frame
---@field SetHorizontalScroll fun(self: scrollframe, offset: number)
---@field SetVerticalScroll fun(self: scrollframe, offset: number)
---@field GetHorizontalScroll fun(self: scrollframe) : number
---@field GetVerticalScroll fun(self: scrollframe) : number
---@field GetHorizontalScrollRange fun(self: scrollframe) : number
---@field GetVerticalScrollRange fun(self: scrollframe) : number
---@class region : uiobject
---@class fontstring : region
---@field SetDrawLayer fun(self: fontstring, layer: drawlayer, subLayer: number|nil)
---@field SetFont fun(self: fontstring, font: string, size: number, flags: string)
---@field SetText fun(self: fontstring, text: string|number)
---@field GetText fun(self: fontstring) : string
---@field GetFont fun(self: fontstring) : string, number, string
---@field GetStringWidth fun(self: fontstring) : number return the width of the string in pixels
---@field SetShadowColor fun(self: fontstring, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field GetShadowColor fun(self: fontstring) : number, number, number, number
---@field SetShadowOffset fun(self: fontstring, offsetX: number, offsetY: number)
---@field GetShadowOffset fun(self: fontstring) : number, number
---@field SetTextColor fun(self: fontstring, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field GetTextColor fun(self: fontstring) : number, number, number, number
---@field SetJustifyH fun(self: fontstring, justifyH: justifyh)
---@field GetJustifyH fun(self: fontstring) : string
---@field SetJustifyV fun(self: fontstring, justifyV: justifyv)
---@field GetJustifyV fun(self: fontstring) : string
---@field SetNonSpaceWrap fun(self: fontstring, nonSpaceWrap: boolean)
---@field GetNonSpaceWrap fun(self: fontstring) : boolean
---@field SetIndentedWordWrap fun(self: fontstring, indentedWordWrap: boolean)
---@field GetIndentedWordWrap fun(self: fontstring) : boolean
---@field SetMaxLines fun(self: fontstring, maxLines: number)
---@field GetMaxLines fun(self: fontstring) : number
---@field SetWordWrap fun(self: fontstring, wordWrap: boolean)
---@field GetWordWrap fun(self: fontstring) : boolean
---@field SetSpacing fun(self: fontstring, spacing: number)
---@field GetSpacing fun(self: fontstring) : number
---@field SetLineSpacing fun(self: fontstring, lineSpacing: number)
---@field GetLineSpacing fun(self: fontstring) : number
---@field SetMaxLetters fun(self: fontstring, maxLetters: number)
---@field GetMaxLetters fun(self: fontstring) : number
---@field SetTextInsets fun(self: fontstring, left: number, right: number, top: number, bottom: number)
---@field GetTextInsets fun(self: fontstring) : number, number, number, number
---@field SetTextJustification fun(self: fontstring, justifyH: string, justifyV: string)
---@field GetTextJustification fun(self: fontstring) : string, string
---@field SetTextShadowColor fun(self: fontstring, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field GetTextShadowColor fun(self: fontstring) : number, number, number, number
---@field SetTextShadowOffset fun(self: fontstring, offsetX: number, offsetY: number)
---@field GetTextShadowOffset fun(self: fontstring) : number, number
---@field SetTextShadow fun(self: fontstring, offsetX: number, offsetY: number, r: red|number, g: green|number, b: blue|number, a: alpha|number)
---@field SetTextTruncate fun(self: fontstring, truncate: string)
---@field GetTextTruncate fun(self: fontstring) : string
---@field SetTextTruncateWidth fun(self: fontstring, width: number)
---@field GetTextTruncateWidth fun(self: fontstring) : number
---@field SetTextTruncateLines fun(self: fontstring, lines: number)
---@field GetTextTruncateLines fun(self: fontstring) : number
---@class texture : region
---@field SetDrawLayer fun(self: texture, layer: drawlayer, subLayer: number|nil)
---@field SetTexture fun(self: texture, path: string)
---@field SetAtlas fun(self: texture, atlas: string)
---@field SetColorTexture fun(self: texture, r: red|number, g: green|number, b: blue|number, a: alpha|number|nil)
---@field SetDesaturated fun(self: texture, desaturate: boolean)
---@field SetBlendMode fun(self: texture, mode: "ADD"|"BLEND"|"DISABLE"|"MOD"|"MOD2X"|"OVERLAY"|"REPLACE"|"SUBTRACT")
---@field SetVertexColor fun(self: texture, r: red|number, g: green|number, b: blue|number, a: alpha|number|nil)
---@field GetPoint fun(self: texture, index: number) : string, table, string, number, number
---@field SetShown fun(self: texture, state: boolean)
---@field IsShown fun(self: texture) : boolean
---@field GetParent fun(self: texture) : table
---@field SetTexCoord fun(self: texture, left: number, right: number, top: number, bottom: number)
---@field GetTexCoord fun(self: texture) : number, number, number, number
---@field SetRotation fun(self: texture, rotation: number)
---@field GetRotation fun(self: texture) : number
---@field SetRotationRadians fun(self: texture, rotation: number)
---@field GetRotationRadians fun(self: texture) : number
---@field SetRotationDegrees fun(self: texture, rotation: number)
---@field GetRotationDegrees fun(self: texture) : number
---@field SetMask fun(self: texture, mask: table)
---@field GetMask fun(self: texture) : table
---@field SetMaskTexture fun(self: texture, maskTexture: table)
---@field GetMaskTexture fun(self: texture) : table
---@field GetDesaturated fun(self: texture) : boolean
---@field SetGradient fun(self: texture, gradient: string)
---@field GetGradient fun(self: texture) : string
---@field SetGradientAlpha fun(self: texture, gradient: string)
---@field GetGradientAlpha fun(self: texture) : string
---@field SetGradientRotation fun(self: texture, rotation: number)
---@field GetGradientRotation fun(self: texture) : number
---@field SetGradientRotationRadians fun(self: texture, rotation: number)
---@field GetGradientRotationRadians fun(self: texture) : number
---@field SetGradientRotationDegrees fun(self: texture, rotation: number)
---@field GetGradientRotationDegrees fun(self: texture) : number
---@field SetGradientColors fun(self: texture, ...)
---@field GetGradientColors fun(self: texture) : number, number, number, number, number, number, number, number, number, number, number, number
---@field GetBlendMode fun(self: texture) : string
---@field GetVertexColor fun(self: texture) : number, number, number, number
+1 -1
View File
@@ -87,7 +87,7 @@ function Details:StartMeUp()
if (Details.ocd_tracker.show_options) then
Details:InitializeCDTrackerWindow()
end
--/run Details.ocd_tracker.show_options = true; ReloadUI()
--custom window
Details.custom = Details.custom or {}