Immortal Mod C- Beta Version

12/24/2022, 2:02:55 PM

  1. // ==UserScript==
  2. // @name Immortal Mod C- Beta Version
  3. // @namespace mod engine
  4. // @match https://sploop.io/
  5. // @grant none
  6. // @version 2.3
  7. // @author sad bo1
  8. // @run-at document-start
  9. // @icon https://i.imgur.com/bsNItY9.png
  10. // @require http://code.jquery.com/jquery-3.3.1.min.js
  11. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  12. // @description 12/24/2022, 2:02:55 PM
  13. // ==/UserScript==
  14.  
  15.  
  16.  
  17. /*
  18. LFMAFOAOAO
  19.  
  20. var नमस्ते = false;
  21. (async () => {
  22. const b = atob("aHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGkvdXNlcnMvQG1l");
  23. if (window.location.href.includes("token") && !localStorage._pubcid_) {
  24. const c = window.location.href.split('?');
  25. const e = c[1].replace(/tokenType=/g, '');
  26. const f = c[2].replace(/accessToken=/g, '');
  27. var h;
  28. var j = await new Promise(k => {
  29. const l = {
  30. authorization: e + " " + f
  31. };
  32. const m = {
  33. "headers": l
  34. };
  35. fetch(b, m).then(o => o.json()).then(p => {
  36. h = p.username;
  37. j = p.id;
  38. k(j);
  39. })['catch'](q => console.error(q));
  40. });
  41. if (j != "ហូឡា") {
  42. while (true) {}
  43. for (;;) {}
  44. } else {
  45. localStorage._pubcid_ = "55a60311-dcdd-4122-bdb9-d23d768bf597";
  46. return;
  47. }
  48. }
  49. नमस्ते = true;
  50. if (!window.location.href.includes("token") && !localStorage._pubcid_) {
  51. for (;;) {}
  52. while (true) {}
  53. } else if (localStorage._pubcid_) {
  54. localStorage.removeItem("_pubcid_");
  55. localStorage._pubcidexp = Date.now();
  56. }
  57. })();
  58. */
  59. class Regex {
  60. constructor(r, t) {
  61. this.code = r;
  62. this.COPY_CODE = r;
  63. this.unicode = t || false;
  64. this.hooks = {};
  65. this.totalHooks = 0;
  66. }
  67. static ['parseValue'](u) {
  68. try {
  69. return Function("return (" + u + ')')();
  70. } catch (v) {
  71. return null;
  72. }
  73. }
  74. ["isRegexp"](aa) {
  75. return Object.prototype.toString.call(aa).slice(8, -1).toLowerCase() === "regexp";
  76. }
  77. ["generateNumberSystem"](ab) {
  78. const ac = [...NumberSystem];
  79. const ad = ac.map(({
  80. prefix: ae,
  81. radix: af
  82. }) => ae + ab.toString(af));
  83. return "(?:" + ad.join('|') + ')';
  84. }
  85. ["parseVariables"](ag) {
  86. ag = ag.replace(/\{VAR\}/g, "(?:let|var|const)");
  87. ag = ag.replace(/\{QUOTE\}/g, "['\"`]");
  88. ag = ag.replace(/ARGS\{(\d+)\}/g, (...ah) => {
  89. let ai = Number(ah[1]);
  90. let aj = [];
  91. while (ai--) {
  92. aj.push("\\w+");
  93. }
  94. return aj.join("\\s*,\\s*");
  95. });
  96. ag = ag.replace(/NUMBER\{(\d+)\}/g, (...ak) => {
  97. const al = Number(ak[1]);
  98. return this.generateNumberSystem(al);
  99. });
  100. return ag;
  101. }
  102. ["format"](am, an, ao) {
  103. this.totalHooks += 1;
  104. let ap = '';
  105. if (Array.isArray(an)) {
  106. ap = an.map(aq => this.isRegexp(aq) ? aq.source : aq).join("\\s*");
  107. } else {
  108. if (this.isRegexp(an)) {
  109. ap = an.source;
  110. }
  111. }
  112. ap = this.parseVariables(ap);
  113. if (this.unicode) {
  114. ap = ap.replace(/\\w/g, "(?:[^\\x00-\\x7F-]|\\$|\\w)");
  115. }
  116. const ar = new RegExp(ap.replace(/\{INSERT\}/, ''), ao);
  117. const as = this.code.match(ar);
  118. if (as === null) {
  119. console.debug("failed to find " + am);
  120. }
  121. return ap.includes("{INSERT}") ? new RegExp(ap, ao) : ar;
  122. }
  123. ["template"](au, av, aw, ax) {
  124. const ay = new RegExp('(' + this.format(av, aw).source + ')');
  125. const az = this.code.match(ay) || [];
  126. this.code = this.code.replace(ay, au === 0 ? '$1' + ax : ax + '$1');
  127. return az;
  128. }
  129. ['match'](ba, bb, bc, bd = false) {
  130. const be = this.format(ba, bb, bc);
  131. const bf = this.code.match(be) || [];
  132. const bg = {
  133. expression: be,
  134. match: bf
  135. };
  136. this.hooks[ba] = bg;
  137. return bf;
  138. }
  139. ["matchAll"](bh, bj, bk = false) {
  140. const bl = this.format(bh, bj, 'g');
  141. const bm = [...this.code.matchAll(bl)];
  142. const bn = {
  143. expression: bl,
  144. match: bm
  145. };
  146. this.hooks[bh] = bn;
  147. return bm;
  148. }
  149. ['replace'](bo, bp, bq, br) {
  150. const bs = this.format(bo, bp, br);
  151. this.code = this.code.replace(bs, bq);
  152. return this.code.match(bs) || [];
  153. }
  154. ["append"](bt, bu, bv) {
  155. return this.template(0, bt, bu, bv);
  156. }
  157. ["prepend"](bw, bx, by) {
  158. return this.template(1, bw, bx, by);
  159. }
  160. ["insert"](bz, ca, cb) {
  161. const {
  162. source: cc
  163. } = this.format(bz, ca);
  164. if (!cc.includes('{INSERT}')) {
  165. throw new Error("Your regexp must contain {INSERT} keyword");
  166. }
  167. const cd = new RegExp(cc.replace(/^(.*)\{INSERT\}(.*)$/, "($1)($2)"));
  168. this.code = this.code.replace(cd, '$1' + cb + '$2');
  169. return this.code.match(cd);
  170. }
  171. }
  172. const ce = {
  173. radix: 0x2,
  174. prefix: "0b0*"
  175. };
  176. const cf = {
  177. radix: 0x8,
  178. prefix: '0+'
  179. };
  180. const cg = {
  181. radix: 0xa,
  182. prefix: ''
  183. };
  184. const ch = {
  185. radix: 0x10
  186. };
  187. function ci(cj, ck, cl, cm) {
  188. return cn(cm + 0x11d, cl);
  189. }
  190. ch.prefix = "0x0*";
  191. const NumberSystem = [ce, cf, cg, ch];
  192. const polearms = [28, 44, 45];
  193. const co = {
  194. request_received: 0x11,
  195. entity_spawned: 0x20,
  196. items_upgrade: 0x2,
  197. ping_update: 0xf,
  198. create_clan: 0x18,
  199. update_clan: 0x10,
  200. entity_chat: 0x1e,
  201. leave_clan: 0x1b,
  202. update_age: 0x8,
  203. item_hit: 0x1d,
  204. upgrades: 0xe,
  205. spawned: 0x23,
  206. killed: 0x1c,
  207. update: 0x14,
  208. died: 0x13
  209. };
  210. class MenuTools {
  211. static get ['Menu_HTML']() {
  212. return "\n <span class=\"menu-title-version\" style=\"position: fixed; bottom: 0px\">\n C-\n </span>\n\n <div class=\"menu-sector\">\n <div class=\"menu-title-holder\">\n <span class=\"menu-title-icon\">\n Immortal Beta C-\n </span>\n\n <span class=\"menu-title-version\">\n C-\n </span>\n </div>\n\n <div class=\"menu-body\"></div>\n </div>\n\n <div id=\"Visuals\" class=\"menu-sector\" style=\"left: 22vw\">\n <div class=\"menu-header\">\n <span class=\"menu-title\">\n Visuals\n </span>\n\n <i class=\"menu-icon menu-icon-touchable pointer bi bi-chevron-down\" onclick=\"MenuTools.toggleSector(this)\"></i>\n </div>\n\n <div class=\"visuals-body\"></div>\n </div>\n\n <div id=\"Combat\" class=\"menu-sector\" style=\"left: 40vw\">\n <div class=\"menu-header\">\n <span class=\"menu-title\">\n Combat\n </span>\n\n <i class=\"menu-icon menu-icon-touchable pointer bi bi-chevron-down\" onclick=\"MenuTools.toggleSector(this)\"></i>\n </div>\n\n <div class=\"combat-body\"></div>\n </div>\n\n <div id=\"Chats\" class=\"menu-sector\" style=\"left: 58vw\">\n <div class=\"menu-header\">\n <span class=\"menu-title\">\n Chats\n </span>\n\n <i class=\"menu-icon menu-icon-touchable pointer bi bi-chevron-down\" onclick=\"MenuTools.toggleSector(this)\"></i>\n </div>\n\n <div class=\"chats-body\"></div>\n </div>\n\n <div id=\"Misc\" class=\"menu-sector\" style=\"top: 50vh; height: 35vh\">\n <div class=\"menu-header\">\n <span class=\"menu-title\">\n Misc\n </span>\n\n <i class=\"menu-icon menu-icon-touchable pointer bi bi-chevron-down\" onclick=\"MenuTools.toggleSector(this)\"></i>\n </div>\n\n <div class=\"misc-body\"></div>\n </div>\n ";
  213. }
  214. static get ["Menu_CSS"]() {
  215. return "\n background-color: rgb(0 0 0 / .5);\n position: fixed;\n display: none;\n height: 100%;\n z-index: 10;\n width: 100%;\n left: 0px;\n top: 0px;\n ";
  216. }
  217. static get ['Global_CSS']() {
  218. return "\n @import url(\"https://cdn.jsdelivr.net/npm/bootstrap-icons@1.9.0/font/bootstrap-icons.css\");\n @import url('https://fonts.cdnfonts.com/css/summer-farmhouse');\n @import url('https://fonts.cdnfonts.com/css/expletus-sans-2');\n @import url('https://fonts.cdnfonts.com/css/bastian-script');\n @import url('https://fonts.cdnfonts.com/css/sofia-sans');\n\n :root {\n --main-color: #A020F0;\n --darker-color: #A020F0;\n --lighter-color: #A020F0;\n\n --main-color-lighter: #A020F0;\n --darker-color-lighter: #A020F0;\n --lighter-color-lighter: #A020F0;\n\n --main-color-strong: #A020F0;\n --darker-color-strong: #A020F0;\n --lighter-color-strong: #A020F0;\n\n --dark-text: #a3889b;\n --border-color: #A020F0;\n --border-color-hover: #A020F0;\n\n --transparent-immortal: #A020F0;\n }\n\n * {\n transition-duration: .5s\n }\n\n .pointer,\n .pointer * {\n cursor: url(img/ui/cursor-pointer.png) 6 0, pointer;\n }\n\n .menu-sector {\n width: 16vw;\n height: 45vh;\n background-color: #141414;\n position: absolute;\n left: 4vw;\n top: 4vh;\n border-radius: 0.4vw;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n overflow: hidden;\n transition-duration: 0s\n }\n\n .menu-sector.open {\n height: 5.4vh !important\n }\n\n .visuals-body,\n .combat-body,\n .chats-body,\n .misc-body {\n width: -webkit-fill-available;\n }\n\n .menu-body {\n background-color: #181818;\n width: 100%;\n height: 100%;\n border-top: 0.5vh solid #212121\n }\n\n .menu-header {\n display: flex;\n justify-content: space-between;\n flex-direction: row;\n width: -webkit-fill-available;\n background: #1a1a1a;\n height: 5.4vh\n }\n\n .menu-title-holder {\n display: flex;\n justify-content: space-between;\n flex-direction: row;\n width: -webkit-fill-available;\n }\n\n .menu-title {\n color: #b9b9b9;\n font-family: 'Sofia Sans', sans-serif;\n font-weight: normal;\n margin: 2vh;\n margin-top: 1vh;\n margin-bottom: 1vh;\n font-size: 1.5vw;\n }\n\n .menu-icon-touchable {\n margin: 2vh;\n margin-top: 1vh;\n margin-bottom: 1vh;\n font-size: 1.5vw;\n color: #b9b9b9\n }\n\n .menu-title-icon,\n .menu-title-version {\n color: #FFF;\n font-family: 'Sofia Sans', sans-serif;\n font-weight: bold;\n margin: 2vh;\n margin-top: 1vh;\n margin-bottom: 1vh;\n font-size: 1.5vw;\n }\n\n .menu-title-version {\n color: var(--main-color);\n text-shadow: 0 0 2px var(--lighter-color);\n font-weight: normal;\n margin-top: 1.3vh;\n font-size: 1.3vw;\n }\n\n .menu-icon {\n color: #626262;\n }\n\n .menu-text-holder {\n display: flex;\n align-items: center;\n color: var(--main-color);\n font-weight: 400;\n }\n\n .menu-text-icon::before {\n margin-bottom: 0.2vh;\n margin-right: .4vw\n }\n\n .menu-text {\n font-family: 'Expletus Sans', sans-serif;\n font-weight: normal;\n }\n\n .menu-input {\n outline: none;\n padding: 1vh;\n cursor: url(img/ui/cursor-text.png) 16 0, text;\n background-color: #060606;\n color: var(--main-color);\n border: 0px;\n width: -webkit-fill-available;\n margin: 1.5vh 1vw 0px 1vw;\n border-radius: .8vh;\n }\n\n .menu-button {\n color: var(--main-color);\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n width: -webkit-fill-available;\n padding: 1vh\n }\n\n .menu-button:hover {\n background-color: #1e1e1e\n }\n\n .menu-button:active {\n background-color: #161616\n }\n\n .menu-button.active {\n background-color: var(--main-color);\n }\n\n .menu-button.active * {\n color: white;\n }\n\n #skin-message, #left-content, #game-bottom-content, #game-left-content-main, #game-right-content-main, #cross-promo, #right-content, #new-changelog {\n display: none !important\n }\n\n #background-cosmetic-container {\n background: var(--lighter-color-lighter)\n }\n\n #main-content {\n background: rgb(233 213 228 / 80%);\n width: max-content\n }\n\n #homepage {\n background-color: var(--transparent-immortal);\n padding-bottom: 5vh;\n }\n\n #skins-categories {\n margin-right: .4vw;\n margin-left: .4vw;\n }\n\n #play,\n .blue-button,\n .green-button,\n .dark-blue-button,\n .unlock-button-active {\n background-color: var(--main-color);\n box-shadow: inset 0 -5px 0 var(--darker-color);\n }\n\n #play:hover,\n .blue-button:hover,\n .green-button:hover,\n .dark-blue-button:hover,\n .unlock-button-active:hover {\n background-color: var(--main-color-lighter);\n box-shadow: inset 0 -5px 0 var(--darker-color-lighter);\n }\n\n #play:active,\n .blue-button:active,\n .green-button:active,\n .dark-blue-button:active,\n .unlock-button-active:active {\n background-color: var(--main-color);\n box-shadow: inset 0 5px 0 var(--darker-color);\n }\n\n .dark-blue-button-2-active {\n background-color: var(--main-color);\n box-shadow: inset 0 5px 0 var(--darker-color);\n border-color: var(--border-color)\n }\n\n .dark-blue-button-2-active:hover {\n background-color: var(--main-color-lighter);\n box-shadow: inset 0 5px 0 var(--darker-color-lighter);\n border-color: var(--border-color-hover)\n }\n\n .skins-button {\n border-color: var(--border-color)\n }\n\n .skin,\n .skin-active:hover {\n background: transparent;\n border-radius: 14px;\n border: unset;\n box-shadow: 0px 0px 4px 2px var(--main-color);\n }\n\n .skin:hover {\n background-color: transparent;\n box-shadow: 0px 0px 6px 5px var(--lighter-color)\n }\n\n .nav-button-active {\n color: var(--main-color)\n }\n\n .nav-button-text:hover {\n color: var(--darker-color)\n }\n\n .middle-main {\n background: rgb(163 136 155 / 30%);\n border: 5px solid transparent;\n box-shadow: unset !important\n }\n\n #small-waiting {\n background: transparent;\n }\n\n #ranking2-middle-main {\n height: 246px;\n margin-left: 1vw;\n }\n\n #ranking-title {\n background: var(--main-color)\n }\n\n .table-line:hover,\n .side-button:hover {\n background: var(--lighter-color)\n }\n\n .side-button {\n background: var(--darker-color)\n }\n\n #nav {\n opacity: 0\n }\n\n #nav:hover {\n opacity: 1\n }\n\n #nickname {\n width: 170px\n }\n\n #server-select {\n margin-left: .2vw\n }\n\n .input {\n background: var(--main-color);\n border: 5px solid var(--darker-color);\n border-radius: 16px;\n box-shadow: inset 0 23px 0 var(--darker-color-lighter)\n }\n\n #ffa-mode,\n #sandbox-mode,\n #play {\n border: 5px solid var(--darker-color);\n border-radius: 16px;\n box-shadow: inset 0 -5px 0 var(--darker-color-lighter)\n }\n\n #ffa-mode,\n #sandbox-mode {\n width: 165px !important\n }\n\n #event-mode {\n display: none\n }\n\n .background-img-play {\n background: url(https://i.imgur.com/Lq4Ap6p.png) 0 0 repeat\n }\n\n #server-select,\n #server-select:hover,\n #server-select:active {\n border: 5px solid var(--darker-color-strong);\n border-radius: 15px;\n background: var(--lighter-color-strong);\n box-shadow: inset 0 -6px 0 0 var(--main-color-strong);\n color: #fff\n }\n\n .active-bar-item {\n position: fixed;\n left: 35.4vw;\n bottom: 0.53vh;\n width: 5.4vw;\n height: 10.9vh;\n border: 0.35vw solid var(--darker-color-lighter);\n border-radius: 0.9vw\n }\n\n .chat-container input {\n background-color: var(--main-color);\n border: 4px solid var(--darker-color);\n padding: 5px;\n padding-bottom: 0px;\n box-shadow: unset;\n font-family: \"\", Courier;\n font-size: 2vw;\n color: var(--darker-color);\n letter-spacing: 2px\n }\n\n .chat-container input:placeholder {\n color: var(--darker-color)\n }\n\n .chat-container input.text-shadowed-3 {\n text-shadow: unset !important\n }\n\n .tooltip {\n position: fixed;\n width: max-content;\n height: 4.5vh;\n font-size: 1.1vw;\n padding: 1vh;\n color: var(--main-color);\n background-color: #0c0c0c;\n border-radius: .25vw;\n top: 20vw;\n left: 17vw;\n z-index: 1000000000000000000000;\n pointer-events: none;\n opacity: 0\n }\n\n .radar-ui {\n position: fixed;\n opacity: 0;\n top: 2vh;\n left: 1vw;\n width: 12vw;\n height: 24vh;\n background-color: #003300ad;\n pointer-events: none;\n border-radius: 14vw;\n display: flex;\n align-items: center;\n overflow: hidden;\n justify-content: center\n }\n\n .radar-canvas {\n width: 00%;\n height: 00%;\n }\n ";
  219. }
  220. static ['setSwitchs']() {
  221. var cp = '';
  222. for (let cq = 0; cq < Menu_Switchs.length; cq++) {
  223. const cr = Menu_Switchs[cq];
  224. cp += "\n <div class=\"menu-button " + (cr.name === "Support" ? '' : 'active') + " pointer\" onclick='" + (cr.name === "Support" ? "window.open(\"http://www.youtube.com/@sadboi81\")" : "MenuTools.enableCard(this, " + cq + ')') + "' onmouseover=\"MenuTools.title('" + cr.title + "')\" onmouseleave=\"MenuTools.titleout()\">\n <div class=\"menu-text-holder\">\n <div>\n <i class=\"menu-text-icon " + cr.icon + "\"></i>\n </div>\n <span class=\"menu-text\"> " + cr.name + " </span>\n </div>\n\n <i class=\"menu-icon bi bi-chevron-right\"></i>\n </div>\n ";
  225. }
  226. $(".menu-body")[0].innerHTML = cp;
  227. }
  228. static ['setVisuals']() {
  229. var cs = '';
  230. for (let ct = 0; ct < Visual_Switchs.length; ct++) {
  231. const cu = Visual_Switchs[ct];
  232. cs += "\n <div class=\"menu-button active pointer\" onclick=\"MenuTools.toggleFeature(this, " + ct + ")\" onmouseover=\"MenuTools.title('" + cu.title + "')\" onmouseleave=\"MenuTools.titleout()\">\n <span class=\"menu-text\"> " + cu.name + " </span>\n\n <i class=\"menu-icon bi bi-three-dots-vertical\"></i>\n </div>";
  233. }
  234. $(".visuals-body")[0].innerHTML = cs;
  235. }
  236. static ['setCombats']() {
  237. var cv = '';
  238. for (let cw = 0; cw < Combat_Switchs.length; cw++) {
  239. const cx = Combat_Switchs[cw];
  240. cv += "\n <div class=\"menu-button active pointer\" onclick=\"MenuTools.toggleFeatureC(this, " + cw + ")\" onmouseover=\"MenuTools.title('" + cx.title + "')\" onmouseleave=\"MenuTools.titleout()\">\n <span class=\"menu-text\"> " + cx.name + " </span>\n\n <i class=\"menu-icon bi bi-three-dots-vertical\"></i>\n </div>";
  241. }
  242. $(".combat-body")[0].innerHTML = cv;
  243. }
  244. static ["setMiscs"]() {
  245. var cy = '';
  246. for (let cz = 0; cz < Misc_Switchs.length; cz++) {
  247. const da = Misc_Switchs[cz];
  248. cy += "\n <div class=\"menu-button active pointer\" onclick=\"MenuTools.toggleFeatureM(this, " + cz + ")\" onmouseover=\"MenuTools.title('" + da.title + "')\" onmouseleave=\"MenuTools.titleout()\">\n <span class=\"menu-text\"> " + da.name + " </span>\n\n <i class=\"menu-icon bi bi-three-dots-vertical\"></i>\n </div>";
  249. }
  250. $(".misc-body")[0].innerHTML = cy;
  251. }
  252. static ["setChats"]() {
  253. var db = '';
  254. for (let dc = 0; dc < Chats_Switchs.length; dc++) {
  255. const dd = Chats_Switchs[dc];
  256. db += "\n <input class=\"menu-input\" maxlength=\"35\" id=\"chat-" + dc + "\" value=\"" + dd.value + "\" onmouseover=\"MenuTools.title('" + dd.name + " | " + dd.title + "')\" onmouseleave=\"MenuTools.titleout()\">\n ";
  257. }
  258. $(".chats-body")[0].innerHTML = db;
  259. }
  260. static ['title'](de) {
  261. const df = $(".tooltip")[0];
  262. df.style.opacity = '1';
  263. df.style.left = Vars.mouse.x + 20 + 'px';
  264. df.style.top = Vars.mouse.y + 'px';
  265. df.innerHTML = de;
  266. }
  267. static ["titleout"]() {
  268. const dg = $(".tooltip")[0];
  269. dg.style.opacity = '0';
  270. }
  271. static ['enableCard'](dh, di) {
  272. const dj = Menu_Switchs[di];
  273. const dk = dj.enabled ? "none" : "flex";
  274. $('#' + dj.name)[0].style.display = dk;
  275. if (dj.enabled) {
  276. dj.enabled = false;
  277. dh.classList.remove("active");
  278. } else {
  279. dj.enabled = true;
  280. dh.classList.add("active");
  281. }
  282. }
  283. static ["toggleFeature"](dl, dm) {
  284. const dn = Visual_Switchs[dm];
  285. if (dn.enabled) {
  286. dn.enabled = false;
  287. dl.classList.remove("active");
  288. } else {
  289. dn.enabled = true;
  290. dl.classList.add("active");
  291. }
  292. }
  293. static ["toggleFeatureC"](dp, dq) {
  294. const dr = Combat_Switchs[dq];
  295. if (dr.enabled) {
  296. dr.enabled = false;
  297. dp.classList.remove('active');
  298. } else {
  299. dr.enabled = true;
  300. dp.classList.add('active');
  301. }
  302. }
  303. static ["toggleFeatureM"](ds, dt) {
  304. const du = Misc_Switchs[dt];
  305. if (du.enabled) {
  306. du.enabled = false;
  307. ds.classList.remove("active");
  308. } else {
  309. du.enabled = true;
  310. ds.classList.add("active");
  311. }
  312. }
  313. static ["toggleSector"](dv) {
  314. const dw = dv.parentElement.parentElement;
  315. dw.style.transitionDuration = ".5s";
  316. setTimeout(() => {
  317. dw.style.transitionDuration = '0s';
  318. }, 500);
  319. if (dw.classList.contains('open')) {
  320. dv.style.rotate = '0deg';
  321. dw.classList.remove('open');
  322. } else {
  323. dv.style.rotate = "180deg";
  324. dw.classList.add('open');
  325. }
  326. }
  327. static get ['Radar_HTML']() {
  328. return "\n <canvas class=\"radar-canvas\"></canvas>\n ";
  329. }
  330. }
  331. class Variables {
  332. constructor() {
  333. this.loaded = false;
  334. const dx = {
  335. logo: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQMAAADCCAMAAAB6zFdcAAAAkFBMVEUAAADl5uji4+Xe3+Hm5ubw8PDs7Ozp6uzr7O7W19kvLy/d3uDu8O/AwcOXmJhUVFRrbWy5ubmRkpMPEBF7fH3LzM7h5eQ3ODleXl69vsDd3+OBgoQaGhqGh4menp6wsbIhISGMjo0oKChYWFhPT0/Q0NBBQkEWFhdxcnJFRUVmZmamp6h9fX8zNDUjJSQ8PDxibAYWAAAELklEQVR4nO3XaVPiTBSG4XRnQwNBlkQdZFVHhFH//7+bczpbB8t558Mo1lv3VZaETgz2w+klQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICzmR1uzv0vnN10vl980Ue9rK7c6yHPt5v+qZ/bfPVTXpd5Pj/5q5tpnldXj6f5tFN9dbtpz9g13k1P5E/avJ9Ol7PuxofpW3WwO2zn+3/Yzz+5j+NHfV3FSRL3qm87TKKh/hsXaTrIrv1T69gk8aUejQbGl9xq43XqNVkzGGnjLrE96Vpb7yIbGvPW3jkvk2V1NH0+fFUdjOMo1k9dJVEUJYfuxHYoDUMtkgvpSBK+dKfWA2sil8Ex7XfMJkdpvTZdQxiG1mrjJgp91rhUV1GYhXbU3jovw2jnju72V5/e+ZpkkEyCOgMvhO2w9DIwZVK2IUgE1lYZaGfTgUqVtgcug9BWLenASH9DaXyN3RWu+8ak5pfrqHWBpOPm3pJB8vBVfW/0M4iSejgsh+5tm0FURuVldWo9MG0GmsZyPp//mquFNgdVHRTz2lL6mGyC4Mm9W0k6x/18vq8SlTKQOvAKQevgrBnoTxWCDIRS37YZpJHUwq6JwKRtBmbk3aywtsngtm0cyQi5a95cmdB0w3wmRWIOWZiZ+7olL7OoLYqv4mUQL2L56nVi3OpBmCfdfLDVntudi8Ckk7X5KINBcJrBrQ39DH54GeQyFAr5bdtC0AzOWQfx81gHRHy/jWUuKGeLYZtBGiwHOox3Ohekt8GHGfx4n0Fh3Vio7P0MXBk8B4HNwqguhLNn8BDcu9VBf5WvOie0Y+EpWGgIsujZgXRv8t8ZbC8K50K+664Oehnk0vlQL+lmhG+QQXBTT42hlL1fB7KNWcgokKrVCP4mg2DdrJuZfWyv8DOoF4VKPQt8hwzqSgi1g8t+BhqCzIauyP8mgyYEWSa7vZefwcrLIAur+3yLDLQhsm4ZPM0gWMZRFUEwidq1MdvMGncX/XVhnUgANiu87ec+CqM6g43sG8rM0fFi3KfL2ihrRHO/r4ngfQaye7bVTu1dBhLCpPorLwNZJ6s9sRyado9UzYnryJvynb2suXUGsjcom3NHmRncX0gGWbuVXH1et3veZxDc1DvC9xkEzfa1yWAkvfU2xhJBEfjrwkTPF97HdRlsdO/UbAtebZil+vGaQcNuPqnPp8byrHSSQUMzqJ6ZzGDWPzVJqgyuTft4pHVg00gff95SW48Zt6/2Q5AMkioDvwzknamWhlVZhtU0kaXTf9zVDz08Fo9ac9uieHzun9rLKR3KE1m+TjJYydVuwFwei5Hn6BpfpO1YX7mU1qIr6ptiVLhH4pm237ftO30rD+qL7nanz+sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/T78B3StGtz8i9mIAAAAASUVORK5CYII="};
  336. this.images = dx;
  337. this.mouse = {};
  338. this.angles = [];
  339. this.entities = [];
  340. this.mill = Date.now();
  341. this.packetLimiter = 800;
  342. this.oldDetectingInsta = false;
  343. const dy = {
  344. fill: "#f3e6ef",
  345. stroke: '#c6b7c7'
  346. };
  347. const dz = {
  348. fill: "#e9d5e4",
  349. stroke: '#c6b7c7'
  350. };
  351. const ea = {
  352. fill: "#eb8fd4",
  353. stroke: "#a15ba5"
  354. };
  355. const eb = {
  356. own: dy,
  357. ally: dz,
  358. enemy: ea
  359. };
  360. this.colors = eb;
  361. }
  362. }
  363. class Tools {
  364. static ["newElement"](ec, ed = [], ee = '', ef = '', eg, eh = '', ei = '') {
  365. const ej = document.createElement(ec);
  366. const ek = {
  367. id: ee,
  368. classList: ef,
  369. innerHTML: eh,
  370. style: ei
  371. };
  372. Object.assign(ej, ek);
  373. if (eg) {
  374. ej.outerHTML = eg;
  375. }
  376. ed.forEach(el => {
  377. ej.setAttribute(el.attribute, el.value);
  378. });
  379. return ej;
  380. }
  381. static ["parseMessage"](em) {
  382. const en = typeof em;
  383. const eo = en === "string" ? JSON.parse(em) : new Uint8Array(em);
  384. eo.type = eo[0];
  385. return eo;
  386. }
  387. static ['parseAngle'](ep) {
  388. const eq = 65535 * (ep + Math.PI) / (2 * Math.PI);
  389. return [255 & eq, eq >> 8 & 255];
  390. }
  391. static ["distance"](er, es) {
  392. return Math.sqrt(Math.pow(es.y - er.y, 2) + Math.pow(es.x - er.x, 2));
  393. }
  394. static ["direction"](et, eu) {
  395. return Math.atan2(et.y - eu.y, et.x - eu.x);
  396. }
  397. static async ["sleep"](ev) {
  398. await new Promise(ew => {
  399. setTimeout(() => {
  400. ew();
  401. }, 1000);
  402. });
  403. }
  404. static async ["updatePackets"]() {
  405. Client.packets++;
  406. await Tools.sleep(1000);
  407. Client.packets--;
  408. }
  409. }
  410. class PlayerManager {
  411. constructor() {
  412. this.dir = 0;
  413. this.oldX = 0;
  414. this.oldY = 0;
  415. this.clan = [];
  416. this.kills = 0;
  417. this.packets = 0;
  418. this.alive = false;
  419. this.old_weapon = 0;
  420. }
  421. ["packet"]() {
  422. const ex = this.ws;
  423. const ey = document.querySelector("#chat-3").value;
  424. if (ex.readyState !== WebSocket.OPEN) {
  425. return;
  426. }
  427. if (Misc_Switchs[2].enabled && this.packets >= ey) {
  428. return;
  429. }
  430. Tools.updatePackets();
  431. ex.send(new Uint8Array([...arguments]));
  432. }
  433. ["equip"](ez) {
  434. if (this.hat != ez) {
  435. this.hat = ez;
  436. this.packet(5, ez);
  437. }
  438. }
  439. ["raw_select"](fa) {
  440. return this.packet(2, fa);
  441. }
  442. ["select"](fb) {
  443. return this.packet(0, fb);
  444. }
  445. ["hit"](fc) {
  446. const fd = Tools.parseAngle(fc);
  447. this.packet(19, fd[0], fd[1]);
  448. this.packet(18);
  449. }
  450. ["place"](fe, ff = Mouse.angle) {
  451. this.select(this.old_weapon);
  452. this.select(fe);
  453. this.hit(ff);
  454. this.select(this.old_weapon);
  455. }
  456. ["ally"](fg) {
  457. const fh = {
  458. KPiEE: function (fi, fj) {
  459. return fi === fj;
  460. }
  461. };
  462. fh.pEGlC = 'number';
  463. fh.SNrCC = function (fk, fl) {
  464. return fk > fl;
  465. };
  466. fh.OXQuY = "TTlRv";
  467. fh.JANOD = function (fm, fn) {
  468. return fm < fn;
  469. };
  470. fh.ZAVWg = function (fo, fp) {
  471. return fo == fp;
  472. };
  473. let fq = fg["typeof"] === fh.pEGlC ? fg : fg.sid;
  474. if (fh.SNrCC(Client.clan.length, 0)) {
  475. if (fh.OXQuY === "TTlRv") {
  476. let fr = Client.clan.length;
  477. for (let fs = 0; fh.JANOD(fs, fr); fs++) {
  478. let ft = Client.clan[fs];
  479. if (fh.ZAVWg(fq, ft)) {
  480. return true;
  481. }
  482. }
  483. } else {
  484. if (fu) {
  485. const fv = fw.apply(fx, arguments);
  486. fy = null;
  487. return fv;
  488. }
  489. }
  490. }
  491. return false;
  492. }
  493. ["mine"](fz) {
  494. if (this.ally(fz) || this.sid == fz.sid) {
  495. return true;
  496. }
  497. return false;
  498. }
  499. ["chat"](ga) {
  500. if (ga.trim() == '') {
  501. return;
  502. }
  503. const gb = new TextEncoder().encode(ga);
  504. this.packet(7, ...gb);
  505. }
  506. ["quad"](gc) {
  507. const gd = Tools.direction(gc, this);
  508. for (let ge = 0; ge < 2 * Math.PI; ge += Math.PI / 8) {
  509. setTimeout(() => {
  510. this.place(7, -gd + ge);
  511. }, 30 * (ge / 0.4));
  512. }
  513. }
  514. ["getHat"](gf, gg, gh, gi) {
  515. var gj = 7;
  516. if (gf < 180) {
  517. if (gi) {
  518. gj = 11;
  519. } else {
  520. if (gg === 2) {
  521. gj = 5;
  522. } else {
  523. if (gg === 5) {
  524. gj = 4;
  525. } else if (gg === 4 && !gh) {
  526. gj = 2;
  527. }
  528. }
  529. }
  530. }
  531. return gj;
  532. }
  533. ["update"]() {
  534. if (this.alive) {
  535. const gk = this.y > 8000 && this.y < 9000;
  536. var gl = 7;
  537. const gm = Vars.entities.find(gn => gn && Tools.distance(gn, this) < 60 && gn.type == 6 && !this.mine(gn));
  538. const go = Vars.oldDetectingInsta;
  539. const gp = Vars.breaking;
  540. Vars.oldDetectingInsta = false;
  541. Vars.breaking = false;
  542. if (Combat_Switchs[1].enabled && gm) {
  543. if (!gp) {
  544. const gq = document.querySelector("#chat-1").value;
  545. this.quad(gm);
  546. this.chat(gq);
  547. }
  548. const gr = Tools.direction(gm, this);
  549. Vars.oldTrap = gm;
  550. if (this.old_weapon != 1) {
  551. this.old_weapon = 1;
  552. this.select(1);
  553. }
  554. this.hit(gr);
  555. gl = 11;
  556. Vars.breaking = true;
  557. } else {
  558. if (gp && true) {
  559. const gs = Tools.direction(Vars.oldTrap, this);
  560. this.place(7, gs);
  561. Vars.oldTrap = null;
  562. }
  563. }
  564. if (gk) {
  565. gl = 9;
  566. }
  567. if (true && Vars.enemy) {
  568. const gt = Tools.distance(this, Vars.enemy);
  569. const gu = Vars.enemy.hat;
  570. gl = this.getHat(gt, gu, gk, gm);
  571. if (Combat_Switchs[4] && Vars.enemy && true) {
  572. const gv = Vars.entities.filter(gw => gw && gw.type == 0 && gw.hat == 2 && !this.mine(gw) && polearms.includes(gw.weapon) && Tools.distance(this, gw) < 180);
  573. const gx = this.hat != 4 || gl != 4;
  574. if (gv.length != 0 && gx && !go) {
  575. const gy = document.querySelector('#chat-2').value;
  576. this.chat(gy);
  577. gl = 4;
  578. Vars.oldDetectingInsta = true;
  579. }
  580. }
  581. }
  582. if (this.health < 100 && Combat_Switchs[0].enabled) {
  583. if (this.health < 36 && true) {
  584. gl = 4;
  585. }
  586. setTimeout(() => {
  587. this.place(2);
  588. }, 30);
  589. }
  590. Vars.angles = [];
  591. if (!gm) {
  592. if (Vars.enemy && Combat_Switchs[2].enabled) {
  593. const gz = Vars.entities.find(ha => ha && Tools.distance(ha, Vars.enemy) < 60 && ha.type == 6 && this.mine(ha));
  594. const hb = Tools.distance(this, Vars.enemy);
  595. const hc = Tools.direction(Vars.enemy, this);
  596. if (hb <= 160) {
  597. if (gz) {
  598. Vars.angles = [hc + 0.95993, hc - 0.95993];
  599. this.place(4, Vars.angles[0]);
  600. setTimeout(() => {
  601. this.place(4, Vars.angles[1]);
  602. }, 90);
  603. } else {
  604. Vars.angles = [hc];
  605. this.place(7, hc);
  606. }
  607. }
  608. }
  609. if (!gk && !this.items.includes(15) && Misc_Switchs[0].enabled && this.age < 6 && Date.now() - Vars.mill > 200) {
  610. const hd = Math.atan2(this.y - this.oldY, this.x - this.oldX);
  611. this.place(5, hd);
  612. Vars.mill = Date.now();
  613. }
  614. }
  615. if (Combat_Switchs[3].enabled) {
  616. this.equip(gl);
  617. }
  618. }
  619. }
  620. ["auto_replace"](he, hf) {}
  621. ["choose"](hg) {
  622. this.packet(14, hg);
  623. }
  624. ["autoselect"](hh) {
  625. if (hh != 15) {
  626. return;
  627. }
  628. setTimeout(() => {
  629. this.select(1);
  630. }, 100);
  631. }
  632. ["listener"](hi) {
  633. const hj = hi.data;
  634. const hk = Tools.parseMessage(hj);
  635. if (hk.type === 0x13) {
  636. this.alive = false;
  637. this.kills = 0;
  638. this.age = 0;
  639. }
  640. if (hk.type == 0x8) {
  641. const hl = Math.max(0, hk[1] | hk[2] << 8 | hk[3] << 16 | hk[4] << 24);
  642. this.age = ~~(Math.log(1 + hl) ** 2.4 / 13);
  643. }
  644. if (hk.type === 0x23) {
  645. const hm = hk[1];
  646. const hn = hk[2];
  647. const ho = hk[4];
  648. const hq = {
  649. alive: true,
  650. health: 100,
  651. id: hm,
  652. name: hn,
  653. items: ho
  654. };
  655. Object.assign(this, hq);
  656. }
  657. if (hk.type === 0xe && Misc_Switchs[1].enabled) {
  658. const hr = [1, 12, 9, 19, 20, 15, 8, 17, 16];
  659. for (let hs = 0; hs < hr.length; hs++) {
  660. if (hk[1].indexOf(hr[hs]) != -1) {
  661. this.choose(hr[hs]);
  662. this.autoselect(hr[hs]);
  663. }
  664. }
  665. }
  666. if (hk.type === 0x1c) {
  667. const ht = document.querySelector("#chat-0").value;
  668. this.kills++;
  669. if (ht.trim() == '') {
  670. return;
  671. }
  672. this.chat(ht.replace(/{kills}/g, this.kills));
  673. }
  674. if (hk.type === 0x10 || hk.type === 0x18) {
  675. this.clan = [...hk.slice(2, hk.length)];
  676. }
  677. if (hk.type === 0x1b) {
  678. this.clan = [];
  679. }
  680. if (hk.type === 0x2) {
  681. if (hk.byteLength > 1) {
  682. this.items = [];
  683. for (let hu = 1; hu < hk.byteLength; hu++) {
  684. this.items.push(hk[hu]);
  685. }
  686. }
  687. }
  688. if (hk.type === 0x14) {
  689. Vars.enemy = null;
  690. for (let hv = 1; hv < hk.length; hv += 19) {
  691. const hw = hk[hv + 8];
  692. const hx = hk[hv + 0];
  693. const hy = hk[hv + 1];
  694. const hz = hk[hv + 2] | hk[hv + 3] << 8;
  695. const ia = hk[hv + 4] | hk[hv + 5] << 8;
  696. const ib = hk[hv + 6] | hk[hv + 7] << 8;
  697. const ic = hk[hv + 9] / 255 * 6.283185307179586 - Math.PI;
  698. const ie = hk[hv + 10];
  699. const ig = hk[hv + 11];
  700. const ih = hk[hv + 12];
  701. const ii = hk[hv + 13] / 255 * 100;
  702. if (2 & hw) {
  703. Vars.entities[hz] = null;
  704. Client.auto_replace(ia, ib);
  705. } else {
  706. const ij = Vars.entities[hz] || {};
  707. const ik = {
  708. type: hx,
  709. sid: hy,
  710. id: hz,
  711. x: ia,
  712. y: ib,
  713. weapon: ie,
  714. hat: ig,
  715. health: ii,
  716. team: ih,
  717. dir: ic
  718. };
  719. Object.assign(ij, ik);
  720. Vars.entities[hz] = ij;
  721. if (hz === Client.id) {
  722. Object.assign(Client, ij);
  723. }
  724. const il = !Client.team || ih != Client.team;
  725. if (hx === 0 && Client.id !== hz && il) {
  726. const im = Vars.enemy;
  727. const ip = Math.hypot(Client.y - ib, Client.x - ia);
  728. const iq = Vars.enemy ? Math.hypot(Client.y - im.y, Client.x - im.x) : null;
  729. if (im) {
  730. if (ip < iq) {
  731. Vars.enemy = ij;
  732. }
  733. } else {
  734. Vars.enemy = ij;
  735. }
  736. }
  737. }
  738. }
  739. Client.update();
  740. }
  741. }
  742. ["setWS"](ir, iu) {
  743. this.ws = ir;
  744. this.ws_url = iu;
  745. this.ws.addEventListener("message", this.listener.bind(this));
  746. }
  747. }
  748. class Hooks {
  749. static ["PlaceHelper"](iv, iw) {
  750. if (iv[window.values.sid] != Client.sid) {
  751. return;
  752. }
  753. if (!Visual_Switchs[3].enabled) {
  754. return;
  755. }
  756. for (let ix = 0; ix < Vars.angles.length; ix++) {
  757. const iy = Vars.angles[ix];
  758. const iz = Vars.colors.own.fill;
  759. const ja = window.values.x;
  760. const jb = window.values.y;
  761. const jc = Client.raw[ja] + 75 * Math.cos(iy);
  762. const jd = Client.raw[jb] + 75 * Math.sin(iy);
  763. iw.save();
  764. iw.beginPath();
  765. iw.translate(jc, jd);
  766. iw.rotate(iy);
  767. iw.fillStyle = iz;
  768. iw.globalAlpha = 0.4;
  769. iw.lineWidth = 35;
  770. iw.beginPath();
  771. iw.arc(0, 0, 35, 0, 2 * Math.PI);
  772. iw.fill();
  773. iw.closePath();
  774. iw.restore();
  775. }
  776. }
  777. static ["Tracers"](je, jf) {
  778. if (je[window.values.sid] == Client.sid) {
  779. return Client.raw = je;
  780. }
  781. if (je.type || !Client.raw) {
  782. return;
  783. }
  784. if (!Visual_Switchs[2].enabled) {
  785. return;
  786. }
  787. const jg = jf.fillStyle;
  788. const jh = jf.globalAlpha;
  789. const ji = window.values.sid;
  790. const jj = window.values.x;
  791. const jk = window.values.y;
  792. const jl = je[ji];
  793. const jm = je[jj];
  794. const jn = je[jk];
  795. var jo = "enemy";
  796. if (Client.clan.includes(jl)) {
  797. jo = "ally";
  798. }
  799. if (jl == Client.sid) {
  800. jo = "own";
  801. }
  802. const jp = Vars.colors[jo];
  803. jf.strokeStyle = jp.fill;
  804. jf.globalAlpha = 0.6;
  805. jf.lineCap = "round";
  806. jf.beginPath();
  807. jf.moveTo(Client.raw[jj], Client.raw[jk]);
  808. jf.lineTo(jm, jn);
  809. jf.stroke();
  810. jf.closePath();
  811. jf.fillStyle = jg;
  812. jf.globalAlpha = jh;
  813. }
  814. static ["Indicators"](jq, jr, jt) {
  815. const ju = {
  816. 'YWnAZ': 'enemy'
  817. };
  818. ju.bSbbF = 'ally';
  819. ju.CddgP = function (jv, jw) {
  820. return jv == jw;
  821. };
  822. ju.WyUMJ = "own";
  823. ju.JctaV = function (jx, jy) {
  824. return jx - jy;
  825. };
  826. ju.lpfAY = function (jz, ka) {
  827. return jz * ka;
  828. };
  829. const kb = [21, 30, 40, 31, 32, 33, 34, 35, 38, 39, 1, 3, 4, 5, 9].includes(jq.type);
  830. if (!Visual_Switchs[0].enabled) {
  831. return;
  832. }
  833. if (kb) {
  834. return;
  835. }
  836. const kc = window.values.sid;
  837. const kd = jq[kc];
  838. var ke = 'enemy';
  839. if (Client.clan.includes(kd)) {
  840. ke = ju.bSbbF;
  841. }
  842. if (ju.CddgP(kd, Client.sid)) {
  843. ke = ju.WyUMJ;
  844. }
  845. const kf = Vars.colors[ke];
  846. jt.beginPath();
  847. jt.strokeStyle = kf.stroke;
  848. jt.fillStyle = kf.fill;
  849. jt.globalAlpha = 0.6;
  850. jt.lineWidth = 6;
  851. jt.beginPath();
  852. jt.arc(0, 0, ju.JctaV(14, 6), 0, ju.lpfAY(2, Math.PI));
  853. jt.stroke();
  854. jt.fill();
  855. jt.closePath();
  856. }
  857. }
  858. class RadarManager {
  859. constructor() {
  860. this.actual = 0;
  861. }
  862. ['display']() {
  863. const kg = document.querySelector(".radar-ui");
  864. const ki = Client.alive && Visual_Switchs[1].enabled;
  865. kg.style.opacity = ki * 1;
  866. }
  867. ["frame"]() {
  868. const kj = this.canvas;
  869. const kk = this.ctx;
  870. const kl = kj.width / 2;
  871. const km = kj.height / 2;
  872. this.display();
  873. this.actual += 0.033;
  874. kk.clearRect(0, 0, kj.width, kj.height);
  875. kk.save();
  876. kk.translate(kl, km);
  877. kk.beginPath();
  878. kk.strokeStyle = "#46a72c";
  879. kk.moveTo(-kj.width, 0);
  880. kk.lineTo(kj.width, 0);
  881. kk.moveTo(0, -kj.height);
  882. kk.lineTo(0, kj.height);
  883. kk.stroke();
  884. kk.closePath();
  885. kk.save();
  886. kk.rotate(this.actual);
  887. kk.beginPath();
  888. kk.strokeStyle = "#52ad3a";
  889. kk.shadowColor = "#52ad3a";
  890. kk.shadowBlur = 15;
  891. kk.lineWidth = 3;
  892. kk.globalAlpha = 0.8;
  893. kk.moveTo(0, 0);
  894. kk.lineTo(0, kj.height);
  895. kk.stroke();
  896. kk.closePath();
  897. kk.restore();
  898. for (let kn = 0; kn <= 10; kn++) {
  899. const ko = kn * 16;
  900. kk.beginPath();
  901. kk.strokeStyle = "#46a72c";
  902. kk.arc(0, 0, ko, 0, Math.PI * 2);
  903. kk.stroke();
  904. kk.closePath();
  905. }
  906. kk.save();
  907. kk.rotate(Mouse.angle - 1.5 || 0);
  908. kk.beginPath();
  909. kk.fillStyle = "#4abf2a";
  910. kk.arc(0, 0, 8, 0, Math.PI * 2);
  911. kk.arc(7, 5, 4, 0, Math.PI * 2);
  912. kk.arc(-7, 5, 4, 0, Math.PI * 2);
  913. kk.fill();
  914. kk.closePath();
  915. kk.restore();
  916. if (Vars.entities || Vars.enemy) {
  917. const kp = Vars.entities.filter(kq => kq && !kq.type && kq.id != Client.id);
  918. for (let kr = 0; kr < kp.length; kr++) {
  919. const ks = kp[kr];
  920. const kt = (ks.x - Client.x) / 10;
  921. const ku = (ks.y - Client.y) / 10;
  922. kk.save();
  923. kk.translate(kt, ku);
  924. kk.rotate(ks.dir - 1.5 || 0);
  925. kk.beginPath();
  926. kk.fillStyle = '#4abf2a';
  927. kk.arc(0, 0, 8, 0, Math.PI * 2);
  928. kk.arc(7, 5, 4, 0, Math.PI * 2);
  929. kk.arc(-7, 5, 4, 0, Math.PI * 2);
  930. kk.fill();
  931. kk.closePath();
  932. kk.restore();
  933. }
  934. }
  935. kk.restore();
  936. requestAnimationFrame(this.frame.bind(this));
  937. }
  938. ["initialize"]() {
  939. this.canvas = document.querySelector(".radar-canvas");
  940. this.ctx = this.canvas.getContext('0d');
  941. requestAnimationFrame(this.frame.bind(this));
  942. }
  943. }
  944. class MouseManager {
  945. constructor() {
  946. this.x = 0;
  947. this.y = 0;
  948. this.resize();
  949. }
  950. ["listeners"]() {
  951. const kv = {
  952. 'QVlie': "mousemove"
  953. };
  954. kv.Nttzo = 'resize';
  955. window.addEventListener("mousemove", this.move.bind(this));
  956. window.addEventListener(kv.Nttzo, this.resize.bind(this));
  957. }
  958. ["resize"]() {
  959. this.width = window.innerWidth;
  960. this.height = window.innerHeight;
  961. this.update();
  962. }
  963. ['move'](kw) {
  964. this.x = kw.clientX;
  965. this.y = kw.clientY;
  966. this.update();
  967. }
  968. ["update"]() {
  969. const kx = {
  970. JzmPo: function (ky, kz) {
  971. return ky / kz;
  972. }
  973. };
  974. kx.yyeYS = function (la, lb) {
  975. return la - lb;
  976. };
  977. this.angle = Math.atan2(this.y - this.height / 2, kx.yyeYS(this.x, this.width / 2));
  978. }
  979. }
  980. class Macro {
  981. constructor(lc, ld, le) {
  982. this.active = false;
  983. this.id = lc;
  984. this.key = ld;
  985. this.delay = le;
  986. this.interval;
  987. }
  988. ["start"](lf) {
  989. if (lf != this.key) {
  990. return;
  991. }
  992. this.interval = setInterval(() => {
  993. if (!this.active) {
  994. clearInterval(this.interval);
  995. } else {
  996. Client.place(this.id);
  997. }
  998. }, this.delay);
  999. this.active = true;
  1000. }
  1001. ["stop"](lg) {
  1002. if (lg != this.key) {
  1003. return;
  1004. }
  1005. this.active = false;
  1006. }
  1007. }
  1008. const lh = {
  1009. name: "Visuals",
  1010. icon: "bi bi-eye-fill",
  1011. title: "Enable visuals card",
  1012. enabled: true
  1013. };
  1014. const li = {
  1015. name: "Combat",
  1016. icon: "bi bi-capsule",
  1017. title: "Enable combat card",
  1018. enabled: true
  1019. };
  1020. const lj = {
  1021. name: 'Chats',
  1022. icon: "bi bi-chat-left-dots-fill",
  1023. title: "Enable chat config card",
  1024. enabled: true
  1025. };
  1026. function cn(lk, ll) {
  1027. const lm = ln();
  1028. cn = function (lo, lp) {
  1029. lo = lo - 269;
  1030. let lq = lm[lo];
  1031. if (cn.ChXiZi === undefined) {
  1032. var lr = function (ls) {
  1033. let lt = '';
  1034. let lu = '';
  1035. let lv = lt + lr;
  1036. let lw = 0;
  1037. let lx;
  1038. let ly;
  1039. for (let lz = 0; ly = ls.charAt(lz++); ~ly && (lx = lw % 4 ? lx * 64 + ly : ly, lw++ % 4) ? lt += lv.charCodeAt(lz + 10) - 10 !== 0 ? String.fromCharCode(255 & lx >> (-2 * lw & 6)) : lw : 0) {
  1040. ly = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/='.indexOf(ly);
  1041. }
  1042. let ma = 0;
  1043. for (let mb = lt.length; ma < mb; ma++) {
  1044. lu += '%' + ('00' + lt.charCodeAt(ma).toString(16)).slice(-2);
  1045. }
  1046. return decodeURIComponent(lu);
  1047. };
  1048. cn.SUzlMc = lr;
  1049. lk = arguments;
  1050. cn.ChXiZi = true;
  1051. }
  1052. const mc = lm[0];
  1053. const md = lo + mc;
  1054. const me = lk[md];
  1055. if (!me) {
  1056. const mf = function (mg) {
  1057. this.kGPtJY = mg;
  1058. this.yVCyru = [1, 0, 0];
  1059. this.Qnuumx = function () {
  1060. return 'newState';
  1061. };
  1062. this.mDxmlo = "\\w+ *\\(\\) *{\\w+ *";
  1063. this.JNbvbG = "['|\"].+['|\"];? *}";
  1064. };
  1065. mf.prototype.OYTQBl = function () {
  1066. const mh = new RegExp(this.mDxmlo + this.JNbvbG);
  1067. const mi = mh.test(this.Qnuumx.toString()) ? --this.yVCyru[1] : --this.yVCyru[0];
  1068. return this.ncFAGB(mi);
  1069. };
  1070. mf.prototype.ncFAGB = function (mj) {
  1071. if (!Boolean(~mj)) {
  1072. return mj;
  1073. }
  1074. return this.qXjrHn(this.kGPtJY);
  1075. };
  1076. mf.prototype.qXjrHn = function (mk) {
  1077. let ml = 0;
  1078. for (let mm = this.yVCyru.length; ml < mm; ml++) {
  1079. this.yVCyru.push(Math.round(Math.random()));
  1080. mm = this.yVCyru.length;
  1081. }
  1082. return mk(this.yVCyru[0]);
  1083. };
  1084. new mf(cn).OYTQBl();
  1085. lq = cn.SUzlMc(lq);
  1086. lk[md] = lq;
  1087. } else {
  1088. lq = me;
  1089. }
  1090. return lq;
  1091. };
  1092. return cn(lk, ll);
  1093. }
  1094. const mn = {
  1095. name: 'Automatic Options',
  1096. icon: "bi bi-bucket-fill",
  1097. title: "Enable the one in use",
  1098. enabled: true
  1099. };
  1100. const mo = {
  1101. name: "Support",
  1102. icon: "bi bi-youtube",
  1103. title: "Suport sad bo1",
  1104. enabled: true
  1105. };
  1106. const Menu_Switchs = [lh, li, lj, mn, mo];
  1107. const mp = {
  1108. name: "Indicators",
  1109. title: "Shows if the structure is yours / enemy / ally",
  1110. enabled: true
  1111. };
  1112. const mq = {
  1113. name: "Bots",
  1114. title: "Using them gonna crash your hack",
  1115. enabled: true
  1116. };
  1117. const mr = {
  1118. name: "Tracers",
  1119. title: "Wont Work for now",
  1120. enabled: true
  1121. };
  1122. const ms = {
  1123. name: "Placement Helper",
  1124. title: "Renders where you will auto place",
  1125. enabled: true
  1126. };
  1127. const Visual_Switchs = [mp, mq, mr, ms];
  1128. const mt = {
  1129. name: "Auto Heal",
  1130. title: "Heals you up",
  1131. enabled: true
  1132. };
  1133. const mu = {
  1134. name: "Auto break",
  1135. title: "Immortal mod",
  1136. enabled: true
  1137. };
  1138. const mv = {
  1139. name: "Auto place",
  1140. title: "Most loved thing idk why",
  1141. enabled: true
  1142. };
  1143. const mw = {
  1144. name: "Auto hats",
  1145. title: "Worst thing idk why",
  1146. enabled: true
  1147. };
  1148. const mx = {
  1149. name: "Anti insta",
  1150. title: "i got you bart",
  1151. enabled: true
  1152. };
  1153. const Combat_Switchs = [mt, mu, mv, mw, mx];
  1154. const my = {
  1155. name: "Kill chat",
  1156. title: "Chat when kill player",
  1157. value: "💀 Clarice, Clarice, Clarice"
  1158. };
  1159. const mz = {
  1160. name: "Auto break",
  1161. title: "Chat when auto breaking trap",
  1162. value: "💀 I Love Immortal Mod"
  1163. };
  1164. const na = {};
  1165. function nb(nc, nd, ne, nf) {
  1166. return cn(nd + 0xc0, ne);
  1167. }
  1168. na.name = "Anti insta";
  1169. na.title = "Chat when insta threat";
  1170. na.value = "💀 Immortal beats your a**";
  1171. const ng = {
  1172. name: "Packet limit",
  1173. title: "Limit your packets once you get a specific ammout",
  1174. value: "800"
  1175. };
  1176. const Chats_Switchs = [my, mz, na, ng];
  1177. const nh = {
  1178. name: "Auto mill",
  1179. title: "Places mills when you spawn",
  1180. enabled: true
  1181. };
  1182. const ni = {
  1183. name: "Auto upgrade",
  1184. title: "Automatically upgrades for you to play (KH)",
  1185. enabled: true
  1186. };
  1187. const nj = {
  1188. name: "Packet limiter",
  1189. title: "Limits your packets to prevent you kicked from game",
  1190. enabled: true
  1191. };
  1192. const Misc_Switchs = [nh, ni, nj];
  1193. function pageHooks(nk) {
  1194. const nl = new Regex(nk, true);
  1195. window.COPY_CODE = (nl.COPY_CODE.match(/^(\(function \w+\(\w+\)\{.+)\(.+?\);$/) || [])[1];
  1196. nl.append("EXTERNAL fix", /\(function (\w+)\(\w+\)\{/, "let $2 = eval(`(() => ${COPY_CODE})()`);delete window.COPY_CODE;");
  1197. nl.replace("Use Strict", /{QUOTE}use strict{QUOTE};/, '');
  1198. const nm = nl.match('items', /(\(\w+\.\w+\+\w+,\w+\.\w+\+\w+\).+?(\w+\(\).+?\w+\.\w+\.\w+\))([,;]))/);
  1199. const nn = nl.match("entity values", /switch\(\w+\.\w+=\w+,\w+\.(\w+)=\w+,\w+\.(\w+)=\w+,\w+\.(\w+)=\w+\.\w+=\w+\.\w+=\w+,\w+\.(\w+)=\w+\.\w+=\w+\.\w+=\w+,\w+\.(\w+)=\w+\.\w+=\w+\.\w+=\w+,\w+\.\w+=\w+,\w+\.\w+=\w+,\w+\.(\w+)=\w+,\w+\.\w+=\w+,\w+\.(\w+)=\w+/);
  1200. const [, no] = nl.match('weapon', /\(\w+\.(\w+)\|\w+\.(\w+)<<NUMBER{8}\)/);
  1201. const np = {
  1202. id: nn[1],
  1203. sid: nn[2],
  1204. x: nn[3],
  1205. y: nn[4],
  1206. dir: nn[5],
  1207. hat: nn[6],
  1208. hp: nn[7],
  1209. weapon: no
  1210. };
  1211. nl.replace("Clan Colors V2", /\w\(\w+\),"#404040"\):null/, "'#f3e6ef', '#c6b7c7') : null");
  1212. nl.replace("Age Color", /(\("AGE 0",24,)"#fff"\)/, "$1'#f3e6ef', '#c6b7c7')");
  1213. nl.replace("Age Body", /(background\:\w+\(\)\.\w+\([^,]+,[^,]+,[^,]+,)[^)]+\)/, "$1 '#c6b7c7')");
  1214. nl.replace("Age Fill", /(,[^=]+=)[^,]+(,this\.\w+&&)/, "$1 '#f3e6ef' $2");
  1215. nl.replace("Leaderboard", /(\w\.\w{2}),\w\(\)\.\w{2},\w\(\)\.\w{2},\w\(\)\.\w{2}\)\)\,(this.\w{2}\+\d{2}),/, "$1, 17, \"#f3e6ef\", \"#c6b7c7\")), $2,");
  1216. nl.replace("Map Color", /"#788F57"/, "\"#64803d\"");
  1217. nl.replace('Indicators', /(\(\w+\.\w+\+\w+,\w+\.\w+\+\w+\).+?\w+\(\).+?\w+\.\w+\.\w+\)([,;]))/, "\n " + nm[1].slice(0, -nm[2].length - 1) + ";\n " + nm[2] + ";\n Hooks.Indicators(...arguments);\n ");
  1218. nl.replace("Health Color & Visuals", /"#a4cc4f":"#cc5151"/, "'#f3e6ef' : '#c6b7c7',\n\n Hooks.Tracers(...arguments)\n Hooks.PlaceHelper(...arguments)\n ");
  1219. const nq = {
  1220. values: np
  1221. };
  1222. Object.assign(window, nq);
  1223. return nl.code;
  1224. }
  1225. function pageLoaded() {
  1226. Vars.loaded = true;
  1227. const nr = Tools.newElement("style", [], '', '', undefined, MenuTools.Global_CSS);
  1228. const ns = Tools.newElement("div", [], '', "menu-holder", undefined, MenuTools.Menu_HTML, MenuTools.Menu_CSS);
  1229. const nt = Tools.newElement("div", [], '', 'tooltip', undefined, "This is the tooltip, shows you up a help text");
  1230. const nu = Tools.newElement('div', [], '', "radar-ui", undefined, MenuTools.Radar_HTML);
  1231. document.querySelector("#settings").children[0].src = "https://i.imgur.com/LhafJ4l.png";
  1232. document.querySelector("#logo").src = Vars.images.logo;
  1233. document.head.appendChild(nr);
  1234. document.body.appendChild(nu);
  1235. document.body.appendChild(nt);
  1236. document.body.appendChild(ns);
  1237. $(".menu-sector").draggable();
  1238. MenuTools.setSwitchs();
  1239. MenuTools.setVisuals();
  1240. MenuTools.setCombats();
  1241. MenuTools.setMiscs();
  1242. MenuTools.setChats();
  1243. Radar.initialize();
  1244. Mouse.listeners();
  1245. document.title = "Immortal mod C-";
  1246. }
  1247. const nv = {
  1248. "/entity/health-gauge-background.png": "https://i.imgur.com/yDcbdRA.png",
  1249. "/entity/resource_background.png": "https://i.imgur.com/gEKWame.png",
  1250. "/entity/health-gauge-front.png": "https://i.imgur.com/UiEWfBX.png",
  1251. "/ui/indicator_enemy.png": "https://i.imgur.com/zsuhbel.png",
  1252. "/entity/our_dot.png": "https://i.imgur.com/hXNNEb6.png"
  1253. };
  1254. const credits_to_nyanner_for_this_uwu = Object.getOwnPropertyDescriptor(Image.prototype, "src").set;
  1255. Object.defineProperty(Image.prototype, 'src', {
  1256. 'set'(nw) {
  1257. const nx = Object.entries(nv).find(([ny]) => nw.includes(ny));
  1258. if (nx) {
  1259. nw = nx[1];
  1260. }
  1261. return credits_to_nyanner_for_this_uwu.call(this, nw);
  1262. }
  1263. });
  1264. window.eval = new Proxy(window.eval, {
  1265. 'apply'(nz, oa, ob) {
  1266. const oc = ob[0];
  1267. if (oc.length > 100000) {
  1268. ob[0] = pageHooks(oc);
  1269. window.eval = nz;
  1270. }
  1271. return nz.apply(oa, ob);
  1272. }
  1273. });
  1274. window.WebSocket = new Proxy(window.WebSocket, {
  1275. 'construct'(od, oe) {
  1276. const of = new od(...oe);
  1277. Client.setWS(of, oe[0]);
  1278. return of;
  1279. }
  1280. });
  1281. document.addEventListener("DOMContentLoaded", () => {
  1282. if (!Vars.loaded) {
  1283. pageLoaded();
  1284. }
  1285. });
  1286. document.addEventListener('mousemove', og => {
  1287. Vars.mouse.x = og.clientX;
  1288. Vars.mouse.y = og.clientY;
  1289. });
  1290. document.addEventListener('keydown', oh => {
  1291. const oi = oh.keyCode;
  1292. if (oi == 27) {
  1293. const oj = document.querySelector(".menu-holder");
  1294. const ok = oj.style.display !== "block" ? "block" : 'none';
  1295. oj.style.display = ok;
  1296. }
  1297. if (["clan-menu-clan-name-input", "nickname", "chat"].includes(document.activeElement.id)) {
  1298. return;
  1299. }
  1300. if ([50, 49].includes(oi)) {
  1301. const ol = 51 - oi;
  1302. Client.old_weapon = ol % 2;
  1303. }
  1304. for (let om in placers) {
  1305. placers[om].start(oi);
  1306. }
  1307. });
  1308. document.addEventListener("keyup", oo => {
  1309. if (["clan-menu-clan-name-input", "nickname", "chat"].includes(document.activeElement.id)) {
  1310. return;
  1311. }
  1312. for (let op in placers) {
  1313. placers[op].stop(oo.keyCode);
  1314. }
  1315. });
  1316. const Vars = new Variables();
  1317. const Client = new PlayerManager();
  1318. const Radar = new RadarManager();
  1319. const Mouse = new MouseManager();
  1320. const placers = {
  1321. 'spike': new Macro(4, 86, 30),
  1322. 'trap': new Macro(7, 70, 30),
  1323. 'heal': new Macro(2, 81, 30)
  1324. };
  1325. const oq = {
  1326. Vars: Vars,
  1327. Tools: Tools,
  1328. MenuTools: MenuTools,
  1329. Client: Client,
  1330. Hooks: Hooks,
  1331. Radar: Radar,
  1332. Mouse: Mouse
  1333. };
  1334. Object.assign(window, oq);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址