欢迎来到猴子VS气球的史诗级冒险!
除特殊说明外,本站内容采用CC BY-NC-SA 4.0协议。
本站编辑权限开放,欢迎各位直接动手或者到留言板留言。
欢迎有合作意向者加入QQ群:950568164
欢迎来到气球塔防6 BWIKI!
除特殊说明外,本站内容采用CC BY-NC-SA 4.0协议。
欢迎各位到留言板留言或者加入QQ群:950568164
模块:BeastStatTable
此模块的文档可以在模块:BeastStatTable/doc创建
local getArgs = require("Module:Arguments").getArgs
local p = {}
p.main = function(frame)
local args = getArgs(frame)
local attacks = mw.text.split(args['攻击'] or '攻击', ',')
local minPower = args['最小野兽之力']
local maxPower = args['最大野兽之力']
local ranges = {
damage = tonumber(args['伤害范围']) or 0,
pierce = tonumber(args['穿透范围']) or 0,
rate = tonumber(args['攻击间隔范围']) or 0,
knockback = tonumber(args['击退时间范围']) or 0,
speed = tonumber(args['飞行速度范围']) or 0,
divisor = tonumber(args['眩晕伤害除数']) or 1
}
local result = {
'{|class="wikitable mw-collapsible mw-collapsed info-support-bg" style="text-align:center;"\n!colspan=999 class="info-support-bg-title"|每个野兽之力详细数据'
}
local getStatArg = function(key, idx)
return tonumber(args[key .. tostring(idx)])
end
local getPercent = function(currPower)
return (currPower - minPower) / (maxPower - minPower)
end
local getStat = function(percent, base, range)
return tonumber(base) + range * percent
end
local headerAttacks = { '!rowspan=2 class="info-support-bg-title"|野兽之力' }
local headerKeys = {}
for i, v in ipairs(attacks) do
local colspan = 0
if getStatArg('伤害', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|伤害')
colspan = colspan + 1
if getStatArg('眩晕伤害', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|眩晕伤害')
colspan = colspan + 1
end
end
if getStatArg('穿透', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|穿透')
colspan = colspan + 1
end
if getStatArg('冷却', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|冷却')
colspan = colspan + 1
elseif getStatArg('溅射间隔', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|溅射间隔')
colspan = colspan + 1
elseif getStatArg('攻击间隔', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|攻击间隔')
colspan = colspan + 1
end
if getStatArg('击退时间', i) then
table.insert(headerKeys, '!class="info-support-bg-title"|击退时间')
colspan = colspan + 1
end
table.insert(headerAttacks, string.format('!colspan=%d class="info-support-bg-title"|%s', colspan, v))
end
if args['飞行速度'] then
table.insert(headerAttacks, '!rowspan=2 class="info-support-bg-title"|飞行速度')
end
table.insert(result, table.concat(headerAttacks, '\n'))
table.insert(result, table.concat(headerKeys, '\n'))
for p = minPower, maxPower, 1 do
local percent = getPercent(p)
local statLine = { '|' .. tostring(p) }
for a in ipairs(attacks) do
if getStatArg('伤害', a) then
local extraDamage = getStat(percent, 0, ranges.damage)
table.insert(statLine, math.floor(tonumber(getStatArg('伤害', a)) + extraDamage))
if getStatArg('眩晕伤害', a) then
local stunDamage = tonumber(getStatArg('眩晕伤害', a)) + extraDamage / ranges.divisor
table.insert(statLine, string.format('+%d', math.floor(stunDamage)))
end
end
if getStatArg('穿透', a) then
table.insert(statLine, math.floor(getStat(percent, getStatArg('穿透', a), ranges.pierce)))
end
if getStatArg('攻击间隔', a) or getStatArg('溅射间隔', a) or getStatArg('冷却', a) then
local baseRate = tonumber(getStatArg('攻击间隔', a))
local rate = getStat(percent, baseRate, ranges.rate)
if getStatArg('冷却', a) then
local baseCD = tonumber(getStatArg('冷却', a))
table.insert(statLine, string.format('%.4fs', baseCD * (1 - (baseRate - rate) / rate)))
elseif getStatArg('溅射间隔', a) then
table.insert(statLine, string.format('%.4fs', getStatArg('溅射间隔', a) * rate / baseRate))
else
table.insert(statLine, rate)
end
end
if getStatArg('击退时间', a) then
table.insert(statLine, string.format('%.4fs', getStat(percent, getStatArg('击退时间', a), ranges.knockback)))
end
end
if args['飞行速度'] then
table.insert(statLine, getStat(percent, tonumber(args['飞行速度']), ranges.speed))
end
table.insert(result, table.concat(statLine, '||'))
end
table.insert(result, '|}')
return table.concat(result, '\n|-\n')
end
return p