Module:Items

From Power of Ten Wiki
Jump to navigation Jump to search

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

local p = { }

local util = require("Module:Util")
local items = mw.loadData("Module:Items/List")
local orderedItems = util.spairs(items, function(t,a,b) return t[a].name < t[b].name end)

local errorMsg = "'''Nombre de habilidad no válida. Consulta [[Módulo:Items]] para más información.'''"

function p.isValid (frame)
	
	local item = p.getItem(frame)

	return item ~= nil and "true" or "false"
end

function p.validFlashItem (mon, s)

	local item = getItem(s)
	
	local hasType = sharesType(mon["type"], item.typeRequirements)
	local hasProperty = sharesProperty(mon.itemProperties, item.propertyRequirements)
	
	return hasType and hasProperty
end

function sharesType (monType, requirements)
	
	if tablelength(requirements) > 0 then

		for _, t in pairs(requirements) do
			if string.lower(monType) == string.lower(t) then
				return true
			end
		end
		return false
	end
	return true
end

function sharesProperty (properties, requirements)

	if tablelength(requirements) > 0 then
		
		for _, required in pairs(requirements) do
			for _, property in pairs(properties) do
				if required == property then
					return true	
				end
			end
		end
		return false
	end
	return true
end

function tablelength(T)
  local count = 0
  for _ in pairs(T) do count = count + 1 end
  return count
end


function getItem (item)
	
	for k, v in pairs(items) do
		if v["name"] == item or k == item then
			return v
		end
	end
end

function p.getItem (frame)
	local item = frame.args[1] or frame.args["item"]
	
	for k, v in pairs(items) do
		if v["name"] == item or k == item then
			return v
		end
	end
end

function p.getItemID (frame)
	local item = frame.args[1] or frame.args["item"]
	
	for k, v in pairs(items) do
		if v["name"] == item or k == item then
			return k
		end
	end
end

function p.getItemParamOrDefault (frame, param, valueIfNil)
	local item = p.getItem(frame)
	if item == nil then
		return errorMsg
	end

	return item[param] or valueIfNil
end

function p.getName (frame)
	return p.getItemParamOrDefault(frame, "name", "???")
end

function p.getDescription (frame)
	return p.getItemParamOrDefault(frame, "description", "N/A")
end

function p.getQuantity (frame)
	return p.getItemParamOrDefault(frame, "quantity", "N/A")
end

function lengthOf (t)
	local count = 0
	for k,v in pairs(t) do count = count + 1 end
	return count
end

function p.getAllItemsOfType (f)
	
	local t = f.args[1] or f.args["type"]
	
	local wikitext = '{{ItemsList|Start|type=false}}\n'
    
	for k, v in orderedItems do
		if v["type"] == t then
			wikitext = wikitext .. '{{ItemsList|'.. v.name ..'|type=false}}\n'
		end
	end
	
	wikitext = wikitext .. '{{ItemsList|End}}'

	return f:preprocess(wikitext)
end

function p.getAllItems (f)
	
	local wikitext = '{{ItemsList|Start}}\n'
    
	for k, v in orderedItems do
		wikitext = wikitext .. '{{ItemsList|'.. v.name ..'}}\n'
	end
	
	wikitext = wikitext .. '{{ItemsList|End}}'
	--return wikitext
	return f:preprocess(wikitext)
end

return p