全站通知:
模块:支援卡突破属性
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:支援卡突破属性/doc创建
local p={}
local data = require('模块:支援卡效果数据库内容')
-- 分段线性插值:开始 --
function w0(x,X)
if(x >= X[1] and x < X[2])then
return (X[2]-x)/(X[2]-X[1])
else
return 0
end
end
function wj(j,x,X)
if(x >= X[j-1] and x < X[j])then
return (X[j-1]-x)/(X[j-1]-X[j])
elseif(x >= X[j] and x < X[j+1])then
return (X[j+1]-x)/(X[j+1]-X[j])
else
return 0
end
end
function wn(n,x,X)
if(x >= X[n-1] and x < X[n])then
return (X[n-1]-x)/(X[n-1]-X[n])
else
return 0
end
end
-- Piecewise Linear Interpolation
function PLI(x,X,Y)
n = #X
ans = w0(x,X)*Y[1]+wn(n,x,X)*Y[n]
for i=2,n-1 do
ans = ans + wj(i,x,X)*Y[i]
end
return ans
end
-- 分段线性插值:结束 --
function getLvValue(lv,v)
-- 获取不同等级的值
Lv_array = {1,5,10,15,20,25,30,35,40,45,50}
Value_array = {tonumber(v.init)}
for i=2,11 do
Value_array[i] = tonumber(v['limit_lv'..Lv_array[i]])
end
X = {}
Y = {}
for i, v in ipairs(Value_array) do
if (v ~= -1) then
table.insert(X, Lv_array[i])
table.insert(Y, Value_array[i])
end
end
if (lv < X[1])then
return 0
end
if (lv >= X[#X])then
return Y[#X]
end
if (#X >= 2) then
return PLI(lv,X,Y)
end
end
function getGradeValue(grade,v)
Rarity = string.sub(v.id, 1 ,1)
Value = 0
if(Rarity == "1")then
-- R卡
lv = 20+5*grade
Value = getLvValue(lv,v)
elseif(Rarity == "2")then
-- SR卡
lv = 25+5*grade
Value = getLvValue(lv,v)
else
-- SSR卡
lv = 30+5*grade
Value = getLvValue(lv,v)
end
-- 游戏中向下取整
return math.floor(Value)
end
function getUniqueValue(grade,qLv,Value,id)
Rarity = string.sub(id, 1 ,1)
lv = 0
if(Rarity == "1")then
-- R卡
lv = 20+5*grade
elseif(Rarity == "2")then
-- SR卡
lv = 25+5*grade
else
-- SSR卡
lv = 30+5*grade
end
if(lv >= tonumber(qLv))then
return tonumber(Value)
else
return 0
end
end
function getTypeString(TypeNumber)
local TypeString
if(TypeNumber == "1")then
TypeString = "友情加成"
elseif(TypeNumber == "2")then
TypeString = "干劲效果提升"
elseif(TypeNumber == "3")then
TypeString = "速度加成"
elseif(TypeNumber == "4")then
TypeString = "耐力加成"
elseif(TypeNumber == "5")then
TypeString = "力量加成"
elseif(TypeNumber == "6")then
TypeString = "毅力加成"
elseif(TypeNumber == "7")then
TypeString = "智力加成"
elseif(TypeNumber == "8")then
TypeString = "训练效果提升"
elseif(TypeNumber == "9")then
TypeString = "初期速度提升"
elseif(TypeNumber == "10")then
TypeString = "初期耐力提升"
elseif(TypeNumber == "11")then
TypeString = "初期力量提升"
elseif(TypeNumber == "12")then
TypeString = "初期毅力提升"
elseif(TypeNumber == "13")then
TypeString = "初期智力提升"
elseif(TypeNumber == "14")then
TypeString = "初期羁绊计量格提升"
elseif(TypeNumber == "15")then
TypeString = "赛后加成"
elseif(TypeNumber == "16")then
TypeString = "粉丝数加成"
elseif(TypeNumber == "17")then
TypeString = "启发等级提升"
elseif(TypeNumber == "18")then
TypeString = "启发发生率提升"
elseif(TypeNumber == "19")then
TypeString = "得意率提升"
elseif(TypeNumber == "20")then
TypeString = "速度最大值提升"
elseif(TypeNumber == "21")then
TypeString = "耐力最大值提升"
elseif(TypeNumber == "22")then
TypeString = "力量最大值提升"
elseif(TypeNumber == "23")then
TypeString = "毅力最大值提升"
elseif(TypeNumber == "24")then
TypeString = "智力最大值提升"
elseif(TypeNumber == "25")then
TypeString = "事件回复量提升"
elseif(TypeNumber == "26")then
TypeString = "事件效果提升"
elseif(TypeNumber == "27")then
TypeString = "失败率下降"
elseif(TypeNumber == "28")then
TypeString = "体力消费下降"
elseif(TypeNumber == "29")then
TypeString = "迷你游戏效果提升"
elseif(TypeNumber == "30")then
TypeString = "技能Pt加成"
elseif(TypeNumber == "31")then
TypeString = "智力友情回复量提升"
else
TypeString = "未知效果"
mw.log("数据库中存在尚未定义的效果,其类型编号为:"..TypeNumber)
end
return TypeString
end
p["突破属性查询"]=function(frame)
local id = frame.args["id"]
local Effect_array = {}
-- 等级加成
local d_effect = data.support_card_effect_table
for i,v in pairs (d_effect) do
if(v.id == id)then
TypeString = getTypeString(v.type)
for tp = 0,4 do
Effect_array[TypeString..'_'..tp] = getGradeValue(tp,v)
-- mw.log(TypeString..'_'..tp..'突破',getGradeValue(tp,v))
end
end
end
-- 固有加成
local unique_effect = data.support_card_unique_effect
for i,v in pairs (unique_effect) do
if(v.id == id)then
-- 第一个固有加成
if(v.type_0 ~= "0" and tonumber(v.type_0)<100 )then
TypeString = getTypeString(v.type_0)
for tp = 0,4 do
-- 判断固有加成是否与等级加成一致
if(Effect_array[TypeString..'_'..tp]) ~= nil then
Effect_array[TypeString..'_'..tp] = Effect_array[TypeString..'_'..tp] + getUniqueValue(tp,v.lv,v.value_0,v.id)
else
Effect_array[TypeString..'_'..tp] = getUniqueValue(tp,v.lv,v.value_0,v.id)
end
--mw.log(TypeString..'_'..tp..'突破固有',getUniqueValue(tp,v.lv,v.value_0,v.id))
end
end
-- 第二个固有加成
if(v.type_1 ~= "0" and tonumber(v.type_0)<100 )then
TypeString = getTypeString(v.type_1)
for tp = 0,4 do
-- 判断固有加成是否与等级加成一致
if(Effect_array[TypeString..'_'..tp]) ~= nil then
Effect_array[TypeString..'_'..tp] = Effect_array[TypeString..'_'..tp] + getUniqueValue(tp,v.lv,v.value_1,v.id)
else
Effect_array[TypeString..'_'..tp] = getUniqueValue(tp,v.lv,v.value_1,v.id)
end
--mw.log(TypeString..'_'..tp..'突破固有',getUniqueValue(tp,v.lv,v.value_1,v.id))
end
end
-- 处理特殊固有加成
if(tonumber(v.type_0) >= 100)then
mw.log("此支援卡存在特殊的固有加成!编号:"..v.type_0)
end
end
end
-- 输出最终结果
--mw.logObject(Effect_array)
for key, value in pairs(Effect_array) do
frame:callParserFunction{name='#vardefine',args={key..'突破',value}}
-- mw.log(key..'突破',value)
end
end
return p

沪公网安备 31011002002714 号