zz_Bags/Libs/zzHelper/zzHelper.lua

182 lines
4.4 KiB
Lua
Executable File

local lib = LibStub:NewLibrary("zzHelper", 4)
if not lib then return end
lib['targets'] = lib['targets'] or {}
local mixins = {'colorize', 'round', 'sortArray', 'IsTwink', 'classcolor', 'MoneyString', 'MoneyStringSetString', 'MoneyStringSetSize'}
--[[
*** Stringfunctions ***
]]
function lib:colorize(text, color)
return string.format("|cff%s%s|r",color and color or 'ffffff',text and text or '')
end
local iconbase = "\124TInterface\\MoneyFrame\\UI-%sIcon:%d:%d:1:0\124t"
local iconSize = 14
local moneyText = {
gold = " G",
silver = " S",
copper = " C",
goldColor = lib:colorize(" G", "ffd700"),
silverColor = lib:colorize(" S", "bfc1c2"),
copperColor = lib:colorize(" C", "b87333"),
}
function lib:MoneyStringSetString(coin, str, col)
if(moneyText[coin]) then
moneyText[coin] = str
if(col) then
moneyText[format("%sColor",coin)] = col
end
end
end
function lib:MoneyStringSetSize(size)
if(size and size > 5 and size < 30) then
iconSize = size
end
end
function lib:MoneyString(money, color, abrevK, abrevM, noicon, noiconcolor, size, seperate)
local iconSize = size or iconSize
local goldicon = noicon and (noiconcolor and moneyText['goldColor'] or moneyText['gold']) or format(iconbase, 'Gold', iconSize, iconSize)
local silvericon = noicon and (noiconcolor and moneyText['silverColor'] or moneyText['silver']) or format(iconbase, 'Silver', iconSize, iconSize)
local coppericon = noicon and (noiconcolor and moneyText['copperColor'] or moneyText['copper']) or format(iconbase, 'Copper', iconSize, iconSize)
local moneystring = ''
local g,s,c
local neg = false
local abrev = ""
if(abrevM and money >= 10000000000) then
abrev = abrevM
money = lib:round(money / 10000000000,1) * 10000
elseif(abrevK and money >= 10000000) then
abrev = abrevK
money = lib:round(money / 10000000,1) * 10000
end
if(money <0) then
neg = true
money = money * -1
end
if(abrev=="") then
g=floor(money/10000)
s=floor((money-(g*10000))/100)
c=money-s*100-g*10000
else
g = money/10000
s = 0
c = 0
end
if(money > 0) then
if(g>0) then
if(seperate) then
g = BreakUpLargeNumbers(g)
end
moneystring = format("%s%s%s", color and lib:colorize(g, neg and "ff0000" or "44dd44") or g,abrev, goldicon)
end
if(s>0) then
moneystring = format("%s %s%s",moneystring, color and lib:colorize(s, neg and "ff0000" or "44dd44") or s, silvericon)
end
if(c>0) then
moneystring = format("%s %s%s",moneystring, color and lib:colorize(c, neg and "ff0000" or "44dd44") or c, coppericon)
end
else
moneystring = format("%s%s",color and '0' or '0', coppericon)
end
if(neg) then
moneystring = format("%s%s", lib:colorize("-","ff0000"), moneystring)
end
return moneystring
end
--[[
*** Mathfunctions ***
]]
function lib:round(num, idp)
return math.floor(num * (10^(idp or 0)) + 0.5) / (10^(idp or 0))
end
--[[
*** Arrayfunctions ***
]]
function lib:sortArray(tmp, dir)
local newtmp = {}
local n = 1
local cnt = 0
local maximum = 0
local first
for k, v in pairs(tmp) do
cnt = cnt + 1
if(v > maximum) then
maximum = v + 1
end
first = first or k
end
while(cnt > 0) do
local mx, mn = dir and maximum or 0, first
for k, v in pairs(tmp) do
if(dir) then
if(tonumber(v) <= tonumber(mx)) then
mx = v
mn = k
end
else
if(tonumber(v) >= tonumber(mx)) then
mx = v
mn = k
end
end
end
newtmp[n] = mn
tmp[mn] = nil
cnt = 0
for _ in pairs(tmp) do
cnt = cnt + 1
end
n = n + 1
mn = 0
mx = dir and mx or 0
end
return newtmp
end
--[[
*** Charfunctions ***
]]
function lib:IsTwink(name)
local at = self:GetAddOnTable()
local db = at['db']
local realm = GetRealmName()
local _
if(db['sv']['profileKeys']) then
for k, _ in pairs(db['sv']['profileKeys']) do
local n, m = strsplit(" - ", k, 2)
_,m = strsplit(" ",m,2)
if(n) then
if(n == name and m == realm) then
return true
end
end
end
end
return false
end
function lib:classcolor(text,class)
class = RAID_CLASS_COLORS[class] and class or "PRIEST"
return string.format("|c%s%s|r",RAID_CLASS_COLORS[class]['colorStr'],text)
end
--[[
*** End of functions ***
]]
function lib:Embed(target)
for _,name in pairs(mixins) do
target[name] = lib[name]
end
lib['targets'][target] = true
end
for target, _ in pairs(lib['targets']) do
lib:Embed(target)
end