WoWInterface SVN CooldownIconsRevamped

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /trunk
    from Rev 131 to Rev 132
    Reverse comparison

Rev 131 → Rev 132

CooldownIcons_Revamped/Libs/LibInternalCooldowns-1.0/LibInternalCooldowns-1.0.lua New file
0,0 → 1,282
local MAJOR = "LibInternalCooldowns-1.0"
local MINOR = tonumber(("$Revision: 15 $"):match("%d+"))
 
local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
if not lib then return end -- No Upgrade needed.
 
local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
 
local GetInventoryItemLink = _G.GetInventoryItemLink
local GetInventoryItemTexture = _G.GetInventoryItemTexture
local GetMacroInfo = _G.GetMacroInfo
local GetActionInfo = _G.GetActionInfo
local substr = _G.string.sub
local wipe = _G.wipe
local playerGUID = UnitGUID("player")
local GetTime = _G.GetTime
 
lib.spellToItem = lib.spellToItem or {}
lib.cooldownStartTimes = lib.cooldownStartTimes or {}
lib.cooldownDurations = lib.cooldownDurations or {}
lib.callbacks = lib.callbacks or CallbackHandler:New(lib)
lib.cooldowns = lib.cooldowns or nil
lib.hooks = lib.hooks or {}
 
local enchantProcTimes = {}
 
if not lib.eventFrame then
lib.eventFrame = CreateFrame("Frame")
lib.eventFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
lib.eventFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
lib.eventFrame:SetScript("OnEvent", function(frame, event, ...)
frame.lib[event](frame.lib, event, ...)
end)
end
lib.eventFrame.lib = lib
 
local INVALID_EVENTS = {
SPELL_DISPEL = true,
SPELL_DISPEL_FAILED = true,
SPELL_STOLEN = true,
SPELL_AURA_REMOVED = true,
SPELL_AURA_REMOVED_DOSE = true,
SPELL_AURA_BROKEN = true,
SPELL_AURA_BROKEN_SPELL = true,
SPELL_CAST_FAILED = true
}
 
local slots = {
AMMOSLOT = 0,
INVTYPE_HEAD = 1,
INVTYPE_NECK = 2,
INVTYPE_SHOULDER = 3,
INVTYPE_BODY = 4,
INVTYPE_CHEST = 5,
INVTYPE_WAIST = 6,
INVTYPE_LEGS = 7,
INVTYPE_FEET = 8,
INVTYPE_WRIST = 9,
INVTYPE_HAND = 10,
INVTYPE_FINGER = {11, 12},
INVTYPE_TRINKET = {13, 14},
INVTYPE_CLOAK = 15,
INVTYPE_WEAPONMAINHAND = 16,
INVTYPE_2HWEAPON = 16,
INVTYPE_WEAPON = {16, 17},
INVTYPE_HOLDABLE = 17,
INVTYPE_SHIELD = 17,
INVTYPE_WEAPONOFFHAND = 17,
INVTYPE_RANGED = 18
}
 
function lib:PLAYER_ENTERING_WORLD()
playerGUID = UnitGUID("player")
self:Hook("GetInventoryItemCooldown")
self:Hook("GetActionCooldown")
self:Hook("GetItemCooldown")
end
 
function lib:Hook(name)
-- unhook if a hook existed from an older copy
if lib.hooks[name] then
_G[name] = lib.hooks[name]
end
 
-- Re-hook it now
lib.hooks[name] = _G[name]
_G[name] = function(...)
return self[name](self, ...)
end
end
 
local function checkSlotForEnchantID(slot, enchantID)
local link = GetInventoryItemLink("player", slot)
if not link then return false; end
local itemID, enchant = link:match("item:(%d+):(%d+)")
if tonumber(enchant or -1) == enchantID then
return true, tonumber(itemID)
else
return false
end
end
 
local function isEquipped(itemID)
local _, _, _, _, _, _, _, _, equipLoc = GetItemInfo(itemID)
local slot = slots[equipLoc]
 
if type(slot) == "table" then
for _, v in ipairs(slot) do
local link = GetInventoryItemLink("player", v)
if link and link:match(("item:%s"):format(itemID)) then
return true
end
end
else
local link = GetInventoryItemLink("player", slot)
if link and link:match(("item:%s"):format(itemID)) then
return true
end
end
return false
end
 
