Module:ItemTables: Difference between revisions

From Deadlock Wiki
Jump to navigation Jump to search
Sylphoid (talk | contribs)
change names, add better comments,
Sylphoid (talk | contribs)
add fire rate and stamina, include inclusions of different stat names, cleanup. WORKS NOW BUT ALSO BREAKS, invocations need to be reversed from internal to friendly, to friendly to internal
Line 3: Line 3:
local get_cost = require("Module:ItemData")._get_cost
local get_cost = require("Module:ItemData")._get_cost
local get_type = require("Module:ItemData")._get_type
local get_type = require("Module:ItemData")._get_type
-- returns the table of a specific item
function get_json_item(name)
for i,v in pairs(data) do
if (v["Name"] == name) then
return v
end
end
return nil
end


-- Adds commas delimiter to the thousands place
-- Adds commas delimiter to the thousands place
Line 45: Line 35:




local link_patterns = {}
-- local link_patterns = {}
link_patterns["BonusClipSizePercent"] = { "[Aa]mmo" }
-- link_patterns["BonusClipSizePercent"] = { "[Aa]mmo" }
link_patterns["CloseRangeBonusWeaponPower"] = { "[Cc]lose [Ww]eapon [Dd]amage" }
-- link_patterns["CloseRangeBonusWeaponPower"] = { "[Cc]lose [Ww]eapon [Dd]amage" }
link_patterns["BaseAttackDamagePercent"] = { "[Ww]eapon [Dd]amage" }
-- link_patterns["BaseAttackDamagePercent"] = { "[Ww]eapon [Dd]amage" }
link_patterns["BulletLifestealPercent"] = { "[Bb]ullet [Ll]ifesteal" }
-- link_patterns["BulletLifestealPercent"] = { "[Bb]ullet [Ll]ifesteal" }
link_patterns["BonusHealthRegen"] = { "[Hh]ealth [Rr]egen" }
-- link_patterns["BonusHealthRegen"] = { "[Hh]ealth [Rr]egen" }
link_patterns["BonusHealth"] = { "[Hh]ealth" }
-- link_patterns["BonusHealth"] = { "[Hh]ealth" }
link_patterns["BonusFireRate"] = { "[Ff]ire [Rr]ate" }
-- link_patterns["BonusFireRate"] = { "[Ff]ire [Rr]ate" }
 
--
function FriendlyNames(desc)
-- function FriendlyNames(desc)
for link, patterns in pairs(link_patterns) do
-- for link, patterns in pairs(link_patterns) do
for i, v in ipairs(patterns) do
-- for i, v in ipairs(patterns) do
     local a = string.find(desc, v)
--     local a = string.find(desc, v)
if a then desc = link break
-- if a then desc = link break
     end
--     end
     end
--     end
end
-- end
return desc
-- return desc
end
-- end


local internal_to_friendly = {}
local internal_to_friendly = {}
Line 70: Line 60:
internal_to_friendly["health"] = { "BonusHealth" }
internal_to_friendly["health"] = { "BonusHealth" }
internal_to_friendly["health regen"] = { "BonusHealthRegen" }
internal_to_friendly["health regen"] = { "BonusHealthRegen" }
internal_to_friendly["fire rate"] = { "BonusFireRate" }
internal_to_friendly["stamina"] = { "Stamina" }


function amicableNames(desc)
function amicableNames(desc)
local keysTable = {}
desc = string.lower(desc or "")
desc = string.lower(desc or "")
for link, patterns in pairs(internal_to_friendly) do
for link, patterns in pairs(internal_to_friendly) do
for _, v in pairs(patterns) do
 
desc = v --TEST THIS
if (desc == link) then keysTable = patterns end
end
 
end
end
return desc
return keysTable
end
end


Line 84: Line 77:
local TableValues = {}
local TableValues = {}
local requirements = {}
local requirements = {}
local listofKeysTable = {}
local listofItems = ""
local listofItems = ""
local property = frame.args[1] or mw.title.getCurrentTitle().text
local property = frame.args[1] or mw.title.getCurrentTitle().text
local copyVar = property
local copyVar = property
property = FriendlyNames(property) -- need to switch this around from value to key, to key to values
listofKeysTable = amicableNames(property) -- need to switch this around from value to key, to key to values
-- local item = get_json_item(item_name)
-- if(item == nil) then return "Item Not Found what" end
local createTable = mw.html.create('table')
local createTable = mw.html.create('table')
Line 113: Line 105:
}
}
}
}
for _, t in pairs(listofKeysTable) do
-- filter out items that: don't have the property, don't have names (have 'null' names), and aren't disabled --//and itemName["Disabled"] == nil  
-- filter out items that: don't have the property, don't have names (have 'null' names), and aren't disabled --//and itemName["Disabled"] == nil  
if(itemName[property] ~= nil and itemName["Name"] ~= nil) then --  and itemName["Disabled"] == false --// the data field is not setup to filter this yet
if(itemName[t] ~= nil and itemName["Name"] ~= nil) then --  and itemName["Disabled"] == false --// the data field is not setup to filter this yet
listofItems = listofItems .. itemName["Name"] .. "<br/>"
listofItems = listofItems .. itemName["Name"] .. "<br/>"
Line 123: Line 115:
:tag('td'):wikitext(get_cost(itemName["Name"])):done()
:tag('td'):wikitext(get_cost(itemName["Name"])):done()
:tag('td'):wikitext(get_type(itemName["Name"])):done()
:tag('td'):wikitext(get_type(itemName["Name"])):done()
:tag('td'):wikitext("+<b>" .. itemName[property].. "</b> " .. copyVar):done()
:tag('td'):wikitext("+<b>" .. itemName[t].. "</b> " .. copyVar):done()
table.insert(requirements, tableData)
table.insert(requirements, tableData)
-- TableValues = table.insert(TableValues, itemName["Name"]) -- i may want to make a table first, so it includes weapon and cost to make it sortable.
-- TableValues = table.insert(TableValues, itemName["Name"]) -- i may want to make a table first, so it includes weapon and cost to make it sortable.
end
end
end
end
end

