Difference between revisions of "Module:WeaponData"
m |
|||
Line 25: | Line 25: | ||
local function addSpecialDataToTemplate(templateArgs, frameArgs, wd) | local function addSpecialDataToTemplate(templateArgs, frameArgs, wd) | ||
− | local num = | + | local num = 1 |
for index, entry in ipairs(wd.extraData) do | for index, entry in ipairs(wd.extraData) do | ||
if type(entry) == 'table' then | if type(entry) == 'table' then | ||
Line 93: | Line 93: | ||
w[key] = args[key] or value | w[key] = args[key] or value | ||
end | end | ||
+ | w.extraData = nil | ||
return tbl | return tbl | ||
Line 99: | Line 100: | ||
function weapon.printInfobox(frame) | function weapon.printInfobox(frame) | ||
return frame:expandTemplate(weapon.getInfoboxTemplate(frame)) | return frame:expandTemplate(weapon.getInfoboxTemplate(frame)) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
return weapon | return weapon |
Revision as of 06:41, 11 May 2024
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 addCustomLabel(templateArgs, key, value, index) if key then templateArgs["customlabel"..index] = key templateArgs["customdata"..index] = value else templateArgs["special"..index] = value end index = index + 1 end function weapon.getData(frame) if not frame then return '' end local weaponDefName = frame.args[1] local wd = weaponData[weaponDefName] if not (wd) then return 'weapondef ' .. weaponDefName .. ' not found' end local property = frame.args[2] local result = wd[property] if not result then result = '' end return result end local function addSpecialDataToTemplate(templateArgs, frameArgs, wd) local num = 1 for index, entry in ipairs(wd.extraData) do if type(entry) == 'table' then if entry.type == 'shielddrain' then addCustomLabel(templateArgs, "Shield drain (HP/shot)", entry.drain, num) elseif entry.type == 'needs_link' then addCustomLabel(templateArgs, "Grid needed", entry.power, num) elseif entry.type == 'spawn' then addCustomLabel(templateArgs, "Spawns Unit", "[[" .. entry.name .. "]]", num) addCustomLabel(templateArgs, "Spawn Life (s)", entry.expire, num) elseif entry.type == 'areadamage' then local typeName = entry.grav and "Gravity Well" or "Ground Burn" if not grav then addCustomLabel(templateArgs, typeName .. " DPS", entry.dps, num) end addCustomLabel(templateArgs, typeName .. " radius (elmo)", entry.radius, num) addCustomLabel(templateArgs, typeName .. " duration (s)", entry.duration, num) elseif entry.type == 'stockpile' then addCustomLabel(templateArgs, "Stockpile time (s)", entry.time, num) if (entry.cost) then addCustomLabel(templateArgs, "Stockpile cost (M)", entry.cost, num) end end else if entry == 'hitscan' then addCustomLabel(templateArgs, nil, "Instantly hits", num) elseif entry == 'ignoreshield' then addCustomLabel(templateArgs, nil, "Ignores shields", num) elseif entry == 'smoothsground' then addCustomLabel(templateArgs, nil, "Smooths ground", num) elseif entry == 'hightraj' then addCustomLabel(templateArgs, nil, "High trajectory", num) elseif entry == 'trajtoggle' then addCustomLabel(templateArgs, nil, "Trajectory toggle", num) elseif entry == 'watercapable' then addCustomLabel(templateArgs, nil, "Water capable", num) elseif entry == 'friendlyfire' then addCustomLabel(templateArgs, nil, "Potential friendly fire", num) elseif entry == 'nofriendlyfire' then addCustomLabel(templateArgs, nil, "No friendly fire", num) elseif entry == 'nogroundcollide' then addCustomLabel(templateArgs, nil, "Passes through ground", num) elseif entry == 'piercing' then addCustomLabel(templateArgs, nil, "Damage increase vs large units", num) elseif entry == 'damagefalloff' then addCustomLabel(templateArgs, nil, "Damage falls off with range", num) elseif entry == 'inaccuratevsmoving' then addCustomLabel(templateArgs, nil, "Inaccuracy vs moving targets", num) elseif entry == 'interceptedbyantinuke' then addCustomLabel(templateArgs, nil, "Can be shot down by antinukes", num) end end end end function weapon.getInfoboxTemplate(frame) local args = frame.args local tbl = {title = "Infobox zkweapon", args = {}} local w = tbl.args local wd = weaponData[args.defname] if not (wd) then return 'weapondef ' .. args.defname .. ' not found' end addSpecialDataToTemplate(w, args, wd) for key, value in pairs(wd) do w[key] = args[key] or value end w.extraData = nil return tbl end function weapon.printInfobox(frame) return frame:expandTemplate(weapon.getInfoboxTemplate(frame)) end return weapon
Debug data:
[SQLBagOStuff] MainObjectStash using store ReplicatedBagOStuff
[objectcache] MainWANObjectCache using store EmptyBagOStuff
IP: 3.141.18.167
Start request GET /mediawiki/index.php?diff=prev&oldid=9298&title=Module%3AWeaponData
HTTP HEADERS:
CONTENT-TYPE:
CONTENT-LENGTH: 0
USER-AGENT: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HOST: zero-k.info
ACCEPT-ENCODING: gzip, br, zstd, deflate
ACCEPT: */*
CONNECTION: close[localisation] LocalisationCache: using store LCStoreDB
[session] SessionManager using store SqlBagOStuff
[DBReplication] Cannot use ChronologyProtector with EmptyBagOStuff
[DBReplication] Wikimedia\Rdbms\LBFactory::getChronologyProtector: request info {
"IPAddress": "3.141.18.167",
"UserAgent": "Mozilla\/5.0 AppleWebKit\/537.36 (KHTML, like Gecko; compatible; ClaudeBot\/1.0; +claudebot@anthropic.com)",
"ChronologyProtection": false,
"ChronologyPositionIndex": 0,
"ChronologyClientId": false
}[DBConnection] Wikimedia\Rdbms\LoadBalancer::lazyLoadReplicationPositions: executed chronology callback.
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[session] SessionBackend "rujcmnllpifskna2mutp9rl9r7g0tuhn" is unsaved, marking dirty in constructor
[session] SessionBackend "rujcmnllpifskna2mutp9rl9r7g0tuhn" save: dataDirty=1 metaDirty=1 forcePersist=0
[cookie] already deleted setcookie: "wikidb229_mw__session", "", "1713693855", "/", "", "", "1"
[cookie] already deleted setcookie: "wikidb229_mw_UserID", "", "1713693855", "/", "", "", "1"
[cookie] already deleted setcookie: "wikidb229_mw_Token", "", "1713693855", "/", "", "", "1"
[cookie] already deleted setcookie: "forceHTTPS", "", "1713693855", "/", "", "", "1"
[DBConnection] Wikimedia\Rdbms\LoadBalancer::getLocalConnection: connected to database 0 at 'localhost'.
Title::getRestrictionTypes: applicable restrictions to [[Module:WeaponData]] are {edit,move}
[ContentHandler] Created handler for Scribunto: ScribuntoContentHandler
Article::view: showing diff page
DifferenceEngine old '9298' new 'prev' rcid ''
[MessageCache] MessageCache using store SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] SqlBagOStuff::lock failed due to timeout for wikidb229-mw_:messages:en.
[ContentHandler] Created handler for wikitext: WikitextContentHandler
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
[MessageCache] MessageCache::load: Loading en... local cache is empty, global cache is expired/volatile, loading from database
ParserFactory: using preprocessor: Preprocessor_Hash
Unstubbing $wgLang on call of $wgLang::_unstub from ParserOptions->__construct
DifferenceEngine old '0' new '0' rcid '0'
WikiPage::getParserOutput: using parser cache: no
[caches] parser: SqlBagOStuff
[SQLBagOStuff] Connection mysql object #127 (handle id #121) will be used for SqlBagOStuff
Unstubbing $wgParser on call of $wgParser::parse from AbstractContent->getParserOutput
[Scribunto] Scribunto_LuaStandaloneInterpreter::__construct: creating interpreter: ""C:\Projekty\zero-k.info\www\mediawiki\extensions\Scribunto\includes\engines\LuaStandalone/binaries/lua5_1_5_Win64_bin/lua5.1.exe" "C:\Projekty\zero-k.info\www\mediawiki\extensions\Scribunto\includes\engines\LuaStandalone/mw_main.lua" "C:\Projekty\zero-k.info\www\mediawiki\extensions\Scribunto\includes" "0" "8""
[gitinfo] Candidate cacheFile=C:\Projekty\zero-k.info\www\mediawiki/gitinfo.json for C:\Projekty\zero-k.info\www\mediawiki
[gitinfo] Cache incomplete for C:\Projekty\zero-k.info\www\mediawiki
SiteStats::loadAndLazyInit: reading site_stats from replica DB
MediaWiki::preOutputCommit: primary transaction round committed
MediaWiki::preOutputCommit: pre-send deferred updates completed
MediaWiki::preOutputCommit: session changes committed
MediaWiki::preOutputCommit: LBFactory shutdown completed
Title::getRestrictionTypes: applicable restrictions to [[Module:WeaponData]] are {edit,move}