mirror of
https://codeberg.org/Duvelcorp/MetaHunt.git
synced 2026-09-22 07:36:58 +00:00
203 lines
6.3 KiB
Lua
203 lines
6.3 KiB
Lua
------------------------------------------------------
|
|
-- GFWUtils.lua
|
|
-- Useful utility / debug functions
|
|
------------------------------------------------------
|
|
|
|
GFWUTILS_THIS_VERSION = 8;
|
|
|
|
------------------------------------------------------
|
|
|
|
-- Shortcuts for common text color codes
|
|
function GFWUtils_temp_HiliteText(text)
|
|
if (text == nil) then return nil; end
|
|
return HIGHLIGHT_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
function GFWUtils_temp_RedText(text)
|
|
if (text == nil) then return nil; end
|
|
return RED_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
function GFWUtils_temp_GrayText(text)
|
|
if (text == nil) then return nil; end
|
|
return GRAY_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
function GFWUtils_temp_LightYellowText(text)
|
|
if (text == nil) then return nil; end
|
|
return LIGHTYELLOW_FONT_COLOR_CODE..text..FONT_COLOR_CODE_CLOSE;
|
|
end
|
|
|
|
-- Prints a message to the chat frame
|
|
function GFWUtils_temp_Print(message, r, g, b)
|
|
if MTH and MTH.Print then
|
|
MTH:Print(message)
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage(message, (r or GFW_FONT_COLOR.r), (g or GFW_FONT_COLOR.g), (b or GFW_FONT_COLOR.b));
|
|
end
|
|
end
|
|
|
|
-- Prints a message to the chat frame once per interval (seconds) or once per session if interval is nil
|
|
function GFWUtils_temp_PrintOnce(message, interval, r, g, b)
|
|
if (GFWUtils.PrintOnceCache == nil) then
|
|
GFWUtils.PrintOnceCache = {};
|
|
end
|
|
if (interval == nil and GFWUtils.PrintOnceCache[message]) then
|
|
return;
|
|
end
|
|
if (interval and GFWUtils.PrintOnceCache[message] and GetTime() - GFWUtils.PrintOnceCache[message] < interval) then
|
|
return;
|
|
end
|
|
if MTH and MTH.Print then
|
|
MTH:Print(message)
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage(message, (r or GFW_FONT_COLOR.r), (g or GFW_FONT_COLOR.g), (b or GFW_FONT_COLOR.b));
|
|
end
|
|
GFWUtils.PrintOnceCache[message] = GetTime();
|
|
end
|
|
|
|
-- Prints a message to the chat frame only if Debug is set
|
|
function GFWUtils_temp_DebugLog(message)
|
|
if (GFWUtils.Debug) then
|
|
if MTH and MTH.Print then
|
|
MTH:Print(message, "debug")
|
|
else
|
|
DEFAULT_CHAT_FRAME:AddMessage(message, GFW_DEBUG_COLOR.r, GFW_DEBUG_COLOR.g, GFW_DEBUG_COLOR.b);
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Prints a message in yellow to the floating messages frame
|
|
function GFWUtils_temp_Note(message)
|
|
UIErrorsFrame:AddMessage(message, 1.0, 1.0, 0.0, 1.0, UIERRORS_HOLD_TIME);
|
|
end
|
|
|
|
-- Converts string.format to a string.find pattern: "%s hits %s for %d." to "(.+) hits (.+) for (%d+)"
|
|
-- based on Recap by Gello
|
|
function GFWUtils_temp_FormatToPattern(formatString)
|
|
|
|
local patternString = formatString;
|
|
|
|
patternString = string.gsub(patternString, "%%%d+%$([diouXxfgbcsq])", "%%%1"); -- reordering specifiers (e.g. %2$s) stripped
|
|
patternString = string.gsub(patternString, "([%$%(%)%.%[%]%*%+%-%?%^])", "%%%1"); -- convert regex special characters
|
|
|
|
patternString = string.gsub(patternString, "%%c", "(.)"); -- %c to (.)
|
|
patternString = string.gsub(patternString, "%%s", "(.+)"); -- %s to (.+)
|
|
patternString = string.gsub(patternString, "%%[du]", "(%%d+)"); -- %d to (%d+)
|
|
patternString = string.gsub(patternString, "%%([gf])", "(%%d+%%.*%%d*)"); -- %g or %f to (%d+%.*%d*)
|
|
|
|
return patternString;
|
|
|
|
end
|
|
|
|
-- Splits a string into a table of strings separated by 'separator'.
|
|
-- e.g. Split(aString, ", ") is the reverse of table.concat(aTable, ", ")
|
|
function GFWUtils_temp_Split(aString, separator)
|
|
if (aString == nil) then return nil; end
|
|
|
|
local t = {};
|
|
local function helper(segment)
|
|
table.insert(t, segment);
|
|
end
|
|
helper((string.gsub(aString, "(.-)"..separator, helper)));
|
|
return t;
|
|
end
|
|
|
|
-- Capitalizes the first letter of each word in aString.
|
|
function GFWUtils_temp_TitleCase(aString)
|
|
if (aString == nil) then return nil; end
|
|
local function capWords(first, rest)
|
|
return string.upper(first)..string.lower(rest);
|
|
end
|
|
return string.gsub(aString, "(%w)([%w_']*)", capWords);
|
|
end
|
|
|
|
-- Splits a cash amount into gold, siver, and copper
|
|
function GFWUtils_temp_GSC(money)
|
|
if (money == nil) then money = 0; end
|
|
local g = math.floor(money / 10000);
|
|
local s = math.floor((money - (g*10000)) / 100);
|
|
local c = math.floor(money - (g*10000) - (s*100));
|
|
return g,s,c;
|
|
end
|
|
|
|
-- Formats money text by color for gold, silver, copper
|
|
-- discards copper for amounts greater than 1g unless second arg evaluates true
|
|
-- based on Auctioneer
|
|
function GFWUtils_temp_TextGSC(money, noRound)
|
|
local GSC_GOLD="ffd100";
|
|
local GSC_SILVER="e6e6e6";
|
|
local GSC_COPPER="c8602c";
|
|
local GSC_START="|cff%s%d%s|r";
|
|
local GSC_PART=" |cff%s%02d%s|r";
|
|
local GSC_NONE="|cffa0a0a0none|r";
|
|
|
|
local g, s, c = GFWUtils.GSC(money);
|
|
|
|
local gsc = "";
|
|
if (g > 0) then
|
|
gsc = format(GSC_START, GSC_GOLD, g, "g");
|
|
if (s > 0) then
|
|
gsc = gsc..format(GSC_PART, GSC_SILVER, s, "s");
|
|
if (noRound and c > 0) then
|
|
gsc = gsc..format(GSC_PART, GSC_COPPER, c, "c");
|
|
end
|
|
end
|
|
elseif (s > 0) then
|
|
gsc = format(GSC_START, GSC_SILVER, s, "s");
|
|
if (c > 0) then
|
|
gsc = gsc..format(GSC_PART, GSC_COPPER, c, "c");
|
|
end
|
|
elseif (c > 0) then
|
|
gsc = gsc..format(GSC_START, GSC_COPPER, c, "c");
|
|
else
|
|
gsc = GSC_NONE;
|
|
end
|
|
|
|
return gsc;
|
|
end
|
|
|
|
function GFWUtils_temp_ItemLink(linkInfo)
|
|
local sName, sLink, iQuality, iLevel, sType, sSubType, iCount = GetItemInfo(linkInfo);
|
|
if (sName) then
|
|
local _, _, _, color = GetItemQualityColor(iQuality);
|
|
local linkFormat = "%s|H%s|h[%s]|h|r";
|
|
return string.format(linkFormat, color, sLink, sName);
|
|
else
|
|
return nil;
|
|
end
|
|
end
|
|
|
|
------------------------------------------------------
|
|
-- load only if not already loaded
|
|
------------------------------------------------------
|
|
|
|
if (GFWUtils == nil) then
|
|
GFWUtils = {};
|
|
end
|
|
local G = GFWUtils;
|
|
if (G.Version == nil or (tonumber(G.Version) ~= nil and G.Version < GFWUTILS_THIS_VERSION)) then
|
|
|
|
-- Constants
|
|
GFW_FONT_COLOR = {r=0.25, g=1.0, b=1.0};
|
|
GFW_DEBUG_COLOR = {r=1.0, g=0.75, b=0.25};
|
|
G.Debug = false;
|
|
|
|
-- Functions
|
|
G.Hilite = GFWUtils_temp_HiliteText;
|
|
G.Red = GFWUtils_temp_RedText;
|
|
G.Gray = GFWUtils_temp_GrayText;
|
|
G.LtY = GFWUtils_temp_LightYellowText;
|
|
G.Print = GFWUtils_temp_Print;
|
|
G.PrintOnce = GFWUtils_temp_PrintOnce;
|
|
G.DebugLog = GFWUtils_temp_DebugLog;
|
|
G.Note = GFWUtils_temp_Note;
|
|
G.FormatToPattern = GFWUtils_temp_FormatToPattern;
|
|
G.Split = GFWUtils_temp_Split;
|
|
G.TitleCase = GFWUtils_temp_TitleCase;
|
|
G.GSC = GFWUtils_temp_GSC;
|
|
G.TextGSC = GFWUtils_temp_TextGSC;
|
|
G.ItemLink = GFWUtils_temp_ItemLink;
|
|
|
|
-- Set version number
|
|
G.Version = GFWUTILS_THIS_VERSION;
|
|
end
|
|
|