Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion addons/porter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,17 @@ porter [<slip> [<page>]] [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.
Expand Down
79 changes: 26 additions & 53 deletions addons/porter/porter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -137,21 +89,42 @@ 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
end
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

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!')

Expand Down Expand Up @@ -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)
end)