メインメニューを開く

アークナイツwiki-ANwiki β

差分

MediaWiki:Gadget-expCalculator.js

7,828 バイト追加, 2020年1月29日 (水) 19:11
ページの作成:「 $(function () { showCurrentLang(); let lang = getLang(); document.title = { 'cn': '明日方舟升级计算器', 'en': 'Arknigh…」
$(function () {
showCurrentLang();
let lang = getLang();
document.title = { 'cn': '明日方舟升级计算器', 'en': 'Arknights Levelup Cost Calculator' }[lang];
let maxLevel = [];
let charExpMap = [];
let charUpCostMap = [];
let evolveGoldCost = [];
let haveBook = getLocalStorage("lv-book", "0+0+0+0+0").split("+");
$.getJSON("aklevel.json", function (data) {
maxLevel = data['maxLevel'];
charExpMap = data['characterExpMap'];
charUpCostMap = data['characterUpgradeCostMap'];
evolveGoldCost = data['evolveGoldCost'];
$("#book-basic").val(haveBook[0]);
$("#book-primary").val(haveBook[1]);
$("#book-middle").val(haveBook[2]);
$("#book-advanced").val(haveBook[3]);
$("#gold-asset").val(haveBook[4]);
});
$("#star").change(function () {
let star = $(this).val();
let maxEvolve = maxLevel[star - 1].length;
$("#current-evolve").html("");
$("#target-evolve").html("");
for (let i = 0; i < maxEvolve; i++) {
$("#current-evolve").append("<option>" + i + "</option>");
$("#target-evolve").append("<option>" + i + "</option>");
}
$("#current-evolve").val(0);
$("#target-evolve").val(0);
});
$("#current-evolve").change(function () {
if ($("#target-evolve").val() < $("#current-evolve").val()) {
$("#target-evolve").val($("#current-evolve").val());
}
});
$(document).on('click', '.level2max', function () {
let star = parseInt($("#star").val());
let opt = $(this).attr("opt");
let ev = parseInt($("#" + opt + "-evolve").val());
$("#" + opt + "-level").val(maxLevel[star - 1][ev]);
//console.log(maxLevel[star - 1][ev])
});
function toIntOrNull(val) {
let match = ("0" + val).match(/^\d*$/gm);
if (match && match.length > 0) { return parseInt(match); }
return null;
}
$(document).on('click', '#btn-calculate', function () {
$("#error-info").hide();
$("#tbody-result").html("");
let star = toIntOrNull($("#star").val());
let cev = toIntOrNull($("#current-evolve").val());
let cl = toIntOrNull($("#current-level").val());
let ce = toIntOrNull($("#current-exp").val());
let te = toIntOrNull($("#target-evolve").val());
let tl = toIntOrNull($("#target-level").val());
let ga = toIntOrNull($("#gold-asset").val());
let bb = toIntOrNull($("#book-basic").val());
let bp = toIntOrNull($("#book-primary").val());
let bm = toIntOrNull($("#book-middle").val());
let ba = toIntOrNull($("#book-advanced").val());
let errorInfos = {
"cn": ["等级必须为1~90的数字。", "已有金币/经验书数量只能为数字。", "目标等级不能低于或等于当前等级。", "等级超出精英化阶段范围。", "当前经验必须为正整数"],
"en": ["The level must be a number from 1 to 90.", "The input for gold coins/experience books available can only be numbers.", "The target level cannot be lower than or equal to the current level.", "The level is beyond the scope of the elite stage.", "Current experience must be a positive integer", "The current experience is outside the possible range, please check the input."]
}[lang];
if ((cl==null) || (tl==null)) {
$("#error-info").html(errorInfos[0]);
$("#error-info").show();
return;
}
if ((ga==null) || (bb==null) || (bp==null) || (bm==null) || (ba==null)) {
$("#error-info").html(errorInfos[1]);
$("#error-info").show();
return;
}
if (te < cev || (te === cev && tl <= cl)) {
$("#error-info").html(errorInfos[2]);
$("#error-info").show();
return;
}
if (cl > maxLevel[star - 1][cev] || tl > maxLevel[star - 1][te]) {
$("#error-info").html(errorInfos[3]);
$("#error-info").show();
return;
}
if ((ce==null) || ce < 0) {
$("#error-info").html(errorInfos[4]);
$("#error-info").show();
return;
} else if ((cl === maxLevel[star - 1][cev] && ce !== 0) || ((cl !== maxLevel[star - 1][cev] && ce >= charExpMap[cev][cl - 1]))) {
$("#error-info").html(errorInfos[5]);
$("#error-info").show();
return;
}
let es = cl === maxLevel[star - 1][cev] ? 0 : charExpMap[cev][cl - 1] - ce;
let cs = cl === maxLevel[star - 1][cev] ? 0 : charUpCostMap[cev][cl - 1] * es / (charExpMap[cev][cl - 1]);
cl++;
for (let i = cev, j = cl; i <= te; i++) {
while (i < te && j < maxLevel[star - 1][i]) {
es += charExpMap[i][j - 1];
cs += charUpCostMap[i][j - 1];
j++;
}
while (i === te && j < tl) {
es += charExpMap[i][j - 1];
cs += charUpCostMap[i][j - 1];
j++;
}
j = 1;
}
let ea = 0;
for (let i = cev; i < te; i++) {
ea += evolveGoldCost[star - 1][i];
}
let bs = bb * 200 + bp * 400 + bm * 1000 + ba * 2000;
let eb = es - bs;
if (eb < 0) eb = 0;
let lsn = Math.ceil((eb / 7400).toFixed(1));
let gs = (cs + ea).toFixed(1);
let gn = gs - ga - lsn * 360;
if (gn < 0) gn = 0;
let cen = Math.ceil((gn / 7500).toFixed(1));
$.each([
[{ 'cn': '体力总计', 'en': 'Total Sanity Cost' }[lang], "<b>" + (lsn + cen) * 30 + "</b> <sub>= " + lsn * 30 + " + " + cen * 30 + "</sub>"],
[{ 'cn': '经验', 'en': 'Exp' }[lang], "<b>" + eb + "</b> <sub>= " + es + " - " + bs + "</sub>"],
[{ 'cn': 'LS体力 <sub>场数</sub>', 'en': 'LS Sanity <sub>Cost</sub>' }[lang], "<b>" + lsn * 30 + "</b> <sub>= 30 * " + lsn + "</sub>"],
[{ 'cn': '金币', 'en': 'Coins' }[lang], "<b>" + gn + "</b> <sub>= " + gs + " - " + (ga + lsn * 360) + "</sub>"],
[{ 'cn': 'CE体力 <sub>场数</sub>', 'en': 'CE Sanity <sub>Cost</sub>' }[lang], "<b>" + cen * 30 + "</b> <sub>= 30 * " + cen + "</sub>"],
[{ 'cn': '升级金币', 'en': 'Coins for Leveling' }[lang], cs.toFixed(1)],
[{ 'cn': '精英化金币', 'en': 'Coins for Elite' }[lang], ea],
], function (_, v) {
$("#tbody-result").append('<tr><th scope="row" class="text-right">' + v[0] + '</th><td>' + v[1] + '</td></tr>');
});
setLocalStorage("lv-book", [bb, bp, bm, ba, ga].join("+"));
});
});