MediaWiki:Herostatscalc.js: различия между версиями
Sadist007 (обсуждение | вклад) м (Откат правок Sadist007 (обсуждение) к версии MrGorun) Метка: откат |
(нет различий)
|
Версия от 00:44, 19 ноября 2020
/* Скрипт импортируется через [[MediaWiki:ImportJS]] */
/* Автор: АбырвалГ#3393 (Discord) */
/* Калькулятор характеристик героя */
var statsTable, hero, heroStats, insertRangeSlider, arrRares, listRares,
rankCnt, rankDiv, rankLabel, rankInput, rankLabelCnt,
doblCnt, doblDiv, doblLabel, doblInput, doblLabelCnt,
selectRare, doblCss, doblImg, siegeDiv, siegeCnt;
function init() {
hero = {};
heroStats = document.querySelectorAll("#parent .hero-block-icons");
hero.baseRareName = document.querySelector("#parent [class^='hero-border']").className;
statsTable = document.querySelectorAll("#calc_table_out tbody")[1];
targetHeroRare = document.getElementById("brdHero");
targetHeroRank = document.querySelector("#calc_table_out b");
selectRare = document.getElementById("slider_stats_ppls_out");
rankDiv = document.getElementById("slider_stats_rangs_out");
doblDiv = document.getElementById("slider_stats_dobl_out");
doblCss = "hero-border-dobl";
doblImg = document.createElement('img');
doblImg.src = "https://vignette.wikia.nocookie.net/dungeoncrusher/images/1/14/Доблесть_рамка.png/revision/latest?cb=20200316195856&format=original&path-prefix=ru";
doblImg.className = doblCss;
doblImg.hidden = true;
targetHeroRare.prepend(doblImg);
hero.sum = Number.parseInt(heroStats[0].innerText);
hero.hp = Number.parseInt(heroStats[1].innerText);
hero.atk = Number.parseInt(heroStats[2].innerText);
hero.def = Number.parseInt(heroStats[3].innerText);
hero.wis = Number.parseInt(heroStats[4].innerText);
hero.agi = Number.parseInt(heroStats[5].innerText);
hero.rank = 5500;
hero.rare = 25;
hero.dobl = 0;
siegeDiv = document.getElementById("switchSiegeTypes");
siegeCnt = 1;
if (siegeDiv) {
for (var i = 0; i < siegeDiv.children.length; i++) {
siegeDiv.children[i].setAttribute("onclick", "updateSiege(this)");
}
}
arrRares = [
{ key: "ob", cnt: 1, name: "Обычный", css: "hero-border-ob", rank: 10},
{ key: "neob", cnt: 1, name: "Необычный", css: "hero-border-neob", rank: 25},
{ key: "redkiy", cnt: 2, name: "Редкий", css: "hero-border-redkiy", rank: 50},
{ key: "redkiy2", cnt: 3, name: "Редчайший", css: "hero-border-redkiy2", rank: 100},
{ key: "epic", cnt: 3, name: "Эпический", css: "hero-border-epic", rank: 250},
{ key: "lega", cnt: 5, name: "Легендарный", css: "hero-border-lega", rank: 500},
{ key: "mifik", cnt: 7, name: "Мифический", css: "hero-border-mifik", rank: 2500},
{ key: "bozh", cnt: 8, name: "Божественный", css: "hero-border-bozh", rank: 3250},
{ key: "bozh2", cnt: 13, name: "Богоподобный", css: "hero-border-bozh2", rank: 4000},
{ key: "vechn", cnt: 17, name: "Вечный", css: "hero-border-vechn", rank: 4750},
{ key: "gal", cnt: 25, name: "Галактический", css: "hero-border-gal", rank: 5500}
];
listRares = new Map();
for (var i in arrRares) {
listRares.set(arrRares[i].key, arrRares[i]);
}
selectRare.classList.add("selectRare");
selectRare.style.display = "flex";
rankCnt = document.createElement('input');
rankCnt.type = "range";
rankCnt.id = "rankCnt";
rankCnt.min = 0;
rankCnt.max = 5500;
rankCnt.value = 5500;
rankCnt.step = 25;
rankCnt.setAttribute("oninput", "changeRankCnt()");
rankInput = document.createElement('input');
rankInput.type = "number";
rankInput.value = rankCnt.value;
rankInput.min = rankCnt.min;
rankInput.max = rankCnt.max;
rankInput.step = rankCnt.step;
rankInput.setAttribute("oninput", "changeRankInput()");
rankDiv.classList.add("rankRangeSelector");
rankLabel = document.createElement('div');
rankLabel.innerHTML = 'Кол-во рангов: ';
rankDiv.append(rankLabel);
rankDiv.append(rankInput);
rankDiv.append(rankCnt);
doblDiv.classList.add("doblRangeSelector");
doblCnt = document.createElement('input');
doblCnt.type = "range";
doblCnt.id = "doblCnt";
doblCnt.min = 0;
doblCnt.max = 35;
doblCnt.value = 0;
doblCnt.setAttribute("oninput", "changeDoblCnt()");
doblInput = document.createElement('input');
doblInput.type = "number";
doblInput.value = doblCnt.value;
doblInput.min = doblCnt.min;
doblInput.max = doblCnt.max;
doblInput.setAttribute("oninput", "changeDoblInput()");
doblLabel = document.createElement('div');
doblLabel.innerHTML = 'Кол-во доблестей: ';
doblDiv.append(doblLabel);
doblDiv.append(doblInput);
doblDiv.append(doblCnt);
setBaseRare();
addListOfRares();
}
function formatSum(s, k, i) {
return Number.parseInt(s / hero.baseRareCnt * k *
(1 + 0.2 * i)).toString().replace(/(\d)(?=(\d\d\d)+([^\d]|$))/g, '$1 ');
}
function updateHeroStats() {
var koef = hero.rare * //редкость текущая
siegeCnt * // осадный коэффициент
(1 + hero.rank * 0.001) * //ранги
(1 + 0.2 * hero.dobl); //доблесть
// hero.baseRareCnt базовая редкость
// SUM HP ATK DEF WIS AGI
for (var i = 1; i <= 8; i++) {
statsTable.children[i].children[1].innerHTML = formatSum(hero.sum, koef, i);
statsTable.children[i].children[2].innerHTML = formatSum(hero.hp, koef, i);
statsTable.children[i].children[3].innerHTML = formatSum(hero.atk, koef, i);
statsTable.children[i].children[4].innerHTML = formatSum(hero.def, koef, i);
statsTable.children[i].children[5].innerHTML = formatSum(hero.wis, koef, i);
statsTable.children[i].children[6].innerHTML = formatSum(hero.agi, koef, i);
}
}
function setBaseRare() {
for (var i in arrRares) {
if (arrRares[i].css == hero.baseRareName) {
hero.baseRareId = arrRares[i].key;
hero.baseRareCnt = arrRares[i].cnt;
break;
}
}
}
function changeRankCnt() {
hero.rank = Number.parseInt(rankCnt.value);
targetHeroRank.innerHTML = rankCnt.value;
rankInput.value = Number.parseInt(rankCnt.value);
updateHeroStats();
}
function changeRankInput() {
hero.rank = Number.parseInt(rankInput.value);
targetHeroRank.innerHTML = rankInput.value;
rankCnt.value = rankInput.value;
updateHeroStats();
}
function changeDoblCnt() {
hero.dobl = Number.parseInt(doblCnt.value);
doblInput.value = doblCnt.value;
if (doblInput.value == 0 && !doblImg.hidden) {
doblImg.hidden = true;
}
if (doblInput.value > 0 && doblImg.hidden) {
doblImg.hidden = false;
}
updateHeroStats();
}
function changeDoblInput() {
hero.dobl = Number.parseInt(doblInput.value);
doblCnt.value = doblInput.value;
if (doblCnt.value == 0 && !doblImg.hidden) {
doblImg.hidden = true;
}
if (doblCnt.value > 0 && doblImg.hidden) {
doblImg.hidden = false;
}
updateHeroStats();
}
function addListOfRares() {
for (var i in arrRares) {
var div = document.createElement('div');
div.setAttribute("onclick", "updateHeroRare(this)");
div.setAttribute("name", arrRares[i].key);
div.setAttribute("title", arrRares[i].name);
div.classList.add(arrRares[i].css+"_mini");
div.classList.add("hero-border-mini");
if (arrRares[i].cnt == 25) {
div.classList.add("checked");
}
var img = document.createElement('img');
img.src = targetHeroRare.children[1].src;
div.append(img);
selectRare.append(div);
}
}
function updateHeroRare(t) {
var newRare = listRares.get(t.getAttribute("name"));
var maxRank = false;
targetHeroRare.className = newRare.css;
hero.rare = newRare.cnt;
selectRare.getElementsByClassName("checked")[0].classList.remove("checked");
t.classList.add("checked");
if (rankCnt.value == rankCnt.max) {
maxRank = true;
}
if (newRare.rank <= 25 && rankCnt.step !== 5) {
rankCnt.step = 5;
rankInput.step = 5;
}
if (newRare.rank > 25 && rankCnt.step == 5) {
if (rankCnt.value < 25) {
rankCnt.value = 25;
rankInput.value = 25;
}
rankCnt.step = 25;
rankInput.step = 25;
}
rankCnt.max = newRare.rank;
rankInput.max = newRare.rank;
if (maxRank) {
rankInput.value = rankCnt.max;
rankCnt.value = rankCnt.max;
}
targetHeroRank.innerHTML = rankCnt.value;
hero.rank = Number.parseInt(rankCnt.value);
updateHeroStats();
}
function updateSiege(t) {
siegeCnt = Number.parseInt(t.dataset.id);
for (var i = 0; i < siegeDiv.children.length; i++) {
siegeDiv.children[i].classList.remove("checked");
}
t.classList.add("checked");
updateHeroStats();
}