本WIKI由cl的光玊申请于2021年08月04日创建
本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
编辑帮助:目录 • BWIKI反馈留言板
本WIKI由cl的光玊申请于2021年08月04日创建。本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~
模块:数值计算
此模块的文档可以在模块:数值计算/doc创建
local f = {}
--01组的180级(9星满级)、200级、220级、240级三围基础系数(不等于体力基础系数)
local paramGroupValue = { ["9"] = 119850, ["10"] = 145000, ["11"] = 175740, ["12"] = 211120 }
--9~12星加成系数,其中11和12星为预估值,以后实装后需要查验
local rarityBonus = { ["9"] = 1.4, ["10"] = 1.45, ["11"] = 1.5, ["12"] = 1.55 }
--9星到10星三围数值转换,数值计算公式为floor(floor(paramGroupValue * ratioPermil) * rarityBonus)
--当前所有5星卡都属于都属于01组所以paramGroupValue为同一值,结合rarityBonus可逆推算出ratioPermil,然后替换相应系数重新计算
--计算过程中的多次转换很可能会产生误差,解决方法是从卡牌数据库获得ratioPermil直接计算三围
function f.calc_status(frame)
local prevValue = frame.args[1] --原数值
local prevGroupValue = paramGroupValue[frame.args[2]] --9星为119850
local prevBonus = rarityBonus[frame.args[2]] --9星为1.4
if prevValue == nil or prevGroupValue == nil or prevBonus == nil then
return prevValue
end
local ratioPermil = math.ceil(math.ceil(tonumber(prevValue) / tonumber(prevBonus)) * 1000 / tonumber(prevGroupValue))
local newGroupValue = paramGroupValue[frame.args[3]] --10星为145000
local newBonus = rarityBonus[frame.args[3]] --10星为1.45
if newGroupValue == nil or newBonus == nil then
return prevValue
end
local newValue = math.floor(math.floor(ratioPermil * newGroupValue / 1000) * newBonus)
return newValue
end
--9星到10星体力值查表转换
local stamina_map_9_10 = { ["5384"] = 6380, ["4895"] = 5800, ["4405"] = 5220 }
--9星到10星体力值转换,计算方式和三围是基本一样的,不过到1周年为止体力值基础系数只有3种(900、1000、1100),就用简单的查表来计算了
function f.calc_stamina(frame)
local prevValue = frame.args[1]
local newValue = stamina_map_9_10[prevValue]
if newValue == nil then
return prevValue
end
return newValue
end
--战力计算
function f.cale_power(frame)
local mental
local critical
if tonumber(frame.args[1]) == nil then
return ""
end
local mental = tonumber(frame.args[5])
local critical = tonumber(frame.args[6])
if mental == nil then mental = 100 end
if critical == nil then critical = 100 end
--各三围*0.5取整后值合计+体力*0.8+精神*2+暴击*3
return math.floor(frame.args[1]/2)+
math.floor(frame.args[2]/2)+
math.floor(frame.args[3]/2)+
math.floor(frame.args[4]*0.8)+
mental*2+
critical*3
end
function f.cale_scalepx(frame)
if tonumber(frame.args[1]) == nil then
return 0
end
return (frame.args[1] * frame.args[2]) - frame.args[1]
end
return f