Please note that some information on this wiki is still based on the demo version.
If you notice any errors, feel free to correct them.

Module:LevelStats: Difference between revisions

From Super Fantasy Kingdom Official Wiki
wgg>Cadaei
typo
wgg>Cadaei
col and calc fix
Line 44: Line 44:
end
end
local headers = {}
local headers = {'<th>Stats</th>'}
for i=1,levelCount do
for i=1,levelCount do
table.insert(headers, '<th>'..i..'</th>')
table.insert(headers, '<th>'..i..'</th>')
Line 57: Line 57:
-- stat value increase linearly by level
-- stat value increase linearly by level
local gainPerLevel = (valLast - val)/levelCount
local gainPerLevel = (valLast - val)/(levelCount-1)
for i=0,levelCount-1 do
for i=0,levelCount-1 do

Revision as of 17:35, 1 November 2023

Displays a stat table for units for multiple levels. Parameter names are the stat abbreviations, for the first level just the two letters, for the 10th level the stat abbreviation with suffix 10, e.g. dm=5 for damage 5 in level 1 and dm10=20 for damage 20 in level 10. Values are interpreted linerarly for the other levels.

For units use exp=true for exponential stat growth.

To display a gain indicator, use gainIndicator=true.

{{LevelStats
|pw=5|pw10=53
|hp=11|hp10=50
|sh=13|sh10=100
|cr=5%
|pd=0
|md=0
}}

Lua error at line 59: attempt to perform arithmetic on local 'valLast' (a string value).

{{LevelStats
|exp=true
|pw=5|pw10=63
|hp=10|hp10=68
|sh=19|sh10=116
|cr=0%
|pd=0
|md=0
}}

Lua error at line 59: attempt to perform arithmetic on local 'valLast' (a string value).

{{LevelStats
|exp=true
|baseIndicator=true
|gainIndicator=true
|pw=5|pw10=63
|hp=10|hp10=68
|sh=19|sh10=116
|cr=0%
|pd=0
|md=0
}}

Lua error at line 59: attempt to perform arithmetic on local 'valLast' (a string value).

for copy pasting units

{{LevelStats
|exp=true
|baseIndicator=true
|gainIndicator=true
|pw=  |pw10=
|hp=  |hp10=
|ma=  |ma10=
|sh=  |sh10=
|rg=  |rg10=
|cr=0%
|pd=0
|md=0
}}

Code at Module:LevelStats, doc at Template:LevelStats/doc.


local p = {}

function p.levelStats(f)
	return p.create(f:getParent().args)
end

function p.create(args)	
	-- argument name and full name (also used for icon name)
	local possibleStats = {
		{"dm", "Damage"},
		{"hp", "Health"},
		{"sh", "Shield"},
		{"cr", "Critical Chance"},
		{"pd", "Physical Defense"},
		{"md", "Magical Defense"},
		{"cd", "Cooldown"},
		{"ra", "Range"},
		{"ar", "Area"},
		{"kb", "Knockback"},
		{"sp", "Speed"},
		{"du", "Duration"},
		{"gr", "Greed"},
		{"rr", "Reroll"},
		{"ba", "Banish"},
		{"cu", "Curse"}
		}
	
	local usedStats = {}
	
	local levelCount = 10
	
	for _, statNames in ipairs(possibleStats) do
		local statAbbreviation = statNames[1]
		local statValue = args[statAbbreviation]
		if statValue ~= nil and statValue ~= '' then
			local statName = statNames[2]
			local statValueLast = args[statAbbreviation..levelCount] or statValue
			table.insert(usedStats, p.StatEntryRow(statName, statValue, statValueLast, levelCount))
		end
	end
	
	if #usedStats == 0 then
	  return ''
	end
	
	local headers = {'<th>Stats</th>'}
	for i=1,levelCount do
		table.insert(headers, '<th>'..i..'</th>')
	end
	
	return '<table class="wikitable"><tr>'..table.concat(headers, '')..'</tr>'..
	  '<tr>'..table.concat(usedStats, '</tr><tr>')..'</tr>'..'</table>'
end

function p.StatEntryRow(name, val, valLast, levelCount)
	local statColumns = {'[[File:'..name..'.png|16x16px]] '..name}
	
	-- stat value increase linearly by level
	local gainPerLevel = (valLast - val)/(levelCount-1)
	
	for i=0,levelCount-1 do
		table.insert(statColumns, val + (i*gainPerLevel))
	end
	
	return '<td>'..table.concat(statColumns, '</td><td>')..'</td>'
end

return p