function lib:COMBAT_LOG_EVENT_UNFILTERED(frame, timestamp, event, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, spellID, spellName)
playerGUID = playerGUID or UnitGUID("player")
if ((destGUID == playerGUID and (sourceGUID == nil or sourceGUID == destGUID)) or sourceGUID == playerGUID) and not INVALID_EVENTS[event] and substr(event, 0, 6) == "SPELL_" then
local itemID = lib.spellToItem[spellID]
if itemID then
if type(itemID) == "table" then
for k, v in ipairs(itemID) do
if isEquipped(v) then
self:SetCooldownFor(v, spellID, "ITEM")
end
end
return
else
if isEquipped(itemID) then
self:SetCooldownFor(itemID, spellID, "ITEM")
end
return
end
end
 
-- Tests for enchant procs
local enchantID = lib.enchants[spellID]
if enchantID then
local enchantID, slot1, slot2 = unpack(enchantID)
local enchantPresent, itemID, first, second
enchantPresent, itemID = checkSlotForEnchantID(slot1, enchantID)
if enchantPresent then
first = itemID
if (enchantProcTimes[slot1] or 0) < GetTime() - (lib.cooldowns[spellID] or 45) then
enchantProcTimes[slot1] = GetTime()
self:SetCooldownFor(itemID, spellID, "ENCHANT")
return
end
end
 
enchantPresent, itemID = checkSlotForEnchantID(slot2, enchantID)
if enchantPresent then
second = itemID
if (enchantProcTimes[slot2] or 0) < GetTime() - (lib.cooldowns[spellID] or 45) then
enchantProcTimes[slot2] = GetTime()
self:SetCooldownFor(itemID, spellID, "ENCHANT")
return
end
end
 
if first and second then
if enchantProcTimes[slot1] < enchantProcTimes[slot2] then
self:SetCooldownFor(first, spellID, "ENCHANT")
else
self:SetCooldownFor(second, spellID, "ENCHANT")
end
end
end
 
local metaID = lib.metas[spellID]
if metaID then
local link = GetInventoryItemLink("player", 1)
if link then
local id = tonumber(link:match("item:(%d+)") or 0)
if id and id ~= 0 then
self:SetCooldownFor(id, spellID, "META")
end
end
return
end
 
local talentID = lib.talents[spellID]
if talentID then
self:SetCooldownFor(("%s: %s"):format(UnitClass("player"), talentID), spellID, "TALENT")
return
end
end
end
 
function lib:SetCooldownFor(itemID, spellID, procSource)
local duration = lib.cooldowns[spellID] or 45
lib.cooldownStartTimes[itemID] = GetTime()
lib.cooldownDurations[itemID] = duration
 
-- Talents have a separate callback, so that InternalCooldowns_Proc always has an item ID.
if procSource == "TALENT" then
lib.callbacks:Fire("InternalCooldowns_TalentProc", spellID, GetTime(), duration, procSource)
else
lib.callbacks:Fire("InternalCooldowns_Proc", itemID, spellID, GetTime(), duration, procSource)
end
end
 
local function cooldownReturn(id)
if not id then return end
local hasItem = id and lib.cooldownStartTimes[id] and lib.cooldownDurations[id]
if hasItem then
if lib.cooldownStartTimes[id] + lib.cooldownDurations[id] > GetTime() then
return lib.cooldownStartTimes[id], lib.cooldownDurations[id], 1
else
return 0, 0, 0
end
else
return nil
end
end
 
function lib:IsInternalItemCooldown(itemID)
return cooldownReturn(itemID) ~= nil
end
 
function lib:GetInventoryItemCooldown(unit, slot)
local start, duration, enable = self.hooks.GetInventoryItemCooldown(unit, slot)
if not enable or enable == 0 then
local link = GetInventoryItemLink("player", slot)
if link then
local itemID = link:match("item:(%d+)")
itemID = tonumber(itemID or 0)
 
local start, duration, running = cooldownReturn(itemID)
if start then return start, duration, running end
end
end
return start, duration, enable
end
 
function lib:GetActionCooldown(slotID)
local t, id, subtype, globalID = GetActionInfo(slotID)
if t == "item" then
local start, duration, running = cooldownReturn(id)
if start then return start, duration, running end
elseif t == "macro" then
local _, tex = GetMacroInfo(id)
if tex == GetInventoryItemTexture("player", 13) then
id = tonumber(GetInventoryItemLink("player", 13):match("item:(%d+)"))
local start, duration, running = cooldownReturn(id)
if start then return start, duration, running end
elseif tex == GetInventoryItemTexture("player", 14) then
id = tonumber(GetInventoryItemLink("player", 14):match("item:(%d+)"))
local start, duration, running = cooldownReturn(id)
if start then return start, duration, running end
end
end
return self.hooks.GetActionCooldown(slotID)
end
 