Revision as of 05:57, 1 October 2024

Documentation for this module may be created at Module:ItemTables/doc

local p = {};
local data = mw.loadJsonData("Data:ItemData.json")
local get_cost = require("Module:ItemData")._get_cost
local get_type = require("Module:ItemData")._get_type

-- Adds commas delimiter to the thousands place
function Format(amount)
    local formatted = amount
    while true do
        formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2')
        if (k == 0) then
            break
        end
    end
    return formatted
end

--- Copies original table with its children as deep as possible. Does not handle metatables. (Copy is needed because Lua passes by reference, not value)
-- @function   Deepcopy
-- @param      {n-D table}
-- @return     {n-D table}
function Deepcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in next, orig, nil do
            copy[Deepcopy(orig_key)] = Deepcopy(orig_value)
        end
    else
        copy = orig
    end
    return copy
end


--	local link_patterns = {}
--	link_patterns["BonusClipSizePercent"] = { "[Aa]mmo" }
--	link_patterns["CloseRangeBonusWeaponPower"] = { "[Cc]lose [Ww]eapon [Dd]amage" }
--	link_patterns["BaseAttackDamagePercent"] = { "[Ww]eapon [Dd]amage" }
--	link_patterns["BulletLifestealPercent"] = { "[Bb]ullet [Ll]ifesteal" }
--	link_patterns["BonusHealthRegen"] = { "[Hh]ealth [Rr]egen" }
--	link_patterns["BonusHealth"] = { "[Hh]ealth" }
--	link_patterns["BonusFireRate"] = { "[Ff]ire [Rr]ate" }
--	
--	function FriendlyNames(desc)
--		for link, patterns in pairs(link_patterns) do
--			for i, v in ipairs(patterns) do
--	    		local a = string.find(desc, v)
--					if a then desc = link break
--	    		end
--	    	end
--		end
--		return desc
--	end

local internal_to_friendly = {}
internal_to_friendly["ammo"] = { "BonusClipSizePercent", "BonusClipSize" }
internal_to_friendly["weapon damage"] = { "BaseAttackDamagePercent" }
internal_to_friendly["health"] = { "BonusHealth" }
internal_to_friendly["health regen"] = { "BonusHealthRegen" }
internal_to_friendly["fire rate"] = { "BonusFireRate" }
internal_to_friendly["stamina"] = { "Stamina" }

function amicableNames(desc)
	local keysTable = {}
	desc = string.lower(desc or "")
	for link, patterns in pairs(internal_to_friendly) do

			if (desc == link) then keysTable = patterns end 

	end
	return keysTable
end

p.itemPropTable = function(frame)
	local TableValues = {}
	local requirements = {}
	local listofKeysTable = {}
	local listofItems = ""
	local property = frame.args[1] or mw.title.getCurrentTitle().text
	local copyVar = property
	listofKeysTable = amicableNames(property) -- need to switch this around from value to key, to key to values
	
	local createTable = mw.html.create('table')
			:addClass('wikitable sortable')
			:tag('caption'):wikitext("List of Items"):done()
			
	local createTableRow = mw.html.create('tr')
	createTableRow
		:tag('th'):wikitext('Name'):done()
		:tag('th'):wikitext('Cost'):done()
		:tag('th'):wikitext('Category'):done()
		:tag('th'):wikitext('Stat change'):done()
		
	createTable:node(createTableRow)
		
	-- query all items
	for internalName, itemName in pairs(data) do --itemName is the key. go through whole table. in this case itemName is the item table

		local display = frame:expandTemplate{
		title = 'ItemIcon',
		args = {
			itemName["Name"]
			}
		}
		for _, t in pairs(listofKeysTable) do
			-- filter out items that: don't have the property, don't have names (have 'null' names), and aren't disabled --//and itemName["Disabled"] == nil 
			if(itemName[t] ~= nil and itemName["Name"] ~= nil) then --  and itemName["Disabled"] == false --// the data field is not setup to filter this yet
				listofItems = listofItems .. itemName["Name"] .. "<br/>"
					
				local tableData = mw.html.create('tr')
				tableData
					:tag('td'):wikitext(display):done()
					:tag('td'):wikitext(get_cost(itemName["Name"])):done()
					:tag('td'):wikitext(get_type(itemName["Name"])):done()
					:tag('td'):wikitext("+<b>" .. itemName[t].. "</b> " .. copyVar):done()
					
				table.insert(requirements, tableData)
				--	TableValues = table.insert(TableValues, itemName["Name"]) -- i may want to make a table first, so it includes weapon and cost to make it sortable.
			end
		end
	end	
	
	for _, row in ipairs(requirements) do
		createTableRow:node(row)
	end
	--createTable:node(createTableRow)
	return tostring(createTable)
	--return listofItems -- this is just a string list, same thing as createTable. delete this when line when finished
	--return table.concat(TableValues, ", ")

end

return p