diff --git a/addons/porter/README.md b/addons/porter/README.md index 4cab50a62..4efb5ce2a 100644 --- a/addons/porter/README.md +++ b/addons/porter/README.md @@ -14,10 +14,17 @@ porter [ []] [owned] * **_slip_:** the number of the slip you want to show. * **_page_:** the page of the slip you want to show. * **owned:** shows only the items you own. - +``` +porter find +``` +Shows storable items found in all inventory bags. ---- ##changelog## +### v1.20200419 +* **add**: New command, porter find. +* **change**: Adjusted resource handling. + ### v1.20130529 * **fix**: Fixed parameters validation. * **change**: Aligned to Windower's addon development guidelines. diff --git a/addons/porter/porter.lua b/addons/porter/porter.lua index 8481599a9..b10c2eae3 100644 --- a/addons/porter/porter.lua +++ b/addons/porter/porter.lua @@ -32,63 +32,15 @@ require 'chat' require 'logger' require 'sets' require 'strings' - +res = require 'resources' slips = require 'slips' - -_addon.name = 'porter' -_addon.version = '1.20130529' +_addon.name = 'porter' +_addon.version = '1.20200419' _addon.command = 'porter' _addon.author = 'Zohno' -item_names = T{} -resources = { - ['armor'] = '../../plugins/resources/items_armor.xml', - ['weapons'] = '../../plugins/resources/items_weapons.xml', - ['general'] = '../../plugins/resources/items_general.xml' -} - -function load_resources() - local slips_items_ids = T() - for _, slip in pairs(slips.items) do - slips_items_ids:extend(slip) - end - - slips_items_ids = S(slips_items_ids) - - for kind, resource_path in pairs(resources) do - resource = io.open(windower.addon_path..resource_path, 'r') - - if resource ~= nil then - while true do - local line = resource:read() - - if line == nil then - break - end - - local id, name = line:match('id="(%d+)".+>([^<]+)<') - - if id ~= nil then - id = tonumber(id, 10) - - if slips_items_ids:contains(id) then - item_names[id] = name:lower() - end - end - end - else - error(kind..' resource file not found') - end - - resource:close() - end -end - function show_slip(slip_number, slip_page, owned_only) - if item_names:length() == 0 then - load_resources() - end owned_only = owned_only or false @@ -137,7 +89,7 @@ function show_slip(slip_number, slip_page, owned_only) windower.add_to_chat( 55, ('slip '..printable_slip_number..'/page '..tostring(slip_page and slip_page or math.ceil(item_position / 16)):lpad('0', 2)..':'):color(259)..' '.. - item_names[item_id]:color(is_contained and 258 or 261) + res.items[item_id].name:color(is_contained and 258 or 261) ) end end @@ -145,6 +97,24 @@ function show_slip(slip_number, slip_page, owned_only) end end +function show_bags() + + local n = 0 + + for _, bag in ipairs(slips.default_storages) do + for _, item in ipairs(windower.ffxi.get_items(bag)) do + local slip_id = slips.get_slip_id_by_item_id(item.id) + + if slip_id then + n = n + 1 + windower.add_to_chat(207, 'slip %02d: %s %s':format(slips.get_slip_number_by_id(slip_id), bag, res.items[item.id].name:color(258))) + end + end + end + + windower.add_to_chat(207, 'Found %s storable items in all bags':format(n)) +end + windower.register_event('addon command',function (slip_number, slip_page, owned_only) if tonumber(slip_number) == nil then slip_page = nil @@ -152,6 +122,9 @@ windower.register_event('addon command',function (slip_number, slip_page, owned_ if slip_number == 'owned' then slip_number = nil owned_only = true + elseif slip_number == 'find' then + show_bags() + return elseif slip_number ~= nil then error('That\'s not a valid slip number, kupo!') @@ -181,4 +154,4 @@ windower.register_event('addon command',function (slip_number, slip_page, owned_ end show_slip(slip_number, slip_page, owned_only) -end) \ No newline at end of file +end)