Mutik's DotD Script

Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code

As of 2015-02-17. See the latest version.

  1. // ==UserScript==
  2. // @name Mutik's DotD Script
  3. // @namespace tag://kongregate
  4. // @description Fork of ForTheGoodOfAll DotD script with new look and strongly optimized js code
  5. // @author Mutik
  6. // @version 1.1.27
  7. // @grant GM_xmlhttpRequest
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant unsafeWindow
  11. // @include http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons*
  12. // @include *50.18.191.15/kong/?DO_NOT_SHARE_THIS_LINK*
  13. // @hompage http://www.dotdraids.pl
  14. // ==/UserScript==
  15.  
  16.  
  17.  
  18. if (window.location.host == "www.kongregate.com") {
  19. function main() {
  20.  
  21. if (typeof GM_setValue == 'undefined') {
  22. var GM_setValue = function (name, value) {
  23. localStorage.setItem(name, (typeof value).substring(0, 1) + value);
  24. };
  25. }
  26. if (typeof GM_getValue == 'undefined') {
  27. var GM_getValue = function (name, dvalue) {
  28. var value = localStorage.getItem(name);
  29. if (typeof value != 'string') return dvalue;
  30. else {
  31. var type = value.substring(0, 1);
  32. value = value.substring(1);
  33. if (type == 'b') return (value == 'true');
  34. else if (type == 'n') return Number(value);
  35. else return value;
  36. }
  37. };
  38. }
  39. //if (typeof GM_deleteValue == 'undefined') var GM_deleteValue = function(name) { localStorage.removeItem(name) };
  40.  
  41. window.FPX = {
  42. LandBasePrices: [4000, 15000, 25000, 50000, 75000, 110000, 300000, 600000, 1200000],
  43. LandBaseIncome: [100, 300, 400, 700, 900, 1200, 2700, 4500, 8000],
  44. LandCostRatio: function (owned) {
  45. var landCosts = [4000, 15000, 25000, 50000, 75000, 110000, 300000, 600000, 1200000];
  46. var icr = [1, 1, 1, 1, 1, 1, 1, 1, 1];
  47. /*Income/Cost ratio*/
  48. var i = 9;
  49. while (i--) {
  50. landCosts[i] += FPX.LandBasePrices[i] * owned[i] / 10;
  51. icr[i] = FPX.LandBaseIncome[i] / landCosts[i];
  52. }
  53. return icr;
  54. }
  55. };
  56. window.timeSince = function (date, after) {
  57. if (typeof date === 'number') date = new Date(date);
  58. var seconds = Math.abs(Math.floor((new Date().getTime() - date.getTime()) / 1000));
  59. var interval = Math.floor(seconds / 31536000);
  60. var pretext = 'about ', posttext = after ? ' left' : ' ago';
  61. if (interval >= 1) return pretext + interval + ' year' + (interval == 1 ? '' : 's') + posttext;
  62. interval = Math.floor(seconds / 2592000);
  63. if (interval >= 1) return pretext + interval + ' month' + (interval == 1 ? '' : 's') + posttext;
  64. interval = Math.floor(seconds / 86400);
  65. if (interval >= 1) return pretext + interval + ' day' + (interval == 1 ? '' : 's') + posttext;
  66. interval = Math.floor(seconds / 3600);
  67. if (interval >= 1) return pretext + interval + ' hour' + (interval == 1 ? '' : 's') + posttext;
  68. interval = Math.floor(seconds / 60);
  69. if (interval >= 1) return interval + ' minute' + (interval == 1 ? '' : 's') + posttext;
  70. return Math.floor(seconds) + ' second' + (seconds == 1 ? '' : 's') + posttext;
  71. };
  72. window.isNumber = function (n) {
  73. return !isNaN(parseFloat(n)) && isFinite(n);
  74. };
  75. window.SRDotDX = {
  76. version: { major: "1.1.27", minor: 'Mutik\'s mod' },
  77. util: {
  78. isArrEq: function(a,b) {
  79. if(a.length !== b.length) return false;
  80. var ca = a.slice().sort().join(",");
  81. var cb = b.slice().sort().join(",");
  82. return ca === cb;
  83. },
  84. getChatNumber: function () {
  85. var cont = document.getElementsByClassName('chat_room_template'), ele;
  86. for (var i = 0; i < cont.length; i++) {
  87. ele = cont[i].getAttribute('style');
  88. if (ele == null || ele == '') return i;
  89. }
  90. return 1;
  91. },
  92. getQueryVariable: function (v, s) {
  93. var query = String(s || window.location.search.substring(1));
  94. if (query.indexOf('?') > -1) query = query.substring(query.indexOf('?') + 1);
  95. var vars = query.split('&');
  96. var i = vars.length;
  97. while(i--) {
  98. var pair = vars[i].split('=');
  99. if (decodeURIComponent(pair[0]) == v) return decodeURIComponent(pair[1]);
  100. }
  101. return '';
  102. },
  103. getRaidFromUrl: function (url) {
  104. var r = {id: 0, boss: '', hash: '', diff: 0, sid: 1}, cnt = 0, i;
  105.  
  106. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi, '&').replace(/kv_&/gi, '&kv_').replace(/http:?/gi, '');
  107. while ((i = reg.exec(p)) != null) {
  108. switch (i[1]) {
  109. case 'kv_raid_id':
  110. case 'raid_id': r.id = parseInt(i[2]); cnt++; break;
  111. case 'kv_difficulty':
  112. case 'difficulty': r.diff = parseInt(i[2]); cnt++; break;
  113. case 'kv_raid_boss':
  114. case 'raid_boss': r.boss = i[2]; cnt++; break;
  115. case 'kv_hash':
  116. case 'hash': r.hash = i[2]; cnt++; break;
  117. case 'kv_serverid':
  118. case 'serverid': r.sid = parseInt(i[2]); cnt++; break;
  119. }
  120. }
  121. if (cnt < 4) return null;
  122.  
  123. return r;
  124. },
  125. getGameRoomNumber: function() {
  126. if(typeof holodeck == 'object' && typeof holodeck.chatWindow == 'function') return parseInt(holodeck.chatWindow()._rooms_by_type.game._room.name.slice(-2));
  127. //var rooms = document.getElementsByClassName('room_name'), i = rooms.length;
  128. //while(i--) if(!rooms[i-1].innerHTML.indexOf('Dawn of the Dragons')) return parseInt(rooms[i-1].innerHTML.slice(-2));
  129. return 0;
  130. },
  131. getShortNum: function (num) {
  132. if (isNaN(num) || num < 0) return num;
  133. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(4) + 't';
  134. if (num >= 1000000000) return (num / 1000000000).toPrecision(4) + 'b';
  135. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 'm';
  136. if (num >= 1000) return (num / 1000).toPrecision(4) + 'k';
  137. return num + ''
  138. },
  139. getShortNumMil: function (num) {
  140. if (isNaN(num) || num < 0) return num;
  141. if (num >= 1000000) return (num / 1000000).toPrecision(4) + 't';
  142. if (num >= 1000) return (num / 1000).toPrecision(4) + 'b';
  143. return num.toPrecision(4) + 'm'
  144. },
  145. objToUriString: function (obj) {
  146. if (typeof obj == 'object') {
  147. var str = '';
  148. for (var i in obj) str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]) + '&';
  149. str = str.substring(0, str.length - 1);
  150. return str
  151. }
  152. return '';
  153. },
  154. extEcho: function (msg) {
  155. var cn = SRDotDX.util.getChatNumber();
  156. var cw = document.getElementsByClassName('chat_message_window')[cn];
  157. var p = cw.getElementsByTagName('p');
  158. var m;
  159. if(p.length > 0 && p[p.length-1].className.indexOf('script') >= 0) {
  160. m = p[p.length-1].getElementsByClassName('message')[0];
  161. m.innerHTML = m.innerHTML + '<hr>' + msg;
  162. }
  163. else {
  164. m = SRDotDX.gui.cHTML('div').ele();
  165. var mi = SRDotDX.gui.cHTML('div').attach('to',m).ele();
  166. var mi2 = SRDotDX.gui.cHTML('p').set({class: 'script'}).attach('to',mi).ele();
  167. SRDotDX.gui.cHTML('span').set({class: 'username DotDeXtension'}).html("DotDeXtension",true).attach('to',mi2);
  168. SRDotDX.gui.cHTML('span').set({class: 'separator'}).html(": ",true).attach('to',mi2);
  169. SRDotDX.gui.cHTML('span').set({class: 'message', name: 'SRDotDX_DotDeXtension'}).html('<br>'+msg,true).attach('to',mi2);
  170. SRDotDX.gui.cHTML('span').set({class: 'clear'}).attach('to',mi2);
  171. var div = cw.lastChild;
  172. if(div) div.appendChild(mi);
  173. else cw.appendChild(m);
  174. }
  175. setTimeout(SRDotDX.gui.scrollChat, 100, cn);
  176. },
  177. serialize: function (obj) {
  178. var str = [];
  179. for (var p in obj) if (obj[p] != null)str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
  180. return str.join("&");
  181. },
  182. stringFormat: function () {
  183. var s = arguments[0];
  184. for (var i = 0; i < arguments.length - 1; i++) {
  185. var reg = new RegExp("\\{" + i + "\\}", "gm");
  186. s = s.replace(reg, arguments[i + 1]);
  187. }
  188. return s;
  189. }
  190. },
  191. config: (function () {
  192. var tmp, reqSave = false;
  193. try {tmp = JSON.parse(GM_getValue('SRDotDX', '{}'));}
  194. catch (e) {tmp = {};reqSave = true }
  195.  
  196. //Raids tab vars
  197. tmp.filterSearchStringR = typeof tmp.filterSearchStringR == 'string' ? tmp.filterSearchStringR : '';
  198. tmp.fltIncVis = typeof tmp.fltIncVis == 'boolean' ? tmp.fltIncVis : false;
  199. tmp.fltExclFull = typeof tmp.fltExclFull == 'boolean' ? tmp.fltExclFull : false;
  200. tmp.fltShowAll = typeof tmp.fltShowAll == 'boolean' ? tmp.fltShowAll : false;
  201.  
  202. //Options tab vars
  203. tmp.importFiltered = typeof tmp.importFiltered == 'boolean' ? tmp.importFiltered : true;
  204. tmp.hideRaidLinks = typeof tmp.hideRaidLinks == 'boolean' ? tmp.hideRaidLinks : false;
  205. tmp.hideBotLinks = typeof tmp.hideBotLinks == 'boolean' ? tmp.hideBotLinks : false;
  206. tmp.hideVisitedRaids = typeof tmp.hideVisitedRaids == 'boolean' ? tmp.hideVisitedRaids : false;
  207. tmp.hideVisitedRaidsInRaidList = typeof tmp.hideVisitedRaidsInRaidList == 'boolean' ? tmp.hideVisitedRaidsInRaidList : false;
  208. tmp.markMyRaidsVisted = typeof tmp.markMyRaidsVisted == 'boolean' ? tmp.markMyRaidsVisted : false;
  209. tmp.markImportedVisited = typeof tmp.markImportedVisited == 'boolean' ? tmp.markImportedVisited : false;
  210. tmp.FPXLandOwnedCount = typeof tmp.FPXLandOwnedCount == 'object' ? tmp.FPXLandOwnedCount : [0, 0, 0, 0, 0, 0, 0, 0, 0];
  211. tmp.prettyPost = typeof tmp.prettyPost == 'boolean' ? tmp.prettyPost : false;
  212. tmp.useMaxRaidCount = typeof tmp.useMaxRaidCount == 'boolean' ? tmp.useMaxRaidCount : false;
  213. tmp.maxRaidCount = !(typeof tmp.maxRaidCount === 'undefined') ? tmp.maxRaidCount : 3000;
  214. tmp.autoImportPaste = typeof tmp.autoImportPaste == 'boolean' ? tmp.autoImportPaste : false;
  215. tmp.confirmForLargePaste = typeof tmp.confirmForLargePaste == 'boolean' && tmp.confirmPasteSize ? tmp.confirmForLargePaste : false;
  216. tmp.confirmPasteSize = typeof tmp.confirmPasteSize == 'number' ? tmp.confirmPasteSize : 1000;
  217. tmp.showStatusOverlay = typeof tmp.showStatusOverlay == 'boolean' ? tmp.showStatusOverlay : false;
  218. tmp.confirmDeletes = typeof tmp.confirmDeletes == 'boolean' ? tmp.confirmDeletes : true;
  219. tmp.autoPostPaste = typeof tmp.autoPostPaste == 'boolean' ? tmp.autoPostPaste : false;
  220. tmp.whisperTo = typeof tmp.whisperTo == 'string' ? tmp.whisperTo : '';
  221. tmp.formatLinkOutput = typeof tmp.formatLinkOutput == 'boolean' ? tmp.formatLinkOutput : false;
  222. tmp.linkShowFs = typeof tmp.linkShowFs == 'boolean' ? tmp.linkShowFs : false;
  223. tmp.linkShowAp = typeof tmp.linkShowAp == 'boolean' ? tmp.linkShowAp : false;
  224. tmp.unvisitedRaidPruningMode = typeof tmp.unvisitedRaidPruningMode == 'number' ? tmp.unvisitedRaidPruningMode : 1;
  225. tmp.selectedRaids = typeof tmp.selectedRaids == 'string' ? tmp.selectedRaids : '';
  226. tmp.pastebinUrl = typeof tmp.pastebinUrl == 'string' ? tmp.pastebinUrl : '';
  227. tmp.bckColor = typeof tmp.bckColor == 'string' ? tmp.bckColor : 'fff';
  228. tmp.lastImported = typeof tmp.lastImported == 'number' ? tmp.lastImported : (new Date().getTime() - 1728000000);
  229. tmp.hideKongForum = typeof tmp.hideKongForum == 'boolean' ? tmp.hideKongForum : false;
  230. tmp.hideGameDetails = typeof tmp.hideGameDetails == 'boolean' ? tmp.hideGameDetails : false;
  231. tmp.hideGameTitle = typeof tmp.hideGameTitle == 'boolean' ? tmp.hideGameTitle : true;
  232. tmp.chatFilterString = typeof tmp.chatFilterString == 'string' ? tmp.chatFilterString : '';
  233. tmp.filterSearchStringC = typeof tmp.filterSearchStringC == 'string' ? tmp.filterSearchStringC : '';
  234. tmp.chatSize = typeof tmp.chatSize == 'number' ? tmp.chatSize : 300;
  235. tmp.sbEnable = typeof tmp.sbEnable == 'boolean' ? tmp.sbEnable : true;
  236. tmp.sbSlim = typeof tmp.sbSlim == 'boolean' ? tmp.sbSlim : false;
  237. tmp.sbRightSide = typeof tmp.sbRightSide == 'boolean' ? tmp.sbRightSide : false;
  238. tmp.kongUser = typeof tmp.kongUser == 'string' ? tmp.kongUser : 'Guest';
  239. tmp.kongAuth = typeof tmp.kongAuth == 'string' ? tmp.kongAuth : '0';
  240. tmp.kongId = typeof tmp.kongId == 'string' ? tmp.kongId : '0';
  241. tmp.kongMsg = typeof tmp.kongMsg == 'boolean' ? tmp.kongMsg : false;
  242. tmp.hideGameTab = typeof tmp.hideGameTab == 'boolean' ? tmp.hideGameTab : false;
  243. tmp.hideAccTab = typeof tmp.hideAccTab == 'boolean' ? tmp.hideAccTab : false;
  244. tmp.dotdxTabName = typeof tmp.dotdxTabName == 'string' ? tmp.dotdxTabName : 'Raids';
  245. tmp.themeNum = typeof tmp.themeNum == 'number' ? tmp.themeNum : 1;
  246. tmp.fontNum = typeof tmp.fontNum == 'number' ? tmp.fontNum : 0;
  247. tmp.ignMode = typeof tmp.ignMode == 'number' ? tmp.ignMode : 1;
  248. tmp.hideScrollBar = typeof tmp.hideScrollBar == 'boolean' ? tmp.hideScrollBar : false;
  249. tmp.hideWChat = typeof tmp.hideWChat == 'boolean' ? tmp.hideWChat : false;
  250. tmp.leftWChat = typeof tmp.leftWChat == 'boolean' ? tmp.leftWChat : false;
  251. tmp.removeWChat = typeof tmp.removeWChat == 'boolean' ? tmp.removeWChat : false;
  252. tmp.filterChatLinks = typeof tmp.filterChatLinks == 'boolean' ? tmp.filterChatLinks : true;
  253. tmp.filterRaidList = typeof tmp.filterRaidList == 'boolean' ? tmp.filterRaidList : false;
  254. tmp.newRaidsAtTopOfList = typeof tmp.newRaidsAtTopOfList == 'boolean' ? tmp.newRaidsAtTopOfList : false;
  255. tmp.serverMode = typeof tmp.serverMode == 'number' ? tmp.serverMode : 1;
  256. tmp.sbConfig = typeof tmp.sbConfig == 'object' ? tmp.sbConfig : [
  257. {"type": "label", "name": "Camps"},
  258. {"type": "btn", "name": "GoC", "cmd": "/camp goc"},
  259. {"type": "btn", "name": "MaM", "cmd": "/camp mam"},
  260. {"type": "btn", "name": "GD", "cmd": "/camp gd"},
  261. {"type": "label", "name": "Tiers"},
  262. {"type": "btn", "name": "Bella", "cmd": "/raid bella"},
  263. {"type": "btn", "name": "Xerk", "cmd": "/raid xerkara"},
  264. {"type": "btn", "name": "Tisi", "cmd": "/raid tisi"},
  265. {"type": "label", "name": "Join"},
  266. {"type": "btn", "name": "Farms", "cmd": "SRDotDX.gui.quickImportAndJoin(\'farm:nnm\')"},
  267. {"type": "label", "name": "Utils"},
  268. {"type": "btn", "color": "g", "name": "(Re)Load", "sname": "Reld", "cmd": "SRDotDX.reload()"},
  269. {"type": "btn", "color": "r", "name": "Unload", "sname": "Kill", "cmd": "/kill"},
  270. {"type": "btn", "name": "Room 1", "sname": "CR1", "cmd": "SRDotDX.gui.gotoRoom(1)"},
  271. {"type": "btn", "name": "Room 2", "sname": "CR2", "cmd": "SRDotDX.gui.gotoRoom(2)"},
  272. {"type": "btn", "name": "Room 8", "sname": "CR8", "cmd": "SRDotDX.gui.gotoRoom(8)"},
  273. {"type": "label", "name": "Sheets", "sname": "Help"},
  274. {"type": "btn", "name": "Magic", "sname": "Mag", "cmd": "https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},
  275. {"type": "btn", "name": "Mount", "sname": "Mnt", "cmd": "https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},
  276. {"type": "btn", "name": "Gear", "cmd": "https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},
  277. {"type": "label", "name": "Raids"},
  278. {"type": "jtxt"},
  279. {"type": "btn", "color": "g", "name": "Join", "cmd": "SRDotDX.gui.joinSelectedRaids(true)"},
  280. {"type": "btn", "color": "b", "name": "Import", "sname": "Imp", "cmd": "SRDotDX.gui.importFromServer()"},
  281. {"type": "btn", "color": "y", "name": "RaidBot", "sname": "Bot", "cmd": "SRDotDX.gui.switchBot()"}
  282. ];
  283.  
  284. if (typeof tmp.mutedUsers !== 'object') tmp.mutedUsers = {};
  285. if (typeof tmp.ignUsers !== 'object') tmp.ignUsers = {};
  286. if (typeof tmp.friendUsers !== 'object') tmp.friendUsers = {};
  287. if (typeof tmp.raidList !== 'object') tmp.raidList = {};
  288. if (typeof tmp.filters !== 'object') tmp.filters = [{},{}];
  289. if (typeof tmp.lastFilter !== 'object') tmp.lastFilter = typeof tmp.lastFilter === 'string' ? [tmp.lastFilter, tmp.lastFilter] : ["",""];
  290. if (tmp.filters.length !== 2) { var tmpFlt = [tmp.filters, tmp.filters]; tmp.filters = tmpFlt; }
  291. if (tmp.lastImported > (new Date().getTime())) tmp.lastImported = (new Date().getTime() - 1728000000);
  292. if (reqSave) GM_setValue('SRDotDX', JSON.stringify(tmp));
  293.  
  294. // Delete expired raids
  295. for (var id in tmp.raidList) {
  296. if(tmp.raidList.hasOwnProperty(id)) {
  297. if (typeof tmp.raidList[id].magic === "undefined") tmp.raidList[id].magic = [0, 0, 0, 0, 0, 0];
  298. if (typeof tmp.raidList[id].hp === "undefined") tmp.raidList[id].hp = 1.0;
  299. if (typeof tmp.raidList[id].sid === "undefined") tmp.raidList[id].sid = 1;
  300. if (typeof tmp.raidList[id].cs === "undefined") tmp.raidList[id].cs = 0;
  301. if (typeof tmp.raidList[id].fs === "undefined") tmp.raidList[id].fs = 1;
  302. if (typeof tmp.raidList[id].ni === "undefined") tmp.raidList[id].ni = false;
  303. }
  304. }
  305.  
  306. tmp.addRaid = function (hash, id, boss, diff, sid, visited, user, ts, room, magic, hp, cs, fs) {
  307. if ((/ /).test(user)) {
  308. var reg = new RegExp('[0-9]+|[0-9a-zA-Z_]+', 'g');
  309. room = reg.exec(user);
  310. user = reg.exec(user);
  311. }
  312. if (typeof SRDotDX.config.raidList[id] !== 'object') {
  313. var tStamp = typeof ts === 'undefined' || ts === null ? parseInt(new Date().getTime() / 1000) : parseInt(ts);
  314. SRDotDX.config.raidList[id] = {
  315. hash: hash, id: id, boss: boss, diff: diff, sid: sid, visited: visited, user: user, timeStamp: tStamp,
  316. expTime: (typeof SRDotDX.raids[boss] === 'object' ? (SRDotDX.raids[boss].stat === 'H' ? 1 : SRDotDX.raids[boss].duration) : 24) * 3600 + tStamp,
  317. room: room === undefined || room === null ? SRDotDX.util.getGameRoomNumber() : parseInt(room),
  318. magic: magic === undefined || magic === null ? [0,0,0,0,0,0] : magic,
  319. hp: hp === undefined || hp === null ? 1.0 : parseFloat(hp),
  320. cs: cs === undefined || cs === null ? 0 : parseInt(cs),
  321. fs: fs === undefined || fs === null ? (typeof SRDotDX.raids[boss] === 'object' ? SRDotDX.raids[boss].size : 1) : parseInt(fs),
  322. ni: magic === undefined
  323. };
  324. SRDotDX.gui.addRaid(id);
  325. }
  326. return SRDotDX.config.raidList[id]
  327. };
  328. tmp.save = function (b) {
  329. b = typeof b == 'undefined' ? true : b;
  330. GM_setValue('SRDotDX', JSON.stringify(SRDotDX.config));
  331. if(b) setTimeout(SRDotDX.config.save, 60000, true);
  332. else console.log('[DotDX] Manual config save invoked');
  333. };
  334. tmp.extSave = function(){SRDotDX.gframe('dotdx.save#'+JSON.stringify({'removeWChat':SRDotDX.config.removeWChat,'leftWChat':SRDotDX.config.leftWChat,'hideWChat':SRDotDX.config.hideWChat}));};
  335. return tmp;
  336. })(),
  337. linksHistory: [],
  338. request: {
  339. importLock: false,
  340. joinAfterImport: false,
  341. fromChat: false,
  342. quickBtnLock: true,
  343. filterSearchStringT: "",
  344. raids: function (isinit, hours) {
  345. if (!SRDotDX.gui.joining) {
  346. var secs = 15 - parseInt((new Date().getTime() - SRDotDX.config.lastImported) / 1000);
  347. if (secs > 0) {
  348. SRDotDX.util.extEcho("You can import again in " + secs + " seconds.");
  349. return
  350. }
  351. console.log("[DotDX] Importing raids from raids server ...");
  352. if (!isinit) this.initialize("Requesting raids");
  353. else SRDotDX.request.tries++;
  354. var h = hours ? ('&h=' + hours) : '';
  355. SRDotDX.request.req({
  356. eventName: "dotd.getraids",
  357. url: "http://mutik.erley.org/download.php?u=" + SRDotDX.config.kongUser + h,
  358. method: "GET",
  359. headers: {"Content-Type": "application/JSON"},
  360. timeout: 30000
  361. });
  362. }
  363. },
  364. poster: function (isinit) {
  365. var txt = document.getElementById('DotDX_checkRaidPoster').value, id;
  366. if (txt.length < 1) return;
  367. if (isNaN(txt)) {
  368. var r = SRDotDX.util.getRaidFromUrl(txt);
  369. if (r === null) return;
  370. id = r.id;
  371. }
  372. else id = parseInt(txt);
  373. console.log("[DotDX] Requesting raid poster info from server...");
  374. if (!isinit) this.initialize("Requesting raid poster data");
  375. else SRDotDX.request.tries++;
  376. SRDotDX.request.req({
  377. eventName: "dotd.getposter",
  378. url: "http://mutik.erley.org/getposter.php?i=" + id,
  379. method: "GET",
  380. headers: {"Content-Type": "application/JSON"},
  381. timeout: 30000
  382. });
  383. },
  384. initialize: function (str) {
  385. SRDotDX.gui.doStatusOutput(str + "...", 3000, true);
  386. SRDotDX.request.tries = 0;
  387. SRDotDX.request.seconds = 0;
  388. SRDotDX.request.complete = false;
  389. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  390. },
  391. tick: function (str) {
  392. if (!SRDotDX.request.complete) {
  393. if (SRDotDX.request.seconds > 25) {
  394. SRDotDX.gui.doStatusOutput("Request failed.", 3000, true);
  395. return;
  396. }
  397. SRDotDX.request.seconds++;
  398. SRDotDX.gui.doStatusOutput(str + " (" + SRDotDX.request.seconds + ")...", 1500, true);
  399. SRDotDX.request.timer = setTimeout(SRDotDX.request.tick, 1000, str);
  400. }
  401. },
  402. complete: false,
  403. seconds: 0,
  404. timer: 0,
  405. tries: 0,
  406. req: function (param) {
  407. var a = document.createEvent("MessageEvent");
  408. if (a.initMessageEvent) a.initMessageEvent("dotd.req", false, false, JSON.stringify(param), document.location.protocol + "//" + document.location.hostname, 0, window, null);
  409. else a = new MessageEvent("dotd.req", {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 0, "source": window, "data": JSON.stringify(param)});
  410. document.dispatchEvent(a);
  411. },
  412. init: function () {
  413. document.addEventListener("dotd.joinraid", SRDotDX.request.joinRaidResponse, false);
  414. document.addEventListener("dotd.getraids", SRDotDX.request.addRaids, false);
  415. document.addEventListener("dotd.getposter", SRDotDX.request.getPoster, false);
  416. delete this.init;
  417. },
  418. joinRaid: function (r) {
  419. if (typeof r == 'object') {
  420. if (!SRDotDX.gui.joining) SRDotDX.request.initialize("Joining " + (!SRDotDX.raids[r.boss] ? r.boss.capitalize().replace(/_/g, ' ') : SRDotDX.raids[r.boss].shortname));
  421. var joinData = 'kongregate_username=' + SRDotDX.config.kongUser + '&kongregate_user_id=' + SRDotDX.config.kongId + '&kongregate_game_auth_token=' + SRDotDX.config.kongAuth;
  422. SRDotDX.request.req({
  423. eventName: "dotd.joinraid",
  424. url: SRDotDX.util.stringFormat('http://50.18.191.15/kong/raidjoin.php?' + joinData + '&kv_action_type=raidhelp&kv_raid_id={0}&kv_hash={1}&serverid={2}', r.id, r.hash, r.sid),
  425. method: "GET",
  426. timeout: 30000
  427. });
  428. }
  429. },
  430. getPoster: function (e) {
  431. var r, data = JSON.parse(e.data);
  432. if (data.status != 200) {
  433. if (SRDotDX.request.tries >= 3) {
  434. SRDotDX.request.complete = true;
  435. SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
  436. console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
  437. console.log(JSON.stringify(data));
  438. } else {
  439. console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
  440. }
  441. return;
  442. }
  443. SRDotDX.request.complete = true;
  444. try {
  445. r = JSON.parse(data.responseText)
  446. }
  447. catch (ex) {
  448. console.log("[DotDX] Checking raid poster request error");
  449. console.log('[DotDX] responseText: ' + data.responseText);
  450. return;
  451. }
  452. document.getElementById('DotDX_whoPosted_Raid').innerHTML = r.r;
  453. document.getElementById('DotDX_whoPosted_Time').innerHTML = new Date(r.t * 1000).toLocaleString();
  454. document.getElementById('DotDX_whoPosted_Poster').innerHTML = r.p;
  455. },
  456. addRaids: function (e) {
  457. var r, data = JSON.parse(e.data);
  458. if (data.status != 200) {
  459. if (SRDotDX.request.tries >= 3) {
  460. SRDotDX.request.complete = true;
  461. SRDotDX.gui.doStatusOutput("Raids server busy. Please try again in a moment.");
  462. console.log('[DotDX] Raids request failed (url: ' + data.url + ')');
  463. console.log(JSON.stringify(data));
  464. } else {
  465. console.log("[DotDX] Raids server unresponsive (status " + data.status + "). Trying again, " + SRDotDX.request.tries + " tries.");
  466. }
  467. return;
  468. }
  469. SRDotDX.request.complete = true;
  470. try {
  471. r = JSON.parse(data.responseText)
  472. }
  473. catch (ex) {
  474. console.log("[DotDX] Raids importing error or no raids imported");
  475. console.log('[DotDX] responseText: ' + data.responseText);
  476. return;
  477. }
  478. SRDotDX.gui.doStatusOutput("Importing " + r.raids.length + " raids...");
  479. var raid, j = r.raids.length, n = 0, t = 0;
  480. var swt = !SRDotDX.config.importFiltered, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  481. while (j--) {
  482. raid = r.raids[j];
  483. if (swt || filter.indexOf('fltList_' + raid.b + '_' + (raid.d - 1)) < 0) {
  484. t++;
  485. if (typeof SRDotDX.config.raidList[raid.i] !== 'object') {
  486. n++;
  487. SRDotDX.config.addRaid(raid.h, parseInt(raid.i), raid.b, parseInt(raid.d), parseInt(raid.s), false, raid.p, raid.t, raid.r, raid.m.split("_").map(function (x) {
  488. return parseInt(x)
  489. }), parseFloat(raid.hp), raid.cs, raid.fs);
  490. }
  491. else {
  492. SRDotDX.config.raidList[raid.i].magic = raid.m.split("_").map(function(x){return parseInt(x)});
  493. SRDotDX.config.raidList[raid.i].hp = parseFloat(raid.hp);
  494. SRDotDX.config.raidList[raid.i].cs = parseInt(raid.cs);
  495. SRDotDX.config.raidList[raid.i].fs = parseInt(raid.fs);
  496. SRDotDX.config.raidList[raid.i].ni = false;
  497. }
  498. }
  499. }
  500. console.log('[DotDX] Import raids from server complete');
  501. var id = r.prune.length > 3 ? r.prune.split("_") : [];
  502. j = id.length;
  503. var d = 0;
  504. //clean chat
  505. var chat = document.getElementsByClassName('chat_message_window'), p, i;
  506. for (var c = 0; c < chat.length; c++) {
  507. p = chat[c].getElementsByClassName('SRDotDX_raid'); i = p.length;
  508. while(i--) if(r.prune.indexOf((/DotDX_raidId_(\d+)/).exec(p[i].className)[1]) > -1) p[i].parentNode.removeChild(p[i]);
  509. p = chat[c].getElementsByTagName('div'); i = p.length;
  510. while(i--) if(p[i].empty()) p[i].parentNode.removeChild(p[i]);
  511. }
  512. //clean db
  513. while (j--) if (SRDotDX.config.raidList[id[j]]) { delete SRDotDX.config.raidList[id[j]]; d++; }
  514. console.log('[DotDX] Removing dead raids on import complete');
  515. SRDotDX.gui.selectRaidsToJoin('import response');
  516. SRDotDX.config.lastImported = new Date().getTime();
  517. SRDotDX.util.extEcho('Imported ' + t + ' raids, ' + n + ' new, ' + d + ' pruned.');
  518. if (SRDotDX.request.joinAfterImport) {
  519. SRDotDX.gui.selectRaidsToJoin();
  520. SRDotDX.gui.joinSelectedRaids(false);
  521. }
  522. SRDotDX.gui.doStatusOutput('Imported ' + n + ' new raids, ' + d + ' pruned.', 5000, true);
  523. },
  524. joinRaidResponse: function (e) {
  525. var data = JSON.parse(e.data);
  526. var statustxt = '';
  527. SRDotDX.request.complete = true;
  528. SRDotDX.gui.joinRaidComplete++;
  529. if (data && data.status === 200 && data.responseText && data.url) {
  530. var raidid = SRDotDX.util.getQueryVariable('kv_raid_id', data.url);
  531. if (typeof SRDotDX.config.raidList[raidid] === 'object') {
  532. SRDotDX.config.raidList[raidid].visited = true;
  533. SRDotDX.gui.toggleRaid('visited', raidid, true);
  534. SRDotDX.gui.raidListItemUpdate(raidid);
  535. if (/successfully (re-)?joined/i.test(data.responseText)) {
  536. SRDotDX.gui.joinRaidSuccessful++;
  537. statustxt = (SRDotDX.raids[SRDotDX.config.raidList[raidid].boss] ? SRDotDX.raids[SRDotDX.config.raidList[raidid].boss].shortname : SRDotDX.config.raidList[raidid].boss) + " joined successfully.";
  538. }
  539. else if (/already a member/i.test(data.responseText)) {
  540. statustxt = "Join Failed. You are already a member.";
  541. }
  542. else if (/already completed/i.test(data.responseText)) {
  543. SRDotDX.gui.joinRaidDead++;
  544. statustxt = "Join failed. Raid is dead.";
  545. SRDotDX.gui.deleteRaidFromDB(raidid);
  546. }
  547. else if (/not a member of the guild/i.test(data.responseText)) {
  548. SRDotDX.gui.joinRaidDead++;
  549. statustxt = "Join failed. You are not member of that Guild.";
  550. SRDotDX.gui.deleteRaidFromDB(raidid);
  551. }
  552. else if (/(invalid|find) raid (hash|ID)/i.test(data.responseText)) {
  553. statustxt = "Join failed. Invalid hash or ID.";
  554. SRDotDX.gui.joinRaidInvalid++;
  555. SRDotDX.gui.deleteRaidFromDB(raidid);
  556. }
  557. else {
  558. statustxt = 'Join failed. Unknown join response.';
  559. }
  560. }
  561. else SRDotDX.gui.joinRaidInvalid++;
  562. }
  563. else {
  564. console.log('[DotDX] Request timed out');
  565. SRDotDX.gui.joinRaidInvalid++;
  566. statustxt = "Join failed. Timeout.";
  567. }
  568. if (SRDotDX.gui.joining) {
  569. if (SRDotDX.gui.joinRaidComplete >= SRDotDX.gui.joinRaidList.length) {
  570. statustxt = "Finished joining. " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  571. SRDotDX.gui.joinFinish(true);
  572. if (SRDotDX.gui.joinRaidSuccessful > 2) SRDotDX.util.extEcho(statustxt);
  573. setTimeout(SRDotDX.config.save, 3000, false)
  574. }
  575. else {
  576. statustxt = "Joined " + SRDotDX.gui.joinRaidComplete + " of " + SRDotDX.gui.joinRaidList.length + ". " + SRDotDX.gui.joinRaidSuccessful + " new, " + SRDotDX.gui.joinRaidDead + " dead.";
  577. if (SRDotDX.gui.joinRaidIndex < SRDotDX.gui.joinRaidList.length) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  578. }
  579. }
  580. else setTimeout(SRDotDX.config.save, 3000, false);
  581. if (statustxt !== '') SRDotDX.gui.doStatusOutput(statustxt, 4000, true);
  582. }
  583. },
  584. getRaidDetailsBase: function (url) {
  585. var r = {diff: 0, hash: '', boss: '', id: 0, sid: 0}, i, cnt = 0;
  586. var reg = /[?&]([^=]+)=([^?&]+)/ig, p = url.replace(/&amp;/gi, '&').replace(/kv_&/gi, '&kv_');
  587. while ((i = reg.exec(p)) != null) {
  588. switch (i[1]) {
  589. case 'kv_raid_id':
  590. case 'raid_id': r.id = parseInt(i[2]); cnt++; break;
  591. case 'kv_difficulty':
  592. case 'difficulty': r.diff = parseInt(i[2]); cnt++; break;
  593. case 'kv_raid_boss':
  594. case 'raid_boss': r.boss = i[2]; cnt++; break;
  595. case 'kv_hash':
  596. case 'hash': r.hash = i[2]; cnt++; break;
  597. case 'kv_serverid':
  598. case 'serverid': r.sid = parseInt(i[2]); cnt++; break;
  599. }
  600. }
  601. if (cnt < 4) return false;
  602.  
  603. r.diffLongText = ['Normal', 'Hard', 'Legendary', 'Nightmare'][r.diff - 1];
  604. r.diffShortText = ['N', 'H', 'L', 'NM'][r.diff - 1];
  605. var stats = SRDotDX.raids[r.boss];
  606. if (typeof stats === 'object') {
  607. r.name = stats.name;
  608. r.shortname = stats.shortname;
  609. r.size = stats.size;
  610. r.type = stats.type;
  611. r.dur = stats.duration;
  612. r.durText = stats.dur + "hrs";
  613. r.stat = stats.stat;
  614. r.statText = SRDotDX.getStatText(stats.stat);
  615. }
  616. else {
  617. r.name = r.boss[0].toUpperCase() + r.boss.substring(1).replace(/_/g, " ");
  618. r.shortname = r.name;
  619. r.dur = 48;
  620. }
  621. return r;
  622. },
  623. getTierTxt: function (hp, ppl, ap) {
  624. var num = hp / ppl;
  625. num = ap ? num / 2 : num;
  626. if (num >= 1000000000000) return (num / 1000000000000).toPrecision(3) + 't';
  627. if (num >= 1000000000) return (num / 1000000000).toPrecision(3) + 'b';
  628. if (num >= 1000000) return (num / 1000000).toPrecision(3) + 'm';
  629. if (num >= 1000) return (num / 1000).toPrecision(3) + 'k';
  630. return num + ''
  631. },
  632. getRaidDetails: function (url, user, visited, ts, room) {
  633. user = user ? user : '';
  634. var rVis = visited ? visited : user == SRDotDX.config.kongUser && SRDotDX.config.markMyRaidsVisted;
  635. var r = SRDotDX.util.getRaidFromUrl(url);
  636. if (r == null) return null;
  637. //if (r && typeof r.diff == 'number' && typeof r.hash == 'string' && typeof r.boss == 'string' && typeof r.id == 'string') {
  638. var filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  639. r.visited = rVis;
  640. if (!SRDotDX.config.importFiltered || filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0) {
  641. var info = SRDotDX.config.raidList[r.id];
  642. if (typeof info !== 'object') {
  643. info = SRDotDX.config.addRaid(r.hash, r.id, r.boss, r.diff, r.sid, r.visited, user, ts, room);
  644. if (typeof info === 'object') r.isNew = true;
  645. else return null;
  646. }
  647. else r.isNew = false;
  648. r.timeStamp = info.timeStamp;
  649. r.visited = info.visited;
  650. //r.nuked = info.nuked;
  651. }
  652. r.linkText = function () {
  653. var raidInfo = SRDotDX.raids[r.boss];
  654. var txt = '[&thinsp;' + ['', 'N', 'H', 'L', 'NM'][this.diff] + ' ';
  655. txt += raidInfo ? raidInfo.shortname : r.boss.capitalize().replace(/_/g, ' ');
  656. if (SRDotDX.config.linkShowFs) txt += raidInfo ? ', fs:' + SRDotDX.getTierTxt(raidInfo.health[this.diff - 1], raidInfo.size, false) : '';
  657. if (SRDotDX.config.linkShowAp) txt += raidInfo ? ', ap:' + SRDotDX.getTierTxt(raidInfo.health[this.diff - 1], raidInfo.size, true) : '';
  658. txt += (this.visited || r.visited) ? '|★' : '';
  659. txt += '&thinsp;]';
  660. return txt
  661. };
  662. return r;
  663. },
  664. getRaidLink: function (msg, user) {
  665. msg = msg.replace(/[\r\n]/g, '');
  666. var m = /^((?:(?!<a[ >]).)*)<a.*? href="((?:(?:https?:\/\/)?(?:www\.)?kongregate\.com)?\/games\/5thPlanetGames\/dawn-of-the-dragons(\?[^"]+))".*?<\/a>((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  667. if (m) {
  668. var raid = SRDotDX.getRaidDetails(m[3], user);
  669. if (raid) {
  670. raid.ptext = m[1] ? m[1] : "";
  671. raid.url = m[2].replace(/kv_&amp;/ig, '&amp;kv_');
  672. raid.ntext = m[4] ? m[4] : "";
  673. return raid;
  674. }
  675. }
  676. return null
  677. },
  678. getPastebinLink: function (msg, user) {
  679. msg = msg.replace(/[\r\n]/g, '');
  680. var m = /^((?:(?!<a[ >]).)*)?http:\/\/pastebin\.com\/\w{8}((?:(?!<\/?a[ >]).)*(?:<a.*? class="reply_link"[> ].*)?)$/i.exec(msg);
  681. if (m) {
  682. var pb = SRDotDX.getPasteDetails(/http:\/\/pastebin\.com\/\w{8}/i.exec(m[0]) + '', user);
  683. if (typeof pb != 'undefined') {
  684. pb.ptext = m[1] || '';
  685. pb.ntext = m[2] || '';
  686. }
  687. return pb;
  688. }
  689. else return null;
  690. },
  691. getStatText: function (stat) {
  692. stat = stat.toLowerCase();
  693. var r = '';
  694. if (stat == '?' || stat == 'Unknown') return 'Unknown';
  695. if (stat.indexOf('s') > -1) r = 'Stamina';
  696. if (stat.indexOf('h') > -1) r += (r != '' ? (stat.indexOf('e') > -1 ? ', ' : ' and ') : '') + 'Honor';
  697. if (stat.indexOf('e') > -1) r += (r != '' ? ' and ' : '') + 'Energy';
  698. return r;
  699. },
  700. getTimestamp: function () {
  701. return '(' + ('0' + (new Date().getHours())).slice(-2) + ':' + ('0' + (new Date().getMinutes())).slice(-2) + ')';
  702. },
  703. refreshRaidTab: function () {
  704. var el_out = document.getElementById('raid_list');
  705. var el_in1 = document.getElementById('mainRaidsFrame');
  706. var el_in2 = document.getElementById('topRaidPane');
  707. el_out.style.height = (el_in1.offsetHeight - el_in2.offsetHeight - 8) + 'px';
  708. },
  709. isFirefox: navigator.userAgent.indexOf('Firefox') > 0,
  710. gui: {
  711. setMessagesCount: function () {
  712. var num = active_user.unreadWhispersCount() + active_user.unreadShoutsCount();
  713. var ele = document.getElementById('profile_control_unread_message_count');
  714. ele.innerHTML = num;
  715. ele.style.display = num == 0 ? 'none' : 'block';
  716. setTimeout(SRDotDX.gui.setMessagesCount, 60000);
  717. },
  718. gotoRoom: function (num) {
  719. var numInt = parseInt(num);
  720. if (isNaN(numInt) || numInt < 1 || numInt > 13) holodeck.chatWindow().activateRoomChooser();
  721. else {
  722. var roomObj = JSON.parse('{"type": "game", "xmpp_name": "138636-dawn-of-the-dragons-' + num + '", "name": "Dawn of the Dragons - Room #' + ('0' + num).slice(-2) + '", "id": "138636-dawn-of-the-dragons-' + num + '"}');
  723. holodeck.joinRoom(roomObj);
  724. }
  725. },
  726. httpCommand: function (url) {
  727. window.open(url);
  728. },
  729. applySidebarUI: function (mode) { //-1:remove, 0:redraw, 1:create, 2:recreate
  730. if (mode == -1 || mode == 2) {
  731. document.getElementById('dotdx_sidebar').remove();
  732. if (mode == -1) SRDotDX.gui.chatResize(SRDotDX.config.chatSize), document.getElementsByClassName("links_connect")[0].setAttribute('colspan', '2');
  733. }
  734. if (mode > -1) {
  735. var sbElemObj, sbElemTxt, i;
  736. if (mode > 0) {
  737. if (mode == 1) document.getElementsByClassName("links_connect")[0].setAttribute('colspan', '3');
  738. if (!SRDotDX.config.sbRightSide) document.getElementById('chat_container').style.marginLeft = "0px";
  739. SRDotDX.gui.cHTML('td').set({id: 'dotdx_sidebar', style: 'width: ' + (SRDotDX.config.sbSlim ? '40' : '70') + 'px'})
  740. .html('<div id="dotdx_sidebar_container"' + (SRDotDX.config.sbSlim ? ' class="slim"' : '') + '></div>', true)
  741. .attach('after', SRDotDX.config.sbRightSide ? 'chat_container_cell' : 'gameholder');
  742. SRDotDX.gui.chatResize(SRDotDX.config.chatSize);
  743. }
  744. if (mode == 0) {
  745. sbElemTxt = '[' + document.getElementById('options_sbConfig').value + ']';
  746. sbElemObj = JSON.parse(sbElemTxt);
  747. SRDotDX.config.sbConfig = sbElemObj;
  748. SRDotDX.config.save(false);
  749. }
  750. else sbElemObj = SRDotDX.config.sbConfig;
  751. var slim = SRDotDX.config.sbSlim ? " slim" : "";
  752. var sLen = SRDotDX.config.sbSlim ? 0 : 1;
  753. var stopper = parseInt((document.getElementById('gameholder').offsetHeight - 36) / 26);
  754. var sName = [["Ely","Elyssa"],["Kas","Kasan"]];
  755. var sidebarElemHtml = '<div id="serverButton" class="' + slim + '" onclick="SRDotDX.gui.switchServer()">' + sName[SRDotDX.config.serverMode - 1][sLen] + '</div>', sbCmd = "", sbCls = 'class="';
  756. for (i = 0; i < sbElemObj.length; i++) {
  757. if (i == stopper) break;
  758. if (typeof sbElemObj[i] == 'undefined' || sbElemObj[i] == null) {
  759. sidebarElemHtml += '<div></div>'; continue
  760. }
  761. if (sbElemObj[i].type == 'jtxt') {
  762. sidebarElemHtml += '<input id="sbJoinStr" onkeyup="SRDotDX.gui.updateFilterTxt(this.value)" class="dotdx_chat_filter' + slim + '" type="text" value=""><div class="'+slim+'"></div>';
  763. continue
  764. }
  765. if (sbElemObj[i].type == 'label') {
  766. sidebarElemHtml += '<div class="label' + slim + '">';
  767. if (SRDotDX.config.sbSlim) {
  768. if (typeof sbElemObj[i].sname == 'undefined') sidebarElemHtml += sbElemObj[i].name.substring(0, 4);
  769. else sidebarElemHtml += sbElemObj[i].sname;
  770. }
  771. else sidebarElemHtml += sbElemObj[i].name;
  772. sidebarElemHtml += '</div>';
  773. continue;
  774. }
  775. if (typeof sbElemObj[i].cmd != 'undefined') {
  776. if (sbElemObj[i].cmd.charAt(0) == '/') sbCmd = 'SRDotDX.gui.chatCommand(\'' + sbElemObj[i].cmd + '\')';
  777. else if (sbElemObj[i].cmd.indexOf('://') > 2) sbCmd = 'SRDotDX.gui.httpCommand(\'' + sbElemObj[i].cmd + '\')';
  778. else sbCmd = sbElemObj[i].cmd.replace("'", "\'");
  779. }
  780. if (typeof sbElemObj[i].color != 'undefined') {
  781. if (sbElemObj[i].color.charAt(0).toLowerCase() == 'b' && sbElemObj[i].color.toLowerCase() != 'black') sbCls += 'b';
  782. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'g') sbCls += 'g';
  783. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'r') sbCls += 'r';
  784. else if (sbElemObj[i].color.charAt(0).toLowerCase() == 'y') sbCls += 'y';
  785. }
  786. sidebarElemHtml += '<button ' + sbCls + slim + '" ' + 'onclick="' + sbCmd + '">';
  787. if (typeof sbElemObj[i].name == 'undefined') {
  788. if (SRDotDX.config.sbSlim) sidebarElemHtml += 'Btn' + (i + 1);
  789. else sidebarElemHtml += 'Button ' + (i + 1);
  790. }
  791. else {
  792. if (SRDotDX.config.sbSlim)
  793. if (typeof sbElemObj[i].sname == 'undefined') sidebarElemHtml += sbElemObj[i].name.substring(0, 4);
  794. else sidebarElemHtml += sbElemObj[i].sname;
  795. else sidebarElemHtml += sbElemObj[i].name
  796. }
  797. sidebarElemHtml += '</button>';
  798. sbCmd = "";
  799. sbCls = 'class="';
  800. }
  801. SRDotDX.gui.cHTML('#dotdx_sidebar_container').html(sidebarElemHtml, true);
  802. }
  803. },
  804. toggleSlimSB: function () {
  805. if (SRDotDX.config.sbEnable) {
  806. this.applySidebarUI(2);
  807. this.chatResize();
  808. }
  809. },
  810. restoreDefaultSB: function () {
  811. document.getElementById('options_sbConfig').value = '{"type":"label","name":"Camps"},\n\
  812. {"type":"btn","name":"GoC","cmd":"/camp goc"},\n\
  813. {"type":"btn","name":"MaM","cmd":"/camp mam"},\n\
  814. {"type":"btn","name":"GD","cmd":"/camp gd"},\n\
  815. {"type":"label","name":"Tiers"},\n\
  816. {"type":"btn","name":"Bella","cmd":"/raid bella"},\n\
  817. {"type":"btn","name":"Xerk","cmd":"/raid xerkara"},\n\
  818. {"type":"btn","name":"Tisi","cmd":"/raid tisi"},\n\
  819. {"type":"label","name":"Join"},\n\
  820. {"type":"btn","name":"Farms","cmd":"SRDotDX.gui.quickImportAndJoin(\'farm:nnm\')"},\n\
  821. {"type":"label","name":"Utils"},\n\
  822. {"type":"btn","color":"g","name":"(Re)Load","sname":"Reld","cmd":"SRDotDX.reload()"},\n\
  823. {"type":"btn","color":"r","name":"Unload","sname":"Kill","cmd":"/kill"},\n\
  824. {"type":"btn","name":"Room 1","sname":"CR1","cmd":"SRDotDX.gui.gotoRoom(1)"},\n\
  825. {"type":"btn","name":"Room 2","sname":"CR2","cmd":"SRDotDX.gui.gotoRoom(2)"},\n\
  826. {"type":"btn","name":"Room 8","sname":"CR8","cmd":"SRDotDX.gui.gotoRoom(8)"},\n\
  827. {"type":"label","name":"Sheets","sname":"Help"},\n\
  828. {"type":"btn","name":"Magic","sname":"Mag","cmd":"https://docs.google.com/spreadsheets/d/1O0eVSnzlACP9XJDq0VN4kN51ESUusec3-gD4dKPHRNU"},\n\
  829. {"type":"btn","name":"Mount","sname":"Mnt","cmd":"https://docs.google.com/spreadsheet/ccc?key=0AiSpM5yAo8atdER2NEhHY3VjckRhdWctWV8yampQZUE"},\n\
  830. {"type":"btn","name":"Gear","cmd":"https://docs.google.com/spreadsheet/lv?key=0AvP2qXrWcHBxdHpXZkUzTHNGNkVWbjE5c2VEZUNNMUE"},\n\
  831. {"type":"label","name":"Raids"},\n\
  832. {"type":"jtxt"},\n\
  833. {"type":"btn","color":"g","name":"Join","cmd":"SRDotDX.gui.joinSelectedRaids(true)"},\n\
  834. {"type":"btn","color":"b","name":"Import","sname":"Imp","cmd":"SRDotDX.gui.importFromServer()"},\n\
  835. {"type":"btn","color":"y","name":"RaidBot","sname":"Bot","cmd":"SRDotDX.gui.switchBot()"}';
  836. SRDotDX.gui.applySidebarUI(0);
  837. },
  838. hideWC: function (init) {
  839. var offset;
  840. if (init) offset = SRDotDX.config.hideWChat ? -265 : 0;
  841. else {
  842. offset = SRDotDX.config.hideWChat ? 265 : -265;
  843. SRDotDX.config.hideWChat = !SRDotDX.config.hideWChat;
  844. document.getElementById('hideWCtxt').innerHTML = SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat';
  845. SRDotDX.config.extSave();
  846. }
  847. var gmWidth = document.getElementById('gameholder').offsetWidth + offset;
  848. document.getElementById('gameholder').style.width = gmWidth + "px";
  849. document.getElementById('game').style.width = gmWidth + "px";
  850. this.chatResize();
  851. },
  852. removeWC: function(rly) {
  853. if(rly) {
  854. SRDotDX.config.removeWChat = true;
  855. var li = SRDotDX.gui.cHTML('#wcbutton').ele();
  856. li.parentNode.removeChild(li);
  857. if(!SRDotDX.config.hideWChat) {
  858. SRDotDX.config.hideWChat = true;
  859. this.hideWC(true);
  860. }
  861. SRDotDX.config.extSave();
  862. }
  863. else {
  864. SRDotDX.config.removeWChat = false;
  865. SRDotDX.gui.cHTML('li').set({id: 'wcbutton', class: 'rate'}).html('<a id="hideWCtxt" class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.gui.hideWC(false); return false;">' + (SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat') + '</a>', false).attach('after', 'quicklinks_play_later_block');
  866. SRDotDX.config.extSave();
  867. setTimeout(activateGame,1000);
  868. }
  869. },
  870. chatResize: function (chatSize) {
  871. var size = chatSize || SRDotDX.config.chatSize;
  872. SRDotDX.config.chatSize = size;
  873. var gmWidth = document.getElementById('gameholder').offsetWidth;
  874. var gmHeight = document.getElementById('gameholder').offsetHeight;
  875. var sbWidth = SRDotDX.config.sbEnable ? (SRDotDX.config.sbSlim ? 40 : 70) : 0;
  876. var hScroll = SRDotDX.config.hideScrollBar ? SRDotDX.gui.getScrollbarWidth() : 0;
  877. var chatWidthInc = size - 300;
  878. var chatCorr = chatWidthInc / 75 * 2;
  879. var overallWidth = (292 + gmWidth + sbWidth + chatWidthInc) + "px";
  880. document.getElementById('maingame').style.width = overallWidth;
  881. document.getElementById('maingamecontent').style.width = overallWidth;
  882. document.getElementById('flashframecontent').style.width = overallWidth;
  883. document.getElementById('chat_container').style.width = size + "px";
  884. document.getElementById('raid_list').style.width = 282 + hScroll + "px";
  885. document.getElementById('raid_list').style.overflowY = hScroll ? 'scroll' : 'auto';
  886. document.getElementById('chat_tab_pane').style.width = (size - 16) + "px";
  887. document.getElementById('DotDX_chatResizeElems').innerHTML = '#kong_game_ui textarea.chat_input { width: ' + (size - 30) + 'px !important; }\
  888. #kong_game_ui div#chat_raids_overlay { width: ' + (size - 8) + 'px }\
  889. #kong_game_ui div#chat_raids_overlay > span { width: ' + (size - 18 - chatCorr) + 'px }\
  890. #kong_game_ui div.chat_message_window { height: ' + (gmHeight - 254) + 'px !important; width: ' + (size - 18 + hScroll) + 'px; overflow-y: ' + (hScroll ? 'scroll' : 'auto') + '; }\
  891. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { width: ' + (size - 22 + hScroll) + 'px }\
  892. div#dotdx_sidebar_container { height: ' + (gmHeight - 5) + 'px; ' + (SRDotDX.config.sbRightSide ? "text-align: left; padding-left: 1px; padding-right: 6px;" : "text-align: left; margin-left: 2px; padding-left: 6px") + ' }';
  893. },
  894. helpBox: function (boxId, magId, raidId, mouseOut) {
  895. var boxDiv = document.getElementById(boxId);
  896. var magSpan = document.getElementById(magId);
  897. if (mouseOut) {
  898. SRDotDX.gui.CurrentRaidsOutputTimer = setTimeout(function(){document.getElementById('chat_raids_overlay').className = "";}, 1500);
  899. if(magSpan) {
  900. magSpan.style.maxWidth = "0";
  901. setTimeout(function(){ document.getElementById(magId).innerHTML = "" }, 100);
  902. }
  903. }
  904. else {
  905. var info = SRDotDX.config.raidList[raidId], msg = 'Unknown', mWidth = "0", raid;
  906. if (typeof info !== 'object') msg = 'Raid not in db (removed?)';
  907. else if (typeof SRDotDX.raids[info.boss] == 'undefined') {
  908. msg = '<span style="font-size: 12px;">' + info.boss.capitalize().replace(/_/ig, ' ') + ' on ' + ['Normal', 'Hard', 'Legendary', 'Nightmare'][info.diff - 1] + '</span>';
  909. }
  910. else {
  911. var magE = info.magic.reduce(function(a,b){return a+b;});
  912. raid = SRDotDX.raids[info.boss];
  913. var diff = info.diff - 1;
  914. if (magE) {
  915. var magI = "";
  916. //if(SRDotDX.isFirefox)
  917. for (i = 0; i < raid.nd; i++) magI += '<span class="magic" style="background-position: -' + info.magic[i] * 16 + 'px 0">&nbsp;</span>';
  918. //else for (i=0; i<raid.nd; i++) magI += '<span class="magic" style="background-position-x:-' + info.magic[i]*16 + 'px">&nbsp;</span>';
  919. magSpan.innerHTML = magI;
  920. mWidth = (raid.nd * 18 + 10) + "px";
  921. }
  922. msg = '<span style="font-size: 12px;">' + raid.name + ' on ' + ['Normal', 'Hard', 'Legendary', 'Nightmare'][diff] + '</span><br>';
  923. msg += (raid.type === '' ? '' : raid.type + ' | ') + SRDotDX.raidSizes[raid.size].name + ' Raid' + (diff == 3 ? ' | AP' : '');
  924. var size = raid.size < 15 ? 10 : raid.size;
  925. var fs = raid.health[diff] / (raid.size == 101 ? 100 : raid.size);
  926. if (typeof raid.lt !== 'object') {
  927. var epicRatio = SRDotDX.raidSizes[size].ratios;
  928. if (size === 15) msg += '<br>fs:&thinsp;' + SRDotDX.util.getShortNum(fs) + ' | 65d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[0]) + ' | 338d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[9]) + ' | 375d:&thinsp;' + SRDotDX.util.getShortNum(fs * epicRatio[10]);
  929. else msg += '<br>fs: ' + SRDotDX.util.getShortNum(fs) + ' | 1e: ' + SRDotDX.util.getShortNum(fs * epicRatio[0]) + ' | 2e: ' + SRDotDX.util.getShortNum(fs * epicRatio[2]) + ' | 2/3e: ' + SRDotDX.util.getShortNum(fs * epicRatio[3]);
  930. //msg += '<br>2e: ' + epicRatio[2] + ' | 3e: ' + epicRatio[4] + ' | fs: ' + fs;
  931. }
  932. else if (typeof raid.lt == 'object') {
  933. var ele = SRDotDX.lootTiers[raid.lt[diff]];
  934. var step = SRDotDX.config.chatSize === 450 ? 6 : (SRDotDX.config.chatSize === 375 ? 5 : 4);
  935. var steplow = step - 1;
  936. var tiers = ele['tiers'];
  937. var epics = ele['epics'];
  938. var best = ele['best'];
  939. var e = ele['e'] ? 'e' : '';
  940. var text = '';
  941. var i = tiers.length;
  942. var tier;
  943. while (i--) {
  944. tier = (i % step == steplow ? '<br>' : /*(i > 0 && tiers[i-1].charAt(5)=='b'? '&thinsp; | ' :*/ ' | '/*)*/ ) + (i == best ? '<u>' : '') + epics[i];
  945. if (epics[i] < 10) tier += e + ':&#8192; ';
  946. else if (epics[i] < 100) tier += e + ': ';
  947. else tier += e + ':&thinsp;';
  948. tier += tiers[i] + (i == best ? '</u>' : '');
  949. text = tier + text;
  950. }
  951. msg += ' | Tiered<br>fs: &nbsp;&nbsp;&thinsp;' + SRDotDX.util.getShortNum(fs) + '' + text;
  952. }
  953. else {
  954. }
  955. }
  956. if (magE) magSpan.style.maxWidth = mWidth;
  957. document.getElementById(boxId + '_text').innerHTML = msg;
  958. if (!(boxDiv.className.indexOf('active') > 0)) boxDiv.className = "active";
  959. clearTimeout(SRDotDX.gui.CurrentRaidsOutputTimer);
  960. }
  961. },
  962. displayHint: function (hint) {
  963. var helpEl = document.getElementById('helpBox');
  964. if (hint) {
  965. helpEl.children[0].innerHTML = hint;
  966. helpEl.style.maxHeight = '50px';
  967. helpEl.style.borderTopWidth = '1px';
  968. }
  969. else {
  970. helpEl.style.maxHeight = '0';
  971. helpEl.style.borderTopWidth = '0';
  972. }
  973. },
  974. refreshRaidList: function () {
  975. document.getElementById('raid_list').innerHTML = "";
  976. for (var i = 0; i < SRDotDX.gui.joinRaidList.length; i++) SRDotDX.gui.addRaid(SRDotDX.gui.joinRaidList[i]);
  977. },
  978. diffTxt: [['DotDX_U','U'],['DotDX_N','N'],['DotDX_H','H'],['DotDX_L','L'],['DotDX_NM','NM']],
  979. addRaid: function (id) {
  980. var r = typeof id === 'string' || typeof id === 'number' ? SRDotDX.config.raidList[id] : id;
  981. var a = document.getElementById('raid_list');
  982. if (r.boss) {
  983. if (a !== null) {
  984. var rd = typeof SRDotDX.raids[r.boss] != 'object' ? {shortname: r.boss.capitalize().replace(/_/ig, ' '), duration: 24} : SRDotDX.raids[r.boss];
  985. var url = 'http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp&kv_difficulty=' + r.diff + '&kv_hash=' + r.hash + '&kv_raid_boss=' + r.boss + '&kv_raid_id=' + r.id + '&kv_serverid=' + r.sid;
  986. var hpr = (r.hp * 100).toPrecision(3), fCls = "";
  987. var tlp = ((r.expTime - parseInt(new Date().getTime()/1000)) / (36 * rd.duration)).toPrecision(3);
  988. var delta = hpr - tlp;
  989. if (delta > 0) {
  990. if (delta < 15) fCls = " failings";
  991. else if (delta < 30) fCls = " failingm";
  992. else fCls = " failingh";
  993. }
  994. var lii = SRDotDX.gui.cHTML('div').set({
  995. class: 'raid_list_item ' + this.diffTxt[r.diff][0] + (r.visited ? ' DotDX_visitedRaidList' : ''),// + (r.nuked ? ' DotDX_nukedRaidList' : ''),
  996. id: 'DotDX_' + r.id,
  997. raidid: r.id
  998. }).html(' \
  999. <span class="DotDX_List_diff ' + this.diffTxt[r.diff][0] + '">' + this.diffTxt[r.diff][1] + '</span> \
  1000. <a class="DotDX_RaidLink" href="' + url + '">' + rd.shortname + '</a> \
  1001. <span class="DotDX_RaidListVisited">' + (r.visited ? '&#9733;' : '') + (r.fs === 0 ? ' !' : '') + '</span> \
  1002. <a class="dotdxRaidListDelete" href="#">DEL</a>\
  1003. <span class="DotDX_extInfo' + fCls + '">hp/time: ' + hpr + '% / ' + tlp + '%</span>\
  1004. ', true);
  1005. lii.attach('to', a);
  1006. }
  1007. }
  1008. else SRDotDX.gui.deleteRaidFromDB(id);
  1009. },
  1010. toggleRaidListDesc: function (el, mode) {
  1011. if (mode) {
  1012. clearTimeout(el.timerout);
  1013. el.timerin = setTimeout(function(){el.lastElementChild.style.display = "block";}, 500)
  1014. }
  1015. else {
  1016. clearTimeout(el.timerin);
  1017. el.timerout = setTimeout(function (){el.lastElementChild.style.display = "none";},50)
  1018. }
  1019. return false;
  1020. },
  1021. cHTML: function (ele) {
  1022. function Cele(ele) {
  1023. this._ele = ele;
  1024. this.ele = function(){return this._ele};
  1025. this.set = function (param) {for (var attr in param) if (param.hasOwnProperty(attr)) this._ele.setAttribute(attr, param[attr]); return this};
  1026. this.text = function (text) {this._ele.appendChild(document.createTextNode(text)); return this};
  1027. this.html = function (text, overwrite) {this._ele.innerHTML = overwrite ? text : this._ele.innerHTML + text; return this};
  1028. this.on = function (event, func, bubble) {this._ele.addEventListener(event, func, bubble); return this };
  1029. this.attach = function (method, dele) {
  1030. if (typeof dele === 'string') dele = document.getElementById(dele);
  1031. if (!(dele instanceof Node)) throw 'Invalid attachment element specified';
  1032. else if (!/^(?:to|before|after)$/i.test(method)) throw 'Invalid append method specified';
  1033. else if (method === 'to') dele.appendChild(this._ele);
  1034. else if (method === 'before') dele.parentNode.insertBefore(this._ele, dele);
  1035. else if (dele.nextSibling === null) dele.parentNode.appendChild(this._ele);
  1036. else dele.parentNode.insertBefore(this._ele, dele.nextSibling);
  1037. return this
  1038. };
  1039. }
  1040.  
  1041. if (typeof ele == 'string') ele = /^#/i.test(String(ele)) ? document.getElementById(ele.substring(1)) : document.createElement(String(ele));
  1042. if (ele instanceof Node) return new Cele(ele);
  1043. throw 'Invalid element type specified';
  1044. },
  1045. errorMessage: function (s, tag) {
  1046. tag = typeof tag == 'undefined' ? 'b' : tag;
  1047. SRDotDX.gui.doStatusOutput('<' + tag + '>' + s + '</' + tag + '>')
  1048. },
  1049. updateMessage: function () { SRDotDX.gui.doStatusOutput(SRDotDX.gui.standardMessage(), false, true) },
  1050. postingMessage: function (i, ct) { SRDotDX.gui.doStatusOutput('Posting message ' + i + (typeof ct == 'undefined' ? '' : ' of ' + ct + '...'), false) },
  1051. standardMessage: function () { return Object.keys(SRDotDX.config.raidList).length + ' raids in db, ' + SRDotDX.gui.joinRaidList.length + ' selected to join'; },
  1052. CurrentStatusOutputTimer: 0,
  1053. doStatusOutput: function (str, msecs, showInChat) {
  1054. showInChat = showInChat === undefined ? true : showInChat;
  1055. msecs = msecs || 4000;
  1056. var rel = document.getElementById('StatusOutput');
  1057. var cel = document.getElementById('dotdx_chat_overlay');
  1058. if(rel !== null) rel.innerHTML = str;
  1059. if (showInChat && cel !== null) cel.innerHTML = str;
  1060. if (msecs) {
  1061. if (SRDotDX.gui.CurrentStatusOutputTimer) clearTimeout(SRDotDX.gui.CurrentStatusOutputTimer);
  1062. SRDotDX.gui.CurrentStatusOutputTimer = setTimeout(function () {
  1063. var rel = document.getElementById('StatusOutput');
  1064. var cel = document.getElementById('dotdx_chat_overlay');
  1065. if(rel !== null) rel.innerHTML = SRDotDX.gui.standardMessage();
  1066. if(cel !== null) cel.innerHTML = SRDotDX.gui.standardMessage();
  1067. }, msecs);
  1068. }
  1069. },
  1070. toggleDisplay: function (elem, sender, el2) {
  1071. if (typeof elem == 'undefined') return;
  1072. var el = document.getElementById(elem);
  1073. var alls = document.getElementsByName(sender.getAttribute('name'));
  1074. if (alls.length > 0) {
  1075. for (var i = 0; i < alls.length; i++) {
  1076. if (alls[i].nodeName == 'P') alls[i].getElementsByTagName('span')[0].innerHTML = '+';
  1077. else alls[i].style.display = 'none';
  1078. }
  1079. el.style.display = 'block';
  1080. sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  1081. }
  1082. else {
  1083. if (el.style.display == 'none') {
  1084. el.style.display = 'block';
  1085. sender.getElementsByTagName('span')[0].innerHTML = '&minus;';
  1086. }
  1087. else {
  1088. el.style.display = 'none';
  1089. sender.getElementsByTagName('span')[0].innerHTML = '+';
  1090. }
  1091. }
  1092. if (typeof el2 == 'string') {
  1093. switch (el2) {
  1094. case 'raid_list': SRDotDX.refreshRaidTab(); break;
  1095. case 'share_list': document.getElementById('DotDX_raidsToSpam').style.height = ( 526 - document.getElementById('FPXShare').offsetHeight - document.getElementById('FPXImport').offsetHeight ) + "px";
  1096. }
  1097. }
  1098. },
  1099. Importing: false,
  1100. deleteRaid: function(ele) {
  1101. var id = ele.getAttribute('raidid');
  1102. SRDotDX.gui.deleteRaidFromDB(id);
  1103. //if(ele !== null) ele.parentNode.removeChild(ele);
  1104. },
  1105. deleteRaidFromDB: function(id) {
  1106. var chat = document.getElementsByClassName('chat_message_window'), p, i, pn;
  1107. for (var c = 0; c < chat.length; c++) {
  1108. p = chat[c].getElementsByClassName('SRDotDX_raid'); i = p.length;
  1109. while(i--) if(p[i].className.indexOf("DotDX_raidId_" + id) > -1) p[i].parentNode.removeChild(p[i]);
  1110. }
  1111. //SRDotDX.gui.toggleRaid('nuked', id, true);
  1112. if(SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  1113. //console.log('[DotDX] Raid removed: ' + id);
  1114. },
  1115. FPXdeleteAllRaids: function() {
  1116. if (!SRDotDX.config.confirmDeletes || confirm('This will delete all ' + SRDotDX.config.raidList.length + ' raids stored. Continue? \n (This message can be disabled on the options tab.)')) {
  1117. for (var id in SRDotDX.config.raidList) if (SRDotDX.config.raidList[id]) delete SRDotDX.config.raidList[id];
  1118. var raidlistDIV = document.getElementById('raid_list');
  1119. while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  1120. localStorage.removeItem('raidList');
  1121. SRDotDX.gui.updateMessage();
  1122. console.log('[SRDotDX] Delete all raids finished.');
  1123. }
  1124. },
  1125. chatCommand: function (text) {
  1126. var elems = document.getElementsByClassName('chat_input');
  1127. var txt = [], i = elems.length;
  1128. while (i--) { txt[i] = elems[i].value; elems[i].value = text; }
  1129. holodeck.activeDialogue().sendInput();
  1130. i = txt.length;
  1131. while (i--) elems[i].value = txt[i];
  1132. },
  1133. FPXdoWork: function (param1, whisper) {
  1134. var elems = document.getElementsByClassName('chat_input');
  1135. if (whisper && whisper != '') param1 = '/w ' + whisper + ' ' + param1;
  1136. var txt = [], i = elems.length;
  1137. while (i--) { txt[i] = elems[i].value; elems[i].value = param1; }
  1138. holodeck.activeDialogue().sendInput();
  1139. i = txt.length;
  1140. while (i--) elems[i].value = txt[i];
  1141. },
  1142. FPXformatRaidOutput: function (url) {
  1143. var pre = ''; //user && room ? '['+room+'|'+user+'] ' : '';
  1144. if (!SRDotDX.config.formatLinkOutput) return pre + url;
  1145. var r = SRDotDX.getRaidDetailsBase(url);
  1146. return pre + r.shortname + ' ' + r.diffShortText + ' ' + url;
  1147. },
  1148. isPosting: false,
  1149. FPXTimerArray: [],
  1150. FPXStopPosting: function () {
  1151. SRDotDX.gui.endSpammingRaids();
  1152. console.log('[DotDX] Spamming raids to chat... [cancelled]');
  1153. SRDotDX.util.extEcho('Raid posting cancelled');
  1154. },
  1155. endSpammingRaids: function () {
  1156. var i = SRDotDX.gui.FPXTimerArray.length;
  1157. while (i--) clearTimeout(SRDotDX.gui.FPXTimerArray[i]);
  1158. SRDotDX.gui.isPosting = false;
  1159. document.getElementById('PostRaidsButton').value = 'Post';
  1160. document.getElementById('dotdx_share_post_button').value = 'Post Links to Chat';
  1161. document.getElementById('dotdx_share_post_button').value = 'Friend Share links';
  1162. SRDotDX.gui.doStatusOutput('Posting raids finished');
  1163. SRDotDX.gui.FPXTimerArray = [];
  1164. SRDotDX.config.save(false);
  1165. },
  1166. prepareSpammingRaids: function () {
  1167. SRDotDX.gui.isPosting = true;
  1168. document.getElementById('PostRaidsButton').value = 'Cancel';
  1169. document.getElementById('dotdx_share_post_button').value = 'Cancel';
  1170. document.getElementById('dotdx_friend_post_button').value = 'Cancel';
  1171. SRDotDX.gui.doStatusOutput('Posting raids started', false);
  1172. },
  1173. spamRaidsToFriends: function () {
  1174. SRDotDX.gui.prepareSpammingRaids();
  1175. var userList = [[],[],[],[],[]], i;
  1176. for (var user in SRDotDX.config.friendUsers) {
  1177. for (i = 0; i < 5; i++) if (SRDotDX.config.friendUsers[user][i]) userList[i].push(user);
  1178. }
  1179. console.log('[DotDX] Spamming raids to friends... [started]');
  1180. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1181. if (linkList.length > 10) {
  1182. console.log('[DotDX] [If length went trough]');
  1183. document.getElementById('DotDX_raidsToSpam').value = '';
  1184. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1185. var link, ct = 0, sel = 4, r, rs, u;
  1186. i = 0;
  1187. var timer = 500, ttw = 3050;
  1188. var total = linkList.split(patt).length - 1;
  1189. console.log('[DotDX] [Just before while]');
  1190. while ((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1191. link = typeof link !== "string" ? link[0] : link;
  1192. r = SRDotDX.util.getRaidFromUrl(link);
  1193. rs = SRDotDX.raids[r.boss].size;
  1194. if (r.boss === 'serpina') sel = 0;
  1195. else if (rs < 26) sel = 1;
  1196. else if (rs === 50) sel = 2;
  1197. else if (rs === 100) sel = 3;
  1198. if (userList[sel].length > 0) {
  1199. for (u = 0; u < userList[sel].length; u++) {
  1200. console.log('[DotDX] [Inside user for]');
  1201. (function (p1, p2) {
  1202. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function () {
  1203. if (!SRDotDX.gui.isPosting) return;
  1204. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), p2);
  1205. ++ct;
  1206. SRDotDX.gui.postingMessage(ct, i);
  1207. }, timer);
  1208. })(link, userList[sel][u]);
  1209. timer += ttw;
  1210. i++;
  1211. }
  1212. }
  1213. }
  1214. }
  1215. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function () {
  1216. SRDotDX.gui.endSpammingRaids();
  1217. console.log('[DotDX] Spamming raids to friends... [stopped]');
  1218. }, timer);
  1219. },
  1220. FPXspamRaids: function () {
  1221. SRDotDX.gui.prepareSpammingRaids();
  1222. console.log('[DotDX] Spamming raids to chat... [started]');
  1223. try {
  1224. var linkList = document.getElementById('DotDX_raidsToSpam').value;
  1225. if (linkList.length > 10) {
  1226. document.getElementById('DotDX_raidsToSpam').value = '';
  1227. var patt = new RegExp('http...www.kongregate.com.games.5thPlanetGames.dawn.of.the.dragons.[\\w\\s\\d_=&]+[^,]', 'ig');
  1228. var link, ct = 0, i = 0;
  1229. var timer = 500, ttw = 3050;
  1230. var total = linkList.split(patt).length - 1;
  1231. while ((link = patt.exec(linkList)) && SRDotDX.gui.isPosting) {
  1232. (function (p1) {
  1233. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function () {
  1234. if (!SRDotDX.gui.isPosting) return;
  1235. SRDotDX.gui.FPXdoWork(SRDotDX.gui.FPXformatRaidOutput(p1), SRDotDX.config.whisperTo);
  1236. ++ct;
  1237. SRDotDX.gui.postingMessage(ct, total);
  1238. }, timer);
  1239. })(link);
  1240. timer += ttw;
  1241. i++;
  1242. }
  1243. }
  1244. SRDotDX.gui.FPXTimerArray[SRDotDX.gui.FPXTimerArray.length] = setTimeout(function () {
  1245. SRDotDX.gui.endSpammingRaids();
  1246. console.log('[DotDX] Spamming raids to chat... [stopped]');
  1247. }, timer);
  1248. }
  1249. catch (ex) {
  1250. console.log('[DotDX] Spamming raids to chat... [error]: ' + ex)
  1251. }
  1252. },
  1253. quickImportAndJoin: function (joinStr, imp) {
  1254. SRDotDX.gui.updateFilterTxt(joinStr, false, true);
  1255. SRDotDX.request.quickBtnLock = false;
  1256. if (imp) SRDotDX.request.joinAfterImport = true, SRDotDX.gui.importFromServer();
  1257. else SRDotDX.gui.joinSelectedRaids();
  1258. },
  1259. importFromServer: function () {
  1260. var h = Math.ceil(((new Date).getTime() - SRDotDX.config.lastImported) / 3600000);
  1261. SRDotDX.util.extEcho('Importing raids from server');
  1262. SRDotDX.request.raids(false, h);
  1263. },
  1264. FPXSortRaids: function () {
  1265. var raidArray = [], i, sortFunc;
  1266. var selectedSort = document.getElementById('FPXRaidSortSelection').value;
  1267. var selectedDir = document.getElementById('FPXRaidSortDirection').value;
  1268. var raidlistDIV = document.getElementById('raid_list');
  1269. var raidList = raidlistDIV.childNodes;
  1270. console.log('[SRDotDX] Sorting started ' + selectedSort + ' : ' + selectedDir);
  1271. i = raidList.length;
  1272. while (i--) raidArray.push(SRDotDX.config.raidList[raidList[i].getAttribute('raidid')]);
  1273. switch (selectedSort) {
  1274. case 'Id':
  1275. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1276. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id > b.id) return -1;
  1277. return 1;
  1278. };
  1279. else sortFunc = function (a, b) {
  1280. if (!(typeof a.id === 'undefined' || typeof b.id === 'undefined') && a.id < b.id) return -1;
  1281. return 1;
  1282. };
  1283. break;
  1284. case 'Time':
  1285. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1286. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp > b.timeStamp) return -1;
  1287. return 1;
  1288. };
  1289. else sortFunc = function (a, b) {
  1290. if (!(typeof a.timeStamp === 'undefined' || typeof b.timeStamp === 'undefined') && a.timeStamp < b.timeStamp) return -1;
  1291. return 1;
  1292. };
  1293. break;
  1294. case 'Name':
  1295. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1296. a = SRDotDX.raids[a.boss];
  1297. b = SRDotDX.raids[b.boss];
  1298. //console.log(a + ' : ' + b + ' : ' + (typeof a === 'undefined') + ' : ' + (typeof b === 'undefined'));
  1299. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name > b.name) return -1;
  1300. return 1;
  1301. };
  1302. else sortFunc = function (a, b) {
  1303. a = SRDotDX.raids[a.boss];
  1304. b = SRDotDX.raids[b.boss];
  1305. if (!(typeof a === 'undefined' || typeof b === 'undefined') && a.name < b.name) return -1;
  1306. return 1;
  1307. };
  1308. break;
  1309. case 'Diff':
  1310. if (selectedDir == 'asc') sortFunc = function (a, b) {
  1311. if (a.diff > b.diff) return -1;
  1312. return 1
  1313. };
  1314. else sortFunc = function (a, b) {
  1315. if (a.diff < b.diff) return -1;
  1316. return 1
  1317. };
  1318. break;
  1319. }
  1320. try {
  1321. raidArray.sort(sortFunc)
  1322. }
  1323. catch (e) {
  1324. console.log('[SRDotDX] Sorting error: ' + e);
  1325. return
  1326. }
  1327. raidlistDIV = document.getElementById('raid_list');
  1328. if(raidlistDIV !== null) while (raidlistDIV.hasChildNodes()) raidlistDIV.removeChild(raidlistDIV.lastChild);
  1329. i = raidArray.length;
  1330. while (i--) SRDotDX.gui.addRaid(raidArray[i]);
  1331. //SRDotDX.gui.FPXFilterRaidListByName();
  1332. console.log('[SRDotDX] Sorting finished');
  1333. },
  1334. /*GetRaid: function (id) {
  1335. if (isNumber(id)) {
  1336. var raidList = document.getElementById('raid_list').childNodes;
  1337. var i = raidList.length, item;
  1338. while (i--) {
  1339. item = raidList[i];
  1340. if (item.getAttribute('raidid') == id) {
  1341. var raid = SRDotDX.config.raidList[id];
  1342. raid.ele = item;
  1343. return raid
  1344. }
  1345. }
  1346. }
  1347. return null
  1348. },*/
  1349. joinRaidList: [],
  1350. postRaidList: [],
  1351. updateFilterTimeout: 0,
  1352. filterSearchStringC: "",
  1353. filterSearchStringR: "",
  1354. updateFilterContext: true,
  1355. includeDiff: function (str, dv) {
  1356. var diff = isNaN(parseInt(dv)) ? ({'n': 1, 'h': 2, 'l': 3, 'nm': 4, 'nnm': 0})[dv] || 5 : parseInt(dv);
  1357. var out = "";
  1358. var string = str.toString();
  1359. switch (diff) {
  1360. case 0: out = string.replace(/,|$/g, '_1,') + string.replace(/,|$/g, '_4,'); break;
  1361. case 1: case 2: case 3: case 4: out = string.replace(/,|$/g, '_' + diff + ','); break;
  1362. default: for (var i = 1; i <= 4; i++) out += string.replace(/,|$/g, '_' + i + ','); break;
  1363. }
  1364. return out.slice(0, -1);
  1365. },
  1366. updateFilterTxt: function (txt, fromRT, quick) {
  1367. clearTimeout(this.updateFilterTimeout);
  1368. var foundRaids = [], field, rf, i;
  1369. if (txt != "") {
  1370. var searchArray = txt.split(/\s?\|\s?|\sor\s|\s?,\s?/ig);
  1371. console.log('[DotDX] Pattern split: ' + searchArray);
  1372. for (i = 0; i < searchArray.length; i++) {
  1373. field = searchArray[i].toLowerCase().split(':');
  1374. if (field[0] != "") {
  1375. if (typeof SRDotDX.searchPatterns[field[0]] != 'undefined') foundRaids.push(this.includeDiff(SRDotDX.searchPatterns[field[0]], field[1]));
  1376. else if (typeof SRDotDX.raids[field[0]] != 'undefined') foundRaids.push(this.includeDiff(field[0], field[1]));
  1377. else {
  1378. for (var key in SRDotDX.raids) {
  1379. if(SRDotDX.raids.hasOwnProperty(key)) {
  1380. rf = (SRDotDX.raids[key].name + ':' + SRDotDX.raids[key].shortname + ':' + SRDotDX.raids[key].type).toLowerCase();
  1381. if (rf.indexOf(field[0]) >= 0) foundRaids.push(this.includeDiff(key, field[1]));
  1382. }
  1383. }
  1384. }
  1385. }
  1386. }
  1387. }
  1388. var finalSearchString = foundRaids.length == 0 ? "" : "," + foundRaids.toString() + ",";
  1389. //console.log('[DotDX] Raids to join from ' + (fromRT ? 'Raids' : 'Chat') + ' tab: ' + foundRaids);
  1390. if (fromRT) {
  1391. SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1] = txt;
  1392. SRDotDX.config.filterSearchStringR = finalSearchString;
  1393. }
  1394. else if (quick) {
  1395. SRDotDX.request.filterSearchStringT = finalSearchString;
  1396. }
  1397. else {
  1398. var filterInputs = document.getElementsByClassName('dotdx_chat_filter');
  1399. for (i = 0; i < filterInputs.length; i++) if (filterInputs[i].value != txt) filterInputs[i].value = txt;
  1400. SRDotDX.config.chatFilterString = txt;
  1401. SRDotDX.config.filterSearchStringC = finalSearchString;
  1402. //this.joinRaidFromChat = true;
  1403. }
  1404. if (quick) {
  1405. SRDotDX.gui.selectRaidsToJoin('quick');
  1406. SRDotDX.config.save(false)
  1407. }
  1408. else {
  1409. this.updateFilterTimeout = setTimeout(function () {
  1410. SRDotDX.gui.selectRaidsToJoin();
  1411. SRDotDX.config.save(false)
  1412. }, 300)
  1413. }
  1414. },
  1415. selectRaidsToJoin: function (from) {
  1416. if (SRDotDX.request.quickBtnLock) {
  1417. if (!SRDotDX.gui.joining) SRDotDX.gui.joinRaidList.length = 0;
  1418. SRDotDX.gui.updateFilterContext = document.getElementById('chat_tab').firstChild.className == 'active';
  1419. var searchString = from && from == 'quick' ? SRDotDX.request.filterSearchStringT : (SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR);
  1420. var r, c = 0, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML, server = SRDotDX.config.serverMode;
  1421. for (var raid in SRDotDX.config.raidList) {
  1422. if (SRDotDX.config.raidList.hasOwnProperty(raid)) {
  1423. r = SRDotDX.config.raidList[raid];
  1424. if (SRDotDX.config.fltShowAll || ( r.sid == server &&
  1425. ((!SRDotDX.config.fltExclFull || r.fs > 0) && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1426. filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0 &&
  1427. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ))
  1428. SRDotDX.gui.joinRaidList.push(r);
  1429. }
  1430. }
  1431. if (!SRDotDX.gui.joining) {
  1432. SRDotDX.gui.updateMessage();
  1433. SRDotDX.gui.refreshRaidList();
  1434. }
  1435. }
  1436. },
  1437. pushRaidToJoinQueue: function (id) {
  1438. var searchString = SRDotDX.gui.updateFilterContext && SRDotDX.config.chatFilterString != "" ? SRDotDX.config.filterSearchStringC : SRDotDX.config.filterSearchStringR;
  1439. var r, filter = SRDotDX.gui.cHTML('#DotDX_filters').ele().innerHTML;
  1440. r = SRDotDX.config.raidList[id];
  1441. if(typeof r === 'object') {
  1442. if (SRDotDX.config.fltShowAll || (
  1443. ((!SRDotDX.config.fltExclFull || r.fs > 0) && (SRDotDX.config.fltIncVis || !r.visited)) &&
  1444. filter.indexOf('fltList_' + r.boss + '_' + (r.diff - 1)) < 0 &&
  1445. (searchString == "" || searchString.indexOf("," + r.boss + "_" + r.diff + ",") >= 0) ))
  1446. SRDotDX.gui.joinRaidList.push(r);
  1447. }
  1448. },
  1449. joining: false,
  1450. joinRaidIndex: 0,
  1451. joinRaidComplete: 0,
  1452. joinRaidSuccessful: 0,
  1453. joinRaidDead: 0,
  1454. joinRaidInvalid: 0,
  1455. joinSelectedRaids: function (fromChat) {
  1456. if (!this.joining) {
  1457. this.joining = true;
  1458. this.joinRaidIndex = 0;
  1459. this.joinRaidComplete = 0;
  1460. this.joinRaidSuccessful = 0;
  1461. this.joinRaidDead = 0;
  1462. this.joinRaidInvalid = 0;
  1463. if (SRDotDX.gui.joinRaidList.length == 0) {
  1464. this.joinFinish(true);
  1465. return
  1466. }
  1467. SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Cancel';
  1468. SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Cancel';
  1469. console.log('[DotDX] Hyperfast joining ' + SRDotDX.gui.joinRaidList.length + ' raids');
  1470. while (SRDotDX.gui.joinRaidIndex < Math.min(30, SRDotDX.gui.joinRaidList.length)) SRDotDX.request.joinRaid(SRDotDX.gui.joinRaidList[SRDotDX.gui.joinRaidIndex++]);
  1471. }
  1472. else if (!fromChat) this.joinFinish();
  1473. },
  1474. joinFinish: function (recalc) {
  1475. this.joining = false;
  1476. SRDotDX.request.quickBtnLock = true;
  1477. SRDotDX.gui.cHTML("#AutoJoinVisibleButton").ele().value = 'Join';
  1478. SRDotDX.gui.cHTML("#AutoImpJoinVisibleButton").ele().value = 'Import & Join';
  1479. //this.joinRaidList = [];
  1480. if (recalc) this.selectRaidsToJoin('joining finish');
  1481. },
  1482. refreshFriends: function () {
  1483. var content = "", ff, i = 0, f = false, friend;
  1484. var parentDiv = SRDotDX.gui.cHTML('#FPXfsOptions');
  1485. parentDiv.html('<span class="generic">User</span><span class="share">Srp</span><span class="share">Sml</span><span class="share">Med</span><span class="share">Lrg</span><span class="share" style="margin-right: 27px">Oth</span><hr style="width: 270px; margin: 3px auto 4px; border: 0; height: 1px; background-color: #999;">', true);
  1486. for (friend in SRDotDX.config.friendUsers) {
  1487. if(SRDotDX.config.friendUsers.hasOwnProperty(friend)) {
  1488. ff = SRDotDX.config.friendUsers[friend];
  1489. content += (f ? '<br>' : '') + '<span class="generic">' + friend + '</span>' +
  1490. '<input type="checkbox" id="fs:' + friend + ':0' + '"/><label for="fs:' + friend + ':0' + '"></label>' +
  1491. '<input type="checkbox" id="fs:' + friend + ':1' + '"/><label for="fs:' + friend + ':1' + '"></label>' +
  1492. '<input type="checkbox" id="fs:' + friend + ':2' + '"/><label for="fs:' + friend + ':2' + '"></label>' +
  1493. '<input type="checkbox" id="fs:' + friend + ':3' + '"/><label for="fs:' + friend + ':3' + '"></label>' +
  1494. '<input type="checkbox" id="fs:' + friend + ':4' + '"/><label for="fs:' + friend + ':4' + '"></label>';
  1495. f = true;
  1496. }
  1497. }
  1498. parentDiv.html('<div style="overflow-y: scroll; width: 277px; height: 414px">' + content + '</div>', false);
  1499. for (friend in SRDotDX.config.friendUsers) {
  1500. if(SRDotDX.config.friendUsers.hasOwnProperty(friend)) {
  1501. ff = SRDotDX.config.friendUsers[friend];
  1502. for (i = 0; i < 5; i++) SRDotDX.gui.cHTML('#fs:' + friend + ':' + i).on('click', function (e) {
  1503. SRDotDX.gui.fsEleClick(e)
  1504. }).ele().checked = ff[i];
  1505. }
  1506. }
  1507. },
  1508. DeleteRaids: function () {
  1509. if (!this.joining) {
  1510. console.log('[DotDX] Erasing visible raids ...');
  1511. var rn = SRDotDX.gui.joinRaidList.length;
  1512. if (rn > 0 && (!SRDotDX.config.confirmDeletes || confirm('This will delete ' + rn + ' raids. Continue? \n (This message can be disabled on the options tab.)'))) {
  1513. var i, tot = 0;
  1514. for (i = 0; i < rn; i++) {
  1515. SRDotDX.gui.deleteRaidFromDB(SRDotDX.gui.joinRaidList[i].id);
  1516. tot++;
  1517. }
  1518. SRDotDX.gui.doStatusOutput(tot + ' raids deleted');
  1519. SRDotDX.gui.selectRaidsToJoin();
  1520. console.log('[DotDX] Erasing complete');
  1521. }
  1522. }
  1523. },
  1524. GetDumpText: function () {
  1525. var dumptext = "";
  1526. var pre = "http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons?kv_action_type=raidhelp";
  1527. var i, raid;
  1528. for (i = 0; i < SRDotDX.gui.joinRaidList.length; i++) {
  1529. raid = SRDotDX.gui.joinRaidList[i];
  1530. //if (raid.nuked) continue;
  1531. dumptext += pre + '&kv_raid_id=' + raid.id + '&kv_difficulty=' + raid.diff + '&kv_raid_boss=' + raid.boss + '&kv_hash=' + raid.hash + '&kv_serverid=' + raid.sid + ', ';
  1532. }
  1533. return dumptext;
  1534. },
  1535. RaidAction: function (f) {
  1536. switch (f) {
  1537. case 'share':
  1538. SRDotDX.gui.DumpRaidsToShare(true);
  1539. break;
  1540. case 'post':
  1541. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1542. else { SRDotDX.gui.DumpRaidsToShare(); SRDotDX.gui.FPXspamRaids(); }
  1543. break;
  1544. case 'post_share':
  1545. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1546. else SRDotDX.gui.FPXspamRaids();
  1547. break;
  1548. case 'post_friend':
  1549. if (SRDotDX.gui.isPosting) SRDotDX.gui.FPXStopPosting();
  1550. else SRDotDX.gui.spamRaidsToFriends();
  1551. break;
  1552. case 'delete':
  1553. SRDotDX.gui.DeleteRaids();
  1554. break;
  1555. }
  1556. },
  1557. DumpRaidsToShare: function (b) {
  1558. document.getElementById('DotDX_raidsToSpam').value = SRDotDX.gui.GetDumpText();
  1559. SRDotDX.gui.doStatusOutput('Copied ' + SRDotDX.gui.joinRaidList.length + ' raid links to share tab.');
  1560. console.log('[DotDX] Dumped ' + SRDotDX.gui.joinRaidList.length + ' to share');
  1561. if (b) {
  1562. var e = document.getElementById('lots_tab_pane').getElementsByTagName('li');
  1563. var i = e.length;
  1564. while (i--) if (e[i].getAttribute('class').indexOf('active') > -1) e[i].className = e[i].className.replace(/ active$/g, '');
  1565. (document.getElementById('FPXShareTab').parentNode).className += ' active';
  1566. }
  1567. },
  1568. BeginDeletingExpiredUnvisitedRaids: function () {
  1569. SRDotDX.gui.cleanRaidsDB();
  1570. setInterval(SRDotDX.gui.cleanRaidsDB, 600000)
  1571. },
  1572. cleanRaidsDB: function () {
  1573. var now = parseInt(new Date().getTime()/1000);
  1574. var r, cnt = 0;
  1575. for(var raidId in SRDotDX.config.raidList) {
  1576. if(SRDotDX.config.raidList.hasOwnProperty(raidId)) {
  1577. r = SRDotDX.config.raidList[raidId];
  1578. if(now >= r.expTime || (r.ni && (now-r.timeStamp)/3600 > 3)) {
  1579. SRDotDX.gui.deleteRaidFromDB(raidId);
  1580. cnt++;
  1581. }
  1582. }
  1583. }
  1584.  
  1585. var chat = document.getElementsByClassName('chat_message_window'), p, i;
  1586. for (var c = 0; c < chat.length; c++) {
  1587. p = chat[c].getElementsByTagName('div'); i = p.length;
  1588. while(i--) if(p[i].empty()) p[i].parentNode.removeChild(p[i]);
  1589. }
  1590.  
  1591. if (cnt > 0) {
  1592. SRDotDX.gui.doStatusOutput(cnt + ' expired raids removed from db.');
  1593. console.log('[DotDX] Number of expired raids removed: ' + cnt);
  1594. SRDotDX.gui.selectRaidsToJoin('prune');
  1595. }
  1596. },
  1597. switchBot: function () {
  1598. //console.log('[SRDotDX] Bot button clicked');
  1599. var chkBot = document.getElementById('SRDotDX_options_hideBotLinks');
  1600. chkBot.checked = !SRDotDX.config.hideBotLinks;
  1601. SRDotDX.config.hideBotLinks = chkBot.checked;
  1602. SRDotDX.gui.cHTML('#SRDotDX_botClass').html('.bot {display: ' + (chkBot.checked ? 'none !important' : 'block') + '}', true);
  1603. SRDotDX.gui.scrollChat();
  1604. },
  1605. scrollChat: function (num) {
  1606. var els = document.getElementsByClassName('chat_message_window');
  1607. var i = num ? num : SRDotDX.util.getChatNumber();
  1608. if (num) els[num].scrollTop = els[num].scrollHeight;
  1609. else {
  1610. i = els.length;
  1611. while (i--) els[i].scrollTop = els[i].scrollHeight;
  1612. }
  1613. },
  1614. getScrollbarWidth: function () {
  1615. var scrollDiv = SRDotDX.gui.cHTML('div').set({id: "DotDX_scrollMeasure", style: "width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px;"}).attach('to', document.body).ele();
  1616. var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
  1617. document.body.removeChild(document.getElementById('DotDX_scrollMeasure'));
  1618. return scrollbarWidth;
  1619. },
  1620. applyFontSize: function (num) {
  1621. var n = typeof num == 'number' ? num : SRDotDX.config.fontNum, s1, s2, mod = '';
  1622. //console.log("[DotDX] apply font size with id: " + n);
  1623. SRDotDX.config.fontNum = n;
  1624. switch (n) {
  1625. case 1: s1 = 12; s2 = 10; mod = '; vertical-align: top;'; break;
  1626. case 2: s1 = 10; s2 = 8; break;
  1627. default: s1 = 11; s2 = 9; break;
  1628. }
  1629. SRDotDX.gui.cHTML('#DotDX_fontClass').html('\
  1630. #kong_game_ui div.chat_message_window p span.message, #kong_game_ui div.chat_message_window p span.separator, #kong_game_ui div.chat_message_window p span.username {font-size: ' + s1 + 'px}\
  1631. #kong_game_ui div.chat_message_window p span.room, #kong_game_ui div.chat_message_window p span.timestamp {font-size: ' + s2 + 'px' + mod + '}\
  1632. ', true);
  1633. },
  1634. applyTabs: function () {
  1635. document.getElementById('lots_tab').firstChild.innerHTML = SRDotDX.config.dotdxTabName;
  1636. var elems = ["#DotDX_Dummy"];
  1637. if (SRDotDX.config.hideGameTab) elems.push("#kong_game_ui li#game_tab");
  1638. if (SRDotDX.config.hideAccTab) elems.push("#kong_game_ui li#accomplishments_tab");
  1639. SRDotDX.gui.cHTML('#DotDX_tabs').html(elems.join(", ") + ' { display: none !important }', true);
  1640. },
  1641. applyTheme: function (num) {
  1642. var n = typeof num == 'number' ? num : SRDotDX.config.themeNum;
  1643. //console.log("[DotDX] apply theme with id: " + n);
  1644. var c, check, radio;
  1645. SRDotDX.config.themeNum = n;
  1646. switch (n) {
  1647. case 1:
  1648. check = 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAcCAYAAABoMT8aAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAJxSURBVEhL7VRLaxNRGL1QEIVs9AckDamZZPLOvDMzicZEjBltY5qnisFFKbgRVLoQEf0JVkShTUVQCl2oG9GNS0FcuXDpD3DrxneP3x0mfdimTXHjwoHDMN/cc+a73z1nmCAImVgs9joej39NJBLYAau07kM0Gu0EAoH9bHBR8W02m4WqqtB1fSg0TYMkSUgmkx+JI3l0xujLvzg5l8vBsizYtr0FvG6apiuSSqV4J8c8OmO8Pf4Fviifz6NQKGwLLmQYBtLpNEig5NHXBfiC7YgDcPH/ArsI/NUpbPTBMAx8wAWIsy5AxW8DJ/IFw8DfcyfKsvyTOi56dMYcx1nhWyCL/un9LeAC5XL5Xa1WEz06Y61Wa5zwst1uf+l0OtgBq7TmfbPZrDYajTGPzvacRup0jpAURdHnChDxzahpNNMZXCsWMJ+NfDoz7r/l8/n2cYEfo6RRz0i4YlpYadTxYrKClYOHPueCwXMj+SCXlXBZ1vG828SSU8Mj8sNsaAKq3x/c5ES7cASWTaahOydywbwk46qi41Wvi351CovUxUw48l0WonOhUGhsTcCkF8clBTOVMkqyCps/0/0GiTw728YikR9YeVwSIjAPR6/Tb+2AO0QuwAdUVXXcrVaozRbun3ZwPiPjdqmE5cY0+tT2gmFiNhKBFouDTmCzlblAMZPFPA2zf3IST2p1PO02sDxdd8lLioZeWIBFpzA0TIaqoRwWcS+Zcvf68BQRnSk8VhX0JsKwaBa7plHXdBwVRNxJpdE/4WBBN3CR9mzxmdCQR0qjQaSKGMNNql+g/ZqK6iZxb2nkJAqOIStrtX81jYz9Bt6mjYTW51PyAAAAAElFTkSuQmCC';
  1649. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAI+SURBVDhPxZJNiBJhGMeHTgXdOrR0CUFdCTR1VscZW3W+Vs0P/JhZv2fVERSLukRBCEUHCRb6gKgg6tQlunrpVHSOztG9aLtsHQxcyv8+E22HcldvO/DjfWGe//M87/P8GfqO6Lp+PJ/P++m82Wg03vV6vXG/3//ZarW2isXiiP5dyGazvkwmc1LTtGPMH0GKgt92u90dEuBfOp3Oj0Kh8DKVSp2n8zRDgrPlcvkNZf1lmib2w/pPlUZUUWHocq1er08Mw8A8KpXKWJKkoSV6TZWwKCR6z6TT6S1qEYuSSCTGTDwe/04PxKKoqrrDRCKRD4qiYFFCodAnRhCEZyScRqNRzMOK83g8I0YUxUowGNwmMebhdru/yrI8YOhhZ3ief+z3+yeBQAD74fV6J9TaUxpckcnlcidoGDGWZZ9Tpm8+n29KYA8Knjqdzi/UzRMSVCmeZajXozT/UzSZVcp0dXl5+ZXD4fhst9u3bTbbR5fL9YJ2c92qYAnIdkuHaNh2s4lmrYYWYW4YMNvtgw1bL5Vgrq3hYiSKy6KIS5IIs6TBaDRmG7ak69igjQ84DnfOreIeLXOT53FFFFBb12cbNpNMwqQF3o3F8FBV/zLkWBhaEYVZho1LMprBEO7T+Yha3GOTW0FrXQMln2HYmIhqgMNtas2qYAkeyDJucT5UCzkr+H/DEpAFHgbL4kZIwJDEgxU/upk4EpTgAMPyiNCZVFQUs1lo6QwUSUI4HJ5vWEoCjqbIBbnf98MyrL60C6YGOtWmdTvcAAAAAElFTkSuQmCC';
  1650. c = ['#333', '#ddd', '#404040', '#fff', '#792c2c', '#333', '#101010', '0 0 5px #202020', '#333', '0 0 10px #000',
  1651. '#ccc', '#eee', '0 0 4px #555', '#000', '#444', '0 0 5px #888', '#fff', '#792c2c', '0 0 12px #fff', '#fff',
  1652. '#000', 'top,#aa4141,#5c2828', '0 0 5px #aaa;', '#555', '#000', '0 -2px 6px -3px #000', '#fff', '0 0 4px #000;', '#ccc', '#ddd',
  1653. 'none', '#000', '0 0 5px 1px #222', '#444', '#fff', '#000', '#333', '0 0 8px #000', '#ccc', '#222',
  1654. '#111', '#fff', '0 0 4px #111', '#333', '#ddd', '#111', '#444', '#3a3a3a', '#111', 'none',
  1655. '#111', 'none', '#111', 'none', '#111', 'none', '#404040', '#60cc60', '#60cc60', '0 0 5px #00aa1a',
  1656. '#d6c96a', '#d6c96a', '0 0 5px #7e7400', '#e47070', '#e47070', '0 0 5px #aa0000', '#c28ee6', '#c28ee6', '0 0 5px #9000ff', '#000',
  1657. 'top,#404040,#404040', '#000', 'top,#2a2a2a,#492c2c', '#78bcfa', '0 0 4px #000', '#6dc97c', '#ec6666', '#f8b60d', '0 0 5px #000', '#ccc',
  1658. '#fff', '0 0 6px #999', '#aaa', '#bbb', '#dfa160', '#ffb261', '0 0 4px #9b5812', '#000', '#404040', '0 0 6px #111',
  1659. '#eee', '#000', '0 0 3px #101010', '0 0 5px #000', 'top,#303030,#444', '#1a1a1a', '#000', '0 0 8px #fff', '#ddd', '#101010',
  1660. '0 0 3px #000', '0 0 5px #202020', 'top,#3a3a3a,#555', '#eee', '#000', '0 0 5px #000', '0 0 10px #111', 'top,#303030,#404040', '', '',
  1661. '', 'top,#303030,#406785', '', '', '', 'top,#303030,#306638', '', '', '', 'top,#303030,#693434',
  1662. '', '', '', 'top,#303030,#887E35', '#eaeaea', '0 0 5px #000', '#e0e0e0', '#101010', '0 0 5px #000', '0 0 5px #202020',
  1663. 'top,#303030,#444', '', '', 'top,#2a2a2a,#222', '#eee', '#111', '0 0 5px #000', '0 0 4px #303030', 'top,#333,#555', '0 0 6px #101010',
  1664. 'top,#2a2a2a,#404040', '#eee', '#1a1a1a', '0 0 5px #000', '0 0 5px #222', 'top,#333,#4a4a4a', '0 0 6px #111', '', 'top, #2a2a2a, #333', '0 0 6px #111',
  1665. '', 'top,#2a2a2a,#426B44', '0 0 6px #111', '', 'top,#2a2a2a,#40668d', '0 0 6px #111', '', 'top,#2a2a2a,#612525', '#e0e0e0', '#101010',
  1666. '0 0 5px #000', '0 0 8px #101010', 'top,#303030,#723434', 'top,#202020,#4d2424', '#eee', '0 0 4px #000', '#e0e0e0', '#888', 'top,#444,#555', '#eee',
  1667. '#000', '0 0 5px #000', '0 0 6px #111', 'left,#303030,#303030', '', '#aaa', '#000', '0 0 5px #000', 'top,#444,#444', '#606060',
  1668. '#101010', '#e5e5e5', '#f5f5f5', '0 0 6px #c0c0c0', '#eee', '#d83737', '0 0 3px #000', 'top,#404040,#556d52', 'top,#404040,#746c56', 'top,#404040,#664040',
  1669. 'top,#404040,#604c70', '#00bb00', '#dbb32e', '#d13c3c', '#d16ad1', '#eee', '0 0 6px #000', '#101010', '0 0 5px #000', 'top,#2a2a2a,#3a3a3a',
  1670. '#777', '#e0e0e0', '0 0 5px #000', '#f0f0f0', '0 0 8px #000', '#e0e0e0', '0 0 5px #000', '#000', '#3a3a3a', '#303030',
  1671. '#000', '#202020', '', '#552727', '#686868', '#303030', '#c0c0c0', '', '#111', '#222',
  1672. '#e0e0e0', '#fff', '0 0 6px #999', '#ffda8e', '#ff8080', '#ff4040', '#ccc', '#2a2a2a'];
  1673. break;
  1674. default:
  1675. check = 'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAC4SURBVDhPnZNRCsQgDAW9pPfxuCKICCIiyC62RPIksnEDU2zMlH7kGefc5xYzax5uas5ba19xjKEGxN67GhBba2pArLWqAbGUogbEnLMaEFNKakCMMaoBMYSgBkTvvRoQb3nEv0v64i/Wr94UiFIKToAopYDDZ0CUUkDMez4DIt/8PQkE7y2Rbz6905nfU3+JfPN3eDJoZon79hO8z++XKCVg7xEgSik4AaKUghMg3vKI83GLMcZ8AZMOnRQ6c3RxAAAAAElFTkSuQmCC';
  1676. radio = 'iVBORw0KGgoAAAANSUhEUgAAAA0AAAAaCAYAAABsONZfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAYdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuM4zml1AAAAFpSURBVDhP1VJNi4IAEPV3durU1V/QJTAIT3WQopvRD4ggCTKrQ8d+gwkRlB+RKBHhW96sxUrrurdlBx7DvHnjqPOUr3E+nzGbzdDr9dBsNiWzJp9LirFYLNDpdLDdbnE6ncBgZk2e/Vz6GavVCsPhEEmSIMuyN5BnnzoZCIIA7XYbURTh8XiUgn3qqFcsy8Jms8H9fq8EddQr3W4Xh8MBt9utEtRRr2iahjAM5b2rQB31smm/3yOO40pQJ5t4h+VyicvlUgnqqJeDcqXnebK+DOxT9zo0/3+/38fxeITv+28gz/7rTs+Yz+fQdV1ewXVdcQMza/Ls59Ji8ImTyURsQ+8xsyafS97jnxh2vV5jPB5LrjQs/dVqtVCr1VCv1yWzJl9qWMdx0Gg0oKrqC6xt2y43rGmahYEnRqNRuWG5/rsh8qWGZcMwjMLAYDAQ/kfD8oN3ux2m06lk1r8y7PV6RZqmkv/SsIryAXc40Mw81bSxAAAAAElFTkSuQmCC';
  1677. c = ['#404040', '#303030', '#e0e0e0', '#000', '#f0f0f0', '#ccc', '#6a6a6a', '0 0 4px #707070', '#ddd', '0 0 5px #333',
  1678. '#666', '#222', '0 0 3px #ccc', '#aaa', '#e6e6e6', '0 0 5px #888', '#000', '#f5f5f5', '0 0 5px #999', '#000',
  1679. '#888', 'top,#fff,#ddd', '0 0 5px #555;', '#f6f6f6', '#888', '0 -2px 6px -4px #444', '#222', '', '#777', '#888',
  1680. 'underline', '#888', '0 0 6px #999', '#fff', '#000', '#777', '#fff', '0 0 8px #999', '#4b4b4b', '#f0f0f0',
  1681. '#bbb', '#333', '0 0 4px #ddd', '#fff', '#222', '#d0d0d0', '#fff', '#f7f7f7', '#8ab389', 'top,#cbe7c4,#f3faf2',
  1682. '#adad68', 'top,#f7f0c8,#fcfbf8', '#b18780', 'top,#f3d7d1,#FCF7F7', '#a99abb', 'top,#ddd4e2,#f4f0f7', '#fff', '', '', '0 0 5px #aaa',
  1683. '', '', '0 0 5px #aaa', '', '', '0 0 5px #aaa', '', '', '0 0 5px #aaa', '#c0c0c0',
  1684. 'top,#f0f0f0,#fff', '#a1b4be', 'top,#dce8f1,#eff4f7', '#276594', 'none', '#267422', '#973131', '#085088', 'none', '#444',
  1685. '#000', '0 0 6px #888', '#666', '#666', '#946a3d', '#946a3d', '0 0 4px #f5Cc68Aa', '#777', '#eee', '0 0 7px #777',
  1686. '#000', '#606060', '0 0 3px #707070', '0 0 4px #ccc', 'top,#fff,#ddd', '#808080', '#707070', '0 0 4px #909090', '#111', '#707070',
  1687. '0 0 5px #aaa', '0 0 5px #808080', 'top,#f5f5f5,#dadada', '#fff', '#444', '0 0 10px #eee', '0 0 7px #222', 'top,#999,#555', '#000', '0 0 10px #fff',
  1688. '0 0 7px #1c3a61', 'top,#dcf0fd,#6794b2', '#000', '0 0 10px #fff', '0 0 7px #3d6425', 'top,#effde5,#618d4f', '#000', '0 0 10px #fff', '0 0 7px #412222', 'top,#ffefef,#aa5858',
  1689. '#000', '0 0 10px #fff', '0 0 7px #807823', 'top,#fffbe0,#c9b41d', '#101010', '0 0 8px #fff', '#333', '#707070', '0 0 6px #999', '0 0 5px #808080',
  1690. 'top,#f5f5f5,#dadada', '', '', 'top,#f5f5f5,#fff', '#222', '#999', '0 0 4px #ccc', '0 0 4px #ccc', 'top,#ccc,#eee', '0 0 4px #bbb',
  1691. 'top,#ccc,#ddd', '#444', '#aaa', '', '0 0 3px #ddd', 'top, #eee, #fff', '0 0 5px #bbb', '0 0 3px #bbb', 'top,#fff,#ccc', '0 0 5px #a7ca9c',
  1692. '0 0 3px #bbb', 'top, #fff, #b9daaf', '0 0 5px #a9d3ff', '0 0 3px #bbb', 'top, #fff, #a4c8ee', '0 0 5px #ffbaba', '0 0 3px #bbb', 'top,#fff,#f0a4a4', '#222', '#aaa',
  1693. '', '0 0 4px -1px #aaa', 'top,#fff,#d1dfee', 'top, #dfe8f1,#fff', '#333', '', '#bbb', '#ccc', 'top,#eee,#fff', '#444',
  1694. '#aaa', '1px 1px 2px #ddd', '0 0 4px #ccc', 'left,#fff,#eee', '0 0 3px #ddd', '#aaa', '#aaa', '0 0 3px #ccc', 'top,#f5f5f5,#f6f6f6', '#fff',
  1695. '#e0e0e0', '#111', '#111', '0 0 8px #777', '#000', '#bd0000', '0 0 2px #ff8e8e', 'top,#d8ecd3,#f5f5f5', 'top,#faf4d2,#f5f5f5', 'top,#fae4df,#f5f5f5',
  1696. 'top,#e9dcf3,#f5f5f5', '#00bb00', '#dbb32e', '#d13c3c', '#d16ad1', '#000', '0 0 6px #808080', '#808080', '0 0 5px #aaa', 'top,#d0d0d0,#f0f0f0',
  1697. '#ccc', '#222', '', '', '0 0 4px #ccc', '', '', '#bbb', '#fff', '',
  1698. '#bbb', '#efefef', '#fafafa', '#eff4f9', '#5f9ea0', '#eff4f9', '#606060', 'none', '#202020', '#ddd',
  1699. '#e0e0e0', '#fff', '0 0 6px #999', '#b97c00', '#c82929', '#b10000', '', ''];
  1700. break;
  1701. }
  1702.  
  1703. SRDotDX.gui.cHTML('#DotDX_themeClass').html('\
  1704. #maingame, #quicklinks li, div.game_page_wrap, div#kong_game_ui, #kong_game_ui .tabpane {background-color:' + c[0] + ' !important;}\
  1705. #kong_game_ui ul.main_tabs li.tab a, div#serverButton {color:' + c[1] + '; background-color:' + c[2] + '; border-color:' + c[95] + ';}\
  1706. #kong_game_ui ul.main_tabs li.tab a.active, div#serverButton:hover {color:' + c[3] + '; background-color:' + c[4] + '; border-color:' + c[96] + '; text-shadow:' + c[97] + ';}\
  1707. #kong_game_ui div#chat_tab_pane, div#dotdx_sidebar_container, #kong_game_ui div#lots_tab_pane, #kong_game_ui ul.main_tabs {background-color:' + c[5] + ' !important;}\
  1708. #kong_game_ui div#chat_window, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {border-color:' + c[6] + '; box-shadow:' + c[7] + ';}\
  1709. #kong_game_ui div#chat_window_header, #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper {background-color:' + c[8] + ';}\
  1710. #kong_game_ui div#chat_window_header {box-shadow:' + c[9] + ';}\
  1711. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {border-color:' + c[175] + ';}\
  1712. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#dotdx_status_div, #kong_game_ui .panel_handle a, #kong_game_ui #accomplishments_pane_title {color:' + c[10] + ';}\
  1713. #kong_game_ui div#chat_window_header div.room_name_container .room_name, #kong_game_ui div#chat_window_header div.dotdx_chat_overlay > span, #kong_game_ui div#dotdx_status_div span, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {color:' + c[11] + '; text-shadow:' + c[12] + ';}\
  1714. #kong_game_ui div#chat_window_header div.room_name_container, #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#dotdx_status_div, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {border-color:' + c[13] + '; background-color:' + c[14] + ';}\
  1715. #kong_game_ui div#chat_room_tabs div a:hover, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head:hover {text-shadow:' + c[15] + '}\
  1716. #kong_game_ui div#chat_room_tabs div.active a, #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head {color:' + c[16] + '; background-color:' + c[17] + '; text-shadow:' + c[18] + ';}\
  1717. #kong_game_ui div.chat_actions_container span.btn {color:' + c[19] + ' !important; border-color:' + c[20] + '; background:-webkit-linear-gradient(' + c[21] + '); background:-moz-linear-gradient(' + c[21] + ');}\
  1718. #kong_game_ui div.chat_actions_container span.kong_ico.btn_target:active {text-shadow:' + c[22] + ';}\
  1719. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { background-color:' + c[23] + '; border-color:' + c[24] + ';}\
  1720. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { box-shadow: inset ' + c[25] + ';}\
  1721. #kong_game_ui .user_row .username, #kong_game_ui div#lots_tab_pane ul { color:' + c[26] + '; text-shadow:' + c[27] + ';}\
  1722. #kong_game_ui .user_row.away .username {color:' + c[28] + ';}\
  1723. #kong_game_ui .user_row .guild-name {color:' + c[29] + ';}\
  1724. #kong_game_ui .user_row .username {text-decoration:' + c[30] + ';}\
  1725. #kong_game_ui div.chat_controls {border-color:' + c[31] + '; box-shadow:' + c[32] + ';}\
  1726. #kong_game_ui div.chat_controls, #kong_game_ui textarea.chat_input {background-color:' + c[33] + ';}\
  1727. #kong_game_ui textarea.chat_input {color:' + c[34] + ';}\
  1728. #kong_game_ui div.chat_actions_container ul.chat_actions_list {border-color:' + c[35] + '; background-color:' + c[36] + '; box-shadow:' + c[37] + ';}\
  1729. #kong_game_ui div.chat_actions_container ul.chat_actions_list li {border-color:' + c[36] + '; color:' + c[38] + ';}\
  1730. #kong_game_ui div.chat_actions_container ul.chat_actions_list li:hover {background-color:' + c[39] + '; border-color:' + c[40] + '; color:' + c[41] + '; box-shadow:' + c[42] + ';}\
  1731. #kong_game_ui div.chat_message_window {background-color:' + c[43] + '; color:' + c[44] + ';}\
  1732. #kong_game_ui div.chat_message_window p {border-bottom-color:' + c[45] + '; border-top-color:' + c[46] + ';}\
  1733. #kong_game_ui div.chat_message_window p.even {background-color:' + c[47] + ';}\
  1734. #kong_game_ui div.chat_message_window p.SRDotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script {border-top-color:' + c[56] + ';}\
  1735. #kong_game_ui div.chat_message_window p.DotDX_diff_1 {border-bottom-color:' + c[48] + '; background: -webkit-linear-gradient(' + c[49] + '); background: -moz-linear-gradient(' + c[49] + ');} \
  1736. #kong_game_ui div.chat_message_window p.DotDX_diff_2 {border-bottom-color:' + c[50] + '; background: -webkit-linear-gradient(' + c[51] + '); background: -moz-linear-gradient(' + c[51] + ');} \
  1737. #kong_game_ui div.chat_message_window p.DotDX_diff_3 {border-bottom-color:' + c[52] + '; background: -webkit-linear-gradient(' + c[53] + '); background: -moz-linear-gradient(' + c[53] + ');} \
  1738. #kong_game_ui div.chat_message_window p.DotDX_diff_4 {border-bottom-color:' + c[54] + '; background: -webkit-linear-gradient(' + c[55] + '); background: -moz-linear-gradient(' + c[55] + ');} \
  1739. #kong_game_ui div.chat_message_window p span.message a {color:' + c[79] + '}\
  1740. #kong_game_ui div.chat_message_window p span.message a:hover {color:' + c[80] + '; text-shadow:' + c[81] + ';}\
  1741. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a {color:' + c[57] + '; text-shadow:' + c[74] + ';}\
  1742. #kong_game_ui div.chat_message_window p.DotDX_diff_1 span.message a:hover {color:' + c[58] + '; text-shadow:' + c[59] + ';}\
  1743. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a {color:' + c[60] + '; text-shadow:' + c[74] + ';}\
  1744. #kong_game_ui div.chat_message_window p.DotDX_diff_2 span.message a:hover {color:' + c[61] + '; text-shadow:' + c[62] + ';}\
  1745. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a {color:' + c[63] + '; text-shadow:' + c[74] + ';}\
  1746. #kong_game_ui div.chat_message_window p.DotDX_diff_3 span.message a:hover {color:' + c[64] + '; text-shadow:' + c[65] + ';}\
  1747. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a {color:' + c[66] + '; text-shadow:' + c[74] + ';}\
  1748. #kong_game_ui div.chat_message_window p.DotDX_diff_4 span.message a:hover {color:' + c[67] + '; text-shadow:' + c[68] + ';}\
  1749. #kong_game_ui div.chat_message_window p.script {border-bottom-color:' + c[69] + '; background: -webkit-linear-gradient(' + c[70] + '); background: -moz-linear-gradient(' + c[70] + ');}\
  1750. #kong_game_ui div.chat_message_window p.whisper {border-bottom-color:' + c[71] + '; background: -webkit-linear-gradient(' + c[72] + '); background: -moz-linear-gradient(' + c[72] + '); }\
  1751. #kong_game_ui div.chat_message_window p span.username {color:' + c[73] + '; text-shadow:' + c[74] + ';}\
  1752. #kong_game_ui div.chat_message_window p span.username.ign {color:' + c[75] + ';}\
  1753. #kong_game_ui div.chat_message_window p.sent_whisper span.username, #kong_game_ui div.chat_message_window p span.username.is_self {color:' + c[76] + ';}\
  1754. #kong_game_ui div.chat_message_window p.emote {color:' + c[77] + '; text-shadow:' + c[78] + ';}\
  1755. #kong_game_ui div.chat_message_window p span.room {color:' + c[82] + ';}\
  1756. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.ingamename {color:' + c[83] + ';}\
  1757. #kong_game_ui div.chat_message_window p span.message a.reply_link {color:' + c[79] + '}\
  1758. #kong_game_ui div.chat_message_window p span.message a.reply_link:hover {color:' + c[80] + '; text-shadow:' + c[81] + ';}\
  1759. #kong_game_ui div.chat_message_window p span.message a.chat_link {color:' + c[84] + ';}\
  1760. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover {color:' + c[85] + '; text-shadow:' + c[86] + ';}\
  1761. #kong_game_ui div.chat_message_window p > span.slider {border-color:' + c[87] + '; background:' + c[88] + '; box-shadow:' + c[89] + ';}\
  1762. #kong_game_ui div#chat_raids_overlay {color:' + c[90] + '; border-color:' + c[91] + '; box-shadow:' + c[92] + '; text-shadow:' + c[93] + '; background: -webkit-linear-gradient(' + c[94] + '); background: -moz-linear-gradient(' + c[94] + ');}\
  1763. div#dotdx_sidebar_container > button {color:' + c[98] + '; border-color:' + c[99] + '; text-shadow:' + c[100] + '; box-shadow:' + c[101] + '; background: -webkit-linear-gradient(' + c[102] + '); background: -moz-linear-gradient(' + c[102] + ');}\
  1764. div#dotdx_sidebar_container > button:hover {color:' + c[103] + '; border-color:' + c[104] + '; text-shadow:' + c[105] + '; box-shadow:' + c[106] + '; background: -webkit-linear-gradient(' + c[107] + '); background: -moz-linear-gradient(' + c[107] + ');}\
  1765. div#dotdx_sidebar_container > button.b:hover {color:' + c[108] + '; text-shadow:' + c[109] + '; box-shadow:' + c[110] + '; background: -webkit-linear-gradient(' + c[111] + '); background: -moz-linear-gradient(' + c[111] + ');}\
  1766. div#dotdx_sidebar_container > button.g:hover {color:' + c[112] + '; text-shadow:' + c[113] + '; box-shadow:' + c[114] + '; background: -webkit-linear-gradient(' + c[115] + '); background: -moz-linear-gradient(' + c[115] + ');}\
  1767. div#dotdx_sidebar_container > button.r:hover {color:' + c[116] + '; text-shadow:' + c[117] + '; box-shadow:' + c[118] + '; background: -webkit-linear-gradient(' + c[119] + '); background: -moz-linear-gradient(' + c[119] + ');}\
  1768. div#dotdx_sidebar_container > button.y:hover {color:' + c[120] + '; text-shadow:' + c[121] + '; box-shadow:' + c[122] + '; background: -webkit-linear-gradient(' + c[123] + '); background: -moz-linear-gradient(' + c[123] + ');}\
  1769. div#dotdx_sidebar_container > div.label {color:' + c[124] + '; text-shadow:' + c[125] + ';}\
  1770. div#dotdx_sidebar_container > input[type=\"text\"] {color:' + c[126] + '; border-color:' + c[127] + '; text-shadow:' + c[128] + '; box-shadow:' + c[129] + '; background: -webkit-linear-gradient(' + c[130] + '); background: -moz-linear-gradient(' + c[130] + ');}\
  1771. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus {color:' + c[131] + '; border-color:' + c[132] + '; background: -webkit-linear-gradient(' + c[133] + '); background: -moz-linear-gradient(' + c[133] + ');}\
  1772. #kong_game_ui div.tab_pane p.collapsingCategory {color:' + c[134] + '; border-color:' + c[135] + '; text-shadow:' + c[136] + '; box-shadow:' + c[137] + '; background: -webkit-linear-gradient(' + c[138] + '); background: -moz-linear-gradient(' + c[138] + ');}\
  1773. #kong_game_ui div.tab_pane p.collapsingCategory:hover {box-shadow:' + c[139] + '; background: -webkit-linear-gradient(' + c[140] + '); background: -moz-linear-gradient(' + c[140] + ');}\
  1774. #kong_game_ui div.tab_pane input[type=\"button\"] {color:' + c[141] + '; border-color:' + c[142] + '; text-shadow:' + c[143] + '; box-shadow:' + c[144] + '; background: -webkit-linear-gradient(' + c[145] + '); background: -moz-linear-gradient(' + c[145] + ');} \
  1775. #kong_game_ui div.tab_pane input[type=\"button\"].generic:hover {box-shadow:' + c[146] + '; text-shadow:' + c[147] + '; background: -webkit-linear-gradient(' + c[148] + '); background: -moz-linear-gradient(' + c[148] + ');}\
  1776. #kong_game_ui div.tab_pane input[type=\"button\"].green:hover, #kong_game_ui div.tab_pane input.landpmbuttonhigh {box-shadow:' + c[149] + '; text-shadow:' + c[150] + '; background: -webkit-linear-gradient(' + c[151] + '); background: -moz-linear-gradient(' + c[151] + ');}\
  1777. #kong_game_ui div.tab_pane input[type=\"button\"].blue:hover {box-shadow:' + c[152] + '; text-shadow:' + c[153] + '; background: -webkit-linear-gradient(' + c[154] + '); background: -moz-linear-gradient(' + c[154] + ');}\
  1778. #kong_game_ui div.tab_pane input[type=\"button\"].red:hover, #kong_game_ui div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {box-shadow:' + c[155] + '; text-shadow:' + c[156] + '; background: -webkit-linear-gradient(' + c[157] + '); background: -moz-linear-gradient(' + c[157] + ');}\
  1779. #kong_game_ui input#raidsBossFilter {color:' + c[158] + '; border-color:' + c[159] + '; text-shadow:' + c[160] + '; box-shadow:' + c[161] + '; background: -webkit-linear-gradient(' + c[162] + '); background: -moz-linear-gradient(' + c[162] + ');}\
  1780. #kong_game_ui input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(' + c[163] + '); background: -moz-linear-gradient(' + c[163] + ');}\
  1781. ul#SRDotDX_tabpane_tabs input[type="text"].generic {color:' + c[164] + '; text-shadow:' + c[165] + '; border-bottom-color:' + c[166] + ';}\
  1782. ul#SRDotDX_tabpane_tabs input[type="text"].generic:focus {border-color:' + c[167] + '; background: -webkit-linear-gradient(' + c[168] + '); background: -moz-linear-gradient(' + c[168] + ');}\
  1783. textarea#DotDX_raidsToSpam, textarea#options_sbConfig {color:' + c[169] + '; border-color:' + c[170] + '; text-shadow:' + c[171] + '; box-shadow:' + c[172] + '; background: -webkit-linear-gradient(' + c[173] + '); background: -moz-linear-gradient(' + c[173] + ');}\
  1784. #kong_game_ui span.notice {text-shadow:' + c[174] + ';}\
  1785. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"] + label:before {background: url(data:image/png;base64,' + check + ') 0 0 no-repeat}\
  1786. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="checkbox"]:checked + label:before {background: url(data:image/png;base64,' + check + ') 0 -14px no-repeat}\
  1787. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"] + label:before {background: url(data:image/png;base64,' + radio + ') 0 0 no-repeat}\
  1788. #kong_game_ui ul#SRDotDX_tabpane_tabs input[type="radio"]:checked + label:before {background: url(data:image/png;base64,' + radio + ') 0 -13px no-repeat}\
  1789. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list {border-top-color:' + c[176] + '; box-shadow:' + c[177] + '; background: -webkit-linear-gradient(' + c[178] + '); background: -moz-linear-gradient(' + c[178] + ');}\
  1790. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {border-top-color:' + c[179] + '; border-bottom-color:' + c[180] + ';}\
  1791. a.DotDX_RaidLink {color:' + c[181] + ';}\
  1792. a.DotDX_RaidLink:hover {color:' + c[182] + '; text-shadow:' + c[183] + ';}\
  1793. a.dotdxRaidListDelete {color:' + c[184] + ';}\
  1794. a.dotdxRaidListDelete:hover {color:' + c[185] + '; text-shadow:' + c[186] + ';}\
  1795. #raid_list .raid_list_item.DotDX_N:hover {background: -webkit-linear-gradient(' + c[187] + '); background: -moz-linear-gradient(' + c[187] + ');}\
  1796. #raid_list .raid_list_item.DotDX_H:hover {background: -webkit-linear-gradient(' + c[188] + '); background: -moz-linear-gradient(' + c[188] + ');}\
  1797. #raid_list .raid_list_item.DotDX_L:hover {background: -webkit-linear-gradient(' + c[189] + '); background: -moz-linear-gradient(' + c[189] + ');}\
  1798. #raid_list .raid_list_item.DotDX_NM:hover {background: -webkit-linear-gradient(' + c[190] + '); background: -moz-linear-gradient(' + c[190] + ');}\
  1799. span.DotDX_List_diff.DotDX_N {color:' + c[191] + ';}\
  1800. span.DotDX_List_diff.DotDX_H {color:' + c[192] + ';}\
  1801. span.DotDX_List_diff.DotDX_L {color:' + c[193] + ';}\
  1802. span.DotDX_List_diff.DotDX_NM {color:' + c[194] + ';}\
  1803. #kong_game_ui div#helpBox { color:' + c[195] + '; box-shadow:' + c[196] + '; border-top-color:' + c[197] + '; text-shadow:' + c[198] + '; background: -webkit-linear-gradient(' + c[199] + '); background: -moz-linear-gradient(' + c[199] + ');}\
  1804. #kong_game_ui div.chat_message_window p.script hr {background:' + c[200] + ';}\
  1805. #kong_game_ui div.chat_message_window p.script span .title {color:' + c[201] + '; text-shadow:' + c[202] + ';}\
  1806. #kong_game_ui div.chat_message_window p.script span .title:hover {color:' + c[203] + '; text-shadow:' + c[204] + ';}\
  1807. table.raids, table.camps {color:' + c[205] + '; text-shadow:' + c[206] + ';} \
  1808. table.raids td, table.camps td {border-color:' + c[207] + '; background:' + c[208] + ';}\
  1809. table.raids td.ep, table.camps td.ep {background:' + c[209] + ';} \
  1810. table.raids th, table.camps th {border-color:' + c[210] + '; background-color:' + c[211] + ';} \
  1811. table.raids tr.head, table.camps tr.head {background:' + c[212] + ';} \
  1812. table.raids tr.best td {background:' + c[213] + ';} \
  1813. table.raids colgroup col.selected {border-color:' + c[214] + ';}\
  1814. table.camps td.mark {background:' + c[215] + ';} \
  1815. div.raid_list_item > span.DotDX_extInfo {color:' + c[216] + '; text-shadow:' + c[217] + ';}\
  1816. #maingame, div.game_page_wrap {border-color:' + c[218] + ';}\
  1817. body {background-color:' + c[219] + ' !important}\
  1818. #quicklinks li a, #quicklinks li.rate {color:' + c[220] + '}\
  1819. #quicklinks li a:hover {color:' + c[221] + '; text-shadow:' + c[222] + ';}\
  1820. div.raid_list_item > span.DotDX_extInfo.failings {color:' + c[223] + ';}\
  1821. div.raid_list_item > span.DotDX_extInfo.failingm {color:' + c[224] + ';}\
  1822. div.raid_list_item > span.DotDX_extInfo.failingh {color:' + c[225] + ';}\
  1823. div.cntrNotify {color:' + c[226] + '; background-color:' + c[227] + '; border-bottom-color:' + c[45] + ';}\
  1824. ', true);
  1825. },
  1826. createFilterTab: function () {
  1827. var sm = SRDotDX.config.serverMode - 1;
  1828. var rdObj = Object.keys(SRDotDX.raids);
  1829. var i, raid, parentTableId = '', parentTable = '', cb;
  1830. var sectionID = ['Guild','Special','Small','Medium','Large','Epic','Colossal','Gigantic'];
  1831. for(i = 0; i < 8; i++) document.getElementById('FPXRaidFilterWhat' + sectionID[i]).innerHTML = '';
  1832. i = 0;
  1833. while (i < rdObj.length) {
  1834. raid = SRDotDX.raids[rdObj[i]];
  1835. parentTableId = 'FPX_options_cbs_' + raid.id;
  1836. parentTable = SRDotDX.gui.cHTML('tr').set({id: parentTableId}).html(' \
  1837. <td>' + raid.name + '</td> \
  1838. <td><input type="checkbox" id="cb_filter_' + raid.id + '_0' + '"/><label for="cb_filter_' + raid.id + '_0' + '"></label></td> \
  1839. <td><input type="checkbox" id="cb_filter_' + raid.id + '_1' + '"/><label for="cb_filter_' + raid.id + '_1' + '"></label></td> \
  1840. <td><input type="checkbox" id="cb_filter_' + raid.id + '_2' + '"/><label for="cb_filter_' + raid.id + '_2' + '"></label></td> \
  1841. <td><input type="checkbox" id="cb_filter_' + raid.id + '_3' + '"/><label for="cb_filter_' + raid.id + '_3' + '"></label></td> \
  1842. <td><input type="checkbox" id="cb_filter_' + raid.id + '_all' + '"/><label for="cb_filter_' + raid.id + '_all' + '"></label></td>', false);
  1843.  
  1844. if (raid.stat == 'H') parentTable.attach('to', 'FPXRaidFilterWhatGuild');
  1845. else if (raid.stat == 'ESH') parentTable.attach('to', 'FPXRaidFilterWhatSpecial');
  1846. else if (raid.size > 1 && raid.size < 50) parentTable.attach('to', 'FPXRaidFilterWhatSmall');
  1847. else if (raid.size == 50) parentTable.attach('to', 'FPXRaidFilterWhatMedium');
  1848. else if (raid.size == 100) parentTable.attach('to', 'FPXRaidFilterWhatLarge');
  1849. else if (raid.size == 250) parentTable.attach('to', 'FPXRaidFilterWhatEpic');
  1850. else if (raid.size == 500) parentTable.attach('to', 'FPXRaidFilterWhatColossal');
  1851. else if (raid.size == 800) parentTable.attach('to', 'FPXRaidFilterWhatGigantic');
  1852.  
  1853. for (var j = 0; j < 4; j++) {
  1854. cb = document.getElementById('cb_filter_' + raid.id + '_' + j);
  1855. cb.checked = !SRDotDX.config.filters[sm][raid.id][j];
  1856. cb.addEventListener("click", function(){
  1857. var s = SRDotDX.config.serverMode - 1;
  1858. var raidId = this.id.substr(10).slice(0,-2);
  1859. var diffIndex = parseInt(this.id.slice(-1));
  1860. SRDotDX.config.filters[s][raidId][diffIndex] = !this.checked;
  1861. var ele = document.getElementById('DotDX_filters');
  1862. var eletxt = ele.innerHTML;
  1863. var reg = new RegExp('.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ', 'g');
  1864. if(SRDotDX.config.filterChatLinks) {
  1865. if (!this.checked && !reg.test(eletxt)) eletxt = '.DotDX_fltChat_' + raidId + '_' + diffIndex + ', ' + eletxt;
  1866. else if (this.checked) eletxt = eletxt.replace(reg, '');
  1867. }
  1868. reg = new RegExp('.DotDX_fltList_' + raidId + '_' + diffIndex + ', ', 'g');
  1869. if(SRDotDX.config.filterRaidList) {
  1870. if (!this.checked && !reg.test(eletxt)) eletxt = '.DotDX_fltList_' + raidId + '_' + diffIndex + ', ' + eletxt;
  1871. else if (this.checked) eletxt = eletxt.replace(reg, '');
  1872. }
  1873. ele.innerHTML = eletxt;
  1874.  
  1875. var f = SRDotDX.config.filters[s][raidId];
  1876. document.getElementById('cb_filter_' + raidId + '_all').checked = !f[0] && !f[1] && !f[2] && !f[3];
  1877. SRDotDX.config.save(false);
  1878. });
  1879. }
  1880. cb = document.getElementById('cb_filter_' + raid.id + '_all');
  1881. cb.checked = !(SRDotDX.config.filters[sm][raid.id][0] && SRDotDX.config.filters[sm][raid.id][1] && SRDotDX.config.filters[sm][raid.id][2] && SRDotDX.config.filters[sm][raid.id][3]);
  1882. cb.addEventListener('click', function(){
  1883. var s = SRDotDX.config.serverMode - 1;
  1884. var raidId = this.id.substr(10).slice(0,-4), reg;
  1885. var elem = document.getElementById('DotDX_filters');
  1886. var ele = elem.innerHTML;
  1887. var chk = this.checked;
  1888. for(j=0; j<4; j++) {
  1889. document.getElementById('cb_filter_' + raidId + '_' + j).checked = chk;
  1890. SRDotDX.config.filters[s][raidId][j] = !chk;
  1891. reg = new RegExp('.DotDX_fltChat_' + raidId + '_' + j + ', ', 'g');
  1892. if (SRDotDX.config.filterChatLinks) {
  1893. if (!chk && !reg.test(ele)) ele = '.DotDX_fltChat_' + raidId + '_' + j + ', ' + ele;
  1894. else if (chk) ele = ele.replace(reg, '');
  1895. }
  1896. reg = new RegExp('.DotDX_fltList_' + raidId + '_' + j + ', ', 'g');
  1897. if (SRDotDX.config.filterRaidList) {
  1898. if (!chk && !reg.test(ele)) ele = '.DotDX_fltList_' + raidId + '_' + j + ', ' + ele;
  1899. else if (chk) ele = ele.replace(reg, '');
  1900. }
  1901. }
  1902. elem.innerHTML = ele;
  1903. SRDotDX.config.save(false);
  1904. });
  1905. i++
  1906. }
  1907. },
  1908. toggleFiltering: function () {
  1909. var sm = SRDotDX.config.serverMode - 1;
  1910. var rdObj = Object.keys(SRDotDX.raids);
  1911. var fltObj = Object.keys(SRDotDX.config.filters[sm]);
  1912. var query = '.DotDX_filter_dummy_0 ', i = 0, frcId = '.DotDX_fltChat_', raidId;
  1913. if(!SRDotDX.util.isArrEq(rdObj, fltObj)) {
  1914. while (i < rdObj.length) {
  1915. raidId = rdObj[i];
  1916. if (typeof SRDotDX.config.filters[sm][raidId] == 'undefined') SRDotDX.config.filters[sm][raidId] = [false, false, false, false];
  1917. i++
  1918. }
  1919. for(var idx in SRDotDX.config.filters[sm]) if(SRDotDX.config.filters[sm].hasOwnProperty(idx) && rdObj.indexOf(idx) < 0) delete SRDotDX.config.filters[sm][idx];
  1920. console.log('[DotDX] Filters array has been altered!');
  1921. }
  1922. if(SRDotDX.config.filterChatLinks) {
  1923. i = rdObj.length;
  1924. while(i--) {
  1925. raidId = rdObj[i];
  1926. if (SRDotDX.config.filters[sm][raidId][0]) query = frcId + raidId + '_0, ' + query;
  1927. if (SRDotDX.config.filters[sm][raidId][1]) query = frcId + raidId + '_1, ' + query;
  1928. if (SRDotDX.config.filters[sm][raidId][2]) query = frcId + raidId + '_2, ' + query;
  1929. if (SRDotDX.config.filters[sm][raidId][3]) query = frcId + raidId + '_3, ' + query;
  1930. }
  1931. }
  1932. if(SRDotDX.config.filterRaidList) {
  1933. i = rdObj.length; frcId = '.DotDX_fltList_';
  1934. while (i--) {
  1935. raidId = rdObj[i];
  1936. if (SRDotDX.config.filters[sm][raidId][0]) query = frcId + raidId + '_0, ' + query;
  1937. if (SRDotDX.config.filters[sm][raidId][1]) query = frcId + raidId + '_1, ' + query;
  1938. if (SRDotDX.config.filters[sm][raidId][2]) query = frcId + raidId + '_2, ' + query;
  1939. if (SRDotDX.config.filters[sm][raidId][3]) query = frcId + raidId + '_3, ' + query;
  1940. }
  1941. }
  1942. SRDotDX.gui.cHTML('#DotDX_filters').html(query + '{display: none !important}', true);
  1943. },
  1944. switchServer: function () {
  1945. var sm = SRDotDX.config.serverMode;
  1946. SRDotDX.config.serverMode = sm == 1 ? 2 : 1;
  1947. this.toggleFiltering();
  1948. this.createFilterTab();
  1949. this.applySidebarUI(0);
  1950. this.cHTML('#raidsBossFilter').ele().value = SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1];
  1951. this.updateFilterTxt(SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1], true);
  1952. //var grObj = {room: holodeck._chat_window._rooms_by_type["guild"]._room};
  1953. //holodeck._chat_window.leftRoom(grObj);
  1954. //holodeck._chat_window.bootstrapChat();
  1955. this.cHTML('#DotDX_serverModeRaids').html('#kong_game_ui p.DotDX_sid_' + (SRDotDX.config.serverMode == 2 ? '1' : '2') + ' {display: none !important}', true);
  1956. this.scrollChat();
  1957. SRDotDX.config.save(false);
  1958. },
  1959.  
  1960. load: function () {
  1961. if (typeof holodeck._tabs.addTab === 'function' && document.getElementById('chat_rooms_container') !== null) {
  1962. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'SRDotDX_botClass'}).text('.bot{display:' + (SRDotDX.config.hideBotLinks ? 'none !important' : 'block') + '}').attach('to', document.head);
  1963. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'SRDotDX_raidClass'}).text('.SRDotDX_raid{display:' + (SRDotDX.config.hideRaidLinks ? 'none !important' : 'block') + '}').attach('to', document.head);
  1964. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'SRDotDX_visitedRaidClass'}).text('.DotDX_visitedRaid{display: ' + (SRDotDX.config.hideVisitedRaids ? 'none !important' : 'block') + '}').attach('to', document.head);
  1965. //SRDotDX.gui.cHTML('style').set({type: "text/css",id: 'SRDotDX_visitedRaidListClass'}).text('.DotDX_visitedRaidList {display: '+(SRDotDX.config.hideVisitedRaidsInRaidList == true?'none !important':'block')+'}').attach('to',document.head);
  1966. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_forum'}).text('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}').attach('to', document.head);
  1967. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_details'}).text('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}').attach('to', document.head);
  1968. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_filters'}).text('.DotDX_filter_dummy_0 {display: none !important}').attach('to', document.head);
  1969. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_serverModeRaids'}).text('#kong_game_ui p.DotDX_sid_' + (SRDotDX.config.serverMode == 2 ? '1' : '2') + ' {display: none !important}').attach('to', document.head);
  1970. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_chatResizeElems'}).text('#kong_game_ui textarea.chat_input { width: 270px !important; }\
  1971. #kong_game_ui div#chat_raids_overlay { width: 292px }\
  1972. #kong_game_ui div#chat_raids_overlay > span { width: 282px }\
  1973. div#dotdx_sidebar_container { ' + (SRDotDX.config.sbRightSide ? "text-align: left; padding-left: 1px" : "text-align: left; margin-left: 2px; padding-left: 6px") + ' }').attach('to', document.head);
  1974.  
  1975. SRDotDX.gui.toggleFiltering();
  1976.  
  1977. var elemPositionFix = "";
  1978. if (SRDotDX.isFirefox) {
  1979. elemPositionFix = " \
  1980. #kong_game_ui div#chat_room_tabs div a {padding: 3px 9px 4px 7px}\
  1981. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 2px 7px 3px}\
  1982. #kong_game_ui span.generic {margin: 2px 6px 0}\
  1983. #kong_game_ui div#dotdx_status_div {padding: 5px 6px}\
  1984. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 4px; padding-top: 3px;}\
  1985. #kong_game_ui div#chat_raids_overlay {padding: 4px 0}\
  1986. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: baseline}\
  1987. #kong_game_ui div.chat_message_window p {padding: 2px 5px 3px}\
  1988. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {padding: 2px;}\
  1989. .raid_list_item a.dotdxRaidListDelete {margin-top: 1px;}\
  1990. #kong_game_ui div.chat_message_window p span.ingamename {vertical-align: baseline;} \
  1991. ";
  1992. }
  1993. else {
  1994. elemPositionFix = " \
  1995. #kong_game_ui div#chat_room_tabs div a {padding: 4px 9px 3px 7px}\
  1996. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {padding: 3px 7px 2px}\
  1997. #kong_game_ui span.generic {margin: 3px 6px 0}\
  1998. #kong_game_ui div#dotdx_status_div {padding: 6px 6px 4px}\
  1999. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay {margin-top: 3px; padding-top: 4px;}\
  2000. #kong_game_ui div#chat_raids_overlay {padding: 5px 0 3px}\
  2001. #kong_game_ui div.chat_message_window p span.timestamp, #kong_game_ui div.chat_message_window p span.room {vertical-align: text-top}\
  2002. #kong_game_ui div.chat_message_window p {padding: 3px 5px}\
  2003. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {padding: 3px 2px 1px;}\
  2004. #kong_game_ui div.chat_message_window p span.ingamename {vertical-align: top;} \
  2005. a.DotDX_RaidLink {vertical-align: middle}\
  2006. ";
  2007. }
  2008. SRDotDX.gui.cHTML('style').set({type: "text/css"}).text(" \
  2009. " + (SRDotDX.config.hideGameTitle ? "ul#gamepage_categories_list, .horizontal_ad, span#kong_game_bf_300x250_2_holder, div#gamespotlight, div#dealspot_banner_holder, div#kong_bumper_preroll_600x400-ad-slot, div#gamepage_header {display:none;} \
  2010. div.gamepage_header_outer, div.gamepage_header_inner, div.gamepage_header_outer h1 {height: 0 !important; padding: 0 !important; margin: 0 !important} \
  2011. #primarylayout .maincontent {padding: 6px 0 !important} \
  2012. " : "") + "div.raid_list_item.hidden, .DotDX_hidden, div.game_page_admindev_controls, div#subwrap, li#quicklinks_facebook {display:none;} \
  2013. #primarywrap {background-image: none !important; background-color: transparent !important;} \
  2014. /* body {background-color: #" + SRDotDX.config.bckColor + " !important} */ \
  2015. #maingame { border: 1px solid transparent }\
  2016. div#game { overflow:hidden }\
  2017. div.upper_gamepage { background: transparent !important }\
  2018. .user_connection #chat_connected_indicator {margin-right: 10px}\
  2019. #FPXtt { position:absolute; display:block; } \
  2020. #FPXtttop { display:block; height:5px; margin-left:5px; } \
  2021. #FPXttcont { display:block; padding:2px 12px 3px 7px; margin-left:5px; background:#666; color:#fff; } \
  2022. #FPXttbot {display:block;height:5px;margin-left:5px;} \
  2023. #kong_game_ui ul.main_tabs {height:30px; padding-left:7px}\
  2024. #kong_game_ui ul.main_tabs li.tab:first-child { margin-left: 1px; }\
  2025. #kong_game_ui ul.main_tabs li.tab a { padding: 6px 6px 4px; margin-top: 6px; border: 1px solid #000; margin-right: 3px; transition: all .3s;}\
  2026. #kong_game_ui ul.main_tabs li.tab a.active {margin-top: 5px; padding: 7px 6px 5px; border-radius: 5px 0 5px 0;}\
  2027. /*#kong_game_ui div#chat_tab_pane {height: 645px !important}*/ \
  2028. #kong_game_ui div#lots_tab_pane {padding: 8px; text-align: left; background-color: #777; height: 644px}\
  2029. #kong_game_ui div#lots_tab_pane div#dotdx_shadow_wrapper { width: 282px; border: 1px solid #222; box-shadow: 0 0 12px #111; height: 643px; overflow: hidden; background-color: #ddd;}\
  2030. #kong_game_ui div#chat_window { background-color: #fff; border: 1px solid #333; overflow: hidden; box-shadow: 0 0 8px 1px #333; }\
  2031. #kong_game_ui div#chat_window_header { height: 69px; box-shadow: 0 0 5px #333; position: relative; background-color: #ddd; }\
  2032. #kong_game_ui div#chat_window_header div.room_name_container { border-bottom: 1px solid #aaa; padding: 5px 7px 3px; margin: 0 !important; background-color: #e6e6e6; font-family: \"Trebuchet MS\", Helvetica, sans-serif }\
  2033. #kong_game_ui div#chat_window_header div.room_name_container .room_name { font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #333; text-shadow: 0 0 3px #ccc; }\
  2034. #kong_game_ui div.chat_actions_container span.kong_ico { font-size: 12px !important; }\
  2035. #kong_game_ui div.chat_actions_container ul.chat_actions_list { right: -1px; padding: 4px 0; border-radius: 5px 0 0 5px; top: 22px; border-color: #777; box-shadow: 0 0 8px #999; min-width: 122px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; }\
  2036. #kong_game_ui div.chat_actions_container ul.chat_actions_list li { line-height: 20px; padding: 0 10px; border-width: 1px 0; border-color: #fff; border-style: solid; transition: box-shadow .5s;}\
  2037. #kong_game_ui .chat_actions_container .chat_actions_list li:hover { background-color: #f0f0f0; border-color: #bbb; color: #333; box-shadow: 0 0 4px #ddd; position: relative; }\
  2038. #kong_game_ui div.chat_actions_container span.btn_tools { height: 16px; line-height: initial !important; width: 20px; margin: 2px 3px; } \
  2039. #kong_game_ui div#chat_window_header div.dotdx_chat_overlay { border-top: 1px solid #bbb; overflow: hidden; white-space: nowrap; } \
  2040. #kong_game_ui div.chat_actions_container select { width: 92px; margin-top: 2px; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-style: italic; outline: none; background-color: #ddd; margin-right: 2px; } \
  2041. #kong_game_ui div#chat_room_tabs div a { margin: 0; background: none; text-decoration: none; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 11px; font-style: italic; transition: text-shadow .2s; border-right: 1px dotted #aaa; } \
  2042. #kong_game_ui div#chat_rooms_container div.chat_tabpane.users_in_room { height: 89px; border: 1px solid #999; border-width: 1px 0; border-bottom-color: #888; box-shadow: inset 0 -2px 6px -4px #444; } \
  2043. #kong_game_ui div#chat_raids_overlay { display:none; position: absolute; overflow: hidden; bottom: 488px; left: 3px; background-color: #e0e0e0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-width: 1px; border-style: solid; border-radius: 2px;}\
  2044. #kong_game_ui div#chat_raids_overlay.active { display: block } \
  2045. #kong_game_ui div#chat_raids_overlay > span { display: block; margin: 0 auto }\
  2046. #kong_game_ui div.chat_controls {border-top: 1px solid #000; position: relative; }\
  2047. #kong_game_ui div#lots_tab_pane ul { margin: 0px; padding: 0px; list-style-type: none; position: relative;} \
  2048. #kong_game_ui div#lots_tab_pane ul li.tab { float: left; height: 100%; } \
  2049. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; cursor: pointer; border-right: 1px dotted #aaa; transition: text-shadow .2s} \
  2050. #kong_game_ui div#lots_tab_pane ul li.tab div.tab_pane { display: none; border-top: 1px solid #888; width: 282px; height: 600px; padding-top: 2px;} \
  2051. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_head { cursor: default; }\
  2052. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane { position: absolute; display: block; left: 0px; }\
  2053. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list, \
  2054. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #paste_list {overflow-y: auto; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; height: 449px; border-top: 1px solid #aaa; box-shadow: 0 0 3px #ccc; background: -webkit-linear-gradient(left, #fff, #eee); background: -moz-linear-gradient(left, #fff, #eee);} \
  2055. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item {cursor: pointer; position: relative; border-width: 1px 0; border-style: solid; border-top-color: transparent; border-bottom-color: #ddd;} \
  2056. #kong_game_ui div#lots_tab_pane ul li.tab.active div.tab_pane #raid_list .raid_list_item.hidden {display:none;} \
  2057. a.FPXImportLink, a.FPXDeleteLink { font: normal 10px Arial; border: 1px solid #c0c0c0; color:black; text-decoration:none; cursor:pointer; font-variant: small-caps; display: block; width: 40px; text-align: center; margin-right: 2px; background-color: #fff} \
  2058. a.dotdxRaidListDelete { font: 10px \"Trebuchet MS\"; text-decoration: none; cursor: pointer; margin-right: 2px; float:right; display: inline} \
  2059. a.DotDX_RaidLink {text-decoration:none;} \
  2060. div.DotDX_ListPanel {border-top: 1px dashed #999; margin-top: 2px; padding-top: 2px; }\
  2061. div.DotDX_ListPanel > span.raidListContent {font-style: italic} \
  2062. #kong_game_ui p.user_count.full { color: crimson; } \
  2063. #kong_game_ui div#lots_tab_pane a.pastebinlink {font: normal 11px Verdana; color:#333; text-decoration:none; cursor:pointer;} \
  2064. #kong_game_ui div#lots_tab_pane a.pastebinlink:hover { text-decoration: underline; color: black } \
  2065. #kong_game_ui div#lots_tab_pane span.pasteright, #kong_game_ui div#lots_tab_pane span.pasteleft {font: normal 11px Verdana; color: #333} \
  2066. #kong_game_ui div#lots_tab_pane span.pasteright {float:right; padding-right: 6px} \
  2067. #kong_game_ui div#lots_tab_pane span.pasteleft {float:left} \
  2068. #kong_game_ui div.chat_message_window { position: relative; margin: 0; } \
  2069. #kong_game_ui div.chat_message_window p {border-width: 1px 0; border-style: solid; margin: 0;} \
  2070. #kong_game_ui div.chat_message_window p.SRDotDX_raid, #kong_game_ui div.chat_message_window p.whisper, #kong_game_ui div.chat_message_window p.script { border-top-color: #e5e5e5; }\
  2071. #raid_list .raid_list_item.DotDX_N:hover {border-bottom-color: rgb(138, 179, 137); background: -webkit-linear-gradient(top,#CBE7C4,#F3FAF2); background: -moz-linear-gradient(top,#CBE7C4,#F3FAF2);} \
  2072. #raid_list .raid_list_item.DotDX_H:hover {border-bottom-color: rgb(173, 173, 104); background: -webkit-linear-gradient(top,#F7F0C8,#FCFBF8); background: -moz-linear-gradient(top,#F7F0C8,#FCFBF8);} \
  2073. #raid_list .raid_list_item.DotDX_L:hover {border-bottom-color: rgb(177, 135, 128); background: -webkit-linear-gradient(top,#F3D7D1,#FCF7F7); background: -moz-linear-gradient(top,#F3D7D1,#FCF7F7);} \
  2074. #raid_list .raid_list_item.DotDX_NM:hover {border-bottom-color: rgb(169, 154, 187); background: -webkit-linear-gradient(top,#DDD4E2,#F4F0F7); background: -moz-linear-gradient(top,#DDD4E2,#F4F0F7);} \
  2075. #kong_game_ui div.chat_message_window div.cntrNotify {border-width: 0px 0px 1px; border-style: solid;}\
  2076. #kong_game_ui div.chat_message_window p.whisper {margin:0; border-bottom-color: #A1B4BE; background: -webkit-linear-gradient(top,#DCE8F1,#EFF4F7); background: -moz-linear-gradient(top,#DCE8F1,#EFF4F7); } \
  2077. #kong_game_ui div.chat_message_window p.script {border-bottom-color: rgb(165, 165, 165); background: -webkit-linear-gradient(left,#f3f3f3,#fff); background: -moz-linear-gradient(left,#f3f3f3,#fff);} \
  2078. #kong_game_ui div.chat_message_window p.script hr { height: 1px; border: 0; background: #ccc; margin: 4px 0 3px; }\
  2079. #kong_game_ui div.chat_message_window p.script span { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px} \
  2080. #kong_game_ui div.chat_message_window p.script span .title { text-decoration: none; font-size: 12px; font-weight: bold; color: #222 } \
  2081. #kong_game_ui div.chat_message_window p span.separator { margin-right: 0px; display:inline; float: none} \
  2082. #kong_game_ui div.chat_message_window p span.username { color: rgb(39, 101, 148); text-decoration: none; cursor: pointer; display:inline; float: none } \
  2083. #kong_game_ui div.chat_message_window p span.username.ign { color: rgb(38, 116, 34); }\
  2084. #kong_game_ui div.chat_message_window p span.username.is_self { color: rgb(151, 49, 49); }\
  2085. #kong_game_ui div.chat_message_window p span.username:hover { text-decoration: underline } \
  2086. #kong_game_ui div.chat_message_window p span.timestamp {font-style: italic; font-size: 9px; color: #666;} \
  2087. #kong_game_ui div.chat_message_window p span.ingamename {font-style: italic; font-size: 11px; color: #666;} \
  2088. #kong_game_ui div.chat_message_window p span.message {line-height: 16px; word-wrap: break-word; display:inline; float: none} \
  2089. #kong_game_ui div.chat_message_window p span.message a { text-decoration: none; color: #444; font-style: normal } \
  2090. #kong_game_ui div.chat_message_window p span.message a:hover { color: #000; text-shadow: 0 0 6px #888; } \
  2091. #kong_game_ui div.chat_message_window p span.message a.chat_link:hover { text-shadow: 0 0 4px #F5C68A; text-decoration: none; } \
  2092. #kong_game_ui div.chat_message_window p span.message a.chat_link { color: #946A3D; } \
  2093. #kong_game_ui div.chat_message_window p span.message a.reply_link {font-style: italic} \
  2094. #kong_game_ui div.chat_message_window p > span.slider {position: absolute; display: inline-block; border: 1px solid #777; border-left: 0; height: 24px; left: -2px; margin-top: -5px; border-radius: 0 5px 5px 0; background: #eee; box-shadow: 0 0 7px #777; transition: max-width .3s; overflow: hidden; white-space: nowrap;}\
  2095. #kong_game_ui div.chat_message_window p > span.slider > span.magic, div.raid_list_item span.DotDX_extMagics > span {background-image: url(data:image/png;base64,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); background-position-y: 0; width: 16px; display: inline-block; height: 16px; margin-right: 2px; margin-top: 4px }\
  2096. div.raid_list_item span.DotDX_extMagics > span {margin-top: 0; vertical-align: text-top; margin-right: 1px; } \
  2097. div.raid_list_item span.DotDX_extMagics {float:right}\
  2098. #kong_game_ui div.chat_message_window p > span.slider > span.magic:first-child { margin-left: 5px; } \
  2099. #kong_game_ui div.chat_message_window p > span.slider > span.magic:last-child { margin-right: 5px; } \
  2100. #kong_game_ui div.chat_message_window p > span.slider > span.user { display: inline-block; height: 16px; margin-left: 5px; margin-top: 4px; vertical-align: text-top; font-style: italic; cursor: pointer}\
  2101. #kong_game_ui div.chat_message_window p > span.slider > span.user:first-child { text-overflow: ellipsis; max-width: 80px; white-space: nowrap; overflow: hidden; padding: 0 3px; font-style: normal; }\
  2102. #kong_game_ui div.chat_message_window p > span.slider > span.user:last-child { margin-right: 10px; } \
  2103. #kong_game_ui div.chat_message_window p > span.slider > span.user:hover { text-shadow: 0 0 6px #888; } \
  2104. #kong_game_ui div.chat_message_window p.emote {font-style: italic; color: #085088; text-align: center;} \
  2105. #kong_game_ui div.chat_message_window p.emote span.username, #kong_game_ui div.chat_message_window p.emote span.separator { display: none; } \
  2106. #kong_game_ui div.chat_message_window p span.room { color: #666; font-size: 9px;} \
  2107. #kong_game_ui div.chat_message_window div.error_msg { background-color: #FFF8E0; margin: 0; padding: 3px 5px; border-bottom: 1px solid #ddd; font-size: 9px; color: #555; } \
  2108. #kong_game_ui .chatOverlayMain {border-style: solid; border-color: #C2A71C; border-width: 1px 0; font-family: \"Trebuchet MS\", Helvetica, sans-serif; color: #fff; font-size: 11px; font-weight: normal; text-align: right} \
  2109. #kong_game_ui .chatOverlayMain > span {padding: 3px 10px; cursor: pointer;} \
  2110. #kong_game_ui .chatOverlayMain > span:hover {background-color: #C2A71C; font-style: italic; color: #555}\
  2111. #kong_game_ui textarea.chat_input { height: 30px !important; margin: 0 !important; outline: none; padding: 4px 6px 4px } \
  2112. #kong_game_ui div.dotdx_chat_buttons { position: relative; width: 100%; padding: " + (SRDotDX.isFirefox ? "0 0 1px" : "1px 0 0") + "; background-color: #eaeaea; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #444; box-shadow: 0 0 6px -2px #333; border-width: 1px 0; border-style: solid; border-color: #888; background: -webkit-linear-gradient(top,#ddd,#f0f0f0); background: -moz-linear-gradient(top,#ddd,#f0f0f0);}\
  2113. #kong_game_ui div.dotdx_chat_buttons > span { display: inline-block; padding: 3px 7px; cursor: pointer; transition: text-shadow .2s; }\
  2114. #kong_game_ui input.dotdx_chat_filter { border: 1px solid #ccc; padding: 0 4px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; color: #333; width: 110px; background-color: #f7f7f7; outline: none; }\
  2115. #kong_game_ui input.dotdx_chat_filter:focus { background-color: #fff }\
  2116. div.dotdx_chat_buttons > span.active { text-shadow: 0 0 4px #aaa }\
  2117. div.dotdx_chat_buttons > span:hover { text-shadow: 0 0 4px #888 }\
  2118. div.tab_pane p.collapsingCategory { border: 1px solid #999; border-width: 1px 0; margin: 5px 0 0; cursor: pointer; background-color: #ddd; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 2px 6px 1px; padding-right: 10px; box-shadow: 0 0 4px #ccc; background: -webkit-linear-gradient(top, #ccc, #eee); background: -moz-linear-gradient(top, #ccc, #eee); transition: all .3s; } \
  2119. div.tab_pane p.collapsingCategory:hover { background: -webkit-linear-gradient(top, #ccc, #ddd); background: -moz-linear-gradient(top, #ccc, #ddd); box-shadow: 0 0 4px #bbb;}\
  2120. div.tab_pane div.collapsingField { padding-top: 3px; }\
  2121. xxx {display:block !important}\
  2122. span.DotDX_RaidListVisited {padding: 0 3px; vertical-align: text-bottom} \
  2123. span.DotDX_List_diff {display: inline-block; width: 20px; font-weight: bold; padding-left: 2px; vertical-align: text-bottom} \
  2124. span.DotDX_List_diff.DotDX_N {color: #00BB00;} \
  2125. span.DotDX_List_diff.DotDX_H {color: #DDAA00;} \
  2126. span.DotDX_List_diff.DotDX_L {color: #FF0000;} \
  2127. span.DotDX_List_diff.DotDX_NM {color: #BB00BB;} \
  2128. div.tab_pane input, div.tab_pane select {border: 1px solid #ccc; padding: 1px} \
  2129. div.tab_pane input {height: 14px;} \
  2130. div.tab_pane select {height: 18px} \
  2131. div.tab_pane input[type=\"button\"] {height: 26px; padding: 0 3px; color: #444; border: 1px solid #bbb; background-color: #f7f7f7; outline: none; box-shadow: 0 0 3px #ddd; background: -webkit-linear-gradient(top, #eee, #fff); background: -moz-linear-gradient(top, #eee, #fff); font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; border-radius: 2px; transition: all .3s} \
  2132. div.tab_pane input[type=\"button\"].generic:hover {background: -webkit-linear-gradient(top, #fff, #ccc); background: -moz-linear-gradient(top, #fff, #ccc); box-shadow: 0 0 5px #bbb; text-shadow: 0 0 3px #bbb;}\
  2133. div.tab_pane input[type=\"button\"].green:hover {background: -webkit-linear-gradient(top, #fff, #b9daaf); background: -moz-linear-gradient(top, #fff, #b9daaf); box-shadow: 0 0 5px #a7ca9c; text-shadow: 0 0 3px #bbb;}\
  2134. div.tab_pane input[type=\"button\"].blue:hover {background: -webkit-linear-gradient(top, #fff, #a4c8ee); background: -moz-linear-gradient(top, #fff, #a4c8ee); box-shadow: 0 0 5px #a9d3ff; text-shadow: 0 0 3px #bbb;}\
  2135. div.tab_pane input[type=\"button\"].red:hover,\
  2136. div.tab_pane input[type=\"button\"][value=\"Cancel\"]:hover {background: -webkit-linear-gradient(top, #fff, #f0a4a4); background: -moz-linear-gradient(top, #fff, #f0a4a4); box-shadow: 0 0 5px #ffbaba; text-shadow: 0 0 3px #bbb;}\
  2137. div.tab_pane input.landpmbutton { height: 20px; width: 22px; } \
  2138. div.tab_pane input.landpmbuttonhigh { height: 20px; width: 22px; background-color: #82BA00; background: -webkit-linear-gradient(top,#8DC98D,#fff); background: -moz-linear-gradient(top,#8DC98D,#fff); } \
  2139. div.tab_pane input.landtxtfield { padding: 2px 0; width: 50px; text-align: center} \
  2140. div.tab_pane input.landtxtfieldc { padding: 2px 0; width: 100%; text-align: center } \
  2141. div.tab_pane td.landname { padding-top: 3px} \
  2142. div.tab_pane input.landsavebutton { height: 20px; width:100% } \
  2143. table.raids, table.camps { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; text-align: center; border-collapse: collapse; margin: 5px auto } \
  2144. table.raids td { border: 1px solid #bbb; width: 55px; background-color: #fff; }\
  2145. table.camps td { border: 1px solid #bbb; width: 20px; background-color: #fff; }\
  2146. table.raids td.ep, table.camps td.ep { text-align: right; width: auto; padding: 0 6px; } \
  2147. table.raids th, table.camps th { border: 1px solid #bbb; background-color: #efefef; } \
  2148. table.raids tr.head, table.camps tr.head { background-color: #fafafa; } \
  2149. table.raids tr.split td, table.camps th { border-bottom-width: 2px; } \
  2150. table.raids tr.best td, table.camps td.mark { background-color: #eff4f9; } \
  2151. table.camps .tb {border-right-width: 2px} \
  2152. table.raids colgroup col.selected { border: 2px solid #5f9ea0; }\
  2153. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] {display: none}\
  2154. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  2155. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"] + label:before { content:\"\"; display:inline-block; width:18px; height:14px; position: relative; top: 3px; }\
  2156. ul#SRDotDX_tabpane_tabs input[type=\"checkbox\"].generic + label:before { margin-left: 6px }\
  2157. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] {display: none}\
  2158. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; cursor: pointer;}\
  2159. ul#SRDotDX_tabpane_tabs input[type=\"radio\"] + label:before { content:\"\"; display:inline-block; width:16px; height:13px; position: relative; top: 2px; }\
  2160. ul#SRDotDX_tabpane_tabs input[type=\"radio\"].generic + label:before { margin-left: 5px }\
  2161. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic { border: 1px dashed transparent; border-bottom-color: #bbb; padding: 0 1px; background-color: transparent; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; color: #333; outline: none; height: 15px; text-align: center; }\
  2162. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:hover { border-style: solid; }\
  2163. ul#SRDotDX_tabpane_tabs input[type=\"text\"].generic:focus {border-style: solid; border-color: #ccc; background: -webkit-linear-gradient(top,#eee,#fff); background: -moz-linear-gradient(top,#eee,#fff);}\
  2164. ul#SRDotDX_tabpane_tabs input[type=\"text\"][disabled].generic { color: #aaa; }\
  2165. ul#SRDotDX_tabpane_tabs input[type=\"text\"].color {float: right; margin-right: 6px; width: 40px;}\
  2166. input#raidsBossFilter {width: 260px; box-shadow: 0 0 4px -1px #aaa; outline: none; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; padding: 3px 5px; background: -webkit-linear-gradient(top, #fff, #d1dfee); background: -moz-linear-gradient(top, #fff, #d1dfee); border-color: #aaa; margin: 4px auto; display: block; border-radius: 2px;}\
  2167. input#raidsBossFilter:hover, input#raidsBossFilter:focus {background: -webkit-linear-gradient(top, #DFE8F1, #fff); background: -moz-linear-gradient(top, #DFE8F1, #fff);}\
  2168. textarea#DotDX_raidsToSpam, textarea#options_sbConfig { border: 1px solid #aaa; width: 254px; margin-left: 6px; margin-top: 5px; margin-bottom: 4px; padding: 3px 7px; resize: none; outline: none; font-size: 10px; font-style: italic; }\
  2169. #kong_game_ui div#dotdx_status_div {font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-style: italic; font-size: 11px; margin: 0; border-bottom: 1px solid #aaa; }\
  2170. #kong_game_ui div#helpBox { padding: 0; position: absolute; bottom: 8px; overflow: hidden; width: 282px; transition: max-height .5s; border-top-width: 0; border-top-style: solid; font-family: \"Trebuchet MS\",Helvetica,sans-serif; font-size: 12px; font-style: italic;}\
  2171. #kong_game_ui div#helpBox > span {display: inline-block; padding: 11px 8px 9px;}\
  2172. #kong_game_ui span.generic { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  2173. #kong_game_ui span.notice { display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; font-style: italic; margin: 3px 6px; }\
  2174. #kong_game_ui div#dotdx_usercontext { display: none; position: absolute; background-color: #eee; border: 1px solid #888; display: none; box-shadow: 0 0 8px #888; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; background: -webkit-linear-gradient(top,#e7e7e7,#fff); background: -moz-linear-gradient(top,#e7e7e7,#fff); cursor: pointer;}\
  2175. #kong_game_ui div#dotdx_usercontext span { display: inline-block; padding: 3px 6px 2px }\
  2176. #kong_game_ui div#dotdx_usercontext span:hover { text-shadow: 0 0 3px #aaa; }\
  2177. #kong_game_ui td {vertical-align: middle}\
  2178. div#FPXfsOptions span.generic {float:left; clear:both}\
  2179. div#FPXfsOptions span.share { font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 10px; margin-right: 10px; margin-right: 5px; display: inline-block; padding-top: 3px; }\
  2180. div#FPXfsOptions label { margin-right: 3px; }\
  2181. div#dotdx_sidebar_container { margin-top: 0; padding-top: 5px; overflow: hidden; }\
  2182. div#dotdx_sidebar_container > button {width: 60px; border: 1px solid #555; margin-bottom: 5px; font-size: 11px; font-family: \"Trebuchet MS\", Helvetica, sans-serif; height: 21px; transition-property: box-shadow, text-shadow, border-color, background; transition-duration: .5s; outline: none; position: relative; z-index: 9;}\
  2183. div#dotdx_sidebar_container > button:hover { position: relative; z-index: 40;}\
  2184. div#dotdx_sidebar_container > div.label { text-align: center; color: #fff; padding-top: 7px; height: 19px; text-shadow: 0 0 6px #fff; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 12px; }\
  2185. div#dotdx_sidebar_container > div { width: 60px; height: 26px }\
  2186. div#dotdx_sidebar_container > input[type=\"text\"] { border: 1px solid #555; margin-bottom: 5px; display: inline-block; font-family: \"Trebuchet MS\", Helvetica, sans-serif; font-size: 11px; font-style: italic; width: 46px; outline: none; height: 13px; text-align: center; position:absolute; z-index:3; padding: 3px 6px; transition: width .5s; }\
  2187. div#dotdx_sidebar_container > input[type=\"text\"].slim {width: 16px}\
  2188. div#dotdx_sidebar_container > input[type=\"text\"]:hover, div#dotdx_sidebar_container > input[type=\"text\"]:focus { width:250px; text-align: left; }\
  2189. div#dotdx_sidebar_container > div#serverButton {cursor: pointer; border: 1px solid #111; text-align: center; height: auto; width: 58px; padding: 4px 0px; box-shadow: 0px 0px 4px #222; margin-bottom: 7px; transition: all .5s ease 0s;}\
  2190. div#dotdx_sidebar_container > div#serverButton:hover {border-radius: 5px;} \
  2191. div#dotdx_sidebar_container > button.slim, div#dotdx_sidebar_container > div.slim {width: 30px}\
  2192. div#dotdx_sidebar_container.slim {width: 32px}\
  2193. div#dotdx_sidebar_container > div#serverButton.slim {width: 28px}\
  2194. #kong_game_ui div#chat_room_tabs div a, #kong_game_ui div#lots_tab_pane ul li.tab div.tab_head {transition: all .3s;}\
  2195. div.raid_list_item > span.DotDX_extState { display: inline-block; width:27px; padding-top: 2px }\
  2196. div.raid_list_item > span.DotDX_extInfo { float: right; display:inline; margin-right: 8px; color:#c0c0c0; font-size: 11px }\
  2197. div.raid_list_item > br {clear:both}\
  2198. div.raid_list_item > span.DotDX_extInfo.failings {color: #ffda8e}\
  2199. div.raid_list_item > span.DotDX_extInfo.failingm {color: #ff8080}\
  2200. div.raid_list_item > span.DotDX_extInfo.failingh {color: #ff4040}\
  2201. #FPXRaidFilterWhatDiv table {max-height: 327px; overflow-y: auto;}\
  2202. #FPXRaidFilterWhatDiv table tr td:first-child {text-overflow: ellipsis; white-space: pre; overflow-x: hidden; width: 150px; display: inline-block;}\
  2203. " + elemPositionFix).attach("to", document.head);
  2204. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_themeClass'}).attach('to', document.head);
  2205. SRDotDX.gui.applyTheme();
  2206. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_tabs'}).attach('to', document.head);
  2207. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_fontClass'}).attach('to', document.head);
  2208. SRDotDX.gui.applyFontSize();
  2209. var link = SRDotDX.gui.cHTML('a').set({href: '#lots_tab_pane', class: ''}).html(SRDotDX.config.dotdxTabName, false).attach('to', SRDotDX.gui.cHTML('li').set({ class: 'tab', id: 'lots_tab' }).attach('after', 'chat_tab').ele()).ele();
  2210. var sbTmp = JSON.stringify(SRDotDX.config.sbConfig);
  2211. sbTmp = sbTmp.slice(1, sbTmp.length - 1).replace(/},/g, "},&#10;").replace(/l,/g, "l,&#10;");
  2212. var pane = SRDotDX.gui.cHTML('div').set({id: 'lots_tab_pane'}).html(' \
  2213. <div id="dotdx_shadow_wrapper">\
  2214. <div id="dotdx_status_div">DotDX: <span id="StatusOutput"></span></div> \
  2215. <div style="height: 617px; overflow: hidden;">\
  2216. <ul id="SRDotDX_tabpane_tabs"> \
  2217. <li class="tab active"> \
  2218. <div class="tab_head" id="raids_tab">Raids</div> \
  2219. <div class="tab_pane" id="mainRaidsFrame"> \
  2220. <div id="topRaidPane"> \
  2221. <div id="FPXRaidFilterDiv" class="collapsible_panel"> \
  2222. <p class="collapsingCategory" id="collapsingCat10" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFiltering\', this, \'raid_list\')">Filtering<span style="float:right">&minus;</span></p> \
  2223. <div id="FPXRaidFiltering" style="display:block" class="collapsingField"> \
  2224. <input type="text" id="raidsBossFilter" name="FPXRaidBossNameFilter"> \
  2225. <input type="checkbox" id="dotdx_flt_vis"><label for="dotdx_flt_vis" style="margin-right: 9px; margin-left:5px; display: inline-block">Incl visited</label>\
  2226. <input type="checkbox" id="dotdx_flt_full"><label for="dotdx_flt_full" style="margin-right: 9px;">Excl full</label>\
  2227. <input type="checkbox" id="dotdx_flt_all"><label for="dotdx_flt_all">Bypass filters</label>\
  2228. </div> \
  2229. </div> \
  2230. <!-- <div id="FPXRaidSortingDiv" class="collapsible_panel"> \
  2231. <p class="collapsingCategory" id="collapsingCat11" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidSort\', this, \'raid_list\')">Sorting<span style="float:right">+</span></p> \
  2232. <div id="FPXRaidSort" style="display:none"> \
  2233. <table> \
  2234. <tr><td rowspan="2"><input type="button" class="regBtn" style="display:inline; height: 40px" id="SortRaidsButton" onClick="SRDotDX.gui.FPXSortRaids();return false;" value="Sort" onmouseout="SRDotDX.gui.turnNormal(this.id);" onmouseover="SRDotDX.gui.highlightButton(this.id,\'Sort raids based on selected criteria.\');"></td> \
  2235. <td>&nbsp;Sort by: \
  2236. <select style="width: 90px" id="FPXRaidSortSelection" tabIndex="-1"> \
  2237. <option value="Time" selected>TimeStamp</option> \
  2238. <option value="Name">Raid Name</option> \
  2239. <option value="Diff">Difficulty</option> \
  2240. <option value="Id">Raid Id</option> \
  2241. </select> \
  2242. <select style="width: 56px" id="FPXRaidSortDirection" tabIndex="-1"> \
  2243. <option value="asc" selected>Asc</option> \
  2244. <option value="desc">Desc</option> \
  2245. </select></td></tr> \
  2246. <tr><td style="padding: 2px"><input type="checkbox" id="SRDotDX_options_newRaidsAtTopOfRaidList"><div><label>New raids at top of raid list</label></div></td></tr> \
  2247. </table> \
  2248. </div> \
  2249. </div> --> \
  2250. <input style="width: 94px; margin-top: 6px; margin-left: 5px" name="ImportRaids" class="blue" id="ImportRaidsButton" onclick="SRDotDX.request.raids(false,1); return false;" tabIndex="-1" type="button" value="Import" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import raids from server.\');">\
  2251. <input style="width: 55px;" name="DumpRaids" class="generic" id="DumpRaidsButton" onclick="SRDotDX.gui.RaidAction(\'share\');return false;" tabIndex="-1" type="button" value="Share" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Copy all displayed raids to the share tab.\');"> \
  2252. <input style="width: 55px;" name="PostRaids" class="generic" id="PostRaidsButton" onclick="SRDotDX.gui.RaidAction(\'post\');return false;" tabIndex="-1" type="button" value="Post" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Post all displayed raids to chat.\');"> \
  2253. <input style="width: 55px;" name="DeleteRaids" class="red" id="DeleteRaidsButton" onclick="SRDotDX.gui.RaidAction(\'delete\'); return false;" tabIndex="-1" type="button" value="Delete" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Delete displayed raids.\');"><br> \
  2254. <input style="width: 94px; margin-bottom: 7px; margin-left: 5px; margin-top: 4px"name="JoinRaids" class="green" id="AutoJoinVisibleButton" onclick="SRDotDX.gui.joinSelectedRaids(false) ;return false;" tabIndex="-1" type="button" value="Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Join all displayed (not dead) raids.\'); "> \
  2255. <input style="width: 173px; margin-bottom: 5px; margin-top: 4px" name="ImpJoinRaids" class="green" id="AutoImpJoinVisibleButton" onclick="SRDotDX.request.joinAfterImport = true; SRDotDX.request.raids(false,1);return false;" tabIndex="-1" type="button" value="Import & Join" onmouseout="SRDotDX.gui.displayHint();" onmouseover="SRDotDX.gui.displayHint(\'Import from server and join all selected (not dead) raids.\'); "> \
  2256. </div> \
  2257. <div style="" id="raid_list" tabIndex="-1"></div> \
  2258. </div> \
  2259. </li> \
  2260. <li class="tab"> \
  2261. <div class="tab_head">Opts</div> \
  2262. <div class="tab_pane"> \
  2263. <div id="FPXRaidOptionsDiv" class="collapsible_panel"> \
  2264. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat20" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidOptions\', this)">Raid Options<span style="float:right">+</span></p> \
  2265. <div id="FPXRaidOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2266. <input type="checkbox" id="SRDotDX_options_markMyRaidsVisited" class="generic"><label for="SRDotDX_options_markMyRaidsVisited">Mark raids posted by me as visited</label><br> \
  2267. <input type="checkbox" id="SRDotDX_options_confirmWhenDeleting" class="generic"><label for="SRDotDX_options_confirmWhenDeleting">Confirm when manually deleting raids</label><br> \
  2268. <input type="checkbox" id="SRDotDX_options_importFiltered" class="generic"><label for="SRDotDX_options_importFiltered">Add to database filtered raids only</label><br> \
  2269. </div> \
  2270. </div> \
  2271. <div id="FPXChatOptionsDiv" class="collapsible_panel"> \
  2272. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat21" onclick="SRDotDX.gui.toggleDisplay(\'FPXChatOptions\', this)">Chat Options<span style="float:right">+</span></p> \
  2273. <div id="FPXChatOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2274. <input type="checkbox" id="SRDotDX_options_hideRaidLinks" class="generic"><label for="SRDotDX_options_hideRaidLinks">Hide all raid links in chat</label><br> \
  2275. <input type="checkbox" id="SRDotDX_options_hideBotLinks" class="generic"><label for="SRDotDX_options_hideBotLinks">Hide bot raid links in chat</label><br> \
  2276. <input type="checkbox" id="SRDotDX_options_hideVisitedRaids" class="generic"><label for="SRDotDX_options_hideVisitedRaids">Hide visited raids in chat</label><br> \
  2277. <span class="generic">Chat size:</span>\
  2278. <input type="radio" id="SRDotDX_options_chatSizeNormal" name="chatSize" value="300"/><label for="SRDotDX_options_chatSizeNormal">Normal</label> \
  2279. <input type="radio" id="SRDotDX_options_chatSizePlus25" name="chatSize" value="375" class="generic"/><label for="SRDotDX_options_chatSizePlus25">+25%</label> \
  2280. <input type="radio" id="SRDotDX_options_chatSizePlus50" name="chatSize" value="400" class="generic"/><label for="SRDotDX_options_chatSizePlus50">+50%</label><br> \
  2281. <span class="generic">Font size:</span>\
  2282. <input type="radio" id="SRDotDX_options_fontSizeNormal" name="fontSize" value="0"/><label for="SRDotDX_options_fontSizeNormal">Normal</label> \
  2283. <input type="radio" id="SRDotDX_options_fontSizeSmaller" name="fontSize" value="2" class="generic"/><label for="SRDotDX_options_fontSizeSmaller">Smaller</label> \
  2284. <input type="radio" id="SRDotDX_options_chatSizeBigger" name="fontSize" value="1" class="generic"/><label for="SRDotDX_options_chatSizeBigger">Bigger</label><br> \
  2285. <span class="generic">IGN mode:</span>\
  2286. <input type="radio" id="SRDotDX_options_ignHide" name="ignMode" value="0"/><label for="SRDotDX_options_ignHide">Hide</label> \
  2287. <input type="radio" id="SRDotDX_options_ignReplace" name="ignMode" value="1" class="generic"/><label for="SRDotDX_options_ignReplace">Replace</label> \
  2288. <input type="radio" id="SRDotDX_options_ignAttach" name="ignMode" value="2" class="generic"/><label for="SRDotDX_options_ignAttach">Attach</label><br> \
  2289. <input type="checkbox" id="SRDotDX_options_hideScrollbar" class="generic"><label for="SRDotDX_options_hideScrollbar">Hide scrollbar for chat and user window</label><br> \
  2290. <span class="generic">More info in raid links:</span> \
  2291. <input type="checkbox" id="SRDotDX_options_showFS"><label for="SRDotDX_options_showFS">Show FS</label> \
  2292. <input type="checkbox" id="SRDotDX_options_showAP" class="generic"><label for="SRDotDX_options_showAP">Show AP</label> \
  2293. </div> \
  2294. </div> \
  2295. <div id="FPXIntOptionsDiv" class="collapsible_panel"> \
  2296. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat23" onclick="SRDotDX.gui.toggleDisplay(\'FPXIntOptions\', this)">Interface Options<span style="float:right">+</span></p> \
  2297. <div id="FPXIntOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2298. <input type="checkbox" id="options_hideGameTitle" class="generic"><label for="options_hideGameTitle">Hide titlebar above game window</label><br>\
  2299. <input type="checkbox" id="options_hideGameDetails" class="generic"><label for="options_hideGameDetails">Hide details under game window</label><br>\
  2300. <input type="checkbox" id="options_hideKongForum" class="generic"><label for="options_hideKongForum">Hide forum under game window</label><br>\
  2301. <input type="checkbox" id="options_trueMsgCount" class="generic"><label for="options_trueMsgCount">Display true kong messages count</label><br>\
  2302. <input type="checkbox" id="options_hideGameTab" class="generic"><label for="options_hideGameTab">Hide Game tab</label><br>\
  2303. <input type="checkbox" id="options_hideAccTab" class="generic"><label for="options_hideAccTab">Hide Achievements tab</label><br>\
  2304. <span class="generic">Script tab name</span><input type="text" class="generic color" id="options_dotdxTabName"><br> \
  2305. <span class="generic">Background color</span><input type="text" class="generic color" id="SRDotDX_colors_background"><br> \
  2306. <span class="generic">Theme:</span>\
  2307. <input type="radio" id="theme_lightGrey" name="chatTheme" value="0"><label for="theme_lightGrey">Light Grey</label>\
  2308. <input type="radio" id="theme_crimsonBlack" name="chatTheme" value="1" class="generic"><label for="theme_crimsonBlack">Crimson Black</label>\
  2309. <span class="generic">World Chat:</span>\
  2310. <input type="checkbox" id="options_wcLeft" class="generic"><label for="options_wcLeft">Show on the left </label><input type="checkbox" id="options_wcRemove" class="generic"><label for="options_wcRemove">Remove</label>\
  2311. </div>\
  2312. </div> \
  2313. <div id="FPXsbOptionsDiv" class="collapsible_panel"> \
  2314. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat24" onclick="SRDotDX.gui.toggleDisplay(\'FPXsbOptions\', this)">Sidebar Options<span style="float:right">+</span></p> \
  2315. <div id="FPXsbOptions" name="dotdxOptsTabs" style="display:none" class="collapsingField"> \
  2316. <input type="checkbox" id="options_sbEnable" class="generic"><label for="options_sbEnable">Enable DotDX Sidebar</label><br>\
  2317. <input type="checkbox" id="options_sbSlim" class="generic"><label for="options_sbSlim">Use slim Sidebar</label><br>\
  2318. <input type="checkbox" id="options_sbRightSide" class="generic"><label for="options_sbRightSide">Show sidebar on the right side of chat</label><br> \
  2319. <textarea wrap="off" id="options_sbConfig" rows="25" style="overflow-y: hidden; overflow-x: scroll; white-space: nowrap">' + sbTmp + '</textarea> \
  2320. <input id="dotdx_sbConfigSave" style="margin: 0 0 2px 6px; width: 156px;" class="blue" type="button" value="Apply new sidebar layout" onclick="SRDotDX.gui.applySidebarUI(0); return false;">\
  2321. <input id="dotdx_sbConfigDefault" style="width: 110px;" class="red" type="button" value="Restore default" onclick="SRDotDX.gui.restoreDefaultSB(); return false;">\
  2322. </div> \
  2323. </div> \
  2324. <div id="FPXfsOptionsDiv" class="collapsible_panel"> \
  2325. <p class="collapsingCategory" name="dotdxOptsTabs" id="collapsingCat25" onclick="SRDotDX.gui.toggleDisplay(\'FPXfsOptions\', this)">Friend Share Options<span style="float:right">+</span></p> \
  2326. <div id="FPXfsOptions" name="dotdxOptsTabs" style="display:none; text-align:right" class="collapsingField"> \
  2327. </div> \
  2328. </div> \
  2329. </div> \
  2330. </li> \
  2331. <li class="tab"> \
  2332. <div class="tab_head" id="FPXShareTab">Share</div> \
  2333. <div class="tab_pane"> \
  2334. <div id="FPXRaidSpamDiv"> \
  2335. <div id="FPXShareDiv" class="collapsible_panel"> \
  2336. <p class="collapsingCategory" id="collapsingCat30" onclick="SRDotDX.gui.toggleDisplay(\'FPXShare\', this, \'share_list\')">Share<span style="float:right">+</span></p> \
  2337. <div id="FPXShare" style="display:block" class="collapsingField"> \
  2338. <input type="checkbox" id="SRDotDX_options_formatLinkOutput" class="generic"><label for="SRDotDX_options_formatLinkOutput">Enable formatting of posted raid links</label><br> \
  2339. <span class="generic">Whisper to </span><input type="text" class="generic" id="SRDotDX_options_whisperTo"><br>\
  2340. <span class="notice">(if "whisper to" field is blank, raids will be posted public)</span> \
  2341. <input id="dotdx_share_post_button" style="margin: 3px 0 0 6px; width: 133px" name="Submit" class="generic" type="button" tabIndex="-1" value="Post Links to Chat" onclick="SRDotDX.gui.RaidAction(\'post_share\');return false;"/> \
  2342. <input id="dotdx_friend_post_button" style="width: 133px" name="Submit1" class="green" type="button" tabIndex="-1" value="Friend Share links" onclick="SRDotDX.gui.RaidAction(\'post_friend\');return false;"/><br> \
  2343. </div> \
  2344. </div> \
  2345. <div id="FPXImportDiv" class="collapsible_panel" class="collapsingField"> \
  2346. <p class="collapsingCategory" id="collapsingCat31" onclick="SRDotDX.gui.toggleDisplay(\'FPXImport\', this, \'share_list\')">Import<span style="float:right">+</span></p> \
  2347. <div id="FPXImport" style="display:none" class="collapsingField"> \
  2348. <input type="checkbox" id="SRDotDX_options_markImportedRaidsVisited" class="generic"><label for="SRDotDX_options_markImportedRaidsVisited">Mark imported raids visited</label><br> \
  2349. <input style="margin-left: 6px; margin-top: 6px; width: 133px" name="Submit2" class="blue" type="button" tabIndex="-1" value="Import to Raid Tab" onClick="SRDotDX.gui.FPXimportRaids();return false;"/> \
  2350. <input style="width: 133px" name="Submit3" class="blue" type="button" tabIndex="-1" value="Delete and Import" onClick="SRDotDX.gui.FPXdeleteAllRaids();SRDotDX.gui.FPXimportRaids();return false;"/> \
  2351. </div> \
  2352. </div> \
  2353. </div> \
  2354. <textarea id="DotDX_raidsToSpam" name="FPXRaidSpamInput" style="height:437px;"></textarea> \
  2355. </div> \
  2356. </li> \
  2357. <li class="tab"> \
  2358. <div class="tab_head">Filter</div> \
  2359. <div class="tab_pane"> \
  2360. <div id="FPXRaidFilterDiv"> \
  2361. <div id="FPXRaidFilterWhereDiv"> \
  2362. <p class="collapsingCategory" id="collapsingCat40" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidFilterWhere\', this)">Filtering options<span style="float:right">+</span></p> \
  2363. <div id="FPXRaidFilterWhere" style="display:block" class="collapsingField"> \
  2364. <input type="checkbox" id="SRDotDX_options_perRaidFilterLinks" class="generic"><label for="SRDotDX_options_perRaidFilterLinks">Activate filtering on raid links</label><br> \
  2365. <input type="checkbox" id="SRDotDX_options_perRaidFilterRaidList" class="generic"><label for="SRDotDX_options_perRaidFilterRaidList">Activate filtering on raid list tab</label><br> \
  2366. </div>\
  2367. </div> \
  2368. <div id="FPXRaidFilterWhatDiv"> \
  2369. <div id="FPXRaidTableSmallDiv" class="collapsible_panel"> \
  2370. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat41" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSmall\', this)">Small Raids<span style="float:right">+</span></p> \
  2371. <table id="FPXRaidTableSmall" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2372. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2373. <tbody id="FPXRaidFilterWhatSmall"> \
  2374. <!-- Dynamic content --> \
  2375. </tbody> \
  2376. </table> \
  2377. </div> \
  2378. <div id="FPXRaidTableMediumDiv" class="collapsible_panel"> \
  2379. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat42" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableMedium\', this)">Medium Raids<span style="float:right">+</span></p> \
  2380. <table id="FPXRaidTableMedium" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2381. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2382. <tbody id="FPXRaidFilterWhatMedium"> \
  2383. <!-- Dynamic content --> \
  2384. </tbody> \
  2385. </table> \
  2386. </div> \
  2387. <div id="FPXRaidTableLargeDiv" class="collapsible_panel"> \
  2388. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat43" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableLarge\', this)">Large Raids<span style="float:right">+</span></p> \
  2389. <table id="FPXRaidTableLarge" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2390. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2391. <tbody id="FPXRaidFilterWhatLarge"> \
  2392. <!-- Dynamic content --> \
  2393. </tbody> \
  2394. </table> \
  2395. </div> \
  2396. <div id="FPXRaidTableEpicDiv" class="collapsible_panel"> \
  2397. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat44" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableEpic\', this)">Epic Raids<span style="float:right">+</span></p> \
  2398. <table id="FPXRaidTableEpic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2399. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2400. <tbody id="FPXRaidFilterWhatEpic"> \
  2401. <!-- Dynamic content --> \
  2402. </tbody> \
  2403. </table> \
  2404. </div> \
  2405. <div id="FPXRaidTableColossalDiv" class="collapsible_panel"> \
  2406. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat45" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableColossal\', this)">Colossal Raids<span style="float:right">+</span></p> \
  2407. <table id="FPXRaidTableColossal" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2408. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2409. <tbody id="FPXRaidFilterWhatColossal"> \
  2410. <!-- Dynamic content --> \
  2411. </tbody> \
  2412. </table> \
  2413. </div> \
  2414. <div id="FPXRaidTableGiganticDiv" class="collapsible_panel"> \
  2415. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat46" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGigantic\', this)">Gigantic Raids<span style="float:right">+</span></p> \
  2416. <table id="FPXRaidTableGigantic" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2417. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2418. <tbody id="FPXRaidFilterWhatGigantic"> \
  2419. <!-- Dynamic content --> \
  2420. </tbody> \
  2421. </table> \
  2422. </div> \
  2423. <div id="FPXRaidTableGuildDiv" class="collapsible_panel"> \
  2424. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat47" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableGuild\', this)">Guild Raids<span style="float:right">+</span></p> \
  2425. <table id="FPXRaidTableGuild" name="dotdxFilterTab" style="display:none; height: 330px; overflow-y: auto;" class="collapsingField"> \
  2426. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2427. <tbody id="FPXRaidFilterWhatGuild"> \
  2428. <!-- Dynamic content --> \
  2429. </tbody> \
  2430. </table> \
  2431. </div> \
  2432. <div id="FPXRaidTableSpecialDiv" class="collapsible_panel"> \
  2433. <p class="collapsingCategory" name="dotdxFilterTab" id="collapsingCat48" onclick="SRDotDX.gui.toggleDisplay(\'FPXRaidTableSpecial\', this)">World Raids<span style="float:right">+</span></p> \
  2434. <table id="FPXRaidTableSpecial" name="dotdxFilterTab" style="display:none" class="collapsingField"> \
  2435. <col width="180"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><col width="20"/><thead><tr><th>Raid</th><th>N</th><th>H</th><th>L</th><th>NM</th><th>All</th></tr></thead> \
  2436. <tbody id="FPXRaidFilterWhatSpecial"> \
  2437. <!-- Dynamic content --> \
  2438. </tbody> \
  2439. </table> \
  2440. </div> \
  2441. </div> \
  2442. </div> \
  2443. </div> \
  2444. </li> \
  2445. <li class="tab"> \
  2446. <div class="tab_head">Util</div> \
  2447. <div class="tab_pane"> \
  2448. <div id="FPXLandCalcDiv" class="collapsible_panel"> \
  2449. <p class="collapsingCategory" id="collapsingCat50" onclick="SRDotDX.gui.toggleDisplay(\'FPXLandCalc\', this)">Land Calculator<span style="float:right">+</span></p> \
  2450. <div id="FPXLandCalc" style="display:block" class="collapsingField"> \
  2451. <form id="FPXLand" name="FPXLandForm" onSubmit="return false;" style="padding-bottom:6px"> \
  2452. <table style="margin: 0 auto; padding-right: 10px;"> \
  2453. <tr><td class="landname" colspan="3">Cornfield</td><td style="width: 10px">&nbsp;</td><td class="landname" colspan="3">Stable</td></tr> \
  2454. <tr> \
  2455. <td> <input class="landpmbutton red" id="a_1" name="FPXminusTen_1" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="10"/></td> \
  2456. <td> <input class="generic" maxlength="10" name="tf_1" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="1" /></td> \
  2457. <td> <input class="landpmbutton blue" id="b_1" name="FPXplusTen_1" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="11"/></td> \
  2458. <td></td> \
  2459. <td> <input class="landpmbutton red" id="a_2" name="FPXminusTen_2" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="12"/></td> \
  2460. <td> <input class="generic" maxlength="10" name="tf_2" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="2" /></td> \
  2461. <td> <input class="landpmbutton blue" id="b_2" name="FPXplusTen_2" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="13"/></td> \
  2462. </tr> \
  2463. <tr><td class="landname" colspan="3">Barn</td><td></td><td class="landname" colspan="3">Store</td></tr> \
  2464. <tr> \
  2465. <td> <input class="landpmbutton red" id="a_3" name="FPXminusTen_3" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="14"/></td> \
  2466. <td> <input class="generic" maxlength="10" name="tf_3" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="3" /></td> \
  2467. <td> <input class="landpmbutton blue" id="b_3" name="FPXplusTen_3" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="15"/></td> \
  2468. <td></td> \
  2469. <td> <input class="landpmbutton red" id="a_4" name="FPXminusTen_4" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="16"/></td> \
  2470. <td> <input class="generic" maxlength="10" name="tf_4" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="4" /></td> \
  2471. <td> <input class="landpmbutton blue" id="b_4" name="FPXplusTen_4" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="17"/></td> \
  2472. </tr> \
  2473. <tr><td class="landname" colspan="3">Pub</td><td></td><td class="landname" colspan="3">Inn</td></tr> \
  2474. <tr> \
  2475. <td> <input class="landpmbutton red" id="a_5" name="FPXminusTen_5" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="18"/></td> \
  2476. <td> <input class="generic" maxlength="10" name="tf_5" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="5" /></td> \
  2477. <td> <input class="landpmbutton blue" id="b_5" name="FPXplusTen_5" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="19"/></td> \
  2478. <td></td> \
  2479. <td> <input class="landpmbutton red" id="a_6" name="FPXminusTen_6" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="20"/></td> \
  2480. <td> <input class="generic" maxlength="10" name="tf_6" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="6" /></td> \
  2481. <td> <input class="landpmbutton blue" id="b_6" name="FPXplusTen_6" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="21"/></td> \
  2482. </tr> \
  2483. <tr><td class="landname" colspan="3">Sentry</td><td></td><td class="landname" colspan="3">Fort</td></tr> \
  2484. <tr> \
  2485. <td> <input class="landpmbutton red" id="a_7" name="FPXminusTen_7" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="22"/></td> \
  2486. <td> <input class="generic" maxlength="10" name="tf_7" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="7" /></td> \
  2487. <td> <input class="landpmbutton blue" id="b_7" name="FPXplusTen_7" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="23"/></td> \
  2488. <td></td> \
  2489. <td> <input class="landpmbutton red" id="a_8" name="FPXminusTen_8" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="24"/></td> \
  2490. <td> <input class="generic" maxlength="10" name="tf_8" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="8" /></td> \
  2491. <td> <input class="landpmbutton blue" id="b_8" name="FPXplusTen_8" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="25"/></td> \
  2492. </tr> \
  2493. <tr><td class="landname" colspan="3">Castle</td></tr> \
  2494. <tr> \
  2495. <td> <input class="landpmbutton red" id="a_9" name="FPXminusTen_9" type="button" value=" - " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="26"/></td> \
  2496. <td> <input class="generic" maxlength="10" name="tf_9" onblur="SRDotDX.gui.FPXLandUpdater();" size="8" type="text" tabindex="9" /></td> \
  2497. <td> <input class="landpmbutton blue" id="b_9" name="FPXplusTen_9" type="button" value=" + " onClick="SRDotDX.gui.FPXLandButtonHandler(this, this.name);return false;" tabindex="27"/></td> \
  2498. <td></td> \
  2499. <td colspan="3"> <input class="landsavebutton green" id="lsbutton" type="button" value="Save" onClick="SRDotDX.gui.FPXLandButtonSave();return false;" tabindex="28"/></td> \
  2500. </tr> \
  2501. </table> \
  2502. </form> \
  2503. </div> \
  2504. </div>\
  2505. <div id="WhoPostedMyRaidDiv" class="collapsible_panel"> \
  2506. <p class="collapsingCategory" id="collapsingCat51" onclick="SRDotDX.gui.toggleDisplay(\'WhoPostedMyRaid\', this)">Who posted my raid?<span style="float:right">+</span></p> \
  2507. <div id="WhoPostedMyRaid" style="display:block" class="collapsingField"> \
  2508. <span class="generic" style="margin-top:6px; margin-right: 2px">Raid link or id: </span>\
  2509. <input type="text" class="generic" id="DotDX_checkRaidPoster" style="width:120px">\
  2510. <input class="green" type="button" value="Check" onClick="SRDotDX.request.poster(); return false;" style="height:20px; width:46px"><br>\
  2511. <span class="generic">Raid: </span><span class="generic" id="DotDX_whoPosted_Raid"></span><br> \
  2512. <span class="generic">Time: </span><span class="generic" id="DotDX_whoPosted_Time"></span><br> \
  2513. <span class="generic">Poster: </span><span class="generic" id="DotDX_whoPosted_Poster"></span><br> \
  2514. </div> \
  2515. </div>\
  2516. </div> \
  2517. </li> \
  2518. </ul> \
  2519. </div>\
  2520. <div id="helpBox" style="max-height:0"><span>Help message</span></div> \
  2521. </div>\
  2522. ', false).attach('to', 'kong_game_ui').ele();
  2523. SRDotDX.gui.cHTML('style').set({type: "text/css", id: 'DotDX_colors'}).text(' \
  2524. .DotDX_filter_dummy_0 {display: none !important} \
  2525. ').attach('to', document.head);
  2526.  
  2527. //pane.style.height = document.getElementById('chat_tab_pane').style.height;
  2528. var e = pane.getElementsByClassName('tab_head');
  2529. i = e.length;
  2530. while (i--) {
  2531. e[i].addEventListener('click', function () {
  2532. if (!/\bactive\b/i.test(this.className)) {
  2533. var e = document.getElementById("lots_tab_pane").getElementsByTagName("li");
  2534. var i = e.length;
  2535. while (i--) if (e[i].getAttribute("class").indexOf("active") > -1) e[i].className = e[i].className.replace(/ active$/g, "");
  2536. (this.parentNode).className += ' active';
  2537. }
  2538. });
  2539. }
  2540. holodeck._tabs.addTab(link);
  2541. SRDotDX.gui.applyTabs();
  2542. //Set up custom chat size
  2543. SRDotDX.gui.hideWC(true);
  2544.  
  2545. //Chat raids overlay div
  2546. SRDotDX.gui.cHTML('div').set({id: 'chat_raids_overlay'})
  2547. .html('<span id="chat_raids_overlay_text"></span>', true)
  2548. .attach("to", 'chat_tab_pane');
  2549.  
  2550. //Sidebar elements generator
  2551. if (SRDotDX.config.sbEnable) SRDotDX.gui.applySidebarUI(1);
  2552.  
  2553. //spam tab
  2554. var FPXimpSpam = SRDotDX.gui.cHTML('#DotDX_raidsToSpam');
  2555. var FPXSpamText = 'Paste raid links here to share or import\n\nLinks must be comma (,) separated.';
  2556. FPXimpSpam.ele().value = FPXSpamText;
  2557. FPXimpSpam.on('blur', function () {
  2558. if (this.value == '') this.value = FPXSpamText
  2559. });
  2560. FPXimpSpam.on('focus', function () {
  2561. if (this.value == FPXSpamText) this.value = ''
  2562. });
  2563.  
  2564. //chat global listener
  2565. var chat_window = document.getElementById('chat_rooms_container');
  2566. chat_window.addEventListener('click', SRDotDX.gui.chatWindowMouseDown, true);
  2567. chat_window.addEventListener('contextmenu', SRDotDX.gui.chatWindowContextMenu, false);
  2568. //land tab
  2569. els = document.FPXLandForm;
  2570. i = 9;
  2571. while (i--) els.elements['tf_' + (i + 1)].value = SRDotDX.config.FPXLandOwnedCount[i];
  2572. SRDotDX.gui.FPXLandUpdater();
  2573.  
  2574. //raid tab
  2575. var raids_tab = document.getElementById('raids_tab');
  2576. raids_tab.addEventListener('click', function () {
  2577. SRDotDX.gui.refreshRaidList();
  2578. }, false);
  2579.  
  2580. var raidBossFilter = SRDotDX.gui.cHTML('#raidsBossFilter');
  2581. raidBossFilter.ele().value = SRDotDX.config.lastFilter[SRDotDX.config.serverMode - 1];
  2582. raidBossFilter.on("keyup", function () {
  2583. SRDotDX.gui.updateFilterTxt(this.value, true);
  2584. });
  2585.  
  2586. var filterIncVis = SRDotDX.gui.cHTML('#dotdx_flt_vis');
  2587. filterIncVis.ele().checked = SRDotDX.config.fltIncVis;
  2588. filterIncVis.on('click', function () {
  2589. SRDotDX.config.fltIncVis = this.checked;
  2590. if(!document.getElementById('dotdx_flt_all').checked) SRDotDX.gui.selectRaidsToJoin('checkbox');
  2591. });
  2592.  
  2593. var filterExclFull = SRDotDX.gui.cHTML('#dotdx_flt_full');
  2594. filterExclFull.ele().checked = SRDotDX.config.fltExclFull;
  2595. filterExclFull.on('click', function () {
  2596. SRDotDX.config.fltExclFull = this.checked;
  2597. if(!document.getElementById('dotdx_flt_all').checked) SRDotDX.gui.selectRaidsToJoin('checkbox');
  2598. });
  2599.  
  2600. var filterShowAll = SRDotDX.gui.cHTML('#dotdx_flt_all');
  2601. filterShowAll.ele().checked = SRDotDX.config.fltShowAll;
  2602. filterShowAll.on('click', function () {
  2603. SRDotDX.config.fltShowAll = this.checked;
  2604. SRDotDX.gui.selectRaidsToJoin('checkbox')
  2605. });
  2606.  
  2607. //raidlist global click listener
  2608. var raid_list = document.getElementById('raid_list');
  2609. raid_list.addEventListener('click', function (e) {
  2610. e.preventDefault();
  2611. e.stopPropagation();
  2612. return false
  2613. }, false);
  2614. raid_list.addEventListener('mousedown', function (e) {
  2615. SRDotDX.gui.FPXraidListMouseDown(e)
  2616. }, false);
  2617.  
  2618. //options tab
  2619. var optsImportFiltered = SRDotDX.gui.cHTML('#SRDotDX_options_importFiltered');
  2620. optsImportFiltered.ele().checked = SRDotDX.config.importFiltered;
  2621. optsImportFiltered.on('click', function () {
  2622. SRDotDX.config.importFiltered = this.checked;
  2623. SRDotDX.config.save(false)
  2624. });
  2625.  
  2626. var optsShowFs = SRDotDX.gui.cHTML('#SRDotDX_options_showFS');
  2627. optsShowFs.ele().checked = SRDotDX.config.linkShowFs;
  2628. optsShowFs.on('click', function () {
  2629. SRDotDX.config.linkShowFs = this.checked;
  2630. SRDotDX.config.save(false)
  2631. });
  2632.  
  2633. var optsShowAp = SRDotDX.gui.cHTML('#SRDotDX_options_showAP');
  2634. optsShowAp.ele().checked = SRDotDX.config.linkShowAp;
  2635. optsShowAp.on('click', function () {
  2636. SRDotDX.config.linkShowAp = this.checked;
  2637. SRDotDX.config.save(false)
  2638. });
  2639.  
  2640. var optsHideARaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideRaidLinks');
  2641. var optsHideBRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideBotLinks');
  2642. var optsHideVRaids = SRDotDX.gui.cHTML('#SRDotDX_options_hideVisitedRaids');
  2643. var optsConfirmDeletes = SRDotDX.gui.cHTML('#SRDotDX_options_confirmWhenDeleting');
  2644. var optsMarkImportedVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markImportedRaidsVisited');
  2645. var optsWhisperTo = SRDotDX.gui.cHTML('#SRDotDX_options_whisperTo');
  2646. var optsMarkMyRaidsVisited = SRDotDX.gui.cHTML('#SRDotDX_options_markMyRaidsVisited');
  2647. var optsFormatLinkOutput = SRDotDX.gui.cHTML('#SRDotDX_options_formatLinkOutput');
  2648.  
  2649. var optsChatSizeNormal = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeNormal');
  2650. optsChatSizeNormal.on('click', function(){SRDotDX.gui.chatResize(300)});
  2651. var optsChatSizePlus25 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus25');
  2652. optsChatSizePlus25.on('click', function(){SRDotDX.gui.chatResize(375)});
  2653. var optsChatSizePlus50 = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizePlus50');
  2654. optsChatSizePlus50.on('click', function(){SRDotDX.gui.chatResize(450)});
  2655. switch (SRDotDX.config.chatSize) {
  2656. case 300: optsChatSizeNormal.ele().checked = true; break;
  2657. case 375: optsChatSizePlus25.ele().checked = true; break;
  2658. case 450: optsChatSizePlus50.ele().checked = true; break;
  2659. default: optsChatSizeNormal.ele().checked = true; break;
  2660. }
  2661.  
  2662. var optsChatFontNormal = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeNormal');
  2663. optsChatFontNormal.on('click', function () {
  2664. SRDotDX.gui.applyFontSize(0)
  2665. });
  2666. var optsChatFontSmaller = SRDotDX.gui.cHTML('#SRDotDX_options_fontSizeSmaller');
  2667. optsChatFontSmaller.on('click', function () {
  2668. SRDotDX.gui.applyFontSize(2)
  2669. });
  2670. var optsChatFontBigger = SRDotDX.gui.cHTML('#SRDotDX_options_chatSizeBigger');
  2671. optsChatFontBigger.on('click', function () {
  2672. SRDotDX.gui.applyFontSize(1)
  2673. });
  2674. switch (SRDotDX.config.fontNum) {
  2675. case 2: optsChatFontSmaller.ele().checked = true; break;
  2676. case 1: optsChatFontBigger.ele().checked = true; break;
  2677. default: optsChatFontNormal.ele().checked = true; break;
  2678. }
  2679.  
  2680. var optsChatHideScrollbar = SRDotDX.gui.cHTML('#SRDotDX_options_hideScrollbar');
  2681. optsChatHideScrollbar.ele().checked = SRDotDX.config.hideScrollBar;
  2682. optsChatHideScrollbar.on('click', function () {
  2683. SRDotDX.config.hideScrollBar = this.checked;
  2684. SRDotDX.config.save(false);
  2685. SRDotDX.gui.chatResize();
  2686. });
  2687.  
  2688. var optsHideKongForum = SRDotDX.gui.cHTML('#options_hideKongForum');
  2689. optsHideKongForum.ele().checked = SRDotDX.config.hideKongForum;
  2690. optsHideKongForum.on('click', function () {
  2691. SRDotDX.config.hideKongForum = this.checked;
  2692. SRDotDX.gui.cHTML('#DotDX_forum').html('div.game_page_wrap {padding-top: 16px; margin-top: 14px !important; background: #333 !important; display: ' + (SRDotDX.config.hideKongForum ? 'none' : 'block') + '}', true)
  2693. });
  2694.  
  2695. var optsHideGameDetails = SRDotDX.gui.cHTML('#options_hideGameDetails');
  2696. optsHideGameDetails.ele().checked = SRDotDX.config.hideGameDetails;
  2697. optsHideGameDetails.on('click', function () {
  2698. SRDotDX.config.hideGameDetails = this.checked;
  2699. SRDotDX.gui.cHTML('#DotDX_details').html('div.game_details_outer {margin-top: 14px !important; width: 900px !important; border: solid 20px #333 !important; display: ' + (SRDotDX.config.hideGameDetails ? 'none' : 'block') + '}', true)
  2700. });
  2701.  
  2702. var optsHideGameTitle = SRDotDX.gui.cHTML('#options_hideGameTitle');
  2703. optsHideGameTitle.ele().checked = SRDotDX.config.hideGameTitle;
  2704. optsHideGameTitle.on('click', function () {
  2705. SRDotDX.config.hideGameTitle = this.checked
  2706. });
  2707.  
  2708. var optsTrueMsgCount = SRDotDX.gui.cHTML('#options_trueMsgCount');
  2709. optsTrueMsgCount.ele().checked = SRDotDX.config.kongMsg;
  2710. optsTrueMsgCount.on('click', function () {
  2711. SRDotDX.config.kongMsg = this.checked
  2712. });
  2713. if (SRDotDX.config.kongMsg) SRDotDX.gui.setMessagesCount();
  2714.  
  2715. var optsHideGameTab = SRDotDX.gui.cHTML('#options_hideGameTab');
  2716. optsHideGameTab.ele().checked = SRDotDX.config.hideGameTab;
  2717. optsHideGameTab.on('click', function () {
  2718. SRDotDX.config.hideGameTab = this.checked;
  2719. SRDotDX.gui.applyTabs()
  2720. });
  2721.  
  2722. var optsHideAccTab = SRDotDX.gui.cHTML('#options_hideAccTab');
  2723. optsHideAccTab.ele().checked = SRDotDX.config.hideAccTab;
  2724. optsHideAccTab.on('click', function () {
  2725. SRDotDX.config.hideAccTab = this.checked;
  2726. SRDotDX.gui.applyTabs()
  2727. });
  2728.  
  2729. var optsDotdxTabName = SRDotDX.gui.cHTML('#options_dotdxTabName');
  2730. optsDotdxTabName.ele().value = SRDotDX.config.dotdxTabName;
  2731. optsDotdxTabName.on('keyup', function () {
  2732. SRDotDX.config.dotdxTabName = this.value;
  2733. SRDotDX.gui.applyTabs()
  2734. });
  2735.  
  2736. var optsChatIgnHide = SRDotDX.gui.cHTML('#SRDotDX_options_ignHide');
  2737. optsChatIgnHide.on('click', function(){SRDotDX.config.ignMode = 0});
  2738. var optsChatIgnReplace = SRDotDX.gui.cHTML('#SRDotDX_options_ignReplace');
  2739. optsChatIgnReplace.on('click', function(){SRDotDX.config.ignMode = 1});
  2740. var optsChatIgnAttach = SRDotDX.gui.cHTML('#SRDotDX_options_ignAttach');
  2741. optsChatIgnAttach.on('click', function(){SRDotDX.config.ignMode = 2});
  2742. switch(SRDotDX.config.ignMode) {
  2743. case 0: optsChatIgnHide.ele().checked = true; break;
  2744. case 1: optsChatIgnReplace.ele().checked = true; break;
  2745. case 2: optsChatIgnAttach.ele().checked = true; break;
  2746. }
  2747.  
  2748. var optsChatThemeLightGrey = SRDotDX.gui.cHTML('#theme_lightGrey');
  2749. optsChatThemeLightGrey.on('click', function(){SRDotDX.gui.applyTheme(0)});
  2750. var optsChatThemeCrimsonBlack = SRDotDX.gui.cHTML('#theme_crimsonBlack');
  2751. optsChatThemeCrimsonBlack.on('click', function(){SRDotDX.gui.applyTheme(1)});
  2752. switch(SRDotDX.config.themeNum) {
  2753. case 1: optsChatThemeCrimsonBlack.ele().checked = true; break;
  2754. case 0: optsChatThemeLightGrey.ele().checked = true; break;
  2755. }
  2756.  
  2757. var optsWcLeft = SRDotDX.gui.cHTML('#options_wcLeft');
  2758. optsWcLeft.ele().checked = SRDotDX.config.leftWChat;
  2759. optsWcLeft.on('click', function(){
  2760. SRDotDX.config.leftWChat = this.checked;
  2761. SRDotDX.config.extSave();
  2762. });
  2763.  
  2764. var optsWcRemove = SRDotDX.gui.cHTML('#options_wcRemove');
  2765. optsWcRemove.ele().checked = SRDotDX.config.removeWChat;
  2766. optsWcRemove.on('click', function(){SRDotDX.gui.removeWC(this.checked)});
  2767.  
  2768. //Opts -> Sidebar Options
  2769. var optsSbEnable = SRDotDX.gui.cHTML('#options_sbEnable');
  2770. optsSbEnable.ele().checked = SRDotDX.config.sbEnable;
  2771. optsSbEnable.on('click', function () {
  2772. SRDotDX.config.sbEnable = this.checked;
  2773. SRDotDX.gui.applySidebarUI(this.checked ? 1 : -1);
  2774. SRDotDX.config.save(false)
  2775. });
  2776.  
  2777. var optsSbRightSide = SRDotDX.gui.cHTML('#options_sbRightSide');
  2778. optsSbRightSide.ele().checked = SRDotDX.config.sbRightSide;
  2779. optsSbRightSide.on('click', function () {
  2780. SRDotDX.config.sbRightSide = this.checked;
  2781. SRDotDX.gui.applySidebarUI(2);
  2782. SRDotDX.config.save(false)
  2783. });
  2784.  
  2785. //var optsCbDisable = SRDotDX.gui.cHTML('#options_cbDisable');
  2786. //optsCbDisable.ele().checked = SRDotDX.config.cbDisable;
  2787. //optsCbDisable.on('click', function(){ SRDotDX.config.cbDisable = this.checked; SRDotDX.config.save(false) });
  2788.  
  2789. var optsSlimSB = SRDotDX.gui.cHTML('#options_sbSlim');
  2790. optsSlimSB.ele().checked = SRDotDX.config.sbSlim;
  2791. optsSlimSB.on('click', function () {
  2792. SRDotDX.config.sbSlim = this.checked;
  2793. SRDotDX.config.save(false);
  2794. SRDotDX.gui.toggleSlimSB();
  2795. });
  2796.  
  2797. optsMarkMyRaidsVisited.ele().checked = SRDotDX.config.markMyRaidsVisted;
  2798. optsFormatLinkOutput.ele().checked = SRDotDX.config.formatLinkOutput;
  2799. optsMarkImportedVisited.ele().checked = SRDotDX.config.markImportedVisited;
  2800. optsWhisperTo.ele().value = SRDotDX.config.whisperTo;
  2801. optsConfirmDeletes.ele().checked = SRDotDX.config.confirmDeletes;
  2802. SRDotDX.gui.cHTML('#SRDotDX_colors_background').ele().value = SRDotDX.config.bckColor;
  2803. optsHideVRaids.ele().checked = SRDotDX.config.hideVisitedRaids;
  2804. optsHideBRaids.ele().checked = SRDotDX.config.hideBotLinks;
  2805. if (SRDotDX.config.hideRaidLinks) {
  2806. optsHideARaids.ele().checked = true;
  2807. optsHideVRaids.ele().disabled = true;
  2808. optsHideBRaids.ele().disabled = true;
  2809. }
  2810.  
  2811. optsConfirmDeletes.on('click', function(){SRDotDX.config.confirmDeletes = this.checked});
  2812. optsMarkImportedVisited.on("click", function(){SRDotDX.config.markImportedVisited = this.checked;});
  2813. optsWhisperTo.on("change", function () {
  2814. console.log("[SRDotDX] Whisper person changed to " + this.value);
  2815. SRDotDX.config.whisperTo = this.value;
  2816. });
  2817. SRDotDX.gui.cHTML('#SRDotDX_colors_background').on("change", function(){SRDotDX.config.bckColor = this.value;});
  2818. optsFormatLinkOutput.on("click", function(){SRDotDX.config.formatLinkOutput = this.checked;});
  2819. optsMarkMyRaidsVisited.on("click", function(){SRDotDX.config.markMyRaidsVisted = this.checked;});
  2820. optsHideARaids.on("click", function(){
  2821. document.getElementById('SRDotDX_options_hideVisitedRaids').disabled = this.checked;
  2822. document.getElementById('SRDotDX_options_hideSeenRaids').disabled = this.checked;
  2823. SRDotDX.config.hideRaidLinks = this.checked;
  2824. SRDotDX.gui.cHTML('#SRDotDX_raidClass').html('.SRDotDX_raid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2825. }, true);
  2826. optsHideBRaids.on("click", function(){SRDotDX.gui.switchBot()}, true);
  2827. optsHideVRaids.on("click", function(){
  2828. SRDotDX.config.hideVisitedRaids = this.checked;
  2829. SRDotDX.gui.cHTML('#SRDotDX_visitedRaidClass').html('.SRDotDX_visitedRaid {display: ' + (this.checked ? 'none !important' : 'block') + '}', true);
  2830. }, true);
  2831.  
  2832. //CHAT TAB CLICK SCROLL (id=chat_tab, class=chat_message_window)
  2833. document.getElementById('chat_tab').addEventListener("click", function() {
  2834. document.getElementById('lots_tab_pane').style.display = 'none';
  2835. setTimeout(function(){
  2836. var el = document.getElementsByClassName('chat_message_window')[SRDotDX.util.getChatNumber()];
  2837. console.log("[DotDX] Scrolling chat window " + el.scrollTop + " : " + el.scrollHeight);
  2838. el.scrollTop = el.scrollHeight;
  2839. SRDotDX.gui.selectRaidsToJoin();
  2840. }, 50);
  2841. }, true);
  2842.  
  2843. //RAIDS TAB CLICK EVENT LISTENER
  2844. document.getElementById('lots_tab').addEventListener("click", function() {
  2845. setTimeout(SRDotDX.gui.selectRaidsToJoin, 50)
  2846. }, true);
  2847.  
  2848. //FriendShare
  2849. SRDotDX.gui.refreshFriends();
  2850.  
  2851. // Filtering tab
  2852. SRDotDX.gui.createFilterTab();
  2853.  
  2854. var filterChatCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterLinks');
  2855. filterChatCb.on("click", function () {
  2856. SRDotDX.config.filterChatLinks = this.checked;
  2857. SRDotDX.gui.toggleFiltering();
  2858. }, true).ele().checked = SRDotDX.config.filterChatLinks;
  2859.  
  2860. var filterListCb = SRDotDX.gui.cHTML('#SRDotDX_options_perRaidFilterRaidList');
  2861. filterListCb.on("click", function () {
  2862. SRDotDX.config.filterRaidList = this.checked;
  2863. SRDotDX.gui.toggleFiltering();
  2864. }, true).ele().checked = SRDotDX.config.filterRaidList;
  2865.  
  2866. SRDotDX.gui.cHTML('li').set({class: 'rate'}).html('<a class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.reload(); return false;">Reload Game</a>', false).attach('after', 'quicklinks_favorite_block');
  2867. if(!SRDotDX.config.removeWChat) SRDotDX.gui.cHTML('li').set({id: 'wcbutton', class: 'rate'}).html('<a id="hideWCtxt" class="spritegame" href="http://www.kongregate.com/games/5thPlanetGames/dawn-of-the-dragons" onclick="SRDotDX.gui.hideWC(false); return false;">' + (SRDotDX.config.hideWChat ? 'Show World Chat' : 'Hide World Chat') + '</a>', false).attach('after', 'quicklinks_play_later_block');
  2868.  
  2869. //Chat buttons overlay div
  2870. var hd = document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML;
  2871. document.getElementById('chat_window_header').getElementsByClassName('room_name_container')[0].innerHTML = hd + '<div class="dotdx_chat_overlay">DotDX: <span id="dotdx_chat_overlay"></span></div>';
  2872. setTimeout(SRDotDX.gui.BeginDeletingExpiredUnvisitedRaids, 10000);
  2873. //SRDotDX.util.updateUser(true);
  2874. window.userInt = setInterval(function(){
  2875. if(typeof active_user == 'object' && active_user.username().toLowerCase() != 'guest') {
  2876. SRDotDX.config.kongUser = active_user.username();
  2877. SRDotDX.config.kongId = active_user.id();
  2878. SRDotDX.config.kongAuth = active_user.gameAuthToken();
  2879. console.log("[DotDX] Initialized user: " + SRDotDX.config.kongUser + " | " + SRDotDX.config.kongId);
  2880. clearInterval(window.userInt);
  2881. }
  2882. else console.log("[DotDX] User init failed... trying again");
  2883. },3000);
  2884. window.guildInt = setInterval(function(){
  2885. if( typeof holodeck == 'object' &&
  2886. typeof holodeck._guildRosters == 'object' &&
  2887. Object.keys(holodeck._guildRosters).length > 0 &&
  2888. typeof holodeck.getGuildRoomForCurrentGameCookie == 'function' &&
  2889. typeof holodeck.getGuildRoomForCurrentGameCookie().guild_id == 'string') {
  2890. var guildUsers = holodeck._guildRosters[holodeck.getGuildRoomForCurrentGameCookie().guild_id];
  2891. var i = guildUsers.length;
  2892. console.log("[DotDX] Received guild roster list, number of entries: " + guildUsers.length);
  2893. clearInterval(window.guildInt);
  2894. while(i--) if(typeof SRDotDX.config.ignUsers[guildUsers[i].username] == 'undefined') SRDotDX.config.ignUsers[guildUsers[i].username] = guildUsers[i].game_character_name;
  2895. }
  2896. else console.log("[DotDX] Guild roster not processed... trying again");
  2897. },10000);
  2898. console.log('[DotDX] DotDeXtension loading complete');
  2899. SRDotDX.gui.doStatusOutput('Loaded successfully', 2000, false);
  2900. setTimeout(function(){delete SRDotDX.gui.load; delete SRDotDX.load},1000);
  2901. setTimeout(SRDotDX.config.save, 2000);
  2902. }
  2903. else {
  2904. setTimeout(SRDotDX.gui.load, 500)
  2905. }
  2906. },
  2907. fsEleClick: function (e) {
  2908. e = e || window.event;
  2909. var el = e.target.id.split(':');
  2910. if (el[0] == 'fs') {
  2911. SRDotDX.config.friendUsers[el[1]][el[2]] = e.target.checked;
  2912. }
  2913. },
  2914. FPXraidLinkClick: function(id) {
  2915. if (!SRDotDX.gui.joining) SRDotDX.request.joinRaid(SRDotDX.config.raidList[id]);
  2916. else SRDotDX.gui.joinRaidList.push(SRDotDX.config.raidList[id]);
  2917. },
  2918. FPXLandButtonHandler: function (ele, name) {
  2919. var x = name.charAt(name.length - 1), sign = 1;
  2920. if (name.charAt(3) != 'p')sign = -1;
  2921. document.FPXLandForm.elements["tf_" + x].value = parseInt(document.FPXLandForm.elements["tf_" + x].value, 10) + (10 * sign);
  2922. SRDotDX.gui.FPXLandUpdater();
  2923. },
  2924. FPXLandUpdater: function () {
  2925. var owned = [0, 0, 0, 0, 0, 0, 0, 0, 0], els = document.FPXLandForm, i = 9;
  2926. while (i--) owned[i] = parseInt(els.elements['tf_' + (i + 1)].value, 10);
  2927. var ratio = FPX.LandCostRatio(owned), best = 0, cn;
  2928. i = 9;
  2929. while (i--) {
  2930. cn = document.getElementById('b_' + (i + 1)).className;
  2931. if (cn.indexOf('landpmbutton ') == -1) document.getElementById('b_' + (i + 1)).className = cn.replace('landpmbuttonhigh', 'landpmbutton');
  2932. //document.getElementById('b_'+(i+1)).prevClassName = 'landpmbutton';
  2933. if (ratio[i] > ratio[best]) best = i;
  2934. }
  2935. cn = document.getElementById('b_' + (best + 1)).className;
  2936. document.getElementById('b_' + (best + 1)).className = cn.replace('landpmbutton', 'landpmbuttonhigh');
  2937. },
  2938. FPXLandButtonSave: function () {
  2939. var els = document.FPXLandForm, i = 9;
  2940. while (i--) SRDotDX.config.FPXLandOwnedCount[i] = els.elements['tf_' + (i + 1)].value;
  2941. SRDotDX.config.save(false);
  2942. SRDotDX.gui.doStatusOutput('Land count saved!');
  2943. },
  2944. FPXraidListMouseDown: function (e) {
  2945. e.preventDefault();
  2946. e.stopPropagation();
  2947. var classtype = e.target.className;
  2948. e = e || window.event;
  2949. if (e.which == 1) {
  2950. switch (classtype) {
  2951. case 'dotdxRaidListDelete':
  2952. SRDotDX.gui.deleteRaid(e.target.parentNode);
  2953. break;
  2954. case 'DotDX_RaidLink':
  2955. SRDotDX.gui.FPXraidLinkClick(e.target.parentNode.getAttribute("raidid"));
  2956. break;
  2957. }
  2958. }
  2959. },
  2960. chatWindowContextMenu: function (e) {
  2961. e = e || window.event;
  2962. var clickedClass = e.target.className.split(" "), nick = "";
  2963. console.log('[DotDX] Chat window menu [' + e.target.className + ']');
  2964. if (clickedClass[0] === 'username' && clickedClass[1] === 'chat_message_window_username') {
  2965. nick = e.target.getAttribute('dotdxname');
  2966. var frTxt = SRDotDX.config.friendUsers[nick]?'unFriend':'Friend';
  2967. var uMenu = document.getElementById(clickedClass[clickedClass.length - 1]);
  2968. if(uMenu !== null) {
  2969. uMenu.innerHTML = '<span class="user dotdx_name_' + nick + '">' + nick + '</span><span class="user dotdx_friend_' + nick + '">' + frTxt + '</span><span class="user dotdx_slap_' + nick + '">Slap</span><span class="user dotdx_mute_' + nick + '">Mute</span>';
  2970. uMenu.style.maxWidth = "220px";
  2971. }
  2972. e.preventDefault();
  2973. e.stopPropagation();
  2974. }
  2975. else if(clickedClass[0] === 'chat_input') {
  2976. e.target.value = '';
  2977. e.preventDefault();
  2978. e.stopPropagation();
  2979. }
  2980. return false;
  2981. },
  2982. chatWindowMouseDown: function (e) {
  2983. e = e || window.event;
  2984. var clickedClass = e.target.className.split(" "), nick = "";
  2985. console.log('[DotDX] Chat window (' + e.which + ') [' + e.target.className + ']');
  2986. if(e.which === 1) {
  2987. switch(clickedClass[0]) {
  2988. case 'username':
  2989. if(clickedClass[1] === 'chat_message_window_username')
  2990. {
  2991. e.preventDefault();
  2992. e.stopPropagation();
  2993. nick = e.target.getAttribute('dotdxname');
  2994. console.log("[DotDX] Whisp to user with nick [" + nick + "]");
  2995. holodeck.chatWindow().insertPrivateMessagePrefixFor(nick);
  2996. }
  2997. break;
  2998. case 'chatRaidLink':
  2999. e.preventDefault();
  3000. e.stopPropagation();
  3001. var raid = clickedClass[1].split("|");
  3002. var rObj = {id: raid[0], hash: raid[1], boss: raid[2], diff: raid[3], sid: raid[4]};
  3003. if (!SRDotDX.gui.joining) SRDotDX.request.joinRaid(rObj);
  3004. else SRDotDX.gui.joinRaidList.push(rObj);
  3005. break;
  3006. case 'user':
  3007. e.preventDefault();
  3008. e.stopPropagation();
  3009. var classTokens = clickedClass[1].split("_");
  3010. switch (classTokens[1]) {
  3011. case 'slap':
  3012. var num = Math.round((Math.random() * (SRDotDX.slapSentences.length - 1)));
  3013. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g, classTokens[2]) + '*');
  3014. break;
  3015. case 'mute':
  3016. SRDotDX.config.mutedUsers[classTokens[2]] = true;
  3017. SRDotDX.config.save(false);
  3018. break;
  3019. case 'friend':
  3020. if (typeof SRDotDX.config.friendUsers[classTokens[2]] == 'object') delete SRDotDX.config.friendUsers[classTokens[2]];
  3021. else SRDotDX.config.friendUsers[classTokens[2]] = [false, false, false, false, true];
  3022. SRDotDX.config.save(false);
  3023. SRDotDX.gui.refreshFriends();
  3024. break;
  3025. case 'name':
  3026. holodeck.showMiniProfile(classTokens[2]);
  3027. break;
  3028. }
  3029. e.target.parentNode.style.maxWidth = "0";
  3030. }
  3031. return false;
  3032. }
  3033. },
  3034. raidListItemUpdate: function (id) {
  3035. var ele = document.getElementById('DotDX_' + id);
  3036. var r = SRDotDX.config.raidList[id];
  3037. if(ele !== null && typeof r === 'object') ele.children[2].innerHTML = (r.visited ? '&#9733;' : '');
  3038. },
  3039. raidListItemRemoveById: function (id) {
  3040. var ele = document.getElementById('DotDX_' + id);
  3041. if(ele !== null) ele.parentNode.removeChild(ele);
  3042. },
  3043. toggleCSS: function (p) {
  3044. if (p) {
  3045. var ele = document.getElementById(p.id);
  3046. if(ele !== null) {
  3047. document.head.removeChild(ele);
  3048. SRDotDX.gui.cHTML("style").set({
  3049. type: "text/css",
  3050. id: p.id
  3051. }).text(p.cls).attach("to", document.head);
  3052. }
  3053. }
  3054. },
  3055. toggleRaid: function (type, id, tog) {
  3056. var d = document.getElementsByClassName("DotDX_raidId_" + id);
  3057. if (typeof SRDotDX.config.raidList[id] === 'object') {
  3058. var raid = SRDotDX.config.raidList[id];
  3059. raid = SRDotDX.getRaidDetails("&kv_difficulty=" + raid.diff + "&kv_hash=" + raid.hash + "&kv_raid_boss=" + raid.boss + "&kv_raid_id=" + raid.id);
  3060. }
  3061. var i = d.length;
  3062. while (i--) {
  3063. if (tog && d[i].className.indexOf('DotDX_' + type + 'Raid') < 0) d[i].className += ' DotDX_' + type + 'Raid';
  3064. else if (!tog && d[i].className.indexOf('DotDX_' + type + 'Raid') >= 0) d[i].className = d[i].className.replace(new RegExp('DotDX_' + type + 'Raid( |$)', 'i'), '');
  3065. if (typeof raid == 'object') d[i].getElementsByTagName('a')[0].innerHTML = raid.linkText();
  3066. }
  3067. }
  3068. },
  3069. searchPatterns: {
  3070. z1: ['kobold', 'scorp', 'ogre'],
  3071. z2: ['rhino', 'alice', 'lurker'],
  3072. z3: ['4ogre', 'squid', 'batman', 'drag', 'tainted'],
  3073. z4: ['bmane', '3dawg', 'hydra', 'sircai', 'tyranthius'],
  3074. z5: ['ironclad', 'zombiehorde', 'stein', 'bogstench', 'nalagarst'],
  3075. z6: ['gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia'],
  3076. z7: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius'],
  3077. z8: ['hargamesh', 'grimsly', 'rift', 'sisters', 'mardachus'],
  3078. z9: ['mesyra', 'nimrod', 'phaedra', 'tenebra', 'valanazes'],
  3079. "z1_9": ['kobold', 'scorp', 'ogre', 'rhino', 'alice', 'lurker', '4ogre', 'squid', 'batman', 'drag', 'tainted', 'bmane', '3dawg', 'hydra', 'sircai', 'tyranthius', 'ironclad', 'zombiehorde', 'stein', 'bogstench', 'nalagarst', 'gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia', 'maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'hargamesh', 'grimsly', 'rift', 'sisters', 'mardachus', 'mesyra', 'nimrod', 'phaedra', 'tenebra', 'valanazes'],
  3080. "z9.5": ['pumpkin', 'jacksrevenge1'],
  3081. "z9.7": ['hellemental', 'shadow'],
  3082. z10: ['krugnug', 'tomb_gargoyle', 'leonine_watcher', 'centurion_marius', 'caracalla'],
  3083. z14: ['zugen', 'gulkinari', 'verkiteia', 'cannibal_barbarians'],
  3084. z15: ['korxun', 'xerkara', 'shaar', 'nereidon', 'drulcharus'],
  3085. farm: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'drag', 'tainted', 'ogre', 'scorp', 'baroness'],
  3086. flute: ['kobold', 'scorp', 'ogre', 'rhino', 'alice', 'lurker', '4ogre', 'squid', 'batman', 'drag', 'tainted', 'harpy', 'spider', 'djinn', 'evilgnome', 'basilisk', 'roc', 'gladiators', 'chimera', 'crabshark', 'gorgon', 'warewolfpack', 'blobmonster', 'giantgolem'],
  3087. tower: ['thaltherda', 'hurkus', 'malleus'],
  3088. small: ['kobold', 'rhino', 'bmane', '4ogre', 'serpina', 'dragons_lair', 'gunnar', 'hargamesh', 'ironclad', 'krugnug', 'maraak', 'thaltherda', 'zugen', 'nereidon', 'mestr_rekkr_rematch', 'ghostly_alchemist', 'master_ninja_bakku','valtrias'],
  3089. medium: ['alice', 'erakka_sak', 'grimsly', '3dawg', 'scorp', 'nidhogg', 'tomb_gargoyle', 'squid', 'tisiphone', 'zombiehorde', 'baroness', 'hurkus', 'gulkinari', 'korxun', 'drunken_ragunt', 'shadow', 'rudaru_the_axe_master'],
  3090. large: ['ogre', 'batman', 'hydra', 'kang', 'leonine_watcher', 'lurker', 'rift', 'stein', 'wexxa', 'teremarthu', 'zralkthalat', 'malleus', 'verkiteia', 'drulcharus', 'gigantomachy', 'green_killers', 'yule_present_bearer'],
  3091. epic: ['bogstench', 'centurion_marius', 'drag', 'tainted', 'guilbert', 'pumpkin', 'jacksrevenge1', 'mesyra', 'nimrod', 'phaedra', 'sircai', 'sisters', 'ulfrik', 'frogmen_assassins', 'burbata', 'yydians_sanctuary', 'grundus', 'shaar', 'tuxargus', 'nylatrix', 'rannveig', 'valley_of_death', 'murgrux_the_mangler'],
  3092. colossal: ['bellarius', 'caracalla', 'kalaxia', 'tyranthius', 'mardachus', 'nalagarst', 'tenebra', 'valanazes', 'siculus', 'ruzzik', 'cannibal_barbarians', 'vortex_abomination', 'xerkara', 'keron', 'clockwork_dragon', 'krxunara', 'hellemental', 'kanehuar_yachu','karkata'],
  3093. gigantic: ['imryx', 'trekex', 'gataalli_huxac', 'kessov_fort'],
  3094. glyph: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius'],
  3095. goblin: ['master_ninja_bakku', 'green_killers'],
  3096. citadel: ['thaltherda', 'hurkus', 'malleus', 'yydians_sanctuary', 'clockwork_dragon', 'krxunara','karkata'],
  3097. festival: ['vortex_abomination', 'drunken_ragunt', 'mestr_rekkr_rematch', 'valley_of_death', 'green_killers', 'murgrux_the_mangler'],
  3098. aquatic: ['dirthax', 'frogmen_assassins', 'lurker', 'nidhogg', 'crabshark', 'squid', 'thaltherda', 'nereidon', 'krxunara', 'trekex', 'paracoprion', 'bog_bodies','karkata'],
  3099. beastman: ['bmane', 'burbata', 'frogmen_assassins', 'batman', 'war_boar', 'hargamesh', 'hurkus', 'krugnug', 'malleus', 'scorp', 'ruzzik', 'squid', 'korxun', 'shaar', 'nereidon', 'drulcharus', 'trekex'],
  3100. bludheim: ['gunnar', 'nidhogg', 'kang', 'ulfrik', 'kalaxia'],
  3101. colosseum: ['gladiators', 'serpina', 'crabshark', 'tisiphone', 'chimera', 'green_killers'],
  3102. construct: ['cedric', 'erakka_sak', 'giantgolem', 'leonine_watcher', 'tomb_gargoyle', 'stein', 'yydians_sanctuary', 'clockwork_dragon'],
  3103. demon: ['apoc_demon', '3dawg', 'tyranthius', 'lunacy', 'salome', 'sircai', 'blobmonster', 'malchar', 'zralkthalat', 'krxunara', 'adrastos', 'hellemental','valtrias'],
  3104. dragon: ['bellarius', 'corrupterebus', 'dragons_lair', 'echidna', 'drag', 'kalaxia', 'krykagrius', 'mardachus', 'mesyra', 'nalagarst', 'nimrod', 'phaedra', 'rhalmarius_the_despoiler', 'tainted', 'tenebra', 'thaltherda', 'tisiphone', 'grundus', 'valanazes', 'verkiteia', 'winter_kessov', 'xerkara', 'nereidon', 'drulcharus', 'keron', 'tuxargus', 'nylatrix', 'clockwork_dragon', 'imryx'],
  3105. giant: ['gigantomachy', 'gataalli_huxac', 'kanehuar_yachu'],
  3106. human: ['agony', 'rhino', 'gladiators', 'baroness', 'warewolfpack', 'alice', 'cannibal_barbarians', 'guilbert', 'gunnar', 'pumpkin', 'jacksrevenge1', 'lunacy', 'slaughterers', 'ulfrik', 'mestr_rekkr_rematch', 'rannveig', 'adrastos', 'legion_of_darkness', 'yule_present_bearer'],
  3107. magical: ['djinn', 'grimsly', 'hargamesh', 'fairy_prince', 'rift', 'sisters', 'vortex_abomination', 'grundus', 'shadow', 'bog_bodies'],
  3108. ogre: ['ogre', '4ogre', 'felendis', 'zugen', 'korxun', 'drunken_ragunt', 'valley_of_death', 'murgrux_the_mangler'],
  3109. orc: ['darhednal', 'rudaru_the_axe_master', 'green_killers'],
  3110. qwiladrian: ['gulkinari', 'teremarthu', 'vortex_abomination'],
  3111. ryndor: ['bmane', '3dawg', 'hydra', 'sircai', 'tyranthius'],
  3112. siege: ['echidna', 'ulfrik', 'yydians_sanctuary', 'drunken_ragunt', 'kessov_fort'],
  3113. undead: ['agony', 'bogstench', 'serpina', 'ironclad', 'malleus', 'nalagarst', 'stein', 'siculus', 'zombiehorde', 'caracalla', 'centurion_marius', 'ghostly_alchemist'],
  3114. underground: ['maraak', 'erakka_sak', 'wexxa', 'guilbert', 'bellarius', 'spider', 'tomb_gargoyle', 'leonine_watcher', 'centurion_marius', 'caracalla', 'dragons_lair', 'kang', '3dawg', 'lurker', 'salome', 'stein', 'imryx']
  3115. },
  3116. shortcuts: {
  3117. bb: { n: 'bb', bn: 'BB', desc: 'Briseis\' Blessing [magic]' },
  3118. bok: { n: 'bok', bn: 'BoK', desc: 'Book of Knowledge [consumable]' },
  3119. bsi: { n: 'bsi', bn: 'BSI', desc: 'Battle Strength Index<br>(Base Attack + Base Defense) / Level' },
  3120. ck: { n: 'ck', bn: 'CK', desc: 'Chryseis\' Kiss [magic]' },
  3121. dah: { n: 'dah', bn: 'Dah', desc: 'Dahrizon [general]' },
  3122. dl: { n: 'dl', bn: 'DL', desc: 'Dragons Lair [raid]' },
  3123. gg: { n: 'gg', bn: 'GG', desc: 'Golden Garden [equip]'},
  3124. gid: { n: 'gid', bn: 'GID', desc: 'Greater Impending Doom [magic]' },
  3125. gl: { n: 'gl', bn: 'GL', desc: 'Greenleaf [equip]'},
  3126. il: { n: 'il', bn: 'IL', desc: 'Insanity Laughs [magic]' },
  3127. lsi: { n: 'lsi', bn: 'LSI', desc: 'Leveling Speed Index<br>(Base Stamina * 2 + Base Energy) / Level' },
  3128. mach: { n: 'mach', bn: 'Mach', desc: 'Machaon the Healer [general]' },
  3129. nm: { n: 'nm', bn: 'NM', desc: 'Nightmare [difficulty]' },
  3130. pc: { n: 'pc', bn: 'PC', desc: 'Planet Coins [currency]' },
  3131. perc: { n: 'perc', bn: 'perc', desc: 'Perception [stat]' },
  3132. qm: { n: 'qm', bn: 'QM', desc: 'Quicken Mind [magic]' },
  3133. sock: { n: 'sock', bn: 'SoCK', desc: 'Sword of Conquered Kingdoms [equip]' },
  3134. sor: { n: 'sor', bn: 'SoR', desc: 'Shield of Ryndor [equip]' },
  3135. sp: { n: 'sp', bn: 'SP', desc: 'Stat Points [stat]' },
  3136. wr: { n: 'wr', bn: 'WR', desc: 'World Raid [raid]' }
  3137. },
  3138. raids: {
  3139. adrastos: {name: 'Adrastos of the Kavala ', shortname: 'Adrastos', id: 'adrastos', type: 'Human, Demon', stat: 'H', size: 101, nd: 5, duration: 192, health: [5000000000, 6250000000, 8750000000, 10000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3140. agony: {name: 'Agony', shortname: 'Agony', id: 'agony', type: 'Undead, Human', stat: 'H', size: 101, nd: 5, duration: 168, health: [700000000, 875000000, 1120000000, 1400000000, 0, 0]},
  3141. apoc_demon: {name: 'Apocolocyntosised Demon', shortname: 'Apoc', id: 'apoc_demon', type: 'Demon', stat: 'H', size: 50, nd: 3, duration: 144, health: [500000000, 750000000, 1000000000, 2000000000, 0, 0], lt: ['apoc', 'apoc', 'apoc', 'apoc']},
  3142. djinn: {name: 'Al-Azab', shortname: 'Azab', id: 'djinn', type: 'Magical Creature', stat: 'H', size: 100, nd: 4, duration: 168, health: [55000000, 68750000, 88000000, 110000000, 0, 0]},
  3143. spider: {name: 'Arachna', shortname: 'Arachna', id: 'spider', type: 'Underground', stat: 'H', size: 50, nd: 3, duration: 144, health: [22000000, 27500000, 35200000, 44000000, 0, 0]},
  3144. rhino: {name: 'Ataxes', shortname: 'Ataxes', id: 'rhino', type: 'Human', stat: 'S', size: 10, nd: 2, duration: 120, health: [2000000, 2500000, 3200000, 4000000, 0, 0]},
  3145. gladiators: {name: 'Batiatus Gladiators ', shortname: 'Gladiators', id: 'gladiators', type: 'Colosseum, Human', stat: 'H', size: 10, nd: 2, duration: 120, health: [12000000, 15000000, 19200000, 24000000, 0, 0]},
  3146. bellarius: {name: 'Bellarius the Guardian', shortname: 'Bellarius', id: 'bellarius', type: 'Dragon, Underground', stat: 'S', size: 500, nd: 6, duration: 96, health: [900000000, 1125000000, 1440000000, 1800000000, 0, 0]},
  3147. baroness: {name: 'The Baroness', shortname: 'Baroness', id: 'baroness', type: 'Human', stat: 'S', size: 50, nd: 3, duration: 60, health: [68000000, 85000000, 108800000, 136000000, 0, 0]},
  3148. werewolfpack: {name: 'The Black Moon Pack', shortname: 'Black Moon', id: 'werewolfpack', type: 'Human', stat: 'H', size: 50, nd: 3, duration: 144, health: [135000000, 168750000, 216000000, 270000000, 0, 0]},
  3149. alice: {name: 'Bloody Alice', shortname: 'Alice', id: 'alice', type: 'Human', stat: 'S', size: 50, nd: 3, duration: 120, health: [15000000, 18750000, 24000000, 30000000, 0, 0]},
  3150. bog_bodies: {name: 'The Bog Bodies', shortname: 'Bodies', id: 'bog_bodies', type: 'Magical Creature, Aquatic', stat: 'H', size:101, nd:5, duration:192, health: [3750000000,7500000000,11250000000,15000000000,0,0], lt: ['keron', 'keron', 'keron', 'keron']},
  3151. bogstench: {name: 'Bogstench', shortname: 'Bogstench', id: 'bogstench', type: 'Undead', stat: 'S', size: 250, nd: 5, duration: 96, health: [450000000, 562500000, 720000000, 900000000, 0, 0]},
  3152. '4ogre': {name: 'Briareus the Butcher', shortname: 'Briareus', id: '4ogre', type: 'Ogre', stat: 'S', size: 10, nd: 2, duration: 72, health: [4500000, 5625000, 7200000, 9000000, 0, 0]},
  3153. bmane: {name: 'Bloodmane', shortname: 'Bloodmane', id: 'bmane', type: 'Beastman, Ryndor', stat: 'S', size: 10, nd: 2, duration: 72, health: [7000000, 8750000, 11200000, 14000000, 0, 0]},
  3154. burbata: {name: 'Burbata the Spine-Crusher', shortname: 'Burbata', id: 'burbata', type: 'Beastman', stat: 'S', size: 250, nd: 5, duration: 96, health: [1000000000, 2000000000, 3500000000, 5000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3155. cannibal_barbarians: {name: 'Cannibal Barbarians', shortname: 'Cannibals', id: 'cannibal_barbarians', type: 'Human', stat: 'S', size: 500, nd: 6, duration: 128, health: [60000000000, 90000000000, 180000000000, 240000000000, 0, 0], lt: ['canib', 'canib', 'canib', 'canib']},
  3156. cedric: {name: 'Cedric the Smashable', shortname: 'Cedric', id: 'cedric', type: 'Construct', stat: 'ESH', size: 90000, nd: 0, duration: 24, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3157. caracalla: {name: 'Caracalla', shortname: 'Caracalla', id: 'caracalla', type: 'Undead, Underground', stat: 'S', size: 500, nd: 6, duration: 128, health: [50000000000, 75000000000, 150000000000, 200000000000, 0, 0], lt: ['cara', 'cara', 'cara', 'cara']},
  3158. harpy: {name: 'Celeano', shortname: 'Celeano', id: 'harpy', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [3000000, 3750000, 4800000, 6000000, 0, 0]},
  3159. centurion_marius: {name: 'Centurion Marius', shortname: 'Marius', id: 'centurion_marius', type: 'Undead, Underground', stat: 'S', size: 250, nd: 5, duration: 96, health: [10000000000, 12000000000, 16000000000, 40000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3160. kobold: {name: 'Chieftain Horgrak', shortname: 'Horgrak', id: 'kobold', type: '', stat: 'S', size: 10, nd: 2, duration: 168, health: [150000, 187500, 240000, 300000, 0, 0]},
  3161. clockwork_dragon: {name: 'Clockwork Dragon', shortname: 'Clock Dragon', id: 'clockwork_dragon', type: 'Construct, Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [70000000000, 140000000000, 210000000000, 280000000000], lt: ['clock', 'clock', 'clock', 'clock']},
  3162. corrupterebus: {name: 'Corrupted Erebus', shortname: 'Cbus', id: 'corrupterebus', type: 'Dragon', stat: 'ESH', size: 90000, nd: 0, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3163. serpina: {name: 'Countess Serpina', shortname: 'Serp', id: 'serpina', type: 'Colosseum, Undead', stat: 'E', size: 15, nd: 2, duration: 5, health: [75000000, 112500000, 150000000, 187500000, 0, 0]},
  3164. darhednal: {name: 'Dar\'Hed\'Nal', shortname: 'Dar\'Hed\'Nal', id: 'darhednal', type: 'Orc', stat: 'H', size: 50, nd: 3, duration: 144, health: [500000000, 1000000000, 1500000000, 2000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3165. basilisk: {name: 'Deathglare', shortname: 'Deathglare', id: 'basilisk', type: '', stat: 'H', size: 50, nd: 3, duration: 144, health: [45000000, 56250000, 72000000, 90000000, 0, 0]},
  3166. dirthax: {name: 'Dirthax', shortname: 'Dirthax', id: 'dirthax', type: 'Aquatic', stat: 'H', size: 100, nd: 4, duration: 168, health: [550000000, 687500000, 880000000, 1100000000, 0, 0]},
  3167. doomglare: {name: 'Doomglare', shortname: 'Doomglare', id: 'doomglare', type: '', stat: 'H', size: 100, nd: 4, duration: 12, health: [500000000, 1250000000, 2000000000, 3000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3168. dragons_lair: {name: 'Dragons Lair', shortname: 'Lair', id: 'dragons_lair', type: 'Dragon, Underground', stat: 'S', size: 13, nd: 2, duration: 5, health: [100000000, 500000000, 1000000000, 1500000000, 0, 0], lt: ['nDl', 'hDl', 'lDl', 'nmDl']},
  3169. drulcharus: {name: 'Drulcharus', shortname: 'Drulcharus', id: 'drulcharus', type: 'Dragon, Beastman', stat: 'S', size: 100, nd: 5, duration: 72, health: [10000000000, 15000000000, 20000000000, 25000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3170. drunken_ragunt: {name: 'Drunken Ragunt', shortname: 'Ragunt', id: 'drunken_ragunt', type: 'Siege, Ogre', stat: 'S', size: 50, nd: 5, duration: 60, health: [8500000000, 14450000000, 18700000000, 25500000000, 0, 0], lt: ['rag', 'rag', 'rag', 'rag']},
  3171. echidna: {name: 'Echidna', shortname: 'Echidna', id: 'echidna', type: 'Dragon, Siege', stat: 'ESH', size: 90000, nd: 0, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3172. kessov_fort: {name: 'Engines of War', shortname: 'Engines', id: 'kessov_fort', type: 'Siege', stat: 'S', size: 800, nd: 6, duration: 128, health: [300000000000, 600000000000, 900000000000, 1200000000000, 0, 0], lt: ['eow', 'eow', 'eow', 'eow']},
  3173. erakka_sak: {name: 'Erakka-Sak', shortname: 'Erakka', id: 'erakka_sak', type: 'Underground, Construct', stat: 'S', size: 50, nd: 3, duration: 60, health: [62000000, 77500000, 99200000, 124000000, 0, 0]},
  3174. giantgolem: {name: 'Euphronios', shortname: 'Euphronios', id: 'giantgolem', type: 'Construct', stat: 'H', size: 101, nd: 5, duration: 168, health: [450000000, 562500000, 720000000, 900000000, 0, 0]},
  3175. echthros: {name: 'Echthros', shortname: 'Echty', id: 'echthros', type: '', stat: 'ESH', size: 90000, nd: 2, duration: 96, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3176. drag: {name: 'Erebus the Black', shortname: 'Erebus', id: 'drag', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 168, health: [150000000, 187500000, 240000000, 300000000, 0, 0]},
  3177. frogmen_assassins: {name: 'Frog-Men Assassins', shortname: 'Frog-Men', id: 'frogmen_assassins', type: 'Beastman, Aquatic', stat: 'S', size: 250, nd: 5, duration: 96, health: [16000000000, 24000000000, 32000000000, 64000000000, 0, 0], lt: ['cara', 'cara', 'cara', 'cara']},
  3178. felendis: {name: 'Felendis & Shaoquin', shortname: 'Banhammer', id: 'felendis', type: 'Ogre', stat: 'H', size: 100, nd: 4, duration: 168, health: [441823718, 549238221, 707842125, 888007007, 0, 0]},
  3179. gataalli_huxac: {name: 'Gataalli Huxac', shortname: 'Gataalli', id: 'gataalli_huxac', type: 'Giant', stat: 'S', size: 800, nd: 6, duration: 128, health: [375000000000, 750000000000, 1125000000000, 1500000000000], lt: ['gat', 'gat', 'gat', 'gat']},
  3180. ogre: {name: 'General Grune', shortname: 'Grune', id: 'ogre', type: 'Ogre', stat: 'S', size: 100, nd: 4, duration: 172, health: [20000000, 25000000, 32000000, 40000000, 0, 0]},
  3181. korxun: {name: 'General Korxun', shortname: 'Korxun', id: 'korxun', type: 'Beastman, Ogre', stat: 'S', size: 50, nd: 4, duration: 60, health: [8000000000, 12000000000, 16000000000, 20000000000, 0, 0], lt: ['z15lo', 'z15lo', 'z15lo', 'z15lo']},
  3182. ghostly_alchemist: {name: 'Ghostly Alchemist', shortname: 'Alchemist', id: 'ghostly_alchemist', type: 'Undead', stat: 'S', size: 25, nd: 4, duration: 48, health: [5000000000, 10000000000, 15000000000, 20000000000], lt: ['alch', 'alch', 'alch', 'alch']},
  3183. dreadbloom: {name: 'Giant Dreadbloom', shortname: 'Dreadbloom', id: 'dreadbloom', type: '', stat: 'H', size: 101, nd: 5, duration: 192, health: [900000000, 1125000000, 1440000000, 1800000000, 0, 0]},
  3184. gigantomachy: {name: 'Gigantomachy', shortname: 'Gigantomachy', id: 'gigantomachy', type: 'Giant', stat: 'S', size: 100, nd: 5, duration: 72, health: [25000000000, 50000000000, 75000000000, 100000000000], lt: ['gig', 'gig', 'gig', 'gig']},
  3185. batman: {name: 'Gravlok the Night-Hunter', shortname: 'Gravlok', id: 'batman', type: 'Beastman', stat: 'S', size: 100, nd: 4, duration: 72, health: [50000000, 62500000, 80000000, 100000000, 0, 0]},
  3186. green_killers: {name: 'Green Killers', shortname: 'Killers', id: 'green_killers', type: 'Orc, Goblin, Festival, Colosseum', stat: 'S', size: 100, nd: 4, duration: 48, health: [12500000000, 25000000000, 37500000000, 50000000000, 0, 0], lt: ['gk', 'gk', 'gk', 'gk']},
  3187. evilgnome: {name: 'Groblar Deathcap', shortname: 'Groblar', id: 'evilgnome', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [6000000, 7500000, 9600000, 12000000, 0, 0]},
  3188. grundus: {name: 'Grundus', shortname: 'Grundus', id: 'grundus', type: 'Dragon, Magical Creature', stat: 'H', size: 101, nd: 5, duration: 72, health: [800000000, 1600000000, 4000000000, 12000000000]},
  3189. guilbert: {name: 'Guilbert the Mad', shortname: 'Guilbert', id: 'guilbert', type: 'Underground, Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [550000000, 687500000, 880000000, 1100000000, 0, 0]},
  3190. gulkinari: {name: 'Gulkinari', shortname: 'Gulkinari', id: 'gulkinari', type: 'Qwiladrian', stat: 'S', size: 50, nd: 4, duration: 60, health: [7500000000, 9375000000, 12000000000, 15000000000, 0, 0], lt: ['gulk', 'gulk', 'gulk', 'gulk']},
  3191. gunnar: {name: 'Gunnar the Berserk', shortname: 'Gunnar', id: 'gunnar', type: 'Bludheim, Human', stat: 'S', size: 10, nd: 2, duration: 48, health: [12000000, 15000000, 19200000, 24000000, 0, 0]},
  3192. war_boar: {name: 'Hammer', shortname: 'Hammer', id: 'war_boar', type: 'Beastman', stat: 'H', size: 50, nd: 3, duration: 144, health: [220000000, 275000000, 352000000, 440000000, 0, 0]},
  3193. hargamesh: {name: 'Hargamesh', shortname: 'Hargamesh', id: 'hargamesh', type: 'Beastman, Magical Creature', stat: 'S', size: 10, nd: 2, duration: 48, health: [18000000, 22500000, 28800000, 36000000, 0, 0]},
  3194. grimsly: {name: 'Headmaster Grimsly', shortname: 'Grimsly', id: 'grimsly', type: 'Magical Creature', stat: 'S', size: 50, nd: 3, duration: 60, health: [72000000, 90000000, 115200000, 144000000, 0, 0]},
  3195. hellemental: {name: 'Hellemental', shortname: 'Hellemental', id: 'hellemental', type: 'Demon', stat: 'S', size: 500, nd: 6, duration: 128, health: [75000000000, 150000000000, 225000000000, 300000000000, 0, 0], lt: ['hell', 'hell', 'hell', 'hell']},
  3196. hurkus: {name: 'Hurkus the Eviscerator', shortname: 'Hurkus', id: 'hurkus', type: 'Beastman', stat: 'S', size: 50, nd: 4, duration: 60, health: [2812500000, 4218750000, 5625000000, 11250000000, 0, 0], lt: ['hurk', 'hurk', 'hurk', 'hurk']},
  3197. hydra: {name: 'Hydra', shortname: 'Hydra', id: 'hydra', type: 'Ryndor', stat: 'S', size: 100, nd: 4, duration: 72, health: [65000000, 81250000, 104000000, 130000000, 0, 0]},
  3198. imryx: {name: 'Imryx the Incinerator', shortname: 'Imryx', id: 'imryx', type: 'Underground, Dragon', stat: 'S', size: 800, nd: 6, duration: 128, health: [180000000000, 360000000000, 540000000000, 720000000000, 0, 0], lt: ['imx', 'imx', 'imx', 'imx']},
  3199. ironclad: {name: 'Ironclad', shortname: 'Ironclad', id: 'ironclad', type: 'Undead', stat: 'S', size: 10, nd: 2, duration: 48, health: [10000000, 12500000, 16000000, 20000000, 0, 0]}, //0.5/0.625/0.8/1
  3200. pumpkin: {name: 'Jack', shortname: 'Jack', id: 'pumpkin', type: 'Human', stat: 'S', size: 250, nd: 6, duration: 48, health: [1000000000, 1500000000, 2000000000, 3000000000], lt: ['njack', 'hjack', 'ljack', 'nmjack']},
  3201. jacksrevenge1: {name: 'Jack\'s Revenge', shortname: 'Revenge', id: 'jacksrevenge1', type: 'Human', stat: 'S', size: 250, nd: 6, duration: 48, health: [5000000000, 7500000000, 10000000000, 15000000000], lt: ['njr', 'hjr', 'ljr', 'nmjr']},
  3202. kang: {name: 'Kang-Gsod', shortname: 'Kang', id: 'kang', type: 'Bludheim, Underground', stat: 'S', size: 100, nd: 4, duration: 72, health: [95000000, 118750000, 152000000, 190000000, 0, 0]},
  3203. '3dawg': {name: 'Kerberos', shortname: 'Kerberos', id: '3dawg', type: 'Demon, Underground, Ryndor', stat: 'S', size: 50, nd: 3, duration: 72, health: [35000000, 43750000, 56000000, 70000000, 0, 0]},
  3204. keron: {name: 'Keron the Sky-Shaker', shortname: 'Keron', id: 'keron', type: 'Dragon', stat: 'H', size: 101, nd: 6, duration: 192, health: [15000000000, 18750000000, 24000000000, 30000000000, 0, 0], lt: ['keron', 'keron', 'keron', 'keron']},
  3205. kessovtowers: {name: 'Kessov Towers', shortname: 'Towers', id: 'kessovtowers', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 120, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3206. kessovtower: {name: 'Treachery and the Tower', shortname: 'Treachery', id: 'kessovtower', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 24, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3207. kessovforts: {name: 'Kessov Forts', shortname: 'Forts', id: 'kessovforts', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 120, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3208. kessovcastle: {name: 'Kessov Castle', shortname: 'Castle', id: 'kessovcastle', type: 'Siege', stat: 'ESH', size: 90000, nd: 0, duration: 144, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3209. kalaxia: {name: 'Kalaxia the Far-Seer', shortname: 'Kalaxia', id: 'kalaxia', type: 'Dragon, Bludheim', stat: 'S', size: 500, nd: 6, duration: 96, health: [800000000, 1000000000, 1280000000, 1600000000, 0, 0]},
  3210. kanehuar_yachu: {name: 'Kanehuar Yachu', shortname: 'Kane', id: 'kanehuar_yachu', type: 'Giant', stat: 'S', size: 500, nd: 6, duration: 128, health: [100000000000, 200000000000, 300000000000, 400000000000, 0, 0], lt: ['kane', 'kane', 'kane', 'kane']},
  3211. karkata: {name: 'Karkata', shortname: 'Karkata',id: 'karkata', type: 'Aquatic', stat: 'S', size:500, nd:6, duration:128, health: [95000000000,190000000000,285000000000,380000000000,0,0], lt: ['kark','kark','kark','kark']},
  3212. krugnug: {name: 'Krugnug', shortname: 'Krugnug', id: 'krugnug', type: 'Beastman', stat: 'S', size: 25, nd: 4, duration: 48, health: [1000000000, 1500000000, 2000000000, 4000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3213. krxunara: {name: 'Kr\'xunara of the Bloody Waves', shortname: 'Kr\'xunara', id: 'krxunara', type: 'Aquatic, Demon', stat: 'S', size: 500, nd: 6, duration: 128, health: [62500000000, 125000000000, 187500000000, 250000000000], lt: ['krx', 'krx', 'krx', 'krx']},
  3214. krykagrius: {name: 'Krykagrius', shortname: 'Kryk', id: 'krykagrius', type: 'Dragon', stat: 'ESH', size: 90000, nd: 0, duration: 72, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3215. legion_of_darkness: {name: 'Legions of Darkness', shortname: 'Darkness', id: 'legion_of_darkness', type: 'Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [20000000000, 40000000000, 60000000000, 80000000000], lt: ['dark', 'dark', 'dark', 'dark']},
  3216. leonine_watcher: {name: 'Leonine', shortname: 'Leonine', id: 'leonine_watcher', type: 'Underground, Construct', stat: 'S', size: 100, nd: 5, duration: 48, health: [4000000000, 6000000000, 8000000000, 16000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3217. tyranthius: {name: 'Lord Tyranthius', shortname: 'Tyr', id: 'tyranthius', type: 'Demon, Ryndor', stat: 'S', size: 500, nd: 6, duration: 168, health: [600000000, 750000000, 960000000, 1200000000, 0, 0]},
  3218. lunacy: {name: 'Lunatics', shortname: 'Lunatics', id: 'lunacy', type: 'Demon, Human', stat: 'H', size: 50, nd: 3, duration: 144, health: [180000000, 225000000, 288000000, 360000000, 0, 0]},
  3219. lurker: {name: 'Lurking Horror', shortname: 'Lurking', id: 'lurker', type: 'Underground, Aquatic', stat: 'S', size: 100, nd: 4, duration: 120, health: [35000000, 43750000, 56000000, 70000000, 0, 0]},
  3220. malleus: {name: 'Malleus Vivorum', shortname: 'Malleus', id: 'malleus', type: 'Beastman, Undead', stat: 'S', size: 100, nd: 5, duration: 72, health: [8000000000, 12000000000, 16000000000, 20000000000, 0, 0], lt: ['mall', 'mall', 'mall', 'mall']},
  3221. maraak: {name: 'Maraak the Impaler', shortname: 'Maraak', id: 'maraak', type: 'Underground', stat: 'S', size: 10, nd: 2, duration: 48, health: [15000000, 18750000, 24000000, 30000000, 0, 0]},
  3222. mardachus: {name: 'Mardachus the Destroyer', shortname: 'Mardachus', id: 'mardachus', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 96, health: [1100000000, 1375000000, 1760000000, 2200000000, 0, 0]},
  3223. master_ninja_bakku: {name: 'Master Ninja Bakku', shortname: 'Bakku', id: 'master_ninja_bakku', type: 'Goblin', stat: 'S', size: 25, nd: 4, duration: 48, health: [5500000000, 11000000000, 16500000000, 22000000000, 0, 0], lt: ['bak', 'bak', 'bak', 'bak']},
  3224. scorp: {name: 'Mazalu', shortname: 'Mazalu', id: 'scorp', type: 'Beastman', stat: 'S', size: 50, nd: 3, duration: 168, health: [5000000, 6250000, 8000000, 10000000, 0, 0]},
  3225. mestr_rekkr_rematch: {name: 'Mestr Rekkr Rematch', shortname: 'Rekkr II', id: 'mestr_rekkr_rematch', type: 'Human', stat: 'S', size: 25, nd: 4, duration: 48, health: [6000000000, 9000000000, 13200000000, 18000000000, 0, 0], lt: ['rekkr', 'rekkr', 'rekkr', 'rekkr']},
  3226. mesyra: {name: 'Mesyra the Watcher', shortname: 'Mesyra', id: 'mesyra', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1000000000, 1250000000, 1600000000, 2000000000, 0, 0]},
  3227. murgrux_the_mangler: {name: 'Murgrux the Mangler', shortname: 'Murgrux', id: 'murgrux_the_mangler', type: 'Ogre, Festival', stat: 'S', size: 250, nd: 5, duration: 48, health: [25000000000, 50000000000, 75000000000, 100000000000, 0, 0], lt: ['murg', 'murg', 'murg', 'murg']},
  3228. nalagarst: {name: 'Nalagarst', shortname: 'Nalagarst', id: 'nalagarst', type: 'Dragon, Undead', stat: 'S', size: 500, nd: 6, duration: 98, health: [700000000, 875000000, 1120000000, 1400000000, 0, 0]},
  3229. nereidon: {name: 'Nereidon the Sea Slayer', shortname: 'Nereidon', id: 'nereidon', type: 'Dragon, Beastman, Aquatic', stat: 'S', size: 30, nd: 3, duration: 48, health: [6000000000, 9000000000, 12000000000, 15000000000, 0, 0], lt: ['z15lo', 'z15lo', 'z15lo', 'z15lo']},
  3230. nidhogg: {name: 'Nidhogg', shortname: 'Nidhogg', id: 'nidhogg', type: 'Bludheim, Aquatic', stat: 'S', size: 50, nd: 3, duration: 60, health: [52000000, 65000000, 83200000, 104000000, 0, 0]},
  3231. nimrod: {name: 'Nimrod the Hunter', shortname: 'Nimrod', id: 'nimrod', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1200000000, 1500000000, 1920000000, 2400000000, 0, 0]},
  3232. nylatrix: {name: 'Nylatrix', shortname: 'Nylatrix', id: 'nylatrix', type: 'Dragon', stat: 'H', size: 101, nd: 5, duration: 192, health: [2000000000, 2500000000, 3400000000, 4000000000, 0, 0], lt: ['nker', 'hker', 'lker', 'nmker']},
  3233. paracoprion: {name: 'Paracoprion', shortname: 'Paracoprion', id: 'paracoprion', type: 'Aquatic', stat: 'H', size:101, nd:5, duration:192, health: [2000000000,4000000000,6000000000,8000000000,0,0], lt: ['keron', 'keron', 'keron', 'keron']},
  3234. phaedra: {name: 'Phaedra the Deceiver', shortname: 'Phaedra', id: 'phaedra', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 96, health: [1400000000, 1750000000, 2240000000, 2800000000, 0, 0]},
  3235. fairy_prince: {name: 'Prince Obyron', shortname: 'Obyron', id: 'fairy_prince', type: 'Magical Creature', stat: 'H', size: 10, nd: 2, duration: 120, health: [30000000, 37500000, 48000000, 60000000, 0, 0]},
  3236. roc: {name: 'Ragetalon', shortname: 'Ragetalon', id: 'roc', type: '', stat: 'H', size: 100, nd: 4, duration: 168, health: [110000000, 137500000, 176000000, 220000000, 0, 0]},
  3237. rannveig: {name: 'Rannveig', shortname: 'Rannveig', id: 'rannveig', type: 'Human', stat: 'E', size: 250, nd: 6, duration: 128, health: [15000000000, 30000000000, 45000000000, 60000000000, 0, 0], lt: ['rann', 'rann', 'rann', 'rann']},
  3238. rhalmarius_the_despoiler: {name: 'Rhalmarius the Despoiler', shortname: 'Rhalmarius', id: 'rhalmarius_the_despoiler', type: 'Dragon', stat: 'H', size: 100, nd: 6, duration: 84, health: [500000000, 1250000000, 3125000000, 7812500000, 0, 0]},
  3239. tomb_gargoyle: {name: 'Riddler Gargoyle', shortname: 'Riddler', id: 'tomb_gargoyle', type: 'Underground, Construct', stat: 'S', size: 50, nd: 4, duration: 48, health: [2000000000, 3000000000, 4000000000, 8000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3240. rift: {name: 'Rift the Mauler', shortname: 'Rift', id: 'rift', type: 'Magical Creature', stat: 'S', size: 100, nd: 4, duration: 72, health: [125000000, 156250000, 200000000, 250000000, 0, 0]},
  3241. rudaru_the_axe_master: {name: 'Rudaru the Axe Master', shortname: 'Rudaru', id: 'rudaru_the_axe_master', type: 'Orc', stat: 'S', size: 50, nd: 4, duration: 48, health: [10500000000, 21000000000, 31500000000, 36750000000, 0, 0], lt: ['rud', 'rud', 'rud', 'rud']},
  3242. ruzzik: {name: 'Ruzzik the Slayer', shortname: 'Ruzzik', id: 'ruzzik', type: 'Beastman', stat: 'S', size: 500, nd: 6, duration: 128, health: [55000000000, 82500000000, 165000000000, 220000000000, 0, 0], lt: ['ruzz', 'ruzz', 'ruzz', 'ruzz']},
  3243. salome: {name: 'Salome the Seductress', shortname: 'Salome', id: 'salome', type: 'Demon, Underground', stat: 'H', size: 100, nd: 4, duration: 48, health: [666000000, 832500000, 1065600000, 1332000000, 0, 0], lt: ['nSlut', 'hSlut', 'lSlut', 'nmSlut']},
  3244. crabshark: {name: 'Scuttlegore', shortname: 'Scuttlegore', id: 'crabshark', type: 'Colosseum, Aquatic', stat: 'H', size: 100, nd: 4, duration: 168, health: [220000000, 275000000, 352000000, 440000000, 0, 0]},
  3245. squid: {name: 'Scylla', shortname: 'Scylla', id: 'squid', type: 'Beastman, Aquatic', stat: 'S', size: 50, nd: 3, duration: 72, health: [25000000, 31250000, 40000000, 50000000, 0, 0]},
  3246. shaar: {name: 'Shaar the Reaver', shortname: 'Shaar', id: 'shaar', type: 'Beastman', stat: 'S', size: 250, nd: 6, duration: 96, health: [12000000000, 24000000000, 36000000000, 60000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3247. shadow: {name: 'Shadow', shortname: 'Shadow', id: 'shadow', type: 'Magical Creature', stat: 'S', size: 50, nd: 5, duration: 60, health: [10000000000, 17000000000, 25000000000, 35000000000, 0, 0], lt: ['shd', 'shd', 'shd', 'shd']},
  3248. sircai: {name: 'Sir Cai', shortname: 'Cai', id: 'sircai', type: 'Demon, Ryndor', stat: 'S', size: 250, nd: 5, duration: 168, health: [350000000, 437500000, 560000000, 700000000, 0, 0]},
  3249. sisters: {name: 'Sisters of the Song', shortname: 'Sisters', id: 'sisters', type: 'Magical Creature', stat: 'S', size: 250, nd: 5, duration: 96, health: [600000000, 750000000, 960000000, 1200000000, 0, 0]},
  3250. slaughterers: {name: 'Slaughterers Six', shortname: 'Slaughterers', id: 'slaughterers', type: 'Human', stat: 'H', size: 10, nd: 2, duration: 120, health: [24000000, 30000000, 38400000, 48000000, 0, 0]},
  3251. stein: {name: 'Stein', shortname: 'Stein', id: 'stein', type: 'Undead, Underground, Construct', stat: 'S', size: 100, nd: 4, duration: 72, health: [80000000, 100000000, 128000000, 160000000, 0, 0]},
  3252. siculus: {name: 'Count Siculus\' Phantom', shortname: 'Siculus', id: 'siculus', type: 'Undead', stat: 'S', size: 500, nd: 6, duration: 128, health: [850000000, 1700000000, 2975000000, 4250000000, 0, 0], lt: ['sic', 'sic', 'sic', 'sic']},
  3253. tainted: {name: 'Tainted Erebus', shortname: 'Tainted', id: 'tainted', type: 'Dragon', stat: 'S', size: 250, nd: 5, duration: 168, health: [250000000, 312500000, 400000000, 500000000, 0, 0]},
  3254. tenebra: {name: 'Tenebra Shadow Mistress', shortname: 'Tenebra', id: 'tenebra', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [2000000000, 2500000000, 3200000000, 4000000000, 0, 0]},
  3255. thaltherda: {name: 'Thaltherda the Sea-Slitherer', shortname: 'Nessie', id: 'thaltherda', type: 'Aquatic, Dragon', stat: 'S', size: 25, nd: 4, duration: 48, health: [3000000000, 4500000000, 6000000000, 7500000000, 0, 0], lt: ['nessy', 'nessy', 'nessy', 'nessy']},
  3256. tisiphone: {name: 'Tisiphone the Vengeful', shortname: 'Tisi', id: 'tisiphone', type: 'Dragon, Colosseum', stat: 'E', size: 50, nd: 3, duration: 12, health: [500000000, 2500000000, 5000000000, 7500000000, 0, 0], lt: ['nTisi', 'hTisi', 'lTisi', 'nmTisi']},
  3257. teremarthu: {name: 'Teremarthu', shortname: 'Cthullu', id: 'teremarthu', type: 'Qwiladrian', stat: 'S', size: 100, nd: 5, duration: 48, health: [6000000000, 9000000000, 12000000000, 24000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']},
  3258. chimera: {name: 'Tetrarchos', shortname: 'Tetrarchos', id: 'chimera', type: 'Colosseum', stat: 'H', size: 50, nd: 3, duration: 144, health: [90000000, 112500000, 144000000, 180000000, 0, 0]},
  3259. gorgon: {name: 'Tithrasia', shortname: 'Tithrasia', id: 'gorgon', type: '', stat: 'H', size: 10, nd: 2, duration: 120, health: [18000000, 22500000, 28800000, 36000000, 0, 0]},
  3260. trekex: {name: 'Trekex\'s Amphibious Assault', shortname: 'Trekex', id: 'trekex', type: 'Aquatic, Beastman', stat: 'S', size: 800, nd: 6, duration: 128, health: [250000000000, 500000000000, 750000000000, 1000000000000], lt: ['trex', 'trex', 'trex', 'trex']},
  3261. tuxargus: {name: 'Tuxargus', shortname: 'Tuxargus', id: 'tuxargus', type: 'Dragon', stat: 'H', size: 101, nd: 5, duration: 192, health: [2000000000, 2500000000, 3400000000, 4000000000, 0, 0], lt: ['nker', 'hker', 'lker', 'nmker']},
  3262. ulfrik: {name: 'Ulfrik', shortname: 'Ulfrik', id: 'ulfrik', type: 'Bludheim, Siege, Human', stat: 'S', size: 250, nd: 5, duration: 96, health: [500000000, 625000000, 800000000, 1000000000, 0, 0]},
  3263. valanazes: {name: 'Valanazes the Gold', shortname: 'Valanazes', id: 'valanazes', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [2400000000, 3000000000, 3840000000, 4800000000, 0, 0]},
  3264. valley_of_death: {name: 'Valley of Death', shortname: 'Death Valley', id: 'valley_of_death', type: 'Ogre, Festival', stat: 'S', size: 250, nd: 5, duration: 48, health: [22000000000, 44000000000, 66000000000, 88000000000, 0, 0], lt: ['valley', 'valley', 'valley', 'valley']},
  3265. valtrias: {name: 'Valtrias', shortname: 'Valtrias', id: 'valtrias', type: 'Demon', stat: 'S', size:25, nd:4, duration:48, health: [6250000000, 12500000000, 18750000000, 25000000000, 0, 0], lt: ['val','val','val','val']},
  3266. blobmonster: {name: 'Varlachleth', shortname: 'Varlachleth', id: 'blobmonster', type: 'Demon', stat: 'H', size: 100, nd: 4, duration: 168, health: [330000000, 412500000, 528000000, 660000000, 0, 0]},
  3267. verkiteia: {name: 'Verkiteia', shortname: 'Verkiteia', id: 'verkiteia', type: 'Dragon', stat: 'S', size: 100, nd: 5, duration: 72, health: [11250000000, 14062500000, 18000000000, 22500000000, 0, 0], lt: ['verk', 'verk', 'verk', 'verk']},
  3268. vortex_abomination: {name: 'Vortex Abomination', shortname: 'Vortex', id: 'vortex_abomination', type: 'Qwiladrian, Magical Creature', stat: 'S', size: 500, nd: 6, duration: 128, health: [50000000000, 75000000000, 110000000000, 205000000000, 0, 0], lt: ['vort', 'vort', 'vort', 'vort']},
  3269. zugen: {name: 'Warlord Zugen', shortname: 'Zugen', id: 'zugen', type: 'Ogre', stat: 'S', size: 25, nd: 4, duration: 48, health: [4000000000, 6000000000, 8000000000, 10000000000, 0, 0], lt: ['zugen', 'zugen', 'zugen', 'zugen']},
  3270. wexxa: {name: 'Wexxa the Worm-Tamer', shortname: 'Wexxa', id: 'wexxa', type: 'Underground', stat: 'S', size: 100, nd: 4, duration: 72, health: [110000000, 137500000, 176000000, 220000000, 0, 0]},
  3271. winter_kessov: {name: 'Blood Will Run Cold', shortname: 'Cold Blood', id: 'winter_kessov', type: 'Dragon, Siege', stat: 'ESH', size: 90000, nd: 0, duration: 290, health: ['Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited', 'Unlimited']},
  3272. xessus: {name: 'Xessus of the Grim Wood', shortname: 'Xessus', id: 'xessus', type: '', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3273. malchar: {name: 'Malchar the Tri-Eyed', shortname: 'Malchar', id: 'malchar', type: 'Demon', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3274. krasgore: {name: 'Krasgore', shortname: 'Krasgore', id: 'krasgore', type: '', stat: 'H', size: 100, nd: 4, duration: 48, health: [500000000, 625000000, 800000000, 1000000000, 0, 0], lt: ['nIns', 'hIns', 'lIns', 'nmIns']},
  3275. nrlux: {name: 'N\'rlux the Devourer', shortname: 'N\'rlux', id: 'nrlux', type: 'Giant Insect', stat: 'H', size: 100, nd: 6, duration: 48, health: [10000000000, 12500000000, 16000000000, 20000000000, 0, 0], lt: ['lux', 'lux', 'lux', 'lux']},
  3276. xerkara: {name: 'Xerkara', shortname: 'Xerkara', id: 'xerkara', type: 'Dragon', stat: 'S', size: 500, nd: 6, duration: 128, health: [65000000000, 113750000000, 143000000000, 260000000000, 0, 0], lt: ['z15hi', 'z15hi', 'z15hi', 'z15hi']},
  3277. yule_present_bearer: {name: 'Yule Present Bearer', shortname: 'Present Bearer', id: 'yule_present_bearer', type: 'Human', stat: 'S', size: 100, nd: 5, duration: 48, health: [30000000000, 60000000000, 90000000000, 120000000000, 0, 0], lt: ['yule', 'yule', 'yule', 'yule']},
  3278. yydians_sanctuary: {name: 'Yydian\'s Sanctuary', shortname: 'Yydians', id: 'yydians_sanctuary', type: 'Siege, Construct', stat: 'S', size: 250, nd: 5, duration: 96, health: [10000000000, 20000000000, 30000000000, 50000000000, 0, 0], lt: ['yyd', 'yyd', 'yyd', 'yyd']},
  3279. zombiehorde: {name: 'Zombie Horde', shortname: 'Zombies', id: 'zombiehorde', type: 'Undead', stat: 'S', size: 50, nd: 3, duration: 60, health: [45000000, 56250000, 72000000, 90000000, 0, 0]},
  3280. zralkthalat: {name: 'Z\'ralk\'thalat', shortname: 'Zralk', id: 'zralkthalat', type: 'Demon', stat: 'S', size: 100, nd: 4, duration: 72, health: [8750000000, 13125000000, 17500000000, 35000000000, 0, 0], lt: ['z10', 'z10', 'z10', 'z10']}
  3281. },
  3282.  
  3283. raidSizes: {
  3284. 10: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3285. 13: { name: 'Small' },
  3286. 15: { name: 'Small', ratios: [0.45, 0.6, 0.755, 0.9, 1.05, 1.2, 1.35, 1.5, 1.65, 1.8, 1.95], enames: ['65D', '92D', '119D', '146D', '173D', '200D', '227D', '264D', '301D', '338D', '375D'] },
  3287. 25: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3288. 30: { name: 'Small', ratios: [0.6, 0.9, 1.2, 1.6, 2.5, 3.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3289. 50: { name: 'Medium', ratios: [0.7, 0.95, 2.05, 3.125, 6.75, 8.5], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3290. 100: { name: 'Large', ratios: [0.9, 1.5, 2.2, 3.2, 6.5, 9.0], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3291. 101: { name: 'Epic', ratios: [0.225, 0.325, 0.625, 1.775, 4.525, 10.25], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3292. 250: { name: 'Epic', ratios: [0.225, 0.325, 0.625, 1.775, 4.525, 10.25], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3293. 500: { name: 'Colossal', ratios: [0.45, 0, 0.65, 1.25, 2.5, 9.0], enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3294. 800: { name: 'Gigantic', enames: ['1E6T', '1E8T', '2E', '2/3E', '3E', '3/4E'] },
  3295. 90000: { name: 'World' } },
  3296.  
  3297. lootTiers: {
  3298. u: { tiers: ['Not yet known'], epics: [0], best: 0},
  3299. val: { tiers: ['50.00m', '100.0m', '250.0m', '500.0m', '750.0m', '1.000b', '1.250b', '1.500b', '2.000b', '2.500b', '5.000b'], epics: [1,2,4,17,21,27,35,44,53,61,99], best: 3, e: false},
  3300. kark: { tiers: ['200.0m', '300.0m', '400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '1.250b', '1.500b', '1.750b', '2.000b', '2.250b', '2.500b', '2.750b', '3.000b', '4.000b', '5.000b','6.000b','8.000b','10.00b','12.50b','15.00b'], epics: [8,9,10,11,12,13,14,15,17,20,24,29,32,36,40,44,48,52,59,6,73,80,90,100], best: 2, e: false},
  3301. yule: { tiers: ['100.0m', '200.0m', '300.0m', '400.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '3.500b', '4.000b', '4.500b', '5.000b', '10.00b'], epics: [0, 4, 8, 10, 15, 20, 30, 35, 40, 50, 70, 75, 80, 90, 95, 125], best: 5, e: true },
  3302. eow: { tiers: ['100.0m', '200.0m', '300.0m', '500.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '7.000b', '8.000b', '9.000b', '10.00b', '12.50b', '15.00b', '17.50b', '20.00b', '25.00b', '30.00b', '35.00b', '40.00b'], epics: [1,2,3,5,10,15,22,28,37,42,47,52,57,63,68,73,78,83,88,95,101,108,115,121], best: 8, e: false },
  3303. gk: { tiers: ['150.0m', '250.0m', '300.0m', '400.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.500b', '5.000b'], epics: [5, 6, 9, 10, 12, 14, 17, 23, 30, 35, 49, 67], best: 2, e: false },
  3304. murg: { tiers: ['150.0m', '250.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '3.500b', '4.000b', '4.500b', '5.000b'], epics: [0, 1, 2, 5, 10, 15, 31, 41, 57, 67, 72, 78, 87], best: 9, e: false},
  3305. valley: { tiers: ['150.0m', '250.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '3.500b', '4.000b', '4.500b', '5.000b', '6.500b', '8.000b'], epics: [0, 1, 2, 5, 10, 15, 21, 35, 60, 63, 67, 72, 76, 84, 92], best: 8, e: false},
  3306. bak: { tiers: ['100.0m', '200.0m', '250.0m', '300.0m', '400.0m', '500.0m', '650.0m', '800.0m', '1.000b', '1.250b', '1.500b', '2.000b'], epics: [3, 8, 10, 11, 12, 15, 18, 20, 26, 30, 38, 47], best: 5, e: false},
  3307. rud: { tiers: ['300.0m', '500.0m', '750.0m', '1.000b', '1.500b'], epics: [13, 15, 17, 25, 32], best: 1, e: false},
  3308. imx: { tiers: ['100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '400.0m', '500.0m', '750.0m', '1.000b', '1.250b', '1.500b', '1.750b', '2.000b', '2.500b', '3.000b', '3.500b', '4.000b', '4.500b', '5.000b', '6.000b', '7.000b', '8.000b', '9.000b', '10.00b', '12.50b', '15.00b', '17.50b', '20.00b', '25.00b'], epics: [16, 21, 26, 32, 38, 44, 51, 69, 86, 118, 142, 166, 191, 239, 286, 330, 355, 381, 408, 435, 462, 489, 516, 544, 592, 640, 688, 736, 815], best: 13, e: false},
  3309. shd: { tiers: ['50.00m', '75.00m', '100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '500.0m', '750.0m', '1.000b'], epics: [1, 2, 5, 8, 10, 12, 14, 16, 19, 25], best: 6, e: false},
  3310. hell: { tiers: ['200.0m', '250.0m', '300.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '8.000b', '10.00b'], epics: [8, 12, 16, 25, 28, 34, 41, 50, 58, 64, 71, 77, 85, 102, 120], best: 2, e: false},
  3311. kane: { tiers: ['200.0m', '250.0m', '300.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '8.000b', '10.00b', '12.50b', '15.00b'], epics: [6, 10, 14, 21, 27, 30, 37, 45, 54, 62, 68, 75, 81, 93, 110, 127, 141], best: 3, e: false},
  3312. dark: { tiers: ['200.0m', '300.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b'], epics: [2, 4, 8, 14, 18, 30, 40, 50, 60, 75, 85], best: 7, e: false},
  3313. gat: { tiers: ['1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '7.000b', '8.000b', '9.000b', '10.00b', '12.50b', '15.00b', '17.50b', '20.00b', '25.00b', '30.00b', '40.00b'], epics: [27, 48, 66, 81, 94, 103, 122, 132, 144, 158, 176, 194, 204, 209, 219, 225, 242, 284, 301], best: 2, e: false},
  3314. trex: { tiers: ['100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '400.0m', '500.0m', '750.0m', '1.000b', '1.250b', '1.500b', '1.750b', '2.000b', '2.500b', '3.000b', '3.500b', '4.000b', '4.500b', '5.000b', '6.000b', '7.000b', '8.000b', '9.000b', '10.00b', '12.50b', '15.00b', '17.50b', '20.00b'], epics: [21, 28, 38, 44, 47, 59, 68, 94, 119, 147, 179, 215, 250, 308, 381, 431, 498, 546, 557, 593, 627, 661, 691, 725, 790, 861, 926, 980], best: 14, e: false},
  3315. alch: { tiers: ['100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '400.0m', '500.0m', '650.0m', '800.0m', '1.000b', '1.250b', '1.500b'], epics: [4, 6, 8, 9, 11, 13, 15, 17, 19, 20, 25, 32], best: 5, e: false},
  3316. rann: { tiers: ['100.0m', '200.0m', '300.0m', '400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '2.000b', '3.000b'], epics: [12, 24, 36, 48, 61, 73, 85, 97, 109, 122, 245, 369], best: 9, e: false },
  3317. clock: { tiers: ['300.0m', '400.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '8.000b', '10.00b'], epics: [56, 66, 94, 118, 192, 226, 254, 270, 290, 360, 368, 400, 460], best: 0, e: false},
  3318. krx: { tiers: ['300.0m', '400.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '4.000b', '5.000b', '6.000b', '8.000b'], epics: [56, 66, 94, 118, 192, 226, 254, 270, 290, 360, 368, 400], best: 0, e: false},
  3319. gig: { tiers: ['200.0m', '300.0m', '400.0m', '500.0m', '750.0m', '1.000b', '1.500b', '2.000b', '2.500b', '5.000b', '8.000b'], epics: [36, 48, 63, 76, 94, 111, 146, 199, 256, 400, 490], best: 3, e: false},
  3320. rekkr: { tiers: ['250.0m', '300.0m', '400.0m', '500.0m', '720.0m', '1.000b', '1.500b', '2.500b', '3.500b'], epics: [10, 11, 15, 18, 23, 26, 34, 37, 51], best: 2, e: true},
  3321. rag: { tiers: ['225.0m', '310.0m', '400.0m', '510.0m', '750.0m', '1.000b', '1.500b', '2.500b', '5.000b'], epics: [11, 13, 17, 19, 23, 27, 37, 39, 61], best: 2, e: true},
  3322. z15lo: { tiers: ['225.0m', '240.0m', '300.0m', '400.0m', '750.0m', '1.000b', '1.500b', '2.500b', '5.000b'], epics: [8, 9, 14, 16, 19, 23, 33, 36, 48], best: 2, e: true},
  3323. z15hi: { tiers: ['225.0m', '240.0m', '300.0m', '400.0m', '750.0m', '1.000b', '1.500b', '2.500b', '5.000b', '8.000b'], epics: [8, 9, 14, 16, 19, 23, 33, 60, 90, 100], best: 2, e: true},
  3324. apoc: { tiers: ['12.00m', '24.00m', '36.00m', '40.00m', '60.00m', '80.00m', '100.0m', '120.0m', '140.0m', '160.0m', '180.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true },
  3325. cara: { tiers: ['400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '1.250b', '1.500b', '1.750b', '2.000b', '2.250b', '2.500b', '2.750b', '3.000b'], epics: [10, 11, 12, 13, 14, 15, 16, 20, 24, 28, 32, 36, 40, 44, 48], best: 0, e: true },
  3326. zugen: { tiers: ['120.0m', '180.0m', '225.0m', '240.0m', '300.0m', '400.0m', '750.0m', '1.000b', '1.500b'], epics: [8, 9, 10, 11, 14, 16, 19, 23, 33], best: 4, e: true},
  3327. gulk: { tiers: ['90.00m', '135.0m', '150.0m', '180.0m', '225.0m', '300.0m', '550.0m', '900.0m', '1.500b'], epics: [2, 5, 7, 9, 11, 15, 18, 22, 34], best: 5, e: true },
  3328. verk: { tiers: ['100.0m', '175.0m', '250.0m', '300.0m', '375.0m', '450.0m', '525.0m', '600.0m', '900.0m', '1.500b'], epics: [3, 8, 12, 13, 15, 16, 18, 21, 23, 36], best: 2, e: true},
  3329. canib: { tiers: ['250.0m', '300.0m', '380.0m', '480.0m', '580.0m', '660.0m', '900.0m', '1.500b', '2.000b', '2.800b', '3.500b'], epics: [12, 13, 14, 17, 18, 21, 23, 34, 46, 68, 88], best: 0, e: true},
  3330. ruzz: { tiers: ['300.0m', '400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '1.250b', '1.500b', '1.750b', '2.000b', '2.250b', '2.500b', '2.750b', '3.000b'], epics: [2, 5, 11, 12, 13, 14, 15, 16, 20, 24, 28, 32, 36, 40, 44, 48], best: 2, e: true },
  3331. z10: { tiers: ['100.0m', '200.0m', '300.0m', '400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b'], epics: [7, 8, 9, 10, 11, 12, 13, 14, 15, 16], best: 0, e: true },
  3332. nmDl: { tiers: ['105.0m', '135.0m', '150.0m', '225.0m', '300.0m', '375.0m', '450.0m', '525.0m', '600.0m', '675.0m'], epics: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], best: 2, e: true },
  3333. lDl: { tiers: ['70.00m', '90.00m', '100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '350.0m', '400.0m', '450.0m'], epics: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], best: 2, e: true },
  3334. hDl: { tiers: ['35.00m', '45.00m', '50.00m', '75.00m', '100.0m', '125.0m', '150.0m', '175.0m', '200.0m', '225.0m'], epics: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], best: 2, e: true },
  3335. nDl: { tiers: ['7.000m', '9.000m', '10.00m', '15.00m', '20.00m', '25.00m', '30.00m', '35.00m', '40.00m', '45.00m'], epics: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20], best: 2, e: true },
  3336. nmTisi: { tiers: ['75.00m', '105.0m', '135.0m', '150.0m', '225.0m', '300.0m', '375.0m', '450.0m', '525.0m', '600.0m', '675.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true },
  3337. lTisi: { tiers: ['50.00m', '70.00m', '90.00m', '100.0m', '150.0m', '200.0m', '250.0m', '300.0m', '350.0m', '400.0m', '450.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true },
  3338. hTisi: { tiers: ['25.00m', '35.00m', '45.00m', '50.00m', '75.00m', '100.0m', '125.0m', '150.0m', '175.0m', '200.0m', '225.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true },
  3339. nTisi: { tiers: ['5.000m', '7.000m', '9.000m', '10.00m', '15.00m', '20.00m', '25.00m', '30.00m', '35.00m', '40.00m', '45.00m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true },
  3340. njack: { tiers: ['4.000m', '20.00m', '24.00m', '48.00m', '72.00m', '96.00m', '120.0m', '144.0m', '168.0m', '192.0m'], epics: [2, 3, 4, 6, 7, 8, 9, 10, 11, 12], best: 0, e: true},
  3341. hjack: { tiers: ['6.000m', '30.00m', '36.00m', '72.00m', '108.0m', '144.0m', '180.0m', '216.0m', '252.0m', '288.0m'], epics: [2, 3, 4, 6, 7, 8, 9, 10, 11, 12], best: 0, e: true},
  3342. ljack: { tiers: ['8.000m', '40.00m', '48.00m', '96.00m', '144.0m', '192.0m', '240.0m', '288.0m', '336.0m', '384.0m'], epics: [2, 3, 4, 6, 7, 8, 9, 10, 11, 12], best: 0, e: true},
  3343. nmjack: { tiers: ['12.00m', '60.00m', '72.00m', '144.0m', '216.0m', '288.0m', '360.0m', '432.0m', '504.0m', '576.0m'], epics: [2, 3, 4, 6, 7, 8, 9, 10, 11, 12], best: 0, e: true},
  3344. hjr: { tiers: ['30.00m', '150.0m', '180.0m', '360.0m', '750.0m', '1.500b'], epics: [8, 12, 16, 27, 36, 72], best: 0, e: true},
  3345. njr: { tiers: ['20.00m', '100.0m', '120.0m', '240.0m', '500.0m', '1.000b'], epics: [8, 12, 16, 27, 36, 72], best: 0, e: true},
  3346. ljr: { tiers: ['40.00m', '200.0m', '240.0m', '480.0m', '1.000b', '2.000b'], epics: [8, 12, 16, 27, 36, 72], best: 0, e: true},
  3347. nmjr: { tiers: ['60.00m', '300.0m', '360.0m', '720.0m', '1.500b', '3.000b'], epics: [8, 12, 16, 27, 36, 72], best: 0, e: true},
  3348. yyd: { tiers: ['125.0m', '175.0m', '250.0m', '300.0m', '375.0m', '450.0m', '525.0m', '625.0m', '900.0m', '1.500b'], epics: [3, 8, 12, 13, 15, 16, 18, 21, 23, 36], best: 2, e: true},
  3349. nessy: { tiers: ['120.0m', '180.0m', '225.0m', '240.0m', '300.0m', '500.0m', '750.0m', '1.000b'], epics: [9, 10, 11, 12, 13, 14, 17, 20], best: 1, e: true},
  3350. hurk: { tiers: ['90.00m', '135.0m', '150.0m', '180.0m', '225.0m', '300.0m', '550.0m', '900.0m'], epics: [3, 7, 10, 12, 15, 19, 26, 30], best: 2, e: true},
  3351. mall: { tiers: ['100.0m', '150.0m', '225.0m', '300.0m', '375.0m', '450.0m', '525.0m', '600.0m', '900.0m'], epics: [3, 8, 11, 12, 14, 16, 18, 20, 24], best: 1, e: true},
  3352. nIns: { tiers: ['5.000m', '7.000m', '9.000m', '10.00m', '15.00m', '20.00m', '25.00m', '30.00m', '35.00m', '40.00m', '45.00m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3353. hIns: { tiers: ['6.250m', '8.750m', '11.25m', '12.50m', '18.75m', '25.00m', '31.25m', '37.50m', '43.75m', '50.00m', '56.25m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3354. lIns: { tiers: ['8.000m', '11.20m', '14.40m', '16.00m', '24.00m', '32.00m', '40.00m', '48.00m', '56.00m', '64.00m', '72.00m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3355. nmIns: { tiers: ['10.00m', '14.00m', '18.00m', '20.00m', '30.00m', '40.00m', '50.00m', '60.00m', '70.00m', '80.00m', '90.00m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3356. nker: { tiers: ['20.00m', '28.00m', '36.00m', '40.00m', '60.00m', '80.00m', '100.0m', '120.0m', '140.0m', '160.0m', '180.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3357. hker: { tiers: ['25.00m', '35.00m', '45.00m', '50.00m', '75.00m', '100.0m', '125.0m', '150.0m', '175.0m', '200.0m', '225.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3358. lker: { tiers: ['32.00m', '44.80m', '57.60m', '64.00m', '96.00m', '128.0m', '160.0m', '192.0m', '224.0m', '256.0m', '288.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3359. nmker: { tiers: ['40.00m', '56.00m', '72.00m', '80.00m', '120.0m', '160.0m', '200.0m', '240.0m', '280.0m', '320.0m', '360.0m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3360. nSlut: { tiers: ['6.660m', '9.324m', '11.99m', '13.32m', '19.98m', '26.64m', '33.30m', '39.96m', '46.62m', '53.28m', '59.94m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3361. hSlut: { tiers: ['8.325m', '11.66m', '14.99m', '16.65m', '24.98m', '33.30m', '41.63m', '49.95m', '58.28m', '66.60m', '74.93m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3362. lSlut: { tiers: ['10.66m', '14.92m', '19.18m', '21.31m', '31.97m', '42.62m', '53.28m', '63.94m', '74.59m', '85.25m', '95.90m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3363. nmSlut: { tiers: ['13.32m', '18.65m', '23.98m', '26.64m', '39.96m', '53.28m', '66.60m', '79.92m', '93.24m', '106.6m', '119.9m'], epics: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], best: 3, e: true},
  3364. sic: { tiers: ['400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '2.000b'], epics: [10, 11, 12, 13, 14, 15, 16, 32], best: 0, e: true},
  3365. vort: { tiers: ['200.0m', '300.0m', '400.0m', '500.0m', '600.0m', '700.0m', '800.0m', '900.0m', '1.000b', '1.500b', '2.000b', '2.500b', '3.000b', '3.500b'], epics: [3, 10, 14, 15, 17, 18, 21, 23, 32, 37, 44, 52, 58, 90], best: 1, e: true},
  3366. lux: { tiers: ['8.000m', '17.00m', '26.00m', '35.00m', '45.00m', '56.00m', '67.00m', '78.00m', '90.00m', '103.0m', '116.0m', '129.0m', '143.0m', '157.0m', '173.0m', '188.0m', '202.0m', '220.0m', '238.0m', '255.0m', '270.0m', '293.0m', '311.0m', '330.0m', '350.0m'], epics: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], best: 9, e: true },
  3367. keron: { tiers: ['8.000m', '17.00m', '26.00m', '35.00m', '45.00m', '56.00m', '67.00m', '78.00m', '90.00m', '103.0m', '116.0m', '129.0m', '143.0m', '157.0m', '173.0m', '188.0m', '202.0m', '220.0m', '238.0m', '255.0m', '270.0m', '293.0m', '311.0m', '330.0m', '350.0m', '1.000b'], epics: [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 30], best: 9, e: true }
  3368. },
  3369. linkNames: { 'prntscr.com': 'LightShot', 'www.youtube.com': 'YouTube', 'i.imgur.com': 'imgur', 'imgur.com': 'imgur', 'docs.google.com': 'Google Docs', 'userscripts.org': 'Script', 'www.dawnofthedragons.com': 'DotD Forum', 'dotd.wikia.com': 'DotD Wiki', 'www.fooby.de': 'DotD Log Analyzer'},
  3370. //raidArray: [],
  3371. camps: {
  3372. bob: {name: 'Bastion of Blood', time: [120, 96], prefixes: 'Regenerating, Morphling, Vengeful, Chilling', numNodes: 6, nodes: ['bmp', 'gor', 'chi', 'zh', 'sic', 'bob'],
  3373. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Nerfed: -30% player damage, special loot from EoC'],
  3374. tiers: [[5, 31, 0],[25, 32, 0],[75, 33, 0],[100, 34, 0],[200, 35, 7],[250, 36, 8],[320, 37, 9],[375, 38, 10],[480, 39, 11],[550, 43, 14],[640, 46, 17],[960, 48, 22],[1500, 50, 24],[2400, 53, 26],[2750, 55, 29],[5000, 62, 38],[7000, 64, 42],[10000, 69, 47],[15000, 74, 52]],
  3375. bmp: {name: 'Black Moon Pack', sname: 'Bmp', type: 'Human, Campaign', size: 25, hp: [6000, 18000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3376. gor: {name: 'Gorgon', sname: 'Gor', type: 'Campaign', size: 50, hp: [12000, 36000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3377. chi: {name: 'Chimera', sname: 'Chi', type: 'Campaign', size: 75, hp: [28000, 84000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]},
  3378. zh: {name: 'Zombie Horde', sname: 'ZH', type: 'Campaign, Undead', size: 100, hp: [50000, 150000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]},
  3379. sic: {name: 'Byron Siculus', sname: 'Sic', type: 'Campaign', size: 100, hp: [50000, 150000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]},
  3380. bob: {name: 'Bastion of Blood', sname: 'BoB', type: 'Campaign, Undead, Siege', size: 100, hp: [50000, 150000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}},
  3381. mam: {name: 'Monsters and Magma', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 7, nodes: ['wlp', 'tos', 'gol', 'ele', 'gmh', 'wrm', 'imx'],
  3382. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC', 'Endurance Run: Node timer set to 4h, Molten Troves in EoC'],
  3383. tiers: [[5, 31, 0],[25, 32, 0],[75, 33, 0],[100, 34, 0],[200, 35, 7],[250, 36, 8],[320, 37, 9],[375, 38, 10],[480, 39, 11],[550, 40, 12],[640, 41, 13],[960, 42, 14],[1500, 43, 15],[2400, 44, 16],[2750, 45, 17],[4500, 58, 24],[5000, 62, 38],[5500, 64, 26],[7000, 64, 42],[7500, 74, 28],[10000, 69, 47],[15000, 74, 52]],
  3384. wlp: {name: 'Imryx\'s Whelps', sname: 'Wlp', type: 'Dragon, Underground, Campaign', size: 25, hp: [7000, 21000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3385. tos: {name: 'Magma Tossers', sname: 'Tos', type: 'Underground, Construct, Campaign', size: 50, hp: [13000, 39000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3386. gol: {name: 'Magma Golem', sname: 'Gol', type: 'Underground, Construct, Campaign', size: 50, hp: [16000, 48000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3387. ele: {name: 'Magma Elemental', sname: 'Ele', type: 'Underground, Magical Creature, Campaign', size: 75, hp: [30000, 90000], gold: false,tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0]},
  3388. gmh: {name: 'Grt. Magma Horror', sname: 'Gmh', type: 'Campaign, Undead', size: 100, hp: [55000, 165000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]},
  3389. wrm: {name: 'Magma Worm', sname: 'Wrm', type: 'Underground, Campaign', size: 100, hp: [60000, 180000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1]},
  3390. imx: {name: 'Imryx the Incinerator', sname: 'Imx', type: 'Dragon, Underground, Campaign', size: 100, hp: [65000, 195000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0]}},
  3391. gd: {name: 'The Grey Death', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['crk', 'zrn', 'nun', 'tms', 'crn', 'hrt'],
  3392. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, special loot and +3 slots from EoC'],
  3393. tiers: [[25, 31, 0],[100, 34, 0],[200, 36, 6],[300, 38, 9],[500, 40, 14],[750, 42, 16],[1000, 45, 18],[2500, 48, 21],[4100, 50, 25],[6500, 58, 29],[6500, 54, 27],[8500, 62, 31],[8500, 63, 32],[10000, 64, 33],[15000, 66, 35],[20000, 68, 37],[30000, 70, 39],[40000, 73, 41]],
  3394. crk: {name: 'Carshk the Marauder', sname: 'Crk', type: 'Campaign', size: 25, hp: [8000, 25600], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0]},
  3395. zrn: {name: 'Zranras', sname: 'Zrn', type: 'Campaign, Beastman', size: 50, hp: [15000, 48000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0]},
  3396. nun: {name: 'General Nund', sname: 'Nun', type: 'Campaign, Ogre', size: 50, hp: [20000, 50000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0]},
  3397. tms: {name: 'Thurmavus the Ripper', sname: 'Tms', type: 'Campaign, Dragon', size: 100, hp: [75000, 202500], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]},
  3398. crn: {name: 'Craenaestra the Stalker', sname: 'Crn', type: 'Campaign, Dragon', size: 100, hp: [80000, 224000], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]},
  3399. hrt: {name: 'Horthania the Grey', sname: 'Hrt', type: 'Campaign, Dragon', size: 100, hp: [90000, 270000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1]}},
  3400. goc: {name: 'Giants of Chalua', time: [120, 96], prefixes: 'Regenerating, Vengeful, Chilling, Curse', numNodes: 6, nodes: ['mwm', 'bl', 'gh', 'fgs', 'gc', 'ha'],
  3401. mods: ['Speed Run: halved camp timer, +20% guild rep from EoC', 'Hailstorm: +1 prefix, +20% guild exp from EoC', 'Fatigued: -45% player damage, Boss loot from EoC', 'Endurance Run: Node timer set to 4h, 10 guild tokens in EoC'],
  3402. tiers: [[25, 32, 0, 0],[150, 34, 0, 0],[250, 35, 7, 0],[480, 39, 11, 0],[640, 41, 16, 0],[960, 42, 18, 1],[1500, 43, 19, 1],[2500, 45, 21, 3],[4750, 48, 25, 4],[5500, 52, 27, 5],[6400, 54, 29, 5],[8750, 56, 31, 6],[10000, 58, 34, 6],[15000, 60, 38, 8],[25000, 64, 44, 9],[30000, 66, 46, 9],[35000, 68, 48, 9],[40000, 70, 50, 9],[50000, 74, 56, 10]],
  3403. mwm: {name: 'Monkey Warrior Minions', sname: 'MWM', type: 'Human, Campaign', size: 25, hp: [15000, 45000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]},
  3404. bl: {name: 'Basileus Lizard', sname: 'BL', type: 'Campaign', size: 50, hp: [25000, 75000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]},
  3405. gh: {name: 'Giant Hunter', sname: 'GH', type: 'Giant, Campaign', size: 75, hp: [55000, 165000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0]},
  3406. fgs: {name: 'Fire Giant Shaman', sname: 'FGS', type: 'Giant, Campaign', size: 100, hp: [100000, 250000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]},
  3407. gc: {name: 'Giant Cook', sname: 'GC', type: 'Giant, Campaign', size: 100, hp: [125000, 312500], gold: true, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0]},
  3408. ha: {name: 'Hitullpa Aatqui', sname: 'HA', type: 'Giant, Campaign', size: 100, hp: [150000, 375000], gold: false, tiers: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]}}
  3409. },
  3410. slapSentences: [
  3411. 'slaps <nick> in the face with a rotten old fish',
  3412. 'slaps <nick> around with a glove',
  3413. 'slaps <nick> around with an armoured glove',
  3414. 'hacks into <nick>\'s computer and slaps <nick> up side the head with a rubber chicken',
  3415. 'slaps <nick> around a bit with a wet noddle',
  3416. 'slaps <nick> about the head and shoulders with a rubber chicken',
  3417. 'slaps <nick>\'s face so hard, <nick> has to walk backwards from now on',
  3418. 'slaps some sense into <nick> with a red brick',
  3419. 'slaps <nick> with a herring',
  3420. 'slaps <nick> with a fire hose',
  3421. 'slaps <nick> with a huge law suit',
  3422. 'slaps <nick> with a great big, wet, 100% rubber duck',
  3423. 'slaps <nick> with a large dildo'
  3424. ],
  3425. reload: function () { SRDotDX.util.extEcho('Reloading, please wait...'); activateGame(); },
  3426. gframe: function(msg) { if(typeof document.getElementById('gameiframe') === 'object' && typeof document.getElementById('gameiframe').contentWindow === 'object') document.getElementById('gameiframe').contentWindow.postMessage(msg, '*'); },
  3427. fails: 0,
  3428. load: function () {
  3429. if (typeof holodeck === 'object' && holodeck.ready && typeof ChatDialogue === 'function' && typeof activateGame === 'function') {
  3430. ChatDialogue.prototype.sendInput = function () {
  3431. //workaround for broken raid links - fixing on the fly
  3432. var b = this._input_node.value.replace(/kv_&/ig, "&kv_");
  3433. var a = b.match(/[\s\S]{1,240}(\s|$)/g);
  3434. if(a !== null) {
  3435. var al = a.length - 1, i;
  3436. if (al < 1 || this._input_node.value.charAt(0) == '/') this._holodeck.processChatCommand(a[0]) && this._holodeck.filterOutgoingMessage(a[0], this._onInputFunction);
  3437. else {
  3438. var msg, tout = 50;
  3439. for (i = 0; i <= al; i++) {
  3440. msg = (i == 0 ? '' : '... ') + a[i] + (i == al ? '' : '...');
  3441. (function (a, b) {
  3442. return SRDotDX.gui.FPXTimerArray[i] = setTimeout(function(){b._holodeck.filterOutgoingMessage(a,b._onInputFunction)},tout);
  3443. })(msg, holodeck._active_dialogue);
  3444. tout += 500;
  3445. }
  3446. }
  3447. }
  3448. this._input_node.value = "";
  3449. };
  3450. ChatDialogue.prototype.SRDotDX_emote = function (msg) {
  3451. var user = holodeck._active_user.chatUsername();
  3452. this.displayUnsanitizedMessage(user, '**' + user + ' ' + msg + '**', {class: 'emote'}, {});
  3453. };
  3454. ChatDialogue.MESSAGE_TEMPLATE = new Template('<p class="#{classNames}"><span id="dotdm_#{magId}" class="slider" style="max-width:0" onmouseleave="this.style.maxWidth=\'0\'"></span><span class="timestamp">#{timestamp}</span><span class="room">#{room}</span></span><span class="username #{userClassNames} dotdm_#{magId}" username="#{username}" dotdxname="#{dotdxusr}" oncontextmenu="return false;">#{prefix}#{dotdxusr}</span><span class="ign ingamename">#{ign}</span><span class="separator">: </span><span name="SRDotDX_#{dotdxusr}" class="message">#{message}</span><span class="clear"></span></p>');
  3455.  
  3456. Holodeck.prototype.addDotdChatCommand = function (a, b) {
  3457. a = a.split(',');
  3458. for (var i = 0; i < a.length; i++) {
  3459. this._chat_commands[a[i]] || (this._chat_commands[a[i]] = []);
  3460. this._chat_commands[a[i]].push(b)
  3461. }
  3462. };
  3463. ChatDialogue.prototype.displayUnsanitizedMessage = function (usr, msg, cls, pfx) {
  3464. cls || (cls = {});
  3465. pfx || (pfx = {});
  3466. var active_room, allow_mutes = (active_room = this._holodeck.chatWindow().activeRoom()) && !active_room.canUserModerate(active_room.self()) || pfx.whisper;
  3467. if (!allow_mutes || !this._user_manager.isMuted(usr)) {
  3468. var e = !pfx.non_user ? "chat_message_window_username" : "chat_message_window_undecorated_username";
  3469. var f = usr == this._user_manager.username(), h = [], rm = '';
  3470. var curTs = new Date().getTime().toString();
  3471. var kongUsr = usr;
  3472. if (msg.charAt(0) == '[' && (msg.charAt(2) == '|' || msg.charAt(3) == '|')) {
  3473. var sp = msg.split(']');
  3474. rm = sp[0].split('|')[0] + ']&ensp;';
  3475. usr = sp[0].split('|')[1];
  3476. msg = sp[1];
  3477. h.push('bot')
  3478. }
  3479. var e = [e];
  3480. pfx = pfx['private'] ? 'To ' : '';
  3481. if (cls['class'] != 'script') this._messages_count % 2 && h.push("even"), this._messages_count++;
  3482. cls['class'] && h.push(cls['class']);
  3483. if ((!cls['class'] || cls['class'].indexOf('emote') == -1) && msg.charAt(0) == '*' && msg.charAt(2) != '*') {
  3484. var msgLen = msg.length;
  3485. if (msgLen > 5) {
  3486. msg = '**' + usr + ' ' + (msg.charAt(msgLen - 1) == '*' ? msg.slice(1, msgLen - 1) : msg.slice(1, msgLen)) + '**';
  3487. h.push('emote');
  3488. }
  3489. }
  3490. var rUsr = h.join(' ').indexOf('sent_whisper') > -1 ? this._user_manager.username() : usr;
  3491. var raid = SRDotDX.getRaidLink(msg, rUsr);
  3492. if (raid) {
  3493. h.push('SRDotDX_raid');
  3494. h.push('DotDX_sid_' + raid.sid);
  3495. h.push('DotDX_diff_' + raid.diff);
  3496. h.push('DotDX_raidId_' + raid.id);
  3497. if (raid.visited) h.push('DotDX_visitedRaid');
  3498. //if (raid.nuked) h.push('DotDX_nukedRaid');
  3499. h.push('DotDX_fltChat_' + raid.boss + '_' + (raid.diff - 1));
  3500. msg = raid.ptext + '<a href="' + raid.url + '" class="chatRaidLink ' + raid.id + '|' + raid.hash + '|' + raid.boss + '|' + raid.diff + '|' + raid.sid + '" style="float:right;" onmouseout="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',\'\',true);" onmouseover="SRDotDX.gui.helpBox(\'chat_raids_overlay\',\'dotdm_' + curTs + '\',' + raid.id + ',false);">' + raid.linkText() + '</a>' + raid.ntext;
  3501. SRDotDX.gui.toggleRaid('visited', raid.id, raid.visited);
  3502. SRDotDX.gui.joining ? SRDotDX.gui.pushRaidToJoinQueue(raid.id) : SRDotDX.gui.selectRaidsToJoin('chat');
  3503. }
  3504. else {
  3505. var linkReg = /([-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4})\b\/?([-a-zA-Z0-9@:%_\+.~#?;&//=]*)?\??\S*/ig;
  3506. var links, link, dom, ln, htidx, found = '';
  3507. while((links = linkReg.exec(msg))) {
  3508. found = msg;
  3509. console.log('[DotDX] Link found: ' + msg);
  3510. if(!/kongregate.com/i.test(links[0]) && !/\.\./.test(links[0])){
  3511. htidx = links[1].indexOf("http");
  3512. if(htidx < 0) dom = "http://" + links[1];
  3513. else if(htidx > 0) dom = links[1].substring(htidx);
  3514. else dom = links[1];
  3515. ln = links[1].indexOf("http") < 0 ? links[1] : links[1].split('//')[1];
  3516. link = '<a href="' + dom;
  3517. if(links[2] !== undefined) link += '/' + links[2].replace(/&amp;/ig,'&').replace(/&nbsp;/ig,'');
  3518. link += '" target="_blank" class="chat_link">[' + (SRDotDX.linkNames[ln] ? (SRDotDX.linkNames[ln] + '&nbsp;link') : ln) + ']</a>';
  3519. linkReg.lastIndex += link.length - links[0].length;
  3520. msg = msg.substring(0, links.index) + link + msg.substring(links.index + links[0].length, msg.length);
  3521. }
  3522. }
  3523. if(found !== '') SRDotDX.linksHistory.push({t:new Date().getTime(),u:usr,m:found});
  3524. }
  3525. var ign = '';
  3526. if (SRDotDX.config.mutedUsers[usr]) h.push('DotDX_hidden');
  3527.  
  3528. var fCls = h.join(' ');
  3529. if (SRDotDX.config.ignUsers[usr] && fCls.indexOf('emote') < 0) {
  3530. switch(SRDotDX.config.ignMode) {
  3531. case 2: ign = ' ('+SRDotDX.config.ignUsers[usr]+')'; break;
  3532. case 1: usr = SRDotDX.config.ignUsers[usr]; e.push('ign'); break;
  3533. }
  3534. }
  3535. var ts = fCls.indexOf('emote') > -1 || fCls.indexOf('script') > -1 ? '' : ('(' + ('0' + (new Date().getHours())).slice(-2) + ':' + ('0' + (new Date().getMinutes())).slice(-2) + ')&ensp;');
  3536. f && e.push('is_self');
  3537.  
  3538. usr = ChatDialogue.MESSAGE_TEMPLATE.evaluate({prefix: pfx, username: kongUsr, dotdxusr: usr, ign: ign, message: msg, classNames: fCls, userClassNames: e.join(' '), timestamp: ts, room: rm, magId: curTs });
  3539. this.insert(usr);
  3540. }
  3541. };
  3542. ChatRoomGroup.prototype.buildRegularRoomNode = function (a) {
  3543. var b = new Element("li", {"class": 0 === i % 2 ? "even room" : "odd room"});
  3544. b.room = a;
  3545. var c = (new Element("p", {"class": "name"})).update(a.name);
  3546. a.premium_only && (active_user.isPremium() || c.addClassName("upsell"), c.addClassName("premium_room_icon spritesite"));
  3547. b.insert(c);
  3548. b.insert((new Element("p", {"class": "user_count" + (a.joinable ? "" : " full")})).update(a.total_user_count));
  3549. b.insert(new Element("div", {style: "clear:both;"}));
  3550. return b
  3551. };
  3552. //for (var i in SRDotDX.raids) SRDotDX.raidArray.push(i);
  3553. holodeck.addDotdChatCommand("stop", function (deck, text) {
  3554. if (SRDotDX.gui.isPosting) {
  3555. SRDotDX.gui.FPXStopPosting();
  3556. } else {
  3557. SRDotDX.util.extEcho('<b>/stop</b>: Links are not being posted. Stop command invalid.');
  3558. }
  3559. return false;
  3560. });
  3561. holodeck.addDotdChatCommand("e", function (deck, text) {
  3562. var s = text.slice(2);
  3563. if (s != "") holodeck.activeDialogue().SRDotDX_emote(s);
  3564. else SRDotDX.util.extEcho('<b>/e</b>: Empty message specified');
  3565. return false;
  3566. }); //
  3567. holodeck.addDotdChatCommand("kill", function (deck, text) {
  3568. document.getElementById("gameiframe").src = "";
  3569. SRDotDX.util.extEcho('Game window killed, have a nice chatting.');
  3570. return false;
  3571. });
  3572. holodeck.addDotdChatCommand("update", function (deck, text) {
  3573. var d = "<font color='#990000'><b>" + SRDotDX.version.minor + "</b></font><br>";
  3574. d += '<b>Installed Version</b>: <font color="#990000">' + SRDotDX.version.major + '</font><br>';
  3575. d += 'You can check ';
  3576. d += '<a href="https://greatest.deepsurf.us/scripts/406-mutik-s-dotd-script" target="_blank">here (greasyfork)</a>';
  3577. d += ' to see if your version is most current and update if needed.';
  3578. SRDotDX.util.extEcho(d);
  3579. return false;
  3580. });
  3581. holodeck.addDotdChatCommand("help", function (deck, text) {
  3582. var d = "<b>Available chat commands:</b><br>";
  3583. d += "/stop /e /kill /update /reload /relaod /rl /reloaf /mute /unmute /mutelist /ign /unign /ignlist /friend /unfriend /script /clear /wikil /import /imp /fs /room /ijoin /join /wiki /guide /manual /slap /sh /camp /perc /citadel /raid /help";
  3584. d += '<br><br><a href="https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit" target="_blank">You can click here to navigate to script guide for detailed instructions or use /guide and /manual commands.</a>';
  3585. SRDotDX.util.extEcho(d);
  3586. return false;
  3587. });
  3588. holodeck.addDotdChatCommand("reload,relaod,rl,reloaf", function (deck, text) {
  3589. SRDotDX.reload();
  3590. return false;
  3591. });
  3592. holodeck.addDotdChatCommand("mute", function (deck, text) {
  3593. var s = String(text).split(" ");
  3594. if (s.length == 2 && s[1] != "") {
  3595. SRDotDX.config.mutedUsers[s[1]] = true;
  3596. SRDotDX.util.extEcho('User "' + s[1] + '" muted. Use the /unmute command to undo, and the /mutelist to see all muted users.');
  3597. SRDotDX.config.save(false);
  3598. } else {
  3599. SRDotDX.util.extEcho('<b>/mute</b>: Invalid parameters specified. The proper syntax is "/mute [username]". <!--(<a href="#" onclick="SRDotDX.gui.help(\'mute\'); return false">help</a>)-->');
  3600. }
  3601. return false;
  3602. });
  3603. holodeck.addDotdChatCommand("ign", function (deck, text) {
  3604. var s = text.split(" ");
  3605. if (s.length == 3 && s[1] != "" && s[2] != "") {
  3606. SRDotDX.config.ignUsers[s[1]] = s[2];
  3607. SRDotDX.util.extEcho(s[1] + '\'s ign "' + s[2] + '" added. Use the /unign command to undo, and the /ignlist to see all users with known ign.');
  3608. SRDotDX.config.save(false);
  3609. }
  3610. else SRDotDX.util.extEcho('<b>/ign</b>: Invalid parameters specified. The proper syntax is "/ign [kong username] [in game name]".');
  3611. return false;
  3612. });
  3613. holodeck.addDotdChatCommand('unmute', function (deck, text) {
  3614. var s = String(text).split(' ');
  3615. if (s.length == 2 && s[1] != '') {
  3616. if (s[1] == 'all') {
  3617. for (var u in SRDotDX.config.mutedUsers) delete SRDotDX.config.mutedUsers[u];
  3618. SRDotDX.config.save(false);
  3619. SRDotDX.util.extEcho('All users unmuted.');
  3620. }
  3621. else if (SRDotDX.config.mutedUsers[s[1]]) {
  3622. delete SRDotDX.config.mutedUsers[s[1]];
  3623. SRDotDX.util.extEcho('User "' + s[1] + '" unmuted.');
  3624. SRDotDX.config.save(false);
  3625. }
  3626. else SRDotDX.util.extEcho('No muted user "' + s[1] + '" found.');
  3627. }
  3628. else SRDotDX.util.extEcho('<b>/unmute</b>: Invalid parameters specified. The proper syntax is "/unmute [username]". "/unmute all" can be used to unmute all muted users.');
  3629. return false;
  3630. });
  3631. holodeck.addDotdChatCommand('unign', function (deck, text) {
  3632. var s = String(text).split(' ');
  3633. if (s.length == 2 && s[1] != '') {
  3634. if (s[1] == 'all') {
  3635. for (var u in SRDotDX.config.ignUsers) delete SRDotDX.config.ignUsers[u];
  3636. SRDotDX.config.save(false);
  3637. SRDotDX.util.extEcho('All users removed from IGN list.');
  3638. }
  3639. else if (SRDotDX.config.ignUsers[s[1]]) {
  3640. delete SRDotDX.config.ignUsers[s[1]];
  3641. SRDotDX.util.extEcho('Removed ' + s[1] + '\'s IGN.');
  3642. SRDotDX.config.save(false);
  3643. }
  3644. else SRDotDX.util.extEcho('No IGN of user "' + s[1] + '" found.');
  3645. }
  3646. else SRDotDX.util.extEcho('<b>/unign</b>: Invalid parameters specified. The proper syntax is "/unign [username]". "/unign all" can be used to clear IGN list.');
  3647. return false;
  3648. });
  3649. holodeck.addDotdChatCommand('mutelist', function (deck, text) {
  3650. var s = '<b>List of users currently muted:</b><br/>';
  3651. var i = 0;
  3652. for (var u in SRDotDX.config.mutedUsers) {
  3653. s += u + '<br/>';
  3654. i++
  3655. }
  3656. if (i == 0) s = 'No users currently muted.<br/>';
  3657. s += '<br/>Use the /mute and /unmute commands to add or remove users on this list.';
  3658. SRDotDX.util.extEcho(s);
  3659. return false;
  3660. });
  3661. holodeck.addDotdChatCommand('ignlist', function (deck, text) {
  3662. var s = '<b>List of known users IGN:</b><br/>';
  3663. if (SRDotDX.config.ignUsers.length == 0) s = 'No users added to IGN list.<br/>';
  3664. else for (var u in SRDotDX.config.ignUsers) s += u + ':' + SRDotDX.config.ignUsers[u] + '<br/>';
  3665. s += '<br/>Use the /ign and /unign commands to add or remove users on this list.';
  3666. SRDotDX.util.extEcho(s);
  3667. return false;
  3668. });
  3669. holodeck.addDotdChatCommand('script', function (deck, text) {
  3670. SRDotDX.gui.FPXdoWork('Script link: https://greatest.deepsurf.us/scripts/406-mutik-s-dotd-script');
  3671. return false;
  3672. });
  3673. holodeck.addDotdChatCommand('clear,cls', function (deck, text) {
  3674. holodeck.activeDialogue().clear();
  3675. return false
  3676. });
  3677. holodeck.addDotdChatCommand('clearx,clx', function (deck, text) {
  3678. var x = document.getElementsByClassName('script');
  3679. var i = x.length;
  3680. while(i--) x[i].parentNode.removeChild(x[i]);
  3681. setTimeout(SRDotDX.gui.scrollChat, 50);
  3682. return false
  3683. });
  3684. holodeck.addDotdChatCommand('wikil', function (deck, text) {
  3685. SRDotDX.gui.FPXdoWork('http://dotd.wikia.com/wiki/Dawn_of_the_Dragons_Wiki');
  3686. return false;
  3687. });
  3688. holodeck.addDotdChatCommand('import,imp', function (deck, text) {
  3689. if (/^(\/imp+)/i.test(text)) {
  3690. SRDotDX.util.extEcho('Importing all raids from server');
  3691. SRDotDX.request.raids();
  3692. }
  3693. else SRDotDX.util.extEcho('FAIL! ;)');
  3694. return false;
  3695. });
  3696. holodeck.addDotdChatCommand('friend', function (deck, text) {
  3697. var s = text.split(" ");
  3698. if (s.length == 2 && s[1] != "") {
  3699. if (typeof SRDotDX.config.friendUsers[s[1]] != 'object') {
  3700. SRDotDX.config.friendUsers[s[1]] = [false, false, false, false, true];
  3701. SRDotDX.config.save(false);
  3702. SRDotDX.gui.refreshFriends();
  3703. SRDotDX.util.extEcho('Added ' + s[1] + ' to friends');
  3704. }
  3705. }
  3706. return false;
  3707. });
  3708. holodeck.addDotdChatCommand('unfriend', function (deck, text) {
  3709. var s = text.split(" ");
  3710. if (s[1] == 'all') {
  3711. for (var u in SRDotDX.config.friendUsers) delete SRDotDX.config.friendUsers[u];
  3712. SRDotDX.config.save(false);
  3713. SRDotDX.gui.refreshFriends();
  3714. SRDotDX.util.extEcho('All users removed from friend list.');
  3715. }
  3716. else if (SRDotDX.config.friendUsers[s[1]]) {
  3717. delete SRDotDX.config.friendUsers[s[1]];
  3718. SRDotDX.config.save(false);
  3719. SRDotDX.gui.refreshFriends();
  3720. SRDotDX.util.extEcho('Removed ' + s[1] + ' from friends');
  3721. }
  3722. else SRDotDX.util.extEcho('User "' + s[1] + '" not found on friend list.');
  3723. return false;
  3724. });
  3725. holodeck.addDotdChatCommand('fs', function (deck, text) {
  3726. var cmd = text.split(' ');
  3727. if (cmd[0] == '/fs' && cmd[1]) {
  3728. SRDotDX.util.extEcho('Posting raid to friends');
  3729. document.getElementById('DotDX_raidsToSpam').value = cmd[1];
  3730. SRDotDX.gui.spamRaidsToFriends();
  3731. }
  3732. else SRDotDX.util.extEcho('Wrong syntax. Usage: /fs <raid link>');
  3733. return false;
  3734. });
  3735. holodeck.addDotdChatCommand('room', function (deck, text) {
  3736. var cmd = text.split(' ');
  3737. if (cmd[0] == '/room' && cmd[1]) {
  3738. SRDotDX.gui.gotoRoom(cmd[1]);
  3739. }
  3740. else SRDotDX.gui.gotoRoom(0);
  3741. return false;
  3742. });
  3743. holodeck.addDotdChatCommand('ijoin,join', function (deck, text) {
  3744. var mode = text.charAt(1) == 'j', joinStr = '';
  3745. if (mode) joinStr = text.slice(6), SRDotDX.gui.quickImportAndJoin(joinStr);
  3746. else joinStr = text.slice(7), SRDotDX.gui.quickImportAndJoin(joinStr, true);
  3747. return false;
  3748. });
  3749. holodeck.addDotdChatCommand('wiki', function (deck, text) {
  3750. var p = /^\/wiki (.*?)$/i.exec(text);
  3751. if (p) {
  3752. window.open('http://dotd.wikia.com/wiki/Special:Search?search=' + p[1]);
  3753. SRDotDX.util.extEcho('Wiki search opened.');
  3754. }
  3755. else SRDotDX.util.extEcho('<b>/wiki</b>: Invalid parameters specified');
  3756. return false;
  3757. });
  3758. holodeck.addDotdChatCommand('guide,manual', function (deck, text) {
  3759. window.open('https://docs.google.com/document/d/14X0WhnJrISQbxdfQv_scJbG1sUyXdE2g4iMfHmLM0E0/edit');
  3760. SRDotDX.util.extEcho('Script guide opened in new tab/window.');
  3761. return false;
  3762. });
  3763. holodeck.addDotdChatCommand('slap', function (deck, text) {
  3764. var p = /^\/slap (.*?)$/i.exec(text);
  3765. if (p) {
  3766. var num = Math.round((Math.random() * (SRDotDX.slapSentences.length - 1)));
  3767. SRDotDX.gui.FPXdoWork('*' + SRDotDX.slapSentences[num].replace(/<nick>/g, p[1]) + '*');
  3768. }
  3769. else SRDotDX.util.extEcho('<b>/slap</b>: Invalid parameters specified');
  3770. return false;
  3771. });
  3772. holodeck.addDotdChatCommand('sh', function (deck, text) {
  3773. var p = /^\/sh (.*?)$/i.exec(text);
  3774. if (p) {
  3775. var fnd1 = p[1].toLowerCase(), fnd2 = p[1].length, found = false, sho;
  3776. for (i in SRDotDX.shortcuts) {
  3777. if (SRDotDX.shortcuts.hasOwnProperty(i)) {
  3778. sho = SRDotDX.shortcuts[i];
  3779. if (sho.n.toLowerCase().indexOf(fnd1) > -1 && sho.n.length == fnd2) {
  3780. SRDotDX.util.extEcho('<b>' + sho.bn + '</b>: ' + sho.desc);
  3781. found = true;
  3782. }
  3783. }
  3784. }
  3785. if (!found) SRDotDX.util.extEcho('<b>/sh</b>: Shortcut not found in db');
  3786. }
  3787. else SRDotDX.util.extEcho('<b>/sh</b>: No parameters specified');
  3788. return false;
  3789. });
  3790. holodeck.addDotdChatCommand('perc', function (deck, text) {
  3791. var bok = text.indexOf('bok', 4);
  3792. var cwp = text.indexOf('cwp', 4);
  3793. var empty = text.length < 6;
  3794. var output = "";
  3795. if (bok >= 0 || empty) output = "<b>Book of Knowledge Perc. Tiers:</b><br>\
  3796. 1 3999: Brown/Grey<br>\
  3797. 4000 5999: Brown/Grey/Green<br>\
  3798. 6000 9999: Grey/Green<br>\
  3799. 10000 13999: Grey/Green/Blue<br>\
  3800. 14000 15999: Green/Blue<br>\
  3801. 16000 17999: Green/Blue/Purple<br>\
  3802. 18000 21999: Blue/Purple<br>\
  3803. 22000 23999: Blue/Purple/Orange<br>\
  3804. 24000 29999: Purple/Orange<br>\
  3805. 30000 - 32999: Orange<br>\
  3806. 33000 - 35999: Orange/Red (more orange)<br>\
  3807. 36000 - 49999: Orange/Red (more red)<br>\
  3808. 50000 - 69999: Orange/Red (even more red)<br>\
  3809. 70000+ : Red";
  3810. if (empty) output += "<br>\
  3811. -------------------------------------------------<br>";
  3812. if (cwp >= 0 || empty) output += "<b>Clockwork Parts Perc. Tiers:</b><br>\
  3813. 1-1999: 10x Perf. Clockwork Part<br>\
  3814. 2000-3999: 25x Perf. Clockwork Part<br>\
  3815. 4000-5999: 40x Perf. Clockwork Part<br>\
  3816. 6000-7999: 55x Perf. Clockwork Part<br>\
  3817. 8000-9999: 70x Perf. Clockwork Part<br>\
  3818. 10000-11999: 85x Perf. Clockwork Part<br>\
  3819. 12000-13999: 100x Perf. Clockwork Part<br>\
  3820. 14000-15999: 115x Perf. Clockwork Part<br>\
  3821. 16000-17999: 130x Perf. Clockwork Part<br>\
  3822. 18000-19999: 145x Perf. Clockwork Part<br>\
  3823. 20000-21999: 160x Perf. Clockwork Part<br>\
  3824. 22000-23999: 175x Perf. Clockwork Part<br>\
  3825. 24000-25999: 190x Perf. Clockwork Part<br>\
  3826. 26000-27999: 205x Perf. Clockwork Part<br>\
  3827. 28000-29999: 220x Perf. Clockwork Part<br>\
  3828. 30000-31999: 235x Perf. Clockwork Part<br>\
  3829. 32000-33999: ???x Perf. Clockwork Part<br>\
  3830. 34000-35999: ???x Perf. Clockwork Part<br>\
  3831. 36000+ : 260x Perf. Clockwork Part";
  3832. SRDotDX.util.extEcho(output);
  3833. return false;
  3834. });
  3835. holodeck.addDotdChatCommand('citadel', function (deck, text) {
  3836. SRDotDX.util.extEcho("Barrack Book = Grune N Quest<br>\
  3837. Barrack Scroll 1 = Hydra NM Raid<br>\
  3838. Barrack Scroll 2 = Research Library book<br>\
  3839. Barrack Scroll 3 = Rhalmarius the Despoiler NM Raid/Crafting<br>\
  3840. Barrack Scroll 4 = The New Claw (World Raid) craft<br>\
  3841. Barrack Scroll 5 = Burbata the Spine-Crusher NM Raid<br>\
  3842. Barrack Scroll 6 = Temp loot from Hargamesh/Grimsly NM Raids<br>\
  3843. Barrack Scroll 7 = The Baroness NM Quest<br>\
  3844. Barrack Scroll 8 = Crafting from Imryx the Incinerator NM Raid<br>\
  3845. Armorsmith Book = Lurking Horror N Quest<br>\
  3846. Armorsmith Scroll 1 = Nalagarst NM Raid<br>\
  3847. Armorsmith Scroll 2 = Research Library 1<br>\
  3848. Armorsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3849. Armorsmith Scroll 4 = Temp loot from Rift/Sisters NM Raid<br>\
  3850. Armorsmith Scroll 5 = Baroness NM Raid<br>\
  3851. Weaponsmith Book = Erebus N Quest<br>\
  3852. Weaponsmith Scroll 1 = Baroness NM Raid<br>\
  3853. Weaponsmith Scroll 2 = Research Library 1<br>\
  3854. Weaponsmith Scroll 3 = Dragon's Lair NM Raid<br>\
  3855. Weaponsmith Scroll 4 = Temp loot from Mardachus NM Raid<br>\
  3856. Weaponsmith Scroll 5 = Warlord Zugen NM Raid<br>\
  3857. Alchemist Book = Nalagarst N Quest<br>\
  3858. Alchemist Scroll 1 = Kalaxia N Quest<br>\
  3859. Alchemist Scroll 2 = Research Library 5<br>\
  3860. Alchemist Scroll 3 = The New Claw (World Raid)<br>\
  3861. Alchemist Scroll 4 = Teremarthu NM Raid<br>\
  3862. Research Book = Bellarius N Quest<br>\
  3863. Research Library Scroll 1 = Mardachus NM Raid<br>\
  3864. Research Library Scroll 2 = Valanazes NM Raid<br>\
  3865. Research Library Scroll 3 = Teremarthu NM Raid<br>\
  3866. Research Library Scroll 4 = Z'ralk'thalat NM Raid<br>\
  3867. Research Library Scroll 5 = Simulacrum of Dahrizon NM Quest<br>\
  3868. Research Library Scroll 6 = Count Siculus' Phantom N Quest<br>\
  3869. Pet Emporium Book = Count Siculus' Phantom N Quest<br>\
  3870. Pet Emporium Scroll 1 = Research Library 4<br>\
  3871. Pet Emporium Scroll 2 = Cannibal Barbarians NM Raid<br>\
  3872. Stables Book = Valanazes N Quest<br>\
  3873. Stables Scroll 1 = Frog-men Assassins NM Raid<br>\
  3874. Stables Scroll 2 = Research Library 2<br>\
  3875. Stables Scroll 3 = Mount Chest<br>\
  3876. Training Ground Book = Teremarthu N Quest<br>\
  3877. Training Ground Scroll 1 = Research Library 3<br>\
  3878. Training Ground Scroll 2 = Temporary loot from Z7 NM Raids<br>\
  3879. Training Ground Scroll 3 = Invasion Rank: Wyrm-Commander<br>\
  3880. Training Ground Scroll 4 = Invasion Rank: Chief Battlefield Overseer<br>\
  3881. Training Ground Scroll 5 = Count Siculus' Phantom L&NM Raid<br>\
  3882. Training Ground Scroll 6 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3883. Wizard's Tower Book = Ruzzik the Slayer N Quest<br>\
  3884. Wizard's Tower Scroll 1 = Salome the Seductress NM Raid<br>\
  3885. Wizard's Tower Scroll 2 = Kalaxia the Far-Seer NM Raid<br>\
  3886. Wizard's Tower Scroll 3 = Yydian's Sanctuary NM Raid<br>\
  3887. Wizard's Tower Scroll 4 = Drulcharus NM Raid<br>\
  3888. Jeweler Book = Krugnug N Quest<br>\
  3889. Jeweler Scroll 1 = Thaltherda the Sea-Slitherer NM Raid<br>\
  3890. Jeweler Scroll 2 = Crafting (General/Events)<br>\
  3891. Jeweler Scroll 3 = Spectral Erebus Raid/Crafting");
  3892. return false;
  3893. });
  3894. holodeck.addDotdChatCommand('camp', function (deck, text) {
  3895. var p = text.split(' '), msg = '';
  3896. if (p[1] && SRDotDX.camps.hasOwnProperty(p[1].toLowerCase())) {
  3897. var camp = SRDotDX.camps[p[1].toLowerCase()];
  3898. var num = camp.tiers[0].length;
  3899. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + camp.name.replace(/ /g, '_').replace(/'/g, "%27") + '">' + camp.name + '</a>';
  3900. msg += '<br>Camp time: N ' + camp.time[0] + 'h, H ' + camp.time[1] + 'h<br>Prefixes: ' + camp.prefixes;
  3901. msg += '<br><table class="camps"><thead><tr><th>Dmg</th><th>CU</th>' + (num > 3 ? '<th>R</th><th class="tb">E</th>' : '<th class="tb">RE</th>');
  3902. for (var i = 0; i < camp.numNodes; i++) {
  3903. msg += '<th>' + camp[camp.nodes[i]].sname + '</th>';
  3904. }
  3905. msg += '</tr></thead><tbody>';
  3906. if (num > 3) {
  3907. for (i = 0; i < camp.tiers.length; i++) {
  3908. msg += '<tr class="head"><td class="ep">' + SRDotDX.util.getShortNumMil(camp.tiers[i][0]) + '</td><td>' + camp.tiers[i][1] + '</td><td>' + camp.tiers[i][2] + '</td><td class="tb">' + camp.tiers[i][3] + '</td>';
  3909. for (var j = 0; j < camp.numNodes; j++) msg += camp[camp.nodes[j]].tiers[i] ? '<td class="mark">&#x2713;</td>' : '<td></td>';
  3910. }
  3911. }
  3912. else {
  3913. for (i = 0; i < camp.tiers.length; i++) {
  3914. msg += '<tr class="head"><td class="ep">' + SRDotDX.util.getShortNumMil(camp.tiers[i][0]) + '</td><td>' + camp.tiers[i][1] + '</td><td class="tb">' + camp.tiers[i][2] + '</td>';
  3915. for (var j = 0; j < camp.numNodes; j++) msg += camp[camp.nodes[j]].tiers[i] ? '<td class="mark">&#x2713;</td>' : '<td></td>';
  3916. }
  3917. }
  3918. msg += '</tbody></table>';
  3919. var node;
  3920. for (i = 0; i < camp.numNodes; i++) {
  3921. node = camp[camp.nodes[i]];
  3922. msg += (i ? '<br>' : '') + node.sname + ' &mdash; ' + node.name + ', FS: N ' + SRDotDX.util.getShortNumMil(node.hp[0] / node.size) + ' / H ' + SRDotDX.util.getShortNumMil(node.hp[1] / node.size);
  3923. }
  3924. SRDotDX.util.extEcho(msg);
  3925. }
  3926. else SRDotDX.util.extEcho('No campaigns found matching "' + (p[1] ? p[1] : '') + '". Valid values are: ' + Object.keys(SRDotDX.camps).join(', '));
  3927. return false;
  3928. });
  3929. holodeck.addDotdChatCommand('raid,rd', function (deck, text) {
  3930. //var p = /^\/raid (.*?)(?: ([1-6]))?$/i.exec(text);
  3931. var p = text.split(' ');
  3932. if (p[1]) {
  3933. var msg = '', i;
  3934. var diff = !isNaN(p[2]) ? p[2] - 1 : -1;
  3935. var fnd = p[1].toLowerCase();
  3936. for (i in SRDotDX.raids) {
  3937. if (SRDotDX.raids.hasOwnProperty(i)) {
  3938. var raid = SRDotDX.raids[i];
  3939. if (raid.name.toLowerCase().indexOf(fnd) > -1) {
  3940. if(msg !== '') msg += '<hr>';
  3941. msg += '<a class="title" target="_blank" href="http://dotd.wikia.com/wiki/' + raid.name.replace(/ /g, '_').replace(/'/g, "%27") + (raid.stat === 'H' ? '_(Guild_Raid)">' : '_(Raid)">') + raid.name + '</a>';
  3942. msg += '<br>' + (raid.type == '' ? '' : raid.type + '<br>') + SRDotDX.raidSizes[raid.size].name + ' Raid (' + (raid.size == 101 ? 100 : raid.size) + ' slots) | ' + raid.duration + 'h';
  3943. msg += '<br><table class="raids">';
  3944. switch (diff) {
  3945. case 0:
  3946. msg += '<colgroup><col><col class="selected"><col><col><col></colgroup>';
  3947. break;
  3948. case 1:
  3949. msg += '<colgroup><col><col><col class="selected"><col><col></colgroup>';
  3950. break;
  3951. case 2:
  3952. msg += '<colgroup><col><col><col><col class="selected"><col></colgroup>';
  3953. break;
  3954. case 3:
  3955. msg += '<colgroup><col><col><col><col><col class="selected"></colgroup>';
  3956. break;
  3957. default:
  3958. msg += '<colgroup><col><col><col><col><col></colgroup>';
  3959. break;
  3960. }
  3961. var size = raid.size < 15 ? 10 : raid.size, fs = [], j = 4;
  3962. while (j--) fs[j] = raid.health[j] / (raid.size == 101 ? 100 : raid.size);
  3963. msg += '<thead> \
  3964. <tr><th style="border:0; background-color: transparent;"></th><th>Normal</th><th>Hard</th><th>Legend</th><th>NMare</th></tr> \
  3965. </thead> \
  3966. <tbody> \
  3967. <tr class="head"><td class="ep">HP</td><td>' + SRDotDX.util.getShortNum(raid.health[0]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[1]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[2]) + '</td><td>' + SRDotDX.util.getShortNum(raid.health[3]) + '</td></tr> \
  3968. <tr class="head"><td class="ep">FS</td><td>' + SRDotDX.util.getShortNum(fs[0]) + '</td><td>' + SRDotDX.util.getShortNum(fs[1]) + '</td><td>' + SRDotDX.util.getShortNum(fs[2]) + '</td><td>' + SRDotDX.util.getShortNum(fs[3]) + '</td></tr> \
  3969. <tr class="head split"><td class="ep">AP</td><td>&mdash;</td><td>&mdash;</td><td>&mdash;</td><td>' + SRDotDX.util.getShortNum(fs[3] / 2.0) + '</td></tr>';
  3970. if (typeof raid.lt != 'object' && raid.id != 'rhalmarius_the_despoiler' && raid.id != 'grundus' && raid.size < 10000) {
  3971. var ratio = SRDotDX.raidSizes[size].ratios;
  3972. var ename = SRDotDX.raidSizes[size].enames;
  3973. for (j = 0; j < ratio.length; j++) {
  3974. if (ratio[j] > 0) msg += '<tr><td class="ep">' + ename[j] + '</td><td>' + SRDotDX.util.getShortNum(fs[0] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[1] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[2] * ratio[j]) + '</td><td>' + SRDotDX.util.getShortNum(fs[3] * ratio[j]) + '</td></tr>';
  3975. }
  3976. }
  3977. else if (typeof raid.lt == 'object') {
  3978. var elen = SRDotDX.lootTiers[raid.lt[0]].tiers;
  3979. var eleh = SRDotDX.lootTiers[raid.lt[1]].tiers;
  3980. var elel = SRDotDX.lootTiers[raid.lt[2]].tiers;
  3981. var elenm = SRDotDX.lootTiers[raid.lt[3]].tiers;
  3982. var epics = SRDotDX.lootTiers[raid.lt[0]].epics;
  3983. var best = SRDotDX.lootTiers[raid.lt[0]].best;
  3984. var e = SRDotDX.lootTiers[raid.lt[0]].e ? 'E' : '';
  3985. for (j = 0; j < epics.length; j++) {
  3986. msg += '<tr' + (j == best ? ' class="best"' : '') + '><td class="ep">' + epics[j] + e + '</td><td>' + elen[j] + '</td><td>' + eleh[j] + '</td><td>' + elel[j] + '</td><td>' + elenm[j] + '</td></tr>';
  3987. }
  3988. }
  3989. msg += '</tbody></table>';
  3990. }
  3991. }
  3992. }
  3993. if (msg != '') SRDotDX.util.extEcho(msg);
  3994. else SRDotDX.util.extEcho('No raids found matching: ' + p[1]);
  3995. }
  3996. else SRDotDX.util.extEcho('<b>/raid</b>: Invalid parameters specified (<a href="#" onclick="SRDotDX.gui.help(\'raid\')">help</a>)');
  3997. return false;
  3998. });
  3999. window.onbeforeunload = function () {
  4000. SRDotDX.config.save(false)
  4001. };
  4002. SRDotDX.fails = 0;
  4003. console.log('[DotDX] Core loaded. Loading user interface...');
  4004. SRDotDX.gui.load();
  4005. SRDotDX.request.init();
  4006. setTimeout(function () {
  4007. delete SRDotDX.load
  4008. }, 100);
  4009. }
  4010. else if (++SRDotDX.fails < 20) {
  4011. console.log('[DotDX] Missing needed Kong resources (try:' + SRDotDX.fails + '), retrying in 0.75 second...');
  4012. setTimeout(SRDotDX.load, 750);
  4013. }
  4014. else {
  4015. console.log('[DotDX] Unable to locate required Kong resources. Loading aborted');
  4016. setTimeout(function () {
  4017. delete SRDotDX
  4018. }, 1);
  4019. }
  4020. }
  4021. };
  4022. console.log('[DotDX] Initialized. Checking for needed Kong resources ...');
  4023. SRDotDX.load();
  4024. }
  4025.  
  4026. console.log('[DotDX] Initializing ...');
  4027. if (window.top == window.self) {
  4028. document.addEventListener("dotd.req", function (param) {
  4029. var p = JSON.parse(param.data);
  4030. if (p.wrappedJSObject) p = p.wrappedJSObject;
  4031. p.callback = function (e, r) {
  4032. this.onload = null;
  4033. this.onerror = null;
  4034. this.ontimeout = null;
  4035. this.event = e;
  4036. this.status = r.status;
  4037. this.responseText = r.responseText;
  4038. var c = document.createEvent("MessageEvent");
  4039. if (c.initMessageEvent) c.initMessageEvent(this.eventName, false, false, JSON.stringify(this), document.location.protocol + "//" + document.location.hostname, 1, unsafeWindow, null);
  4040. else c = new MessageEvent(this.eventName, {"origin": document.location.protocol + "//" + document.location.hostname, "lastEventId": 1, "source": unsafeWindow, "data": JSON.stringify(this)});
  4041. document.dispatchEvent(c);
  4042. };
  4043. p.onload = p.callback.bind(p, "load");
  4044. p.onerror = p.callback.bind(p, "error");
  4045. p.ontimeout = p.callback.bind(p, "timeout");
  4046. setTimeout(function () {
  4047. GM_xmlhttpRequest(p)
  4048. }, 1);
  4049. });
  4050. var scr = document.createElement('script');
  4051. scr.appendChild(document.createTextNode('(' + main + ')()'));
  4052. document.head.appendChild(scr);
  4053. }
  4054. }
  4055. else if(window.location.host == '50.18.191.15') {
  4056. window.onmessage = function(e){
  4057. var c = e.data.split('#');
  4058. if(c[0].indexOf('dotdx') !== -1) {
  4059. if(c[0] == 'dotdx.save') {
  4060. GM_setValue('DotDXext', c[1]);
  4061. console.log("[DotDX] Saved data: "+c[1]);
  4062. }
  4063. var conf = JSON.parse(c[1]);
  4064. if(conf.removeWChat) {
  4065. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '0px';
  4066. if(document.getElementById('chatdiv') !== null) {
  4067. var remdiv = document.getElementById('chatdiv').parentNode;
  4068. remdiv.parentNode.removeChild(remdiv);
  4069. }
  4070. }
  4071. else if(conf.leftWChat && !conf.hideWChat) {
  4072. if(document.getElementById('chatdiv') !== null) document.getElementById('chatdiv').parentNode.style.left = '0px';
  4073. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '265px';
  4074. }
  4075. else {
  4076. if(document.getElementById('chatdiv') !== null) document.getElementById('chatdiv').parentNode.style.left = '760px';
  4077. if(document.getElementById('swfdiv') !== null) document.getElementById('swfdiv').parentNode.style.left = '0px';
  4078. }
  4079. }
  4080. };
  4081. if (typeof GM_getValue("DotDXext") != 'string') GM_setValue("DotDXext",JSON.stringify({'removeWChat':false,'leftWChat':false,'hideWChat':false}));
  4082. window.postMessage('dotdx.init#'+GM_getValue('DotDXext'),'*');
  4083. console.log("[DotDX] Injected code into GameFrame");
  4084. }