diff --git a/.gitignore b/.gitignore index c7bb7f33..c889e194 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/Libs/LibLuaServer/LICENSE b/Libs/LibLuaServer/LICENSE new file mode 100644 index 00000000..80585965 --- /dev/null +++ b/Libs/LibLuaServer/LICENSE @@ -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. diff --git a/Libs/LibLuaServer/LuaServerDefinitions.toc b/Libs/LibLuaServer/LuaServerDefinitions.toc new file mode 100644 index 00000000..891d8ac6 --- /dev/null +++ b/Libs/LibLuaServer/LuaServerDefinitions.toc @@ -0,0 +1,8 @@ +## Interface: 100105 +## Title: LuaServerDefinitions +## Notes: Development Tools +## Version: #@project-version@ + +## X-Curse-Project-ID: 889573 + +LuaServerDefinitions.lua \ No newline at end of file diff --git a/Libs/LibOpenRaid/LibOpenRaid.lua b/Libs/LibOpenRaid/LibOpenRaid.lua index 5784797c..9a083262 100644 --- a/Libs/LibOpenRaid/LibOpenRaid.lua +++ b/Libs/LibOpenRaid/LibOpenRaid.lua @@ -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 diff --git a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua index 7de8f136..cd92900c 100644 --- a/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua +++ b/Libs/LibOpenRaid/ThingsToMantain_Dragonflight.lua @@ -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 \ No newline at end of file diff --git a/boot.lua b/boot.lua index a8dca1b1..044631dc 100644 --- a/boot.lua +++ b/boot.lua @@ -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"}) diff --git a/classes/class_damage.lua b/classes/class_damage.lua index b4a202c3..0ed5ca47 100644 --- a/classes/class_damage.lua +++ b/classes/class_damage.lua @@ -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 diff --git a/core/parser.lua b/core/parser.lua index ad8b7ec8..60749a58 100755 --- a/core/parser.lua +++ b/core/parser.lua @@ -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 + 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 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 diff --git a/core/util.lua b/core/util.lua index a8da910f..0ad62412 100644 --- a/core/util.lua +++ b/core/util.lua @@ -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 diff --git a/frames/window_main.lua b/frames/window_main.lua index a0438170..a70516b5 100644 --- a/frames/window_main.lua +++ b/frames/window_main.lua @@ -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() diff --git a/plugins/Details_EncounterDetails/Libs/LibLuaServer/LuaServerDefinitions.lua b/plugins/Details_EncounterDetails/Libs/LibLuaServer/LuaServerDefinitions.lua deleted file mode 100644 index a1a75730..00000000 --- a/plugins/Details_EncounterDetails/Libs/LibLuaServer/LuaServerDefinitions.lua +++ /dev/null @@ -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 - diff --git a/startup.lua b/startup.lua index 14e0014f..236022a0 100644 --- a/startup.lua +++ b/startup.lua @@ -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 {}