// ==UserScript== // @name DotD tools // @namespace http://www.flipmctwist.tk // @description Tools for DotD on Kongregate // @include http://www.kongregate.com/games/* // @version 1.07 // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @downloadURL none // ==/UserScript== function main(s) { var dotd_tools = s; window.load = function(n) { if (typeof holodeck == 'object' && holodeck.ready == true) { init(); } else if (n < 25) { setTimeout(function(){load(n+1);},1000); } else { console.log('DE: aborting'); } } load(0); window.init = function() { var r = /^Play\s(.+?)\x2C/.exec(document.title); document.title = r[1]; window.addEventListener("focus", function() { tabFocus(); }, false); ChatDialogue.MESSAGE_TEMPLATE=new Template('

#{time} #{prefix}#{username}: #{message}

'); ChatDialogue.MESSAGE_TEMPLATE.reEval = ChatDialogue.MESSAGE_TEMPLATE.evaluate; ChatDialogue.MESSAGE_TEMPLATE.evaluate = function(a) { a.time = dotd_tools['tools_timestamp'] == true ? timestamp() + " ": ""; return this.reEval(a); }; ChatDialogue.prototype.msgHandler = ChatDialogue.prototype.displayUnsanitizedMessage; ChatDialogue.prototype.displayUnsanitizedMessage = function(a,b,c,d) { //console.log("Chat:" + a,b); if (!c) { c = {}; } if (dotd_tools['tools_charter'] == true && /kv_action_type\=signcharter/.test(b)) { return; } if (dotd_tools['tools_friend'] == true && isFriend(a)) { c.class += " friend"; } if (dotd_tools['tools_highlight'] == true) { if (b.search(holodeck._username) >= 0) { c.class += " highlight"; if (dotd_tools['tools_highlight_alert'] == true) { tabAlert(); } } else if (dotd_tools['tools_highlight_ext'] == true) { var s = dotd_tools['tools_highlight_list']; s = s.replace(/(\.|\*|\$|\^|\[|\]|\+|\?)/g,"\\$1"); var r = new RegExp("(^|\\s|@)("+s.replace(/(,|\s)/g,'|')+")(\\s|\\.|\\,|\\!|\\:|\\?|\\'|$)", "ig"); if (r.test(b)) { c.class += " highlight"; if (dotd_tools['tools_highlight_alert'] == true) { tabAlert(); } } } } this.msgHandler(a,b,c,d); }; newTab(); setCSS(); holodeck.addChatCommand("room",function(o,t) { var n; if (n = /^\/room\s(\d{1,2})/.exec(t)) { changeRoom(n[1]); return false; } }); holodeck.addChatCommand("echo",function(o,t) { var n; if (n = /^\/echo\s(.+?)$/.exec(t)) { echo(n[1]); return false; } }); holodeck.addChatCommand("share",function(o,t) { var n; if (n = /^\/share\s(.+?)$/.exec(t)) { if (/kv_action_type\=raidhelp/.test(t)) { shareMsg(n[1]); return false; } else { echo("Not a valid raid link"); return false; } } }); holodeck.addChatCommand("tools",function(o,t) { msgRoom("DotD tools by DanElectro: https://greasyfork.org/scripts/3827-dotd-tools"); return false; }); } window.msgRoom = function(msg,re) { if (re) { msg = msg.replace(/(\$\$)/i,re); } holodeck.activeDialogue()._holodeck.filterOutgoingMessage(msg,holodeck.activeDialogue()._onInputFunction); } window.echo = function(msg) { holodeck.activeDialogue().msgHandler("DotD Tools:",msg,{class: "whisper whisper_received"},{non_user: true}); } window.shareMsg = function(msg) { var x = document.getElementById('tools_share_table'); var names = []; for (var i=0;x.children[i];i++) { names.push(x.children[i].id); } delaySend(0,names,msg); } window.delaySend = function(i,names,msg) { holodeck.activeDialogue().sendPrivateMessage(names[i],msg); setTimeout(function(){delaySend(i+1,names,msg);},1000); } window.newTab = function(name) { var pane = document.createElement('div'); var link = document.createElement('a'); var tab = document.createElement('li'); var html = [ '
', '
DotD tools by DanElectro

', '
', ' Enable timestamp
', ' Friend color:
', ' Highlight color:
', ' Also Highlight:
', ' Enable Highlight alerts
', ' Hide Raidcatcher toolbar
', ' Hide guild charter messages
', ' Shorten Achievements tab name
', ' Clean up page
', ' ', '
', '


