vanilla-wow-addons – Rev 1
?pathlinks?
--PriceEach version 0.02
--Released 10/33/05
--
--originally based off of code in ShowBid (which, unless updated for 1.8, probably doesn't work anymore)
--also, BIG thanks to the author of AuctionSort, for showing me how to make this work under 1.8 before the patch hit :)
--credit to other authors in the several functions
--
--todo: load on demand
--
--Hangar of Silvermoon
PRICEEACH_VERSION="0.02";
local orig_AuctionFrameBrowse_Update;
function PriceEach_OnLoad()
local name,title,notes,enabled,loadable,reason,security
name,title,notes,enabled,loadable,reason,security = GetAddOnInfo("PriceEach");
this:RegisterEvent("AUCTION_ITEM_LIST_UPDATE");
this:RegisterEvent("VARIABLES_LOADED");
orig_AuctionFrameBrowse_Update = AuctionFrameBrowse_Update;
AuctionFrameBrowse_Update = PriceEach_AuctionFrameBrowse_Update;
DEFAULT_CHAT_FRAME:AddMessage(GREEN_FONT_COLOR_CODE..title.." "..PRICEEACH_VERSION.." loaded"..FONT_COLOR_CODE_CLOSE);
SLASH_PRICEEACHSLASH1 = "/pe";
SlashCmdList["PRICEEACHSLASH"] = PriceEach_Enable_ChatCommandHandler;
end
function PriceEach_Enable_ChatCommandHandler(text)
local msg = TextParse(text); --take a string and return a table with each word from the string in each entry
msg[1] = strlower(msg[1]);
if msg[1] == "warn" and msg[2] and tonumber(msg[2]) then
DickThreshold = tonumber(msg[2]);
DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE.."PriceEach warning threshold is now set to: "..FONT_COLOR_CODE_CLOSE..HIGHLIGHT_FONT_COLOR_CODE..msg[2]..FONT_COLOR_CODE_CLOSE);
elseif msg[1] == "warn" then
SetDick(); --in case they /pe warn before they've loaded the AH
DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE.."PriceEach warning threshold is currently set to: "..FONT_COLOR_CODE_CLOSE..HIGHLIGHT_FONT_COLOR_CODE..DickThreshold..FONT_COLOR_CODE_CLOSE);
else
DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE.."PriceEach: Invalid option. Please use: /pe warn [#], where # is the amount of gold you want to be warned if price each is greater than. Omit the # for current threshold."..FONT_COLOR_CODE_CLOSE);
end
end
function PriceEach_OnEvent(event, arg1, arg2, arg3)
if (event == "VARIABLES_LOADED") then
SetDick(); --make sure a good value coming from variables
end
end
function SetDick()
--i'm sorry, but anyone who's selling a citrine for 90g IS a dick :p
if (DickThreshold == nil) then
DickThreshold = 5;
DEFAULT_CHAT_FRAME:AddMessage(LIGHTYELLOW_FONT_COLOR_CODE.."PriceEach warning threshold set to the default: "..FONT_COLOR_CODE_CLOSE..HIGHLIGHT_FONT_COLOR_CODE..DickThreshold..FONT_COLOR_CODE_CLOSE);
end
end
function PriceEach_AuctionFrameBrowse_Update()
SetDick(); --set in case they haven't /pe warned yet or opened ah
local offset = FauxScrollFrame_GetOffset(BrowseScrollFrame);
local index;
local button, buttonName;
orig_AuctionFrameBrowse_Update();
for i=1, NUM_BROWSE_TO_DISPLAY do
index = offset + i + (NUM_AUCTION_ITEMS_PER_PAGE * AuctionFrameBrowse.page);
button = getglobal("BrowseButton"..i);
buttonName = "BrowseButton"..i;
local name, texture, count, quality, canUse, level, minBid, minIncrement, buyoutPrice, bidAmount, highBidder, owner = GetAuctionItemInfo("list", offset + i);
if (name ~= nil) then
local aiLink = GetAuctionItemLink("list", offset + i); --get clicky-link
local aiItemID, aiRandomProp, aiEnchant, aiUniqID = breakLink(aiLink); --extract itemID from clicky-link
local sName, sLink, iQuality, iLevel, sType, sSubType, iCount, iEquipLoc = GetItemInfo(aiItemID); --
if (buyoutPrice > 0 ) and (iCount > 1) then --~= nil) then
itemName = getglobal(buttonName.."Name");
local oldtext = itemName:GetText();
local pereach = floor(buyoutPrice / count);
local g,s,c = ConvertMoney(pereach);
local gt,st,ct;
local peText;
peText = " ("
if (g > 0) then
if (g >= DickThreshold) then --5
peText = peText..RED_FONT_COLOR_CODE..g.."g"..FONT_COLOR_CODE_CLOSE;
else
peText = peText..NORMAL_FONT_COLOR_CODE..g.."g"..FONT_COLOR_CODE_CLOSE;
end
end
if (s > 0) then
if (g > 0) then
peText = peText.." ";
end
if (g >= DickThreshold) then --5
peText = peText..GetHex(0.8,0.8,0.8)..s.."s"..FONT_COLOR_CODE_CLOSE;
else
peText = peText..GetHex(0.8,0.8,0.8)..s.."s"..FONT_COLOR_CODE_CLOSE;
end
end
if (c > 0) then
if (g > 0) or (s > 0) then
peText = peText.." ";
end
if (g >= DickThreshold) then --5
peText = peText..GetHex(0.8,0.5,0.4)..c.."c"..FONT_COLOR_CODE_CLOSE;
else
peText = peText..GetHex(0.8,0.5,0.4)..c.."c"..FONT_COLOR_CODE_CLOSE;
end
end
peText = peText..")"
itemName:SetText(oldtext..peText);
end --if (buyoutPrice > 0 ) and (iCount ~= nil) then
end --if (name ~= nil) then
end --for
end --function
--courtesy EnhTooltip:
function ConvertMoney(copper)
if (copper == nil) then copper = 0; end
local g = math.floor(copper / 10000);
local s = math.floor((copper - (g*10000)) / 100);
local c = math.floor(copper - (g*10000) - (s*100));
return g,s,c;
end
--courtesy EnhTooltip:
function breakLink(link)
if (type(link) ~= 'string') then return end
local i,j, itemID, enchant, randomProp, uniqID, name = string.find(link, "|Hitem:(%d+):(%d+):(%d+):(%d+)|h[[]([^]]+)[]]|h")
return tonumber(itemID or 0), tonumber(randomProp or 0), tonumber(enchant or 0), tonumber(uniqID or 0), name
end
--courtesy watchdog:
function GetHex(r,g,b)
local TehHaxx0r;
if g then
return string.format("|cFF%02X%02X%02X", (255*r), (255*g), (255*b))
elseif r then
return string.format("|cFF%02X%02X%02X", (255*r.r), (255*r.g), (255*r.b))
else
return ""
end
end
--Text Parsing. Yay!
function TextParse(InputString)
--[[ By FERNANDO!
This function should take a string and return a table with each word from the string in
each entry. IE, "Linoleum is teh awesome" returns {"Linoleum", "is", "teh", "awesome"}
Some good should come of this, I've been avoiding writing a text parser for a while, and
I need one I understand completely. ^_^
If you want to gank this function and use it for whatever, feel free. Just give me props
somewhere. This function, as far as I can tell, is fairly foolproof. It's hard to get it
to screw up. It's also completely self-contained. Just cut and paste.]]
local Text = InputString;
local TextLength = 1;
local OutputTable = {};
local OTIndex = 1;
local StartAt = 1;
local StopAt = 1;
local TextStart = 1;
local TextStop = 1;
local TextRemaining = 1;
local NextSpace = 1;
local Chunk = "";
local Iterations = 1;
local EarlyError = false;
if ((Text ~= nil) and (Text ~= "")) then
-- ... Yeah. I'm not even going to begin without checking to make sure Im not getting
-- invalid data. The big ol crashes I got with my color functions taught me that. ^_^
-- First, it's time to strip out any extra spaces, ie any more than ONE space at a time.
while (string.find(Text, " ") ~= nil) do
Text = string.gsub(Text, " ", " ");
end
-- Now, what if text consisted of only spaces, for some ungodly reason? Well...
if (string.len(Text) <= 1) then
EarlyError = true;
end
-- Now, if there is a leading or trailing space, we nix them.
if EarlyError ~= true then
TextStart = 1;
TextStop = string.len(Text);
if (string.sub(Text, TextStart, TextStart) == " ") then
TextStart = TextStart+1;
end
if (string.sub(Text, TextStop, TextStop) == " ") then
TextStop = TextStop-1;
end
Text = string.sub(Text, TextStart, TextStop);
end
-- Finally, on to breaking up the goddamn string.
OTIndex = 1;
TextRemaining = string.len(Text);
while (StartAt <= TextRemaining) and (EarlyError ~= true) do
-- NextSpace is the index of the next space in the string...
NextSpace = string.find(Text, " ",StartAt);
-- if there isn't another space, then StopAt is the length of the rest of the
-- string, otherwise it's just before the next space...
if (NextSpace ~= nil) then
StopAt = (NextSpace - 1);
else
StopAt = string.len(Text);
LetsEnd = true;
end
Chunk = string.sub(Text, StartAt, StopAt);
OutputTable[OTIndex] = Chunk;
OTIndex = OTIndex + 1;
StartAt = StopAt + 2;
end
else
OutputTable[1] = "Error: Bad value passed to TextParse!";
end
if (EarlyError ~= true) then
return OutputTable;
else
return {"Error: Bad value passed to TextParse!"};
end
end
Generated by GNU Enscript 1.6.5.90.