Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press Ctrl-F5.
$(document).ready(function() { //on document ready
//create input field, class can be used on other stuffs. Priority order is important
$('div.statcalc .inputfield').attr("contenteditable","true");
$('div.statcalc .inputparent').on('blur keyup paste', setalllevels);
$('div.statcalc .inputfield').on('blur keyup paste', formulate);
$('div.statcalc .stat_calculator').on('focus click blur keyup paste', statcalculate);
$('div.statcalc .stat_calculator .mw-collapsible-toggle a').on('focus click blur keyup paste', statcalculate);
//update all levels to same
function setalllevels() {
var setnormallevel = $(this).parents('.statcalc').find('.parentnaturallevel').text();
var setpluslevel = $(this).parents('.statcalc').find('.parentpluslevel').text();
$(this).parents('.statcalc').find('.naturallevel').text(setnormallevel);
$(this).parents('.statcalc').find('.pluslevel').text(setpluslevel);
}
//Execute command from outside trigger
function statcalculate() {
$(this).parents('.statcalc').find('.naturallevel').blur();
}
//create variables
function formulate() {
//level variable
var naturallevel = +($(this).parents('.statcalc .stat-container').find('.naturallevel').text());
var pluslevel = +($(this).parents('.statcalc .stat-container').find('.pluslevel').text());
var sumlevel = naturallevel + pluslevel;
//decimals fraction limit
var fractionlimit = +($(this).closest('.statcalc').find('.fractionlimit').text());
if (fractionlimit > 19) {
fractionlimit = 20;
}
//treasure effect
var treasurehp = +($(this).closest('.statcalc').find('.treasurehp').text());
var treasureatk = +($(this).closest('.statcalc').find('.treasureattack').text());
var treasurebuffhp = +($(this).closest('.statcalc').find('.treasurebuffhp').text());
var treasurebuffatk = +($(this).closest('.statcalc').find('.treasurebuffattack').text());
var treasurehpeffect = (treasurehp / 100) * (treasurebuffhp / 100);
var treasureatkeffect = (treasureatk / 100) * (treasurebuffatk / 100);
//Talent and skill modifier
var talenthp = +($(this).parents('.statcalc .stat-container').find('.talenthp').text());
var talentatk = +($(this).parents('.statcalc .stat-container').find('.talentattack').text());
var individualmodhp = +($(this).parents('.statcalc .stat-container').find('.individualmodhp').text());
var individualmodatk = +($(this).parents('.statcalc .stat-container').find('.individualmodattack').text());
//Multi hit ratio
var multihit1 = +($(this).parents('.statcalc .stat-container').find('.multihit1').text().replace(/,/g,''));
var multihit2 = +($(this).parents('.statcalc .stat-container').find('.multihit2').text().replace(/,/g,''));
var multihit3 = +($(this).parents('.statcalc .stat-container').find('.multihit3').text().replace(/,/g,''));
var multihit4 = +($(this).parents('.statcalc .stat-container').find('.multihit4').text().replace(/,/g,''));
var multihit5 = +($(this).parents('.statcalc .stat-container').find('.multihit5').text().replace(/,/g,''));
var multihit6 = +($(this).parents('.statcalc .stat-container').find('.multihit6').text().replace(/,/g,''));
var sumhitratio = multihit1 + multihit2 + multihit3 + multihit4 + multihit5 + multihit6;
//Attack speed frames
var attackspeed = +($(this).parents('.statcalc .stat-container').find('.attackspeed').text());
//Global stat modifier
var globalmodhp = +($(this).closest('.statcalc').find('.globalmodhp').text());
var globalmodatk = +($(this).closest('.statcalc').find('.globalmodattack').text());
//Grow modifier
var basegrow = +($(this).closest('.statcalc').find('.basegrow').text());
var growmoda = +($(this).closest('.statcalc').find('.growmod1').text());
var growmodb = +($(this).closest('.statcalc').find('.growmod2').text());
var growmodc = +($(this).closest('.statcalc').find('.growmod3').text());
var growmodd = +($(this).closest('.statcalc').find('.growmod4').text());
var growmode = +($(this).closest('.statcalc').find('.growmod5').text());
var growlevela = +($(this).closest('.statcalc').find('.growlevel1').text());
var growlevelb = +($(this).closest('.statcalc').find('.growlevel2').text());
var growlevelc = +($(this).closest('.statcalc').find('.growlevel3').text());
var growleveld = +($(this).closest('.statcalc').find('.growlevel4').text());
var growlevele = +($(this).closest('.statcalc').find('.growlevel5').text());
//call grow multiplier how far have been gone
var growmultia = 0;
if (sumlevel < growlevela) {
growmultia = 0;
} else { growmultia = sumlevel - growlevela;}
var growmultib = 0;
if (sumlevel < growlevelb) {
growmultib = 0;
} else { growmultib = sumlevel - growlevelb;}
var growmultic = 0;
if (sumlevel < growlevelc) {
growmultic = 0;
} else { growmultic = sumlevel - growlevelc;}
var growmultid = 0;
if (sumlevel < growleveld) {
growmultid = 0;
} else { growmultid = sumlevel - growleveld;}
var growmultie = 0;
if (sumlevel < growlevele) {
growmultie = 0;
} else { growmultie = sumlevel - growlevele;}
//call how much penalty from grow multiplier
var growpliera = basegrow * (growmoda / 100);
var growplierb = growpliera * (growmodb / 100);
var growplierc = growplierb * (growmodc / 100);
var growplierd = growplierc * (growmodd / 100);
var growpliere = growplierd * (growmode / 100);
// Get initial stats
var hpinitial = +($(this).parents('.statcalc .stat-container').find('.hp-initial').text().replace(/,/g,''));
var apinitial = +($(this).parents('.statcalc .stat-container').find('.ap-initial').text().replace(/,/g,''));
// var dpsinitial = +($(this).parents('.statcalc .stat-container').find('.dps-initial').text().replace(/,/g,''));
//How many HP stats grown Math.round & Math.floor
var hpgrowninitial = Math.round(hpinitial + (hpinitial *
(sumlevel - 1) * basegrow/100) - ( hpinitial * (growpliera/100) * growmultia) - ( hpinitial * (growplierb/100) * growmultib) - ( hpinitial * (growplierc/100) * growmultic) - ( hpinitial * (growplierd/100) * growmultid) - ( hpinitial * (growpliere/100) * growmultie)) * (1 + treasurehpeffect);
var hpsuminitial = Math.floor( Math.floor( Math.floor( Math.floor(hpgrowninitial) * ((100 + talenthp)/100)) * ((100 + individualmodhp)/100)) * ((100 + globalmodhp)/100));
//Replace HP with calculated stat
$(this).parents('.stat-container').find('.hp-calculated').text(hpsuminitial.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
//AP per hit initial
var apinitialgrown = apinitial + (apinitial *
(sumlevel - 1) * basegrow/100) - ( apinitial * (growpliera/100) * growmultia) - ( apinitial * (growplierb/100) * growmultib) - ( apinitial * (growplierc/100) * growmultic) - ( apinitial * (growplierd/100) * growmultid) - ( apinitial * (growpliere/100) * growmultie);
var aphit1 = Math.round(apinitialgrown * (multihit1 / sumhitratio));
var aphit2 = Math.round(apinitialgrown * (multihit2 / sumhitratio));
var aphit3 = Math.round(apinitialgrown * (multihit3 / sumhitratio));
var aphit4 = Math.round(apinitialgrown * (multihit4 / sumhitratio));
var aphit5 = Math.round(apinitialgrown * (multihit5 / sumhitratio));
var aphit6 = Math.round(apinitialgrown * (multihit6 / sumhitratio));
//How much Attack stats grown
var aphit1c = Math.floor(Math.floor(Math.floor( Math.floor(aphit1 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit1)) * ((100 + globalmodatk)/100));
var aphit2c = Math.floor(Math.floor(Math.floor( Math.floor(aphit2 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit2)) * ((100 + globalmodatk)/100));
var aphit3c = Math.floor(Math.floor(Math.floor( Math.floor(aphit3 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit3)) * ((100 + globalmodatk)/100));
var aphit4c = Math.floor(Math.floor(Math.floor( Math.floor(aphit4 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit4)) * ((100 + globalmodatk)/100));
var aphit5c = Math.floor(Math.floor(Math.floor( Math.floor(aphit5 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit5)) * ((100 + globalmodatk)/100));
var aphit6c = Math.floor(Math.floor(Math.floor( Math.floor(aphit6 * (1 + treasureatkeffect)) * ((100 + individualmodatk)/100)) + (talentatk * multihit6)) * ((100 + globalmodatk)/100));
var apsuminitial = aphit1c + aphit2c + aphit3c + aphit4c + aphit5c + aphit6c;
//Replace Sum Attack with calculated stat
$(this).parents('.statcalc .stat-container').find('.ap-calculated').text(apsuminitial.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
//Replace Multi Hit attack with calculated stat
$(this).parents('.stat-container').find('.multihit1c').text(aphit1c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
$(this).parents('.stat-container').find('.multihit2c').text(aphit2c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
$(this).parents('.stat-container').find('.multihit3c').text(aphit3c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
$(this).parents('.stat-container').find('.multihit4c').text(aphit4c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
$(this).parents('.stat-container').find('.multihit5c').text(aphit5c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
$(this).parents('.stat-container').find('.multihit6c').text(aphit6c.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
//How much DPS stats grown
// var dpsgrowninitial = (dpsinitial * treasureatkeffect) + (((dpsinitial *
// (sumlevel - 1) * basegrow/100) - ( dpsinitial * (growpliera/100) * growmultia) - ( dpsinitial * (growplierb/100) * growmultib) - ( dpsinitial * (growplierc/100) * growmultic) - ( dpsinitial * (growplierd/100) * growmultid) - ( dpsinitial * (growpliere/100) * growmultie) ) * (1 + treasureatkeffect));
var dpssuminitial = apsuminitial * (30 / attackspeed);
//Replace Attack with calculated stat
$(this).parents('.stat-container').find('.dps-calculated').text(dpssuminitial.toLocaleString(undefined,{maximumFractionDigits: fractionlimit}));
}
//simple calculations
//Find root value then multiply by percent
$('div.simplemultipercent .inputfield').on('focus click blur keyup paste', simplecalcmultipercent);
function simplecalcmultipercent() {
var numa = +($(this).closest('.statcalc').find('.numa').text().replace(/,/g,''));
var numb = +($(this).closest('.statcalc').find('.numb').text().replace(/,/g,''));
var numc = +($(this).closest('.statcalc').find('.numc').text().replace(/,/g,''));
var calcresult = numa / (numb / 100) * (numc / 100);
$(this).closest('.statcalc').find('.result').text(calcresult.toLocaleString());
}
//end of script
});