DotD tools

Tools for DotD on Kongregate

当前为 2014-08-06 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name DotD tools
  3. // @namespace http://www.flipmctwist.tk
  4. // @description Tools for DotD on Kongregate
  5. // @include http://www.kongregate.com/games/*
  6. // @version 1.04
  7. // @grant GM_xmlhttpRequest
  8. // @grant GM_getValue
  9. // @grant GM_setValue
  10. // ==/UserScript==
  11.  
  12. function main(s) {
  13. var dotd_tools = s;
  14. window.load = function(n) {
  15. if (typeof holodeck == 'object' && holodeck.ready == true) {
  16. init();
  17. }
  18. else if (n < 25) {
  19. setTimeout(function(){load(n+1);},1000);
  20. }
  21. else { console.log('DE: aborting'); }
  22. }
  23. load(0);
  24. window.init = function() {
  25. document.title = "Dawn of the Dragons";
  26. window.addEventListener("focus", function() { tabFocus(); }, false);
  27. ChatDialogue.MESSAGE_TEMPLATE=new Template('<p class="#{classNames}"><span class="#{userClassNames} username time">#{time}</span> <span username="#{username}" class="username #{userClassNames}" oncontextmenu="rClick(\'#{username}\',event);return false;">#{prefix}#{username}</span><span class="separator">: </span><span class="message hyphenate">#{message}</span><span class="clear"></span></p>');
  28. ChatDialogue.MESSAGE_TEMPLATE.reEval = ChatDialogue.MESSAGE_TEMPLATE.evaluate;
  29. ChatDialogue.MESSAGE_TEMPLATE.evaluate = function(a) {
  30. a.time = dotd_tools['tools_timestamp'] == true ? timestamp() + "&nbsp;": "";
  31. return this.reEval(a);
  32. };
  33. ChatDialogue.prototype.msgHandler = ChatDialogue.prototype.displayUnsanitizedMessage;
  34. ChatDialogue.prototype.displayUnsanitizedMessage = function(a,b,c,d) {
  35. //console.log("Chat:" + a,b);
  36. if (!c) { c = {}; }
  37. if (dotd_tools['tools_charter'] == true && /kv_action_type\=signcharter/.test(b)) { return; }
  38. if (dotd_tools['tools_friend'] == true && isFriend(a)) { c.class += " friend"; }
  39. if (dotd_tools['tools_highlight'] == true) {
  40. if (b.search(holodeck._username) >= 0) {
  41. c.class += " highlight";
  42. if (dotd_tools['tools_highlight_alert'] == true) { tabAlert(); }
  43. }
  44. else if (dotd_tools['tools_highlight_ext'] == true) {
  45. var s = dotd_tools['tools_highlight_list'];
  46. s = s.replace(/(\.|\*|\$|\^|\[|\]|\+|\?)/g,"\\$1");
  47. var r = new RegExp("(^|\\s|@)("+s.replace(/(,|\s)/g,'|')+")(\\s|\\.|\\,|\\!|\\:|\\?|\\'|$)", "ig");
  48. if (r.test(b)) {
  49. c.class += " highlight";
  50. if (dotd_tools['tools_highlight_alert'] == true) { tabAlert(); }
  51. }
  52. }
  53. }
  54. this.msgHandler(a,b,c,d);
  55. };
  56. newTab();
  57. setCSS();
  58. holodeck.addChatCommand("room",function(o,t) {
  59. var n;
  60. if (n = /^\/room\s(\d{1,2})/.exec(t)) {
  61. changeRoom(n[1]);
  62. return false;
  63. }
  64. });
  65. holodeck.addChatCommand("echo",function(o,t) {
  66. var n;
  67. if (n = /^\/echo\s(.+?)$/.exec(t)) {
  68. echo(n[1]);
  69. return false;
  70. }
  71. });
  72. holodeck.addChatCommand("share",function(o,t) {
  73. var n;
  74. if (n = /^\/share\s(.+?)$/.exec(t)) {
  75. if (/kv_action_type\=raidhelp/.test(t)) {
  76. shareMsg(n[1]);
  77. return false;
  78. }
  79. else {
  80. echo("Not a valid raid link");
  81. return false;
  82. }
  83. }
  84. });
  85. holodeck.addChatCommand("tools",function(o,t) {
  86. msgRoom("DotD tools by DanElectro: https://greasyfork.org/scripts/3827-dotd-tools");
  87. return false;
  88. });
  89. }
  90. window.msgRoom = function(msg) {
  91. holodeck.activeDialogue()._holodeck.filterOutgoingMessage(msg,holodeck.activeDialogue()._onInputFunction);
  92. }
  93. window.echo = function(msg) {
  94. holodeck.activeDialogue().msgHandler("DotD Tools:",msg,{class: "whisper whisper_received"},{non_user: true});
  95. }
  96. window.shareMsg = function(msg) {
  97. var x = document.getElementById('tools_share_table');
  98. var names = [];
  99. for (var i=0;x.children[i];i++) {
  100. names.push(x.children[i].id);
  101. }
  102. delaySend(0,names,msg);
  103. }
  104. window.delaySend = function(i,names,msg) {
  105. holodeck.activeDialogue().sendPrivateMessage(names[i],msg);
  106. setTimeout(function(){delaySend(i+1,names,msg);},1000);
  107. }
  108. window.newTab = function(name) {
  109. var pane = document.createElement('div');
  110. var link = document.createElement('a');
  111. var tab = document.createElement('li');
  112. var html = [
  113. '<div id="tools_cont" style="height:'+document.getElementById('chat_tab_pane').style.height+';">',
  114. '<div>DotD tools by DanElectro</div><br />',
  115. '<form id="tools_settings" class="tools_form" onSubmit="saveData();return false;">',
  116. '<input type="checkbox" name="tools_timestamp" /> Enable timestamp<br />',
  117. '<input type="checkbox" name="tools_charter" /> Hide guild charter messages<br />',
  118. '<input type="checkbox" name="tools_achtab" /> Shorten Achievements tab name<br />',
  119. '<input type="checkbox" name="tools_friend" /> Friend color: <input type="text" name="tools_fcolor" class="iSmall" /><br />',
  120. '<input type="checkbox" name="tools_highlight" /> Highlight color: <input type="text" name="tools_hcolor" class="iSmall" /><br />',
  121. '<input type="checkbox" name="tools_highlight_ext" /> Also Highlight: <input type="text" name="tools_highlight_list" /><br />',
  122. '<input type="checkbox" name="tools_highlight_alert" /> Enable Highlight alerts<br />',
  123. '<input type="submit" value="Save"> <span id="tools_save_info"></span>',
  124. '</form>',
  125. '<br /><hr /><br /><div>Raid sharing</div><br />',
  126. '<form id="tools_sharing" class="tools_form" onSubmit="addShare();return false;">',
  127. '<div id="tools_share_table"></div><br />',
  128. '<input type="text" name="tools_share_name" id="tools_share_name" class="iSmall" /> <input type="submit" value="Add" /><br /><br />',
  129. '</form>',
  130. '<form id="tools_sharing_submit" class="tools_form" onSubmit="sendShare();return false;">',
  131. '<div class="container"><div class="left"><input type="submit" value="Share" /></div> <div class="right"><input type="text" name="tools_share_link" id="tools_share_link" class="iBig" /></div></div><br />',
  132. 'You can also share raids with the /share command.',
  133. '</form>',
  134. '<br /><hr /><br /><div>Chat Commands</div><br />',
  135. '<form id="tools_commands" class="tools_form" onSubmit="addCmd();return false;">',
  136. '<div id="tools_com_table"></div><br />',
  137. 'Command: <br/><input type="text" name="tools_cmdname" id="tools_cmdname" class="iSmall" /><br />',
  138. 'Message: <br /><input type="text" name="tools_cmddata" id="tools_cmddata" class="iBig" /><br /><br />',
  139. '<input type="submit" value="New" />',
  140. '</form>',
  141. '</div>'
  142. ].join('');
  143. pane.id = "tools_tab_pane";
  144. pane.className = "tabpane";
  145. pane.style = "display:none;";
  146. pane.innerHTML = html;
  147. link.href = "#tools_tab_pane";
  148. link.innerHTML = 'Tools';
  149. tab.id = "tools_tab";
  150. tab.className = "tab";
  151. tab.appendChild(link);
  152. document.getElementById('kong_game_ui').appendChild(pane);
  153. document.getElementById('main_tab_set').appendChild(tab);
  154. holodeck._tabs.addTab(link);
  155. loadData();
  156. }
  157. window.tabAlert = function() {
  158. if (document.hidden) {
  159. 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=");
  160. document.title = "[New message] Dawn of the Dragons";
  161. }
  162. }
  163. window.tabFocus = function() {
  164. changeIcon("http://cdn1.kongcdn.com/favicon.png");
  165. document.title = "Dawn of the Dragons";
  166. }
  167. window.changeIcon = function(t) {
  168. x = document.getElementById("tools_icon");
  169. if (x) { x.parentNode.removeChild(x); }
  170. var favicon = document.createElement("link");
  171. favicon.rel = "shortcut icon";
  172. favicon.type = "image/png";
  173. favicon.href = t;
  174. favicon.id = "tools_icon";
  175. document.head.appendChild(favicon);
  176. }
  177. window.setCSS = function() {
  178. document.getElementById("tools_css").innerHTML = [
  179. '.time {float:left!important;}',
  180. '.iBig {width:98%;}',
  181. '.iSmall {width:60px;}',
  182. '.friend span.username {color:'+ dotd_tools["tools_fcolor"] +'!important;}',
  183. '.highlight .message {color:'+ dotd_tools["tools_hcolor"] +'!important;}',
  184. '.tools_share_name {border: 1px solid #666666; padding:1px;}',
  185. '.cmdname {width:50px;display:inline-block;}',
  186. '.container {width:100%;}',
  187. '.container .left {display:table-cell;padding-right:4px;} ',
  188. '.container .right {display:table-cell;width:100%;}',
  189. '#tools_com_table {overflow-x:auto;white-space:nowrap;}'
  190. ].join('');
  191. }
  192. window.addCmd = function() {
  193. var cname = document.getElementById('tools_cmdname');
  194. var cdata = document.getElementById('tools_cmddata');
  195. if (cname.value && cdata.value) {
  196. var cn = cname.value.replace(/\//g,"")
  197. document.getElementById('tools_com_table').innerHTML += '<div class="tools_cmd" id="'+cn+'"><span><sup><a href="#" onClick="remCmd(this);return false;">[remove]</a></sup></span> <span class="cmdname">/'+cn+'</span> <span>:</span> <span class="cmditem">'+cdata.value+'</span></div>';
  198. window.postMessage('DotD_tools addcom '+cn+'|'+cdata.value,'*');
  199. regCmd(cn,cdata.value);
  200. cname.value = "";
  201. cdata.value = "";
  202. }
  203. }
  204. window.remCmd = function(x) {
  205. var e = x.parentElement.parentElement.parentElement;
  206. e.parentElement.removeChild(e);
  207. window.postMessage('DotD_tools remcom '+e.id,'*')
  208. }
  209. window.regCmd = function(name,msg) {
  210. holodeck.addChatCommand(name, function(o,t) {
  211. var r = new RegExp("^\/"+name+"\\s(.+?)$","i");
  212. var n = r.exec(t);
  213. if (n[1]) { msg = msg.replace(/(\$\$)/i,n[1]); }
  214. msgRoom(msg);
  215. return false;
  216. });
  217. }
  218. window.addShare = function() {
  219. var n = document.getElementById('tools_share_name').value;
  220. if (n) {
  221. document.getElementById('tools_share_name').value = "";
  222. document.getElementById('tools_share_table').innerHTML += '<span class="tools_share_name" id="'+n+'">'+n+'<sup><a href="#" onClick="remShare(this);return false;">x</a></sup></span> ';
  223. window.postMessage('DotD_tools make share','*');
  224. }
  225. }
  226. window.remShare = function(x) {
  227. var e = x.parentElement.parentElement;
  228. e.parentElement.removeChild(e);
  229. window.postMessage('DotD_tools make share','*');
  230. }
  231. window.sendShare = function() {
  232. var x = document.getElementById('tools_share_link');
  233. if (x.value && /kv_action_type\=raidhelp/.test(x.value)) {
  234. shareMsg(x.value);
  235. x.value = "";
  236. }
  237. }
  238. window.saveData = function() {
  239. var x = document.getElementById('tools_settings');
  240. var sdata = {};
  241. var d = new Date();
  242. for (var i=0;i < x.length;i++) {
  243. if (x.elements[i].type == "checkbox") { sdata[x.elements[i].name] = x.elements[i].checked; }
  244. else if (x.elements[i].type == "text") {
  245. var val = x.elements[i].value;
  246. sdata[x.elements[i].name] = val;
  247. }
  248. }
  249. dotd_tools = sdata;
  250. setCSS();
  251. document.getElementById('accomplishments_tab').children[0].innerHTML = dotd_tools['tools_achtab'] == true ? "A" : "Achievements";
  252. window.postMessage('DotD_tools save '+JSON.stringify(sdata),'*');
  253. document.getElementById("tools_save_info").innerHTML = "Saved at "+ d.toLocaleTimeString();
  254. }
  255. window.loadData = function() {
  256. window.postMessage('DotD_tools load','*');
  257. }
  258. window.rClick = function(name,e) {
  259. if (e.ctrlKey == true) {
  260. document.getElementById('tools_share_table').innerHTML += '<span class="tools_share_name" id="'+name+'">'+name+'<sup><a href="#" onClick="remShare(this);return false;">x</a></sup></span> ';
  261. window.postMessage('DotD_tools make share','*');
  262. echo(name +' added to share list.');
  263. }
  264. else { holodeck.chatWindow().insertPrivateMessagePrefixFor(name); }
  265. }
  266. window.isFriend = function(name) {
  267. return holodeck.activeDialogue()._user_manager.isFriend(name);
  268. }
  269. window.timestamp = function() {
  270. var d = new Date();
  271. var h = (d.getHours() < 10) ? "0"+d.getHours() : d.getHours();
  272. var m = (d.getMinutes() < 10) ? "0"+d.getMinutes() : d.getMinutes();
  273. return '['+h+':'+m+']';
  274. }
  275. window.changeRoom = function(n) {
  276. n=n-1;
  277. if (n >= 0 && n < 13) {
  278. var r = [
  279. {"name":"Dawn of the Dragons - Room #01","id":"44247","xmpp_name":"138636-dawn-of-the-dragons-1","type":"game"},
  280. {"name":"Dawn of the Dragons - Room #02","id":"138636","xmpp_name":"138636-dawn-of-the-dragons-2","type":"game"},
  281. {"name":"Dawn of the Dragons - Room #03","id":"44303","xmpp_name":"138636-dawn-of-the-dragons-3","type":"game"},
  282. {"name":"Dawn of the Dragons - Room #04","id":"44336","xmpp_name":"138636-dawn-of-the-dragons-4","type":"game"},
  283. {"name":"Dawn of the Dragons - Room #05","id":"44341","xmpp_name":"138636-dawn-of-the-dragons-5","type":"game"},
  284. {"name":"Dawn of the Dragons - Room #06","id":"44345","xmpp_name":"138636-dawn-of-the-dragons-6","type":"game"},
  285. {"name":"Dawn of the Dragons - Room #07","id":"44348","xmpp_name":"138636-dawn-of-the-dragons-7","type":"game"},
  286. {"name":"Dawn of the Dragons - Room #08","id":"44464","xmpp_name":"138636-dawn-of-the-dragons-8","type":"game"},
  287. {"name":"Dawn of the Dragons - Room #09","id":"44465","xmpp_name":"138636-dawn-of-the-dragons-9","type":"game"},
  288. {"name":"Dawn of the Dragons - Room #10","id":"44466","xmpp_name":"138636-dawn-of-the-dragons-10","type":"game"},
  289. {"name":"Dawn of the Dragons - Room #11","id":"44467","xmpp_name":"138636-dawn-of-the-dragons-11","type":"game"},
  290. {"name":"Dawn of the Dragons - Room #12","id":"44468","xmpp_name":"138636-dawn-of-the-dragons-12","type":"game"},
  291. {"name":"Dawn of the Dragons - Room #13","id":"44473","xmpp_name":"138636-dawn-of-the-dragons-13","type":"game"}
  292. ]
  293. holodeck.joinRoom(r[n]);
  294. }
  295. }
  296. }
  297. function rMessage(e) {
  298. var r;
  299. if (r = /^DotD_tools\ssave\s(.+?)$/.exec(e.data)) {
  300. GM_setValue("settings",r[1]);
  301. }
  302. else if (r = /^DotD_tools\sload$/.exec(e.data)) {
  303. var sdata = JSON.parse(GM_getValue("settings"));
  304. var x = document.getElementById('tools_settings');
  305. for (var i=0;x.elements[i] != null;i++) {
  306. if (x.elements[i].type == "checkbox") { x.elements[i].checked = sdata[x.elements[i].name]; }
  307. else if (x.elements[i].type == "text") { x.elements[i].value = sdata[x.elements[i].name]; }
  308. }
  309. if (sdata['tools_achtab'] == true) { document.getElementById('accomplishments_tab').children[0].innerHTML = "A"; }
  310. sdata = JSON.parse(GM_getValue("share"));
  311. var html = "";
  312. for (var i=0;sdata[i] != null;i++) {
  313. html += '<span class="tools_share_name" id="'+sdata[i]+'">'+sdata[i]+'<sup><a href="#" onClick="remShare(this);return false;">x</a></sup></span> ';
  314. }
  315. document.getElementById('tools_share_table').innerHTML = html;
  316. html = "";
  317. sdata = JSON.parse(GM_getValue("commands"));
  318. for (var i in sdata) {
  319. html += '<div class="tools_cmd" id="'+i+'"><span><sup><a href="#" onClick="remCmd(this);return false;">[remove]</a></sup></span> <span class="cmdname">/'+i+'</span> <span>:</span> <span class="cmditem">'+sdata[i]+'</span></div>';
  320. unsafeWindow.regCmd(i,sdata[i]);
  321. }
  322. document.getElementById('tools_com_table').innerHTML = html;
  323. }
  324. else if (r = /^DotD_tools\smake\sshare$/.exec(e.data)) {
  325. var sdata = {};
  326. var x = document.getElementById('tools_share_table');
  327. for (var i=0;x.children[i];i++) {
  328. sdata[i] = x.children[i].id;
  329. }
  330. GM_setValue("share",JSON.stringify(sdata));
  331. }
  332. else if (r = /^DotD_tools\saddcom\s(.+?)$/.exec(e.data)) {
  333. var sdata = GM_getValue("commands") ? JSON.parse(GM_getValue("commands")) : {};
  334. var x = r[1].split("|");
  335. sdata[x[0]] = x[1];
  336. GM_setValue("commands",JSON.stringify(sdata));
  337. }
  338. else if (r = /^DotD_tools\sremcom\s(.+?)$/.exec(e.data)) {
  339. var sdata = JSON.parse(GM_getValue("commands"));
  340. delete sdata[r[1]];
  341. GM_setValue("commands",JSON.stringify(sdata))
  342. }
  343. }
  344. if (window.top == window.self) {
  345. if (GM_getValue("settings") == undefined) {
  346. 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};
  347. GM_setValue("settings",JSON.stringify(s));
  348. }
  349. if (GM_getValue("share") == undefined) { GM_setValue("share",""); }
  350. if (GM_getValue("commands") == undefined) { GM_setValue("commands",""); }
  351. var s = GM_getValue("settings");
  352. var script = document.createElement('script');
  353. script.type = "text/javascript";
  354. script.appendChild(document.createTextNode('('+main+')('+s+')'));
  355. document.head.appendChild(script);
  356. window.addEventListener("message",rMessage,false);
  357. var css = document.createElement('style');
  358. css.id = "tools_css";
  359. css.type = "text/css";
  360. document.head.appendChild(css);
  361. }