function lib:GetItemCooldown(param)
local id
local iparam = tonumber(param)
if iparam and iparam > 0 then
id = param
elseif type(param) == "string" then
local name, link = GetItemInfo(param)
if link then
id = link:match("item:(%d+)")
end
end
 
if id then
id = tonumber(id)
local start, duration, running = cooldownReturn(id)
if start then return start, duration, running end
end
 
return self.hooks.GetItemCooldown(param)
end
CooldownIcons_Revamped/Libs/LibInternalCooldowns-1.0/Data.lua New file
0,0 → 1,252
local lib, oldminor = LibStub:GetLibrary("LibInternalCooldowns-1.0")
 
-- Format is spellID = itemID | {itemID, itemID, ... itemID}
local spellToItem = {
[64411] = 46017, -- Val'anyr, Hammer of Ancient Kings
 
[60065] = {44914, 40684, 49074}, -- Anvil of the Titans, Mirror of Truth, Coren's Chromium Coaster
[60488] = 40373, -- Extract of Necromatic Power
[64713] = 45518, -- Flare of the Heavens
[60064] = {44912, 40682, 49706}, -- Flow of Knowledge, Sundial of the Exiled, Mithril Pocketwatch
 
[67703] = {47303, 47115}, -- Death's Choice, Death's Verdict (AGI)
[67708] = {47303, 47115}, -- Death's Choice, Death's Verdict (STR)
[67772] = {47464, 47131}, -- Death's Choice, Death's Verdict (Heroic) (AGI)
[67773] = {47464, 47131}, -- Death's Choice, Death's Verdict (Heroic) (STR)
 
-- ICC epix
-- Rep rings
[72416] = {50398, 50397},
[72412] = {50402, 50401},
[72418] = {50399, 50400},
[72414] = {50404, 50403},
 
-- Deathbringer's Will (Non-heroic)
[71485] = 50362,
[71492] = 50362,
[71486] = 50362,
[71484] = 50362,
[71491] = 50362,
[71487] = 50362,
 
-- Deathbringer's Will (Heroic)
[71556] = 50363,
[71560] = 50363,
[71558] = 50363,
[71561] = 50363,
[71559] = 50363,
[71557] = 50363,
 
[71403] = 50198, -- Needle-Encrusted Scorpion
[71610] = 50359, -- Althor's Abacus
[71633] = 50352, -- Corpse-tongue coin
[71601] = 50353, -- Dislodged Foreign Object
[71584] = 50358, -- Purified Lunar Dust
[71401] = 50342, -- Whispering Fanged Skull
 
-- DK T9 2pc. WTF.
[67117] = {48501, 48502, 48503, 48504, 48505, 48472, 48474, 48476, 48478, 48480, 48491, 48492, 48493, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48486, 48487, 48488, 48489, 48490, 48481, 48482, 48483, 48484, 48485},
 
-- WotLK Epix
[67671] = 47214, -- Banner of Victory
[67669] = 47213, -- Abyssal Rune
[64772] = 45609, -- Comet's Trail
[65024] = 46038, -- Dark Matter
[60443] = 40371, -- Bandit's Insignia
[64790] = 45522, -- Blood of the Old God
[60203] = 42990, -- Darkmoon Card: Death
[60494] = 40255, -- Dying Curse
[65004] = 65005, -- Elemental Focus Stone
[60492] = 39229, -- Embrace of the Spider
[60530] = 40258, -- Forethought Talisman
[60437] = 40256, -- Grim Toll
[49623] = 37835, -- Je'Tze's Bell
[65019] = 45931, -- Mjolnir Runestone
[64741] = 45490, -- Pandora's Plea
[65014] = 45286, -- Pyrite Infuser
[65003] = 45929, -- Sif's Remembrance
[60538] = 40382, -- Soul of the Dead
[58904] = 43573, -- Tears of Bitter Anguish
[60062] = {40685, 49078}, -- The Egg of Mortal Essence, Ancient Pickled Egg
[64765] = 45507, -- The General's Heart
 
-- WotLK Blues
[51353] = 38358, -- Arcane Revitalizer
[60218] = 37220, -- Essence of Gossamer
[60479] = 37660, -- Forge Ember
[51348] = 38359, -- Goblin Repetition Reducer
[63250] = 45131, -- Jouster's Fury
[63250] = 45219, -- Jouster's Fury
[60302] = 37390, -- Meteorite Whetstone
[54808] = 40865, -- Noise Machine
[60483] = 37264, -- Pendulum of Telluric Currents
[52424] = 38675, -- Signet of the Dark Brotherhood
[55018] = 40767, -- Sonic Booster
[52419] = 38674, -- Soul Harvester's Charm
-- [18350] = 37111, -- Soul Preserver, no internal cooldown
[60520] = 37657, -- Spark of Life
[60307] = 37064, -- Vestige of Haldor
 
-- Greatness cards
[60233] = {44253, 44254, 44255, 42987}, -- Greatness, AGI
[60235] = {44253, 44254, 44255, 42987}, -- Greatness, SPI
[60229] = {44253, 44254, 44255, 42987}, -- Greatness, INT
[60234] = {44253, 44254, 44255, 42987}, -- Greatness, STR
 
-- Burning Crusade trinkets
-- None yet.
 
-- Vanilla Epix
[23684] = 19288, -- Darkmoon Card: Blue Dragon
}
 
