// ==UserScript== // @name KoCByte // @version 1309031 // @description A Kingdoms of Camelot Mod // @namespace kocbyte.com // @icon http://www.gravatar.com/avatar/f93cdced9c9b863a7d9e4b9988886015 // @include http://www.kocbyte.therealmsbeyond.com/* // @include https://www.kocbyte.therealmsbeyond.com/* // @include *.kingdomsofcamelot.com/fb/e2/src/main_src.php* // @include http://* // @grant unsafeWindow // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_openInTab // @grant GM_log // @grant GM_listValues // @grant GM_addStyle // @grant GM_registerMenuCommand // @require http://code.jquery.com/jquery-latest.min.js // @downloadURL none // ==/UserScript== //============================================================================ var uW = unsafeWindow; var kb={}; kb.uid = 0; kb.name = ''; kb.domain = 0; kb.allianceId = 0; kb.allianceName = ''; kb.misted = 0; kb.cities = []; kb.domains = []; kb.seed = null; kb.authedSites=null; kb.currentUrl=""+document.location.toString(); kb.currentWebFolder=document.location.host+""+document.location.pathname.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '')+'/'; kb.removedMixPanel=false; kb.site='http://www.kocbyte.therealmsbeyond.com/'; kb.url='http://www.kocbyte.therealmsbeyond.com/ajax/listener.php'; kb.storagePrefix = 'KOCBYTE'; kb.citiesSaved = ''; kb.citiesLastSent = 0; kb.sendInfoDelay=1000*60*60*6; //every 6 hours kb.sendSeedDelay=1000*60*60*24; //once a day kb.debug=false; kb.scriptId=121891; kb.scriptVer=1309031; kb.extList=[]; kb.modLang='eng'; kb.initTimeRemaining=0; kb.localize=[]; kb.localize.eng=[]; kb.localize.eng[0]=null; kb.localize.eng[1]='Would you like to update %0?'; kb.localize.eng[2]='No update needed'; kb.localize.eng[3]='Your using an alpha version, do you want to downgrade %0?'; kb.localize.eng[4]='Not allowed on this website'; kb.ADDWINDOWTIMMER=null; kb.correctWindowTimer=null; kb.sendInfoTimer=null; kb.taskTimer=null; kb.imgs=[]; kb.imgs[0]='data:image/png;base64,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'; kb.cleanArray=function(actual){ var newArray = []; for(var i = 0; i= max) { return null; } else { return Math.round(min+((max-min)*Math.random())); } }; kb.updateSeed=function(url,args,json){ var me=this; var i=0; switch(url){ case 'ajax/_dispatch53.php': if(args.ctrl){ if(args.ctrl=='throneRoom%5CThroneRoomServiceAjax'){ if(args.action){ if(args.action=='timeRepair'){ if(json.error_code){ if(json.error_code===0){ } else if(json.error_code==256){ window.seed.throne.inventory[args.throneRoomItemId].status=1; } else{ } } else{ if(json.eta){//start repair kb.log('repair of item #'+args.throneRoomItemId+' will be done in '+kb.timeUntill(Math.floor(json.eta))); window.seed.throne.inventory[args.throneRoomItemId].status=4; var t1=Math.floor(json.eta*1000); var t2=new Date().getTime(); var wait=t1-t2; setTimeout(function(){ window.seed.throne.inventory[args.throneRoomItemId].status=1; },wait); } } } else if(args.action=='upgradeQuality'){ if(json.error_code){ if(json.error_code===0){ } else if(json.error_code==256){ //window.seed.throne.inventory[args.throneRoomItemId].status=1; } else{ } } else{ if(args.payment && args.cityId){ if(args.payment=='aetherstone' && json.aetherstones){ window.seed.cityData.city[args.cityId].production.AETHERSTONE=window.seed.cityData.city[args.cityId].production.AETHERSTONE-json.aetherstones; } if(args.payment=='gem' && json.gems){//payment = gem or gems not sure because i don't have any so i can't test window.seed.player.gems=window.seed.player.gems-json.gems; } } if(json.success && json.success===true){ window.seed.throne.inventory[args.throneRoomItemId].status=1; } if(json['break'] && json['break']===true){ window.seed.throne.inventory[args.throneRoomItemId].status=3; } if(args.throneRoomItemId && json.item){ if(json.item[0]){ //fix because the programmers at kabam are dumbasses //the server returns zero as item id so we use the id from the request params json.item[0].id=args.throneRoomItemId; window.seed.throne.inventory[args.throneRoomItemId]=json.item[0].faction; } } if(json.heatupModifier){ window.seed.throne.heatupModifier=json.heatupModifier; } if(json.forgeMasterModifier){ //TODO no idea what the name of the origional is so i can't update. } if(json.lastAttemptTime){ window.seed.throne.lastAttemptTime=json.lastAttemptTime; } if(json.downgrade && json.downgrade===true){ //TODO not sure how to deal with this } if(args.buffItemId){ //TODO have to adjust item count } } } else if(args.action=='upgradeLevel'){ if(args.payment && args.cityId){ if(args.payment=='aetherstone' && json.aetherstones){ window.seed.cityData.city[args.cityId].production.AETHERSTONE=window.seed.cityData.city[args.cityId].production.AETHERSTONE-json.aetherstones; } if(args.payment=='gem' && json.gems){//payment = gem or gems not sure because i don't have any so i can't test window.seed.player.gems=window.seed.player.gems-json.gems; } } if(json.success && json.success===true){ window.seed.throne.inventory[args.throneRoomItemId].status=1; } if(json['break'] && json['break']===true){ window.seed.throne.inventory[args.throneRoomItemId].status=3; } if(args.throneRoomItemId && json.item){ if(json.item[0]){ json.item[0].id=args.throneRoomItemId; window.seed.throne.inventory[args.throneRoomItemId]=json.item[0].faction; } } if(json.heatupModifier){ window.seed.throne.heatupModifier=json.heatupModifier; } if(json.forgeMasterModifier){ //TODO no idea what the name of the origional is so i can't update. } if(json.lastAttemptTime){ window.seed.throne.lastAttemptTime=json.lastAttemptTime; } if(json.downgrade && json.downgrade===true){ //TODO not sure how to deal with this } if(args.buffItemId){ //TODO have to adjust item count } } } } } break; default: break; } }; kb.authorizedWebsiteStatus=function(){ if(!kb.authedSites){ kb.authedSites=kb.authorizedWebsiteGet(); } var folder=document.location.host+""+document.location.pathname.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '')+'/'; for(var i=0;i x2){ dx = x1 - x2; }else{ dx = x2 - x1; } if ((max - x2 + x1) < dx){ dx = max - x2 + x1; } if ((x1 + max - x2) < dx){ dx = x1 + max - x2; } if (y1 > y2){ dy = y1 - y2; }else{ dy = y2 - y1; } if ((max - y2 + y1) < dy){ dy = max - y2 + y1; } if ((y1 + max - y2) < dy){ dy = y1 + max - y2; } dist = Math.sqrt((dx*dx)+(dy*dy)); return(dist); }; kb.getBlockCoords=function(x,y){ var blocks=[]; //round to nearest 5 x=Math.floor(1*x/5)*5; y=Math.floor(1*y/5)*5; //server requests are formated like this blocks.push([x-5,y-5]); blocks.push([x-5,y]); blocks.push([x-5,1*y+5]); blocks.push([x,y-5]); blocks.push([x,y]); blocks.push([x,1*y+5]); blocks.push([1*x+5,y-5]); blocks.push([1*x+5,y]); blocks.push([1*x+5,1*y+5]); for(var i=0;i749){blocks[i][0]=blocks[i][0]-750;} if(blocks[i][1]<0){blocks[i][1]=750-(-1*blocks[i][1]);} if(blocks[i][1]>749){blocks[i][1]=blocks[i][1]-750;} } return blocks; }; kb.htmlEntities=function(str){ return str.replace(/&/g, '&').replace(//g, '>'); }; kb.setValueObject=function(k,v){ v=JSON.stringify(v); GM_setValue(k,v); }; kb.getValueObject=function(k,dv){ var v=GM_getValue(k,dv); if(!v || v===undefined){ return null; } v=JSON.parse(v); if(!v){ if(!dv){ v=null; } else{ v=dv; } } return v; }; kb.setValue=function(k,v){ GM_setValue(k,v); }; kb.getValue=function(k,dv){ return(GM_getValue(k,dv)); }; kb.deleteValue=function(k){ GM_deleteValue(k); }; kb.getThroneStatus=function(){ if(uW && uW.seed && uW.seed.queue_throne){ return JSON.parse(JSON.stringify(uW.seed.queue_throne)); } }; kb.getDomains=function(force){ if(uW.g_ajaxparams){ var now=new Date().getTime()*1; var wait=86400000;//1 day var k=kb.storagePrefix+'getDomains_lastcheck'; var lastsent=kb.getValue(k,0); if(force || 1*lastsent+wait result){ result=0; } } return JSON.parse(JSON.stringify(result)); }; kb.getThroneItems=function(){ if(uW && uW.seed && uW.seed.throne){ return JSON.parse(JSON.stringify(uW.seed.throne)); } }; kb.getThroneItemAttributes=function(){ if(uW && uW.cm && uW.cm.features && uW.cm.features.TR_EFFECTS){ return JSON.parse(uW.cm.features.TR_EFFECTS); } }; kb.blockList = function(left, top, width){ var grids = 3; var bl = []; for(var x=0; x 745) xx -= 750; for(var y=0; y 745) yy -= 750; bl.push ('bl_'+ xx +'_bt_'+ yy); } } return bl.join("%2C"); }; kb.sendToKB=function(type,payload,callback){ var url = kb.url; var obj = {}; kb.log('building the object to send'); if(type == 'info'){ obj = { domain: (1*uW.g_server), uid: uW.g_ajaxparams.tvuid, name: uW.seed.player.name, prefix: uW.seed.player.prefix, might: uW.seed.player.might, alliance: { id: uW.seed.allianceDiplomacies.allianceId, name: uW.seed.allianceDiplomacies.allianceName }, misted: (kb.getPlayerMist()) ? true : false, data: payload, wilds: uW.seed.wilderness, cities: uW.seed.cities, }; } if(type == 'map'){ var rawData = []; for(var i = 0; i < kb.cities.length; i++){ var x = kb.cities[i][2]; var y = kb.cities[i][3]; var width = 75; var left = parseInt(x / 5) * 5; var top = parseInt(y / 5) * 5; width = parseInt((width+4) / 5) * 5; var blockString = kb.blockList(left, top, width); var params = uW.Object.clone(uW.g_ajaxparams); params.blocks = blockString; var block = kb.sendToKabam(params,'fetchMapTiles',null); rawData.push(block); } var alliances = {}; var users = {}; var tiles = {}; tiles.city = {}; tiles.wild = {}; for(var a = 0; a < rawData.length; a++){ var allis = JSON.parse(JSON.stringify(rawData[a].allianceNames)); $.each(allis, function(k, v){ var key = k.replace(/^a/, ''); alliances[key] = v; }); var us = JSON.parse(JSON.stringify(rawData[a].userInfo)); $.each(us, function(u, uData){ var uid = u.replace(/^u/, ''); users[uid] = { might: uData.m, prefix: (uData.s == 'M') ? 'Lord' : 'Lady', name: uData.n, alliance: uData.a }; }); var theTiles = JSON.parse(JSON.stringify(rawData[a].data)); $.each(theTiles, function(t, tData){ if(tData.cityNum){ // is a city tiles.city[tData.tileCityId] = { owner: tData.tileUserId, x: tData.xCoord, y: tData.yCoord, name: tData.cityName, province: tData.tileProvinceId, misted: tData.misted, tid: tData.tileId }; }else{ // not a city if(tData.tileUserId !== null){ // if it's not owned, we don't care tiles.wild[tData.tileId] = { owner: tData.tileUserId, city: tData.tileCityId, x: tData.xCoord, y: tData.yCoord, province: tData.tileProvinceId, misted: tData.misted, level: tData.tileLevel, type: tData.tileType, }; } } }); } obj = { a: alliances, u: users, d: (1*uW.g_server), }; } kb.log('do the send thing: GM_xmlhttpRequest') var args='mode='+type+'&data='+encodeURIComponent(JSON.stringify(obj)); GM_xmlhttpRequest({ "method": 'POST', "url": url, "data": args, "headers": { "Content-type" : "application/x-www-form-urlencoded" }, "onreadystatechange": function(r) { }, "onload": function(r) { if(r && r.status!=200){ var s=''; s=s+"\n"+'url='+url; s=s+"\n"+'data='+JSON.stringify(obj); if(r.status){s=s+"\n"+'status:'+r.status;} if(r.statusText){s=s+"\n"+'statusText'+r.statusText;} if(r.responseHeaders){s=s+"\n"+'responseHeaders'+r.responseHeaders;} if(r.responseText){s=s+"\n"+'responseText'+r.responseText;} if(r.readyState){s=s+"\n"+'readyState'+r.readyState;} kb.log(s); } if(callback) { callback(r); } } }); }; kb.sendToKabam=function(args,page,callback){ var async = false; var data=JSON.parse(JSON.stringify(uW.g_ajaxparams)); for(var i in args){ data[i]=args[i]; } var url = kb.createAjaxUrl(page); var str=''; for(var i in data){ str=str+'&'+i+'='+data[i]; } str=str.substr(1); if(callback){ async=true; } var result=null; $.ajax({ 'type': "POST", 'url': url, 'data': str, 'async': async, 'success': function(str){ result = JSON.parse(str); if(!result){ result=str; } kb.debug_traffic('ajax/'+page+'.php',args,str); } }); return result; }; kb.scriptAdd=function(source,objname){ if (typeof source == 'function') { source = ""+source.toString(); } else if(typeof source == 'object' && objname){ var str='var '+objname+'={};'; for(var k in source){ str=str+"\n"+objname+'.'+k+'='+source[k].toString(); } source=str; } else{ } source='(function(){'+"\n"+source+"\n"+'window['+"'"+objname+"'"+']='+objname+';'+"\n"+'}());'; var script = document.createElement('script'); script.setAttribute("type", "text/javascript"); script.textContent = ""+source; window.document.body.appendChild(script); window.document.body.removeChild(script); }; kb.scriptInclude=function(src){ var script = document.createElement('script'); script.setAttribute('type','text/javascript'); script.src=src; window.document.body.appendChild(script); window.document.body.removeChild(script); }; kb.addCssResource=function(src){ var elem = document.createElement('link'); elem.setAttribute('href',src); elem.setAttribute('rel','stylesheet'); elem.setAttribute('type','text/css'); var head = document.getElementsByTagName('head')[0]; head.appendChild(elem); }; kb.hasClass=function(ele,cls){ return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); }; kb.addClass=function(ele,cls){ if (!this.hasClass(ele,cls)) ele.className += " "+cls; }; kb.removeClass=function(ele,cls){ if (kb.hasClass(ele,cls)) { var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)'); ele.className=ele.className.replace(reg,' '); } }; kb.getAjaxParams=function(){ if(uW && uW.g_ajaxparams){ return JSON.parse(JSON.stringify(uW.g_ajaxparams)); } }; kb.saveInfo=function(){ var info=JSON.stringify(kb.getCurrentInfo()); if(info){ var sid=kb.getServerId(); kb.setValue('ajaxparams',info); kb.setValue('sid',sid); } }; kb.send_info=function(force){ if (uW.g_ajaxparams && uW.g_server) { kb.log('checking if time to send'); var now=new Date().getTime(); var k=kb.storagePrefix+'lastsent_ajaxparams'; var lastsent=kb.getValue(k,0); if(force || 1*lastsent+kb.sendInfoDelay-1){ obj.setAttribute('class','off'); kb.deleteValue(k); obj.innerHTML='Off'; state=null; }else{ obj.setAttribute('class','on'); kb.setValue(k,1); obj.innerHTML='On'; state=1; } }, true); } }, 10000); }; kb.initAddonExtensionButton=function(l,ver){ var p=document.getElementById(kb.elemPrefix+'tab_content_main_addons'); var id=l.toLowerCase(); id=id.replace(" ",""); var container=document.createElement('div'); var button=document.createElement('button'); button.id=kb.elemPrefix+id+'_button'; button.setAttribute('class','off'); button.innerHTML='Off'; container.appendChild(button); var label=document.createElement('span'); label.innerHTML=' Addon '+l+' v'+ver; container.appendChild(label); p.appendChild(container); }; kb.initAddonExtension=function(addonName,addonSource,addonInit,addonVersion){ if(addonSource){kb.scriptAdd(addonSource);} if(addonInit){ var tmp=setInterval( function() { if(uW.kocbyte){ clearInterval(tmp); uW.createTab(addonName,''); kb.initAddonExtensionButton(addonName,(addonVersion||'1.0')); kb.addonInit(); } }, 1000); } }; kb.dotask=function(){ var now=new Date().getTime(); kb.setValue('lasttaskrun',''+now+''); kb.setValue('currentdomain',''+kb.getServerId()+''); var command = kb.getValue('command', ''); if (command !== '') { kb.setValue('command',''); kb.log('command=' + command); var js = ''; var x = 0; var y = 0; var cmd = command.split('|'); var timestamp = cmd.shift(); var url = cmd.shift(); var mod = cmd.shift(); var s = cmd.shift(); var type = cmd.shift(); if(!s || s==='' || 1*s===kb.domain){ switch (type) { case 'evalscript': kb.scriptAdd(cmd[0]); break; case 'includescript': kb.scriptInclude(cmd[0]); break; case 'location': x = kb.sanatizeInt(cmd[0]); y = kb.sanatizeInt(cmd[1]); kb.mapMove(x,y); break; case 'setbookmark': x = kb.sanatizeInt(cmd[0]); y = kb.sanatizeInt(cmd[1]); var n = 'loc'; if(cmd[2]){ n = kb.sanatizeString(cmd[2]); } kb.bookmarkAdd(x,y,n); break; case 'deletebookmark'://does not work x = kb.sanatizeInt(cmd[0]); y = kb.sanatizeInt(cmd[1]); kb.bookmarkDelete(x,y); break; default: break; } } } }; kb.intercept_unknown=function(url,text){}; kb.intercept_fetchMapTiles=function(json){}; kb.intercept_updateSeed=function(json){}; kb.intercept_getChat=function(json){}; kb.intercept_viewCourt=function(json){}; kb.intercept=function(url, r){ if (r && r.status == 200 && r.responseText) { var str=r.responseText.trim(); var fm=url.match('ajax/([a-zA-Z_]+).php'); if(fm && fm.length == 2){ kb.debug_traffic(url,r,str); var json=null; try{ json=JSON.parse(""+str); }catch(e){ return; } var page = fm[1]; switch(page){ case 'fetchMapTiles': kb.intercept_fetchMapTiles(json); break; case 'updateSeed': //kb.intercept_updateSeed(json); break; case 'getChat': kb.intercept_getChat(json); break; case 'viewCourt': kb.intercept_viewCourt(json); break; default: break; } } } //kb.intercept_unknown(url,r.responseText); }; kb.showTime=function(timestamp,version){ var now=null; if(timestamp){ now = new Date(timestamp); }else{ now = new Date(); } var hours = now.getHours(); var minutes = now.getMinutes(); var seconds = now.getSeconds(); var timeValue = "" + ((hours >12) ? hours -12 :hours); if (timeValue == "0") timeValue = 12; timeValue += ((minutes < 10) ? ":0" : ":") + minutes; timeValue += ((seconds < 10) ? ":0" : ":") + seconds; timeValue += (hours >= 12) ? " PM" : " AM"; return timeValue; }; kb.log=function(msg,targetId,replaceIt){ var consoleStr = 'KoCByte: '+kb.domain+' @ '+kb.showTime()+': '+msg; uW.console.log(consoleStr); var elem=null; if(targetId){ elem =$('#'+targetId); } else{ elem =$('#'+kb.elemPrefix+'-tabs-kocbyte-log-generic-result'); } if(elem && elem.length==1){ var html=''; var type=$.type(msg); if(type=='string'){ msg.replace(//gi,">"); html='
'+kb.showTime()+' '+msg+'
'; } else{ msg=JSON.stringify(msg,null,"\t"); msg=msg.replace(//gi,'>'); html='
'+kb.showTime()+"\n"+msg+'
'; } if(replaceIt==1){ elem.html(html); } else{ var n = elem.children().length; if(n>30){ elem.children(':last').remove(); } elem.prepend(html); } } }; kb.debug_traffic=function(url,r,response){ var n = $('#'+kb.elemPrefix+'-tabs-kocbyte-log-traffic-result').children().length; if(n>20){ $('#'+kb.elemPrefix+'-tabs-kocbyte-log-traffic-result').children(':last').remove(); } var query=JSON.stringify(r.args); response=response.replace(/^\s+|\s+$/g,''); response=response.replace(//gi,">"); //var query=JSON.stringify(args); //$('#'+kb.elemPrefix+'-tabs-kocbyte-log-traffic-result').prepend('
'+showTime()+' '+url+'
     '+query+'
     '+response+'
