forked from John-The-Baptist/OctoAuctionator
390 lines
9.1 KiB
Lua
390 lines
9.1 KiB
Lua
|
|
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
|
|
|
|
|