// ==UserScript== // @name KOC Notebook // @version 20130929a // @namespace anote // @include *.kingdomsofcamelot.com/*main_src.php* // @include *.kingdomsofcamelot.com/*platforms/kabam* // @include *apps.facebook.com/kingdomsofcamelot/* // @include *kabam.com/kingdoms-of-camelot/play* // @include *facebook.com/connect/uiserver.php* // @include *facebook.com/*/serverfbml* // @include *facebook.com/dialog/feed* // @include *facebook.com/dialog/stream.publish* // @include *facebook.com/dialog/apprequests* // @description RangeCalculator // @downloadURL https://update.greasyfork.icu/scripts/4421/KOC%20Notebook.user.js // @updateURL https://update.greasyfork.icu/scripts/4421/KOC%20Notebook.meta.js // ==/UserScript== var Version = '20130929a'; // These switches are for testing, all should be set to false for released version: var DEBUG_TRACE = false; var DEBUG_SEARCH = false; var ENABLE_SAMPLE_TAB = false; var ENABLE_GM_AJAX_TRACE = false; var SEND_ALERT_AS_WHISPER = false; // end test switches var JSON;if(!JSON){JSON={};}(function(){"use strict";function f(n){return n<10?'0'+n:n;}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}if(typeof rep==='function'){value=rep.call(holder,key,value);}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i 700){ var c = getClientCoords (document.getElementById('main_engagement_tabs')); Options.nbWinPos.x = c.x+4; saveOptions (); } mainPop = new nbPopup ('nb', Options.nbWinPos.x, Options.nbWinPos.y, 850,850, Options.nbWinDrag, function (){ tabManager.hideTab(); Options.nbWinIsOpen=false; saveOptions(); }); mainPop.autoHeight (true); mainPop.getMainDiv().innerHTML = ''; AddMainTabLink('Notebook', eventHideShow, mouseMainTab); tabManager.init (mainPop.getMainDiv()); actionLog ("KOC Notebook v"+ Version +" Loaded"); if (Options.nbWinIsOpen && Options.nbTrackOpen){ mainPop.show (true); tabManager.showTab(); } window.addEventListener('unload', onUnload, false); } /**************************** Throne Item Caps Tab ******************************/ Tabs.ThroneCaps = { tabOrder : 100, // order to place tab in top bar tabLabel : 'ThroneCaps', // label to show in main window tabs myDiv : null, timer : null, init : function (div){ // called once, upon script startup var t = Tabs.ThroneCaps; t.myDiv = div; div.innerHTML = 'Removed. Look in Bot -> Throne -> Caps'; }, hide : function (){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.ThroneCaps; }, show : function (){ // called whenever this tab is shown var t = Tabs.ThroneCaps; }, } /**************************** Range Calculator Tab ******************************/ Tabs.RangeCalc = { tabOrder : 200, // order to place tab in top bar tabLabel : 'RangeCalc', // label to show in main window tabs myDiv : null, timer : null, init : function (div){ // called once, upon script startup var t = Tabs.RangeCalc; t.myDiv = div; div.innerHTML = 'Enter all numbers as positive number

\ \ \ \ \ \ \
My RangeOpponent
Range Buff:
Range Debuff:
Siege Buff:
Siege Debuff:
Ranged Buff:
Ranged Debuff:
\

\ A negative number here means you are outranged.
\ Siege Range Difference
\ Ranged Range Difference