Raid sharing

', '
', '

', '

', '
', '
', '

', 'You can also share raids with the /share command.', '
', '


Chat Commands

', '
', '

', 'Command:

', 'Message:


', '', '
', '
' ].join(''); pane.id = "tools_tab_pane"; pane.className = "tabpane"; pane.style = "display:none;"; pane.innerHTML = html; link.href = "#tools_tab_pane"; link.innerHTML = 'Tools'; tab.id = "tools_tab"; tab.className = "tab"; tab.appendChild(link); document.getElementById('kong_game_ui').appendChild(pane); document.getElementById('main_tab_set').appendChild(tab); holodeck._tabs.addTab(link); loadData(); } window.tabAlert = function() { if (document.hidden) { var r = /^Play\s(.+?)\x2C/.exec(document.title); document.title = "[New message] "+r[1]; changeIcon("data:image/x-icon;base64,AAABAAEAEhIAAAEAGABgBAAAFgAAACgAAAASAAAAJAAAAAEAGAAAAAAAAAAAAGAAAABgAAAAAAAAAAAAAAAYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgAABgYGAAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmRgYGAAAGRkZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZAACZGRkZAAAZGRkAAJlAQLP///////////////////9AQLMAAJn///////////////////9/f8wAAJkZGRkAABoaGgAAmUBAs////////////////8/P7CAgpgAAmf///////////////9/f8lBQuQAAmRoaGgAAGhoaAACZAACZAACZv7/l////v7/lAACZAACZAACZcHDG////////n5/ZAACZAACZAACZGhoaAAAbGxsAAJkAAJkAAJm/v+X////Pz+wAAJkAAJkwMKz////////Pz+wQEJ8AAJkAAJkAAJkbGxsAABsbGwAAmQAAmQAAmb+/5f///////5+f2QAAmc/P7P///+/v+TAwrAAAmQAAmQAAmQAAmRsbGwAAHBwcAACZAACZAACZv7/l//////////////8A//8A//8A//8AAAAA//8A//8A//8A//8AHBwcAAAcHBwAAJkAAJkAAJm/v+X///+/v+VwcMb//wD//wD//wAAAAAAAAAAAAD//wD//wD//wAcHBwAAB0dHQAAmQAAmQAAmb+/5f///7+/5QAAmf//AP//AP//AP//AAAAAP//AP//AP//AP//AB0dHQAAHR0dAACZAACZAACZv7/l////v7/lAACZ//8A//8A//8A//8A//8A//8A//8A//8A//8AHR0dAAAeHh4AAJkAAJkAAJnPz+z///+/v+UAAJn//wD//wD//wAAAAAAAAAAAAD//wD//wD//wAeHh4AAB4eHgAAmTAwrO/v+f//////////////////AP//AP//AAAAAAAAAAAAAP//AP//AP//AB4eHgAAHh4eAACZQECz//////////////////////8A//8A//8AAAAAAAAAAAAA//8A//8A//8AHh4eAAAeHh4AAJkAAJkAAJkAAJkAAJkAAJkAAJn//wD//wD//wAAAAAAAAAAAAD//wD//wD//wAeHh4AAB4eHgAAmQAAmQAAmQAAmQAAmQAAmQAAmf//AP//AP//AP//AP//AP//AP//AP//AP//AB4eHgAAHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); } } window.tabFocus = function() { var r = /^Play\s(.+?)\x2C/.exec(document.title); document.title = r[1]; changeIcon("http://cdn1.kongcdn.com/favicon.png"); } window.changeIcon = function(t) { x = document.getElementById("tools_icon"); if (x) { x.parentNode.removeChild(x); } var favicon = document.createElement("link"); favicon.rel = "shortcut icon"; favicon.type = "image/png"; favicon.href = t; favicon.id = "tools_icon"; document.head.appendChild(favicon); } window.setCSS = function() { var html = [ '.time {float:left!important;}', '.iBig {width:98%;}', '.iSmall {width:60px;}', '.friend span.username {color:'+ dotd_tools["tools_fcolor"] +'!important;}', '.highlight .message {color:'+ dotd_tools["tools_hcolor"] +'!important;}', '.tools_share_name {border: 1px solid #666666; padding:1px;}', '.cmdname {width:50px;display:inline-block;}', '.container {width:100%;}', '.container .left {display:table-cell;padding-right:4px;} ', '.container .right {display:table-cell;width:100%;}', '#tools_com_table {overflow-x:auto;white-space:nowrap;}' ]; if (/5thplanetgames\/dawn-of-the-dragons/i.test(document.location.href) && dotd_tools["tools_clean_page"] == true) { html.push('.game_page_wrap {display:none;}','#subwrap {display:none;}','.game_details_outer {display:none;}'); } if (dotd_tools["tools_rctoolbar"] == true) { html.push('#DotD_chatToolbar {visibility:hidden;}'); } document.getElementById("tools_css").innerHTML = html.join(''); } window.addCmd = function() { var cname = document.getElementById('tools_cmdname'); var cdata = document.getElementById('tools_cmddata'); if (cname.value && cdata.value) { var cn = cname.value.replace(/\//g,"") document.getElementById('tools_com_table').innerHTML += '
[remove] /'+cn+' : '+cdata.value+'
'; window.postMessage('DotD_tools addcom '+cn+'|'+cdata.value,'*'); regCmd(cn,cdata.value); cname.value = ""; cdata.value = ""; } } window.remCmd = function(x) { var e = x.parentElement.parentElement.parentElement; e.parentElement.removeChild(e); window.postMessage('DotD_tools remcom '+e.id,'*') } window.regCmd = function(name,msg) { holodeck.addChatCommand(name, function(o,t) { var r = new RegExp("^\/"+name+"\\s(.+?)$","i"); var n = r.exec(t); if (n) { msgRoom(msg,n[1]); } else { msgRoom(msg,""); } return false; }); } window.addShare = function() { var n = document.getElementById('tools_share_name').value; if (n) { document.getElementById('tools_share_name').value = ""; document.getElementById('tools_share_table').innerHTML += ''+n+'x '; window.postMessage('DotD_tools make share','*'); } } window.remShare = function(x) { var e = x.parentElement.parentElement; e.parentElement.removeChild(e); window.postMessage('DotD_tools make share','*'); } window.sendShare = function() { var x = document.getElementById('tools_share_link'); if (x.value && /kv_action_type\=raidhelp/.test(x.value)) { shareMsg(x.value); x.value = ""; } } window.saveData = function() { var x = document.getElementById('tools_settings'); var sdata = {}; var d = new Date(); for (var i=0;i < x.length;i++) { if (x.elements[i].type == "checkbox") { sdata[x.elements[i].name] = x.elements[i].checked; } else if (x.elements[i].type == "text") { var val = x.elements[i].value; sdata[x.elements[i].name] = val; } } dotd_tools = sdata; setCSS(); document.getElementById('accomplishments_tab').children[0].innerHTML = dotd_tools['tools_achtab'] == true ? "A" : "Achievements"; window.postMessage('DotD_tools save '+JSON.stringify(sdata),'*'); document.getElementById("tools_save_info").innerHTML = "Saved at "+ d.toLocaleTimeString(); } window.loadData = function() { window.postMessage('DotD_tools load','*'); } window.rClick = function(name,e) { if (e.ctrlKey == true) { document.getElementById('tools_share_table').innerHTML += ''+name+'x '; window.postMessage('DotD_tools make share','*'); echo(name +' added to share list.'); } else { holodeck.chatWindow().insertPrivateMessagePrefixFor(name); } } window.isFriend = function(name) { return holodeck.activeDialogue()._user_manager.isFriend(name); } window.timestamp = function() { var d = new Date(); var h = (d.getHours() < 10) ? "0"+d.getHours() : d.getHours(); var m = (d.getMinutes() < 10) ? "0"+d.getMinutes() : d.getMinutes(); return '['+h+':'+m+']'; } window.changeRoom = function(n) { n=n-1; if (n >= 0 && n < 13) { var r = [ {"name":"Dawn of the Dragons - Room #01","id":"44247","xmpp_name":"138636-dawn-of-the-dragons-1","type":"game"}, {"name":"Dawn of the Dragons - Room #02","id":"138636","xmpp_name":"138636-dawn-of-the-dragons-2","type":"game"}, {"name":"Dawn of the Dragons - Room #03","id":"44303","xmpp_name":"138636-dawn-of-the-dragons-3","type":"game"}, {"name":"Dawn of the Dragons - Room #04","id":"44336","xmpp_name":"138636-dawn-of-the-dragons-4","type":"game"}, {"name":"Dawn of the Dragons - Room #05","id":"44341","xmpp_name":"138636-dawn-of-the-dragons-5","type":"game"}, {"name":"Dawn of the Dragons - Room #06","id":"44345","xmpp_name":"138636-dawn-of-the-dragons-6","type":"game"}, {"name":"Dawn of the Dragons - Room #07","id":"44348","xmpp_name":"138636-dawn-of-the-dragons-7","type":"game"}, {"name":"Dawn of the Dragons - Room #08","id":"44464","xmpp_name":"138636-dawn-of-the-dragons-8","type":"game"}, {"name":"Dawn of the Dragons - Room #09","id":"44465","xmpp_name":"138636-dawn-of-the-dragons-9","type":"game"}, {"name":"Dawn of the Dragons - Room #10","id":"44466","xmpp_name":"138636-dawn-of-the-dragons-10","type":"game"}, {"name":"Dawn of the Dragons - Room #11","id":"44467","xmpp_name":"138636-dawn-of-the-dragons-11","type":"game"}, {"name":"Dawn of the Dragons - Room #12","id":"44468","xmpp_name":"138636-dawn-of-the-dragons-12","type":"game"}, {"name":"Dawn of the Dragons - Room #13","id":"44473","xmpp_name":"138636-dawn-of-the-dragons-13","type":"game"} ] holodeck.joinRoom(r[n]); } } } function rMessage(e) { var r; if (r = /^DotD_tools\ssave\s(.+?)$/.exec(e.data)) { GM_setValue("settings",r[1]); } else if (r = /^DotD_tools\sload$/.exec(e.data)) { var sdata = JSON.parse(GM_getValue("settings")); var x = document.getElementById('tools_settings'); for (var i=0;x.elements[i] != null;i++) { if (x.elements[i].type == "checkbox") { x.elements[i].checked = sdata[x.elements[i].name]; } else if (x.elements[i].type == "text") { x.elements[i].value = sdata[x.elements[i].name]; } } if (sdata['tools_achtab'] == true) { document.getElementById('accomplishments_tab').children[0].innerHTML = "A"; } sdata = JSON.parse(GM_getValue("share")); var html = ""; for (var i=0;sdata[i] != null;i++) { html += ''+sdata[i]+'x '; } document.getElementById('tools_share_table').innerHTML = html; html = ""; sdata = JSON.parse(GM_getValue("commands")); for (var i in sdata) { html += '
[remove] /'+i+' : '+sdata[i]+'
'; unsafeWindow.regCmd(i,sdata[i]); } document.getElementById('tools_com_table').innerHTML = html; } else if (r = /^DotD_tools\smake\sshare$/.exec(e.data)) { var sdata = {}; var x = document.getElementById('tools_share_table'); for (var i=0;x.children[i];i++) { sdata[i] = x.children[i].id; } GM_setValue("share",JSON.stringify(sdata)); } else if (r = /^DotD_tools\saddcom\s(.+?)$/.exec(e.data)) { var sdata = GM_getValue("commands") ? JSON.parse(GM_getValue("commands")) : {}; var x = r[1].split("|"); sdata[x[0]] = x[1]; GM_setValue("commands",JSON.stringify(sdata)); } else if (r = /^DotD_tools\sremcom\s(.+?)$/.exec(e.data)) { var sdata = JSON.parse(GM_getValue("commands")); delete sdata[r[1]]; GM_setValue("commands",JSON.stringify(sdata)) } } if (window.top == window.self) { if (GM_getValue("settings") == undefined) { var s = {"tools_timestamp":true,"tools_charter":false,"tools_friend":false,"tools_fcolor":"#0088CC","tools_highlight":false,"tools_hcolor":"#00CCCC","tools_highlight_ext":false,"tools_highlight_list":"","tools_highlight_alert":false,"tools_achtab":true,"tools_clean_page":false,"tools_rctoolbar":false}; GM_setValue("settings",JSON.stringify(s)); } if (GM_getValue("share") == undefined) { GM_setValue("share",""); } if (GM_getValue("commands") == undefined) { GM_setValue("commands",""); } var s = GM_getValue("settings"); var script = document.createElement('script'); script.type = "text/javascript"; script.appendChild(document.createTextNode('('+main+')('+s+')')); document.head.appendChild(script); window.addEventListener("message",rMessage,false); var css = document.createElement('style'); css.id = "tools_css"; css.type = "text/css"; document.head.appendChild(css); }