-- spell ID = {enchant ID, slot1[, slot2]}
local enchants = {
-- [59620] = {3789, 16, 17}, -- Berserking, no ICD via testing.
-- [28093] = {2673, 16, 17}, -- Mongoose
-- [13907] = {912, 16, 17}, -- Demonslaying
[55637] = {3722, 15}, -- Lightweave
[55775] = {3730, 15}, -- Swordguard
[55767] = {3728, 15}, -- Darkglow
[59626] = {3790, 16}, -- Black Magic ?
[59625] = {3790, 16}, -- Black Magic ?
}
 
 
-- ICDs on metas assumed to be 45 sec. Needs testing.
local metas = {
-- I've commented these two out, because there aren't really any tactical decisions you could make based on them
-- [55382] = 41401, -- Insightful Earthsiege Diamond
-- [32848] = 25901, -- Insightful Earthstorm Diamond
 
[23454] = 25899, -- Brutal Earthstorm Diamond
[55341] = 41385, -- Invigorating Earthsiege Diamond
[18803] = 25893, -- Mystical Skyfire Diamond
[32845] = 25898, -- Tenacious Earthstorm Diamond
[39959] = 32410, -- Thundering Skyfire Diamond
[55379] = 41400 -- Thundering Skyflare Diamond
}
 
-- Spell ID => cooldown, in seconds
-- If an item isn't in here, 45 sec is assumed.
local cooldowns = {
-- ICC rep rings
[72416] = 60,
[72412] = 60,
[72418] = 60,
[72414] = 60,
 
[60488] = 15,
[51348] = 10,
[51353] = 10,
[54808] = 60,
[55018] = 60,
[52419] = 30,
[59620] = 90,
 
[55382] = 15,
[32848] = 15,
[55341] = 90, -- Invigorating Earthsiege, based on WowHead comments (lol?)
 
[48517] = 30,
[48518] = 30,
 
[47755] = 12,
 
-- Deathbringer's Will, XI from #elitistjerks says it's 105 sec so if it's wrong yell at him.
[71485] = 105,
[71492] = 105,
[71486] = 105,
[71484] = 105,
[71491] = 105,
[71487] = 105,
 
-- Deathbringer's Will (Heroic)
[71556] = 105,
[71560] = 105,
[71558] = 105,
[71561] = 105,
[71559] = 105,
[71557] = 105,
 
-- Black Magic
[59626] = 35,
[59625] = 35,
}
 
 
-- Procced spell effect ID = unique name
-- The name doesn't matter, as long as it's non-numeric and unique to the ICD.
local talents = {
-- Druid
[48517] = "Eclipse",
[48518] = "Eclipse",
 
-- Hunter
[56453] = "Lock and Load",
 
-- Death Knight
[52286] = "Will of the Necropolis",
 
-- Priest
[47755] = "Rapture"
}
-----------------------------------------------------------------------
-- Don't edit past this line --
-----------------------------------------------------------------------
 
------------------------------------
-- Upgrade this data into the lib
------------------------------------
 
lib.spellToItem = lib.spellToItem or {}
lib.cooldowns = lib.cooldowns or {}
lib.enchants = lib.enchants or {}
lib.metas = lib.metas or {}
lib.talents = lib.talents or {}
 
