Home
Random
Log in
Settings
About the Deadlock Wiki
Search
Editing
Module:ItemData/nav
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local items_data = mw.loadJsonData("Data:ItemData.json") local lang_module = require('Module:Lang') local generic_module = require('Module:GenericData') local util_module = require('Module:Utilities') --With debug_mode on, it outputs unprocessed wikitext --With debug_mode off/unspecified, it processes the wikitext local function process_debug_mode(wikitext, debug_mode) if debug_mode == 'true' then return wikitext elseif debug_mode == 'false' or debug_mode == nil then return mw.getCurrentFrame():preprocess(wikitext) else return "debug_mode must be 'true' or 'false'" end end --Writes list of items of a certain slot within the min and max soul bounds -- Each item is wrapped and separated. For example of wrapping/separator, see -- get_item_nav_bulletpoints. 'sep' should not be combined with 'right_wrap', -- as the trailing separator should also be removed from the string local function write_wrapped_item_list(slot, min_souls, max_souls, left_wrap, right_wrap, sep) if slot ~= 'Weapon' and slot ~= 'Armor' and slot ~= 'Tech' then return 'slot must be Weapon, Armor (Vitality), or Tech (Spirit)' end local min_souls = tonumber(min_souls) local max_souls = tonumber(max_souls) if min_souls == nil or max_souls == nil then return 'Min/Max souls must be numerical' end --Retrieve all items that fit the bounds local items = {} for item_key, item_data in pairs(items_data) do --future proofing; Disabled will be renamed to IsDisabled soon if item_data['Disabled'] == nil and item_data['IsDisabled'] ~= nil then return "REMINDER: 'Disabled' was renamed to 'IsDisabled'" end local this_cost = tonumber(item_data["Cost"]) local this_slot = item_data["Slot"] if item_data["Name"] ~= nil and item_data["Disabled"] == false and this_cost ~= nil and this_slot ~= nil then if slot == this_slot and this_cost>=min_souls and this_cost<max_souls then table.insert(items, lang_module.get_string(item_key)) end end end --Order list alphabetically table.sort(items) --O(nlogn) --Add each item to output -- Each item is surrounded by left and right wrap, and separated by sep local ret = '' for index, item_name in ipairs(items) do ret = ret .. left_wrap .. item_name .. right_wrap .. sep end --Remove the last separator thats trailing after the last item ret = string.sub(ret, 1, -(string.len(sep))-1) return ret end -- for [[Template:Item Navbox]] function p.get_item_nav_bulletpoints(slot, min_souls, max_souls, debug_mode) -- If called internally (direct Lua call), args will be passed directly. -- If called from wikitext, `slot` will be the `frame` object, and we get args from `frame.args`. -- Handle the case where it's called via #invoke (i.e., from wikitext) if type(slot) == "table" and slot.args then local frame = slot slot = frame.args[1] min_souls = frame.args[2] max_souls = frame.args[3] debug_mode = frame.args["debug_mode"] end local left_wrap = '{{ItemIcon|' local right_wrap = '}}' local sep = ' • ' local item_list = write_wrapped_item_list(slot, min_souls, max_souls, left_wrap, right_wrap, sep) return process_debug_mode(item_list, debug_mode) end -- for [[Template:Infobox ShopItems]] function p.get_item_nav_cards(slot, min_souls, max_souls, debug_mode) -- If called internally (direct Lua call), args will be passed directly. -- If called from wikitext, `slot` will be the `frame` object, and we get args from `frame.args`. -- Handle the case where it's called via #invoke (i.e., from wikitext) if type(slot) == "table" and slot.args then local frame = slot slot = frame.args[1] min_souls = frame.args[2] max_souls = frame.args[3] debug_mode = frame.args["debug_mode"] end local left_wrap = '{{ItemBox|item_name=' local right_wrap = '}}' local sep = ' ' local item_list = write_wrapped_item_list(slot, min_souls, max_souls, left_wrap, right_wrap, sep) return process_debug_mode(item_list, debug_mode) end function p.write_item_slot_subgroup(frame) local slot = frame.args[1] local type = frame.args[2] local debug_mode = frame.args['debug_mode'] if slot == nil then return "'slot' parameter is required" end -- Define base args local template_title = "Navbox subgroup" local template_args = { ["groupstyle"] = "background-color:" .. util_module.get_slot_color(slot) .. ";width:10%;min-width:70px;border-radius: 8px 0 0 8px", ["grouppadding"] = "5px", ["listpadding"] = "0 0.25rem", } local soul_style = "font-size: 12px; text-shadow: 1px 1px rgba(0, 0, 0, 0.3);" local prices = generic_module.get_item_price_per_tier() for i, souls in ipairs(prices) do --Determine lower bound for soul min_souls = souls --Skip 0 to i1 as no items cost less than 500 if min_souls ~= 0 then -- Determine upper bound max_souls = prices[i+1] if max_souls == nil then max_souls = min_souls * 10 --essentially have no upper bound end --Create the subgroup template_args["group" .. (i-1)] = frame:expandTemplate{title="Souls", args={[1] = min_souls, ["Shadow"] = soul_style}} local list if type=='get_item_nav_cards' then list = p.get_item_nav_cards(slot, min_souls, max_souls, debug_mode) elseif type=='get_item_nav_bulletpoints' then list = p.get_item_nav_bulletpoints(slot, min_souls, max_souls, debug_mode) else return "'type' should be get_item_nav_cards or get_item_nav_bulletpoints" end template_args["list" .. (i-1)] = list end end return frame:expandTemplate{title=template_title, args=template_args} end return p
Summary:
Please note that all contributions to Deadlock Wiki are considered to be released under the Creative Commons Attribution-NonCommercial-ShareAlike (see
Deadlock:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Templates used on this page:
Data:Dictionary
(
edit
)
Data:GenericData.json
(
edit
)
Data:ItemData.json
(
edit
)
Data:LangCodes.json
(
edit
)
Data:Lang en.json
(
edit
)
Template:Icon/Black
(
edit
)
Template:ItemBox
(
edit
)
Template:ItemIcon
(
edit
)
Template:Navbox
(
edit
)
Template:Navbox subgroup
(
edit
)
Template:Souls
(
edit
)
Module:Dictionary
(
edit
)
Module:GenericData
(
edit
)
Module:ItemData
(
edit
)
Module:ItemData/nav
(
edit
)
Module:ItemData/nav/doc
(
edit
)
Module:Lang
(
edit
)
Module:Utilities
(
edit
)