Browse Source

findall: Search for stackables

pull/5/head
Enrico Horn 4 years ago
parent
commit
e4a3b88a74
  1. 1
      README.md
  2. 30
      findall.lua

1
README.md

@ -28,6 +28,7 @@ findall [:<character1> [:...]] <query> [-e<filename>|--export=<filename>]
* `query` the word you are looking for. * `query` the word you are looking for.
* `-d` or `--duplicates` to list only items which are found in more than one container * `-d` or `--duplicates` to list only items which are found in more than one container
* `-e<filename>` or `--export=<filename>` exports the results to a csv file. The file will be created in the data folder. * `-e<filename>` or `--export=<filename>` exports the results to a csv file. The file will be created in the data folder.
* `-s` or `--stackables` to list only items which can stack
Looks for any item whose name (long or short) contains the specified value on the specified characters. Looks for any item whose name (long or short) contains the specified value on the specified characters.

30
findall.lua

@ -261,6 +261,7 @@ function print_help()
{ ' [<query>]', '- the word you are looking for.' }, { ' [<query>]', '- the word you are looking for.' },
{ ' [-d|--duplicates]', '- list only items which are found in more than one container.' }, { ' [-d|--duplicates]', '- list only items which are found in more than one container.' },
{ ' [-e<filename>|--export=<filename>]', '- exports the results to a csv file in the data folder.' }, { ' [-e<filename>|--export=<filename>]', '- exports the results to a csv file in the data folder.' },
{ ' [-s|--stackables]', '- list only items which can stack.' },
} }
local examples = { local examples = {
{ '/findall thaumas', '- Search for "thaumas" on all your characters.' }, { '/findall thaumas', '- Search for "thaumas" on all your characters.' },
@ -315,6 +316,7 @@ function determine_query_elements(searchparams)
local search_terms = {} local search_terms = {}
local export = nil local export = nil
local duplicates = false local duplicates = false
local stackables = false
for _, query_element in pairs(searchparams) do for _, query_element in pairs(searchparams) do
-- character specifiers must start with a '!' or a ':' -- character specifiers must start with a '!' or a ':'
@ -341,12 +343,14 @@ function determine_query_elements(searchparams)
end end
elseif string.match(query_element, '^--duplicates$') or string.match(query_element, '^-d$') then elseif string.match(query_element, '^--duplicates$') or string.match(query_element, '^-d$') then
duplicates = true duplicates = true
elseif string.match(query_element, '^--stackables') or string.match(query_element, '^-s$') then
stackables = true
else else
table.insert(search_terms, query_element) table.insert(search_terms, query_element)
end end
end end
return char_include, char_exclude, table.concat(search_terms,' '), export, duplicates return char_include, char_exclude, table.concat(search_terms,' '), export, duplicates, stackables
end end
@ -421,6 +425,25 @@ function filter_duplicates(search_result)
end end
function filter_stackables(search_result)
for char_name, storage_list in pairs(search_result) do
storage_list[KEY_ITEM_STORAGE_NAME] = nil
end
for char_name, storage_list in pairs(search_result) do
for storage_name, item_list in pairs(storage_list) do
for item_id, quantity in pairs(item_list) do
local item = AshitaCore:GetResourceManager():GetItemById(item_id);
if not item or item.StackSize <= 1 then
item_list[item_id] = nil
end
end
end
end
return search_result
end
function display_search_results(result, from_all_chars, terms, duplicates) function display_search_results(result, from_all_chars, terms, duplicates)
local terms_pattern = build_search_pattern(terms) local terms_pattern = build_search_pattern(terms)
@ -508,11 +531,14 @@ end
function handle_command(args) function handle_command(args)
local char_include, char_exclude, terms, export, duplicates = determine_query_elements(args) local char_include, char_exclude, terms, export, duplicates, stackables = determine_query_elements(args)
local result = search(char_include, char_exclude, terms) local result = search(char_include, char_exclude, terms)
if duplicates then if duplicates then
result = filter_duplicates(result) result = filter_duplicates(result)
end end
if stackables then
result = filter_stackables(result)
end
local all_chars = #char_include == 0 and #char_exclude == 0 local all_chars = #char_include == 0 and #char_exclude == 0
display_search_results(result, all_chars, terms, duplicates) display_search_results(result, all_chars, terms, duplicates)
if export ~=nil then if export ~=nil then

Loading…
Cancel
Save