summaryrefslogtreecommitdiff
path: root/Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-11-15 11:54:17 +0800
committerchai <chaifix@163.com>2021-11-15 11:54:17 +0800
commit30f2f46474bf4eda5f10d4c64a07cde01d469f66 (patch)
tree6ff2ed3262037b3c9bae2d2b9059a1d65773f31c /Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua
parent4c36bed53fe63ae6056730b3ecad2573f03d88f8 (diff)
*rename DefaultContent -> BuiltIn
Diffstat (limited to 'Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua')
-rw-r--r--Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua317
1 files changed, 0 insertions, 317 deletions
diff --git a/Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua b/Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua
deleted file mode 100644
index 454bab4..0000000
--- a/Data/DefaultContent/Libraries/addons/addons/GearSwap/export.lua
+++ /dev/null
@@ -1,317 +0,0 @@
---Copyright (c) 2013~2016, Byrthnoth
---All rights reserved.
-
---Redistribution and use in source and binary forms, with or without
---modification, are permitted provided that the following conditions are met:
-
--- * Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- * Redistributions in binary form must reproduce the above copyright
--- notice, this list of conditions and the following disclaimer in the
--- documentation and/or other materials provided with the distribution.
--- * Neither the name of <addon name> nor the
--- names of its contributors may be used to endorse or promote products
--- derived from this software without specific prior written permission.
-
---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
---ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
---WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
---DISCLAIMED. IN NO EVENT SHALL <your name> BE LIABLE FOR ANY
---DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
---(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
---LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
---ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
---(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-function export_set(options)
- local item_list = T{}
- local targinv,all_items,xml,all_sets,use_job_in_filename,use_subjob_in_filename,overwrite_existing,named_file
- if #options > 0 then
- for _,v in ipairs(options) do
- if S{'inventory','inv','i'}:contains(v:lower()) then
- targinv = true
- elseif v:lower() == 'all' then
- all_items = true
- elseif v:lower() == 'wearable' then
- wearable = true
- elseif S{'xml'}:contains(v:lower()) then
- xml = true
- elseif S{'sets','set','s'}:contains(v:lower()) then
- all_sets = true
- if not user_env or not user_env.sets then
- msg.addon_msg(123,'Cannot export the sets table of the current file because there is no file loaded.')
- return
- end
- elseif v:lower() == 'mainjob' then
- use_job_in_filename = true
- elseif v:lower() == 'mainsubjob' then
- use_subjob_in_filename = true
- elseif v:lower() == 'overwrite' then
- overwrite_existing = true
- elseif S{'filename','file','f'}:contains(v:lower()) then
- named_file = true
- else
- if named_file then
- filename = v
- end
- end
- end
- end
-
- local buildmsg = 'Exporting '
- if all_items then
- buildmsg = buildmsg..'all your items'
- elseif wearable then
- buildmsg = buildmsg..'all your items in inventory and wardrobes'
- elseif targinv then
- buildmsg = buildmsg..'your current inventory'
- elseif all_sets then
- buildmsg = buildmsg..'your current sets table'
- else
- buildmsg = buildmsg..'your currently equipped gear'
- end
-
- if xml then
- buildmsg = buildmsg..' as an xml file.'
- else
- buildmsg = buildmsg..' as a lua file.'
- end
-
- if use_job_in_filename then
- buildmsg = buildmsg..' (Naming format: Character_JOB)'
- elseif use_subjob_in_filename then
- buildmsg = buildmsg..' (Naming format: Character_JOB_SUB)'
- elseif named_file then
- buildmsg = buildmsg..' (Named: Character_'..filename..')'
- end
-
- if overwrite_existing then
- buildmsg = buildmsg..' Will overwrite existing files with same name.'
- end
-
- msg.addon_msg(123,buildmsg)
-
- if not windower.dir_exists(windower.addon_path..'data/export') then
- windower.create_dir(windower.addon_path..'data/export')
- end
-
- if all_items then
- for i = 0, #res.bags do
- item_list:extend(get_item_list(items[res.bags[i].english:gsub(' ', ''):lower()]))
- end
- elseif wearable then
- for _, v in pairs(equippable_item_bags) do
- item_list:extend(get_item_list(items[v.english:gsub(' ', ''):lower()]))
- end
- elseif targinv then
- item_list:extend(get_item_list(items.inventory))
- elseif all_sets then
- -- Iterate through user_env.sets and find all the gear.
- item_list,exported = unpack_names({},'L1',user_env.sets,{},{empty=true})
- else
- -- Default to loading the currently worn gear.
-
- for i = 1,16 do -- ipairs will be used on item_list
- if not item_list[i] then
- item_list[i] = {}
- item_list[i].name = empty
- item_list[i].slot = toslotname(i-1)
- end
- end
-
- for slot_name,gs_item_tab in pairs(items.equipment) do
- if gs_item_tab.slot ~= empty then
- local item_tab
- local bag_name = to_windower_bag_api(res.bags[gs_item_tab.bag_id].en)
- if res.items[items[bag_name][gs_item_tab.slot].id] then
- item_tab = items[bag_name][gs_item_tab.slot]
- item_list[slot_map[slot_name]+1] = {
- name = res.items[item_tab.id][language],
- slot = slot_name
- }
- if not xml then
- local augments = extdata.decode(item_tab).augments or {}
- local aug_str = ''
- for aug_ind,augment in pairs(augments) do
- if augment ~= 'none' then aug_str = aug_str.."'"..augment:gsub("'","\\'").."'," end
- end
- if string.len(aug_str) > 0 then
- item_list[slot_map[slot_name]+1].augments = aug_str
- end
- end
- else
- msg.addon_msg(123,'You are wearing an item that is not in the resources yet.')
- end
- end
- end
- end
-
- if #item_list == 0 then
- msg.addon_msg(123,'There is nothing to export.')
- return
- else
- local not_empty
- for i,v in pairs(item_list) do
- if v.name ~= empty then
- not_empty = true
- break
- end
- end
- if not not_empty then
- msg.addon_msg(123,'There is nothing to export.')
- return
- end
- end
-
-
- if not windower.dir_exists(windower.addon_path..'data/export') then
- windower.create_dir(windower.addon_path..'data/export')
- end
-
- local path = windower.addon_path..'data/export/'..player.name
-
- if use_job_in_filename then
- path = path..'_'..windower.ffxi.get_player().main_job
- elseif use_subjob_in_filename then
- path = path..'_'..windower.ffxi.get_player().main_job..'_'..windower.ffxi.get_player().sub_job
- elseif named_file then
- path = path..'_'..filename
- else
- path = path..os.date(' %Y-%m-%d %H-%M-%S')
- end
- if xml then
- -- Export in .xml
- if (not overwrite_existing) and windower.file_exists(path..'.xml') then
- path = path..' '..os.clock()
- end
- local f = io.open(path..'.xml','w+')
- f:write('<spellcast>\n <sets>\n <group name="exported">\n <set name="exported">\n')
- for i,v in ipairs(item_list) do
- if v.name ~= empty then
- local slot = xmlify(tostring(v.slot))
- local name = xmlify(tostring(v.name))
- f:write(' <'..slot..'>'..name..'</'..slot..'>\n')
- end
- end
- f:write(' </set>\n </group>\n </sets>\n</spellcast>')
- f:close()
- else
- -- Default to exporting in .lua
- if (not overwrite_existing) and windower.file_exists(path..'.lua') then
- path = path..' '..os.clock()
- end
- local f = io.open(path..'.lua','w+')
- f:write('sets.exported={\n')
- for i,v in ipairs(item_list) do
- if v.name ~= empty then
- if v.augments then
- --Advanced set table
- f:write(' '..v.slot..'={ name="'..v.name..'", augments={'..v.augments..'}},\n')
- else
- f:write(' '..v.slot..'="'..v.name..'",\n')
- end
- end
- end
- f:write('}')
- f:close()
- end
-end
-
-function unpack_names(ret_tab,up,tab_level,unpacked_table,exported)
- for i,v in pairs(tab_level) do
- local flag,alt
- if type(v)=='table' and i ~= 'augments' and not ret_tab[tostring(tab_level[i])] then
- ret_tab[tostring(tab_level[i])] = true
- unpacked_table,exported = unpack_names(ret_tab,i,v,unpacked_table,exported)
- elseif i=='name' and type(v) == 'string' then
- alt = up
- flag = true
- elseif type(v) == 'string' and v~='augment' and v~= 'augments' and v~= 'priority' then
- alt = i
- flag = true
- end
- if flag then
- if not exported[v:lower()] then
- unpacked_table[#unpacked_table+1] = {}
- local tempname,tempslot = unlogify_unpacked_name(v)
- unpacked_table[#unpacked_table].name = tempname
- unpacked_table[#unpacked_table].slot = tempslot or alt
- if tab_level.augments then
- local aug_str = ''
- for aug_ind,augment in pairs(tab_level.augments) do
- if augment ~= 'none' then aug_str = aug_str.."'"..augment:gsub("'","\\'").."'," end
- end
- if aug_str ~= '' then unpacked_table[#unpacked_table].augments = aug_str end
- end
- if tab_level.augment then
- local aug_str = unpacked_table[#unpacked_table].augments or ''
- if tab_level.augment ~= 'none' then aug_str = aug_str.."'"..augment:gsub("'","\\'").."'," end
- if aug_str ~= '' then unpacked_table[#unpacked_table].augments = aug_str end
- end
- exported[tempname:lower()] = true
- exported[v:lower()] = true
- end
- end
- end
- return unpacked_table,exported
-end
-
-function unlogify_unpacked_name(name)
- local slot
- name = name:lower()
- for i,v in pairs(res.items) do
- if type(v) == 'table' then
- if v[language..'_log']:lower() == name then
- name = v[language]
- local potslots = v.slots
- if potslots then potslots = to_windower_api(res.slots[potslots:it()()].english) end
- slot = potslots or 'item'
- break
- elseif v[language]:lower() == name then
- name = v[language]
- local potslots = v.slots
- if potslots then potslots = to_windower_api(res.slots[potslots:it()()].english) end
- slot = potslots or 'item'
- break
- end
- end
- end
- return name,slot
-end
-
-function xmlify(phrase)
- if tonumber(phrase:sub(1,1)) then phrase = 'NUM'..phrase end
- return phrase --:gsub('"','&quot;'):gsub("'","&apos;"):gsub('<','&lt;'):gsub('>','&gt;'):gsub('&&','&amp;')
-end
-
-function get_item_list(bag)
- local items_in_bag = {}
- -- Load the entire inventory
- for _,v in pairs(bag) do
- if type(v) == 'table' and v.id ~= 0 then
- if res.items[v.id] then
- items_in_bag[#items_in_bag+1] = {}
- items_in_bag[#items_in_bag].name = res.items[v.id][language]
- local potslots,slot = copy_entry(res.items[v.id].slots)
- if potslots then
- slot = res.slots[potslots:it()()].english:gsub(' ','_'):lower() -- Multi-lingual support requires that we add more languages to slots.lua
- end
- items_in_bag[#items_in_bag].slot = slot or 'item'
- if not xml then
- local augments = extdata.decode(v).augments or {}
- local aug_str = ''
- for aug_ind,augment in pairs(augments) do
- if augment ~= 'none' then aug_str = aug_str.."'"..augment:gsub("'","\\'").."'," end
- end
- if string.len(aug_str) > 0 then
- items_in_bag[#items_in_bag].augments = aug_str
- end
- end
- else
- msg.addon_msg(123,'You possess an item that is not in the resources yet.')
- end
- end
- end
- return items_in_bag
-end