'); var status=''; if(r.status != 200){ status=' ('+r.status+')'; } $('#'+kb.elemPrefix+'-tabs-kocbyte-log-traffic-result').prepend( '
'+ kb.showTime()+' '+ url+' '+ //(Math.floor(r.took*1000)/1000)+'ms '+ status+ '
'+ //'
'+r.requestHeaders+'
'+ '
     SND: '+query+'
'+ '
     REC: '+response+'
'+ '
'); }; kb.update=function(){ kb.log('update()'); var wait=1000*60*60*24; var now=''+new Date().getTime(); var k='script_'+kb.scriptId+'_'; var key_name=k+'name'; var key_version=k+'version'; var key_update=k+'update'; var local_name=kb.getValue(key_name); var local_version=kb.getValue(key_version); GM_xmlhttpRequest({ method : 'GET', url : 'http://userscripts.org/scripts/source/' + kb.scriptId + '.meta.js?' + now, headers : {'Cache-Control' : 'no-cache'}, onload : function(resp) { var rt = resp.responseText; var remote_name = (/@name\s*(.*?)\s*$/m.exec(rt))[1]; //var remote_version = parseInt(/@version\s*(.*?)\s*$/m.exec(rt)[1]); var remote_version = (/@version\s*(.*?)\s*$/m.exec(rt))[1]; kb.setValue(key_name, remote_name); kb.setValue(key_version, remote_version); kb.setValue(key_update, now); if(remote_version > kb.scriptVer){ if(confirm(''+kb.getTranslation(1,remote_name))){ GM_openInTab('http://userscripts.org/scripts/show/' + kb.scriptId); } } else if(remote_version < kb.scriptVer) { if(confirm(''+kb.getTranslation(3,remote_name))){ GM_openInTab('http://userscripts.org/scripts/show/' + kb.scriptId); } } else{ alert(kb.getTranslation(2)); } } }); }; kb.watchtraffic=function(){ /* var OldXHR = uW.XMLHttpRequest; // create a wrapper object to emulate XMLHttpRequest object var NewXHR = function() { var self = this; var actualXHR = new OldXHR(); this.requestHeaders = ""; this.requestBody = ""; // emulate methods this.open = function(a, b, c, d, e) { self.url=b; self.took=new Date().getTime(); self.openMethod = a.toUpperCase(); self.openurl = b; if (self.onopen != null && typeof(self.onopen) == "function") { self.onopen(a,b,c,d,e); } return actualXHR.open(a,b,c,d,e); }; this.send = function(a) { self.args=kb.deparam(a); if (self.onsend != null && typeof(this.onsend) == "function") { self.onsend(a); } self.requestBody += a; return actualXHR.send(a); }; this.setRequestHeader = function(a, b) { if (self.onsetrequestheader != null && typeof(self.onsetrequestheader) == "function") { self.onsetrequestheader(a, b); } self.requestHeaders += a + ":" + b + "\r\n"; return actualXHR.setRequestHeader(a, b); }; this.getRequestHeader = function() { return actualXHR.getRequestHeader(); }; this.getResponseHeader = function(a) { return actualXHR.getResponseHeader(a); }; this.getAllResponseHeaders = function() { return actualXHR.getAllResponseHeaders(); }; this.abort = function() { return actualXHR.abort(); }; this.addEventListener = function(a, b, c) { alert("not implemented yet"); }; this.dispatchEvent = function(e) { alert("not implemented yet"); }; this.openRequest = function(a, b, c, d, e) { alert("not implemented yet"); }; this.overrideMimeType = function(e) { alert("not implemented yet"); }; this.removeEventListener = function(a, b, c) { alert("not implemented yet"); }; // copy the values from actualXHR back onto self function copyState() { // copy properties back from the actual XHR to the wrapper try { self.readyState = actualXHR.readyState; } catch (e) {} try { self.status = actualXHR.status; } catch (e) {} try { self.responseText = actualXHR.responseText; } catch (e) {} try { self.statusText = actualXHR.statusText; } catch (e) {} try { self.responseXML = actualXHR.responseXML; } catch (e) {} } // emulate callbacks from regular XMLHttpRequest object actualXHR.onreadystatechange = function() { copyState(); try { if (self.onupdate != null && typeof(self.onupdate) == "function") { self.onupdate(); } } catch (e) {} if (self.onreadystatechange != null && typeof(self.onreadystatechange) == "function") { return self.onreadystatechange(); } }; actualXHR.onerror = function(e) { copyState(); try { if (self.onupdate != null && typeof(self.onupdate) == "function") { self.onupdate(); } } catch (e) {} if (self.onerror != null && typeof(self.onerror) == "function") { return self.onerror(e); } else if (self.onreadystatechange != null && typeof(self.onreadystatechange) == "function") { return self.onreadystatechange(); } }; actualXHR.onload = function(e) { copyState(); self.took=1*(new Date().getTime()-self.took); kb.intercept(self.url,self); try { if (self.onupdate != null && typeof(self.onupdate) == "function") { self.onupdate(); } } catch (e) {} if (self.onload != null && typeof(self.onload) == "function") { return self.onload(e); } else if (self.onreadystatechange != null && typeof(self.onreadystatechange) == "function") { return self.onreadystatechange(); } }; actualXHR.onprogress = function(e) { copyState(); try { if (self.onupdate != null && typeof(self.onupdate) == "function") { self.onupdate(); } } catch (e) {} if (self.onprogress != null && typeof(self.onprogress) == "function") { return self.onprogress(e); } else if (self.onreadystatechange != null && typeof(self.onreadystatechange) == "function") { return self.onreadystatechange(); } }; }; uW.XMLHttpRequest = NewXHR; */ }; kb.kocIsRunning=function(){ var n = kb.getValue('lasttaskrun',0); var t = 1*new Date().getTime(); if(1*n+5000 > 1*t){ return true; }else{ return false; } }; kb.interface_addcss=function(){ var main='#'+kb.elemPrefix; GM_addStyle(main+' *{font-size:12px;}'); GM_addStyle(main+' p{padding:0px;margin:0px;}'); GM_addStyle(main+' pre{padding:0px;margin:0px; overflow:auto; max-height:790px;}'); GM_addStyle(main+' a{color:rgb(17,70,132); text-decoration:underline;}'); GM_addStyle(main+' a:hover{color:#A52A2A;}'); GM_addStyle(main+' h2 a{font-size:18px;}'); GM_addStyle(main+' {position:absolute; padding:0px; margin:0px; background-image:url(http://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/dialog_740_r2_c1.jpg); background-repeat:no-repeat; background-position:0px 0px; top:136px; left:8px; width:742px; border:1px solid #beb89e; background-color:#fffef6; z-index:999999; display:none;}'); GM_addStyle(main+' ul{padding:0px; margin:0px; display:block;}'); GM_addStyle(main+'-window{position:relative; max-height:1002px; overflow:auto; display:block; padding:0px; margin:0px; margin-left:18px; margin-right:18px; margin-top:5px; margin-bottom:0px;}'); GM_addStyle(main+' .top{height:45px;}'); GM_addStyle(main+' .top h2{text-align:center; padding:0px; margin:0px; margin-top:6px;}'); GM_addStyle(main+' .kocbyte_tabs{position:relative; clear:both; display:block; padding:0px; margin:0px; margin-left:0px; margin-right:0px; margin-top:0px;}'); GM_addStyle(main+' .kocbyte_tab_contents > div { position:relative; z-index:999; max-height:960px; overflow:auto; top:0px; background-color:#fffef6; border:1px solid #beb89e; border-radius: 5px; -moz-border-radius: 5px; padding:5px; margin-bottom:0px;}'); GM_addStyle(main+' .kocbyte_tab_buttons{ position:relative; padding:0px; margin:0px; top:0px; left:0px; z-index:1000;}'); GM_addStyle(main+' .kocbyte_tab_buttons li{ position:relative; padding:0px; margin:0px; list-style:none; display:inline-block;}'); GM_addStyle(main+' .kocbyte_tab_buttons .selected {top:1px; padding-top:4px; color:#000;}'); GM_addStyle(main+' .kocbyte_tab_button { font-weight:normal; font-style:normal; font-size:12px; position:relative; background-color:#fffef6; color:#beb89e; display:inline-block; white-space:nowrap; border:1px solid #beb89e; border-radius: 5px; border-bottom-right-radius:0px; border-bottom-left-radius:0px; font-size:12px; font-weight: bold; position:relative; padding-left:6px; padding-right:6px; padding-top:3px; padding-bottom:2px; color:#beb89e; text-decoration: none; outline:none; border-bottom:0px; }'); GM_addStyle(main+'-tabs-throne-upgrade .status {width:29px; height:29px; text-align:center; font-size:24px; font-weight:bold; color:#fff;}'); GM_addStyle(main+'-tabs-throne-upgrade .status1 {}'); GM_addStyle(main+'-tabs-throne-upgrade .status3 { background-image:url(https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/throne/modal/sm_fail_overlay.png); }'); GM_addStyle(main+'-tabs-throne-upgrade .status4 { background-image:url(https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/throne/modal/sm_hammer.png); }'); GM_addStyle(main+' .throne-upgrade-order { text-align:center; font-size:24px; color:#fff;}'); GM_addStyle(main+' .throne-upgrade-item { padding:0px; margin-right:5px; margin-bottom:5px; display:inline-block; width:29px; height:29px; border:2px outset; overflow:hidden; background-position:0px 0px; background-color:#000; }'); GM_addStyle(main+'_logo{ z-index: 10; display:inline-block; position:relative; left:-411px; top:-88px; width: 32px; height: 32px; border:1px solid #000; background-repeat: no-repeat; background-image: url('+kb.imgs[0]+'); }'); }; kb.interface_addMainButton=function(){ if( $('#'+kb.elemPrefix).length > 0 ){ //console.log('window exists so we nolonger need to try to create'); return; } if( $('.taskbar .rightColumn').length === 0 ){ //console.log('main_engagement_tabs is missing'); return; } var obj=$('.taskbar .rightColumn').get(0); var me=this; var elem,elemChild,str; elem=document.createElement('a'); elem.addEventListener('click', function(event) { kb.interface_toggle(); return false; },false); elem.setAttribute('id',kb.elemPrefix+'_logo'); elem.setAttribute('title','KoCByte '+kb.scriptVer); obj.appendChild(elem); obj=document.createElement('div'); obj.setAttribute('id',kb.elemPrefix); obj.id=''+kb.elemPrefix; str=''; str=str+''; str=str+'
'; str=str+'
'; str=str+' '; str=str+'
'; str=str+'
'; str=str+'
'; str=str+' '; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'  v'+kb.scriptVer+''; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'
'; str=str+'
';
	str=str+'