'; t.loadRCOptions(); document.getElementById('myrangebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.rb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('myrangedebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.rdb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('mysiegebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.sb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('mysiegedebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.sdb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('myrangedbuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.rrb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('myrangeddebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.rrdb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('opprangebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.orb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('opprangedebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.ordb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('oppsiegebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.osb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('oppsiegedebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.osdb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('opprangedbuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.orrb = e.target.value; saveRCOptions(); t.calculate(); }, false); document.getElementById('opprangeddebuff').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.value < 0) alert('Enter positive numbers!'); RCOptions.orrdb = e.target.value; saveRCOptions(); t.calculate(); }, false); }, hide : function (){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.RangeCalc; }, show : function (){ // called whenever this tab is shown var t = Tabs.RangeCalc; }, calculate : function () { var rb = parseInt(document.getElementById('myrangebuff').value); var rdb = parseInt(document.getElementById('myrangedebuff').value); var sb = parseInt(document.getElementById('mysiegebuff').value); var sdb = parseInt(document.getElementById('mysiegedebuff').value); var rrb = parseInt(document.getElementById('myrangedbuff').value); var rrdb = parseInt(document.getElementById('myrangeddebuff').value); var orb = parseInt(document.getElementById('opprangebuff').value); var ordb = parseInt(document.getElementById('opprangedebuff').value); var osb = parseInt(document.getElementById('oppsiegebuff').value); var osdb = parseInt(document.getElementById('oppsiegedebuff').value); var orrb = parseInt(document.getElementById('opprangedbuff').value); var orrdb = parseInt(document.getElementById('opprangeddebuff').value); var sdiff = (rb + sb - ordb - osdb) - (orb + osb - rdb - sdb); if (sdiff < -25) sdiff = -25; if (sdiff > 185) sdiff = 185; var rdiff = (rb + rrb - ordb - orrdb) - (orb + orrb - rdb - rrdb); if (rdiff < -25) rdiff = -25; if (rdiff > 185) rdiff = 185; document.getElementById('siegewinner').value = sdiff; document.getElementById('rangedwinner').value = rdiff; }, loadRCOptions : function () { var t = Tabs.RangeCalc; readRCOptions(); document.getElementById('myrangebuff').value = RCOptions.rb; document.getElementById('myrangedebuff').value = RCOptions.rdb; document.getElementById('mysiegebuff').value = RCOptions.sb; document.getElementById('mysiegedebuff').value = RCOptions.sdb; document.getElementById('myrangedbuff').value = RCOptions.rrb; document.getElementById('myrangeddebuff').value = RCOptions.rrdb; document.getElementById('opprangebuff').value = RCOptions.orb; document.getElementById('opprangedebuff').value = RCOptions.ordb; document.getElementById('oppsiegebuff').value = RCOptions.osb; document.getElementById('oppsiegedebuff').value = RCOptions.osdb; document.getElementById('opprangedbuff').value = RCOptions.orrb; document.getElementById('opprangeddebuff').value = RCOptions.orrdb; t.calculate(); }, } /**************************** Unit Stats Calculator Tab ******************************/ Tabs.UnitCalc = { tabOrder : 300, // order to place tab in top bar tabLabel : 'UnitCalc', // label to show in main window tabs myDiv : null, timer : null, Trp0 : { //mm Life : 400, Atk : 100, Def : 13, Spd : 200, Rng : 20, }, Trp1 : { //scout Life : 20, Atk : 6, Def : 1, Spd : 3000, Rng : 20, }, Trp2 : { //pike Life : 600, Atk : 300, Def : 33, Spd : 300, Rng : 50, }, Trp3 : { //sw Life : 700, Atk : 200, Def : 63, Spd : 275, Rng : 30, }, Trp4 : { //arch Life : 500, Atk : 240, Def : 25, Spd : 250, Rng : 1200, }, Trp5 : { //cav Life : 1000, Atk : 500, Def : 45, Spd : 1000, Rng : 100, }, Trp6 : { //hc Life : 2000, Atk : 700, Def : 87, Spd : 750, Rng : 80, }, Trp7 : { //ball Life : 640, Atk : 900, Def : 40, Spd : 100, Rng : 1400, }, Trp8 : { //ram Life : 10000, Atk : 500, Def : 40, Spd : 120, Rng : 600, }, Trp9 : { //cat Life : 960, Atk : 1200, Def : 50, Spd : 80, Rng : 1500, }, Trp10 : { //blood Life : 2100, Atk : 1300, Def : 45, Spd : 900, Rng : 150, }, Trp11 : { //exec Life : 4200, Atk : 1700, Def : 70, Spd : 500, Rng : 120, }, Trp12 : { //siegewall Life : 8400, Atk : 200, Def : 140, Spd : 775, Rng : 120, }, Trp13 : { //flamearcher Life : 800, Atk : 1700, Def : 40, Spd : 140, Rng : 1600, }, Trp14 : { //hussar Life : 2800, Atk : 1050, Def : 130, Spd : 1150, Rng : 120, }, init : function (div){ // called once, upon script startup var t = Tabs.UnitCalc; t.myDiv = div; div.innerHTML = '
Unit Stats

\ \ \ \ \ \ \ \ \ \
UnitLifeAtkDefSpeedRangeUnitLifeAtkDefSpeedRange
Mm Archer
Scout Ball
Pike Cat
Sword Blood
Cav Exec
HC Siege Wall
Ram Flame Arch
Hussar

\
Config

\ Knight Combat Points

\ Fey Altar (Sacrifice) | Active: | Bonus Amount (two alters with one at Level 10 is 40% boost. one alter at level 9 is 18%)

\ \ \ \ \ \
ResearchLevelTR StatsLifeAtkDefSpdRng
Healing Potions (life) TR All Buff
Poisoned Edge (atk) TR Infantry Buff
Metal Alloys (def) TR Ranged Buff
Alloy Horseshoes (spd) TR Siege Buff
Fletching (rng) TR Horsed Buff

\ \ \ \ \ \ \ \
GuardiansWoodOreFoodStone
Level
Active
Set Bonus
Troops on Defense (Wood Guardian)
Item Boost+20atk+50atk+20def+50def
Empowered Iron Blessing (Fey)
'; // Event listener Knight Level document.getElementById('ucKnightLevel').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1) alert('Enter positive numbers!'); t.modifyUnitResearch(); }, false); // Event listener Fey Altar document.getElementById('ucFeyAltarActive').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucFeyAltarBonus').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.value > 40) alert('Enter a numbers between 1-40!'); t.modifyUnitResearch(); }, false); // Event listener Guardian document.getElementById('ucWood').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.vale > 12 ) alert('Enter a number between 0-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucOre').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.vale > 12 ) alert('Enter a number between 0-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucFood').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.vale > 12 ) alert('Enter a number between 0-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucStone').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; if (e.target.vale > 12 ) alert('Enter a number between 0-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucWoodAct').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucOreAct').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucFoodAct').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucStoneAct').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucGuardSet').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucDefending').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucOreBless').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); //Event listener Item Boosts document.getElementById('ucItemAtk20').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucItemAtk50').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucItemDef20').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); document.getElementById('ucItemDef50').addEventListener('change', function(e){ t.modifyUnitResearch(); }, false); // Event listener Research Level document.getElementById('ucResHP').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.vale > 12 ) alert('Enter a number between 1-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucResPE').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.vale > 12 ) alert('Enter a number between 1-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucResMA').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.vale > 12 ) alert('Enter a number between 1-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucResAH').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.vale > 12 ) alert('Enter a number between 1-12!'); t.modifyUnitResearch(); }, false); document.getElementById('ucResFL').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=1 ; if (e.target.value < 1 || e.target.vale > 12 ) alert('Enter a number between 1-12!'); t.modifyUnitResearch(); }, false); // Event listener Throne document.getElementById('ucLifeMod').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucLifeModInf').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucLifeModRng').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucLifeModSig').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucLifeModHor').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucAtkMod').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucAtkModInf').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucAtkModRng').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucAtkModSig').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucAtkModHor').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucDefMod').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucDefModInf').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucDefModRng').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucDefModSig').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucDefModHor').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucSpdMod').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucSpdModInf').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucSpdModRng').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucSpdModSig').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucSpdModHor').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucRngMod').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucRngModInf').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucRngModRng').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucRngModSig').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); document.getElementById('ucRngModHor').addEventListener('change', function(e){ if (isNaN(e.target.value)) e.target.value=0 ; t.modifyUnitResearch(); }, false); t.modifyUnitResearch(); }, hide : function (){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.UnitCalc; }, show : function (){ // called whenever this tab is shown var t = Tabs.UnitCalc; }, modifyUnitResearch : function (){ var t = Tabs.UnitCalc; var resLife = (5 * parseInt(document.getElementById('ucResHP').value)/100); var resAtk = (5 * parseInt(document.getElementById('ucResPE').value)/100); var resDef = (5 * parseInt(document.getElementById('ucResMA').value)/100); var resSpd = (5 * parseInt(document.getElementById('ucResAH').value)/100); var resRng = (5 * parseInt(document.getElementById('ucResFL').value)/100); var knight = parseFloat(document.getElementById('ucKnightLevel').value)/200; var guardLife = t.woodGuardTable(parseInt(document.getElementById('ucWood').value)); var guardAtk = t.oreGuardTable(parseInt(document.getElementById('ucOre').value)); var guardLifeAct = document.getElementById('ucWoodAct').checked ? 1 : 0; var guardAtkAct = document.getElementById('ucOreAct').checked ? 1 : 0; var guardSetAct = document.getElementById('ucGuardSet').checked ? 1 : 0; var guardOreBless = document.getElementById('ucOreBless').checked ? 1 : 0; var defending = document.getElementById('ucDefending').checked ? 1 : 0; var itemAtk = 0; var itemDef = 0; var feyAltarAct = document.getElementById('ucFeyAltarActive').checked ? 1 : 0; var feyAltar = parseFloat(document.getElementById('ucFeyAltarBonus').value)/100; if (document.getElementById('ucItemAtk20').checked) itemAtk = 0.2 + itemAtk; if (document.getElementById('ucItemAtk50').checked) itemAtk = 0.5 + itemAtk; if (document.getElementById('ucItemDef20').checked) itemDef = 0.2 + itemDef; if (document.getElementById('ucItemDef50').checked) itemDef = 0.5 + itemDef; // calculate guardian if (guardSetAct) { //if you have set bonus if (guardLifeAct && defending) { //if your want defending troop stats guardLife = (guardLife/2 + guardLife) / 100; guardAtk = (guardAtk/200) + guardOreBless*0.15 + guardOreBless*0.15*(guardAtk/200); } else if (guardAtkAct) { guardAtk = (1.5*guardAtk/100) + guardOreBless*0.15 + guardOreBless*(1.5*guardAtk/100); if(defending) guardLife = guardLife/200; else guardLife = 0; } else { guardAtk = (guardAtk/200) + guardOreBless*0.15 + guardOreBless*0.15*(guardAtk/200); if(defending) guardLife = guardLife/200; else guardLife = 0; } } else { // don't have set bonus if (guardLifeAct && defending) { guardLife = guardLife / 100; guardAtk = 0; } else if (guardAtkAct) { guardAtk = (guardAtk/100) + guardOreBless*0.15 + guardOreBless*0.15*(guardAtk/100); guardLife = 0; } else { guardAtk = 0; guardLife = 0; } } //Trp0 - mm document.getElementById('ucTrp0Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp0.Life + (1 + feyAltar*feyAltarAct) * t.Trp0.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModInf').value))/100))); document.getElementById('ucTrp0Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp0.Atk + (1 + feyAltar*feyAltarAct) * t.Trp0.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModInf' ).value))/100))); document.getElementById('ucTrp0Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp0.Def + (1 + feyAltar*feyAltarAct) * t.Trp0.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModInf' ).value))/100))); document.getElementById('ucTrp0Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp0.Spd + (1 + feyAltar*feyAltarAct) * t.Trp0.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModInf' ).value))/100))); document.getElementById('ucTrp0Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp0.Rng + (1 + feyAltar*feyAltarAct) * t.Trp0.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModInf' ).value))/100))); //Trp1 - scout document.getElementById('ucTrp1Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp1.Life + (1 + feyAltar*feyAltarAct) * t.Trp1.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModInf').value))/100))); document.getElementById('ucTrp1Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp1.Atk + (1 + feyAltar*feyAltarAct) * t.Trp1.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModInf' ).value))/100))); document.getElementById('ucTrp1Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp1.Def + (1 + feyAltar*feyAltarAct) * t.Trp1.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModInf' ).value))/100))); document.getElementById('ucTrp1Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp1.Spd + (1 + feyAltar*feyAltarAct) * t.Trp1.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModInf' ).value))/100))); document.getElementById('ucTrp1Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp1.Rng + (1 + feyAltar*feyAltarAct) * t.Trp1.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModInf' ).value))/100))); //Trp2 - pike document.getElementById('ucTrp2Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp2.Life + (1 + feyAltar*feyAltarAct) * t.Trp2.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModInf').value))/100))); document.getElementById('ucTrp2Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp2.Atk + (1 + feyAltar*feyAltarAct) * t.Trp2.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModInf' ).value))/100))); document.getElementById('ucTrp2Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp2.Def + (1 + feyAltar*feyAltarAct) * t.Trp2.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModInf' ).value))/100))); document.getElementById('ucTrp2Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp2.Spd + (1 + feyAltar*feyAltarAct) * t.Trp2.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModInf' ).value))/100))); document.getElementById('ucTrp2Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp2.Rng + (1 + feyAltar*feyAltarAct) * t.Trp2.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModInf' ).value))/100))); //Trp3 - sw document.getElementById('ucTrp3Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp3.Life + (1 + feyAltar*feyAltarAct) * t.Trp3.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModInf').value))/100))); document.getElementById('ucTrp3Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp3.Atk + (1 + feyAltar*feyAltarAct) * t.Trp3.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModInf' ).value))/100))); document.getElementById('ucTrp3Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp3.Def + (1 + feyAltar*feyAltarAct) * t.Trp3.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModInf' ).value))/100))); document.getElementById('ucTrp3Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp3.Spd + (1 + feyAltar*feyAltarAct) * t.Trp3.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModInf' ).value))/100))); document.getElementById('ucTrp3Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp3.Rng + (1 + feyAltar*feyAltarAct) * t.Trp3.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModInf' ).value))/100))); //Trp4 - arch document.getElementById('ucTrp4Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp4.Life + (1 + feyAltar*feyAltarAct) * t.Trp4.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModRng').value))/100))); document.getElementById('ucTrp4Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp4.Atk + (1 + feyAltar*feyAltarAct) * t.Trp4.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModRng' ).value))/100))); document.getElementById('ucTrp4Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp4.Def + (1 + feyAltar*feyAltarAct) * t.Trp4.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModRng' ).value))/100))); document.getElementById('ucTrp4Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp4.Spd + (1 + feyAltar*feyAltarAct) * t.Trp4.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModRng' ).value))/100))); document.getElementById('ucTrp4Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp4.Rng + (1 + feyAltar*feyAltarAct) * t.Trp4.Rng * (resRng + t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModRng' ).value))/100))); //Trp5 - cav document.getElementById('ucTrp5Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp5.Life + (1 + feyAltar*feyAltarAct) * t.Trp5.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModHor').value))/100))); document.getElementById('ucTrp5Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp5.Atk + (1 + feyAltar*feyAltarAct) * t.Trp5.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModHor' ).value))/100))); document.getElementById('ucTrp5Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp5.Def + (1 + feyAltar*feyAltarAct) * t.Trp5.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModHor' ).value))/100))); document.getElementById('ucTrp5Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp5.Spd + (1 + feyAltar*feyAltarAct) * t.Trp5.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModHor' ).value))/100))); document.getElementById('ucTrp5Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp5.Rng + (1 + feyAltar*feyAltarAct) * t.Trp5.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModHor' ).value))/100))); //Trp6 - hc document.getElementById('ucTrp6Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp6.Life + (1 + feyAltar*feyAltarAct) * t.Trp6.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModHor').value))/100))); document.getElementById('ucTrp6Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp6.Atk + (1 + feyAltar*feyAltarAct) * t.Trp6.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModHor' ).value))/100))); document.getElementById('ucTrp6Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp6.Def + (1 + feyAltar*feyAltarAct) * t.Trp6.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModHor' ).value))/100))); document.getElementById('ucTrp6Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp6.Spd + (1 + feyAltar*feyAltarAct) * t.Trp6.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModHor' ).value))/100))); document.getElementById('ucTrp6Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp6.Rng + (1 + feyAltar*feyAltarAct) * t.Trp6.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModHor' ).value))/100))); //Trp7 - ball document.getElementById('ucTrp7Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp7.Life + (1 + feyAltar*feyAltarAct) * t.Trp7.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModSig').value))/100))); document.getElementById('ucTrp7Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp7.Atk + (1 + feyAltar*feyAltarAct) * t.Trp7.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModSig' ).value))/100))); document.getElementById('ucTrp7Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp7.Def + (1 + feyAltar*feyAltarAct) * t.Trp7.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModSig' ).value))/100))); document.getElementById('ucTrp7Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp7.Spd + (1 + feyAltar*feyAltarAct) * t.Trp7.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModSig' ).value))/100))); document.getElementById('ucTrp7Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp7.Rng + (1 + feyAltar*feyAltarAct) * t.Trp7.Rng * (resRng + t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModSig' ).value))/100))); //Trp8 - ram document.getElementById('ucTrp8Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp8.Life + (1 + feyAltar*feyAltarAct) * t.Trp8.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModSig').value))/100))); document.getElementById('ucTrp8Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp8.Atk + (1 + feyAltar*feyAltarAct) * t.Trp8.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModSig' ).value))/100))); document.getElementById('ucTrp8Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp8.Def + (1 + feyAltar*feyAltarAct) * t.Trp8.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModSig' ).value))/100))); document.getElementById('ucTrp8Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp8.Spd + (1 + feyAltar*feyAltarAct) * t.Trp8.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModSig' ).value))/100))); document.getElementById('ucTrp8Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp8.Rng + (1 + feyAltar*feyAltarAct) * t.Trp8.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModSig' ).value))/100))); //Trp9 - cat document.getElementById('ucTrp9Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp9.Life + (1 + feyAltar*feyAltarAct) * t.Trp9.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModSig').value))/100))); document.getElementById('ucTrp9Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp9.Atk + (1 + feyAltar*feyAltarAct) * t.Trp9.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModSig' ).value))/100))); document.getElementById('ucTrp9Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp9.Def + (1 + feyAltar*feyAltarAct) * t.Trp9.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModSig' ).value))/100))); document.getElementById('ucTrp9Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp9.Spd + (1 + feyAltar*feyAltarAct) * t.Trp9.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModSig' ).value))/100))); document.getElementById('ucTrp9Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp9.Rng + (1 + feyAltar*feyAltarAct) * t.Trp9.Rng * (resRng + t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModSig' ).value))/100))); //Trp10 - blood //verified on 11/30 that bloods don't use infantry buff for atk/def. other stats unknown document.getElementById('ucTrp10Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp10.Life + (1 + feyAltar*feyAltarAct) * t.Trp10.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),0)/100))); document.getElementById('ucTrp10Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp10.Atk + (1 + feyAltar*feyAltarAct) * t.Trp10.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),0)/100))); document.getElementById('ucTrp10Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp10.Def + (1 + feyAltar*feyAltarAct) * t.Trp10.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),0)/100))); document.getElementById('ucTrp10Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp10.Spd + (1 + feyAltar*feyAltarAct) * t.Trp10.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),0)/100))); document.getElementById('ucTrp10Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp10.Rng + (1 + feyAltar*feyAltarAct) * t.Trp10.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),0)/100))); //Trp11 - exec //verified on 11/30 that exec don't use infantry buff for atk/def. other stats unknown document.getElementById('ucTrp11Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp11.Life + (1 + feyAltar*feyAltarAct) * t.Trp11.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),0)/100))); document.getElementById('ucTrp11Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp11.Atk + (1 + feyAltar*feyAltarAct) * t.Trp11.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),0)/100))); document.getElementById('ucTrp11Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp11.Def + (1 + feyAltar*feyAltarAct) * t.Trp11.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),0)/100))); document.getElementById('ucTrp11Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp11.Spd + (1 + feyAltar*feyAltarAct) * t.Trp11.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),0)/100))); document.getElementById('ucTrp11Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp11.Rng + (1 + feyAltar*feyAltarAct) * t.Trp11.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),0)/100))); //Trp12 - siege wall document.getElementById('ucTrp12Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp12.Life + (1 + feyAltar*feyAltarAct) * t.Trp12.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModSig').value))/100))); document.getElementById('ucTrp12Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp12.Atk + (1 + feyAltar*feyAltarAct) * t.Trp12.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModSig' ).value))/100))); document.getElementById('ucTrp12Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp12.Def + (1 + feyAltar*feyAltarAct) * t.Trp12.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModSig' ).value))/100))); document.getElementById('ucTrp12Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp12.Spd + (1 + feyAltar*feyAltarAct) * t.Trp12.Spd * ( + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModSig' ).value))/100))); document.getElementById('ucTrp12Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp12.Rng + (1 + feyAltar*feyAltarAct) * t.Trp12.Rng * ( + t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModSig' ).value))/100))); //Trp13 - flame arch document.getElementById('ucTrp13Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp13.Life + (1 + feyAltar*feyAltarAct) * t.Trp13.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModRng').value))/100))); document.getElementById('ucTrp13Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp13.Atk + (1 + feyAltar*feyAltarAct) * t.Trp13.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModRng' ).value))/100))); document.getElementById('ucTrp13Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp13.Def + (1 + feyAltar*feyAltarAct) * t.Trp13.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModRng' ).value))/100))); document.getElementById('ucTrp13Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp13.Spd + (1 + feyAltar*feyAltarAct) * t.Trp13.Spd * ( t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModRng' ).value))/100))); document.getElementById('ucTrp13Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp13.Rng + (1 + feyAltar*feyAltarAct) * t.Trp13.Rng * (resRng + t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModRng' ).value))/100))); //Trp14 - hussar document.getElementById('ucTrp14Life').innerHTML = t.round1decimals( (1 + guardLife) * ( (1 + feyAltar*feyAltarAct) * t.Trp14.Life + (1 + feyAltar*feyAltarAct) * t.Trp14.Life * (resLife + t.maxBuff('life',parseFloat(document.getElementById('ucLifeMod').value),parseFloat(document.getElementById('ucLifeModHor').value))/100))); document.getElementById('ucTrp14Atk').innerHTML = t.round1decimals( (1 + guardAtk) * ( (1 + feyAltar*feyAltarAct) * t.Trp14.Atk + (1 + feyAltar*feyAltarAct) * t.Trp14.Atk * (resAtk + knight + itemAtk + t.maxBuff('atk', parseFloat(document.getElementById('ucAtkMod' ).value),parseFloat(document.getElementById('ucAtkModHor' ).value))/100))); document.getElementById('ucTrp14Def').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp14.Def + (1 + feyAltar*feyAltarAct) * t.Trp14.Def * (resDef + knight + itemDef + t.maxBuff('def', parseFloat(document.getElementById('ucDefMod' ).value),parseFloat(document.getElementById('ucDefModHor' ).value))/100))); document.getElementById('ucTrp14Spd').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp14.Spd + (1 + feyAltar*feyAltarAct) * t.Trp14.Spd * (resSpd + t.maxBuff('spd', parseFloat(document.getElementById('ucSpdMod' ).value),parseFloat(document.getElementById('ucSpdModHor' ).value))/100))); document.getElementById('ucTrp14Rng').innerHTML = t.round1decimals( ( (1 + feyAltar*feyAltarAct) * t.Trp14.Rng + (1 + feyAltar*feyAltarAct) * t.Trp14.Rng * ( t.maxBuff('rng', parseFloat(document.getElementById('ucRngMod' ).value),parseFloat(document.getElementById('ucRngModHor' ).value))/100))); }, maxBuff : function (stat,a,b) { if (stat == 'life') if (a+b > 250) return 250; else if (a+b < -50) return -50; else return a+b; if (stat == 'atk') if (a+b > 1000) return 1000; else if (a+b < -25) return -25; else return a+b; if (stat == 'def') if (a+b > 5000) return 5000; else if (a+b < -25) return -25; else return a+b; if (stat == 'spd') if (a+b > 375) return 375; else if (a+b < -50) return -50; else return a+b; if (stat == 'rng') if (a+b > 185) return 185; else if (a+b < -25) return -25; else return a+b; }, round1decimals : function (number) { return Math.round(number * 10) / 10; }, woodGuardTable : function (number) { if (number == '1') return 1; else if (number == '2') return 2; else if (number == '3') return 3; else if (number == '4') return 4; else if (number == '5') return 6; else if (number == '6') return 8; else if (number == '7') return 10; else if (number == '8') return 13; else if (number == '9') return 16; else if (number == '10') return 20; else if (number == '11') return 25; else if (number == '12') return 35; else return 0; }, oreGuardTable : function (number) { if (number == '1') return 2; else if (number == '2') return 4; else if (number == '3') return 6; else if (number == '4') return 8; else if (number == '5') return 12; else if (number == '6') return 16; else if (number == '7') return 20; else if (number == '8') return 26; else if (number == '9') return 32; else if (number == '10') return 40; else if (number == '11') return 50; else if (number == '12') return 65; else return 0; }, } /**************************** Advisor Tab ******************************/ Tabs.Advisor = { tabOrder : 400, // order to place tab in top bar tabLabel : 'Advisor', // label to show in main window tabs myDiv : null, timer : null, init : function (div){ // called once, upon script startup var t = Tabs.Advisor; t.myDiv = div; div.innerHTML = 'Unique Advisors
\ Show: Kay | Wynn |\ Mordred | Harbinger |\ Warhorse | Father Winter\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Kay 1 Siege Attak Debuff -6.5 -9.5 -14 -20 -27.5-36.5-47 -59 -72.5-87.5-104 -122 Siege Attak Debuff
Kay 2 Accuracy Debuff -0.06-0.08-0.11-0.15-0.2 -0.26-0.33-0.41-0.5 -0.6 -0.71-0.83Accuracy Debuff
Kay 3 Life +13 +19 +28 +40 +55 +73 +94 +118 +145 +175 +208 +244 Life
Kay 4 Defense +106 +118 +136 +160 +190 +226 +268 +316 +370 +430 +496 +568 Defense
Kay 5 Range Debuff -6.5 -9.5 -14 -20 -27.5-36.5-47 -59 -72.5-87.5-104 -122 Range Debuff
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Wynn 1 Research Speed +14 +18 +24 +32 +42 +54 +68 +84 +102 +122 +144 +168 Research Speed
Wynn 2 Aetherstone Cap +7 +11 +17 +25 +35 +47 +61 +77 +95 +115 +137 +161 Aetherstone Cap
Wynn 3 Storehouse Protection +13 +19 +28 +40 +55 +73 +94 +118 +145 +175 +208 +244 Storehouse Protection
Wynn 4 Troop Training Speed +44 +52 +64 +80 +100 +124 +152 +184 +220 +260 +304 +353 Troop Training Speed
Wynn 5 Upkeep Reduction +6 +8 +11 +15 +20 +26 +33 +41 +50 +60 +71 +83 Upkeep Reduction
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Mordred 1 Troop Training Speed +14 +18 +24 +32 +42 +54 +68 +84 +102 +122 +144 +168 Troop Training Speed
Mordred 2 Reinforcement March Speed+24 +32 +44 +60 +80 +104 +132 +164 +200 +240 +284 +332 Reinforcement March Speed
Mordred 3 Range Debuff -3 -5 -8 -12 -17 -23 -30 -38 -47 -57 -68 -80 Range Debuff
Mordred 4 Defense +106 +118 +136 +160 +190 +226 +268 +316 +370 +430 +496 +568 Defense
Mordred 5 Construction Speed +27 +33 +42 +54 +69 +87 +108 +132 +159 +189 +222 +258 Construction Speed
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Harbinger 1 Horsed Combat Speed +7 +11 +17 +25 +35 +47 +61 +77 +95 +115 +137 +161 Horsed Combat Speed
Harbinger 2 Ranged Range Debuff -3 -5 -8 -12 -17 -23 -30 -38 -47 -57 -68 -80 Ranged Range Debuff
Harbinger 3 Defense Debuff -44 -52 -64 -80 -100 -124 -152 -184 -220 -260 -304 -353 Defense Debuff
Harbinger 4 Attack Debuff -13 -19 -28 -40 -55 -73 -94 -118 -145 -175 -208 -244 Attack Debuff
Harbinger 5 Life Debuff -7 -11 -17 -25 -35 -47 -61 -77 -95 -115 -137 -161 Life Debuff
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Warhorse 1 Attack Debuff -13 -19 -28 -40 -55 -73 -94 -118 -145 -175 -208 -244 Attack Debuff
Warhorse 2 Horsed Life +7 +11 +17 +25 +35 +47 +61 +77 +95 +115 +137 +161 Horsed Life
Warhorse 3 Horsed Defense +23 +29 +38 +50 +65 +83 +104 +128 +155 +185 +218 +254 Horsed Defense
Warhorse 4 Life +7 +11 +17 +25 +35 +47 +61 +77 +95 +115 +137 +161 Life
Warhorse 5 Defense +44 +52 +64 +80 +100 +124 +152 +184 +220 +260 +304 +353 Defense
Advisor RowAttribute +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 Attribute
Father Winter1 Life +7 +11 +17 +25 +35 +47 +61 +77 +95 +115 +137 +161 Life
Father Winter2 Range +1.5 +- +- +- +- +- +- +- +- +- +- +- Range
Father Winter3 Defense +44 +52 +64 +80 +100 +124 +152 +184 +220 +260 +304 +353 Defense
Father Winter4 Combat Speed +13 +19 +28 +40 +55 +73 +94 +118 +145 +175 +208 +244 Combat Speed
Father Winter5 March Speed +16.5+- +- +- +- +- +- +- +- +- +- +- March Speed
'; document.getElementById('advisorKay').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); document.getElementById('advisorWynn').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); document.getElementById('advisorMordred').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); document.getElementById('advisorHarbinger').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); document.getElementById('advisorWarhorse').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); document.getElementById('advisorWinter').addEventListener('change', function(e){ t.modifyAdvisor(); }, false); }, hide : function (){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.Advisor; }, show : function (){ // called whenever this tab is shown var t = Tabs.Advisor; }, modifyAdvisor : function (){ var t = Tabs.Advisor; var kay = document.getElementById('advisorKay').checked ? 1 : 0; var wynn = document.getElementById('advisorWynn').checked ? 1 : 0; var mordred = document.getElementById('advisorMordred').checked ? 1 : 0; var harbinger = document.getElementById('advisorHarbinger').checked ? 1 : 0; var warhorse = document.getElementById('advisorWarhorse').checked ? 1 : 0; var winter = document.getElementById('advisorWinter').checked ? 1 : 0; if (kay) document.getElementById('tableKay').style.display = ''; else document.getElementById('tableKay').style.display = 'none'; if (wynn) document.getElementById('tableWynn').style.display = ''; else document.getElementById('tableWynn').style.display = 'none'; if (mordred) document.getElementById('tableMordred').style.display = ''; else document.getElementById('tableMordred').style.display = 'none'; if (harbinger) document.getElementById('tableHarbinger').style.display = ''; else document.getElementById('tableHarbinger').style.display = 'none'; if (warhorse) document.getElementById('tableWarhorse').style.display = ''; else document.getElementById('tableWarhorse').style.display = 'none'; if (winter) document.getElementById('tableWinter').style.display = ''; else document.getElementById('tableWinter').style.display = 'none'; }, } /*********************************** Options Tab ***********************************/ Tabs.Options = { tabOrder: 800, myDiv : null, fixAvailable : {}, init : function (div){ var t = Tabs.Options; t.myDiv = div; try { m = '
\ \ \
Notebook Config:


'; div.innerHTML = m; document.getElementById('nbupdatenow').addEventListener ('click', function(){ AutoUpdater_152625.call(true,true); },false); } catch (e) { div.innerHTML = '
'+ e.name +' : '+ e.message +'
'; } }, hide : function (){ }, show : function (){ }, } /*********************************** Issues Tab ***********************************/ Tabs.Issues = { tabOrder: 850, tabLabel : 'Issues', // label to show in main window tabs myDiv : null, timer : null, init : function (div){ // called once, upon script startup var t = Tabs.Issues; t.myDiv = div; div.innerHTML = 'Known Issues

'; div.innerHTML += '1. Bloods, Execs do not benefit from infantry tr items
'; div.innerHTML += '2. Siege Walls do not benefit from alloy horseshoes research
'; div.innerHTML += '3. Ore guardian bonus in ascended cities have greater attack stats
'; div.innerHTML += '4. Ore guardian bonus is applied to defending troops (from kabam forums)
'; div.innerHTML += '
'; }, hide : function (){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.Issues; }, show : function (){ // called whenever this tab is shown var t = Tabs.Issues; }, } /*********************************** Log Tab ***********************************/ Tabs.ActionLog = { tabOrder: 900, tabLabel : 'Log', myDiv : null, logTab : null, maxEntries: 300, last50 : [], state : null, init : function (div){ var t = Tabs.ActionLog; t.myDiv = div; t.myDiv.innerHTML = '
ACTION LOG - VERSION: '+ Version+'
\
'; t.logTab = document.getElementById('nbactionlog'); t.state = 1; var a = JSON2.parse(GM_getValue ('log_'+getServerId(), '[]')); if (matTypeof(a) == 'array'){ t.last50 = a; for (var i=0; i= t.maxEntries) t.logTab.deleteRow(t.maxEntries-1); var row = t.logTab.insertRow(0); row.vAlign = 'top'; row.insertCell(0).innerHTML = ts; row.insertCell(1).innerHTML = msg; }, log : function (msg){ var t = Tabs.ActionLog; var ts = new Date().toTimeString().substring (0,8); t._addTab (msg, ts); while (t.last50.length >= 50) t.last50.shift(); t.last50.push ({msg:msg, ts:ts}); }, } function actionLog (msg){ if (!Tabs.ActionLog.tabDisabled) Tabs.ActionLog.log (msg); } var tabManager = { tabList : {}, // {name, obj, div} currentTab : null, init : function (mainDiv){ var t = tabManager; var sorter = []; for (k in Tabs){ if (!Tabs[k].tabDisabled){ t.tabList[k] = {}; t.tabList[k].name = k; t.tabList[k].obj = Tabs[k]; if (Tabs[k].tabLabel != null) t.tabList[k].label = Tabs[k].tabLabel; else t.tabList[k].label = k; if (Tabs[k].tabOrder != null) sorter.push([Tabs[k].tabOrder, t.tabList[k]]); else sorter.push([1000, t.tabList[k]]); t.tabList[k].div = document.createElement('div'); } } sorter.sort (function (a,b){return a[0]-b[0]}); var m = ''; for (var i=0; i'+ sorter[i][1].label +''; //m += ''; if ((i+1)%9 == 0) m+=''; } m+='
'+ sorter[i][1].label +'
'; //m += ''+ Version +' '; mainPop.getMainTopDiv().innerHTML = m; for (k in t.tabList) { if (t.tabList[k].name == Options.currentTab) t.currentTab =t.tabList[k] ; document.getElementById('nbtc'+ k).addEventListener('click', this.e_clickedTab, false); var div = t.tabList[k].div; div.style.display = 'none'; div.style.height = '100%'; mainDiv.appendChild(div); try { t.tabList[k].obj.init(div); } catch (e){ div.innerHTML = "INIT ERROR: "+ e; } } if (t.currentTab == null) t.currentTab = sorter[0][1]; t.setTabStyle (document.getElementById ('nbtc'+ t.currentTab.name), true); t.currentTab.div.style.display = 'block'; }, hideTab : function (){ var t = tabManager; t.currentTab.obj.hide(); }, showTab : function (){ var t = tabManager; t.currentTab.obj.show(); }, setTabStyle : function (e, selected){ if (selected){ e.className = 'sel'; } else { e.className = 'notSel'; } }, e_clickedTab : function (e){ var t = tabManager; var newTab = t.tabList[e.target.parentNode.parentNode.id.substring(4)]; if (t.currentTab.name != newTab.name){ t.setTabStyle (document.getElementById ('nbtc'+ t.currentTab.name), false); t.setTabStyle (document.getElementById ('nbtc'+ newTab.name), true); t.currentTab.obj.hide (); t.currentTab.div.style.display = 'none'; t.currentTab = newTab; newTab.div.style.display = 'block'; Options.currentTab = newTab.name; } newTab.obj.show(); }, } function onUnload (){ Options.nbWinPos = mainPop.getLocation(); if (!ResetAll) saveOptions(); } function mouseMainTab (me){ // right-click on main button resets window location if (me.button == 2){ var c = getClientCoords (document.getElementById('main_engagement_tabs')); mainPop.setLocation ({x: c.x+4, y: c.y+c.height}); } } function eventHideShow (){ if (mainPop.toggleHide(mainPop)){ tabManager.showTab(); Options.nbWinIsOpen = true; } else { tabManager.hideTab(); Options.nbWinIsOpen = false; } saveOptions(); } function hideMe (){ mainPop.show (false); tabManager.hideTab(); Options.nbWinIsOpen = false; saveOptions(); } function showMe (){ mainPop.show (true); tabManager.showTab(); Options.nbWinIsOpen = true; saveOptions(); } // example: http://www150.kingdomsofcamelot.com var myServerId = null; function getServerId() { if (myServerId == null){ var m=/^[a-zA-Z]+([0-9]+)\./.exec(document.location.hostname); if (m) myServerId = m[1]; else myServerId = '??'; } return myServerId; } function logit (msg){ var now = new Date(); GM_log (getServerId() +' @ '+ now.toTimeString().substring (0,8) +'.' + now.getMilliseconds() +': '+ msg); } function saveOptions (){ var serverID = getServerId(); setTimeout (function (){GM_setValue ('Options_'+serverID, JSON2.stringify(Options));}, 0); } function saveRCOptions (){ var serverID = getServerId(); setTimeout (function (){GM_setValue ('RCOptions_'+serverID, JSON2.stringify(RCOptions));}, 0); } function readLayoutOptions (){ var serverID = getServerId(); s = GM_getValue ('LayoutOptions_'+serverID, '[]'); if (s != null){ opts = JSON2.parse (s); for (k in opts){ if (matTypeof(opts[k]) == 'object') for (kk in opts[k]) layoutOptions[k][kk] = opts[k][kk]; else layoutOptions[k] = opts[k]; } } } function readOptions (){ var serverID = getServerId(); s = GM_getValue ('Options_'+serverID); if (s != null){ opts = JSON2.parse (s); for (k in opts){ if (matTypeof(opts[k]) == 'object') for (kk in opts[k]) Options[k][kk] = opts[k][kk]; else Options[k] = opts[k]; } } } function readGlobalOptions (){ GlobalOptions = JSON2.parse (GM_getValue ('Options_??', '{}')); } function readRCOptions (){ var serverID = getServerId(); s = GM_getValue ('RCOptions_'+serverID); if (s != null){ opts = JSON2.parse (s); for (k in opts){ if (matTypeof(opts[k]) == 'object') for (kk in opts[k]) RCOptions[k][kk] = opts[k][kk]; else RCOptions[k] = opts[k]; } } } function createButton (label,id){ var a=document.createElement('a'); a.className='button20'; a.id = id; a.innerHTML=''+ label +''; return a; } function AddMainTabLink(text, eventListener, mouseListener) { var a = createButton (text,'botbutton'); a.className='tab'; var tabs=document.getElementById('main_engagement_tabs'); if(!tabs) { tabs=document.getElementById('topnav_msg'); if (tabs) tabs=tabs.parentNode; } if (tabs) { var e = tabs.parentNode; var gmTabs = null; for (var i=0; i
Press OK to continue.

