Module:Weapons

From Power of Ten Wiki
Jump to navigation Jump to search

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

local p = { }

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

local errorMsg = "'''Invalid weapon name. Please check [[Module:Weapons/List]] for a list of available weapons.'''"

function p.isValid (frame)
	
	local weapon = p.getWeapon(frame)

	return weapon ~= nil and "true" or "false"
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 getWeapon (weapon)
	
	for k, v in pairs(weapons) do
		if v["name"] == weapon or k == weapon then
			return v
		end
	end
end

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

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

function p.getWeaponParamOrDefault (frame, param, valueIfNil)
	local weapon = p.getWeapon(frame)
	if weapon == nil then
		return errorMsg
	end

	return weapon[param] or valueIfNil
end

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

function p.getType (frame)
	return p.getWeaponParamOrDefault(frame, "type", "N/D")
end

function p.getDps (frame)
	return p.getWeaponParamOrDefault(frame, "dps", "N/D")
end

function p.getAmmo (frame)
	return p.getWeaponParamOrDefault(frame, "ammo", "N/D")
end

function p.getSps (frame)
	return p.getWeaponParamOrDefault(frame, "sps", "N/D")
end

function p.getEffect (frame)
	return p.getWeaponParamOrDefault(frame, "effect", "---")
end

function p.getDescription (frame)
	return p.getWeaponParamOrDefault(frame, "description", "???")
end

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

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

	return f:preprocess(wikitext)
end

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

return p