Editing Module:UnitData

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 2: Line 2:
 
local unit = {}
 
local unit = {}
 
local unitData = mw.loadData('Module:UnitData/data')
 
local unitData = mw.loadData('Module:UnitData/data')
 
local function toPercent(amount)
 
-- amount is a string when ToSI is used before calling this function
 
if type(amount) == "string" then
 
amount = tonumber(amount)
 
end
 
 
return string.format("%.0f", amount * 100) .. "%"
 
end
 
 
local function appendHeatInfo(frame, ud, currentStr)
 
local args = {subbox = "yes"}
 
args.header1 = "Heat Up"
 
args.label2 = "Heat Per Shot (%)"
 
args.data2 = ud.heatPerShot
 
args.label3 = "Heat Decay (%/s)"
 
args.data3 = ud.heatDecay
 
args.label4 = "Heat Max Slow (%)"
 
args.data4 = ud.heatMaxSlow
 
local tbl = {title = "infobox", args = args}
 
currentStr = currentStr .. frame:expandTemplate({title = "Infobox", args = args})
 
return currentStr
 
end
 
  
 
function unit.getData(frame)
 
function unit.getData(frame)
 
if not frame then return '' end
 
if not frame then return '' end
local unitDefName = frame.args.defname or frame.args[1] or "<no name specified>"
+
local unitDefName = frame.args[1]
 
local ud = unitData[unitDefName]
 
local ud = unitData[unitDefName]
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
local property = (frame.args.defname == nil) and frame.args[2] or frame.args[1]
+
local property = frame.args[2]
 
local result = ud[property]
 
local result = ud[property]
 
return result or ''
 
return result or ''
Line 37: Line 14:
  
 
function unit.getAbilityInfoboxTemplate(abType, args)
 
function unit.getAbilityInfoboxTemplate(abType, args)
local tbl = {title = "Infobox zkability " .. abType, args = args}
+
local tbl = {title = "Infobox zkability " .. abType, args}
return tbl
 
end
 
 
 
function unit.getInfoboxTemplate(frame)
 
local args = frame.args
 
local tbl = {title = "Infobox zkunit", args = {}}
 
local u = tbl.args
 
local defName = args.defname or args[1] or "<no name specified>"
 
local ud = unitData[defName]
 
if not (ud) then return 'unitdef ' .. defName  .. ' not found' end
 
 
for key, value in pairs(ud) do
 
u[key] = args[key] or value
 
end
 
u.abilities = unit.printAbilityInfoboxes(frame)
 
u.weapons = unit.printWeaponInfoboxes(frame)
 
u.weaponIDs = nil
 
u.shieldIDs = nil
 
u.drones = nil
 
 
 
return tbl
 
return tbl
 
end
 
end
  
 
function unit.printAbilityInfoboxes(frame)
 
function unit.printAbilityInfoboxes(frame)
 +
-- TODO
 
if not frame then return '' end
 
if not frame then return '' end
local unitDefName = frame.args.defname or frame.args[1] or "<no name specified>"
+
local unitDefName = frame.args[1]
 
local ud = unitData[unitDefName]
 
local ud = unitData[unitDefName]
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
 
 
 
local result = ''
 
local result = ''
if ud.drones then
 
for index, entry in ipairs(ud.drones) do
 
local args = {
 
drone = "[[" .. entry.drone .. "]]",
 
maxdrones = entry.maxDrones,
 
range = entry.range,
 
interval = entry.interval,
 
spawnsize = entry.spawnSize,
 
buildtime = entry.buildTime,
 
maxbuilding = entry.maxBuilding
 
}
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("drone", args))
 
end
 
end
 
 
 
if ud.buildSpeed then  
 
if ud.buildSpeed then  
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("construction", {buildpower = ud.buildSpeed}))
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("construction", {buildpower = ud.buildSpeed}))
 
end
 
end
if ud.transportLightSpeed or ud.transportMediumSpeed or ud.transportHeavySpeed then
 
local light = ud.transportLightSpeed
 
local medium = ud.transportMediumSpeed
 
local heavy = ud.transportHeavySpeed
 
local args = {}
 
if light then args.light = light .. "%" end
 
if medium then args.medium = medium .. "%" end
 
if heavy then args.heavy = heavy .. "%" end
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("transport", args))
 
end
 
if ud.canCloak or ud.idleCloak then
 
local args = {}
 
if (ud.cloakCost or 0) > 0 then
 
args.upkeepidle = ud.cloakCost
 
args.upkeepmobile = (ud.cloakCostMoving ~= ud.cloakCost) and ud.cloakCostMoving or nil
 
