|
function calcRegstance(opt){ |
|
"use strict"; |
|
var { nataSpeed, nataLikabilityBoost, nataBoost, nataSkillLv, yunoSkillLv } = Object.assign({ |
|
nataSpeed: 1.75, |
|
nataLikabilityBoost: 1.23, |
|
nataBoost: 0, |
|
nataSkillLv: 20, |
|
yunoSkillLv: 20, |
|
registanceBorder: 0, |
|
}, opt); |
|
var nataBoost = calcBoost(nataBoost); |
|
var nataSkillBoost = calcNataSkillBoost(nataSkillLv); |
|
var nataAttackSpeed = nataSpeed * nataLikabilityBoost * nataSkillBoost * nataBoost; |
|
var yunoSkillDelay = calcYunoSkillDelay(yunoSkillLv); |
|
var yunoSkillEnchant = calcYunoSkillEnchant(yunoSkillLv); |
|
var registance = 0; |
|
var delta = 100; |
|
var sign = 1; |
|
function calcInner(){ |
|
var enchantTime = yunoSkillEnchant * (1-registance); |
|
var res = yunoSkillDelay - (enchantTime * nataAttackSpeed + enchantTime); |
|
if(Math.abs(res) < 0.00000001){ |
|
if(registance < registanceBorder / 10000) throw new Error("そんな耐性ねーよ"); |
|
return registance; |
|
} |
|
var nextSign = (res > 0) ? -1 : 1; |
|
if(nextSign !== sign){ |
|
delta /= 2; |
|
sign = nextSign; |
|
} |
|
registance += sign * delta; |
|
return calcInner(); |
|
} |
|
return calcInner() * 10000; |
|
} |
|
|
|
function calcNataSkillBoost(lv){ |
|
return 1 + ((lv / 5) | 0) * 0.05 + ((lv / 15) | 0) * 0.05 + ((lv / 20) | 0) * 0.1; |
|
} |
|
|
|
function calcYunoSkillDelay(lv){ |
|
return [50,50,49,49,49,48,48,48,46,46,44,44,42,42,40,38,38,36,33,30][lv-1]; |
|
} |
|
|
|
function calcYunoSkillEnchant(lv){ |
|
return [20,21,21,21,22,22,22,23,23,25,25,26,26,27,29,29,31,31,33,35][lv-1]; |
|
} |
|
|
|
function calcBoost(boost){ |
|
return 1 + 1/3 * boost; |
|
} |
|
|
|
var registanceBorder = 5000; |
|
var logs = []; |
|
var rarityIndex=0; |
|
for(var nataSpeed of [1.01, 1.20, 1.75]){ |
|
var logSppedLine = [`# ナタリーレアリティ: ${["SR", "SR+", "SSR"][rarityIndex]}`]; |
|
for(var nataBoost of [0, 1, 2, 3]){ |
|
var logLine = [ |
|
`## ナタリーブースト: ${nataBoost}回`, |
|
`| ${["ナタリースキルLv", "ユノスキルLv","最大保証耐性値"].join(" | ")} |`, |
|
`|----|----|----|`, |
|
]; |
|
|
|
for(var i=0;i<=20;i+=5){ |
|
var nataSkillLv = i || 1; |
|
for(var j=0;j<20;++j){ |
|
var yunoSkillLv = j+1; |
|
try{ |
|
logLine.push("| " + [nataSkillLv, yunoSkillLv, calcRegstance({nataSpeed, nataBoost, nataSkillLv, yunoSkillLv})].join(" | ") + " |"); |
|
} |
|
catch(err){ |
|
} |
|
} |
|
} |
|
logSppedLine.push(logLine.join("\n")); |
|
} |
|
logs.push(logSppedLine.join("\n\n")); |
|
rarityIndex++; |
|
} |
|
|
|
console.log(logs); |