local tt, tts = {}, {}
local function merge(t1, t2)
wipe(tts)
for _, v in ipairs(t1) do
tts[v] = true
end
for _, v in ipairs(t2) do
if not tts[v] then
tinsert(t1, v)
end
end
end
 
for k, v in pairs(spellToItem) do
local e = lib.spellToItem[k]
if e and e ~= v then
if type(e) == "table" then
if type(v) ~= "table" then
wipe(tt)
tinsert(tt, v)
end
merge(e, tt)
else
lib.spellToItem[k] = {e, v}
end
else
lib.spellToItem[k] = v
end
end
 
for k, v in pairs(cooldowns) do
lib.cooldowns[k] = v
end
 
for k, v in pairs(enchants) do
lib.enchants[k] = v
end
 
for k, v in pairs(metas) do
lib.metas[k] = v
end
 
for k, v in pairs(talents) do
lib.talents[k] = v
end
CooldownIcons_Revamped/Libs/LibInternalCooldowns-1.0/lib.xml New file
0,0 → 1,6
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
 
<Script file="LibInternalCooldowns-1.0.lua"/>
<Script file="Data.lua"/>
</Ui>
CooldownIcons_Revamped/Libs/LibSharedMedia-3.0/LibSharedMedia-3.0.lua New file
0,0 → 1,230
--[[
Name: LibSharedMedia-3.0
Revision: $Revision: 58 $
Author: Elkano (elkano@gmx.de)
Inspired By: SurfaceLib by Haste/Otravi (troeks@gmail.com)
Website: http://www.wowace.com/projects/libsharedmedia-3-0/
Description: Shared handling of media data (fonts, sounds, textures, ...) between addons.
Dependencies: LibStub, CallbackHandler-1.0
License: LGPL v2.1
]]
 
local MAJOR, MINOR = "LibSharedMedia-3.0", 90000 + tonumber(("$Revision: 58 $"):match("(%d+)"))
local lib = LibStub:NewLibrary(MAJOR, MINOR)
 
if not lib then return end
 
local _G = getfenv(0)
 
local pairs = _G.pairs
local type = _G.type
 
local band = _G.bit.band
 
local table_insert = _G.table.insert
local table_sort = _G.table.sort
 
local locale = GetLocale()
local locale_is_western
local LOCALE_MASK = 0
lib.LOCALE_BIT_koKR = 1
lib.LOCALE_BIT_ruRU = 2
lib.LOCALE_BIT_zhCN = 4
lib.LOCALE_BIT_zhTW = 8
lib.LOCALE_BIT_western = 128
 
local CallbackHandler = LibStub:GetLibrary("CallbackHandler-1.0")
 
lib.callbacks = lib.callbacks or CallbackHandler:New(lib)
 
lib.DefaultMedia = lib.DefaultMedia or {}
lib.MediaList = lib.MediaList or {}
lib.MediaTable = lib.MediaTable or {}
lib.MediaType = lib.MediaType or {}
lib.OverrideMedia = lib.OverrideMedia or {}
 
local defaultMedia = lib.DefaultMedia
local mediaList = lib.MediaList
local mediaTable = lib.MediaTable
local overrideMedia = lib.OverrideMedia
 
 
-- create mediatype constants
lib.MediaType.BACKGROUND = "background" -- background textures
lib.MediaType.BORDER = "border" -- border textures
lib.MediaType.FONT = "font" -- fonts
lib.MediaType.STATUSBAR = "statusbar" -- statusbar textures
lib.MediaType.SOUND = "sound" -- sound files
 