elseif ud.idleCloak then
 
args.customdata1 = "Only when idle"
 
args.customdata2 = "Free and automated"
 
end
 
args.decloakradius = ud.decloakDistance
 
if ud.decloakOnFire == false then
 
args.customdata3 = "No decloak while shooting"
 
end
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("cloak", args))
 
end
 
if ud.areaCloakUpkeep then
 
local args = {name = "Area Cloak", radius = ud.areaCloakRadius, upkeep = ud.areaCloakUpkeep}
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("cloak", args))
 
end
 
if ud.shieldIDs then
 
local weaponData = mw.loadData('Module:WeaponData/data')
 
for index, shieldID in pairs(ud.shieldIDs or {}) do
 
local args = {}
 
local shieldDef = weaponData[shieldID]
 
args.name = shieldDef.name
 
args.strength = shieldDef.strength
 
args.regen = shieldDef.regen
 
args.regencost = shieldDef.regencost
 
args.radius = shieldDef.radius
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("shield", args))
 
end
 
end
 
if ud.radarDistance or ud.jammerDistance then
 
local args = {}
 
if ud.jammerDistance then
 
if not ud.radarDistance then
 
args.name = "Radar Jammer"
 
end
 
args.jam = ud.jammerDistance
 
end
 
if ud.radarDistance then
 
args.radar = ud.radarDistance
 
end
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("intel", args))
 
end
 
if ud.jumpRange then
 
local args = {range = ud.jumpRange, reload = ud.jumpReload, speed = ud.jumpSpeed, midairjump = ud.midairJump and "Yes" or "No"}
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("jump", args))
 
end
 
if ud.idleRegen or ud.combatRegen or ud.waterRegen or ud.armoredRegen then
 
local args = {}
 
if ud.idleRegenTime then
 
args.idleregen = ud.idleRegen
 
args.timetoenable = ud.idleRegenTime
 
elseif ud.combatRegen then
 
args.combatregen = ud.combatRegen
 
end
 
if ud.waterRegen then
 
args.waterregen = ud.waterRegen
 
args.atdepth = ud.waterRegenDepth
 
end
 
if ud.armoredRegen then
 
args.customlabel1 = "Closed regen (HP/s)"
 
args.customdata1 = ud.armoredRegen
 
end
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("regen", args))
 
end
 
if ud.morphTo then
 
local args = {to = "[[" .. ud.morphTo .. "]]", cost = ud.morphCost, time = ud.morphTime, disabled = ud.combatMorph and "No" or "Yes"}
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("morph", args))
 
end
 
if ud.armorDamageReduction then
 
local args = {reduction = ud.armorDamageReduction .. '%'}
 
if ud.armorForceClose then
 
args.special1 = "Forced for " .. ud.armorForceClose .. "s on damage"
 
end
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("armored", args))
 
end
 
 
local args = {}
 
local num = 1
 
do
 
if ud.isMex then
 
args["customdata".. num] = "Extracts metal"
 
num = num + 1
 
end
 
if ud.stealth then
 
args["customdata".. num] = "Invisible to radar"
 
num = num + 1
 
end
 
if ud.fireproof then
 
args["customdata".. num] = "Immunity to afterburn"
 
num = num + 1
 
end
 
if ud.dontFireAtRadar then
 
args["customdata".. num] = "Can ignore unidentified targets"
 
num = num + 1
 
end
 
if ud.instaSelfDestruct then
 
args["customdata".. num] = "Instant self-destruction"
 
num = num + 1
 
end
 
end
 
if num > 1 then
 
result = result .. frame:expandTemplate(unit.getAbilityInfoboxTemplate("line", args))
 
end
 
 
return result
 
 
end
 
end
  
 
function unit.printWeaponInfoboxes(frame)
 
function unit.printWeaponInfoboxes(frame)
 
if not frame then return '' end
 
if not frame then return '' end
local unitDefName = frame.args.defname or frame.args[1] or "<no name specified>"
+
local unitDefName = frame.args[1]
 
local ud = unitData[unitDefName]
 
local ud = unitData[unitDefName]
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
 
if not (ud) then return 'unitdef ' .. unitDefName .. ' not found' end
Line 220: Line 45:
 
end
 
end
 
 
if ud.heatPerShot then
+
return result or ''
result = appendHeatInfo(frame, ud, result)
 
end
 
 
if result == '' then result = "None" end
 
return result
 
end
 
 
 
function unit.printInfobox(frame)
 
return frame:expandTemplate(unit.getInfoboxTemplate(frame))
 
 
end
 
end
  
 
return unit
 
return unit

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: