forked from John-The-Baptist/OctoAuctionator
Add Auctionator core and Buy UI
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user