Editing Module:WeaponData
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 11: | Line 11: | ||
end | end | ||
index = index + 1 | index = index + 1 | ||
− | |||
end | end | ||
function weapon.getData(frame) | function weapon.getData(frame) | ||
if not frame then return '' end | if not frame then return '' end | ||
− | local weaponDefName = | + | local weaponDefName = frame.args[1] |
local wd = weaponData[weaponDefName] | local wd = weaponData[weaponDefName] | ||
if not (wd) then return 'weapondef ' .. weaponDefName .. ' not found' end | if not (wd) then return 'weapondef ' .. weaponDefName .. ' not found' end | ||
− | local property = | + | local property = frame.args[2] |
local result = wd[property] | local result = wd[property] | ||
if not result then result = '' end | if not result then result = '' end | ||
Line 25: | Line 24: | ||
end | end | ||
− | local function addSpecialDataToTemplate(templateArgs, wd) | + | local function addSpecialDataToTemplate(templateArgs, frameArgs, wd) |
− | local num = | + | local num = 0 |
− | for index, entry in ipairs(wd.extraData | + | for index, entry in ipairs(wd.extraData) do |
if type(entry) == 'table' then | if type(entry) == 'table' then | ||
if entry.type == 'shielddrain' then | if entry.type == 'shielddrain' then | ||
− | + | addCustomLabel(templateArgs, "Shield drain (HP/shot)", entry.drain, num) | |
elseif entry.type == 'needs_link' then | elseif entry.type == 'needs_link' then | ||
− | + | addCustomLabel(templateArgs, "Grid needed", entry.power, num) | |
elseif entry.type == 'spawn' then | 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 | elseif entry.type == 'areadamage' then | ||
local typeName = entry.grav and "Gravity Well" or "Ground Burn" | local typeName = entry.grav and "Gravity Well" or "Ground Burn" | ||
if not grav then | if not grav then | ||
− | + | addCustomLabel(templateArgs, typeName .. " DPS", entry.dps, num) | |
end | end | ||
− | + | addCustomLabel(templateArgs, typeName .. " radius (elmo)", entry.radius, num) | |
− | + | addCustomLabel(templateArgs, typeName .. " duration (s)", entry.duration, num) | |
elseif entry.type == 'stockpile' then | elseif entry.type == 'stockpile' then | ||
− | + | addCustomLabel(templateArgs, "Stockpile time (s)", entry.time, num) | |
if (entry.cost) then | if (entry.cost) then | ||
− | + | addCustomLabel(templateArgs, "Stockpile cost (M)", entry.cost, num) | |
end | end | ||
end | end | ||
else | else | ||
if entry == 'hitscan' then | if entry == 'hitscan' then | ||
− | + | addCustomLabel(templateArgs, nil, "Instantly hits", num) | |
elseif entry == 'ignoreshield' then | elseif entry == 'ignoreshield' then | ||
− | + | addCustomLabel(templateArgs, nil, "Ignores shields", num) | |
elseif entry == 'smoothsground' then | elseif entry == 'smoothsground' then | ||
− | + | addCustomLabel(templateArgs, nil, "Smooths ground", num) | |
elseif entry == 'hightraj' then | elseif entry == 'hightraj' then | ||
− | + | addCustomLabel(templateArgs, nil, "High trajectory", num) | |
elseif entry == 'trajtoggle' then | elseif entry == 'trajtoggle' then | ||
− | + | addCustomLabel(templateArgs, nil, "Trajectory toggle", num) | |
elseif entry == 'watercapable' then | elseif entry == 'watercapable' then | ||
− | + | addCustomLabel(templateArgs, nil, "Water capable", num) | |
elseif entry == 'friendlyfire' then | elseif entry == 'friendlyfire' then | ||
− | + | addCustomLabel(templateArgs, nil, "Potential friendly fire", num) | |
elseif entry == 'nofriendlyfire' then | elseif entry == 'nofriendlyfire' then | ||
− | + | addCustomLabel(templateArgs, nil, "No friendly fire", num) | |
elseif entry == 'nogroundcollide' then | elseif entry == 'nogroundcollide' then | ||
− | + | addCustomLabel(templateArgs, nil, "Passes through ground", num) | |
elseif entry == 'piercing' then | elseif entry == 'piercing' then | ||
− | + | addCustomLabel(templateArgs, nil, "Damage increase vs large units", num) | |
elseif entry == 'damagefalloff' then | elseif entry == 'damagefalloff' then | ||
− | + | addCustomLabel(templateArgs, nil, "Damage falls off with range", num) | |
elseif entry == 'inaccuratevsmoving' then | elseif entry == 'inaccuratevsmoving' then | ||
− | + | addCustomLabel(templateArgs, nil, "Inaccuracy vs moving targets", num) | |
elseif entry == 'interceptedbyantinuke' then | elseif entry == 'interceptedbyantinuke' then | ||
− | + | addCustomLabel(templateArgs, nil, "Can be shot down by antinukes", num) | |
end | end | ||
end | end | ||
Line 86: | Line 85: | ||
local tbl = {title = "Infobox zkweapon", args = {}} | local tbl = {title = "Infobox zkweapon", args = {}} | ||
local w = tbl.args | local w = tbl.args | ||
− | local | + | local wd = weaponData[args.defname] |
− | + | if not (wd) then return 'weapondef ' .. args.defname .. ' not found' end | |
− | if not (wd) then return 'weapondef ' .. | ||
− | addSpecialDataToTemplate(w, wd) | + | addSpecialDataToTemplate(w, args, wd) |
for key, value in pairs(wd) do | for key, value in pairs(wd) do | ||
w[key] = args[key] or value | w[key] = args[key] or value | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end | end | ||
Line 113: | Line 99: | ||
function weapon.printInfobox(frame) | function weapon.printInfobox(frame) | ||
return frame:expandTemplate(weapon.getInfoboxTemplate(frame)) | return frame:expandTemplate(weapon.getInfoboxTemplate(frame)) | ||
+ | end | ||
+ | |||
+ | function weapon.printInfoboxCustomRows(frame) | ||
+ | local weaponDefName = frame.args[1] | ||
+ | local expanded = frame.args[2] | ||
+ | local wd = weaponData[weaponDefName] | ||
+ | if not wd then return 'weapondef ' .. weaponDefName .. ' not found' end | ||
+ | if not wd.extraData then return '' end | ||
+ | |||
+ | local str = '' | ||
+ | local count = 0 | ||
+ | for index, entry in ipairs(wd.extraData) do | ||
+ | local append = '' | ||
+ | if type(entry) == 'table' then | ||
+ | if entry.type == 'shielddrain' then | ||
+ | append, count, str = writeCustomDataLine("Shield drain (HP/shot)", entry.drain, count, str) | ||
+ | elseif entry.type == 'needs_link' then | ||
+ | append, count, str = writeCustomDataLine("Grid needed", entry.power, count, str) | ||
+ | elseif entry.type == 'spawn' then | ||
+ | append, count, str = writeCustomDataLine("Spawns Unit", "[[" .. entry.name .. "]]", count, str) | ||
+ | append, count, str = writeCustomDataLine("Spawn Life (s)", entry.expire, count, str) | ||
+ | elseif entry.type == 'areadamage' then | ||
+ | local typeName = entry.grav and "Gravity Well" or "Ground Burn" | ||
+ | if not grav then | ||
+ | append, count, str = writeCustomDataLine(typeName .. " DPS", entry.dps, count, str) | ||
+ | end | ||
+ | append, count, str = writeCustomDataLine(typeName .. " radius (elmo)", entry.radius, count, str) | ||
+ | append, count, str = writeCustomDataLine(typeName .. " duration (s)", entry.duration, count, str) | ||
+ | |||
+ | elseif entry.type == 'stockpile' then | ||
+ | append, count, str = writeCustomDataLine("Stockpile time (s)", entry.time, count, str) | ||
+ | if (entry.cost) then | ||
+ | append, count, str = writeCustomDataLine("Stockpile cost (M)", entry.cost, count, str) | ||
+ | end | ||
+ | else | ||
+ | append, count, str = writeCustomDataLine("Invalid table data", entry.type, count, str) | ||
+ | end | ||
+ | else | ||
+ | if entry == 'hitscan' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Instantly hits", count, str) | ||
+ | elseif entry == 'ignoreshield' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Ignores shields", count, str) | ||
+ | elseif entry == 'smoothsground' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Smooths ground", count, str) | ||
+ | elseif entry == 'hightraj' then | ||
+ | append, count, str = writeCustomDataLine(nil, "High trajectory", count, str) | ||
+ | elseif entry == 'trajtoggle' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Trajectory toggle", count, str) | ||
+ | elseif entry == 'watercapable' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Water capable", count, str) | ||
+ | elseif entry == 'friendlyfire' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Potential friendly fire", count, str) | ||
+ | elseif entry == 'nofriendlyfire' then | ||
+ | append, count, str = writeCustomDataLine(nil, "No friendly fire", count, str) | ||
+ | elseif entry == 'nogroundcollide' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Passes through ground", count, str) | ||
+ | elseif entry == 'piercing' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Damage increase vs large units", count, str) | ||
+ | elseif entry == 'damagefalloff' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Damage falls off with range", count, str) | ||
+ | elseif entry == 'inaccuratevsmoving' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Inaccuracy vs moving targets", count, str) | ||
+ | elseif entry == 'interceptedbyantinuke' then | ||
+ | append, count, str = writeCustomDataLine(nil, "Can be shot down by antinukes", count, str) | ||
+ | else | ||
+ | append, count, str = writeCustomDataLine("Invalid tag data", entry, count, str) | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | return expanded and frame:preprocess(str) or str | ||
end | end | ||
return weapon | return weapon |