-- populate lib with default Blizzard data
-- BACKGROUND
if not lib.MediaTable.background then lib.MediaTable.background = {} end
lib.MediaTable.background["Blizzard Dialog Background"] = [[Interface\DialogFrame\UI-DialogBox-Background]]
lib.MediaTable.background["Blizzard Low Health"] = [[Interface\FullScreenTextures\LowHealth]]
lib.MediaTable.background["Blizzard Out of Control"] = [[Interface\FullScreenTextures\OutOfControl]]
lib.MediaTable.background["Blizzard Parchment"] = [[Interface\AchievementFrame\UI-Achievement-Parchment-Horizontal]]
lib.MediaTable.background["Blizzard Parchment 2"] = [[Interface\AchievementFrame\UI-Achievement-Parchment]]
lib.MediaTable.background["Blizzard Tabard Background"] = [[Interface\TabardFrame\TabardFrameBackground]]
lib.MediaTable.background["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Background]]
lib.MediaTable.background["Solid"] = [[Interface\Buttons\WHITE8X8]]
 
-- BORDER
if not lib.MediaTable.border then lib.MediaTable.border = {} end
lib.MediaTable.border["None"] = [[Interface\None]]
lib.MediaTable.border["Blizzard Achievement Wood"] = [[Interface\AchievementFrame\UI-Achievement-WoodBorder]]
lib.MediaTable.border["Blizzard Chat Bubble"] = [[Interface\Tooltips\ChatBubble-Backdrop]]
lib.MediaTable.border["Blizzard Dialog"] = [[Interface\DialogFrame\UI-DialogBox-Border]]
lib.MediaTable.border["Blizzard Dialog Gold"] = [[Interface\DialogFrame\UI-DialogBox-Gold-Border]]
lib.MediaTable.border["Blizzard Party"] = [[Interface\CHARACTERFRAME\UI-Party-Border]]
lib.MediaTable.border["Blizzard Tooltip"] = [[Interface\Tooltips\UI-Tooltip-Border]]
 
-- FONT
if not lib.MediaTable.font then lib.MediaTable.font = {} end
local SML_MT_font = lib.MediaTable.font
if locale == "koKR" then
LOCALE_MASK = lib.LOCALE_BIT_koKR
--
SML_MT_font["굵은 글꼴"] = [[Fonts\2002B.TTF]]
SML_MT_font["기본 글꼴"] = [[Fonts\2002.TTF]]
SML_MT_font["데미지 글꼴"] = [[Fonts\K_Damage.TTF]]
SML_MT_font["퀘스트 글꼴"] = [[Fonts\K_Pagetext.TTF]]
--
lib.DefaultMedia["font"] = "기본 글꼴" -- someone from koKR please adjust if needed
--
elseif locale == "zhCN" then
LOCALE_MASK = lib.LOCALE_BIT_zhCN
--
SML_MT_font["伤害数字"] = [[Fonts\ZYKai_C.ttf]]
SML_MT_font["默认"] = [[Fonts\ZYKai_T.ttf]]
SML_MT_font["聊天"] = [[Fonts\ZYHei.ttf]]
--
lib.DefaultMedia["font"] = "默认" -- someone from zhCN please adjust if needed
--
elseif locale == "zhTW" then
LOCALE_MASK = lib.LOCALE_BIT_zhTW
--
SML_MT_font["提示訊息"] = [[Fonts\bHEI00M.ttf]]
SML_MT_font["聊天"] = [[Fonts\bHEI01B.ttf]]
SML_MT_font["傷害數字"] = [[Fonts\bKAI00M.ttf]]
SML_MT_font["預設"] = [[Fonts\bLEI00D.ttf]]
--
lib.DefaultMedia["font"] = "預設" -- someone from zhTW please adjust if needed
 
elseif locale == "ruRU" then
LOCALE_MASK = lib.LOCALE_BIT_ruRU
--
SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
SML_MT_font["Nimrod MT"] = [[Fonts\NIM_____.ttf]]
SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
--
lib.DefaultMedia.font = "Friz Quadrata TT"
--
else
LOCALE_MASK = lib.LOCALE_BIT_western
locale_is_western = true
--
SML_MT_font["Arial Narrow"] = [[Fonts\ARIALN.TTF]]
SML_MT_font["Friz Quadrata TT"] = [[Fonts\FRIZQT__.TTF]]
SML_MT_font["Morpheus"] = [[Fonts\MORPHEUS.TTF]]
SML_MT_font["Skurri"] = [[Fonts\SKURRI.TTF]]
--
lib.DefaultMedia.font = "Friz Quadrata TT"
--
end
 
-- STATUSBAR
if not lib.MediaTable.statusbar then lib.MediaTable.statusbar = {} end
lib.MediaTable.statusbar["Blizzard"] = [[Interface\TargetingFrame\UI-StatusBar]]
lib.DefaultMedia.statusbar = "Blizzard"
 
-- SOUND
if not lib.MediaTable.sound then lib.MediaTable.sound = {} end
lib.MediaTable.sound["None"] = [[Interface\Quiet.mp3]] -- Relies on the fact that PlaySound[File] doesn't error on non-existing input.
lib.DefaultMedia.sound = "None"
 
local function rebuildMediaList(mediatype)
local mtable = mediaTable[mediatype]
if not mtable then return end
if not mediaList[mediatype] then mediaList[mediatype] = {} end
local mlist = mediaList[mediatype]
-- list can only get larger, so simply overwrite it
local i = 0
for k in pairs(mtable) do
i = i + 1
mlist[i] = k
end
table_sort(mlist)
end
 
function lib:Register(mediatype, key, data, langmask)
if type(mediatype) ~= "string" then
error(MAJOR..":Register(mediatype, key, data, langmask) - mediatype must be string, got "..type(mediatype))
end
if type(key) ~= "string" then
error(MAJOR..":Register(mediatype, key, data, langmask) - key must be string, got "..type(key))
end
if mediatype == lib.MediaType.FONT and ((langmask and band(langmask, LOCALE_MASK) == 0) or not (langmask or locale_is_western)) then return false end
mediatype = mediatype:lower()
if not mediaTable[mediatype] then mediaTable[mediatype] = {} end
local mtable = mediaTable[mediatype]
if mtable[key] then return false end
 
mtable[key] = data
rebuildMediaList(mediatype)
self.callbacks:Fire("LibSharedMedia_Registered", mediatype, key)
return true
end
 
function lib:Fetch(mediatype, key, noDefault)
local mtt = mediaTable[mediatype]
local overridekey = overrideMedia[mediatype]
local result = mtt and ((overridekey and mtt[overridekey] or mtt[key]) or (not noDefault and defaultMedia[mediatype] and mtt[defaultMedia[mediatype]])) or nil
 
return result
end
 
function lib:IsValid(mediatype, key)
return mediaTable[mediatype] and (not key or mediaTable[mediatype][key]) and true or false
end
 
function lib:HashTable(mediatype)
return mediaTable[mediatype]
end
 
function lib:List(mediatype)
if not mediaTable[mediatype] then
return nil
end
if not mediaList[mediatype] then
rebuildMediaList(mediatype)
end
return mediaList[mediatype]
end
 
function lib:GetGlobal(mediatype)
return overrideMedia[mediatype]
end
 
function lib:SetGlobal(mediatype, key)
if not mediaTable[mediatype] then
return false
end
overrideMedia[mediatype] = (key and mediaTable[mediatype][key]) and key or nil
self.callbacks:Fire("LibSharedMedia_SetGlobal", mediatype, overrideMedia[mediatype])
return true
end
 
function lib:GetDefault(mediatype)
return defaultMedia[mediatype]
end
 
function lib:SetDefault(mediatype, key)
if mediaTable[mediatype] and mediaTable[mediatype][key] and not defaultMedia[mediatype] then
defaultMedia[mediatype] = key
return true
else
return false
end
end
CooldownIcons_Revamped/Libs/LibSharedMedia-3.0/lib.xml New file
0,0 → 1,4
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
..\FrameXML\UI.xsd">
<Script file="LibSharedMedia-3.0.lua" />
</Ui>
\ No newline at end of file
CooldownIcons_Revamped/Libs/LibStub/LibStub.lua New file
0,0 → 1,30
-- LibStub is a simple versioning stub meant for use in Libraries. http://www.wowace.com/wiki/LibStub for more info
-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 2 -- NEVER MAKE THIS AN SVN REVISION! IT NEEDS TO BE USABLE IN ALL REPOS!
local LibStub = _G[LIBSTUB_MAJOR]
 
if not LibStub or LibStub.minor < LIBSTUB_MINOR then
LibStub = LibStub or {libs = {}, minors = {} }
_G[LIBSTUB_MAJOR] = LibStub
LibStub.minor = LIBSTUB_MINOR
 
function LibStub:NewLibrary(major, minor)
assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
minor = assert(tonumber(strmatch(minor, "%d+")), "Minor version must either be a number or contain a number.")
 
local oldminor = self.minors[major]
if oldminor and oldminor >= minor then return nil end
self.minors[major], self.libs[major] = minor, self.libs[major] or {}
return self.libs[major], oldminor
end
 
function LibStub:GetLibrary(major, silent)
if not self.libs[major] and not silent then
error(("Cannot find a library instance of %q."):format(tostring(major)), 2)
end
return self.libs[major], self.minors[major]
end
 
function LibStub:IterateLibraries() return pairs(self.libs) end
setmetatable(LibStub, { __call = LibStub.GetLibrary })
end