'; obj.innerHTML=str; elem=document.createElement('a'); elem.addEventListener('click', function(event) { kb.interface_toggle(); return false; }, 'false'); elem.setAttribute('style','background-image:url(https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/close_icon.png); position:absolute; top:8px; right:6px; width:20px; height:20px;'); elem.innerHTML=' '; $(obj).append(elem); elem=document.createElement('div'); elem.setAttribute('style','position:relative; background-image:url(https://kabam1-a.akamaihd.net/kingdomsofcamelot/fb/e2/src/img/dialog_740_r3_c1.jpg); background-repeat:no-repeat; background-position:0px 0px; width:742px; height:52px;'); elem.innerHTML=' '; $(obj).append(elem); document.body.appendChild(obj); kb.interface_correctWindowLocation(); $('#'+kb.elemPrefix+'-tabs-main-update').click(function(){ kb.update(); }); if(kb.ext){ for(var i in kb.ext){ kb.ext[i].timmers=[]; if(kb.ext[i].init){ kb.ext[i].init(); } } } kb.interface_createTabs('.kocbyte_tabs'); kb.correctWindowTimer=setInterval(function(){ kb.interface_correctWindowLocation(); },2000); setTimeout(function(){ clearInterval(kb.correctWindowTimer); },8000); //console.log('kb.interface_addMainButton stop'); }; kb.addSneezeGuard=function(id){ $p = $('#'+id); if($p && $p.length===0){ return; } $p.css('position','relative'); $n = $('#'+id+'_sneezeguard'); if($n && $n.length===0){ $p.append('
 
'); } }; kb.interface_correctWindowLocation=function(){ var top = $('#main_engagement_tabs').position().top; var current=$('#'+kb.elemPrefix).position().top; if(current<1*top+142){ $('#'+kb.elemPrefix).css('top',(1*top+142)+'px'); } }; kb.interface_toggle=function(){ $('#'+kb.elemPrefix).toggle(); }; kb.interface_createTabs=function(id){ var $tabs = $(id); if($tabs.length > 0){ $tabs.each(function(tabgroup) { var first=null; var $ul=null; $(this).addClass('kocbyte_tabs'); //check for sub content var foundButtons=0; var foundContent=0; $(this).children().each(function(index){ if($(this).hasClass('kocbyte_tab_contents')){ foundContent=1; } if($(this).hasClass('kocbyte_tab_buttons')){ foundButtons=1; $ul=$(this); } }); var found=null; if(foundButtons===0){ $(this).children().each(function(index){ var tag=this.tagName.toUpperCase(); if(tag=='UL'){ if(!found){ $(this).addClass('kocbyte_tab_buttons'); $ul=$(this); found=1; } } }); if(!found){ var $ul='
    '; $(this).prepend($ul); } } $('.kocbyte_tab_contents',$(this)).children().each(function(index) { $(this).addClass('kocbyte_tab_content'); }); if(!$ul){ $ul=$('