Difference between revisions of "Module:WeaponData"

From Zero-K
Jump to navigation Jump to search
(First draft)
 
Line 2: Line 2:
 
local weapon = {}
 
local weapon = {}
 
local weaponData = mw.loadData('Module:WeaponData/data')
 
local weaponData = mw.loadData('Module:WeaponData/data')
 +
 +
local function getMiscStatsTable(weaponDefName)
 +
local wd = weaponData[weaponDefName]
 +
if not wd then return nil end
 +
if not wd.miscstats then return nil end
 +
 +
local tbl = {}
 +
for index, tag in ipairs(wd.miscstats) do
 +
tbl[tag] = true
 +
end
 +
return tbl
 +
end
  
 
function weapon.getData(frame)
 
function weapon.getData(frame)
Line 18: Line 30:
 
return [[{{User:Histidine/Autoinfobox zkweapon
 
return [[{{User:Histidine/Autoinfobox zkweapon
 
|defname=]]..weaponDefName..[[}}]]
 
|defname=]]..weaponDefName..[[}}]]
 +
end
 +
 +
function weapon.hasTag(frame)
 +
if not frame then return '' end
 +
    local weaponDefName = frame.args[1]
 +
    if not (weaponData[weaponDefName]) then return 'weapondef ' .. weaponDefName .. ' not found' end
 +
    local tag = frame.args[2]
 +
 +
local miscStats = getMiscStatsTable(weaponDefName)
 +
if not miscStats then return false end
 +
return miscStats[tag]
 
end
 
end
  
 
return weapon
 
return weapon

Revision as of 22:23, 10 May 2024

Documentation

This module is used to autogenerate the weapon infoboxes contained in unit infoboxes, by drawing data from Module:WeaponData/data. The intent is to ease updating of unit infoboxes on the wiki; ideally, only the one data page needing to be changed every release. The concept is taken from e.g. the Combat Card Data module on the Library of Ruina Wiki.

Unlike Module:UnitData, there is no template for this module. If it is desired to generate a weapon infobox outside its unit infobox, the module should be invoked directly, e.g.:

{{#invoke:WeaponData|printInfobox|defname=striderdetriment_gauss|name=Name override}}

Data page

Module:WeaponData/data is a central store of data used by Module:WeaponData to automatically populate weapon infoboxes.

The page is a Lua table written to the local file temp/weaponStats.lua by the Wiki Data Export (dbg_wiki_export.lua) widget in Zero-K. This widget should be run once each update and the data page on the wiki replaced accordingly. It should not be necessary to edit the data manually.


local getArgs = require('Module:Arguments').getArgs
local weapon = {}
local weaponData = mw.loadData('Module:WeaponData/data')

local function getMiscStatsTable(weaponDefName)
	local wd = weaponData[weaponDefName]
	if not wd then return nil end
	if not wd.miscstats then return nil end
	
	local tbl = {}
	for index, tag in ipairs(wd.miscstats) do
		tbl[tag] = true
	end
	return tbl
end

function weapon.getData(frame)
	if not frame then return '' end
    local weaponDefName = frame.args[1]
    if not (weaponData[weaponDefName]) then return 'weapondef ' .. weaponDefName .. ' not found' end
    local property = frame.args[2]
    local result = weaponData[weaponDefName][property]
    if not result then result = '' end
    return frame:preprocess(result) or ''
end

function weapon.printInfobox(frame)
	local weaponDefName = frame.args[1]
    if not (weaponData[weaponDefName]) then return 'weapondef ' .. weaponDefName .. ' not found' end
	return [[{{User:Histidine/Autoinfobox zkweapon
|defname=]]..weaponDefName..[[}}]]
end

function weapon.hasTag(frame)
	if not frame then return '' end
    local weaponDefName = frame.args[1]
    if not (weaponData[weaponDefName]) then return 'weapondef ' .. weaponDefName .. ' not found' end
    local tag = frame.args[2]
	
	local miscStats = getMiscStatsTable(weaponDefName)
	if not miscStats then return false end
	return miscStats[tag]
end

return weapon