diff --git a/core.lua b/core.lua index b4be1ef..e8448b1 100644 --- a/core.lua +++ b/core.lua @@ -1,4 +1,4 @@ -AuxVersion = '2.4.7' +AuxVersion = '2.4.8' AuxAuthors = 'shirsig; Zerf; Zirco (Auctionator); Nimeral (Auctionator backport)' Aux = { diff --git a/gui.lua b/gui.lua index fc78425..b37f0e3 100644 --- a/gui.lua +++ b/gui.lua @@ -563,7 +563,7 @@ function m.slider(frame, name) -- hightext:SetFont(TSMAPI.Design:GetContentFont('small')) -- hightext:SetPoint('TOPRIGHT', slider, 'BOTTOMRIGHT', -2, -4) -- - local editbox = CreateFrame('EditBox', nil, frame) + local editbox = CreateFrame('EditBox', nil, slider) editbox:SetAutoFocus(false) editbox:SetPoint('LEFT', slider, 'RIGHT', 5, 0) editbox:SetHeight(15) diff --git a/info.lua b/info.lua index 8cfbd9e..d4c06f5 100644 --- a/info.lua +++ b/info.lua @@ -219,13 +219,11 @@ function public.set_shopping_tooltip(slot) end end -function public.tooltip_match(patterns, tooltip) - return Aux.util.all(patterns, function(pattern) - return Aux.util.any(tooltip, function(line) - local left_match = line[1].text and strfind(strupper(line[1].text), strupper(pattern), 1, true) - local right_match = line[2].text and strfind(strupper(line[2].text), strupper(pattern), 1, true) - return left_match or right_match - end) +function public.tooltip_match(pattern, tooltip) + return Aux.util.any(tooltip, function(line) + local left_match = line[1].text and strupper(line[1].text) == strupper(pattern) + local right_match = line[2].text and strupper(line[2].text) == strupper(pattern) + return left_match or right_match end) end @@ -299,4 +297,4 @@ function public.item(item_id, suffix_id, unique_id, enchant_id) subclass = subclass, max_stack = max_stack, } -end +end \ No newline at end of file diff --git a/post_frame.lua b/post_frame.lua index 3967c76..8bca3af 100644 --- a/post_frame.lua +++ b/post_frame.lua @@ -186,6 +186,13 @@ function public.on_load() slider.editbox:SetScript('OnEditFocusLost', function() this:HighlightText(0, 0) end) + slider.editbox:SetScript('OnTabPressed', function() + if IsShiftKeyDown() then + private.buyout_price:SetFocus() + else + private.stack_count_slider.editbox:SetFocus() + end + end) slider.editbox:SetWidth(50) slider.editbox:SetNumeric(true) slider.editbox:SetMaxLetters(3) @@ -221,6 +228,13 @@ function public.on_load() slider.editbox:SetScript('OnEditFocusLost', function() this:HighlightText(0, 0) end) + slider.editbox:SetScript('OnTabPressed', function() + if IsShiftKeyDown() then + private.stack_size_slider.editbox:SetFocus() + else + private.start_price:SetFocus() + end + end) slider.editbox:SetWidth(50) slider.editbox:SetNumeric(true) slider.label:SetText('Stack Count') @@ -283,8 +297,11 @@ function public.on_load() private.validate_parameters() end) editbox:SetScript('OnTabPressed', function() - private.buyout_price:SetFocus() - private.buyout_price:HighlightText() + if IsShiftKeyDown() then + private.stack_count_slider.editbox:SetFocus() + else + private.buyout_price:SetFocus() + end end) editbox:SetScript('OnEnterPressed', function() this:ClearFocus() @@ -317,8 +334,11 @@ function public.on_load() private.validate_parameters() end) editbox:SetScript('OnTabPressed', function() - private.start_price:SetFocus() - private.start_price:HighlightText() + if IsShiftKeyDown() then + private.start_price:SetFocus() + else + private.stack_size_slider.editbox:SetFocus() + end end) editbox:SetScript('OnEnterPressed', function() this:ClearFocus() @@ -424,22 +444,22 @@ end function private.select_auction() if not existing_auctions[selected_item.key].selected and getn(existing_auctions[selected_item.key]) > 0 then --- local cheapest_for_size = {} + local cheapest_for_size = {} local cheapest for _, auction_entry in ipairs(existing_auctions[selected_item.key]) do --- if not cheapest_for_size[auction_entry.stack_size] or cheapest_for_size[auction_entry.stack_size].unit_buyout_price >= auction_entry.unit_buyout_price then --- cheapest_for_size[auction_entry.stack_size] = auction_entry --- end + if not cheapest_for_size[auction_entry.stack_size] or cheapest_for_size[auction_entry.stack_size].unit_buyout_price >= auction_entry.unit_buyout_price then + cheapest_for_size[auction_entry.stack_size] = auction_entry + end if not cheapest or cheapest.unit_buyout_price > auction_entry.unit_buyout_price then cheapest = auction_entry end end --- local auction = cheapest_for_size[private.get_stack_size_slider_value()] or cheapest + local auction = cheapest_for_size[private.get_stack_size_slider_value()] or cheapest - existing_auctions[selected_item.key].selected = cheapest + existing_auctions[selected_item.key].selected = auction refresh = true end end @@ -460,7 +480,6 @@ function private.validate_parameters() end if Aux.money.from_string(private.buyout_price:GetText()) > 0 and Aux.money.from_string(private.start_price:GetText()) > Aux.money.from_string(private.buyout_price:GetText()) then --- AuxSellParametersBuyoutPriceErrorText:Show() return end @@ -480,16 +499,24 @@ function private.update_recommendation() AuxSellParametersItemCount:SetText() AuxSellParametersItemName:SetText() - private.start_price:SetText(Aux.money.to_string(0)) - private.buyout_price:SetText(Aux.money.to_string(0)) - - private.stack_size_slider:SetMinMaxValues(0, 0) - private.stack_size_slider.editbox:SetNumber(0) - private.stack_count_slider:SetMinMaxValues(0, 0) - private.stack_count_slider.editbox:SetNumber(0) - - private.deposit:SetText('Deposit: '..Aux.money.to_string(0)) + private.start_price:Hide() + private.buyout_price:Hide() + private.stack_size_slider:Hide() + private.stack_count_slider:Hide() + private.deposit:Hide() + private.duration_dropdown:Hide() + private.pricing_model_dropdown:Hide() + private.hide_checkbox:Hide() else + private.start_price:Show() + private.buyout_price:Show() + private.stack_size_slider:Show() + private.stack_count_slider:Show() + private.deposit:Show() + private.duration_dropdown:Show() + private.pricing_model_dropdown:Show() + private.hide_checkbox:Show() + AuxSellParametersItemIconTexture:SetTexture(selected_item.texture) AuxSellParametersItemName:SetText(selected_item.name) local color = ITEM_QUALITY_COLORS[selected_item.quality] @@ -566,6 +593,14 @@ end function private.set_item(item) +-- ClearCursor() -- TODO +-- PickupContainerItem(slot.bag, slot.bag_slot) +-- ClickAuctionSellItemButton() +-- auction_sell_item = Aux.info.auction_sell_item() +-- ClearCursor() +-- ClickAuctionSellItemButton() +-- ClearCursor() + PlaySound('igMainMenuOptionCheckBoxOn') Aux.scan.abort(function() @@ -615,81 +650,57 @@ function private.update_inventory_records() local auction_candidate_map = {} - local function process_inventory(inventory_iterator, k) + local inventory_iterator = Aux.util.inventory_iterator() + while true do local slot = inventory_iterator() - if not slot then - return k() + break end local item_info = Aux.info.container_item(slot.bag, slot.bag_slot) - if item_info then + local charge_class = item_info.charges or 0 - return Aux.control.on_next_update(function() + if Aux.static.item_info(item_info.item_id) + and not Aux.info.tooltip_match('soulbound', item_info.tooltip) + and not Aux.info.tooltip_match('conjured item', item_info.tooltip) + and not item_info.lootable + then + if not auction_candidate_map[item_info.item_key] then - local charge_class = item_info.charges or 0 + auction_candidate_map[item_info.item_key] = { + item_id = item_info.item_id, + suffix_id = item_info.suffix_id, --- local auction_sell_item --- --- Aux.util.without_errors(function() --- Aux.util.without_sound(function() --- --- ClearCursor() --- PickupContainerItem(slot.bag, slot.bag_slot) --- ClickAuctionSellItemButton() --- auction_sell_item = Aux.info.auction_sell_item() --- ClearCursor() --- ClickAuctionSellItemButton() --- ClearCursor() --- --- end) --- end) + key = item_info.item_key, + hyperlink = item_info.hyperlink, - if Aux.static.item_info(item_info.item_id) then --- if auction_sell_item then - if not auction_candidate_map[item_info.item_key] then - - auction_candidate_map[item_info.item_key] = { - item_id = item_info.item_id, - suffix_id = item_info.suffix_id, - - key = item_info.item_key, - hyperlink = item_info.hyperlink, - - name = item_info.name, - texture = item_info.texture, - quality = item_info.quality, - class = item_info.type, - subclass = item_info.subtype, - unit_vendor_price = 0, - charges = item_info.charges, - aux_quantity = item_info.charges or item_info.count, - max_stack = item_info.max_stack, - availability = { [charge_class]=item_info.count }, - } - else - local candidate = auction_candidate_map[item_info.item_key] - 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) - end + name = item_info.name, + texture = item_info.texture, + quality = item_info.quality, + class = item_info.type, + subclass = item_info.subtype, + unit_vendor_price = 0, + charges = item_info.charges, + aux_quantity = item_info.charges or item_info.count, + max_stack = item_info.max_stack, + availability = { [charge_class]=item_info.count }, + } + else + local candidate = auction_candidate_map[item_info.item_key] + 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) end - - return process_inventory(inventory_iterator, k) - end) + end end - - return process_inventory(inventory_iterator, k) end - process_inventory(Aux.util.inventory_iterator(), function() - inventory_records = {} - for _, auction_candidate in pairs(auction_candidate_map) do - tinsert(inventory_records, auction_candidate) - end - sort(inventory_records, function(a, b) return a.name < b.name end) - refresh = true - end) + inventory_records = {} + for _, auction_candidate in pairs(auction_candidate_map) do + tinsert(inventory_records, auction_candidate) + end + sort(inventory_records, function(a, b) return a.name < b.name end) + refresh = true end function private.refresh_entries() diff --git a/static.lua b/static.lua index 681563b..a34b6c5 100644 --- a/static.lua +++ b/static.lua @@ -79,7 +79,7 @@ function public.find_auctionable_items() -- requires a full wdb item cache local name, _, quality = GetItemInfo('item:'..j) if name then local tooltip = Aux.info.tooltip(function(tt) tt:SetHyperlink('item:'..j) end) - if not Aux.info.tooltip_match({'binds when picked up'}, tooltip) and not Aux.info.tooltip_match({'quest item'}, tooltip) and not quality == 6 then + if not Aux.info.tooltip_match('binds when picked up', tooltip) and not Aux.info.tooltip_match('quest item', tooltip) and not quality == 6 then aux_auctionable_items[j] = true end end