本WIKI由cl的光玊申请于2021年08月04日创建。本WIKI编辑权限开放,欢迎收藏起来防止迷路,也希望有爱的小伙伴和我们一起编辑哟~

全站通知:

模块:数值计算

来自偶像荣耀/idoly prideWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:数值计算/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