'; var ok_button = document.getElementById('modal_js_confirm_ok_button'); ok_button.addEventListener('click',function() { if(ok_function && typeof(ok_function) == "function"){ ok_function(); } container_div.parentNode.removeChild(container_div); },false); var cancel_button = document.getElementById('modal_js_confirm_cancel_button'); cancel_button.addEventListener('click',function() { if(cancel_function && typeof(cancel_function) == "function"){ cancel_function(); } container_div.parentNode.removeChild(container_div); },false); } } // The following code is released under public domain. var AutoUpdater_152625 = { id: 152625, days: 1, name: "KOC Notebook", version: Version, beta: GlobalOptions.nbupdatebeta, betaUrl : 'http://koc-power-bot.googlecode.com/svn/trunk/KOCpowerBot.user.js', time: new Date().getTime(), call: function(response, secure) { GM_xmlhttpRequest({ method: 'GET', url: this.beta ? this.betaUrl : 'http'+(secure ? 's' : '')+'://userscripts.org/scripts/source/'+this.id+'.meta.js', onload: function(xpr) {AutoUpdater_152625.compare(xpr, response);}, onerror: function(xpr) {if (secure) AutoUpdater_152625.call(response, false);} }); }, enable: function() { GM_registerMenuCommand("Enable "+this.name+" updates", function() { GM_setValue('updated_152625', new Date().getTime()+''); AutoUpdater_152625.call(true, true) }); }, compareVersion: function(r_version, l_version) { var r_parts = r_version.split(''), l_parts = l_version.split(''), r_len = r_parts.length, l_len = l_parts.length, r = l = 0; for(var i = 0, len = (r_len > l_len ? r_len : l_len); i < len && r == l; ++i) { r = +(r_parts[i] || '0'); l = +(l_parts[i] || '0'); } return (r !== l) ? r > l : false; }, compare: function(xpr,response) { this.xversion=/\/\/\s*@version\s+(.+)\s*\n/i.exec(xpr.responseText); this.xname=/\/\/\s*@name\s+(.+)\s*\n/i.exec(xpr.responseText); if ( (this.xversion) && (this.xname[1] == this.name) ) { this.xversion = this.xversion[1]; this.xname = this.xname[1]; } else { if ( (xpr.responseText.match("the page you requested doesn't exist")) || (this.xname[1] != this.name) ) { //GM_setValue('updated_152625', 'off'); } return false; } var updated = this.compareVersion(this.xversion, this.version); if ( updated ) { display_confirm('A new version of '+this.xname+' is available.\nDo you wish to install the latest version?', // Ok function(){ try { location.href = AutoUpdater_152625.beta ? AutoUpdater_152625.betaUrl : 'http://userscripts.org/scripts/source/152625.user.js'; } catch(e) {} }, // Cancel function(){ if ( AutoUpdater_152625.xversion ) { if(confirm('Do you want to turn off auto updating for this script?')) { //GM_setValue('updated_152625', 'off'); GlobalOptions.nbupdate = false; GM_setValue ('Options_??', JSON2.stringify(GlobalOptions)); AutoUpdater_152625.enable(); alert('Automatic updates can be re-enabled for this script in the Options tab.'); } } } ); } else if (response){ alert('No updates available for '+this.name); } }, check: function(tf) { if (!tf){ this.enable(); } else { GM_registerMenuCommand("Check "+this.name+" for updates", function() { GM_setValue('updated_152625', new Date().getTime()+''); AutoUpdater_152625.call(true, true) }); if (+this.time > (+GM_getValue('updated_152625', 0) + 1000*60*60*24*this.days)) { GM_setValue('updated_152625', this.time+''); this.call(false, true); } } } }; if (typeof(GM_xmlhttpRequest) !== 'undefined' && typeof(GM_updatingEnabled) === 'undefined') { // has an updater? try { AutoUpdater_152625.check(GlobalOptions.nbupdate); } catch(e) { AutoUpdater_152625.check(GlobalOptions.nbupdate); } } /********* End updater code *************/ /************ LIB classes/functions .... **************/ function getClientCoords(e){ if (e==null) return {x:null, y:null, width:null, height:null}; var x=0, y=0; ret = {x:0, y:0, width:e.clientWidth, height:e.clientHeight}; while (e.offsetParent != null){ ret.x += e.offsetLeft; ret.y += e.offsetTop; e = e.offsetParent; } return ret; } var WinManager = { wins : {}, // prefix : nbPopup obj didHide : [], get : function (prefix){ var t = WinManager; return t.wins[prefix]; }, add : function (prefix, pop){ var t = WinManager; t.wins[prefix] = pop; if (unsafeWindow.cpopupWins == null) unsafeWindow.cpopupWins = {}; unsafeWindow.cpopupWins[prefix] = pop; }, hideAll : function (){ var t = WinManager; t.didHide = []; for (k in t.wins){ if (t.wins[k].isShown()){ t.didHide.push (t.wins[k]); t.wins[k].show (false); } } }, restoreAll : function (){ var t = WinManager; for (var i=0; i\ x\
'; document.body.appendChild(this.div); this.div.innerHTML = m; document.getElementById(prefix+'_X').addEventListener ('click', e_XClose, false); this.dragger = new CWinDrag (document.getElementById(prefix+'_bar'), this.div, enableDrag); this.div.addEventListener ('mousedown', e_divClicked, false); WinManager.add(prefix, this); function e_divClicked (){ t.focusMe(); } function e_XClose (){ t.show(false); if (t.onClose != null) t.onClose(); } function autoHeight (onoff){ if (onoff) t.div.style.height = ''; else t.div.style.height = t.div.style.maxHeight; } function focusMe (){ t.setLayer(5); for (k in unsafeWindow.cpopupWins){ if (k != t.prefix) unsafeWindow.cpopupWins[k].unfocusMe(); } } function unfocusMe (){ t.setLayer(-5); } function getLocation (){ return {x: parseInt(this.div.style.left), y: parseInt(this.div.style.top)}; } function setLocation (loc){ t.div.style.left = loc.x +'px'; t.div.style.top = loc.y +'px'; } function destroy (){ document.body.removeChild(t.div); WinManager.delete (t.prefix); } function centerMe (parent){ if (parent == null){ var coords = getClientCoords(document.body); } else var coords = getClientCoords(parent); var x = ((coords.width - parseInt(t.div.style.width)) / 2) + coords.x; var y = ((coords.height - parseInt(t.div.style.height)) / 2) + coords.y; if (x<0) x = 0; if (y<0) y = 0; t.div.style.left = x +'px'; t.div.style.top = y +'px'; } function setEnableDrag (tf){ t.dragger.setEnable(tf); } function setLayer(zi){ t.div.style.zIndex = ''+ (this.BASE_ZINDEX + zi); } function getLayer(){ return parseInt(t.div.style.zIndex) - this.BASE_ZINDEX; } function getTopDiv(){ return document.getElementById(this.prefix+'_top'); } function getMainDiv(){ return document.getElementById(this.prefix+'_main'); } function getMainTopDiv(){ return document.getElementById(this.prefix+'_top'); } function isShown (){ return t.div.style.display == 'block'; } function show(tf){ if (tf){ t.div.style.display = 'block'; t.focusMe (); } else { t.div.style.display = 'none'; } return tf; } function toggleHide(t){ if (t.div.style.display == 'block') { return t.show (false); } else { return t.show (true); } } } function CWinDrag (clickableElement, movingDiv, enabled) { var t=this; this.setEnable = setEnable; this.setBoundRect = setBoundRect; this.debug = debug; this.dispEvent = dispEvent; this.lastX = null; this.lastY = null; this.enabled = true; this.moving = false; this.theDiv = movingDiv; this.body = document.body; this.ce = clickableElement; this.moveHandler = new CeventMove(this).handler; this.outHandler = new CeventOut(this).handler; this.upHandler = new CeventUp(this).handler; this.downHandler = new CeventDown(this).handler; this.clickableRect = null; this.boundRect = null; this.bounds = null; this.enabled = false; if (enabled == null) enabled = true; this.setEnable (enabled); function setBoundRect (b){ // this rect (client coords) will not go outside of current body this.boundRect = boundRect; this.bounds = null; } function setEnable (enable){ if (enable == t.enabled) return; if (enable){ clickableElement.addEventListener('mousedown', t.downHandler, false); t.body.addEventListener('mouseup', t.upHandler, false); } else { clickableElement.removeEventListener('mousedown', t.downHandler, false); t.body.removeEventListener('mouseup', t.upHandler, false); } t.enabled = enable; } function CeventDown (that){ this.handler = handler; var t = that; function handler (me){ if (t.bounds == null){ t.clickableRect = getClientCoords(clickableElement); t.bodyRect = getClientCoords(document.body); if (t.boundRect == null) t.boundRect = t.clickableRect; t.bounds = {top:10-t.clickableRect.height, bot:t.bodyRect.height-25, left:40-t.clickableRect.width, right:t.bodyRect.width-25}; } if (me.button==0 && t.enabled){ t.body.addEventListener('mousemove', t.moveHandler, true); t.body.addEventListener('mouseout', t.outHandler, true); t.lastX = me.clientX; t.lastY = me.clientY; t.moving = true; } } } function CeventUp (that){ this.handler = handler; var t = that; function handler (me){ if (me.button==0 && t.moving) _doneMoving(t); } } function _doneMoving (t){ t.body.removeEventListener('mousemove', t.moveHandler, true); t.body.removeEventListener('mouseout', t.outHandler, true); t.moving = false; } function CeventOut (that){ this.handler = handler; var t = that; function handler (me){ if (me.button==0){ t.moveHandler (me); } } } function CeventMove (that){ this.handler = handler; var t = that; function handler (me){ if (t.enabled && !t.wentOut){ var newTop = parseInt(t.theDiv.style.top) + me.clientY - t.lastY; var newLeft = parseInt(t.theDiv.style.left) + me.clientX - t.lastX; if (newTop < t.bounds.top){ // if out-of-bounds... newTop = t.bounds.top; _doneMoving(t); } else if (newLeft < t.bounds.left){ newLeft = t.bounds.left; _doneMoving(t); } else if (newLeft > t.bounds.right){ newLeft = t.bounds.right; _doneMoving(t); } else if (newTop > t.bounds.bot){ newTop = t.bounds.bot; _doneMoving(t); } t.theDiv.style.top = newTop + 'px'; t.theDiv.style.left = newLeft + 'px'; t.lastX = me.clientX; t.lastY = me.clientY; } } } function debug (msg, e){ logit ("*************** "+ msg +" ****************"); logit ('clientWidth, Height: '+ e.clientWidth +','+ e.clientHeight); logit ('offsetLeft, Top, Width, Height (parent): '+ e.offsetLeft +','+ e.offsetTop +','+ e.offsetWidth +','+ e.offsetHeight +' ('+ e.offsetParent +')'); logit ('scrollLeft, Top, Width, Height: '+ e.scrollLeft +','+ e.scrollTop +','+ e.scrollWidth +','+ e.scrollHeight); } function dispEvent (msg, me){ logit (msg + ' Button:'+ me.button +' Screen:'+ me.screenX +','+ me.screenY +' client:'+ me.clientX +','+ me.clientY +' rTarget: '+ me.relatedTarget); } } Array.prototype.compare = function(testArr) { if (this.length != testArr.length) return false; for (var i = 0; i < testArr.length; i++) { if (this[i].compare) { if (!this[i].compare(testArr[i])) return false; } if (this[i] !== testArr[i]) return false; } return true; } String.prototype.StripQuotes = function() { return this.replace(/"/g,''); } String.prototype.entityTrans = { '&':'&', '<':'<', '>':'>', '\"':'"', '\'':''', '<':'\\u003c', '/':'\\/', '\\':'\\\\', '\"':'\\\"','{':'{','}':'}'}; String.prototype.htmlSpecialChars = function() { var ret = this.toString(); for (k in this.entityTrans) ret = ret.split(k).join(this.entityTrans[k]); return ret; } String.prototype.htmlSpecialCharsDecode = function() { var ret = this.toString(); for (k in this.entityTrans) ret = ret.split(this.entityTrans[k]).join(k); return ret; } String.prototype.trim = function () { return this.replace(/^\s*/, "").replace(/\s*$/, ""); } String.prototype.escape_space = function(){ var s = this.split(" "); for(var i=0; i=0 && typeof(v.splice)=='function') return 'array'; else return 'object'; } return typeof (v); } function unixTime (){ return parseInt (new Date().getTime() / 1000) + unsafeWindow.g_timeoff; } /********************** part full Xd Xh Xm Xd Xh Xm Xs Xh Xm Xh Xm Xs Xm Xs Xm Xs Xs Xs **********************/ function timestr(time, full) { time = parseInt (time); var m = []; var t = time; if (t < 61) return t + 's'; if (t > 86400){ m.push (parseInt(t/86400)); m.push ('d '); t %= 86400; } if (t>3600 || time>3600){ m.push (parseInt(t/3600)); m.push ('h '); t %= 3600; } m.push (parseInt(t/60)); m.push ('m'); if (full || time<=3600 ){ m.push (' '); m.push (t%60); m.push ('s'); } return m.join (''); } nbStartup ();