欢迎来到气球塔防6 BWIKI!
除特殊说明外,本站内容采用CC BY-NC-SA 4.0协议。
欢迎各位到留言板留言或者加入QQ群:950568164

全站通知:

模块:BeastStatTable

来自气球塔防6WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块: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