Add Auctionator core and Buy UI

This commit is contained in:
2026-10-07 18:49:02 +00:00
parent a26c34a95b
commit cd67c06043
5 changed files with 6838 additions and 0 deletions
+4357
View File
File diff suppressed because it is too large Load Diff
+1269
View File
File diff suppressed because it is too large Load Diff
+80
View File
@@ -0,0 +1,80 @@
-----------------------------------------
local origGetSellValue = GetSellValue;
local origGetAuctionBuyout = GetAuctionBuyout;
-----------------------------------------
function GetSellValue (item) -- Tekkub's API
return Atr_GetSellValue(item);
end
-----------------------------------------
function GetAuctionBuyout (item) -- Tekkub's API
return Atr_GetAuctionBuyout(item);
end
-----------------------------------------
function Atr_GetSellValue (item) -- Just like Tekkub's API but for when you want to be sure you're calling Auctionator's version of it
local _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, sellval = Atr_GetItemInfo (item);
if (sellval ~= nil) then
return sellval;
end
if (origGetSellValue) then
return origGetSellValue(item);
end
return 0;
end
-----------------------------------------
function Atr_GetAuctionBuyout (item) -- Just like Tekkub's API but for when you want to be sure you're calling Auctionator's version of it
local sellval;
if (type(item) == "string") then
sellval = Atr_GetAuctionPrice(item);
end
if (sellval == nil) then
local name = Atr_GetItemInfo (item);
if (name) then
sellval = Atr_GetAuctionPrice(name);
end
end
if (sellval) then
return sellval;
end
if (origGetAuctionBuyout) then
return origGetAuctionBuyout(item);
end
return nil;
end
-----------------------------------------
function Atr_GetDisenchantValue (item)
local itemName, itemLink, itemRarity, itemLevel, _, itemType = Atr_GetItemInfo (item);
if (itemLink) then
return Atr_CalcDisenchantPrice (itemType, itemRarity, itemLevel);
end
return nil;
end
+389
View File
@@ -0,0 +1,389 @@
local addonName, addonTable = "Auctionator", AtrNS;
local zc = addonTable.zc;
local ATR_BUY_NULL = 0;
local ATR_BUY_QUERY_SENT = 1;
local ATR_BUY_JUST_BOUGHT = 2;
local ATR_BUY_PROCESSING_QUERY_RESULTS = 3;
local ATR_BUY_WAITING_FOR_AH_CAN_SEND = 4;
local gBuyState = ATR_BUY_NULL;
-----------------------------------------
local gAtr_Buy_BuyoutPrice;
local gAtr_Buy_ItemName;
local gAtr_Buy_StackSize;
local gAtr_Buy_NumBought;
local gAtr_Buy_NumUserWants;
local gAtr_Buy_MaxCanBuy;
local gAtr_Buy_CurPage;
local gAtr_Buy_Waiting_Start;
local gAtr_Buy_Query;
local gAtr_Buy_Pass;
-----------------------------------------
function Atr_Buy_Debug1 (yellow)
if (gBuyState == ATR_BUY_NULL) then asstr = "ATR_BUY_NULL"; end;
if (gBuyState == ATR_BUY_QUERY_SENT) then asstr = "ATR_BUY_QUERY_SENT"; end;
if (gBuyState == ATR_BUY_PROCESSING_QUERY_RESULTS) then asstr = "ATR_BUY_PROCESSING_QUERY_RESULTS"; end;
if (gBuyState == ATR_BUY_JUST_BOUGHT) then asstr = "ATR_BUY_JUST_BOUGHT"; end;
if (gBuyState == ATR_BUY_WAITING_FOR_AH_CAN_SEND) then asstr = "ATR_BUY_WAITING_FOR_AH_CAN_SEND"; end;
if (gBuyState ~= ATR_BUY_NULL) then
if (yellow) then
zc.msg (asstr, "curpage: ", gAtr_Buy_CurPage, " gAtr_Buy_NumBought: ", gAtr_Buy_NumBought);
else
zc.msg_pink (asstr, "curpage: ", gAtr_Buy_CurPage, " gAtr_Buy_NumBought: ", gAtr_Buy_NumBought);
end
end
end
-----------------------------------------
function Atr_Buy_IsBusy ()
if (gBuyState == ATR_BUY_NULL) then
return false;
end
if (gBuyState == ATR_BUY_PROCESSING_QUERY_RESULTS and not Atr_Buy_Confirm_Frame:IsShown()) then
return false;
end
return true;
end
-----------------------------------------
function Atr_ClearBuyState()
gBuyState = ATR_BUY_NULL;
end
-----------------------------------------
function Atr_Buy1_Onclick ()
if (not Atr_ShowingCurrentAuctions()) then
return;
end
local searchPane = Atr_GetCurrentPane();
if (searchPane.activeSearch and searchPane.activeSearch:IsActive()) then
searchPane.activeSearch:Pause(); -- resumes when the purchase is over
end
gAtr_Buy_Query = Atr_NewQuery();
gAtr_Buy_NumUserWants = -1;
gAtr_Buy_NumBought = 0;
local currentPane = Atr_GetCurrentPane();
local scan = currentPane.activeScan;
local data = scan.sortedData[currentPane.currIndex];
gAtr_Buy_BuyoutPrice = data.buyoutPrice;
gAtr_Buy_ItemName = scan.itemName;
gAtr_Buy_StackSize = data.stackSize;
gAtr_Buy_MaxCanBuy = data.count;
gAtr_Buy_Pass = 1; -- - first pass
Atr_Buy_Confirm_ItemName:SetText (gAtr_Buy_ItemName.." x"..gAtr_Buy_StackSize);
Atr_Buy_Confirm_Numstacks:SetNumber (1);
Atr_Buy_Confirm_Max_Text:SetText (ZT("max")..": "..gAtr_Buy_MaxCanBuy);
Atr_Buy_Part1:Show();
Atr_Buy_Part2:Hide();
Atr_Buy_Confirm_OKBut:SetText (ZT("Buy"))
Atr_Buy_Confirm_OKBut:Disable();
Atr_Buy_Confirm_Frame:Show();
if (scan.searchWasExact and data.minpage ~= nil) then
Atr_Buy_QueueQuery(data.minpage);
else
Atr_Buy_QueueQuery(0);
end
end
-----------------------------------------
function Atr_Buy_QueueQuery (page)
gAtr_Buy_CurPage = page;
--zc.msg_pink ("Queuing query for page ", page);
gBuyState = ATR_BUY_WAITING_FOR_AH_CAN_SEND;
gAtr_Buy_Waiting_Start = time();
Atr_Buy_SendQuery(); -- give it a shot
end
-----------------------------------------
function Atr_Buy_SendQuery ()
if (Atr_CanSendAuctionQuery ()) then
gBuyState = ATR_BUY_QUERY_SENT;
local queryString = zc.UTF8_Truncate (gAtr_Buy_ItemName,63); -- attempting to reduce number of disconnects
Atr_QueryAuctionItems (queryString, "", "", nil, 0, 0, gAtr_Buy_CurPage, nil, nil);
end
end
-----------------------------------------
local prevBuyState;
-----------------------------------------
function Atr_Buy_Idle ()
if (gBuyState ~= prevBuyState) then
prevBuyState = gBuyState;
-- Atr_Buy_Debug1 (true);
end
if (gBuyState == ATR_BUY_WAITING_FOR_AH_CAN_SEND) then
-- zc.md ("WAITING_FOR_AH_CAN_SEND: ", time() - gAtr_Buy_Waiting_Start);
if (GetMoney() < gAtr_Buy_BuyoutPrice) then
Atr_Buy_Cancel (ZT("You do not have enough gold\n\nto make any more purchases."));
elseif (time() - gAtr_Buy_Waiting_Start > 10) then
Atr_Buy_Cancel (ZT("Auction House timed out"));
else
Atr_Buy_SendQuery ();
end
elseif (gBuyState == ATR_BUY_JUST_BOUGHT) then
-- zc.msg_pink ("ATR_BUY_JUST_BOUGHT: ", time() - gAtr_Buy_Waiting_Start);
local queueIf = (time() - gAtr_Buy_Waiting_Start > 2); -- wait a few seconds for Auction List to Update after buys
Atr_Buy_NextPage_Or_Cancel (queueIf);
end
end
-----------------------------------------
function Atr_Buy_OnAuctionUpdate()
-- Atr_Buy_Debug1();
if (gBuyState == ATR_BUY_QUERY_SENT) then
Atr_Buy_CheckForMatches ();
end
return (gBuyState ~= ATR_BUY_NULL);
end
-----------------------------------------
function Atr_Buy_CheckForMatches ()
gBuyState = ATR_BUY_PROCESSING_QUERY_RESULTS;
if (gAtr_Buy_Query:CheckForDuplicatePage(gAtr_Buy_CurPage)) then
Atr_Buy_QueueQuery (gAtr_Buy_CurPage);
return;
end
local isLastPage = gAtr_Buy_Query:IsLastPage(gAtr_Buy_CurPage);
local numMatches = Atr_Buy_CountMatches();
if (numMatches > 0) then -- update the confirmation screen
Atr_Buy_Confirm_OKBut:Enable();
if (gAtr_Buy_NumUserWants ~= -1) then
Atr_Buy_Continue_Text:SetText (string.format (ZT("%d of %d bought so far"), gAtr_Buy_NumBought, gAtr_Buy_NumUserWants));
Atr_Buy_Part1:Hide();
Atr_Buy_Part2:Show();
Atr_Buy_Confirm_OKBut:SetText (ZT("Continue"))
end
else
Atr_Buy_NextPage_Or_Cancel();
end
end
-----------------------------------------
function Atr_Buy_BuyMatches ()
return Atr_Buy_CountMatches (true);
end
-----------------------------------------
function Atr_Buy_CountMatches (andBuy)
local numMatches = 0;
local numBoughtThisPage = 0;
local i = 1;
while (true) do
local name, _, count, _, _, _, _, _, buyoutPrice, _ = GetAuctionItemInfo ("list", i);
if (name == nil) then
break;
end
if (zc.StringSame (name, gAtr_Buy_ItemName) and buyoutPrice == gAtr_Buy_BuyoutPrice and count == gAtr_Buy_StackSize) then
numMatches = numMatches + 1;
if (andBuy and gAtr_Buy_NumUserWants > gAtr_Buy_NumBought) then
PlaceAuctionBid("list", i, gAtr_Buy_BuyoutPrice);
numBoughtThisPage = numBoughtThisPage + 1;
gAtr_Buy_NumBought = gAtr_Buy_NumBought + 1;
end
end
i = i + 1;
end
return numMatches, numBoughtThisPage;
end
-----------------------------------------
function Atr_Buy_Confirm_Update ()
local num = Atr_Buy_Confirm_Numstacks:GetNumber();
if (num == 1) then
Atr_Buy_Confirm_Text2:SetText (ZT("stack for"));
else
Atr_Buy_Confirm_Text2:SetText (ZT("stacks for"));
end
MoneyFrame_Update ("Atr_Buy_Confirm_TotalPrice", gAtr_Buy_BuyoutPrice * num);
end
-----------------------------------------
function Atr_Buy_NextPage_Or_Cancel ( queueIf )
if (Atr_Buy_IsComplete()) then
Atr_Buy_Cancel();
elseif (queueIf == nil or queueIf == true) then
if (Atr_Buy_IsFirstPassComplete()) then
gAtr_Buy_Pass = 2;
Atr_Buy_QueueQuery(0);
else
Atr_Buy_QueueQuery(gAtr_Buy_CurPage + 1);
end
end
end
-----------------------------------------
function Atr_Buy_IsComplete ()
if (gAtr_Buy_NumUserWants ~= -1 and gAtr_Buy_NumUserWants <= gAtr_Buy_NumBought) then
return true;
end
if (gAtr_Buy_Query:IsLastPage(gAtr_Buy_CurPage) and gAtr_Buy_Pass == 2) then
return true;
end
return false;
end
-----------------------------------------
function Atr_Buy_IsFirstPassComplete ()
if (gAtr_Buy_Query:IsLastPage(gAtr_Buy_CurPage) and gAtr_Buy_Pass == 1) then
return true;
end
return false;
end
-----------------------------------------
function Atr_Buy_Confirm_OK ()
if (gAtr_Buy_NumUserWants == -1) then
local numToBuy = Atr_Buy_Confirm_Numstacks:GetNumber();
if (numToBuy > gAtr_Buy_MaxCanBuy) then
Atr_Error_Text:SetText (string.format (ZT("You can buy at most %d auctions"), gAtr_Buy_MaxCanBuy));
Atr_Error_Frame:Show ();
return;
end
gAtr_Buy_NumUserWants = numToBuy;
end
local _, numJustBought = Atr_Buy_BuyMatches ();
if (numJustBought > 0) then
--zc.msg (numJustBought, " from page ", gAtr_Buy_CurPage);
AuctionatorSubtractFromScan (gAtr_Buy_ItemName, gAtr_Buy_StackSize, gAtr_Buy_BuyoutPrice, gAtr_Buy_NumBought);
gBuyState = ATR_BUY_JUST_BOUGHT;
gAtr_Buy_Waiting_Start = time();
Atr_Buy_Confirm_OKBut:Disable();
else
Atr_Buy_NextPage_Or_Cancel();
end
end
-----------------------------------------
function Atr_Buy_Wait_For_Bought_To_Clear ()
zc.md ("Atr_Buy_Wait_For_Bought_To_Clear: ", time() - gAtr_Buy_Waiting_Start);
end
-----------------------------------------
function Atr_Buy_Cancel (msg)
gBuyState = ATR_BUY_NULL;
Atr_Buy_Confirm_Frame:Hide();
Atr_Error_Display(msg);
end
+743
View File
@@ -0,0 +1,743 @@
local addonName, addonTable = "Auctionator", AtrNS;
local zc = addonTable.zc;
AtrNS.optionPanels = AtrNS.optionPanels or {};
-----------------------------------------
function Atr_LoadOptionsSubPanel (f, name, title, subtitle)
f.name = name
local frameName = f:GetName();
f.okay = getglobal (frameName.."_Save")
if (title == nil) then title = name; end
if (subtitle == nil) then subtitle = ""; end
getglobal (frameName.."_ATitle"):SetText (title);
getglobal (frameName.."_BTitle"):SetText (subtitle);
-- 3.x registered these with the Interface Options window; here they live in Atr_OptionsWindow
tinsert (AtrNS.optionPanels, f);
end
-----------------------------------------
-----------------------------------------
function Atr_Options_Cancel ()
Atr_InitOptionsPanels();
end
-----------------------------------------
function Atr_InitOptionsPanels()
if (AUCTIONATOR_SAVEDVARS == nil) then
Atr_ResetSavedVars();
end
Atr_SetupBasicOptionsFrame();
Atr_SetupTooltipsOptionsFrame();
Atr_SetupUCConfigFrame();
Atr_SetupStackingFrame();
Atr_SetupOptionsFrame();
Atr_SetupScanningConfigFrame();
end
-----------------------------------------
function Atr_SetupOptionsFrame()
local expText = "<html><body>"
.."<p>"..ZT("The latest information on Auctionator can be found at").." auctionator-addon.com.".."</p>"
.."<p><br/>"
.."|cffaaaaaa"..string.format (ZT("German translation courtesy of %s"), "|rCkaotik").."<br/>"
.."|cffaaaaaa"..string.format (ZT("Russian translation courtesy of %s"), "|rStingerSoft").."<br/>"
.."|cffaaaaaa"..string.format (ZT("Swedish translation courtesy of %s"), "|rHellManiac").."<br/>"
.."|cffaaaaaa"..string.format (ZT("French translation courtesy of %s"), "|rKiskewl").."<br/>"
.."|cffaaaaaa"..string.format (ZT("Spanish translation courtesy of %s"), "|rElfindor").."<br/>"
.."</p>"
.."</body></html>"
;
AuctionatorDescriptionHTML:SetText (expText);
AuctionatorDescriptionHTML:SetSpacing (3);
AuctionatorVersionText:SetText (ZT("Version")..": "..AuctionatorVersion);
end
-----------------------------------------
function Atr_SetDurationOptionRB(name)
Atr_RB_S:SetChecked (zc.StringEndsWith (name, "S"));
Atr_RB_M:SetChecked (zc.StringEndsWith (name, "M"));
Atr_RB_L:SetChecked (zc.StringEndsWith (name, "L"));
end
-----------------------------------------
function Atr_BasicOptionsFrame_Save()
local origValues = zc.msg_str (AUCTIONATOR_ENABLE_ALT, AUCTIONATOR_OPEN_ALL_BAGS, AUCTIONATOR_SHOW_ST_PRICE, AUCTIONATOR_DEFTAB, AUCTIONATOR_DEF_DURATION);
AUCTIONATOR_ENABLE_ALT = zc.BoolToNum(AuctionatorOption_Enable_Alt_CB:GetChecked ());
AUCTIONATOR_OPEN_ALL_BAGS = zc.BoolToNum(AuctionatorOption_Open_All_Bags_CB:GetChecked ());
AUCTIONATOR_SHOW_ST_PRICE = zc.BoolToNum(AuctionatorOption_Show_StartingPrice_CB:GetChecked ());
AUCTIONATOR_DEFTAB = UIDropDownMenu_GetSelectedValue(AuctionatorOption_Deftab);
AUCTIONATOR_DEF_DURATION = "N";
if (AuctionatorOption_Def_Duration_CB:GetChecked()) then
if (Atr_RB_S:GetChecked()) then AUCTIONATOR_DEF_DURATION = "S"; end;
if (Atr_RB_M:GetChecked()) then AUCTIONATOR_DEF_DURATION = "M"; end;
if (Atr_RB_L:GetChecked()) then AUCTIONATOR_DEF_DURATION = "L"; end;
end
local newValues = zc.msg_str (AUCTIONATOR_ENABLE_ALT, AUCTIONATOR_OPEN_ALL_BAGS, AUCTIONATOR_SHOW_ST_PRICE, AUCTIONATOR_DEFTAB, AUCTIONATOR_DEF_DURATION);
if (origValues ~= newValues) then
zc.msg_atr (ZT ("basic options saved"));
end
Atr_ShowHide_StartingPrice();
end
-----------------------------------------
function Atr_SetupBasicOptionsFrame()
Atr_BasicOptionsFrame_BTitle:SetText (string.format (ZT("Basic Options for %s"), "|cffffff55"..UnitName("player")));
AuctionatorOption_Enable_Alt_CB:SetChecked (zc.NumToBool(AUCTIONATOR_ENABLE_ALT));
AuctionatorOption_Open_All_Bags_CB:SetChecked (zc.NumToBool(AUCTIONATOR_OPEN_ALL_BAGS));
AuctionatorOption_Show_StartingPrice_CB:SetChecked (zc.NumToBool(AUCTIONATOR_SHOW_ST_PRICE));
UIDropDownMenu_Initialize (AuctionatorOption_Deftab, AuctionatorOption_Deftab_Initialize);
UIDropDownMenu_SetSelectedValue (AuctionatorOption_Deftab, AUCTIONATOR_DEFTAB);
AuctionatorOption_Def_Duration_CB:SetChecked (AUCTIONATOR_DEF_DURATION == "S" or AUCTIONATOR_DEF_DURATION == "M" or AUCTIONATOR_DEF_DURATION == "L");
Atr_SetDurationOptionRB (AUCTIONATOR_DEF_DURATION);
end
-----------------------------------------
function Atr_SetupTooltipsOptionsFrame ()
ATR_tipsVendorOpt_CB:SetChecked (zc.NumToBool(AUCTIONATOR_V_TIPS));
ATR_tipsAuctionOpt_CB:SetChecked (zc.NumToBool(AUCTIONATOR_A_TIPS));
ATR_tipsDisenchantOpt_CB:SetChecked (zc.NumToBool(AUCTIONATOR_D_TIPS));
UIDropDownMenu_Initialize(Atr_tipsShiftDD, Atr_tipsShiftDD_Initialize);
UIDropDownMenu_SetSelectedValue(Atr_tipsShiftDD, AUCTIONATOR_SHIFT_TIPS);
UIDropDownMenu_Initialize(Atr_deDetailsDD, Atr_deDetailsDD_Initialize);
UIDropDownMenu_SetSelectedValue(Atr_deDetailsDD, AUCTIONATOR_DE_DETAILS_TIPS);
end
-----------------------------------------
function Atr_TooltipsOptionsFrame_Save()
local origValues = zc.msg_str (AUCTIONATOR_V_TIPS, AUCTIONATOR_A_TIPS, AUCTIONATOR_D_TIPS, AUCTIONATOR_SHIFT_TIPS, AUCTIONATOR_DE_DETAILS_TIPS);
AUCTIONATOR_V_TIPS = zc.BoolToNum(ATR_tipsVendorOpt_CB:GetChecked ());
AUCTIONATOR_A_TIPS = zc.BoolToNum(ATR_tipsAuctionOpt_CB:GetChecked ());
AUCTIONATOR_D_TIPS = zc.BoolToNum(ATR_tipsDisenchantOpt_CB:GetChecked ());
AUCTIONATOR_SHIFT_TIPS = UIDropDownMenu_GetSelectedValue(Atr_tipsShiftDD);
AUCTIONATOR_DE_DETAILS_TIPS = UIDropDownMenu_GetSelectedValue(Atr_deDetailsDD);
local newValues = zc.msg_str (AUCTIONATOR_V_TIPS, AUCTIONATOR_A_TIPS, AUCTIONATOR_D_TIPS, AUCTIONATOR_SHIFT_TIPS, AUCTIONATOR_DE_DETAILS_TIPS);
if (origValues ~= newValues) then
zc.msg_atr (ZT("tooltip configuration saved"));
end
end
-----------------------------------------
function AuctionatorOption_Deftab_Initialize()
local info = UIDropDownMenu_CreateInfo();
Atr_AddMenuPick (info, ZT("None"), 0, AuctionatorOption_Deftab_OnClick);
Atr_AddMenuPick (info, ZT("Sell"), 1, AuctionatorOption_Deftab_OnClick);
Atr_AddMenuPick (info, ZT("Buy"), 2, AuctionatorOption_Deftab_OnClick);
Atr_AddMenuPick (info, ZT("More"), 3, AuctionatorOption_Deftab_OnClick);
end
-----------------------------------------
function AuctionatorOption_Deftab_OnClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
end
-----------------------------------------
function Atr_tipsShiftDD_Initialize()
local info = UIDropDownMenu_CreateInfo();
Atr_AddMenuPick (info, ZT("stack price"), 1, Atr_tipsShiftDD_OnClick);
Atr_AddMenuPick (info, ZT("per item price"), 2, Atr_tipsShiftDD_OnClick);
end
-----------------------------------------
function Atr_tipsShiftDD_OnClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
end
-----------------------------------------
function Atr_deDetailsDD_Initialize()
local info = UIDropDownMenu_CreateInfo();
Atr_AddMenuPick (info, ZT("when SHIFT is held down"), 1, Atr_deDetailsDD_OnClick);
Atr_AddMenuPick (info, ZT("when CONTROL is held down"), 2, Atr_deDetailsDD_OnClick);
Atr_AddMenuPick (info, ZT("when ALT is held down"), 3, Atr_deDetailsDD_OnClick);
Atr_AddMenuPick (info, ZT("never"), 4, Atr_deDetailsDD_OnClick);
Atr_AddMenuPick (info, ZT("always"), 5, Atr_deDetailsDD_OnClick);
end
-----------------------------------------
function Atr_deDetailsDD_OnClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
end
-----------------------------------------
function Atr_Option_OnClick (self)
if (zc.StringContains (self:GetName(), "Open_BUY") and self:GetChecked()) then
AuctionatorOption_Open_SELL_CB:SetChecked (false);
end
if (zc.StringContains (self:GetName(), "Open_SELL") and self:GetChecked()) then
AuctionatorOption_Open_BUY_CB:SetChecked (false);
end
end
-----------------------------------------
local kThresh = {}
kThresh[1] = { amt=5000000, text=ZT("over %d gold"), v=500 };
kThresh[2] = { amt=1000000, text=ZT("over %d gold"), v=100 };
kThresh[3] = { amt=200000, text=ZT("over %d gold"), v=20 };
kThresh[4] = { amt=50000, text=ZT("over %d gold"), v=5 };
kThresh[5] = { amt=10000, text=ZT("over 1 gold"), v=1 };
kThresh[6] = { amt=2000, text=ZT("over %d silver"), v=20 };
kThresh[7] = { amt=500, text=ZT("over %d silver"), v=5 };
-----------------------------------------
function Atr_SetupUCConfigFrame()
for i = 1, getn(kThresh) do
local amt = kThresh[i].amt;
local linetext = string.format (kThresh[i].text, kThresh[i].v);
getglobal("UC_"..amt.."_RangeText"):SetText (linetext);
MoneyInputFrame_SetCopper (getglobal("UC_"..amt.."_MoneyInput"), AUCTIONATOR_SAVEDVARS["_"..amt]);
end
Atr_Starting_Discount:SetText (AUCTIONATOR_SAVEDVARS.STARTING_DISCOUNT);
end
-----------------------------------------
function Atr_UCConfigFrame_Save()
local origValues = AUCTIONATOR_SAVEDVARS.STARTING_DISCOUNT;
AUCTIONATOR_SAVEDVARS.STARTING_DISCOUNT = Atr_Starting_Discount:GetNumber ();
local newValues = AUCTIONATOR_SAVEDVARS.STARTING_DISCOUNT;
for i = 1, getn(kThresh) do
local amt = kThresh[i].amt;
origValues = origValues + AUCTIONATOR_SAVEDVARS["_"..amt];
AUCTIONATOR_SAVEDVARS["_"..amt] = MoneyInputFrame_GetCopper(getglobal("UC_"..amt.."_MoneyInput"));
newValues = newValues + AUCTIONATOR_SAVEDVARS["_"..amt];
end
if (origValues ~= newValues) then
zc.msg_atr (ZT("undercutting configuration saved"));
end
end
-----------------------------------------
local function plistEntry (key, txt, num, size)
return { sortkey=key, text=txt, numstacks=num, stacksize=size }
end
-----------------------------------------
local function plistSort (x, y)
return x.sortkey < y.sortkey;
end
-----------------------------------------
local kStackList_LinesToDisplay = 12;
local gStackList_SelectedIndex = 0;
local gStackList_plist;
kStackList_categories = {};
kStackList_categories[ATR_SK_GLYPHS] = { txt=ZT("Glyphs") }
kStackList_categories[ATR_SK_GEMS_CUT] = { txt=ZT("Gems - Cut") }
kStackList_categories[ATR_SK_GEMS_UNCUT] = { txt=ZT("Gems - Uncut") }
kStackList_categories[ATR_SK_ITEM_ENH] = { txt=ZT("Item Enhancements") }
kStackList_categories[ATR_SK_POT_ELIX] = { txt=ZT("Potions and Elixirs") }
kStackList_categories[ATR_SK_FLASKS] = { txt=ZT("Flasks") }
kStackList_categories[ATR_SK_HERBS] = { txt=ZT("Herbs") }
-----------------------------------------
function Atr_SetupStackingFrame ()
if (getglobal ("Atr_StackList1") == nil) then
local line, n;
for n = 1, kStackList_LinesToDisplay do
local y = -5 - ((n-1)*16);
line = CreateFrame("BUTTON", "Atr_StackList"..n, Atr_Stacking_List, "Atr_StackingEntryTemplate");
line:SetPoint("TOP", 0, y);
end
end
Atr_StackingList_Display();
end
-----------------------------------------
function Atr_StackingList_Display()
gStackList_plist = {};
local plist = gStackList_plist;
local text, spinfo;
local sortkey, info;
local n = 1;
for sortkey, info in pairs (kStackList_categories) do
info.overrideFound = false;
end
for text, spinfo in pairs (AUCTIONATOR_STACKING_PREFS) do
-- skip over any that were set automatically rather than explicitly by the user
-- and mark the built-in categories
if (spinfo.numstacks ~= 0) then
local sortkey = text;
if (kStackList_categories[text]) then
kStackList_categories[text].overrideFound = true;
text = kStackList_categories[text].txt;
end
plist[n] = plistEntry (sortkey, text, spinfo.numstacks, spinfo.stacksize);
n = n + 1;
end
end
for sortkey, info in pairs (kStackList_categories) do
if (not info.overrideFound) then
plist[n] = plistEntry (sortkey, info.txt, -2, 0);
n = n + 1;
end
end
table.sort (plist, plistSort)
local totalRows = getn(plist);
local line; -- 1 through NN of our window to scroll
local dataOffset; -- an index into our data calculated from the scroll offset
FauxScrollFrame_Update (Atr_Stacking_ScrollFrame, totalRows, kStackList_LinesToDisplay, 16);
for line = 1,kStackList_LinesToDisplay do
dataOffset = line + FauxScrollFrame_GetOffset (Atr_Stacking_ScrollFrame);
local lineEntry = getglobal ("Atr_StackList"..line);
lineEntry:SetID (dataOffset);
if (dataOffset <= totalRows and plist[dataOffset]) then
local lineEntry_text = getglobal("Atr_StackList"..line.."_text");
local lineEntry_info = getglobal("Atr_StackList"..line.."_info");
local pdata = plist[dataOffset];
local colorText = ((pdata.text == pdata.sortkey) and "" or "|cffffff88");
lineEntry_text:SetText (colorText..pdata.text);
local numstacks = plist[dataOffset].numstacks;
local stacksize = plist[dataOffset].stacksize;
local info = "???";
if (numstacks == -2) then info = "|cff777777"..ZT("default behavior");
elseif (numstacks == -1) then info = string.format (ZT("max. stacks of %d"), stacksize);
elseif (stacksize == 0) then info = "1 "..ZT("stack");
elseif (numstacks == 0) then info = ZT("stacks of").." "..stacksize;
elseif (numstacks > 0) then info = numstacks.." "..ZT("stacks of").." "..stacksize;
end
lineEntry_info:SetText (info);
if (gStackList_SelectedIndex == dataOffset) then
Atr_SetRowSelected (lineEntry, true);
else
Atr_SetRowSelected (lineEntry, false);
end
lineEntry:Show();
else
lineEntry:Hide();
end
end
zc.EnableDisable (Atr_StackingOptionsFrame_Edit, gStackList_SelectedIndex > 0);
end
-----------------------------------------
function Atr_StackingEntry_OnClick(self)
gStackList_SelectedIndex = self:GetID();
Atr_StackingList_Display();
end
-----------------------------------------
function Atr_StackingEntry_OnDoubleClick(self)
Atr_StackingEntry_OnClick(self);
Atr_StackingList_Edit_OnClick();
end
-----------------------------------------
function Atr_Memorize_Show (isNew)
local numStacks = -1;
local stackSize = 1;
zc.ShowHide (Atr_Mem_itemName_static, not isNew);
zc.ShowHide (Atr_Mem_EB_itemName, isNew);
zc.ShowHide (Atr_Mem_Forget, not isNew);
Atr_MemorizeFrame["isCategory"] = false;
if (not isNew) then
local x = gStackList_SelectedIndex;
local plist = gStackList_plist;
Atr_Mem_itemName_static:SetText (plist[x].text);
stackSize = plist[x].stacksize
numStacks = plist[x].numstacks
local isCategory = (plist[x].sortkey ~= plist[x].text);
Atr_MemorizeFrame["isCategory"] = isCategory;
if (isCategory and numStacks == -2) then
numStacks = -1;
stackSize = 1;
end
zc.SetTextIf (Atr_Mem_itemName_text, isCategory, ZT("Category"), ZT("Item Name"));
zc.SetTextIf (Atr_Mem_Forget, isCategory, ZT("Reset to Default"), ZT("Forget this Item"));
end
Atr_Mem_EB_stackSize:SetText (stackSize);
UIDropDownMenu_Initialize (Atr_Mem_DD_numStacks, Atr_SONumStacks_Initialize);
UIDropDownMenu_SetSelectedValue (Atr_Mem_DD_numStacks, numStacks);
Atr_Mem_EB_itemName:SetText ("");
ShowInterfaceOptionsMask();
Atr_MemorizeFrame:Show();
end
-----------------------------------------
function Atr_StackingList_Edit_OnClick()
Atr_Memorize_Show(false);
end
-----------------------------------------
function Atr_StackingList_New_OnClick()
Atr_Memorize_Show(true);
end
-----------------------------------------
function Atr_Memorize_Save()
local x = gStackList_SelectedIndex;
local plist = gStackList_plist;
local key = Atr_Mem_EB_itemName:GetText();
if (key == nil or key == "") then
key = plist[x].sortkey;
end
if (key and key ~= "") then
Atr_Set_StackingPrefs_numstacks (key, UIDropDownMenu_GetSelectedValue (Atr_Mem_DD_numStacks));
Atr_Set_StackingPrefs_stacksize (key, Atr_Mem_EB_stackSize:GetNumber ());
end
Atr_StackingList_Display();
end
-----------------------------------------
function Atr_Memorize_Forget()
local x = gStackList_SelectedIndex;
local plist = gStackList_plist;
local key = plist[x].sortkey;
if (key) then
Atr_Clear_StackingPrefs (key);
end
if (not Atr_MemorizeFrame["isCategory"]) then
gStackList_SelectedIndex = 0;
end
Atr_StackingList_Display();
end
-----------------------------------------
function Atr_SONumStacks_OnLoad(self)
UIDropDownMenu_Initialize (self, Atr_SONumStacks_Initialize);
UIDropDownMenu_SetSelectedValue (self, -1);
UIDropDownMenu_JustifyText ("CENTER", self);
UIDropDownMenu_SetWidth (150, self);
end
-----------------------------------------
function Atr_SONumStacks_Initialize()
local info = UIDropDownMenu_CreateInfo();
Atr_AddMenuPick (info, ZT("As many as possible"), -1, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "1", 1, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "2", 2, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "3", 3, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "4", 4, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "5", 5, Atr_SONumStacks_OnClick)
Atr_AddMenuPick (info, "10", 10, Atr_SONumStacks_OnClick)
end
-----------------------------------------
function Atr_SONumStacks_OnClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
Atr_Mem_stacksOf_text:SetText (ZT ((this.value == 1) and "stack of" or "stacks of"));
end
-----------------------------------------
function Atr_ShowOptionTooltip (elem)
local name = elem:GetName();
local text;
if (zc.StringContains (name, "Enable_Alt")) then
text = ZT("If this option is checked, holding the Alt key down while clicking an item in your bags will switch to the Auctionator panel, place the item in the Auction Item area, and start the scan.");
end
if (zc.StringContains (name, "Deftab")) then
text = ZT("Select the Auctionator panel to be displayed first whenever you open the Auction House window.");
end
if (zc.StringContains (name, "Open_BUY")) then
text = ZT("If this option is checked, the Auctionator BUY panel will display first whenever you open the Auction House window.");
end
if (zc.StringContains (name, "Open_All_Bags")) then
text = ZT("If this option is checked, ALL your bags will be opened when you first open the Auctionator panel.");
end
if (zc.StringContains (name, "Def_Duration")) then
text = ZT("If this option is checked, every time you initiate a new auction the auction duration will be reset to the default duration you've selected.");
end
if (text) then
local titleFrame = getglobal (name.."_CB_Text") or getglobal (name.."_Text");
local titleText = titleFrame and titleFrame:GetText() or "???";
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
GameTooltip:SetText(titleText, 0.9, 1.0, 1.0);
GameTooltip:AddLine(text, 0.5, 0.5, 1.0, 1);
GameTooltip:Show();
end
end
-----------------------------------------
function Atr_SetupScanningConfigFrame ()
UIDropDownMenu_Initialize(Atr_scanLevelDD, Atr_scanLevelDD_Initialize);
UIDropDownMenu_SetSelectedValue(Atr_scanLevelDD, AUCTIONATOR_SCAN_MINLEVEL);
end
-----------------------------------------
function Atr_ScanningOptionsFrame_Save()
local origValues = zc.msg_str (AUCTIONATOR_SCAN_MINLEVEL);
AUCTIONATOR_SCAN_MINLEVEL = UIDropDownMenu_GetSelectedValue(Atr_scanLevelDD);
local newValues = zc.msg_str (AUCTIONATOR_SCAN_MINLEVEL);
if (origValues ~= newValues) then
zc.msg_atr (ZT("scanning options saved"));
end
end
-----------------------------------------
function Atr_scanLevelDD_Initialize()
local info = UIDropDownMenu_CreateInfo();
Atr_AddMenuPick (info, "|cffa335ee"..ZT("Epic").."|r", 5, Atr_scanLevelDD_OnClick);
Atr_AddMenuPick (info, "|cff0070dd"..ZT("Rare").."|r", 4, Atr_scanLevelDD_OnClick);
Atr_AddMenuPick (info, "|cff1eff00"..ZT("Uncommon").."|r", 3, Atr_scanLevelDD_OnClick);
Atr_AddMenuPick (info, "|cffffffff"..ZT("Common").."|r", 2, Atr_scanLevelDD_OnClick);
Atr_AddMenuPick (info, "|cff9d9d9d"..ZT("Poor (all)").."|r", 1, Atr_scanLevelDD_OnClick);
end
-----------------------------------------
function Atr_scanLevelDD_OnClick()
UIDropDownMenu_SetSelectedValue(this.owner, this.value);
end
-----------------------------------------
function Atr_scanLevelDD_showTip(self)
GameTooltip:SetOwner(this, "ANCHOR_LEFT");
GameTooltip:SetText(ZT("Minimum Quality Level"), 0.9, 1.0, 1.0);
GameTooltip:AddLine(ZT("Only include items in the scanning database that are this level or higher"), 0.5, 0.5, 1.0, 1);
GameTooltip:Show();
end
-----------------------------------------
function Atr_MakeOptionsFrameOpaque ()
end
-----------------------------------------
local gInterfaceOptionsMask;
-----------------------------------------
function ShowInterfaceOptionsMask()
if (gInterfaceOptionsMask == nil) then
gInterfaceOptionsMask = CreateFrame ("Frame", "Atr_Mask_StdOptions", Atr_OptionsWindow, "Atr_Mask_StdOptionsTempl");
gInterfaceOptionsMask:SetFrameLevel (Atr_OptionsWindow:GetFrameLevel() + 10);
end
gInterfaceOptionsMask:Show();
end
-----------------------------------------
function HideInterfaceOptionsMask()
if (gInterfaceOptionsMask) then
gInterfaceOptionsMask:Hide();
end
end