您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A Kingdoms of Camelot Mod
当前为
// ==UserScript== // @name KoCByte // @version 0.4 // @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_getResourceText // @grant GM_addStyle // @grant GM_registerMenuCommand // @require http://code.jquery.com/jquery-latest.min.js // @resource foundation https://www.kocbyte.therealmsbeyond.com/client/style.css // ==/UserScript== //============================================================================ var fdtn = GM_getResourceText("foundation"); GM_addStyle(fdtn); var uW = unsafeWindow; var Tabs = {}; var mainPop; var kbPopUpTopClass = 'kbPopTop'; var Options = { kbWinIsOpen: false, currentTab: 'Mod', }; var kb = { uid: 0, name: '', domain: 0, allianceId: 0, allianceName: '', misted: 0, cities: [], domains: [], seed: null, authedSites: null, currentUrl: document.location.toString(), currentWebFolder: document.location.host+document.location.pathname.replace(/\\/g, '/').replace(/\/[^\/]*\/?$/, '')+'/', removedMixPanel: false, site: 'http://www.kocbyte.therealmsbeyond.com/', url: 'http://www.kocbyte.therealmsbeyond.com/ajax/listener.php', storagePrefix: 'KoCByte_', citiesSaved: '', citiesLastSent: 0, sendInfoDelay: 1000*60*60*6, sendSeedDelay: 1000*60*60*24, updateCheckDelay: 1000*60*60*24, scriptId: 19269, scriptVer: 0.2, sendInfoTimer: null, taskTimer: null, imgs: [], generateRandomNumber: function(min, max){ if(min >= max){ return null; }else{ return Math.round(min+((max-min)*Math.random())); } }, createUrl: function(page){ return 'https://www'+(uW.g_server)+'.kingdomsofcamelot.com/fb/e2/src/'+page; }, createAjaxUrl: function(page){ return 'https://www'+(uW.g_server)+'.kingdomsofcamelot.com/fb/e2/src/ajax/'+page+'.php'; }, getAjaxParams: function(){ if(uW && uW.g_ajaxparams){ return JSON.parse(JSON.stringify(uW.g_ajaxparams)); } }, setValueObject: function(k, v){ v = JSON.stringify(v); GM_setValue(k, v); }, 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; }, setValue: function(k, v){ GM_setValue(k, v); }, getValue: function(k, dv){ return(GM_getValue(k, dv)); }, deleteValue: function(k){ GM_deleteValue(k); }, 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 < now){ var args = {}; args.v2 = true; var json = kb.sendToKabam(args,'myServers',null,true); if(json && json.selectableServers && json.selectableServers.servers){ var domains = []; for(var i in json.selectableServers.servers){ var d = json.selectableServers.servers[i].serverId; domains.push(1*d); } domains.sort(); kb.log('getDomains();'); kb.setValue(''+k,''+now); return domains; } }else{ var playerdomains=kb.getValue('domains'); if(!playerdomains){ playerdomains = []; playerdomains.push(1*kb.domain); return playerdomains; }else{ return JSON.parse(''+playerdomains); } } } }, getSavedInfo: function(){ return(kb.getValue('ajaxparams', null)); }, getSavedServerId: function(){ return(kb.getValue('sid')); }, getCurrentCityId: function(){ if(uW && uW.currentcityid){ return JSON.parse(JSON.stringify(uW.currentcityid)); } }, getCities: function(){ var seed = kb.getSeed(); if(seed && seed.cities){ return JSON.parse(JSON.stringify(seed.cities)); } }, gameInfoSave: function(){ if(uW && uW.seed){ kb.setValue('domain', kb.domain); kb.setValue('uid', kb.uid); kb.setValue('name', kb.name); kb.setValue('allianceId', kb.allianceId); kb.setValue('allianceName', kb.allianceName); kb.setValue('misted', kb.misted); kb.setValueObject('cities', kb.cities); kb.setValueObject('domains', kb.domains); var current = null; var saved = null; var tmp = null; var thekey = ''; //seed tmp = []; for(var i in kb.seed){ thekey = kb.storagePrefix+'SEED_'+i; kb.setValueObject(thekey,kb.seed[i]); tmp.push(i); //console.log(kb.getValueObject(thekey)); } kb.setValueObject(kb.storagePrefix+'SEEDKEYS',tmp); //cities current = kb.getValueObject('cities'); thekey = kb.storagePrefix+'CITIES'; saved = kb.getValueObject(thekey); if(current != saved){ kb.setValueObject( kb.storagePrefix+'CITIES',current); } kb.setValueObject('acctIds', kb.acctIds); } }, gameInfoLoad: function(){ if(uW && uW.seed){ kb.uid = kb.getUserId(); kb.name = kb.getUserName(); kb.domain = kb.getServerId(); kb.domains = kb.getDomains(); kb.allianceId = kb.getPlayerAllianceId(); kb.allianceName = kb.getPlayerAllianceName(); kb.misted = kb.getPlayerMist(); kb.cities = kb.getCities(); kb.authedSites = kb.authorizedWebsiteGet(); kb.storagePrefix = kb.uid+'_'+kb.domain+'_'; kb.seed = kb.getSeed(); kb.acctIds = kb.getSavedUserIds(kb.uid); }else{ kb.uid = kb.getValue('uid'); kb.name = kb.getValue('name'); kb.domain = kb.getValue('domain'); kb.domains = kb.getValueObject('domains'); kb.allianceId = kb.getValue('allianceId'); kb.allianceName = kb.getValue('allianceName'); kb.misted = kb.getValue('misted'); kb.cities = kb.getValueObject('cities'); kb.authedSites = kb.authorizedWebsiteGet(); kb.storagePrefix = kb.uid+'_'+kb.domain+'_'; //the seed is too large to store as one string so we have to reassemble kb.seed = {}; kb.seedKEYS = kb.getValueObject(kb.storagePrefix+'SEEDKEYS'); if(kb.seedKEYS){ var prefix = kb.storagePrefix+'SEED_'; var k=''; for(var i in kb.seedKEYS){ k = kb.seedKEYS[i]; kb.seed[k] = JSON.parse(kb.getValue(prefix+k)); } } kb.acctIds = kb.getSavedUserIds(); } }, getServerId: function(){ if(uW && uW.g_server){ return (1*uW.g_server); } }, getSavedUserIds: function(uid){ var uids = kb.getValueObject('acctIds',[uid]); if(uid){ if(!$.inArray(uid,uids)){ uids.push(uid); } } return uids; }, getUserId: function(){ if(uW && uW.g_ajaxparams && uW.g_ajaxparams.tvuid){ return JSON.parse(JSON.stringify(uW.g_ajaxparams.tvuid)); } }, getUserName: function(){ if(uW && uW.seed && uW.seed.player && uW.seed.player.name){ return JSON.parse(JSON.stringify(uW.seed.player.name)); } }, getSeed: function(){ if(uW && uW.seed){ return JSON.parse(JSON.stringify(uW.seed)); } }, getPlayerAllianceId: function(){ if(uW && uW.seed && uW.seed.allianceDiplomacies && uW.seed.allianceDiplomacies.allianceId){ return JSON.parse(JSON.stringify(uW.seed.allianceDiplomacies.allianceId)); } return 0; }, getPlayerAllianceName: function(){ if(uW && uW.seed && uW.seed.allianceDiplomacies && uW.seed.allianceDiplomacies.allianceName){ return JSON.parse(JSON.stringify(uW.seed.allianceDiplomacies.allianceName)); } return ''; }, getPlayerMist: function(){ var result=0; if(uW && uW.seed && uW.seed.playerEffects && uW.seed.playerEffects.fogExpire){ result = uW.seed.playerEffects.fogExpire; var timestamp = Math.floor(new Date().getTime()/1000); if(timestamp > result){ result=0; } } return JSON.parse(JSON.stringify(result)); }, blockList: function(left, top, width){ var grids = 3; var bl = []; for(var x=0; x<grids; x++){ var xx = left + (x*5); if(xx > 745) xx -= 750; for(var y=0; y<grids; y++){ var yy = top + (y*5); if(yy > 745) yy -= 750; bl.push ('bl_'+ xx +'_bt_'+ yy); } } return bl.join("%2C"); }, 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, glory: uW.seed.player.glory, gloryMax: uW.seed.player.maxGlory, 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 && tData.tileUserId !== undefined && tData.tileUserId !== 0){ // 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, t: tiles, domain: (1*uW.g_server), }; } if(type == 'seed'){ obj = payload; } 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); } } }); }, 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 k in data){ str = str+'&'+k+'='+data[k]; } 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; } } }); return result; }, saveInfo: function(){ var info = JSON.stringify(kb.getCurrentInfo()); if(info){ var sid = kb.getServerId(); kb.setValue('ajaxparams',info); kb.setValue('sid',sid); } }, sendInfo: 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<now){ kb.log('sending'); var savedkey = kb.storagePrefix+'saved_ajaxparams'; var saved = JSON.parse(kb.getValue(savedkey,null)); var json = kb.getAjaxParams(); if(force || saved != json){ kb.setValue(k,''+now+''); kb.setValue(savedkey,''+JSON.stringify(json)); kb.sendToKB('info',json); kb.sendToKB('map', json); kb.log('send_info() complete.'); } } } }, sendSeed: function(force){ if(uW.g_ajaxparams && uW.g_server){ var now = new Date().getTime(); var k = kb.storagePrefix+'lastsent_seed'; var lastsent = kb.getValue(k,0); if(force || 1*lastsent+kb.sendSeedDelay<now){ kb.setValue(k,''+now+''); var json = kb.getSeed(); kb.sendToKB('seed',json); kb.log('send_seed();'); } } }, 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 x = 0; var y = 0; var cmd = command.split('|'); 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; } } } }, 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; }, 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,"<"); msg.replace(/>/gi,">"); html = '<div>'+kb.showTime()+' '+msg+'</div>'; }else{ msg = JSON.stringify(msg,null,"\t"); msg = msg.replace(/</gi,'<'); msg = msg.replace(/>/gi,'>'); html = '<pre>'+kb.showTime()+"\n"+msg+'</pre>'; } if(replaceIt == 1){ elem.html(html); }else{ var n = elem.children().length; if(n > 30){ elem.children(':last').remove(); } elem.prepend(html); } } }, authorizedWebsiteGet: function(){ var websites = JSON.parse(''+kb.getValue('authedSites',null)); if(!websites){ websites = ['www.kocbyte.therealmsbeyond.com']; } if($.inArray($(websites),'www.kocbyte.therealmsbeyond.com') != -1){ websites.push('www.kocbyte.therealmsbeyond.com'); } return websites; }, authorizedWebsiteAdd: function(url){ var websites = JSON.parse(''+kb.getValue('authedSites',null)); if(!websites){ websites = ['www.kocbyte.therealmsbeyond.com']; } if($.inArray($(websites),url) > -1){ websites.push(url); var sites = websites.filter(function(elem, pos) { return websites.indexOf(elem) == pos; }); kb.setValue('authedSites',''+JSON.stringify(sites)); return true; }else{ return false; } } }; kb.imgs[0]='data:image/png;base64,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'; var AutoUpdater = { id: 19269, URL: 'https://gf.qytechs.cn/en/scripts/19269-kocbyte/code/KoCByte.user.js', name: 'KoCByte', homepage: 'https://gf.qytechs.cn/en/scripts/19269-kocbyte', version: kb.scriptVer, call: function(response) { kb.log("Checking for "+this.name+" Update!"); var _s = this; GM_xmlhttpRequest({ method: 'GET', url: _s.URL, onload: function(xpr) {_s.compare(xpr,response);}, onerror: function(xpr) {_s.compare({responseText:""},response);} }); }, compareVersion: function(remoteVer, localVer) { return (parseInt(remoteVer) > parseInt(localVer)) ? true :false; }, compare: function(xpr,response) { this.xversion=(/@version\s*(.*?)\s*$/m.exec(xpr.responseText)); if(this.xversion){ this.xversion = this.xversion[1]; }else{ if(response){ uW.Modal.showAlert('<div align="center">Unable to check for updates to '+this.name+'.<br>Please change the update options or visit the<br><a href="'+this.homepage+'" target="_blank">script homepage</a></div>'); } kb.log("Unable to check for updates"); return; } this.xrelnotes=/\/\/\s*@releasenotes\s+(.+)\s*\n/i.exec(xpr.responseText); if (this.xrelnotes) this.xrelnotes = this.xrelnotes[1]; var updated = this.compareVersion(this.xversion, this.version); if (updated) { kb.log('New Version Available!'); var body = '<BR><DIV align=center><FONT size=3><B>New version '+this.xversion+' is available!</b></font></div><BR>'; if (this.xrelnotes){ body+='<BR><div align="center" style="border:0;width:470px;height:120px;max-height:120px;overflow:auto"><b>New Features!</b><p>'+this.xrelnotes+'</p></div><BR>'; } body+='<BR><DIV align=center><a class="gemButtonv2 green" id="doBotUpdate">Update</a></div>'; this.ShowUpdate(body); }else{ kb.log("No updates available"); if(response){ uW.Modal.showAlert('<div align="center">No updates available for '+this.name+' at this time.</div>'); } } }, check: function() { var now = uW.unixtime(); var lastCheck = 0; if (GM_getValue('updated_'+this.id, 0)) lastCheck = parseInt(GM_getValue('updated_'+this.id, 0)); if (now > (lastCheck + 60*1)) this.call(false); }, ShowUpdate: function (body) { var now = uW.unixtime(); setUpdate = function(){ GM_setValue('updated_'+AutoUpdater.id, now); }; kb.modal(this.name, body, setUpdate); document.getElementById('doBotUpdate').addEventListener('click', this.doUpdate, false); }, doUpdate: function () { uW.cm.ModalManager.closeAll(); uW.cm.ModalManager.close(); var now = uW.unixtime(); GM_setValue('updated_'+AutoUpdater.id, now); GM_openInTab(AutoUpdater.URL); }, }; var tabManager = { tabList : {}, // {name, obj, div} currentTab : null, init: function(mainDiv){ var t = tabManager; var sorter = []; for(var 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 = '<table cellspacing="3" class="kbMainTab"><tr>'; for (var i=0; i<sorter.length; i++) { m += '<td class="spacer"></td><td align="center" class="notSel" id="kbtc'+ sorter[i][1].name +'"><a><span>'+ sorter[i][1].label +'</span></a></td>'; //m += '<td align="center" class="notSel" id="kbtc'+ sorter[i][1].name +'"><a><span>'+ sorter[i][1].label +'</span></a></td>'; if((i+1)%9 === 0) m+='</tr><tr>'; } m+='</tr></table>'; //m += '<td class=spacer width=90% align=right>'+ Version +' </td></tr></table>'; mainPop.getMainTopDiv().innerHTML = m; for(var n in t.tabList){ if(t.tabList[n].name == Options.currentTab) t.currentTab = t.tabList[n] ; document.getElementById('kbtc'+ n).addEventListener('click', this.e_clickedTab, false); var div = t.tabList[n].div; div.style.display = 'none'; div.style.height = '100%'; uW.console.log(div); mainDiv.appendChild(div); try{ t.tabList[n].obj.init(div); }catch(e){ div.innerHTML = "INIT ERROR: "+ e; } } if(t.currentTab == null) t.currentTab = sorter[0][1]; t.setTabStyle (document.getElementById('kbtc'+ 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 ('kbtc'+ t.currentTab.name), false); t.setTabStyle(document.getElementById ('kbtc'+ 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(); }, }; var WinManager = { wins: {}, // prefix : kbPopup obj didHide: [], get: function(prefix){ var t = WinManager; return t.wins[prefix]; }, add: function(prefix, pop){ var t = WinManager; t.wins[prefix] = pop; if(uW.cpopupWins == null) uW.cpopupWins = {}; uW.cpopupWins[prefix] = pop; }, hideAll: function(){ var t = WinManager; t.didHide = []; for(var 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<t.didHide.length; i++) t.didHide[i].show(true); }, delete: function(prefix){ var t = WinManager; delete t.wins[prefix]; delete uW.cpopupWins[prefix]; } }; // creates a 'popup' div // prefix must be a unique (short) name for the popup window function kbPopup(prefix, x, y, width, height, onClose) { var pop = WinManager.get(prefix); if(pop){ pop.show (false); return pop; } this.BASE_ZINDEX = 111111; // protos ... this.show = show; this.toggleHide = toggleHide; this.getTopDiv = getTopDiv; this.getMainTopDiv = getMainTopDiv; this.getMainDiv = getMainDiv; this.getJQMainDiv = getJQMainDiv; this.getLayer = getLayer; this.setLayer = setLayer; this.getLocation = getLocation; this.setLocation = setLocation; this.focusMe = focusMe; this.isShown = isShown; this.unfocusMe = unfocusMe; this.centerMe = centerMe; this.destroy = destroy; this.autoHeight = autoHeight; // object vars ... this.div = document.createElement('div'); this.prefix = prefix; this.onClose = onClose; var t = this; this.div.className = 'kbPopup '+ prefix +'_kbPopup'; this.div.id = prefix +'_outer'; this.div.style.background = "#fff"; this.div.style.zIndex = this.BASE_ZINDEX; this.div.style.display = 'none'; this.div.style.width = width + 'px'; this.div.style.height = height + 'px'; this.div.style.maxHeight = height + 'px'; this.div.style.overflowY = 'show'; this.div.style.position = "absolute"; this.div.style.top = y +'px'; this.div.style.left = x + 'px'; var topClass = ''; if(kbPopUpTopClass==null) topClass = 'kbPopupTop '+ prefix +'_kbPopupTop'; else topClass = kbPopUpTopClass +' '+ prefix +'_'+ kbPopUpTopClass; var m = '<table cellspacing=0 width=100% ><tr id="'+ prefix +'_bar" class="'+ topClass +'"><td width=99% valign=bottom><SPAN id="'+ prefix +'_top"></span></td>'; m = m + '<td id='+ prefix +'_X align=right valign=middle onmouseover="this.style.cursor=\'pointer\'" style="color:#fff; background:#333; font-weight:bold; font-size:14px; padding:0px 5px; -moz-border-radius-topright: 20px;">x</td></tr>'; m = m + '</table><table cellspacing=0 width=100% ><tr><td height=100% valign=top class="kbPopMain '+ prefix +'_kbPopMain" colspan=2 id="'+ prefix +'_main"></td></tr></table>'; document.body.appendChild(this.div); this.div.innerHTML = m; document.getElementById(prefix+'_X').addEventListener ('click', e_XClose, false); 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(var k in uW.cpopupWins){ if(k != t.prefix) uW.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){ var coords; if(parent == null){ coords = getClientCoords(document.body); }else 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 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 getJQMainDiv(){ return $('#'+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 getClientCoords(e){ if (e==null) return {x:null, y:null, width:null, height:null}; var 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; } function eventHideShow(){ if(mainPop.toggleHide(mainPop)){ tabManager.showTab(); Options.kbWinIsOpen = true; } else { tabManager.hideTab(); Options.kbWinIsOpen = false; } } function createButton(label,id){ var a=document.createElement('a'); a.className='button20'; a.id = id; a.innerHTML='<span style="color: #ff6">'+ label +'</span>'; 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<e.childNodes.length; i++){ var ee = e.childNodes[i]; if (ee.tagName && ee.tagName=='DIV' && ee.className=='tabs_engagement' && ee.id!='main_engagement_tabs'){ gmTabs = ee; break; } } if(gmTabs == null){ gmTabs = document.createElement('div'); gmTabs.className='tabs_engagement'; gmTabs.style.background='#ca5'; tabs.parentNode.insertBefore (gmTabs, tabs); gmTabs.style.whiteSpace='nowrap'; gmTabs.style.width='735px'; gmTabs.lang = 'en_PB'; } gmTabs.style.height='0%'; gmTabs.style.overflow='auto'; gmTabs.appendChild(a); a.addEventListener('click',eventListener, false); if(mouseListener != null) a.addEventListener('mousedown',mouseListener, true); return a; } return null; } Tabs.Mod = { tabOrder: 1, tabDisabled: false, tabLabel: 'Mod', myDiv: null, timer: null, init: function(div){ // called once, upon script startup var t = Tabs.Mod; t.myDiv = div; var str = ''; str = str + '<div class="row">'; str = str + ' <div class="large-4 columns text-center">'; str = str + ' <strong>Mod</strong><br />'; str = str + ' <button id="'+kb.elemPrefix+'-main-update">Update</button> v<span id="'+kb.elemPrefix+'-main-version">'+kb.scriptVer+'</span>'; str = str + ' </div>'; str = str + ' <div class="large-4 columns end text-center">'; str = str + ' <strong>Website</strong><br />'; str = str + ' <button id="'+kb.elemPrefix+'-website-visit"><span>Visit Site</span></button><br />'; str = str + ' <button id="'+kb.elemPrefix+'-website-updateinfo"><span>Send Info</span></button>'; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' '; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' '; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns text-center">'; str = str + ' <strong>Log</strong>'; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' <pre id="'+kb.elemPrefix+'-log-result">Log text goes here</pre>'; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' '; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' '; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns text-center">'; str = str + ' <strong>Debug</strong>'; str = str + ' </div>'; str = str + '</div>'; str = str + '<div class="row">'; str = str + ' <div class="large-12 columns">'; str = str + ' <pre id="'+kb.elemPrefix+'-debug-result">Debug text goes here</pre>'; str = str + ' </div>'; str = str + '</div>'; $container = mainPop.getJQMainDiv(); $container.html(str); $('#'+kb.elemPrefix+'-main-update').click(function(){ AutoUpdater.check(false); }); $('#'+kb.elemPrefix+'-website-updateinfo').click(function(){ kb.sendInfo(1); }); $('#'+kb.elemPrefix+'-website-visit').click(function(){ GM_openInTab(kb.site); }); }, hide: function(){ // called whenever the main window is hidden, or another tab is selected var t = Tabs.Mod; }, show: function(){ // called whenever this tab is shown var t = Tabs.Mod; }, }; function init(){ var styles = 'a.ptButton20 {color:#ffff80}'; styles = styles + ' table.kbMainTab { empty-cells: show; margin-left: 5px; margin-top: 4px; padding: 1px; padding-left:5px;}'; styles = styles + ' table.kbMainTab tr td a {color:inherit }'; styles = styles + ' table.kbMainTab tr td {height:60%; empty-cells:show; padding: 0px 4px 0px 4px; margin-top:5px; white-space:nowrap; border: 1px solid; border-style: none none solid none; -moz-border-radius:5px; }'; styles = styles + ' table.kbMainTab tr td.spacer {padding: 0px 0px;}'; styles = styles + ' table.kbMainTab tr td.notSel { color: #ffffff; font-size: 12px; font-weight:bold; -moz-border-radius: 10px; -moz-box-shadow: 0px 1px 3px #357544; text-shadow: -1px 1px 3px #666666; border: solid #615461 1px; background: -moz-linear-gradient(top, #6ff28e, #196b2c);}'; styles = styles + ' table.kbMainTab tr td.sel { color: #000000; font-size: 12px; font-weight:bold; -moz-border-radius: 10px; -moz-box-shadow: 0px 1px 3px #357544; text-shadow: -1px 1px 3px #CECECE; border: solid #615461 1px; background: -moz-linear-gradient(top, #6ff28e, #196b2c);}'; styles = styles + ' table.kbMainTab tr td:hover { color: #191919; font-size: 12px; font-weight:bold; text-shadow: -1px 1px 3px #CECECE; background: -moz-linear-gradient(top, #43cc7e, #20a129)}'; styles = styles + ' tr.kbPopTop td { background-color:transparent; border:none; height: 21px; padding:0px;}'; styles = styles + ' tr.kbretry_kbPopTop td { background-color:#a00; color:#fff; border:none; height: 21px; padding:0px; }'; styles = styles + ' tr.kbMainPopTop td { background-color:#ded; border:none; height: 42px; width:80%; padding:0px; }'; styles = styles + ' tr.kbretry_kbMainPopTop td { background-color:#a00; color:#fff; border:none; height: 42px; padding:0px; }'; styles = styles + ' .kbPopMain { border:1px solid #000000; -moz-box-shadow:inset 0px 0px 10px #6a6a6a; -moz-border-radius-bottomright: 20px; -moz-border-radius-bottomleft: 20px;}'; styles = styles + ' .kbPopup {border:5px ridge #666; opacity:'+(parseFloat(Options.Opacity)<'0.5'?'0.5':Options.Opacity)+'; -moz-border-radius:25px; -moz-box-shadow: 1px 1px 5px #000000; z-index:999999;}'; styles = styles + ' span.kbTextFriendly {color: #080}'; styles = styles + ' span.kbTextHostile {color: #800}'; styles = styles + ' .kbButCancel {background-color:#a00; font-weight:bold; color:#fff}'; styles = styles + ' div.indent25 {padding-left:25px}'; styles = styles + ' .kbdivHeader {transparent;height: 16px;border-bottom:0px solid #000000;font-weight:bold;font-size:11px;opacity:0.75;margin-left:0px;margin-right:0px;margin-top:1px;margin-bottom:0px;padding-top:4px;padding-right:10px;vertical-align:text-top;align:left;background-color:#335577;}'; styles = styles + ' .kbdivLink {color:#000;text-decoration:none;}'; styles = styles + ' .kbdivLink:Hover {color:#000;text-decoration:none;}'; styles = styles + ' .kbdivLink:Active {color:#000;text-decoration:none;}'; styles = styles + ' .kbdivHide {display:none}'; mainPop = new kbPopup (kb.elemPrefix, 40, 40, 725,600, function (){ tabManager.hideTab(); Options.kbWinIsOpen=false; }); mainPop.autoHeight (true); mainPop.getMainDiv().innerHTML = '<style>'+ styles +'</style>'; AddMainTabLink('KoCByte', eventHideShow, null); tabManager.init(mainPop.getMainDiv()); kb.log('Gathering game info'); kb.gameInfoLoad(); if(!kb.uid || !kb.domain){ return; } kb.log('Saving game info'); kb.gameInfoSave(); //kb.watchtraffic(); //kb.interface_addcss(); kb.log('send_info()'); kb.sendInfo(1); kb.sendSeed(1); kb.sendInfoTimer=window.setInterval(function(){ kb.sendInfo(); }, kb.sendInfoDelay); kb.sendSeedTimer=window.setInterval(function(){ kb.sendSeed(); }, kb.sendSeedDelay); setTimeout(function(){AutoUpdater.check();},15000); kb.taskTimer=window.setInterval(function(){ kb.doTask(); },1000*1); } kb.elemPrefix = 'kb-'+kb.generateRandomNumber(0,65535); init();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址