some finishing touches for the full new ui release

This commit is contained in:
Manuel Simon Hirsig
2015-11-01 18:29:47 +01:00
parent 34ebedaf1b
commit 6a8e224040
17 changed files with 841 additions and 671 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
## Title: Aux ## Title: Aux
## Notes: A lightweight addon designed to help manage auctions ## Notes: A lightweight addon designed to help manage auctions
## SavedVariablesPerCharacter: AUX_SELL_SHORTCUT, AUX_BUY_SHORTCUT, AUX_OPEN_SELL, AUX_OPEN_BUY, AUX_INSTANT_BUYOUT, AUX_AUCTION_DURATION ## SavedVariablesPerCharacter: AUX_SELL_SHORTCUT, AUX_BUY_SHORTCUT, AUX_OPEN_SELL, AUX_OPEN_BUY, AUX_INSTANT_BUYOUT, AUX_AUCTION_DURATION
## SavedVariables: aux_database, aux_auctionable_items ## SavedVariables: aux_database, aux_recently_searched, aux_auctionable_items
core.xml core.xml
control.xml control.xml
-2
View File
@@ -239,7 +239,6 @@ function Aux.completion.selector(edit_box)
if getn(suggestions) > 0 then if getn(suggestions) > 0 then
index = math.mod(index, getn(suggestions)) + 1 index = math.mod(index, getn(suggestions)) + 1
update_highlighting() update_highlighting()
Aux.item_search_frame.set_item(suggestions[index].value)
end end
end end
@@ -248,7 +247,6 @@ function Aux.completion.selector(edit_box)
if getn(suggestions) > 0 then if getn(suggestions) > 0 then
index = index > 1 and index - 1 or getn(suggestions) index = index > 1 and index - 1 or getn(suggestions)
update_highlighting() update_highlighting()
Aux.item_search_frame.set_item(suggestions[index].value)
end end
end end
+29 -19
View File
@@ -1,4 +1,4 @@
AuxVersion = "2.0.0" AuxVersion = "2.1.0"
AuxAuthors = "shirsig; Zerf; Zirco (Auctionator); Nimeral (Auctionator backport)" AuxAuthors = "shirsig; Zerf; Zirco (Auctionator); Nimeral (Auctionator backport)"
local lastRightClickAction = GetTime() local lastRightClickAction = GetTime()
@@ -226,25 +226,19 @@ end
function Aux_ContainerFrameItemButton_OnClick(button) function Aux_ContainerFrameItemButton_OnClick(button)
local bag, slot = this:GetParent():GetID(), this:GetID() local bag, slot = this:GetParent():GetID(), this:GetID()
local container_item = Aux.info.container_item(bag, slot) local container_item_info = Aux.info.container_item(bag, slot)
-- if AuctionFrame:IsVisible() and button == "LeftButton" and container_item then if AuxFrame:IsVisible() and button == "LeftButton" and container_item_info then
-- if IsAltKeyDown() then
-- if IsShiftKeyDown() if not AuxItemSearchFrame:IsVisible() then
-- and not ChatFrameEditBox:IsVisible() Aux.on_tab_click(1)
-- and AuxBuyFrame:IsVisible() end
-- then AuxItemSearchFrameItemItemInputBox:Hide()
-- AuxBuyNameInputBox.completor.set_quietly(container_item.name) Aux.item_search_frame.set_item(container_item_info.item_id)
-- return return
-- elseif AUX_BUY_SHORTCUT and IsAltKeyDown() then end
-- if not AuxBuyFrame:IsVisible() then end
-- Aux.on_tab_click(1)
-- end
-- AuxBuyNameInputBox.completor.set_quietly(container_item.name)
-- Aux.filter_search_frame.start_search()
-- return
-- end
-- end
return Aux.orig.ContainerFrameItemButton_OnClick(button) return Aux.orig.ContainerFrameItemButton_OnClick(button)
end end
@@ -266,4 +260,20 @@ end
function Aux.auction_signature(hyperlink, stack_size, amount) function Aux.auction_signature(hyperlink, stack_size, amount)
return hyperlink .. (stack_size or '0') .. '_' .. (amount or '0') return hyperlink .. (stack_size or '0') .. '_' .. (amount or '0')
end
function Aux.item_class_index(item_class)
for i, class in ipairs({ GetAuctionItemClasses() }) do
if class == item_class then
return i
end
end
end
function Aux.item_subclass_index(class_index, item_subclass)
for i, subclass in ipairs({ GetAuctionItemSubClasses(class_index) }) do
if subclass == item_subclass then
return i
end
end
end end
+4 -4
View File
@@ -322,12 +322,12 @@
</Layers> </Layers>
<Scripts> <Scripts>
<OnEnter> <OnEnter>
if this.tooltip then if this.itemstring then
Aux.info.set_game_tooltip(this, this.tooltip, 'ANCHOR_LEFT', this.EnhTooltip_info) Aux.info.set_tooltip(this.itemstring, this.EnhTooltip_info, this, 'ANCHOR_LEFT')
end end
</OnEnter> </OnEnter>
<OnLeave> <OnLeave>
if this.tooltip then if this.itemstring then
AuxTooltip:Hide() AuxTooltip:Hide()
end end
</OnLeave> </OnLeave>
@@ -384,7 +384,7 @@
</Button> </Button>
<Button name="AuxAuctionFrameButton" inherits="UIPanelButtonTemplate" text="Default UI"> <Button name="AuxAuctionFrameButton" inherits="UIPanelButtonTemplate" text="Default UI">
<Size><AbsDimension x="65" y="17"/></Size> <Size><AbsDimension x="65" y="17"/></Size>
<Anchors><Anchor point="RIGHT" relativePoint="LEFT" relativeTo="AuxCloseButton"><Offset><AbsDimension x="-3" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="RIGHT" relativePoint="LEFT" relativeTo="AuxCloseButton"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
this:SetTextFontObject('GameFontNormalSmall') this:SetTextFontObject('GameFontNormalSmall')
+98 -80
View File
@@ -29,14 +29,24 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, group) row_setter = function(row, group)
row.tooltip = group[1].tooltip row.itemstring = Aux.info.itemstring(group[1].item_id, group[1].suffix_id, nil, group[1].enchant_id)
row.EnhTooltip_info = group[1].EnhTooltip_info row.EnhTooltip_info = group[1].EnhTooltip_info
end, end,
columns = { columns = {
@@ -70,7 +80,7 @@ public.views = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, group) cell_setter = function(cell, group)
cell.icon.icon_texture:SetTexture(group[1].texture) cell.icon.icon_texture:SetTexture(Aux.info.item(group[1].item_id).texture)
if not group[1].usable then if not group[1].usable then
cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1)
else else
@@ -84,11 +94,11 @@ public.views = {
}, },
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(group1, group2) return Aux.util.compare(group1[1].stack_size, group2[1].stack_size, Aux.util.LT) end, comparator = function(group1, group2) return Aux.util.compare(group1[1].aux_quantity, group2[1].aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, group) cell_setter = function(cell, group)
cell.text:SetText(group[1].stack_size) cell.text:SetText(group[1].aux_quantity)
group_alpha_setter(cell, group) group_alpha_setter(cell, group)
end, end,
}, },
@@ -123,7 +133,7 @@ public.views = {
end, end,
}, },
}, },
sort_order = {{column = 2, order = 'ascending' }, {column = 4, order = 'ascending'}}, sort_order = {{column = 1, order = 'ascending' }, {column = 4, order = 'ascending'}},
}, },
[BID] = { [BID] = {
name = 'Bid', name = 'Bid',
@@ -133,14 +143,24 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, datum) row_setter = function(row, datum)
row.tooltip = datum.tooltip row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info row.EnhTooltip_info = datum.EnhTooltip_info
end, end,
columns = { columns = {
@@ -174,7 +194,7 @@ public.views = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.icon.icon_texture:SetTexture(datum.texture) cell.icon.icon_texture:SetTexture(Aux.info.item(datum.item_id).texture)
if not datum.usable then if not datum.usable then
cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1)
else else
@@ -188,11 +208,11 @@ public.views = {
}, },
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size) cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum) auction_alpha_setter(cell, datum)
end, end,
}, },
@@ -257,7 +277,7 @@ public.views = {
end, end,
}, },
}, },
sort_order = {{column = 2, order = 'ascending' }, {column = 6, order = 'ascending' }, {column = 3, order = 'ascending'}}, sort_order = {{column = 1, order = 'ascending' }, {column = 4, order = 'ascending' }, {column = 6, order = 'ascending'}},
}, },
[FULL] = { [FULL] = {
name = 'Full', name = 'Full',
@@ -267,14 +287,24 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 20) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, datum) row_setter = function(row, datum)
row.tooltip = datum.tooltip row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info row.EnhTooltip_info = datum.EnhTooltip_info
end, end,
columns = { columns = {
@@ -297,8 +327,6 @@ public.views = {
icon:SetPoint('LEFT', cell) icon:SetPoint('LEFT', cell)
icon:SetWidth(12) icon:SetWidth(12)
icon:SetHeight(12) icon:SetHeight(12)
icon:SetScript('OnEnter', function() Aux.info.set_game_tooltip(this, cell.tooltip, 'ANCHOR_CURSOR', cell.EnhTooltip_info, 0, 30) end)
icon:SetScript('OnLeave', function() AuxTooltip:Hide() end)
local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
text:SetPoint("LEFT", icon, "RIGHT", 1, 0) text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
text:SetPoint('TOPRIGHT', cell) text:SetPoint('TOPRIGHT', cell)
@@ -310,7 +338,7 @@ public.views = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.icon.icon_texture:SetTexture(datum.texture) cell.icon.icon_texture:SetTexture(Aux.info.item(datum.item_id).texture)
if not datum.usable then if not datum.usable then
cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1)
else else
@@ -324,7 +352,7 @@ public.views = {
}, },
{ {
title = 'Lvl', title = 'Lvl',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -341,11 +369,11 @@ public.views = {
}, },
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size) cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum) auction_alpha_setter(cell, datum)
end, end,
}, },
@@ -421,7 +449,7 @@ public.views = {
}, },
{ {
title = 'Owner', title = 'Owner',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('LEFT'), cell_initializer = Aux.sheet.default_cell_initializer('LEFT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -430,7 +458,7 @@ public.views = {
end, end,
}, },
}, },
sort_order = {}, sort_order = {{column = 1, order = 'ascending' }},
}, },
} }
@@ -447,7 +475,7 @@ function public.on_open()
end end
function public.dialog_cancel() function public.dialog_cancel()
Aux.log('Canceled.') Aux.log('Aborted.')
Aux.scan.abort() Aux.scan.abort()
AuxFilterSearchFrameResultsConfirmation:Hide() AuxFilterSearchFrameResultsConfirmation:Hide()
update_sheet() update_sheet()
@@ -466,7 +494,7 @@ function update_sheet()
if private.view == BUYOUT then if private.view == BUYOUT then
AuxFilterSearchFrameResultsBuyListing:Show() AuxFilterSearchFrameResultsBuyListing:Show()
local buyout_auctions = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {} local buyout_auctions = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {}
Aux.list.populate(AuxFilterSearchFrameResultsBuyListing.sheet, auctions and Aux.util.group_by(buyout_auctions, function(a1, a2) return a1.hyperlink == a2.hyperlink and a1.stack_size == a2.stack_size and a1.buyout_price == a2.buyout_price end) or {}) Aux.list.populate(AuxFilterSearchFrameResultsBuyListing.sheet, auctions and Aux.util.group_by(buyout_auctions, function(a1, a2) return a1.item_id == a2.item_id and a1.suffix_id == a2.suffix_id and a1.enchant_id == a2.enchant_id and a1.aux_quantity == a2.aux_quantity and a1.buyout_price == a2.buyout_price end) or {})
AuxFilterSearchFrameResults:SetWidth(AuxFilterSearchFrameResultsBuyListing:GetWidth() + 40) AuxFilterSearchFrameResults:SetWidth(AuxFilterSearchFrameResultsBuyListing:GetWidth() + 40)
AuxFrame:SetWidth(AuxFilterSearchFrameFilters:GetWidth() + AuxFilterSearchFrameResults:GetWidth() + 15) AuxFrame:SetWidth(AuxFilterSearchFrameFilters:GetWidth() + AuxFilterSearchFrameResults:GetWidth() + 15)
elseif private.view == BID then elseif private.view == BID then
@@ -545,14 +573,11 @@ function public.start_search()
Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...') Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...')
current_page = page current_page = page
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
local auction_item = Aux.info.auction_item(i) if Aux.info.tooltip_match(tooltip_patterns, auction_info.tooltip) then
if auction_item then auctions = auctions or {}
if Aux.info.tooltip_match(tooltip_patterns, auction_item.tooltip) then tinsert(auctions, create_auction_record(auction_info, current_page))
auctions = auctions or {} end
tinsert(auctions, create_auction_record(auction_item, current_page))
end
end
end, end,
on_complete = function() on_complete = function()
auctions = auctions or {} auctions = auctions or {}
@@ -581,17 +606,18 @@ function public.start_search()
end end
function show_dialog(buyout_mode, entry, amount) function show_dialog(buyout_mode, entry, amount)
AuxFilterSearchFrameResultsConfirmationContentItem.tooltip = entry.tooltip AuxFilterSearchFrameResultsConfirmationContentItem.itemstring = Aux.info.itemstring(entry.item_id, entry.suffix_id, entry.unique_id, entry.enchant_id)
AuxFilterSearchFrameResultsConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info AuxFilterSearchFrameResultsConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info
AuxFilterSearchFrameResultsConfirmationContentActionButton:Disable() AuxFilterSearchFrameResultsConfirmationContentActionButton:Disable()
AuxFilterSearchFrameResultsConfirmationContentItemIconTexture:SetTexture(entry.texture) AuxFilterSearchFrameResultsConfirmationContentItemIconTexture:SetTexture(Aux.info.item(entry.item_id).texture)
AuxFilterSearchFrameResultsConfirmationContentItemName:SetText(entry.tooltip[1][1].text) AuxFilterSearchFrameResultsConfirmationContentItemName:SetText(entry.tooltip[1][1].text)
local color = ITEM_QUALITY_COLORS[entry.quality] local color = ITEM_QUALITY_COLORS[entry.quality]
AuxFilterSearchFrameResultsConfirmationContentItemName:SetTextColor(color.r, color.g, color.b) AuxFilterSearchFrameResultsConfirmationContentItemName:SetTextColor(color.r, color.g, color.b)
if entry.stack_size > 1 then if entry.aux_quantity > 1 then
AuxFilterSearchFrameResultsConfirmationContentItemCount:SetText(entry.stack_size); AuxFilterSearchFrameResultsConfirmationContentItemCount:SetText(entry.aux_quantity);
AuxFilterSearchFrameResultsConfirmationContentItemCount:Show() AuxFilterSearchFrameResultsConfirmationContentItemCount:Show()
else else
AuxFilterSearchFrameResultsConfirmationContentItemCount:Hide() AuxFilterSearchFrameResultsConfirmationContentItemCount:Hide()
@@ -629,7 +655,7 @@ function find_auction(entry, buyout_mode, express_mode)
amount = entry.bid amount = entry.bid
end end
Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..' ...') Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.aux_quantity..' at '..Aux.util.money_string(amount)..' ...')
AuxFilterSearchFrameFiltersSearchButton:Disable() AuxFilterSearchFrameFiltersSearchButton:Disable()
if not express_mode then if not express_mode then
@@ -649,27 +675,19 @@ function find_auction(entry, buyout_mode, express_mode)
on_page_loaded = function(page) on_page_loaded = function(page)
current_page = page current_page = page
end, end,
on_read_auction = function(i, ctrl) on_read_auction = function(auction_info, ctrl)
local auction_item = Aux.info.auction_item(i)
local auction_record = create_auction_record(auction_info)
if not auction_item then if entry.signature == auction_record.signature then
return
end
local stack_size = auction_item.charges or auction_item.count
local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment
local signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price)
if entry.signature == signature then
ctrl.suspend() ctrl.suspend()
found = true found = true
Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...')) Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...'))
if express_mode then if express_mode then
if GetMoney() >= amount then if GetMoney() >= amount then
PlaceAuctionBid("list", i, amount) PlaceAuctionBid('list', auction_info.index, amount)
Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.') Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true entry.gone = true
refresh = true refresh = true
else else
@@ -677,10 +695,10 @@ function find_auction(entry, buyout_mode, express_mode)
end end
Aux.scan.abort() Aux.scan.abort()
else else
Aux.buy.dialog_action = function() public.dialog_action = function()
if GetMoney() >= amount then if GetMoney() >= amount then
PlaceAuctionBid("list", i, amount) PlaceAuctionBid('list', auction_info.index, buyout_mode and amount or MoneyInputFrame_GetCopper(AuxFilterSearchFrameResultsConfirmationContentBid))
Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.') Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true entry.gone = true
refresh = true refresh = true
else else
@@ -731,45 +749,45 @@ function private.on_row_click(entry)
end end
end end
function create_auction_record(auction_item, current_page) function create_auction_record(auction_info, current_page)
local stack_size = auction_item.charges or auction_item.count local aux_quantity = auction_info.charges or auction_info.count
local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment local bid = (auction_info.current_bid > 0 and auction_info.current_bid or auction_info.min_bid) + auction_info.min_increment
local buyout_price = auction_item.buyout_price > 0 and auction_item.buyout_price or nil local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
local buyout_price_per_unit = buyout_price and Aux_Round(auction_item.buyout_price/stack_size) local buyout_price_per_unit = buyout_price and Aux_Round(auction_info.buyout_price / aux_quantity)
local status local status
if auction_item.current_bid == 0 then if auction_info.current_bid == 0 then
status = 'No Bid' status = 'No Bid'
elseif auction_item.high_bidder then elseif auction_info.high_bidder then
status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
else else
status = 'Other Bidder' status = 'Other Bidder'
end end
return { return {
key = auction_item.item_signature, item_id = auction_info.item_id,
signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price), key = auction_info.item_signature,
signature = Aux.auction_signature(auction_info.hyperlink, aux_quantity, bid, auction_info.buyout_price),
name = auction_item.name, name = auction_info.name,
level = auction_item.level, level = auction_info.level,
texture = auction_item.texture, tooltip = auction_info.tooltip,
tooltip = auction_item.tooltip, aux_quantity = aux_quantity,
stack_size = stack_size,
buyout_price = buyout_price, buyout_price = buyout_price,
buyout_price_per_unit = buyout_price_per_unit, buyout_price_per_unit = buyout_price_per_unit,
quality = auction_item.quality, quality = auction_info.quality,
hyperlink = auction_item.hyperlink, hyperlink = auction_info.hyperlink,
itemstring = auction_item.itemstring, itemstring = auction_info.itemstring,
page = current_page, page = current_page,
bid = bid, bid = bid,
bid_per_unit = Aux_Round(bid/stack_size), bid_per_unit = Aux_Round(bid / aux_quantity),
owner = auction_item.owner, owner = auction_info.owner,
duration = auction_item.duration, duration = auction_info.duration,
usable = auction_item.usable, usable = auction_info.usable,
high_bidder = auction_item.high_bidder, high_bidder = auction_info.high_bidder,
status = status, status = status,
EnhTooltip_info = auction_item.EnhTooltip_info, EnhTooltip_info = auction_info.EnhTooltip_info,
} }
end end
+7 -7
View File
@@ -300,7 +300,7 @@
<OnLoad> <OnLoad>
local config = Aux.filter_search_frame.views[1] local config = Aux.filter_search_frame.views[1]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -313,7 +313,7 @@
<OnLoad> <OnLoad>
local config = Aux.filter_search_frame.views[2] local config = Aux.filter_search_frame.views[2]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -326,7 +326,7 @@
<OnLoad> <OnLoad>
local config = Aux.filter_search_frame.views[3] local config = Aux.filter_search_frame.views[3]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -340,14 +340,14 @@
</Scripts> </Scripts>
<Frames> <Frames>
<Frame name="$parentContent"> <Frame name="$parentContent">
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="5"/></Offset></Anchor></Anchors>
<Size><AbsDimension x="193" y="140"/></Size> <Size><AbsDimension x="193" y="120"/></Size>
<Frames> <Frames>
<Frame name="$parentItem" inherits="AuxItemTemplate"> <Frame name="$parentItem" inherits="AuxItemTemplate">
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
</Frame> </Frame>
<Frame name="$parentBid" inherits="MoneyInputFrameTemplate"> <Frame name="$parentBid" inherits="MoneyInputFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="48"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="43"/></Offset></Anchor></Anchors>
<Layers> <Layers>
<Layer level="OVERLAY"> <Layer level="OVERLAY">
<FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT"> <FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT">
@@ -357,7 +357,7 @@
</Layers> </Layers>
</Frame> </Frame>
<Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate"> <Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="50"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="45"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
SmallMoneyFrame_OnLoad() SmallMoneyFrame_OnLoad()
+121 -100
View File
@@ -3,57 +3,70 @@ local TOOLTIP_LENGTH = 30
local private, public = {}, {} local private, public = {}, {}
Aux.info = public Aux.info = public
local hyperlink_item, item_id, item_charges, item_signature, parse_item_signature, parse_hyperlink function public.container_item(bag, slot)
function Aux.info.container_item(bag, slot)
local hyperlink = GetContainerItemLink(bag, slot) local hyperlink = GetContainerItemLink(bag, slot)
if not hyperlink then if not hyperlink then
return return
end end
local container_item = hyperlink_item(hyperlink) local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
container_item.item_signature = item_signature(hyperlink) local item_info = public.item(item_id, suffix_id, unique_id, enchant_id)
local texture, count, locked, quality, readable, lootable = GetContainerItemInfo(bag, slot) local texture, count, locked, quality, readable, lootable = GetContainerItemInfo(bag, slot)
container_item.texture = texture local tooltip = public.tooltip(function(tt) tt:SetBagItem(bag, slot) end)
container_item.count = count
container_item.locked = locked
container_item.readable = readable
container_item.lootable = lootable
container_item.hyperlink = hyperlink
container_item.tooltip = Aux.info.tooltip(function(tt) tt:SetBagItem(bag, slot) end) return {
container_item.charges = item_charges(container_item.tooltip) item_id = item_id,
suffix_id = suffix_id,
return container_item unique_id = unique_id,
enchant_id = enchant_id,
hyperlink = hyperlink,
itemstring = item_info.itemstring,
item_key = item_id..':'..suffix_id,
name = item_info.name,
texture = texture,
level = item_info.level,
type = item_info.type,
subtype = item_info.subtype,
quality = quality,
max_stack = item_info.max_stack,
count = count,
locked = locked,
readable = readable,
lootable = lootable,
tooltip = tooltip,
charges = private.item_charges(tooltip),
}
end end
function Aux.info.auction_sell_item() function public.auction_sell_item()
local name, texture, stack_size, quality, usable, vendor_price = GetAuctionSellItemInfo() local name, texture, stack_size, quality, usable, vendor_price = GetAuctionSellItemInfo()
if name then if name then
local unit_vendor_price = vendor_price / stack_size local unit_vendor_price = vendor_price / stack_size
local tooltip = public.tooltip(function(tt) tt:SetAuctionSellItem() end)
auction_sell_item = { return {
name = name, name = name,
texture = texture, texture = texture,
quality = quality,
stack_size = stack_size, stack_size = stack_size,
quality = quality,
usable = usable, usable = usable,
unit_vendor_price = unit_vendor_price, unit_vendor_price = unit_vendor_price,
deposit_factor = deposit_factor, tooltip = tooltip,
charges = private.item_charges(tooltip),
} }
auction_sell_item.tooltip = Aux.info.tooltip(function(tt) tt:SetAuctionSellItem() end)
auction_sell_item.charges = item_charges(auction_sell_item.tooltip)
return auction_sell_item
end end
end end
function Aux.info.auction_item(index, type) function public.auction(index, type)
type = type or 'list' type = type or 'list'
local hyperlink = GetAuctionItemLink(type, index) local hyperlink = GetAuctionItemLink(type, index)
@@ -61,36 +74,54 @@ function Aux.info.auction_item(index, type)
if not hyperlink then if not hyperlink then
return return
end end
local auction_item = hyperlink_item(hyperlink)
auction_item.item_signature = item_signature(hyperlink)
local name, texture, count, quality, usable, level, min_bid, min_increment, buyout_price, current_bid, high_bidder, owner, sale_status, id = GetAuctionItemInfo(type, index)
local duration = GetAuctionItemTimeLeft(type, index)
auction_item.texture = texture local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
auction_item.count = count local item_info = public.item(item_id, suffix_id, unique_id, enchant_id)
auction_item.min_bid = min_bid
auction_item.min_increment = min_increment local name, texture, count, quality, usable, level, min_bid, min_increment, buyout_price, current_bid, high_bidder, owner, sale_status = GetAuctionItemInfo(type, index)
auction_item.buyout_price = buyout_price local duration = GetAuctionItemTimeLeft(type, index)
auction_item.current_bid = current_bid local tooltip = public.tooltip(function(tt) tt:SetAuctionItem(type, index) end)
auction_item.high_bidder = high_bidder
auction_item.owner = owner return {
auction_item.sale_status = sale_status index = index,
auction_item.id = id
auction_item.duration = duration item_id = item_id,
auction_item.usable = usable suffix_id = suffix_id,
auction_item.tooltip = Aux.info.tooltip(function(tt) tt:SetAuctionItem(type, index) end) unique_id = unique_id,
auction_item.charges = item_charges(auction_item.tooltip) enchant_id = enchant_id,
auction_item.EnhTooltip_info = { hyperlink = hyperlink,
name = auction_item.name, itemstring = item_info.itemstring,
hyperlink = auction_item.hyperlink, item_key = item_id..':'..suffix_id,
quality = auction_item.quality,
count = auction_item.count, name = name,
} texture = texture,
level = item_info.level,
return auction_item type = item_info.type,
subtype = item_info.subtype,
quality = quality,
max_stack = item_info.max_stack,
count = count,
min_bid = min_bid,
min_increment = min_increment,
buyout_price = buyout_price,
current_bid = current_bid,
high_bidder = high_bidder,
owner = owner,
sale_status = sale_status,
duration = duration,
usable = usable,
tooltip = tooltip,
charges = private.item_charges(tooltip),
EnhTooltip_info = {
name = name,
hyperlink = hyperlink,
quality = quality,
count = count,
},
}
end end
function public.reanchor_tooltip() function public.reanchor_tooltip()
@@ -102,7 +133,7 @@ function public.reanchor_tooltip()
end end
end end
function Aux.info.set_game_tooltip(owner, tooltip, anchor, EnhTooltip_info, x_offset, y_offset) function public.set_tooltip(itemstring, EnhTooltip_info, owner, anchor, x_offset, y_offset)
if anchor == 'ANCHOR_CURSOR' and (x_offset or y_offset) then if anchor == 'ANCHOR_CURSOR' and (x_offset or y_offset) then
private.anchor_cursor = true private.anchor_cursor = true
private.x_offset = x_offset private.x_offset = x_offset
@@ -112,16 +143,16 @@ function Aux.info.set_game_tooltip(owner, tooltip, anchor, EnhTooltip_info, x_of
private.anchor_cursor = false private.anchor_cursor = false
end end
AuxTooltip:SetOwner(owner, anchor) AuxTooltip:SetOwner(owner, anchor)
for _, line in ipairs(tooltip) do
AuxTooltip:AddDoubleLine(line[1].text, line[2].text, line[1].r, line[1].b, line[1].g, line[2].r, line[2].b, line[2].g, true) AuxTooltip:SetHyperlink(itemstring)
end
AuxTooltip:Show() AuxTooltip:Show()
if EnhTooltip and EnhTooltip_info then if EnhTooltip and EnhTooltip_info then
EnhTooltip.TooltipCAux(AuxTooltip, EnhTooltip_info.name, EnhTooltip_info.hyperlink, EnhTooltip_info.quality, EnhTooltip_info.count) EnhTooltip.TooltipCall(AuxTooltip, EnhTooltip_info.name, EnhTooltip_info.hyperlink, EnhTooltip_info.quality, EnhTooltip_info.count)
end end
end end
function Aux.info.tooltip_match(patterns, tooltip) function public.tooltip_match(patterns, tooltip)
return Aux.util.all(patterns, function(pattern) return Aux.util.all(patterns, function(pattern)
return Aux.util.any(tooltip, function(line) return Aux.util.any(tooltip, function(line)
local left_match = line[1].text and strfind(strupper(line[1].text), strupper(pattern), 1, true) local left_match = line[1].text and strfind(strupper(line[1].text), strupper(pattern), 1, true)
@@ -131,7 +162,7 @@ function Aux.info.tooltip_match(patterns, tooltip)
end) end)
end end
function Aux.info.tooltip(setter) function public.tooltip(setter)
for i = 1, TOOLTIP_LENGTH do for i = 1, TOOLTIP_LENGTH do
getglobal('AuxInfoTooltipTextLeft'..i):SetText() getglobal('AuxInfoTooltipTextLeft'..i):SetText()
getglobal('AuxInfoTooltipTextRight'..i):SetText() getglobal('AuxInfoTooltipTextRight'..i):SetText()
@@ -162,7 +193,7 @@ function Aux.info.tooltip(setter)
return tooltip return tooltip
end end
function item_charges(tooltip) function private.item_charges(tooltip)
for _, line in ipairs(tooltip) do for _, line in ipairs(tooltip) do
local _, _, left_charges_string = strfind(line[1].text or '', "^(%d+) Charges") local _, _, left_charges_string = strfind(line[1].text or '', "^(%d+) Charges")
local _, _, right_charges_string = strfind(line[2].text or '', "^(%d+) Charges$") local _, _, right_charges_string = strfind(line[2].text or '', "^(%d+) Charges$")
@@ -171,33 +202,27 @@ function item_charges(tooltip)
return charges return charges
end end
end end
end
function Aux.info.auction(args)
local index = tremove(args, 1)
local key_set = Aux.util.array_to_set(args)
end end
-- not unique! -- not unique!
function Aux.info.auction_signature(index) function public.auction_signature(index)
-- owner not used because waiting for it would slow down the scan too much -- owner not used because waiting for it would slow down the scan too much
local _, _, count, _, _, _, min_bid, _, buyout_price, _, _, owner = GetAuctionItemInfo('list', index) local _, _, count, _, _, _, min_bid, _, buyout_price, _, _, owner = GetAuctionItemInfo('list', index)
local hyperlink = GetAuctionItemLink('list', index) local hyperlink = GetAuctionItemLink('list', index)
local item_id, suffix_id, enchant_id, unique_id = parse_hyperlink(hyperlink) local item_id, suffix_id, unique_id, enchant_id = private.parse_hyperlink(hyperlink)
return string.format( return string.format(
'%s:%s:%s:%s:%s:%s:%s', '%s:%s:%s:%s:%s:%s:%s',
item_id or 0, item_id or 0,
suffix_id or 0, suffix_id or 0,
enchant_id or 0,
unique_id or 0, unique_id or 0,
enchant_id or 0,
count or 0, count or 0,
min_bid or 0, min_bid or 0,
buyout_price or 0 buyout_price or 0
) )
end end
function Aux.info.break_auction_signature(signature) function public.break_auction_signature(signature)
local parts = strfind(signature, '^(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)$') local parts = strfind(signature, '^(%d+):(%d+):(%d+):(%d+):(%d+):(%d+):(%d+)$')
for i=1,2 do for i=1,2 do
tremove(parts, 1) tremove(parts, 1)
@@ -205,36 +230,32 @@ function Aux.info.break_auction_signature(signature)
return unpack(parts) return unpack(parts)
end end
function item_signature(hyperlink) function public.item_key(hyperlink)
local item_id, suffix_id = parse_hyperlink(hyperlink) local item_id, suffix_id = private.parse_hyperlink(hyperlink)
return item_id..':'..suffix_id return item_id..':'..suffix_id
end end
function parse_item_signature(item_signature) function private.parse_hyperlink(hyperlink)
local _, _, item_id, suffix_id = strfind(item_signature, '^(%d+):(%d+)$')
return item_id, suffix_id
end
function item_id(hyperlink)
local _, _, id_string = strfind(hyperlink, "^.-:(%d*).*")
return tonumber(id_string)
end
function parse_hyperlink(hyperlink)
local _, _, item_id, enchant_id, suffix_id, unique_id, name = strfind(hyperlink, '|Hitem:(%d+):(%d+):(%d+):(%d+)|h[[]([^]]+)[]]|h') local _, _, item_id, enchant_id, suffix_id, unique_id, name = strfind(hyperlink, '|Hitem:(%d+):(%d+):(%d+):(%d+)|h[[]([^]]+)[]]|h')
return tonumber(item_id) or 0, tonumber(suffix_id) or 0, tonumber(enchant_id) or 0, tonumber(unique_id) or 0, name return tonumber(item_id) or 0, tonumber(suffix_id) or 0, tonumber(unique_id) or 0, tonumber(enchant_id) or 0, name
end end
function hyperlink_item(hyperlink) function public.itemstring(item_id, suffix_id, unique_id, enchant_id)
local name, itemstring, quality, level, type, subtype, max_stack = GetItemInfo(item_id(hyperlink)) return 'item:'..(item_id or 0)..':'..(enchant_id or 0)..':'..(suffix_id or 0)..':'..(unique_id or 0)
return { end
name = name,
hyperlink = hyperlink, function public.item(item_id, suffix_id, unique_id, enchant_id)
itemstring = itemstring, local itemstring = 'item:'..(item_id or 0)..':'..(enchant_id or 0)..':'..(suffix_id or 0)..':'..(unique_id or 0)
quality = quality, local name, itemstring, quality, level, class, subclass, max_stack, slot, texture = GetItemInfo(itemstring)
level = level, return {
type = type, itemstring = itemstring,
subtype = subtype, name = name,
max_stack = max_stack, texture = texture,
} quality = quality,
level = level,
slot = slot,
class = class,
subclass = subclass,
max_stack = max_stack,
}
end end
+134 -104
View File
@@ -1,13 +1,13 @@
local private, public = {}, {} local private, public = {}, {}
Aux.item_search_frame = public Aux.item_search_frame = public
aux_recently_searched = {}
local create_auction_record, show_dialog, find_auction, hide_sheet, update_listing, auction_alpha_setter, group_alpha_setter, create_auction_record local create_auction_record, show_dialog, find_auction, hide_sheet, update_listing, auction_alpha_setter, group_alpha_setter, create_auction_record
local auctions local auctions
local search_query local search_query
local tooltip_patterns = {}
local current_page local current_page
local refresh local refresh
local recently_searched = {}
function auction_alpha_setter(cell, auction) function auction_alpha_setter(cell, auction)
cell:SetAlpha(auction.gone and 0.3 or 1) cell:SetAlpha(auction.gone and 0.3 or 1)
@@ -22,12 +22,13 @@ local BUYOUT, BID, FULL = 1, 2, 3
public.recently_searched_config = { public.recently_searched_config = {
on_row_click = function (sheet, row_index) on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame) local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
AuxItemSearchFrameItemItemInputBox:Hide()
public.set_item(sheet.data[data_index].item_id) public.set_item(sheet.data[data_index].item_id)
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function(sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function(sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
end, end,
columns = { columns = {
@@ -63,10 +64,10 @@ public.recently_searched_config = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
local info = { GetItemInfo(datum.item_id) } local item_info = Aux.info.item(datum.item_id)
cell.icon.icon_texture:SetTexture(info[9]) cell.icon.icon_texture:SetTexture(item_info.texture)
cell.text:SetText('['..info[1]..']') cell.text:SetText('['..item_info.name..']')
local color = ITEM_QUALITY_COLORS[info[3]] local color = ITEM_QUALITY_COLORS[item_info.quality]
cell.text:SetTextColor(color.r, color.g, color.b) cell.text:SetTextColor(color.r, color.g, color.b)
end, end,
}, },
@@ -82,24 +83,34 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, group) row_setter = function(row, group)
row.tooltip = group[1].tooltip row.itemstring = Aux.info.itemstring(group[1].item_id, group[1].suffix_id, nil, group[1].enchant_id)
row.EnhTooltip_info = group[1].EnhTooltip_info row.EnhTooltip_info = group[1].EnhTooltip_info
end, end,
columns = { columns = {
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(group1, group2) return Aux.util.compare(group1[1].stack_size, group2[1].stack_size, Aux.util.LT) end, comparator = function(group1, group2) return Aux.util.compare(group1[1].aux_quantity, group2[1].aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, group) cell_setter = function(cell, group)
cell.text:SetText(group[1].stack_size) cell.text:SetText(group[1].aux_quantity)
group_alpha_setter(cell, group) group_alpha_setter(cell, group)
end, end,
}, },
@@ -144,24 +155,34 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, datum) row_setter = function(row, datum)
row.tooltip = datum.tooltip row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info row.EnhTooltip_info = datum.EnhTooltip_info
end, end,
columns = { columns = {
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size) cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum) auction_alpha_setter(cell, datum)
end, end,
}, },
@@ -226,7 +247,7 @@ public.views = {
end, end,
}, },
}, },
sort_order = {{column = 2, order = 'ascending' }, {column = 6, order = 'ascending' }, {column = 3, order = 'ascending'}}, sort_order = {{column = 3, order = 'ascending'}, {column = 5, order = 'ascending'}},
}, },
[FULL] = { [FULL] = {
name = 'Full', name = 'Full',
@@ -236,24 +257,34 @@ public.views = {
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(.5) sheet.rows[row_index].highlight:SetAlpha(.5)
Aux.info.set_game_tooltip(this, sheet.rows[row_index].tooltip, 'ANCHOR_CURSOR', sheet.rows[row_index].EnhTooltip_info, 0, 30) Aux.info.set_tooltip(sheet.rows[row_index].itemstring, sheet.rows[row_index].EnhTooltip_info, this, 'ANCHOR_CURSOR', 0, 30)
end, end,
on_row_leave = function (sheet, row_index) on_row_leave = function (sheet, row_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
AuxTooltip:Hide() AuxTooltip:Hide()
ResetCursor()
end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end, end,
row_setter = function(row, datum) row_setter = function(row, datum)
row.tooltip = datum.tooltip row.itemstring = Aux.info.itemstring(datum.item_id, datum.suffix_id, datum.unique_id, datum.enchant_id)
row.EnhTooltip_info = datum.EnhTooltip_info row.EnhTooltip_info = datum.EnhTooltip_info
end, end,
columns = { columns = {
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, comparator = function(row1, row2) return Aux.util.compare(row1.aux_quantity, row2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size) cell.text:SetText(datum.aux_quantity)
auction_alpha_setter(cell, datum) auction_alpha_setter(cell, datum)
end, end,
}, },
@@ -299,7 +330,7 @@ public.views = {
}, },
{ {
title = 'Lvl', title = 'Lvl',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.level, row2.level, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -346,7 +377,7 @@ public.views = {
}, },
{ {
title = 'Owner', title = 'Owner',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('LEFT'), cell_initializer = Aux.sheet.default_cell_initializer('LEFT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -381,14 +412,17 @@ function public.on_open()
public.update_item() public.update_item()
private.update_recently_searched() private.update_recently_searched()
update_listing() update_listing()
if not private.item_id then
AuxItemSearchFrameItemRefreshButton:Disable()
end
end end
function public.dialog_cancel() function public.dialog_cancel()
Aux.log('Canceled.') Aux.log('Aborted.')
Aux.scan.abort() Aux.scan.abort()
AuxItemSearchFrameAuctionsConfirmation:Hide() AuxItemSearchFrameAuctionsConfirmation:Hide()
update_listing() update_listing()
AuxItemSearchFrameItemSearchButton:Enable() AuxItemSearchFrameItemRefreshButton:Enable()
end end
function public.stop_search() function public.stop_search()
@@ -403,7 +437,7 @@ function update_listing()
if private.view == BUYOUT then if private.view == BUYOUT then
AuxItemSearchFrameAuctionsBuyListing:Show() AuxItemSearchFrameAuctionsBuyListing:Show()
local buy_records = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {} local buy_records = auctions and Aux.util.filter(auctions, function(auction) return auction.owner ~= UnitName('player') and auction.buyout_price end) or {}
Aux.list.populate(AuxItemSearchFrameAuctionsBuyListing.sheet, auctions and Aux.util.group_by(buy_records, function(a1, a2) return a1.hyperlink == a2.hyperlink and a1.stack_size == a2.stack_size and a1.buyout_price == a2.buyout_price end) or {}) Aux.list.populate(AuxItemSearchFrameAuctionsBuyListing.sheet, auctions and Aux.util.group_by(buy_records, function(a1, a2) return a1.item_id == a2.item_id and a1.suffix_id == a2.suffix_id and a1.enchant_id == a2.enchant_id and a1.aux_quantity == a2.aux_quantity and a1.buyout_price == a2.buyout_price end) or {})
AuxItemSearchFrameAuctions:SetWidth(AuxItemSearchFrameAuctionsBuyListing:GetWidth() + 40) AuxItemSearchFrameAuctions:SetWidth(AuxItemSearchFrameAuctionsBuyListing:GetWidth() + 40)
AuxFrame:SetWidth(AuxItemSearchFrameItem:GetWidth() + AuxItemSearchFrameAuctions:GetWidth() + 15) AuxFrame:SetWidth(AuxItemSearchFrameItem:GetWidth() + AuxItemSearchFrameAuctions:GetWidth() + 15)
elseif private.view == BID then elseif private.view == BID then
@@ -435,14 +469,18 @@ function public.set_view(view)
end end
function private.update_recently_searched() function private.update_recently_searched()
Aux.list.populate(AuxItemSearchFrameRecentlySearchedListing.sheet, recently_searched) Aux.list.populate(AuxItemSearchFrameRecentlySearchedListing.sheet, aux_recently_searched)
end end
function public.set_item(item_id) function public.set_item(item_id)
if item_id ~= private.item_id then if item_id ~= private.item_id then
AuxItemSearchFrameItemRefreshButton:Enable()
private.item_id = item_id private.item_id = item_id
public.update_item() public.update_item()
tinsert(recently_searched, 1, { item_id=item_id, time=time() }) tinsert(aux_recently_searched, 1, { item_id=item_id, time=time() })
while getn(aux_recently_searched) > 50 do
tremove(aux_recently_searched, getn(aux_recently_searched))
end
private.update_recently_searched() private.update_recently_searched()
public.start_search() public.start_search()
end end
@@ -464,28 +502,32 @@ end
function public.start_search() function public.start_search()
if not AuxItemSearchFrameItemSearchButton:IsVisible() then if not AuxItemSearchFrameItemRefreshButton:IsVisible() then
return return
end end
AuxItemSearchFrameItemSearchButton:Hide() AuxItemSearchFrameItemRefreshButton:Hide()
AuxItemSearchFrameItemStopButton:Show() AuxItemSearchFrameItemStopButton:Show()
auctions = nil auctions = nil
refresh = true refresh = true
local name = GetItemInfo(private.item_id) local item_id = private.item_id
local item_info = Aux.info.item(item_id)
local class_index = Aux.item_class_index(item_info.class)
local subclass_index = Aux.item_subclass_index(class_index, item_info.subclass)
search_query = { search_query = {
name = name, name = item_info.name,
-- min_level = AuxBuyMinLevel:GetText(), min_level = item_info.level,
-- max_level = AuxBuyMaxLevel:GetText(), min_level = item_info.level,
-- slot = category and category.slot, slot = item_info.slot,
-- class = category and category.class, class = Aux.item_class_index(item_info.class),
-- subclass = category and category.subclass, subclass = item_info.subclass,
-- quality = UIDropDownMenu_GetSelectedValue(AuxBuyQualityDropDown), quality = item_info.quality,
-- usable = AuxBuyUsableCheckButton:GetChecked() usable = item_info.usable,
} }
Aux.log('Scanning auctions ...') Aux.log('Scanning auctions ...')
@@ -499,28 +541,25 @@ function public.start_search()
Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...') Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...')
current_page = page current_page = page
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
local auction_item = Aux.info.auction_item(i) if auction_info.item_id == item_id then
if auction_item then auctions = auctions or {}
if auction_item.name == search_query.name then tinsert(auctions, create_auction_record(auction_info, current_page))
auctions = auctions or {} end
tinsert(auctions, create_auction_record(auction_item, current_page))
end
end
end, end,
on_complete = function() on_complete = function()
auctions = auctions or {} auctions = auctions or {}
Aux.log('Scan complete: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.') Aux.log('Scan complete: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.')
AuxItemSearchFrameItemStopButton:Hide() AuxItemSearchFrameItemStopButton:Hide()
AuxItemSearchFrameItemSearchButton:Show() AuxItemSearchFrameItemRefreshButton:Show()
refresh = true refresh = true
end, end,
on_abort = function() on_abort = function()
auctions = auctions or {} auctions = auctions or {}
Aux.log('Scan aborted: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.') Aux.log('Scan aborted: '..getn(auctions)..' '..Aux_PluralizeIf('auction', getn(auctions))..' found.')
AuxItemSearchFrameItemStopButton:Hide() AuxItemSearchFrameItemStopButton:Hide()
AuxItemSearchFrameItemSearchButton:Show() AuxItemSearchFrameItemRefreshButton:Show()
refresh = true refresh = true
end, end,
next_page = function(page, total_pages) next_page = function(page, total_pages)
@@ -535,17 +574,17 @@ function public.start_search()
end end
function show_dialog(buyout_mode, entry, amount) function show_dialog(buyout_mode, entry, amount)
AuxItemSearchFrameAuctionsConfirmationContentItem.tooltip = entry.tooltip AuxItemSearchFrameAuctionsConfirmationContentItem.itemstring = Aux.info.itemstring(entry.item_id, entry.suffix_id, entry.unique_id, entry.enchant_id)
AuxItemSearchFrameAuctionsConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info AuxItemSearchFrameAuctionsConfirmationContentItem.EnhTooltip_info = entry.EnhTooltip_info
AuxItemSearchFrameAuctionsConfirmationContentActionButton:Disable() AuxItemSearchFrameAuctionsConfirmationContentActionButton:Disable()
AuxItemSearchFrameAuctionsConfirmationContentItemIconTexture:SetTexture(entry.texture) AuxItemSearchFrameAuctionsConfirmationContentItemIconTexture:SetTexture(Aux.info.item(entry.item_id).texture)
AuxItemSearchFrameAuctionsConfirmationContentItemName:SetText(entry.tooltip[1][1].text) AuxItemSearchFrameAuctionsConfirmationContentItemName:SetText(entry.name)
local color = ITEM_QUALITY_COLORS[entry.quality] local color = ITEM_QUALITY_COLORS[entry.quality]
AuxItemSearchFrameAuctionsConfirmationContentItemName:SetTextColor(color.r, color.g, color.b) AuxItemSearchFrameAuctionsConfirmationContentItemName:SetTextColor(color.r, color.g, color.b)
if entry.stack_size > 1 then if entry.aux_quantity > 1 then
AuxItemSearchFrameAuctionsConfirmationContentItemCount:SetText(entry.stack_size); AuxItemSearchFrameAuctionsConfirmationContentItemCount:SetText(entry.aux_quantity);
AuxItemSearchFrameAuctionsConfirmationContentItemCount:Show() AuxItemSearchFrameAuctionsConfirmationContentItemCount:Show()
else else
AuxItemSearchFrameAuctionsConfirmationContentItemCount:Hide() AuxItemSearchFrameAuctionsConfirmationContentItemCount:Hide()
@@ -583,8 +622,8 @@ function find_auction(entry, buyout_mode, express_mode)
amount = entry.bid amount = entry.bid
end end
Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..' ...') Aux.log('Processing '..(buyout_mode and 'buyout' or 'bid')..' request for '..entry.hyperlink..' x '..entry.aux_quantity..' at '..Aux.util.money_string(amount)..' ...')
AuxItemSearchFrameItemSearchButton:Disable() AuxItemSearchFrameItemRefreshButton:Disable()
if not express_mode then if not express_mode then
show_dialog(buyout_mode, entry, amount) show_dialog(buyout_mode, entry, amount)
@@ -603,27 +642,17 @@ function find_auction(entry, buyout_mode, express_mode)
on_page_loaded = function(page) on_page_loaded = function(page)
current_page = page current_page = page
end, end,
on_read_auction = function(i, ctrl) on_read_auction = function(auction_info, ctrl)
local auction_item = Aux.info.auction_item(i) local auction_record = create_auction_record(auction_info)
if entry.signature == auction_record.signature then
if not auction_item then
return
end
local stack_size = auction_item.charges or auction_item.count
local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment
local signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price)
if entry.signature == signature then
ctrl.suspend() ctrl.suspend()
found = true found = true
Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...')) Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...'))
if express_mode then if express_mode then
if GetMoney() >= amount then if GetMoney() >= amount then
PlaceAuctionBid("list", i, amount) PlaceAuctionBid('list', auction_info.index, amount)
Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.') Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true entry.gone = true
refresh = true refresh = true
else else
@@ -631,17 +660,17 @@ function find_auction(entry, buyout_mode, express_mode)
end end
Aux.scan.abort() Aux.scan.abort()
else else
Aux.buy.dialog_action = function() public.dialog_action = function()
if GetMoney() >= amount then if GetMoney() >= amount then
PlaceAuctionBid("list", i, amount) PlaceAuctionBid('list', auction_info.index, buyout_mode and amount or MoneyInputFrame_GetCopper(AuxItemSearchFrameAuctionsConfirmationContentBid))
Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..entry.hyperlink..' x '..entry.stack_size..' at '..Aux.util.money_string(amount)..'.') Aux.log((buyout_mode and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true entry.gone = true
refresh = true refresh = true
else else
Aux.log('Not enough money.') Aux.log('Not enough money.')
end end
Aux.scan.abort() Aux.scan.abort()
AuxItemSearchFrameItemSearchButton:Enable() AuxItemSearchFrameItemRefreshButton:Enable()
AuxItemSearchFrameAuctionsConfirmation:Hide() AuxItemSearchFrameAuctionsConfirmation:Hide()
update_listing() update_listing()
end end
@@ -657,12 +686,12 @@ function find_auction(entry, buyout_mode, express_mode)
public.dialog_cancel() public.dialog_cancel()
end end
if express_mode then if express_mode then
AuxItemSearchFrameItemSearchButton:Enable() AuxItemSearchFrameItemRefreshButton:Enable()
end end
end, end,
on_abort = function() on_abort = function()
if express_mode then if express_mode then
AuxItemSearchFrameItemSearchButton:Enable() AuxItemSearchFrameItemRefreshButton:Enable()
end end
end, end,
next_page = function(page, total_pages) next_page = function(page, total_pages)
@@ -685,45 +714,46 @@ function public.on_row_click(entry)
end end
end end
function create_auction_record(auction_item, current_page) function create_auction_record(auction_info, current_page)
local stack_size = auction_item.charges or auction_item.count local aux_quantity = auction_info.charges or auction_info.count
local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment local bid = (auction_info.current_bid > 0 and auction_info.current_bid or auction_info.min_bid) + auction_info.min_increment
local buyout_price = auction_item.buyout_price > 0 and auction_item.buyout_price or nil local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
local buyout_price_per_unit = buyout_price and Aux_Round(auction_item.buyout_price/stack_size) local buyout_price_per_unit = buyout_price and Aux_Round(auction_info.buyout_price / aux_quantity)
local status local status
if auction_item.current_bid == 0 then if auction_info.current_bid == 0 then
status = 'No Bid' status = 'No Bid'
elseif auction_item.high_bidder then elseif auction_info.high_bidder then
status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
else else
status = 'Other Bidder' status = 'Other Bidder'
end end
return { return {
key = auction_item.item_signature, item_id = auction_info.item_id,
signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price), suffix_id = auction_info.suffix_id,
unique_id = auction_info.unique_id,
enchant_id = auction_info.enchant_id,
name = auction_item.name, signature = Aux.auction_signature(auction_info.hyperlink, aux_quantity, bid, auction_info.buyout_price),
level = auction_item.level,
texture = auction_item.texture, name = auction_info.name,
tooltip = auction_item.tooltip, level = auction_info.level,
stack_size = stack_size, aux_quantity = aux_quantity,
buyout_price = buyout_price, buyout_price = buyout_price,
buyout_price_per_unit = buyout_price_per_unit, buyout_price_per_unit = buyout_price_per_unit,
quality = auction_item.quality, quality = auction_info.quality,
hyperlink = auction_item.hyperlink, hyperlink = auction_info.hyperlink,
itemstring = auction_item.itemstring,
page = current_page, page = current_page,
bid = bid, bid = bid,
bid_per_unit = Aux_Round(bid/stack_size), bid_per_unit = Aux_Round(bid/aux_quantity),
owner = auction_item.owner, owner = auction_info.owner,
duration = auction_item.duration, duration = auction_info.duration,
usable = auction_item.usable, usable = auction_info.usable,
high_bidder = auction_item.high_bidder, high_bidder = auction_info.high_bidder,
status = status, status = status,
EnhTooltip_info = auction_item.EnhTooltip_info, EnhTooltip_info = auction_info.EnhTooltip_info,
} }
end end
+8 -8
View File
@@ -76,7 +76,7 @@
</Scripts> </Scripts>
</EditBox> </EditBox>
<Button name="$parentSearchButton" inherits="UIPanelButtonTemplate" text="Refresh"> <Button name="$parentRefreshButton" inherits="UIPanelButtonTemplate" text="Refresh" disabled="true">
<Size><AbsDimension x="90" y="26"/></Size> <Size><AbsDimension x="90" y="26"/></Size>
<Anchors><Anchor point="BOTTOMLEFT" ><Offset><AbsDimension x="8" y="15"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOMLEFT" ><Offset><AbsDimension x="8" y="15"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
@@ -230,7 +230,7 @@
<OnLoad> <OnLoad>
local config = Aux.item_search_frame.views[1] local config = Aux.item_search_frame.views[1]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -243,7 +243,7 @@
<OnLoad> <OnLoad>
local config = Aux.item_search_frame.views[2] local config = Aux.item_search_frame.views[2]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -256,7 +256,7 @@
<OnLoad> <OnLoad>
local config = Aux.item_search_frame.views[3] local config = Aux.item_search_frame.views[3]
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
@@ -270,14 +270,14 @@
</Scripts> </Scripts>
<Frames> <Frames>
<Frame name="$parentContent"> <Frame name="$parentContent">
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="5"/></Offset></Anchor></Anchors>
<Size><AbsDimension x="193" y="140"/></Size> <Size><AbsDimension x="193" y="120"/></Size>
<Frames> <Frames>
<Frame name="$parentItem" inherits="AuxItemTemplate"> <Frame name="$parentItem" inherits="AuxItemTemplate">
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
</Frame> </Frame>
<Frame name="$parentBid" inherits="MoneyInputFrameTemplate"> <Frame name="$parentBid" inherits="MoneyInputFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="48"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="43"/></Offset></Anchor></Anchors>
<Layers> <Layers>
<Layer level="OVERLAY"> <Layer level="OVERLAY">
<FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT"> <FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT">
@@ -287,7 +287,7 @@
</Layers> </Layers>
</Frame> </Frame>
<Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate"> <Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="50"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="45"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
SmallMoneyFrame_OnLoad() SmallMoneyFrame_OnLoad()
+6 -4
View File
@@ -66,7 +66,7 @@ function Aux.sheet.render(sheet)
end end
end end
function Aux.sheet.create(frame, columns, sort_order, row_setter, on_row_click, on_row_enter, on_row_leave) function Aux.sheet.create(frame, columns, sort_order, row_setter, on_row_click, on_row_enter, on_row_leave, on_row_update)
local sheet local sheet
local name = (frame:GetName() or '')..'ScrollSheet' local name = (frame:GetName() or '')..'ScrollSheet'
@@ -162,9 +162,10 @@ function Aux.sheet.create(frame, columns, sort_order, row_setter, on_row_click,
row:SetHeight(14) row:SetHeight(14)
local row_idx = row_index local row_idx = row_index
row:SetScript("OnClick", function() if sheet.on_row_click then sheet.on_row_click(sheet, row_idx) end end) row:SetScript('OnClick', function() if sheet.on_row_click then sheet.on_row_click(sheet, row_idx) end end)
row:SetScript("OnEnter", function() if sheet.on_row_enter then sheet.on_row_enter(sheet, row_idx) end end) row:SetScript('OnEnter', function() if sheet.on_row_enter then sheet.on_row_enter(sheet, row_idx) end end)
row:SetScript("OnLeave", function() if sheet.on_row_leave then sheet.on_row_leave(sheet, row_idx) end end) row:SetScript('OnLeave', function() if sheet.on_row_leave then sheet.on_row_leave(sheet, row_idx) end end)
row:SetScript('OnUpdate', function() if sheet.on_row_update then sheet.on_row_update(sheet, row_idx) end end)
row.cells = {} row.cells = {}
for i = 1,getn(columns) do for i = 1,getn(columns) do
@@ -213,6 +214,7 @@ function Aux.sheet.create(frame, columns, sort_order, row_setter, on_row_click,
on_row_click = on_row_click, on_row_click = on_row_click,
on_row_enter = on_row_enter, on_row_enter = on_row_enter,
on_row_leave = on_row_leave, on_row_leave = on_row_leave,
on_row_update = on_row_update,
} }
scroll_frame.sheet = sheet scroll_frame.sheet = sheet
+271 -89
View File
@@ -10,7 +10,7 @@ local BIDS, AUCTIONS = 1, 2
public.bid_listing_config = { public.bid_listing_config = {
on_row_click = function(sheet, row_index, column_index) on_row_click = function(sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame) local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
AuxBuyEntry_OnClick(sheet.data[data_index]) public.on_bid_click(sheet.data[data_index])
end, end,
on_row_enter = function(sheet, row_index, column_index) on_row_enter = function(sheet, row_index, column_index)
@@ -19,18 +19,19 @@ public.bid_listing_config = {
on_row_leave = function(sheet, row_index, column_index) on_row_leave = function(sheet, row_index, column_index)
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
ResetCursor()
end, end,
on_row_update = function(sheet, row_index)
if IsControlKeyDown() then
ShowInspectCursor()
elseif IsAltKeyDown() then
SetCursor('BUY_CURSOR')
else
ResetCursor()
end
end,
columns = { columns = {
{
title = 'Qty',
width = 23,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size)
private.auction_alpha_setter(cell, datum)
end,
},
{ {
title = 'Auction Item', title = 'Auction Item',
width = 157, width = 157,
@@ -50,8 +51,6 @@ public.bid_listing_config = {
icon:SetPoint('LEFT', cell) icon:SetPoint('LEFT', cell)
icon:SetWidth(12) icon:SetWidth(12)
icon:SetHeight(12) icon:SetHeight(12)
icon:SetScript('OnEnter', function() Aux.info.set_game_tooltip(this, cell.tooltip, 'ANCHOR_CURSOR', cell.EnhTooltip_info) end)
icon:SetScript('OnLeave', function() AuxTooltip:Hide() end)
local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
text:SetPoint("LEFT", icon, "RIGHT", 1, 0) text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
text:SetPoint('TOPRIGHT', cell) text:SetPoint('TOPRIGHT', cell)
@@ -63,9 +62,7 @@ public.bid_listing_config = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.tooltip = datum.tooltip cell.icon.icon_texture:SetTexture(Aux.info.item(datum.item_id).texture)
cell.EnhTooltip_info = datum.EnhTooltip_info
cell.icon.icon_texture:SetTexture(datum.texture)
if not datum.usable then if not datum.usable then
cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1)
else else
@@ -77,6 +74,26 @@ public.bid_listing_config = {
private.auction_alpha_setter(cell, datum) private.auction_alpha_setter(cell, datum)
end, end,
}, },
{
title = 'Qty',
width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.aux_quantity)
private.auction_alpha_setter(cell, datum)
end,
},
{
title = 'Status',
width = 70,
comparator = function(auction1, auction2) return Aux.util.compare(auction1.status, auction2.status, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, auction)
cell.text:SetText(auction.status)
private.auction_alpha_setter(cell, auction)
end,
},
{ {
title = 'Left', title = 'Left',
width = 30, width = 30,
@@ -99,7 +116,7 @@ public.bid_listing_config = {
}, },
{ {
title = 'Owner', title = 'Owner',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.owner, row2.owner, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('LEFT'), cell_initializer = Aux.sheet.default_cell_initializer('LEFT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -108,18 +125,18 @@ public.bid_listing_config = {
end, end,
}, },
{ {
title = 'Bid', title = 'Your Bid',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.bid, row2.bid, Aux.util.GT) end, comparator = function(auction1, auction2) return Aux.util.compare(auction1.current_bid, auction2.current_bid, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, datum) cell_setter = function(cell, auction)
cell.text:SetText(Aux.util.money_string(datum.bid)) cell.text:SetText(Aux.util.money_string(auction.current_bid))
private.auction_alpha_setter(cell, datum) private.auction_alpha_setter(cell, auction)
end, end,
}, },
{ {
title = 'Buy', title = 'Buy',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -128,13 +145,13 @@ public.bid_listing_config = {
end, end,
}, },
}, },
sort_order = {}, sort_order = {{ column = 1, order = 'ascending' }},
} }
public.auction_listing_config = { public.auction_listing_config = {
on_row_click = function (sheet, row_index) on_row_click = function (sheet, row_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame) local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
AuxBuyEntry_OnClick(sheet.data[data_index]) public.on_auction_click(sheet.data[data_index])
end, end,
on_row_enter = function (sheet, row_index) on_row_enter = function (sheet, row_index)
@@ -145,16 +162,6 @@ public.auction_listing_config = {
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
end, end,
columns = { columns = {
{
title = 'Qty',
width = 23,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.stack_size)
private.auction_alpha_setter(cell, datum)
end,
},
{ {
title = 'Auction Item', title = 'Auction Item',
width = 157, width = 157,
@@ -174,8 +181,6 @@ public.auction_listing_config = {
icon:SetPoint('LEFT', cell) icon:SetPoint('LEFT', cell)
icon:SetWidth(12) icon:SetWidth(12)
icon:SetHeight(12) icon:SetHeight(12)
icon:SetScript('OnEnter', function() Aux.info.set_game_tooltip(this, cell.tooltip, 'ANCHOR_CURSOR', cell.EnhTooltip_info) end)
icon:SetScript('OnLeave', function() AuxTooltip:Hide() end)
local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall') local text = cell:CreateFontString(nil, 'OVERLAY', 'GameFontHighlightSmall')
text:SetPoint("LEFT", icon, "RIGHT", 1, 0) text:SetPoint("LEFT", icon, "RIGHT", 1, 0)
text:SetPoint('TOPRIGHT', cell) text:SetPoint('TOPRIGHT', cell)
@@ -187,9 +192,7 @@ public.auction_listing_config = {
cell.icon = icon cell.icon = icon
end, end,
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
cell.tooltip = datum.tooltip cell.icon.icon_texture:SetTexture(Aux.info.item(datum.item_id).texture)
cell.EnhTooltip_info = datum.EnhTooltip_info
cell.icon.icon_texture:SetTexture(datum.texture)
if not datum.usable then if not datum.usable then
cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1) cell.icon.icon_texture:SetVertexColor(1.0, 0.1, 0.1)
else else
@@ -201,6 +204,16 @@ public.auction_listing_config = {
private.auction_alpha_setter(cell, datum) private.auction_alpha_setter(cell, datum)
end, end,
}, },
{
title = 'Qty',
width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum)
cell.text:SetText(datum.aux_quantity)
private.auction_alpha_setter(cell, datum)
end,
},
{ {
title = 'Left', title = 'Left',
width = 30, width = 30,
@@ -222,18 +235,28 @@ public.auction_listing_config = {
end, end,
}, },
{ {
title = 'Bid', title = 'Current Bid',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.bid, row2.bid, Aux.util.GT) end, comparator = function(auction1, auction2) return Aux.util.compare(auction1.current_bid, auction2.current_bid, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, datum) cell_setter = function(cell, auction)
cell.text:SetText(Aux.util.money_string(datum.bid)) cell.text:SetText(auction.current_bid and Aux.util.money_string(auction.current_bid) or RED_FONT_COLOR_CODE..'No Bids'..FONT_COLOR_CODE_CLOSE)
private.auction_alpha_setter(cell, datum) private.auction_alpha_setter(cell, auction)
end,
},
{
title = 'Min Bid',
width = 90,
comparator = function(auction1, auction2) return Aux.util.compare(auction1.min_bid, auction2.min_bid, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('CENTER'),
cell_setter = function(cell, auction)
cell.text:SetText(Aux.util.money_string(auction.min_bid))
private.auction_alpha_setter(cell, auction)
end, end,
}, },
{ {
title = 'Buy', title = 'Buy',
width = 70, width = 90,
comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end, comparator = function(row1, row2) return Aux.util.compare(row1.buyout_price, row2.buyout_price, Aux.util.GT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -242,7 +265,7 @@ public.auction_listing_config = {
end, end,
}, },
}, },
sort_order = {}, sort_order = {{ column = 1, order = 'ascending' }},
} }
function public.on_open() function public.on_open()
@@ -272,8 +295,8 @@ function public.update_bid_records()
on_page_loaded = function(page, total_pages) on_page_loaded = function(page, total_pages)
Aux.log('Scanning bid page '..(page+1)..' out of '..total_pages..' ...') Aux.log('Scanning bid page '..(page+1)..' out of '..total_pages..' ...')
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
private.create_bid_record(i) private.create_bid_record(auction_info)
end, end,
on_complete = function() on_complete = function()
Aux.log('Scan complete: '..getn(bid_records)..' bids found') Aux.log('Scan complete: '..getn(bid_records)..' bids found')
@@ -298,8 +321,8 @@ function public.update_auction_records()
on_page_loaded = function(page, total_pages) on_page_loaded = function(page, total_pages)
Aux.log('Scanning auction page '..(page+1)..' out of '..total_pages..' ...') Aux.log('Scanning auction page '..(page+1)..' out of '..total_pages..' ...')
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
private.create_auction_record(i) private.create_auction_record(auction_info)
end, end,
on_complete = function() on_complete = function()
Aux.log('Scan complete: '..getn(auction_records)..' auctions found') Aux.log('Scan complete: '..getn(auction_records)..' auctions found')
@@ -337,59 +360,218 @@ function public.update_listing()
end end
end end
function private.create_record(auction_item) function private.create_record(auction_info)
local aux_quantity = auction_info.charges or auction_info.count
local bid = (auction_info.current_bid > 0 and auction_info.current_bid or auction_info.min_bid) + auction_info.min_increment
local buyout_price = auction_info.buyout_price > 0 and auction_info.buyout_price or nil
local buyout_price_per_unit = buyout_price and Aux_Round(auction_info.buyout_price / aux_quantity)
local stack_size = auction_item.charges or auction_item.count
local bid = (auction_item.current_bid > 0 and auction_item.current_bid or auction_item.min_bid) + auction_item.min_increment
local buyout_price = auction_item.buyout_price > 0 and auction_item.buyout_price or nil
local buyout_price_per_unit = buyout_price and Aux_Round(auction_item.buyout_price / stack_size)
local status local status
if auction_item.current_bid == 0 then if auction_info.high_bidder then
status = 'No Bid' status = GREEN_FONT_COLOR_CODE..'High Bidder'..FONT_COLOR_CODE_CLOSE
elseif auction_item.high_bidder then
status = GREEN_FONT_COLOR_CODE..'Your Bid'..FONT_COLOR_CODE_CLOSE
else else
status = RED_FONT_COLOR_CODE..'Other Bidder'..FONT_COLOR_CODE_CLOSE status = RED_FONT_COLOR_CODE..'Outbid'..FONT_COLOR_CODE_CLOSE
end end
return { return {
key = auction_item.item_signature, item_id = auction_info.item_id,
signature = Aux.auction_signature(auction_item.hyperlink, stack_size, bid, auction_item.buyout_price), key = auction_info.item_signature,
signature = Aux.auction_signature(auction_info.hyperlink, aux_quantity, bid, auction_info.buyout_price),
name = auction_item.name, name = auction_info.name,
level = auction_item.level, level = auction_info.level,
texture = auction_item.texture, tooltip = auction_info.tooltip,
tooltip = auction_item.tooltip, aux_quantity = aux_quantity,
stack_size = stack_size,
buyout_price = buyout_price, buyout_price = buyout_price,
buyout_price_per_unit = buyout_price_per_unit, buyout_price_per_unit = buyout_price_per_unit,
quality = auction_item.quality, quality = auction_info.quality,
hyperlink = auction_item.hyperlink, hyperlink = auction_info.hyperlink,
itemstring = auction_item.itemstring, itemstring = auction_info.itemstring,
bid = bid, bid = bid,
bid_per_unit = Aux_Round(bid/stack_size), bid_per_unit = Aux_Round(bid / aux_quantity),
owner = auction_item.owner, owner = auction_info.owner,
duration = auction_item.duration, duration = auction_info.duration,
usable = auction_item.usable, usable = auction_info.usable,
high_bidder = auction_item.high_bidder, high_bidder = auction_info.high_bidder,
current_bid = auction_info.current_bid > 0 and auction_info.current_bid or nil,
min_bid = auction_info.min_bid,
status = status, status = status,
EnhTooltip_info = auction_item.EnhTooltip_info, EnhTooltip_info = auction_info.EnhTooltip_info,
} }
end end
function private.create_auction_record(index) function private.create_auction_record(auction_info)
local auction_item = Aux.info.auction_item(index, 'owner') tinsert(auction_records, private.create_record(auction_info))
if auction_item then end
tinsert(auction_records, private.create_record(auction_item))
function private.create_bid_record(auction_info)
tinsert(bid_records, private.create_record(auction_info))
end
function public.dialog_cancel()
Aux.log('Aborted.')
Aux.scan.abort()
AuxManageFrameListingDialog:Hide()
public.update_listing()
end
function private.find_auction(entry, action, express_mode)
if entry.gone then
Aux.log('Auction not available')
return
end
if action == 'buyout' and not entry.buyout_price then
Aux.log('Auction has no buyout price')
return
end
local amount
if action == 'buyout' then
amount = entry.buyout_price
elseif action == 'bid' then
amount = entry.bid
end
Aux.log('Processing '..action..' request for '..entry.hyperlink..' x '..entry.aux_quantity..' at '..Aux.util.money_string(amount)..' ...')
if not express_mode then
private.show_dialog(action, entry, amount)
end
PlaySound('igMainMenuOptionCheckBoxOn')
local found
Aux.scan.start{
type = action == 'cancel' and 'owner' or 'bidder',
page = entry.page,
on_read_auction = function(auction_info, ctrl)
local auction_record = private.create_record(auction_info)
if entry.signature == auction_record.signature then
ctrl.suspend()
found = true
Aux.log('Matching auction found.'..(express_mode and '' or ' Awaiting confirmation ...'))
if express_mode then
if action == 'cancel' then
CancelAuction(auction_info.index)
entry.gone = true
Aux.log('Canceled'..auction_record.hyperlink..' x '..auction_record.aux_quantity)
elseif GetMoney() >= amount then
PlaceAuctionBid('bidder', auction_info.index, amount)
Aux.log((action == 'buyout' and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true
else
Aux.log((action == 'buyout' and 'Purchase' or 'Bid')..' failed: Not enough money.')
end
Aux.scan.abort()
else
public.dialog_action = function()
if action == 'cancel' then
CancelAuction(auction_info.index)
entry.gone = true
Aux.log('Canceled'..auction_record.hyperlink..' x '..auction_record.aux_quantity)
elseif GetMoney() >= amount then
PlaceAuctionBid('bidder', auction_info.index, action == 'bid' and MoneyInputFrame_GetCopper(AuxManageFrameListingDialogContentBid) or amount)
Aux.log((action == 'buyout' and 'Purchased ' or 'Bid on ')..auction_record.hyperlink..' x '..auction_record.aux_quantity..' at '..Aux.util.money_string(amount)..'.')
entry.gone = true
else
Aux.log('Not enough money.')
end
Aux.scan.abort()
AuxManageFrameListingDialog:Hide()
public.update_listing()
end
AuxManageFrameListingDialogContentActionButton:Enable()
end
end
end,
on_complete = function()
if not found then
Aux.log('No matching auction found. Removing entry from the cache.')
entry.gone = true
public.dialog_cancel()
end
end,
on_abort = function()
public.update_listing()
end,
next_page = function(page, total_pages)
if not page or page == entry.page then
return entry.page - 1
end
end,
}
end
function public.on_auction_click(auction_record)
local express_mode = IsAltKeyDown()
if IsControlKeyDown() then
DressUpItemLink(auction_record.hyperlink)
else
private.find_auction(auction_record, 'cancel', express_mode)
end end
end end
function private.create_bid_record(index) function public.on_bid_click(bid_record)
local auction_item = Aux.info.auction_item(index, 'bidder')
if auction_item then local express_mode = IsAltKeyDown()
tinsert(bid_records, private.create_record(auction_item)) local action = arg1 == 'LeftButton' and 'buyout' or 'bid'
if IsControlKeyDown() then
DressUpItemLink(bid_record.hyperlink)
else
private.find_auction(bid_record, action, express_mode)
end end
end end
function private.show_dialog(action, entry, amount)
AuxManageFrameListingDialogContentItem.itemstring = Aux.info.itemstring(entry.item_id, entry.suffix_id, entry.unique_id, entry.enchant_id)
AuxManageFrameListingDialogContentItem.EnhTooltip_info = entry.EnhTooltip_info
AuxManageFrameListingDialogContentActionButton:Disable()
AuxManageFrameListingDialogContentItemIconTexture:SetTexture(Aux.info.item(entry.item_id).texture)
AuxManageFrameListingDialogContentItemName:SetText(entry.name)
local color = ITEM_QUALITY_COLORS[entry.quality]
AuxManageFrameListingDialogContentItemName:SetTextColor(color.r, color.g, color.b)
if entry.aux_quantity > 1 then
AuxManageFrameListingDialogContentItemCount:SetText(entry.aux_quantity);
AuxManageFrameListingDialogContentItemCount:Show()
else
AuxManageFrameListingDialogContentItemCount:Hide()
end
if action == 'buyout' then
AuxManageFrameListingDialogContentActionButton:SetText('Buy')
AuxManageFrameListingDialogContentCancelButton:SetText('Cancel')
MoneyFrame_Update('AuxManageFrameListingDialogContentBuyoutPrice', amount)
AuxManageFrameListingDialogContentBid:Hide()
AuxManageFrameListingDialogContentCancelLabel:Hide()
AuxManageFrameListingDialogContentBuyoutPrice:Show()
elseif action == 'bid' then
AuxManageFrameListingDialogContentActionButton:SetText('Bid')
AuxManageFrameListingDialogContentCancelButton:SetText('Cancel')
MoneyInputFrame_SetCopper(AuxManageFrameListingDialogContentBid, amount)
AuxManageFrameListingDialogContentBuyoutPrice:Hide()
AuxManageFrameListingDialogContentCancelLabel:Hide()
AuxManageFrameListingDialogContentBid:Show()
elseif action == 'cancel' then
AuxManageFrameListingDialogContentBid:Hide()
AuxManageFrameListingDialogContentBuyoutPrice:Hide()
AuxManageFrameListingDialogContentCancelLabel:Show()
AuxManageFrameListingDialogContentActionButton:SetText('Yes')
AuxManageFrameListingDialogContentCancelButton:SetText('No')
end
AuxManageFrameListingDialog:Show()
end
+18 -75
View File
@@ -63,74 +63,10 @@
<OnLoad> <OnLoad>
local config = Aux.manage_frame.bid_listing_config local config = Aux.manage_frame.bid_listing_config
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
<Frame name="$parentBidConfirmation" frameStrata="FULLSCREEN_DIALOG" inherits="OptionFrameBoxTemplate" enableMouse="true" enableMouseWheel="true" hidden="true">
<Anchors>
<Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
<Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
</Anchors>
<Scripts>
<OnMouseWheel></OnMouseWheel>
</Scripts>
<Frames>
<Frame name="$parentContent">
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
<Size><AbsDimension x="193" y="300"/></Size>
<Frames>
<Frame name="$parentItem" inherits="AuxItemTemplate">
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
</Frame>
<Frame name="$parentBid" inherits="MoneyInputFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="148"/></Offset></Anchor></Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT">
<Anchors><Anchor point="RIGHT" relativePoint="LEFT"><Offset><AbsDimension x="-10" y="0"/></Offset></Anchor></Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="150"/></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>
SmallMoneyFrame_OnLoad()
MoneyFrame_SetType("STATIC")
</OnLoad>
</Scripts>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT">
<Anchors><Anchor point="RIGHT" relativePoint="LEFT"><Offset><AbsDimension x="-5" y="0"/></Offset></Anchor></Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Button name="$parentActionButton" inherits="UIPanelButtonTemplate" text="Buy" disabled="true">
<Size><AbsDimension x="90" y="26"/> </Size>
<Anchors><Anchor point="BOTTOMLEFT"><Offset><AbsDimension x="229" y="110"/></Offset></Anchor></Anchors>
<Scripts>
<OnClick>
Aux.buy.dialog_action()
</OnClick>
</Scripts>
</Button>
<Button name="$parentCancelButton" inherits="UIPanelButtonTemplate" text="Cancel">
<Size><AbsDimension x="90" y="26"/></Size>
<Anchors><Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="-229" y="110"/></Offset></Anchor></Anchors>
<Scripts>
<OnClick>
Aux.buy.dialog_cancel()
</OnClick>
</Scripts>
</Button>
</Frames>
</Frame>
</Frames>
</Frame>
<Frame name="$parentAuctionListing"> <Frame name="$parentAuctionListing">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
@@ -140,11 +76,11 @@
<OnLoad> <OnLoad>
local config = Aux.manage_frame.auction_listing_config local config = Aux.manage_frame.auction_listing_config
local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end) local sort_order = Aux.util.map(config.sort_order, function(column_order) return { column = config.columns[column_order.column], sort_ascending = column_order.order == 'ascending' } end)
this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave) this.sheet = Aux.sheet.create(this, config.columns, sort_order, config.row_setter, config.on_row_click, config.on_row_enter, config.on_row_leave, config.on_row_update)
</OnLoad> </OnLoad>
</Scripts> </Scripts>
</Frame> </Frame>
<Frame name="$parentAuctionConfirmation" frameStrata="FULLSCREEN_DIALOG" inherits="OptionFrameBoxTemplate" enableMouse="true" enableMouseWheel="true" hidden="true"> <Frame name="$parentDialog" frameStrata="FULLSCREEN_DIALOG" inherits="OptionFrameBoxTemplate" enableMouse="true" enableMouseWheel="true" hidden="true">
<Anchors> <Anchors>
<Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="TOPLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
<Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor> <Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor>
@@ -154,14 +90,21 @@
</Scripts> </Scripts>
<Frames> <Frames>
<Frame name="$parentContent"> <Frame name="$parentContent">
<Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="CENTER"><Offset><AbsDimension x="0" y="5"/></Offset></Anchor></Anchors>
<Size><AbsDimension x="193" y="300"/></Size> <Size><AbsDimension x="193" y="120"/></Size>
<Layers>
<Layer level="OVERLAY">
<FontString name="$parentCancelLabel" inherits="GameFontNormal" text="Cancel this auction?" justifyH="RIGHT">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="0" y="45"/></Offset></Anchor></Anchors>
</FontString>
</Layer>
</Layers>
<Frames> <Frames>
<Frame name="$parentItem" inherits="AuxItemTemplate"> <Frame name="$parentItem" inherits="AuxItemTemplate">
<Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors> <Anchors><Anchor point="TOP"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
</Frame> </Frame>
<Frame name="$parentBid" inherits="MoneyInputFrameTemplate"> <Frame name="$parentBid" inherits="MoneyInputFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="148"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="43"/></Offset></Anchor></Anchors>
<Layers> <Layers>
<Layer level="OVERLAY"> <Layer level="OVERLAY">
<FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT"> <FontString inherits="GameFontNormal" text="Price:" justifyH="RIGHT">
@@ -171,7 +114,7 @@
</Layers> </Layers>
</Frame> </Frame>
<Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate"> <Frame name="$parentBuyoutPrice" inherits="SmallMoneyFrameTemplate">
<Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="150"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOM"><Offset><AbsDimension x="30" y="45"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnLoad> <OnLoad>
SmallMoneyFrame_OnLoad() SmallMoneyFrame_OnLoad()
@@ -188,19 +131,19 @@
</Frame> </Frame>
<Button name="$parentActionButton" inherits="UIPanelButtonTemplate" text="Buy" disabled="true"> <Button name="$parentActionButton" inherits="UIPanelButtonTemplate" text="Buy" disabled="true">
<Size><AbsDimension x="90" y="26"/> </Size> <Size><AbsDimension x="90" y="26"/> </Size>
<Anchors><Anchor point="BOTTOMLEFT"><Offset><AbsDimension x="229" y="110"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOMLEFT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnClick> <OnClick>
Aux.buy.dialog_action() Aux.manage_frame.dialog_action()
</OnClick> </OnClick>
</Scripts> </Scripts>
</Button> </Button>
<Button name="$parentCancelButton" inherits="UIPanelButtonTemplate" text="Cancel"> <Button name="$parentCancelButton" inherits="UIPanelButtonTemplate" text="Cancel">
<Size><AbsDimension x="90" y="26"/></Size> <Size><AbsDimension x="90" y="26"/></Size>
<Anchors><Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="-229" y="110"/></Offset></Anchor></Anchors> <Anchors><Anchor point="BOTTOMRIGHT"><Offset><AbsDimension x="0" y="0"/></Offset></Anchor></Anchors>
<Scripts> <Scripts>
<OnClick> <OnClick>
Aux.buy.dialog_cancel() Aux.manage_frame.dialog_cancel()
</OnClick> </OnClick>
</Scripts> </Scripts>
</Button> </Button>
+6 -7
View File
@@ -1,6 +1,5 @@
Aux.post = { local private, public = {}, {}
orig = {} Aux.post = public
}
local controller = (function() local controller = (function()
local controller local controller
@@ -20,7 +19,7 @@ function process()
local stack_slot local stack_slot
Aux.stack.start( Aux.stack.start(
state.name, state.item_key,
state.stack_size, state.stack_size,
function(slot) function(slot)
stacking_complete = true stacking_complete = true
@@ -43,7 +42,7 @@ function process()
end end
end end
function Aux.post.stop(k) function public.stop(k)
Aux.control.on_next_update(function() Aux.control.on_next_update(function()
stop() stop()
@@ -78,7 +77,7 @@ function post_auction(slot, k)
controller().wait(function() return not GetContainerItemInfo(slot.bag, slot.bag_slot) end, k) controller().wait(function() return not GetContainerItemInfo(slot.bag, slot.bag_slot) end, k)
end end
function Aux.post.start(name, stack_size, duration, bid, buyout, count, callback) function public.start(item_key, stack_size, duration, bid, buyout, count, callback)
Aux.control.on_next_update(function() Aux.control.on_next_update(function()
stop() stop()
@@ -87,7 +86,7 @@ function Aux.post.start(name, stack_size, duration, bid, buyout, count, callback
ClearCursor() ClearCursor()
state = { state = {
name = name, item_key = item_key,
stack_size = stack_size, stack_size = stack_size,
duration = duration, duration = duration,
bid = bid, bid = bid,
+72 -94
View File
@@ -1,6 +1,7 @@
Aux.sell = {} local private, public = {}, {}
Aux.sell = public
local auxSellEntries = {} local existing_auctions = {}
local inventory_data local inventory_data
@@ -40,7 +41,7 @@ Aux.sell.inventory_listing_config = {
columns = { columns = {
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(datum1, datum2) return Aux.util.compare(datum1.aux_quantity, datum2.aux_quantity, Aux.util.LT) end, comparator = function(datum1, datum2) return Aux.util.compare(datum1.aux_quantity, datum2.aux_quantity, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, datum) cell_setter = function(cell, datum)
@@ -100,13 +101,13 @@ Aux.sell.auction_listing_config = {
on_cell_leave = function (sheet, row_index, column_index) on_cell_leave = function (sheet, row_index, column_index)
local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame) local data_index = row_index + FauxScrollFrame_GetOffset(sheet.scroll_frame)
local datum = sheet.data[data_index] local datum = sheet.data[data_index]
if not (datum and current_auction and Aux.util.safe_index{auxSellEntries, current_auction.name, 'selected', 'key'} == datum.key) then if not (datum and current_auction and Aux.util.safe_index{existing_auctions, current_auction.key, 'selected', 'key'} == datum.key) then
sheet.rows[row_index].highlight:SetAlpha(0) sheet.rows[row_index].highlight:SetAlpha(0)
end end
end, end,
row_setter = function(row, datum) row_setter = function(row, datum)
if datum and current_auction and Aux.util.safe_index{auxSellEntries, current_auction.name, 'selected', 'key'} == datum.key then if datum and current_auction and Aux.util.safe_index{existing_auctions, current_auction.key, 'selected', 'key'} == datum.key then
row.highlight:SetAlpha(.5) row.highlight:SetAlpha(.5)
else else
row.highlight:SetAlpha(0) row.highlight:SetAlpha(0)
@@ -153,11 +154,11 @@ Aux.sell.auction_listing_config = {
}, },
{ {
title = 'Qty', title = 'Qty',
width = 23, width = 25,
comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end, comparator = function(row1, row2) return Aux.util.compare(row1.stack_size, row2.stack_size, Aux.util.LT) end,
cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'), cell_initializer = Aux.sheet.default_cell_initializer('RIGHT'),
cell_setter = function(cell, row) cell_setter = function(cell, row)
cell.text:SetText(row.stack_size) cell.text:SetText(row.stack_size == get_stack_size_slider_value() and GREEN_FONT_COLOR_CODE..row.stack_size..FONT_COLOR_CODE_CLOSE or row.stack_size)
end, end,
}, },
{ {
@@ -178,11 +179,12 @@ function update_inventory_listing()
end end
function update_auction_listing() function update_auction_listing()
Aux.list.populate(AuxSellAuctionsListing.sheet, current_auction and auxSellEntries[current_auction.name] or {}) Aux.list.populate(AuxSellAuctionsListing.sheet, current_auction and existing_auctions[current_auction.key] or {})
end end
function Aux.sell.on_open() function Aux.sell.on_open()
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0) MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', 0)
AuxSellInventory:SetWidth(AuxSellInventoryListing:GetWidth() + 40)
AuxSellAuctions:SetWidth(AuxSellAuctionsListing:GetWidth() + 40) AuxSellAuctions:SetWidth(AuxSellAuctionsListing:GetWidth() + 40)
AuxFrame:SetWidth(AuxSellInventory:GetWidth() + AuxSellParameters:GetWidth() + AuxSellAuctions:GetWidth() + 15) AuxFrame:SetWidth(AuxSellInventory:GetWidth() + AuxSellParameters:GetWidth() + AuxSellAuctions:GetWidth() + 15)
@@ -247,7 +249,7 @@ end
function Aux.sell.post_auctions() function Aux.sell.post_auctions()
if current_auction then if current_auction then
local name, hyperlink, stack_size, buyout_price, stack_count = current_auction.name, current_auction.hyperlink, get_stack_size_slider_value(), MoneyInputFrame_GetCopper(AuxSellParametersBuyoutPrice), AuxSellStackCountSlider:GetValue() local key, hyperlink, stack_size, buyout_price, stack_count = current_auction.key, current_auction.hyperlink, get_stack_size_slider_value(), MoneyInputFrame_GetCopper(AuxSellParametersBuyoutPrice), AuxSellStackCountSlider:GetValue()
local duration local duration
if AuctionFrameAuctions.duration == 120 then if AuctionFrameAuctions.duration == 120 then
duration = 2 duration = 2
@@ -258,7 +260,7 @@ function Aux.sell.post_auctions()
end end
Aux.post.start( Aux.post.start(
name, key,
stack_size, stack_size,
AuctionFrameAuctions.duration, AuctionFrameAuctions.duration,
MoneyInputFrame_GetCopper(AuxSellParametersStartPrice), MoneyInputFrame_GetCopper(AuxSellParametersStartPrice),
@@ -266,12 +268,12 @@ function Aux.sell.post_auctions()
stack_count, stack_count,
function(posted) function(posted)
for i = 1, posted do for i = 1, posted do
record_auction(name, stack_size, buyout_price, duration, UnitName("player")) record_auction(key, stack_size, buyout_price, duration, UnitName("player"))
end end
if auxSellEntries[name] then if existing_auctions[key] then
for _, entry in ipairs(auxSellEntries[name]) do for _, entry in ipairs(existing_auctions[key]) do
if entry.buyout_price == buyout_price and entry.stack_size == stack_size then if entry.buyout_price == buyout_price and entry.stack_size == stack_size then
auxSellEntries[name].selected = entry existing_auctions[key].selected = entry
end end
end end
end end
@@ -285,13 +287,13 @@ function Aux.sell.post_auctions()
end end
function select_entry() function select_entry()
if current_auction and auxSellEntries[current_auction.name] and not auxSellEntries[current_auction.name].selected then if current_auction and existing_auctions[current_auction.key] and not existing_auctions[current_auction.key].selected then
local bestPrice = {} -- a table with one entry per stack_size that is the cheapest auction for that particular stack_size local bestPrice = {} -- a table with one entry per stack_size that is the cheapest auction for that particular stack_size
local absoluteBest -- the overall cheapest auction local absoluteBest -- the overall cheapest auction
----- find the best price per stacksize and overall ----- ----- find the best price per stacksize and overall -----
for _, auction_datum in ipairs(auxSellEntries[current_auction.name]) do for _, auction_datum in ipairs(existing_auctions[current_auction.key]) do
if not bestPrice[auction_datum.stack_size] or bestPrice[auction_datum.stack_size].unit_buyout_price >= auction_datum.unit_buyout_price then if not bestPrice[auction_datum.stack_size] or bestPrice[auction_datum.stack_size].unit_buyout_price >= auction_datum.unit_buyout_price then
bestPrice[auction_datum.stack_size] = auction_datum bestPrice[auction_datum.stack_size] = auction_datum
end end
@@ -301,10 +303,10 @@ function select_entry()
end end
end end
auxSellEntries[current_auction.name].selected = absoluteBest existing_auctions[current_auction.key].selected = absoluteBest
if bestPrice[get_stack_size_slider_value()] then if bestPrice[get_stack_size_slider_value()] then
auxSellEntries[current_auction.name].selected = bestPrice[get_stack_size_slider_value()] existing_auctions[current_auction.key].selected = bestPrice[get_stack_size_slider_value()]
bestPriceOurStackSize = bestPrice[get_stack_size_slider_value()] bestPriceOurStackSize = bestPrice[get_stack_size_slider_value()]
end end
end end
@@ -374,21 +376,21 @@ function update_recommendation()
-- TODO neutral AH deposit formula -- TODO neutral AH deposit formula
MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(current_auction.unit_vendor_price * 0.05 * (current_auction.charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120) MoneyFrame_Update('AuxSellParametersDepositMoneyFrame', floor(current_auction.unit_vendor_price * 0.05 * (current_auction.charges and 1 or get_stack_size_slider_value())) * AuxSellStackCountSlider:GetValue() * AuctionFrameAuctions.duration / 120)
if auxSellEntries[current_auction.name] and auxSellEntries[current_auction.name].selected then if existing_auctions[current_auction.key] and existing_auctions[current_auction.key].selected then
if not auxSellEntries[current_auction.name].created or GetTime() - auxSellEntries[current_auction.name].created > 1800 then if not existing_auctions[current_auction.key].created or GetTime() - existing_auctions[current_auction.key].created > 1800 then
AuxSellParametersStrategyDropDownStaleWarning:SetText('Stale data!') -- data older than half an hour marked as stale AuxSellParametersStrategyDropDownStaleWarning:SetText('Stale data!') -- data older than half an hour marked as stale
end end
local new_buyout_price = auxSellEntries[current_auction.name].selected.unit_buyout_price * get_stack_size_slider_value() local new_buyout_price = existing_auctions[current_auction.key].selected.unit_buyout_price * get_stack_size_slider_value()
if auxSellEntries[current_auction.name].selected.yours == 0 then if existing_auctions[current_auction.key].selected.yours == 0 then
new_buyout_price = undercut(new_buyout_price) new_buyout_price = undercut(new_buyout_price)
end end
local new_start_price = new_buyout_price * 0.95 local new_start_price = new_buyout_price * 0.95
MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, Aux_Round(new_buyout_price)) MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, max(1, Aux_Round(new_start_price)))
MoneyInputFrame_SetCopper(AuxSellParametersStartPrice, Aux_Round(new_start_price)) MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, max(1, Aux_Round(new_buyout_price)))
-- elseif UIDropDownMenu_GetSelectedValue(AuxSellParametersStrategyDropDown) == HISTORICAL then -- elseif UIDropDownMenu_GetSelectedValue(AuxSellParametersStrategyDropDown) == HISTORICAL then
-- local market_price = Aux.history.get_price_suggestion(current_auction.key, current_auction.aux_quantity) -- local market_price = Aux.history.get_price_suggestion(current_auction.key, current_auction.aux_quantity)
-- MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, Aux_Round(market_price * 0.95)) -- MoneyInputFrame_SetCopper(AuxSellParametersBuyoutPrice, Aux_Round(market_price * 0.95))
@@ -406,18 +408,15 @@ function Aux.sell.quantity_update()
end end
select_entry() select_entry()
update_recommendation() update_recommendation()
update_auction_listing()
end end
-----------------------------------------
function Aux.sell.clear_auction() function Aux.sell.clear_auction()
current_auction = nil current_auction = nil
select_entry() select_entry()
update_recommendation() update_recommendation()
end end
-----------------------------------------
function set_auction(auction_candidate) function set_auction(auction_candidate)
PlaySound("igMainMenuOptionCheckBoxOn") PlaySound("igMainMenuOptionCheckBoxOn")
@@ -436,7 +435,7 @@ function set_auction(auction_candidate)
Aux.sell.quantity_update() Aux.sell.quantity_update()
AuxSellStackCountSlider:SetValue(current_auction.aux_quantity) -- reduced to max possible AuxSellStackCountSlider:SetValue(current_auction.aux_quantity) -- reduced to max possible
if not auxSellEntries[current_auction.name] then if not existing_auctions[current_auction.key] then
refresh_entries() refresh_entries()
end end
@@ -495,11 +494,15 @@ function update_inventory_data()
end) end)
if auction_sell_item then if auction_sell_item then
if not auction_candidate_map[item_info.item_signature] then if not auction_candidate_map[item_info.item_key] then
auction_candidate_map[item_info.item_signature] = { auction_candidate_map[item_info.item_key] = {
key = item_info.item_signature, item_id = item_info.item_id,
suffix_id = item_info.suffix_id,
key = item_info.item_key,
hyperlink = item_info.hyperlink, hyperlink = item_info.hyperlink,
name = item_info.name, name = item_info.name,
texture = item_info.texture, texture = item_info.texture,
quality = item_info.quality, quality = item_info.quality,
@@ -512,7 +515,7 @@ function update_inventory_data()
availability = { [charge_class]=item_info.count }, availability = { [charge_class]=item_info.count },
} }
else else
local candidate = auction_candidate_map[item_info.item_signature] local candidate = auction_candidate_map[item_info.item_key]
candidate.availability[charge_class] = (candidate.availability[charge_class] or 0) + item_info.count candidate.availability[charge_class] = (candidate.availability[charge_class] or 0) + item_info.count
candidate.aux_quantity = candidate.aux_quantity + (item_info.charges or item_info.count) candidate.aux_quantity = candidate.aux_quantity + (item_info.charges or item_info.count)
end end
@@ -537,43 +540,50 @@ end
function refresh_entries() function refresh_entries()
if current_auction then if current_auction then
local name, class, subclass = current_auction.name, current_auction.class, current_auction.subclass local item_id, suffix_id = current_auction.item_id, current_auction.suffix_id
local item_key = item_id..':'..suffix_id
auxSellEntries[name] = nil local item_info = Aux.info.item(item_id, suffix_id)
class, subclass = GetItemInfo(name)
-- local class_index = item_class_index(current_auction.class) existing_auctions[item_key] = nil
-- local subclass_index = item_subclass_index(class_index, current_auction.subclass)
local class_index = Aux.item_class_index(item_info.class)
local subclass_index = Aux.item_subclass_index(class_index, item_info.subclass)
local search_query = {
name = Aux.info.item(item_id).name, -- blizzard doesn't support queries with name suffixes
min_level = item_info.level,
min_level = item_info.level,
slot = item_info.slot,
class = class_index,
subclass = subclass_index,
quality = item_info.quality,
usable = item_info.usable,
}
Aux.log('Scanning auctions ...') Aux.log('Scanning auctions ...')
Aux.scan.start{ Aux.scan.start{
query = { query = search_query,
name = name,
class = class_index,
subclass = subclass_index,
},
page = 0, page = 0,
on_page_loaded = function(page, total_pages) on_page_loaded = function(page, total_pages)
Aux.log('Scanning page '..(page + 1)..' out of '..total_pages..' ...') Aux.log('Scanning page '..(page + 1)..' out of '..total_pages..' ...')
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
local auction_item = Aux.info.auction_item(i) if auction_info.name == item_info.name then
if auction_item and auction_item.name == name then local aux_quantity = auction_info.charges or auction_info.count
local aux_quantity = auction_item.charges or auction_item.count record_auction(auction_info.item_key, aux_quantity, auction_info.buyout_price, auction_info.duration, auction_info.owner)
record_auction(auction_item.name, aux_quantity, auction_item.buyout_price, auction_item.duration, auction_item.owner)
end end
end, end,
on_abort = function() on_abort = function()
auxSellEntries[name] = nil existing_auctions[item_key] = nil
Aux.log('Scan aborted.') Aux.log('Scan aborted.')
end, end,
on_complete = function() on_complete = function()
auxSellEntries[name] = auxSellEntries[name] or { created = GetTime() } existing_auctions[item_key] = existing_auctions[item_key] or { created = GetTime() }
select_entry() select_entry()
update_recommendation() update_recommendation()
update_auction_listing() update_auction_listing()
Aux.log('Scan complete: '..getn(auxSellEntries[name])..' '..Aux_PluralizeIf('auction', getn(auxSellEntries[name]))..' of '..current_auction.hyperlink..' found.') Aux.log('Scan complete: '..getn(existing_auctions[item_key])..' '..Aux_PluralizeIf('auction', getn(existing_auctions[item_key]))..' of '..current_auction.hyperlink..' found.')
end, end,
next_page = function(page, total_pages) next_page = function(page, total_pages)
local last_page = max(total_pages - 1, 0) local last_page = max(total_pages - 1, 0)
@@ -587,7 +597,7 @@ end
function AuxSellEntry_OnClick(entry) function AuxSellEntry_OnClick(entry)
auxSellEntries[current_auction.name].selected = entry existing_auctions[current_auction.key].selected = entry
update_auction_listing() update_auction_listing()
update_recommendation() update_recommendation()
@@ -604,21 +614,11 @@ function AuxSellParametersRefreshButton_OnClick()
end) end)
end end
----------------------------------------- function record_auction(key, aux_quantity, buyout_price, duration, owner)
function AuxMoneyFrame_OnLoad()
this.small = 1
SmallMoneyFrame_OnLoad()
MoneyFrame_SetType("AUCTION")
end
-----------------------------------------
function record_auction(name, aux_quantity, buyout_price, duration, owner)
if buyout_price > 0 then if buyout_price > 0 then
auxSellEntries[name] = auxSellEntries[name] or { created = GetTime() } existing_auctions[key] = existing_auctions[key] or { created = GetTime() }
local entry local entry
for _, existingEntry in ipairs(auxSellEntries[name]) do for _, existingEntry in ipairs(existing_auctions[key]) do
if existingEntry.buyout_price == buyout_price and existingEntry.stack_size == aux_quantity then if existingEntry.buyout_price == buyout_price and existingEntry.stack_size == aux_quantity then
entry = existingEntry entry = existingEntry
end end
@@ -638,45 +638,23 @@ function record_auction(name, aux_quantity, buyout_price, duration, owner)
count = 1, count = 1,
yours = owner == UnitName("player") and 1 or 0, yours = owner == UnitName("player") and 1 or 0,
} }
tinsert(auxSellEntries[name], entry) tinsert(existing_auctions[key], entry)
table.sort(auxSellEntries[name], function(a,b) return a.unit_buyout_price < b.unit_buyout_price end) table.sort(existing_auctions[key], function(a,b) return a.unit_buyout_price < b.unit_buyout_price end)
end end
end end
end end
-----------------------------------------
function undercut(price) function undercut(price)
return math.max(0, price - 1) return math.max(0, price - 1)
end end
----------------------------------------- function report(hyperlink, aux_quantity, buyout_price, posted)
-- function item_class_index(item_class)
-- for i, class in ipairs({ GetAuctionItemClasses() }) do
-- if class == item_class then
-- return i
-- end
-- end
-- end
-- -----------------------------------------
-- function item_subclass_index(class_index, item_subclass)
-- for i, subclass in ipairs({ GetAuctionItemSubClasses(class_index) }) do
-- if subclass == item_subclass then
-- return i
-- end
-- end
-- end
function report(hyperlink, stack_size, buyout_price, posted)
Aux.log(string.format( Aux.log(string.format(
'%i %s of %s x %i posted at %s.', '%i %s of %s x %i posted at %s.',
posted, posted,
Aux_PluralizeIf('auction', posted), Aux_PluralizeIf('auction', posted),
hyperlink, hyperlink,
stack_size, aux_quantity,
Aux.util.money_string(buyout_price) Aux.util.money_string(buyout_price)
)) ))
end end
+13 -7
View File
@@ -1,4 +1,5 @@
Aux.scan = {} local private , public = {}, {}
Aux.scan = public
local PAGE_SIZE = 50 local PAGE_SIZE = 50
@@ -70,8 +71,8 @@ function wait_for_owner_data(k)
return controller().wait(function() return controller().wait(function()
local count, _ = GetNumAuctionItems(state.job.type) local count, _ = GetNumAuctionItems(state.job.type)
for i=1,count do for i=1,count do
local auction_item_info = Aux.info.auction_item(i) local auction_info = Aux.info.auction(i, state.job.type)
if auction_item_info and not auction_item_info.owner then if auction_info and not auction_info.owner then
return false return false
end end
end end
@@ -128,15 +129,20 @@ function scan_auctions(count, k)
end end
function scan_auctions_helper(i, n, k) function scan_auctions_helper(i, n, k)
wait_for_callback{state.job.on_read_auction, i, function() local recurse = function()
if i >= n then if i >= n then
return k() return k()
else else
return scan_auctions_helper(i + 1, n, k) return scan_auctions_helper(i + 1, n, k)
end end
end
end}
local auction_info = Aux.info.auction(i, state.job.type)
if auction_info then
wait_for_callback{state.job.on_read_auction, auction_info, recurse}
else
recurse()
end
end end
function submit_query(k) function submit_query(k)
+3 -4
View File
@@ -35,8 +35,8 @@ function Aux.history.start_scan()
on_page_loaded = function(page, total_pages) on_page_loaded = function(page, total_pages)
Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...') Aux.log('Scanning page '..(page+1)..' out of '..total_pages..' ...')
end, end,
on_read_auction = function(i) on_read_auction = function(auction_info)
process_auction(i) process_auction(auction_info)
end, end,
on_complete = function() on_complete = function()
process_scanned_auctions() process_scanned_auctions()
@@ -82,8 +82,7 @@ function Aux.history.stop_scan()
Aux.scan.abort() Aux.scan.abort()
end end
function process_auction(index) function process_auction(auction_info)
local auction_info = Aux.info.auction_item(index)
local buyout_price = Aux.util.safe_index{auction_info, 'buyout_price'} local buyout_price = Aux.util.safe_index{auction_info, 'buyout_price'}
if buyout_price and buyout_price > 0 then if buyout_price and buyout_price > 0 then
local aux_quantity = auction_info.charges or auction_info.count local aux_quantity = auction_info.charges or auction_info.count
+50 -66
View File
@@ -1,4 +1,5 @@
Aux.stack = {} local private, public = {}, {}
Aux.stack = public
local controller = (function() local controller = (function()
local controller local controller
@@ -10,19 +11,18 @@ end)()
local state local state
local item_slots, find_empty_slot, locked, same_slot, move_item, item_name, stack_size, stop, process function private.item_slots(item_key)
function item_slots(name)
local slots = Aux.util.inventory_iterator() local slots = Aux.util.inventory_iterator()
return function() return function()
local slot
repeat repeat
slot = slots() slot = slots()
until slot == nil or item_name(slot) == name until slot == nil or private.item_key(slot) == item_key
return slot return slot
end end
end end
function find_empty_slot() function private.find_empty_slot()
for slot in Aux.util.inventory_iterator() do for slot in Aux.util.inventory_iterator() do
if not GetContainerItemInfo(slot.bag, slot.bag_slot) then if not GetContainerItemInfo(slot.bag, slot.bag_slot) then
return slot return slot
@@ -30,106 +30,90 @@ function find_empty_slot()
end end
end end
function find_charges_item_slot(name, charges) function private.find_charges_item_slot(item_key, charges)
for slot in item_slots(name) do for slot in private.item_slots(item_key) do
if item_charges(slot) == charges then if private.item_charges(slot) == charges then
return slot return slot
end end
end end
end end
function locked(slot) function private.move_item(from_slot, to_slot, amount, k)
local _, _, locked = GetContainerItemInfo(slog.bag, slot.bag_slot) local size_before = private.stack_size(to_slot)
return locked
end
function same_slot(slot1, slot2)
return slot1.bag == slot2.bag and slot1.bag_slot == slot2.bag_slot
end
function move_item(from_slot, to_slot, amount, k)
local size_before = stack_size(to_slot)
amount = min(max_stack(from_slot) - stack_size(to_slot), amount) amount = min(private.max_stack(from_slot) - private.stack_size(to_slot), amount)
ClearCursor() ClearCursor()
SplitContainerItem(from_slot.bag, from_slot.bag_slot, amount) SplitContainerItem(from_slot.bag, from_slot.bag_slot, amount)
PickupContainerItem(to_slot.bag, to_slot.bag_slot) PickupContainerItem(to_slot.bag, to_slot.bag_slot)
return controller().wait(function() return stack_size(to_slot) == size_before + amount end, k) return controller().wait(function() return private.stack_size(to_slot) == size_before + amount end, k)
end end
function item_name(slot) function private.item_key(slot)
local container_item_info = Aux.info.container_item(slot.bag, slot.bag_slot) local container_item_info = Aux.info.container_item(slot.bag, slot.bag_slot)
return container_item_info and container_item_info.name return container_item_info and container_item_info.item_key
end end
function item_id(slot) function private.stack_size(slot)
local hyperlink = GetContainerItemLink(slot.bag, slot.bag_slot) local container_item_info = Aux.info.container_item(slot.bag, slot.bag_slot)
if hyperlink then return container_item_info and container_item_info.count or 0
local _, _, id_string = strfind(hyperlink, "^.-:(%d*).*")
return tonumber(id_string)
end
end end
function stack_size(slot) function private.item_charges(slot)
local _, item_count = GetContainerItemInfo(slot.bag, slot.bag_slot) local container_item_info = Aux.info.container_item(slot.bag, slot.bag_slot)
return item_count or 0 return container_item_info and container_item_info.charges
end end
function item_charges(slot) function private.process()
return Aux.info.container_item(slot.bag, slot.bag_slot).charges
end
function process() if private.stack_size(state.target_slot) > state.target_size then
local empty_slot = private.find_empty_slot()
if stack_size(state.target_slot) > state.target_size then
local empty_slot = find_empty_slot()
if empty_slot then if empty_slot then
return move_item( return private.move_item(
state.target_slot, state.target_slot,
empty_slot, empty_slot,
stack_size(state.target_slot) - state.target_size, private.stack_size(state.target_slot) - state.target_size,
function() function()
return process() return private.process()
end) end)
else else
local next_slot = state.other_slots() local next_slot = state.other_slots()
if next_slot then if next_slot then
return move_item( return private.move_item(
state.target_slot, state.target_slot,
next_slot, next_slot,
stack_size(state.target_slot) - state.target_size, private.stack_size(state.target_slot) - state.target_size,
function() function()
return process() return private.process()
end) end)
end end
end end
elseif stack_size(state.target_slot) < state.target_size then elseif private.stack_size(state.target_slot) < state.target_size then
local next_slot = state.other_slots() local next_slot = state.other_slots()
if next_slot then if next_slot then
return move_item( return private.move_item(
next_slot, next_slot,
state.target_slot, state.target_slot,
state.target_size - stack_size(state.target_slot), state.target_size - private.stack_size(state.target_slot),
function() function()
return process() return private.process()
end) end)
end end
end end
return stop() return private.stop()
end end
function max_stack(slot) function private.max_stack(slot)
local _, _, _, _, _, _, max_stack = GetItemInfo(item_id(slot)) local container_item_info = Aux.info.container_item(slot.bag, slot.bag_slot)
return max_stack return container_item_info and container_item_info.max_stack
end end
function Aux.stack.stop(k) function public.stop(k)
Aux.control.on_next_update(function() Aux.control.on_next_update(function()
stop() private.stop()
if k then if k then
return k() return k()
@@ -137,11 +121,11 @@ function Aux.stack.stop(k)
end) end)
end end
function stop() function private.stop()
controller().reset() controller().reset()
if state then if state then
local slot local slot
if state.target_slot and (stack_size(state.target_slot) == state.target_size or item_charges(state.target_slot) == state.target_size) then if state.target_slot and (private.stack_size(state.target_slot) == state.target_size or private.item_charges(state.target_slot) == state.target_size) then
slot = state.target_slot slot = state.target_slot
end end
local callback = state.callback local callback = state.callback
@@ -154,11 +138,11 @@ function stop()
end end
end end
function Aux.stack.start(name, size, callback) function public.start(item_key, size, callback)
Aux.control.on_next_update(function() Aux.control.on_next_update(function()
stop() private.stop()
local slots = item_slots(name) local slots = private.item_slots(item_key)
local target_slot = slots() local target_slot = slots()
state = { state = {
@@ -169,12 +153,12 @@ function Aux.stack.start(name, size, callback)
} }
if not target_slot then if not target_slot then
return stop() return private.stop()
elseif item_charges(target_slot) then elseif private.item_charges(target_slot) then
state.target_slot = find_charges_item_slot(name, size) state.target_slot = private.find_charges_item_slot(item_key, size)
return stop() return private.stop()
else else
return process() return private.process()
end end
end) end)
end end