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
return index
 
 
end
 
end
  
 
function weapon.getData(frame)
 
function weapon.getData(frame)
 
if not frame then return '' end
 
if not frame then return '' end
local weaponDefName = frame.args.defname or frame.args[1] or "<no name specified>"
+
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 = (frame.args.defname == nil) and frame.args[2] or frame.args[1]
+
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 = 1
+
local num = 0
for index, entry in ipairs(wd.extraData or {}) do
+
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
num = addCustomLabel(templateArgs, "Shield drain (HP/shot)", entry.drain, num)
+
addCustomLabel(templateArgs, "Shield drain (HP/shot)", entry.drain, num)
 
elseif entry.type == 'needs_link' then
 
elseif entry.type == 'needs_link' then
num = addCustomLabel(templateArgs, "Grid needed", entry.power, num)
+
addCustomLabel(templateArgs, "Grid needed", entry.power, num)
 
elseif entry.type == 'spawn' then
 
elseif entry.type == 'spawn' then
num = addCustomLabel(templateArgs, "Spawns Unit", "[[" .. entry.name .. "]]", num)
+
addCustomLabel(templateArgs, "Spawns Unit", "[[" .. entry.name .. "]]", num)
num = addCustomLabel(templateArgs, "Spawn Life (s)", entry.expire, 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
num = addCustomLabel(templateArgs, typeName .. " DPS", entry.dps, num)
+
addCustomLabel(templateArgs, typeName .. " DPS", entry.dps, num)
 
end
 
end
num = addCustomLabel(templateArgs, typeName .. " radius (elmo)", entry.radius, num)
+
addCustomLabel(templateArgs, typeName .. " radius (elmo)", entry.radius, num)
num = addCustomLabel(templateArgs, typeName .. " duration (s)", entry.duration, num)
+
addCustomLabel(templateArgs, typeName .. " duration (s)", entry.duration, num)
  
 
elseif entry.type == 'stockpile' then
 
elseif entry.type == 'stockpile' then
num = addCustomLabel(templateArgs, "Stockpile time (s)", entry.time, num)
+
addCustomLabel(templateArgs, "Stockpile time (s)", entry.time, num)
 
if (entry.cost) then
 
if (entry.cost) then
num = addCustomLabel(templateArgs, "Stockpile cost (M)", entry.cost, num)
+
addCustomLabel(templateArgs, "Stockpile cost (M)", entry.cost, num)
 
end
 
end
 
end
 
end
 
else
 
else
 
if entry == 'hitscan' then
 
if entry == 'hitscan' then
num = addCustomLabel(templateArgs, nil, "Instantly hits", num)
+
addCustomLabel(templateArgs, nil, "Instantly hits", num)
 
elseif entry == 'ignoreshield' then
 
elseif entry == 'ignoreshield' then
num = addCustomLabel(templateArgs, nil, "Ignores shields", num)
+
addCustomLabel(templateArgs, nil, "Ignores shields", num)
 
elseif entry == 'smoothsground' then
 
elseif entry == 'smoothsground' then
num = addCustomLabel(templateArgs, nil, "Smooths ground", num)
+
addCustomLabel(templateArgs, nil, "Smooths ground", num)
 
elseif entry == 'hightraj' then
 
elseif entry == 'hightraj' then
num = addCustomLabel(templateArgs, nil, "High trajectory", num)
+
addCustomLabel(templateArgs, nil, "High trajectory", num)
 
elseif entry == 'trajtoggle' then
 
elseif entry == 'trajtoggle' then
num = addCustomLabel(templateArgs, nil, "Trajectory toggle", num)
+
addCustomLabel(templateArgs, nil, "Trajectory toggle", num)
 
elseif entry == 'watercapable' then
 
elseif entry == 'watercapable' then
num = addCustomLabel(templateArgs, nil, "Water capable", num)
+
addCustomLabel(templateArgs, nil, "Water capable", num)
 
elseif entry == 'friendlyfire' then
 
elseif entry == 'friendlyfire' then
num = addCustomLabel(templateArgs, nil, "Potential friendly fire", num)
+
addCustomLabel(templateArgs, nil, "Potential friendly fire", num)
 
elseif entry == 'nofriendlyfire' then
 
elseif entry == 'nofriendlyfire' then
num = addCustomLabel(templateArgs, nil, "No friendly fire", num)
+
addCustomLabel(templateArgs, nil, "No friendly fire", num)
 
elseif entry == 'nogroundcollide' then
 
elseif entry == 'nogroundcollide' then
num = addCustomLabel(templateArgs, nil, "Passes through ground", num)
+
addCustomLabel(templateArgs, nil, "Passes through ground", num)
 
elseif entry == 'piercing' then
 
elseif entry == 'piercing' then
num = addCustomLabel(templateArgs, nil, "Damage increase vs large units", num)
+
addCustomLabel(templateArgs, nil, "Damage increase vs large units", num)
 
elseif entry == 'damagefalloff' then
 
elseif entry == 'damagefalloff' then
num = addCustomLabel(templateArgs, nil, "Damage falls off with range", num)
+
addCustomLabel(templateArgs, nil, "Damage falls off with range", num)
 
elseif entry == 'inaccuratevsmoving' then
 
elseif entry == 'inaccuratevsmoving' then
num = addCustomLabel(templateArgs, nil, "Inaccuracy vs moving targets", num)
+
addCustomLabel(templateArgs, nil, "Inaccuracy vs moving targets", num)
 
elseif entry == 'interceptedbyantinuke' then
 
elseif entry == 'interceptedbyantinuke' then
num = addCustomLabel(templateArgs, nil, "Can be shot down by antinukes", num)
+
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 defName = args.defname or args[1] or "<no name specified>"
+
local wd = weaponData[args.defname]
local wd = weaponData[defName]
+
if not (wd) then return 'weapondef ' .. args.defname .. ' not found' end
if not (wd) then return 'weapondef ' .. defName .. ' not found' end
 
 
 
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
 
w.extraData = nil
 
if (w.count and w.count > 1) then
 
w.name = w.name .. " x " .. w.count
 
end
 
if (w.projectiles and w.projectiles > 1) then
 
local append = " x " ..  w.projectiles
 
if w.damage then w.damage = w.damage .. append end
 
if w.empdamage then w.empdamage = w.empdamage .. append end
 
if w.slowdamage then w.slowdamage = w.slowdamage .. append end
 
if w.disarmdamage then w.disarmdamage = w.disarmdamage .. append end
 
if w.shielddamage then w.shielddamage = w.shielddamage .. append end
 
 
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

Please note that all contributions to Zero-K are considered to be released under the Creative Commons Attribution-ShareAlike (see Zero-K:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)

Templates used on this page: