pisangbet
{"id":144,"date":"2021-10-21T02:50:54","date_gmt":"2021-10-21T02:50:54","guid":{"rendered":"https:\/\/krunker.com\/?p=144"},"modified":"2021-10-21T02:58:37","modified_gmt":"2021-10-21T02:58:37","slug":"krunker-dogeware-source-code","status":"publish","type":"post","link":"https:\/\/krunker.com\/krunker-dogeware-source-code\/","title":{"rendered":"Krunker Dogeware Source Code"},"content":{"rendered":"\n
  1. \/\/ ==UserScript==<\/li>
  2. \/\/ @name Krunker Dogeware – by The Gaming Gurus<\/li>
  3. \/\/ @description The most advanced krunker cheat<\/li>
  4. \/\/ @version 3.9.8<\/li>
  5. \/\/ @author \u00a92021 Skid Lamer – The Gaming Gurus\u2122<\/li>
  6. \/\/ @supportURL https:\/\/skidlamer.github.io\/wp<\/li>
  7. \/\/ @homepage https:\/\/skidlamer.github.io\/<\/li>
  8. \/\/ @icon https:\/\/i.imgur.com\/jjkFpnV.gif<\/li>
  9. \/\/ @namespace https:\/\/greasyfork.org\/users\/704479<\/li>
  10. \/\/ @include \/^https?\\:\\\/\\\/krunker\\..*\\\/.*$\/<\/li>
  11. \/\/ @include \/^https?\\:\\\/\\\/.*.browserfps\\..*\\\/.*$\/<\/li>
  12. \/\/ @exclude *:\/\/krunker.io\/editor*<\/li>
  13. \/\/ @exclude *:\/\/krunker.io\/social*<\/li>
  14. \/\/ @run-at document-start<\/li>
  15. \/\/ @grant none<\/li>
  16. \/\/ @noframes<\/li>
  17. \/\/ ==\/UserScript==<\/li>
  18.  <\/li>
  19. \/* eslint-env es6 *\/<\/li>
  20. \/* eslint-disable curly, no-undef, no-loop-func, no-return-assign, no-sequences *\/<\/li>
  21.  <\/li>
  22. \/\/ License Donationware<\/li>
  23.  <\/li>
  24. \/\/ Amazon Giftcards Accepted – Send to : skidlamer@mail.com<\/li>
  25.  <\/li>
  26. \/\/ BTC: 3CsDVq96KgmyPjktUe1YgVSurJVe7LT53G<\/li>
  27. \/\/ ETH: 0x5dbF713F95F7777c84e6EFF5080e2f0e0724E8b1<\/li>
  28. \/\/ ETC: 0xF59BEbe25ECe2ac3373477B5067E07F2284C70f3<\/li>
  29.  <\/li>
  30. (function(dogStr, dog) {<\/li>
  31.  <\/li>
  32. function Log() {<\/li>
  33. this.info = (str, args = []) => this.log(‘info’, str, args);<\/li>
  34. this.warn = (str, args = []) => this.log(‘warn’, str, args);<\/li>
  35. this.error = (str, args = []) => this.log(‘error’, str, args);<\/li>
  36. this.log = (level, str, args) => {<\/li>
  37. let colour = [];<\/li>
  38. switch(level) {<\/li>
  39. case ‘info’:colour=[“#07a1d5”, “#6e07d5”];break;<\/li>
  40. case ‘error’:colour=[“#d50707”, “#d53a07”];break;<\/li>
  41. case ‘warn’:colour=[“#d56e07”, “#d5d507”];break;<\/li>
  42. }<\/li>
  43. console.log(‘%c ‘.concat(‘[ ‘, level.toUpperCase(), ‘ ] ‘), [<\/li>
  44. `background: linear-gradient(${colour[0]}, ${colour[1]})`<\/li>
  45. , ‘border: 1px solid #3E0E02’<\/li>
  46. , ‘color: white’<\/li>
  47. , ‘display: block’<\/li>
  48. , ‘text-shadow: 0 1px 0 rgba(0, 0, 0, 0.3)’<\/li>
  49. , ‘box-shadow: 0 1px 0 rgba(255, 255, 255, 0.4) inset, 0 5px 3px -5px rgba(0, 0, 0, 0.5), 0 -13px 5px -10px rgba(255, 255, 255, 0.4) inset’<\/li>
  50. , ‘line-height: 12px’<\/li>
  51. , ‘text-align: center’<\/li>
  52. , ‘font-weight: bold’<\/li>
  53. ].join(‘;’))<\/li>
  54. if (args.length) console.log(str, args);<\/li>
  55. else console.log(str);<\/li>
  56. }<\/li>
  57. } var log = new Log();<\/li>
  58.  <\/li>
  59. class Dogeware {<\/li>
  60. constructor() {<\/li>
  61. dog = this;<\/li>
  62. \/\/this.token = null;<\/li>
  63. \/\/this.gameJS = null;<\/li>
  64. \/\/this.generated = false;<\/li>
  65. console.dir(this);<\/li>
  66. this.settings = Object.assign({}, {<\/li>
  67. aimbot: 1,<\/li>
  68. superSilent: true,<\/li>
  69. AImbot: true,<\/li>
  70. frustumCheck: false,<\/li>
  71. weaponZoom: 1.0,<\/li>
  72. wallbangs: true,<\/li>
  73. alwaysAim: false,<\/li>
  74. pitchHack: 0,<\/li>
  75. thirdPerson: false,<\/li>
  76. autoReload: false,<\/li>
  77. speedHack: false,<\/li>
  78. rangeCheck: false,<\/li>
  79. alwaysTrail: false,<\/li>
  80. spinAimFrames: 10,<\/li>
  81. animatedBillboards: false,<\/li>
  82. esp: 1,<\/li>
  83. espFontSize: 10,<\/li>
  84. tracers: false,<\/li>
  85. showGuiButton: true,<\/li>
  86. awtv: false,<\/li>
  87. uwtv: false,<\/li>
  88. forceUnsilent: false,<\/li>
  89. bhop: 0,<\/li>
  90. spinBot: false,<\/li>
  91. markTarget: true,<\/li>
  92. skinHack: false,<\/li>
  93. aimOffset: 0,<\/li>
  94. aimNoise: 0,<\/li>
  95. keybinds: true,<\/li>
  96. antikick: true,<\/li>
  97. fovbox: false,<\/li>
  98. drawFovbox: true,<\/li>
  99. fovBoxSize: 1,<\/li>
  100. guiOnMMB: false,<\/li>
  101. hideAdverts: false,<\/li>
  102. hideStreams: false,<\/li>
  103. hideMerch: false,<\/li>
  104. hideNewsConsole: false,<\/li>
  105. hideCookieButton: false,<\/li>
  106. chams: false,<\/li>
  107. chamsCol: 1,<\/li>
  108. wireframe: false,<\/li>
  109. kpalCSS: true,<\/li>
  110. customCSS: “”,<\/li>
  111. teamChams: false,<\/li>
  112. autoNuke: false,<\/li>
  113. chamsInterval: 500,<\/li>
  114. preventMeleeThrowing: false,<\/li>
  115. \/\/autoSwap: false,<\/li>
  116. forceNametagsOn: false,<\/li>
  117. aimbotRange: 0,<\/li>
  118. });<\/li>
  119. this.state = Object.assign({}, {<\/li>
  120. bindAimbotOn: true,<\/li>
  121. quickscopeCanShoot: true,<\/li>
  122. spinFrame: 0,<\/li>
  123. pressedKeys: new Set(),<\/li>
  124. spinCounter: 0,<\/li>
  125. activeTab: 0,<\/li>
  126. nameTags: false,<\/li>
  127. frame: 0<\/li>
  128. });<\/li>
  129. this.gaybow = 0;<\/li>
  130. this.colors = {<\/li>
  131. White: “#FFFFFF”,<\/li>
  132. Black: “#000000”,<\/li>
  133. Purple: “#9400D3”,<\/li>
  134. Pink: “#FF1493”,<\/li>
  135. Blue: “#1E90FF”,<\/li>
  136. DarkBlue: “#0000FF”,<\/li>
  137. Aqua: “#00FFFF”,<\/li>
  138. Green: “#008000”,<\/li>
  139. Lime: “#7FFF00”,<\/li>
  140. Orange: “#FF8C00”,<\/li>
  141. Yellow: “#FFFF00”,<\/li>
  142. Red: “#FF0000”,<\/li>
  143. }<\/li>
  144. \/\/this.vars = {};<\/li>
  145. this.isProxy = Symbol(“isProxy”);<\/li>
  146. this.GUI = {};<\/li>
  147. try {<\/li>
  148. this.onLoad();<\/li>
  149. } catch (e) {<\/li>
  150. console.error(e);<\/li>
  151. console.trace(e.stack);<\/li>
  152. }<\/li>
  153. }<\/li>
  154.  <\/li>
  155. onLoad() {<\/li>
  156.  <\/li>
  157. \/\/this.waitFor(_=>document.documentElement instanceof window.HTMLElement).then(_=>{<\/li>
  158. \/\/ this.iframe();<\/li>
  159. \/\/})<\/li>
  160. \/\/this.createObservers();<\/li>
  161. this.defines();<\/li>
  162. localStorage.kro_setngss_json ? Object.assign(this.settings, JSON.parse(localStorage.kro_setngss_json)) :<\/li>
  163. localStorage.kro_setngss_json = JSON.stringify(this.settings);<\/li>
  164. this.createListeners();<\/li>
  165. this.hooking();<\/li>
  166. \/*<\/li>
  167. this.waitFor(_=>this.token).then(_ => {<\/li>
  168. if (!this.token) location.reload();<\/li>
  169. this.version = \/\\[‘exports’]\\[‘gameVersion’]='(\\d+\\.\\d+\\.\\d+)’,\/.exec(this.gameJS)[1];<\/li>
  170. if ( this.isElectron() || !this.isDefined(GM) ) {<\/li>
  171. const loader = new Function(“WP_fetchMMToken”, “Module”, this.gamePatch());<\/li>
  172. loader(new Promise(res=>res(this.token)), { csv: async () => 0 });<\/li>
  173. } else if (GM.info.script.version !== this.version) {<\/li>
  174.  <\/li>
  175. if (confirm(‘This Script Needs Updating by Skidlamer, visit The GamingGurus Discord now?\\n\\nCancel will attempt to use the script anyway \\n(CHANCE OF BAN)’)) {<\/li>
  176. return window.location.assign(“https:\/\/skidlamer.github.io\/wp”);<\/li>
  177. } else {<\/li>
  178. const loader = new Function(“WP_fetchMMToken”, “Module”, this.gamePatch());<\/li>
  179. loader(new Promise(res=>res(this.token)), { csv: async () => 0 });<\/li>
  180. return this.hooking();<\/li>
  181. }<\/li>
  182.  <\/li>
  183. } else {<\/li>
  184. const loader = new Function(“WP_fetchMMToken”, “Module”, this.gamePatch());<\/li>
  185. loader(new Promise(res=>res(this.token)), { csv: async () => 0 });<\/li>
  186. }<\/li>
  187. return this.hooking();<\/li>
  188. })*\/<\/li>
  189. }<\/li>
  190.  <\/li>
  191. isType(item, type) {<\/li>
  192. return typeof item === type;<\/li>
  193. }<\/li>
  194.  <\/li>
  195. isDefined(item) {<\/li>
  196. return !this.isType(item, “undefined”) && item !== null;<\/li>
  197. }<\/li>
  198.  <\/li>
  199. objectHas(obj, arr) {<\/li>
  200. return arr.some(prop => obj.hasOwnProperty(prop));<\/li>
  201. }<\/li>
  202.  <\/li>
  203. createElement(type, html, id) {<\/li>
  204. let newElement = document.createElement(type)<\/li>
  205. if (id) newElement.id = id<\/li>
  206. newElement.innerHTML = html<\/li>
  207. return newElement<\/li>
  208. }<\/li>
  209.  <\/li>
  210. getVersion() {<\/li>
  211. \/\/const elems = document.getElementsByClassName(‘terms’);<\/li>
  212. \/\/const version = elems[elems.length – 1].innerText;<\/li>
  213. return this.version\/\/version;<\/li>
  214. }<\/li>
  215.  <\/li>
  216. isElectron() {<\/li>
  217. \/\/ Renderer process<\/li>
  218. if (typeof window !== ‘undefined’ && typeof window.process === ‘object’ && window.process.type === ‘renderer’) {<\/li>
  219. return true;<\/li>
  220. }<\/li>
  221.  <\/li>
  222. \/\/ Main process<\/li>
  223. if (typeof process !== ‘undefined’ && typeof process.versions === ‘object’ && !!process.versions.electron) {<\/li>
  224. return true;<\/li>
  225. }<\/li>
  226.  <\/li>
  227. \/\/ Detect the user agent when the `nodeIntegration` option is set to true<\/li>
  228. if (typeof navigator === ‘object’ && typeof navigator.userAgent === ‘string’ && navigator.userAgent.indexOf(‘Electron’) >= 0) {<\/li>
  229. return true;<\/li>
  230. }<\/li>
  231.  <\/li>
  232. return false;<\/li>
  233. }<\/li>
  234.  <\/li>
  235. saveAs(name, data) {<\/li>
  236. let blob = new Blob([data], {<\/li>
  237. type: ‘text\/plain’<\/li>
  238. });<\/li>
  239. let el = window.document.createElement(“a”);<\/li>
  240. el.href = window.URL.createObjectURL(blob);<\/li>
  241. el.download = name;<\/li>
  242. window.document.body.appendChild(el);<\/li>
  243. el.click();<\/li>
  244. window.document.body.removeChild(el);<\/li>
  245. }<\/li>
  246.  <\/li>
  247. saveScript() {<\/li>
  248. this.fetchScript().then(script => {<\/li>
  249. this.saveAs(“game_” + this.getVersion() + “.js”, script)<\/li>
  250. })<\/li>
  251. }<\/li>
  252.  <\/li>
  253. \/*<\/li>
  254. gamePatch() {<\/li>
  255. let entries = {<\/li>
  256. inView: {<\/li>
  257. regex: \/(\\w+\\[‘(\\w+)’]\\){if\\(\\(\\w+=\\w+\\[‘\\w+’]\\[‘position’]\\[‘clone’]\\(\\))\/,<\/li>
  258. index: 2<\/li>
  259. },<\/li>
  260. procInputs: {<\/li>
  261. regex: \/this\\[‘(\\w+)’]=function\\((\\w+),(\\w+),\\w+,\\w+\\){(this)\\[‘recon’]\/,<\/li>
  262. index: 1<\/li>
  263. },<\/li>
  264. aimVal: {<\/li>
  265. regex: \/this\\[‘(\\w+)’]-=0x1\\\/\\(this\\[‘weapon’]\\[‘\\w+’]\\\/\\w+\\)\/,<\/li>
  266. index: 1<\/li>
  267. },<\/li>
  268. didShoot: {<\/li>
  269. regex: \/–,\\w+\\[‘(\\w+)’]=!0x0\/,<\/li>
  270. index: 1<\/li>
  271. },<\/li>
  272. nAuto: {<\/li>
  273. regex: \/’Single\\\\x20Fire’,’varN’:'(\\w+)’\/,<\/li>
  274. index: 1<\/li>
  275. },<\/li>
  276. crouchVal: {<\/li>
  277. regex: \/this\\[‘(\\w+)’]\\+=\\w\\[‘\\w+’]\\*\\w+,0x1<=this\\[‘\\w+’]\/,<\/li>
  278. index: 1<\/li>
  279. },<\/li>
  280. ammos: {<\/li>
  281. regex: \/\\[‘length’];for\\(\\w+=0x0;\\w+<\\w+\\[‘(\\w+)’]\\[‘length’]\/,<\/li>
  282. index: 1<\/li>
  283. },<\/li>
  284. weaponIndex: {<\/li>
  285. regex: \/\\[‘weaponConfig’]\\[\\w+]\\[‘secondary’]&&\\(\\w+\\[‘(\\w+)’]==\\w+\/,<\/li>
  286. index: 1<\/li>
  287. },<\/li>
  288. objInstances: {<\/li>
  289. regex: \/\\w+\\[‘\\w+’]\\(0x0,0x0,0x0\\);if\\(\\w+\\[‘(\\w+)’]=\\w+\\[‘\\w+’]\/,<\/li>
  290. index: 1<\/li>
  291. },<\/li>
  292. \/\/reloadTimer: {regex: \/this\\[‘(\\w+)’]&&\\(\\w+\\[‘\\w+’]\\(this\\),\\w+\\[‘\\w+’]\\(this\\)\/, index: 1},<\/li>
  293. reloadTimer: {<\/li>
  294. regex: \/0x0>=this\\[‘(\\w+’)]&&0x0>=this\\[‘swapTime’]\/,<\/li>
  295. index: 1<\/li>
  296. },<\/li>
  297. recoilAnimY: {<\/li>
  298. regex: \/this\\[‘(\\w+)’]\\+=this\\[‘\\w+’]\\*\\(\/,<\/li>
  299. index: 1<\/li>
  300. },<\/li>
  301. maxHealth: {<\/li>
  302. regex: \/this\\[‘health’]\\\/this\\[‘(\\w+)’]\\?\/,<\/li>
  303. index: 1<\/li>
  304. },<\/li>
  305. \/\/xVel: { regex: \/this\\[‘x’]\\+=this\\[‘(\\w+)’]\\*\\w+\\[‘map’]\\[‘config’]\\[‘speedX’]\/, index: 1 },<\/li>
  306. yVel: {<\/li>
  307. regex: \/this\\[‘(\\w+)’]=this\\[‘\\w+’],this\\[‘visible’]\/,<\/li>
  308. index: 1<\/li>
  309. },<\/li>
  310. \/\/zVel: { regex: \/this\\[‘z’]\\+=this\\[‘(\\w+)’]\\*\\w+\\[‘map’]\\[‘config’]\\[‘speedZ’]\/, index: 1 },<\/li>
  311. \/\/ Patches<\/li>
  312. socket: {<\/li>
  313. regex: \/\\[‘onopen’]=\\(\\)=>{\/,<\/li>
  314. patch: `$&${dogStr}.socket=this;`<\/li>
  315. },<\/li>
  316. \/\/frustum: {regex: \/(;const (\\w+)=this\\[‘frustum’]\\[‘containsPoint’];.*?return)!0x1\/, patch: “$1 $2”},<\/li>
  317. \/\/videoAds: {regex: \/!function\\(\\){var \\w+=document\\[‘createElement’]\\(‘script’\\);.*?}\\(\\);\/, patch: “”},<\/li>
  318. anticheat1:{regex: \/&&\\w+\\(\\),window\\[‘utilities’]&&\\(\\w+\\(null,null,null,!0x0\\),\\w+\\(\\)\\)\/, patch: “”},<\/li>
  319. \/\/anticheat2:{regex: \/(\\[]instanceof Array;).*?(var)\/, patch: “$1 $2”},<\/li>
  320. anticheat3:{regex: \/windows\\[‘length’\\]>\\d+.*?0x25\/, patch: `0x25`},<\/li>
  321. \/\/anticheat4:{regex: \/(\\w+\\=)\\(!menuItemContainer\\[‘innerHTML’]\\[‘includes’].*?\\);\/, patch: `$1false;`},<\/li>
  322. \/\/anticheat4:{regex: \/kro_utilities_\/g, patch: `K_P_A_L__IS__A__G_A_Y__P_E_D_O`},<\/li>
  323. \/\/kpal:{regex: \/1tWAEJx\/g, patch: `K_P_A_L__IS__A__G_A_Y__P_E_D_O`},<\/li>
  324. \/\/kpal2:{regex: \/jjkFpnV\/g, patch: `K_P_A_L__IS__A__G_A_Y__P_E_D_O`},<\/li>
  325.  <\/li>
  326. writeable: {<\/li>
  327. regex: \/’writeable’:!0x1\/g,<\/li>
  328. patch: “writeable:true”<\/li>
  329. },<\/li>
  330. configurable: {<\/li>
  331. regex: \/’configurable’:!0x1\/g,<\/li>
  332. patch: “configurable:true”<\/li>
  333. },<\/li>
  334. typeError: {<\/li>
  335. regex: \/throw new TypeError\/g,<\/li>
  336. patch: “console.error”<\/li>
  337. },<\/li>
  338. error: {<\/li>
  339. regex: \/throw new Error\/g,<\/li>
  340. patch: “console.error”<\/li>
  341. },<\/li>
  342. \/\/exports: {regex: \/(this\\[‘\\w+’]\\[‘\\w+’]\\(this\\);};},function\\(\\w+,\\w+,(\\w+)\\){)\/, patch: `$1 ${dogStr}.exports=$2.c; ${dogStr}.modules=$2.m;`},<\/li>
  343. inputs: {<\/li>
  344. regex: \/(\\w+\\[‘\\w+’]\\[\\w+\\[‘\\w+’]\\[‘\\w+’]\\?’\\w+’:’push’]\\()(\\w+)\\),\/,<\/li>
  345. patch: `$1${dogStr}.inputs($2)),`<\/li>
  346. },<\/li>
  347. nametags: {<\/li>
  348. regex: \/&&(\\w+\\[‘\\w+’])\\){(if\\(\\(\\w+=\\w+\\[‘\\w+’]\\[‘\\w+’]\\[‘\\w+’])\/,<\/li>
  349. patch: `){if(!$1&&!${dogStr}.state.nameTags)continue;$2`<\/li>
  350. },<\/li>
  351. wallbangs: {<\/li>
  352. regex: \/!(\\w+)\\[‘transparent’]\/,<\/li>
  353. patch: `${dogStr}.settings.wallbangs?!$1.penetrable : !$1.transparent`<\/li>
  354. },<\/li>
  355. thirdPerson: {<\/li>
  356. regex: \/(\\w+)\\[\\’config\\’\\]\\[\\’thirdPerson\\’\\]\/g,<\/li>
  357. patch: `${dogStr}.settings.thirdPerson`<\/li>
  358. },<\/li>
  359. };<\/li>
  360. let script = this.gameJS;<\/li>
  361. for (let name in entries) {<\/li>
  362. let object = entries[name];<\/li>
  363. let found = object.regex.exec(script);<\/li>
  364. if (object.hasOwnProperty(‘index’)) {<\/li>
  365. if (!found) {<\/li>
  366. object.val = null;<\/li>
  367. \/\/alert(“Failed to Find ” + name);<\/li>
  368. console.error(“Failed to Find ” + name);<\/li>
  369. } else {<\/li>
  370. object.val = found[object.index];<\/li>
  371. console.log(“Found “, name, “:”, object.val);<\/li>
  372. }<\/li>
  373. Object.defineProperty(dog.vars, name, {<\/li>
  374. configurable: false,<\/li>
  375. value: object.val<\/li>
  376. });<\/li>
  377. } else if (found) {<\/li>
  378. script = script.replace(object.regex, object.patch);<\/li>
  379. console.log(“Patched “, name);<\/li>
  380. } else console.error(“Failed to Patch ” + name); \/\/alert(“Failed to Patch ” + name);<\/li>
  381. }<\/li>
  382. return script;<\/li>
  383. }<\/li>
  384. *\/<\/li>
  385.  <\/li>
  386. async fetchScript() {<\/li>
  387. const data = await this.request(“https:\/\/krunker.io\/social.html”, “text”);<\/li>
  388. const buffer = await this.request(“https:\/\/krunker.io\/pkg\/krunker.” + \/\\w.exports=”(\\w+)”\/.exec(data)[1] + “.vries”, “arrayBuffer”);<\/li>
  389. const array = Array.from(new Uint8Array(buffer));<\/li>
  390. const xor = array[0] ^ ‘!’.charCodeAt(0);<\/li>
  391. return array.map((code) => String.fromCharCode(code ^ xor)).join(”);<\/li>
  392. }<\/li>
  393.  <\/li>
  394. async request(url, type, opt = {}) {<\/li>
  395. return fetch(url, opt).then(response => {<\/li>
  396. if (!response.ok) {<\/li>
  397. throw new Error(“Network response from ” + url + ” was not ok”)<\/li>
  398. }<\/li>
  399. return response[type]()<\/li>
  400. })<\/li>
  401. }<\/li>
  402.  <\/li>
  403. async waitFor(test, timeout_ms = 2e4, doWhile = null) {<\/li>
  404. let sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));<\/li>
  405. return new Promise(async (resolve, reject) => {<\/li>
  406. if (typeof timeout_ms != “number”) reject(“Timeout argument not a number in waitFor(selector, timeout_ms)”);<\/li>
  407. let result, freq = 100;<\/li>
  408. while (result === undefined || result === false || result === null || result.length === 0) {<\/li>
  409. if (doWhile && doWhile instanceof Function) doWhile();;<\/li>
  410. if (timeout_ms % 10000 < freq) console.log(“waiting for: “, test);<\/li>
  411. if ((timeout_ms -= freq) < 0) {<\/li>
  412. console.log(“Timeout : “, test);<\/li>
  413. resolve(false);<\/li>
  414. return;<\/li>
  415. }<\/li>
  416. await sleep(freq);<\/li>
  417. result = typeof test === “string” ? Function(test)() : test();<\/li>
  418. }<\/li>
  419. console.log(“Passed : “, test);<\/li>
  420. resolve(result);<\/li>
  421. });<\/li>
  422. };<\/li>
  423.  <\/li>
  424. async hooking() {<\/li>
  425. await this.waitFor(_ => this.isDefined(this.socket))<\/li>
  426. if (!this.isDefined(this.socket)) location.assign(location.origin);<\/li>
  427. this.socket.send = new Proxy(this.socket.send, {<\/li>
  428. apply(target, that, args) {<\/li>
  429. if (args[0] === “en”) {<\/li>
  430. \/\/args[ args.length – 1 ] = true; \/\/ AntiPedo<\/li>
  431. that.skinCache = {<\/li>
  432. main: args[1][2][0],<\/li>
  433. secondary: args[1][2][1],<\/li>
  434. hat: args[1][3],<\/li>
  435. body: args[1][4],<\/li>
  436. knife: args[1][9],<\/li>
  437. dye: args[1][14],<\/li>
  438. waist: args[1][17],<\/li>
  439. }<\/li>
  440. }<\/li>
  441. return Reflect.apply(…arguments);<\/li>
  442. }<\/li>
  443. })<\/li>
  444. this.socket._dispatchEvent = new Proxy(this.socket._dispatchEvent, {<\/li>
  445. apply(target, that, args) {<\/li>
  446. if (dog.settings.skinHack && that.skinCache && args[0] === “0”) {<\/li>
  447. let pInfo = args[1][0];<\/li>
  448. let pSize = 38;<\/li>
  449. while (pInfo.length % pSize !== 0) pSize++;<\/li>
  450. for (let i = 0; i < pInfo.length; i += pSize) {<\/li>
  451. if (pInfo[i] === that.socketId || 0) {<\/li>
  452. pInfo[i + 12] = [that.skinCache.main, that.skinCache.secondary];<\/li>
  453. pInfo[i + 13] = that.skinCache.hat;<\/li>
  454. pInfo[i + 14] = that.skinCache.body;<\/li>
  455. pInfo[i + 19] = that.skinCache.knife;<\/li>
  456. pInfo[i + 24] = that.skinCache.dye;<\/li>
  457. pInfo[i + 33] = that.skinCache.waist;<\/li>
  458. }<\/li>
  459. }<\/li>
  460. }<\/li>
  461.  <\/li>
  462. return target.apply(that, args);<\/li>
  463. }<\/li>
  464. })<\/li>
  465.  <\/li>
  466. await this.waitFor(_ => this.isDefined(this.overlay))<\/li>
  467. this.ctx = this.overlay.canvas.getContext(‘2d’);<\/li>
  468. this.overlay.render = new Proxy(this.overlay.render, {<\/li>
  469. apply(target, that, args) {<\/li>
  470. [“scale”, “game”, “controls”, “renderer”, “me”].forEach((item, index) => {<\/li>
  471. dog[item] = args[index]<\/li>
  472. });<\/li>
  473. Reflect.apply(…arguments);<\/li>
  474. if (dog.me && dog.ctx) {<\/li>
  475. dog.ctx.save();<\/li>
  476. dog.ctx.scale(dog.scale, dog.scale);<\/li>
  477. dog.render();<\/li>
  478. dog.ctx.restore();<\/li>
  479.  <\/li>
  480. if (!dog.me.procInputs[dog.isProxy]) {<\/li>
  481. dog.me.procInputs = new Proxy(dog.me.procInputs, {<\/li>
  482. apply: function(target, that, [input, game, recon, lock]) {<\/li>
  483. if (that) dog.inputs(input);<\/li>
  484. return target.apply(that, [input, game, recon, lock]);<\/li>
  485. },<\/li>
  486. get: function(target, key) {<\/li>
  487. return key === dog.isProxy ? true : Reflect.get(target, key);<\/li>
  488. },<\/li>
  489. })<\/li>
  490. }<\/li>
  491. \/\/ Wallbangs<\/li>
  492. dog.game.map.manager.objects.filter(x => {<\/li>
  493. return x.penetrable<\/li>
  494. }).map((obj, index, array) => {<\/li>
  495. obj.transparent=dog.settings.wallbangs;<\/li>
  496. });<\/li>
  497. }<\/li>
  498. }<\/li>
  499. })<\/li>
  500.  <\/li>
  501. this.cleanGUI();<\/li>
  502. this.customCSS();<\/li>
  503. await this.waitFor(_ => this.isDefined(window.windows));<\/li>
  504. this.initGUI();<\/li>
  505. }<\/li>
  506.  <\/li>
  507. defines() {<\/li>
  508. const $origSkins = Symbol(“origSkins”),<\/li>
  509. $localSkins = Symbol(“localSkins”);<\/li>
  510.  <\/li>
  511. Object.defineProperties(Object.prototype, {<\/li>
  512. \/\/isFaceIT: {<\/li>
  513. \/\/ get() { return true }<\/li>
  514. \/\/},<\/li>
  515. canvas: {<\/li>
  516. set(val) {<\/li>
  517. this._value = val;<\/li>
  518. },<\/li>
  519. get() {<\/li>
  520. let object = this;<\/li>
  521. if (dog.objectHas(object, [“healthColE”, “healthColT”, “dmgColor”])) {<\/li>
  522. dog.overlay = this;<\/li>
  523. }<\/li>
  524. return this._value;<\/li>
  525. }<\/li>
  526. },<\/li>
  527. RENDER: {<\/li>
  528. set(val) {<\/li>
  529. this._value = val;<\/li>
  530. dog.renderer = this._value;<\/li>
  531. dog.renderer.adsFovMlt.fill(dog.settings.weaponZoom)<\/li>
  532. dog.fxComposer = this;<\/li>
  533. },<\/li>
  534. get() {<\/li>
  535. return this._value;<\/li>
  536. }<\/li>
  537. },<\/li>
  538. OBJLoader: {<\/li>
  539. set(val) {<\/li>
  540. dog.three = this;<\/li>
  541. this._value = val;<\/li>
  542. },<\/li>
  543. get() {<\/li>
  544. return this._value;<\/li>
  545. }<\/li>
  546. },<\/li>
  547. skins: {<\/li>
  548. set(fn) {<\/li>
  549. this[$origSkins] = fn;<\/li>
  550. if (void 0 == this.localSkins || !this.localSkins.length) {<\/li>
  551. this[$localSkins] = Array.apply(null, Array(5e3)).map((x, i) => {<\/li>
  552. return {<\/li>
  553. ind: i,<\/li>
  554. cnt: 0x1,<\/li>
  555. }<\/li>
  556. })<\/li>
  557. }<\/li>
  558. return fn;<\/li>
  559. },<\/li>
  560. get() {<\/li>
  561. return dog.settings.skinHack && this.stats ? this[$localSkins] : this[$origSkins];<\/li>
  562. }<\/li>
  563. },<\/li>
  564. useLooseClient: {<\/li>
  565. enumerable: false,<\/li>
  566. get() {<\/li>
  567. return this._ulc<\/li>
  568. },<\/li>
  569. set(v) {<\/li>
  570. dog.config = this<\/li>
  571. \/\/ Increase the rate in which inView is updated to every frame, making aimbot way more responsive<\/li>
  572. Object.defineProperty(this, “nameVisRate”, {<\/li>
  573. value: 0,<\/li>
  574. writable: false,<\/li>
  575. configurable: true,<\/li>
  576. })<\/li>
  577. this._ulc = v<\/li>
  578. }<\/li>
  579. },<\/li>
  580. trail: { \/\/ All weapon tracers<\/li>
  581. enumerable: false,<\/li>
  582. get() {<\/li>
  583. return dog.settings.alwaysTrail || this._trail<\/li>
  584. },<\/li>
  585. set(v) {<\/li>
  586. this._trail = v<\/li>
  587. }<\/li>
  588. },<\/li>
  589. showTracers: {<\/li>
  590. enumerable: false,<\/li>
  591. get() {<\/li>
  592. return dog.settings.alwaysTrail || this._showTracers<\/li>
  593. },<\/li>
  594. set(v) {<\/li>
  595. this._showTracers = v<\/li>
  596. }<\/li>
  597. },<\/li>
  598. shaderId: { \/\/ Animated billboards<\/li>
  599. enumerable: false,<\/li>
  600. get() {<\/li>
  601. if (this.src && this.src.startsWith(“pubs\/”)) return dog.settings.animatedBillboards ? 1 : this.rshaderId;<\/li>
  602. else return this.rshaderId<\/li>
  603. },<\/li>
  604. set(v) {<\/li>
  605. this.rshaderId = v<\/li>
  606. }<\/li>
  607. },<\/li>
  608. \/\/ Clientside prevention of inactivity kick<\/li>
  609. idleTimer: {<\/li>
  610. enumerable: false,<\/li>
  611. get() {<\/li>
  612. return dog.settings.antikick ? 0 : this._idleTimer<\/li>
  613. },<\/li>
  614. set(v) {<\/li>
  615. this._idleTimer = v<\/li>
  616. }<\/li>
  617. },<\/li>
  618. kickTimer: {<\/li>
  619. enumerable: false,<\/li>
  620. get() {<\/li>
  621. return dog.settings.antikick ? Infinity : this._kickTimer<\/li>
  622. },<\/li>
  623. set(v) {<\/li>
  624. this._kickTimer = v<\/li>
  625. }<\/li>
  626. },<\/li>
  627. cnBSeen: {<\/li>
  628. set (val) {<\/li>
  629. this.inView = val;<\/li>
  630. },<\/li>
  631. get() {<\/li>
  632. let isEnemy =!dog.isDefined(dog.me)|| !dog.me.team||dog.me.team !=this.team;<\/li>
  633. return this.inView||isEnemy&&dog.state.nameTags;<\/li>
  634. }<\/li>
  635. },<\/li>
  636. events: {<\/li>
  637. set (val) {<\/li>
  638. if (this.ahNum ===0) {<\/li>
  639. dog.wsSend = this.send.bind(this);<\/li>
  640. dog.wsEvent = this._dispatchEvent.bind(this);<\/li>
  641. dog.socket = this;<\/li>
  642. }<\/li>
  643. this._events = val;<\/li>
  644. },<\/li>
  645. get() {<\/li>
  646. return this._events;<\/li>
  647. }<\/li>
  648. },<\/li>
  649. thirdPerson: {<\/li>
  650. set(val) {<\/li>
  651. this._thirdPerson = val;<\/li>
  652. },<\/li>
  653. get() {<\/li>
  654. return dog.settings.thirdPerson.val || this._thirdPerson<\/li>
  655. }<\/li>
  656. },<\/li>
  657. });<\/li>
  658.  <\/li>
  659. \/\/ disable audioparam errors<\/li>
  660. Object.keys(AudioParam.prototype).forEach(name => {<\/li>
  661. if (Object.getOwnPropertyDescriptor(AudioParam.prototype, name).get) return<\/li>
  662. const old = AudioParam.prototype[name]<\/li>
  663. AudioParam.prototype[name] = function() {<\/li>
  664. try {<\/li>
  665. return old.apply(this, arguments)<\/li>
  666. } catch (e) {<\/li>
  667. console.log(“AudioParam error:\\n” + e)<\/li>
  668. return false<\/li>
  669. }<\/li>
  670. }<\/li>
  671. })<\/li>
  672. }<\/li>
  673.  <\/li>
  674. iframe() {<\/li>
  675. const iframe = document.createElement(‘iframe’);<\/li>
  676. iframe.setAttribute(‘style’, ‘display:none’);<\/li>
  677. iframe.setAttribute(“id”, dogStr);<\/li>
  678. iframe.src = location.origin;<\/li>
  679. document.documentElement.appendChild(iframe);<\/li>
  680.  <\/li>
  681. const ifrWin = iframe.contentWindow;<\/li>
  682. const ifrDoc = iframe.contentDocument?iframe.contentDocument:iframe.contentWindow.document;<\/li>
  683.  <\/li>
  684. let skidneySplizy = 0;<\/li>
  685.  <\/li>
  686. ifrWin.TextDecoder.prototype.decode = new Proxy(window.TextDecoder.prototype.decode, {<\/li>
  687. apply: function(target, that, args) {<\/li>
  688. let string = Reflect.apply(…arguments);<\/li>
  689. if (string.length > 5e4) {<\/li>
  690. log.warn(“skidneySplizy = ” + skidneySplizy);<\/li>
  691. if (skidneySplizy == 0) {<\/li>
  692. dog.gameJS = string;<\/li>
  693. } else {<\/li>
  694. dog.gameJS += string;<\/li>
  695. } skidneySplizy ++;<\/li>
  696. \/\/console.log(string.length)<\/li>
  697. \/*<\/li>
  698. if (!dog.gameJS) {<\/li>
  699. dog.gameJS = string;<\/li>
  700. console.log(“1stSTR”);<\/li>
  701. } else {<\/li>
  702. dog.gameJS += string;<\/li>
  703. console.log(“2ndSTR”);<\/li>
  704. }<\/li>
  705. *\/<\/li>
  706. } \/\/else \/\/console.log(string.length)<\/li>
  707. if (string.includes(“generate-token”)) dog.generated = true;<\/li>
  708. else if (string.length == 40||dog.generated) {<\/li>
  709. dog.token = string;<\/li>
  710. console.log(“Token “, string);<\/li>
  711. document.documentElement.removeChild(iframe);<\/li>
  712. }<\/li>
  713. return string;<\/li>
  714. },<\/li>
  715. });<\/li>
  716. }<\/li>
  717.  <\/li>
  718. createObservers() {<\/li>
  719.  <\/li>
  720. let observer = new MutationObserver(mutations => {<\/li>
  721. for (let mutation of mutations) {<\/li>
  722. for (let node of mutation.addedNodes) {<\/li>
  723. if (node.tagName === ‘SCRIPT’) {<\/li>
  724. if (node.type === “text\/javascript” && node.innerHTML.startsWith(“*!”, 1)) {<\/li>
  725. node.innerHTML = “”;<\/li>
  726. observer.disconnect();<\/li>
  727. } else if (node.src) {<\/li>
  728. \/\/console.log(node.src);<\/li>
  729. }<\/li>
  730. }<\/li>
  731. }<\/li>
  732. }<\/li>
  733. });<\/li>
  734. observer.observe(document, {<\/li>
  735. childList: true,<\/li>
  736. subtree: true<\/li>
  737. });<\/li>
  738. }<\/li>
  739.  <\/li>
  740. createListeners() {<\/li>
  741.  <\/li>
  742. window.addEventListener(“mouseup”, (e) => {<\/li>
  743. if (e.which === 2 && dog.settings.guiOnMMB) {<\/li>
  744. e.preventDefault()<\/li>
  745. dog.showGUI()<\/li>
  746. }<\/li>
  747. })<\/li>
  748. window.addEventListener(“keyup”, event => {<\/li>
  749. if (this.state.pressedKeys.has(event.code)) this.state.pressedKeys.delete(event.code)<\/li>
  750. if (!(document.activeElement.tagName === “INPUT” || !window.endUI && window.endUI.style.display) && dog.settings.keybinds) {<\/li>
  751. switch (event.code) {<\/li>
  752. case “KeyY”:<\/li>
  753. this.state.bindAimbotOn = !this.state.bindAimbotOn<\/li>
  754. this.wsEvent(“ch”, [null, (“Aimbot ” + (this.state.bindAimbotOn ? “on” : “off”)), 1])<\/li>
  755. break<\/li>
  756. case “KeyH”:<\/li>
  757. this.settings.esp = (this.settings.esp + 1) % 4<\/li>
  758. this.wsEvent(“ch”, [null, “ESP: ” + [“disabled”, “nametags”, “box”, “full”][this.settings.esp], 1])<\/li>
  759. break<\/li>
  760. }<\/li>
  761. }<\/li>
  762. })<\/li>
  763. window.addEventListener(“keydown”, event => {<\/li>
  764. if (event.code == “F1”) {<\/li>
  765. event.preventDefault();<\/li>
  766. dog.showGUI();<\/li>
  767. }<\/li>
  768. if (‘INPUT’ == document.activeElement.tagName || !window.endUI && window.endUI.style.display) return;<\/li>
  769. switch (event.code) {<\/li>
  770. case ‘NumpadSubtract’:<\/li>
  771. document.exitPointerLock();<\/li>
  772. \/\/console.log(document.exitPointerLock)<\/li>
  773. console.dirxml(this)<\/li>
  774. break;<\/li>
  775. default:<\/li>
  776. if (!this.state.pressedKeys.has(event.code)) this.state.pressedKeys.add(event.code);<\/li>
  777. break;<\/li>
  778. }<\/li>
  779. })<\/li>
  780. }<\/li>
  781.  <\/li>
  782. inputs(input) {<\/li>
  783. const key = {<\/li>
  784. frame: 0,<\/li>
  785. delta: 1,<\/li>
  786. xdir: 2,<\/li>
  787. ydir: 3,<\/li>
  788. moveDir: 4,<\/li>
  789. shoot: 5,<\/li>
  790. scope: 6,<\/li>
  791. jump: 7,<\/li>
  792. reload: 8,<\/li>
  793. crouch: 9,<\/li>
  794. weaponScroll: 10,<\/li>
  795. weaponSwap: 11,<\/li>
  796. moveLock: 12<\/li>
  797. }<\/li>
  798.  <\/li>
  799. const moveDir = {<\/li>
  800. leftStrafe: 0,<\/li>
  801. forward: 1,<\/li>
  802. rightStrafe: 2,<\/li>
  803. right: 3,<\/li>
  804. backwardRightStrafe: 4,<\/li>
  805. backward: 5,<\/li>
  806. backwardLeftStrafe: 6,<\/li>
  807. left: 7<\/li>
  808. }<\/li>
  809.  <\/li>
  810. this.state.frame = input[key.frame];<\/li>
  811. this.state.nameTags = [1, 2].some(n => n == this.settings.esp) || this.settings.forceNametagsOn;<\/li>
  812.  <\/li>
  813. if (this.me) {<\/li>
  814.  <\/li>
  815. \/\/ AUTO NUKE<\/li>
  816. if (this.settings.autoNuke && Object.keys(this.me.streaks).length) {<\/li>
  817. this.wsSend(“k”, 0)<\/li>
  818. }<\/li>
  819.  <\/li>
  820. \/\/AUTO BHOP<\/li>
  821. if (this.settings.bhop) {<\/li>
  822. if (this.state.pressedKeys.has(“Space”) || this.settings.bhop % 2) {<\/li>
  823. this.controls.keys[this.controls.binds.jump.val] ^= 1;<\/li>
  824. if (this.controls.keys[this.controls.binds.jump.val]) {<\/li>
  825. this.controls.didPressed[this.controls.binds.jump.val] = 1;<\/li>
  826. }<\/li>
  827. if (this.state.pressedKeys.has(“Space”) || this.settings.bhop == 3) {<\/li>
  828. if (this.me.yVel < -0.03 && this.me.canSlide) {<\/li>
  829. setTimeout(() => {<\/li>
  830. this.controls.keys[this.controls.binds.crouch.val] = 0;<\/li>
  831. }, this.me.slideTimer || 325);<\/li>
  832. this.controls.keys[this.controls.binds.crouch.val] = 1;<\/li>
  833. this.controls.didPressed[this.controls.binds.crouch.val] = 1;<\/li>
  834. }<\/li>
  835. }<\/li>
  836. }<\/li>
  837. }<\/li>
  838.  <\/li>
  839. \/\/ Makes nametags show in custom games, where nametags are disabled<\/li>
  840. if (this.settings.forceNametagsOn) {<\/li>
  841. try {<\/li>
  842. Object.defineProperty(this.game.config, “nameTags”, {<\/li>
  843. get() {<\/li>
  844. return dog.settings.forceNametagsOn ? false : this.game._nametags<\/li>
  845. },<\/li>
  846. set(v) {<\/li>
  847. this.game._nametags = v<\/li>
  848. }<\/li>
  849. })<\/li>
  850. } catch (e) {}<\/li>
  851. }<\/li>
  852.  <\/li>
  853.  <\/li>
  854. if (this.settings.spinBot) {<\/li>
  855. const rate = 1<\/li>
  856. input[key.moveDir] !== -1 && (input[key.moveDir] = (input[key.moveDir] + this.state.spinCounter – Math.round(7 * (input[key.ydir] \/ (Math.PI * 2000)))) % 7)<\/li>
  857. input[key.ydir] = this.state.spinCounter \/ 7 * (Math.PI * 2000)<\/li>
  858. input[key.frame] % rate === 0 && (this.state.spinCounter = (this.state.spinCounter + 1) % 7)<\/li>
  859. }<\/li>
  860.  <\/li>
  861. \/\/ AUTO SWAP (not working idk why)<\/li>
  862. \/\/ if (this.settings.autoSwap && !this.me.weapon.secondary && this.me[this.vars.ammos][0] === 0 && this.me[this.vars.ammos][1] > 0 && !this.me.swapTime && !this.me[this.vars.reloadTimer]) {<\/li>
  863. \/\/ input[key.weaponSwap] = 1<\/li>
  864. \/\/}<\/li>
  865.  <\/li>
  866. \/\/ AUTO RELOAD<\/li>
  867. if (this.settings.autoReload && this.me.ammos[this.me.weaponIndex] === 0) {<\/li>
  868. input[key.reload] = 1<\/li>
  869. }<\/li>
  870.  <\/li>
  871. \/\/ PITCH HACK<\/li>
  872. if (this.settings.pitchHack) {<\/li>
  873. switch (this.settings.pitchHack) {<\/li>
  874. case 1:<\/li>
  875. input[key.xdir] = -Math.PI * 500<\/li>
  876. break<\/li>
  877. case 2:<\/li>
  878. input[key.xdir] = Math.PI * 500<\/li>
  879. break<\/li>
  880. case 3:<\/li>
  881. input[key.xdir] = Math.sin(Date.now() \/ 50) * Math.PI * 500<\/li>
  882. break<\/li>
  883. case 4:<\/li>
  884. input[key.xdir] = Math.sin(Date.now() \/ 250) * Math.PI * 500<\/li>
  885. break<\/li>
  886. case 5:<\/li>
  887. input[key.xdir] = input[key.frame] % 2 ? Math.PI * 500 : -Math.PI * 500<\/li>
  888. break<\/li>
  889. case 6:<\/li>
  890. input[key.xdir] = (Math.random() * Math.PI – Math.PI \/ 2) * 1000<\/li>
  891. break<\/li>
  892. }<\/li>
  893. }<\/li>
  894.  <\/li>
  895. \/\/ Add the `pos` property to Players and AIs<\/li>
  896. const getNoise = () => (Math.random() * 2 – 1) * this.settings.aimNoise<\/li>
  897. this.game.players.list.forEach(v => {<\/li>
  898. v.pos = {<\/li>
  899. x: v.x,<\/li>
  900. y: v.y,<\/li>
  901. z: v.z<\/li>
  902. };<\/li>
  903. v.npos = {<\/li>
  904. x: v.x + getNoise(),<\/li>
  905. y: v.y + getNoise(),<\/li>
  906. z: v.z + getNoise()<\/li>
  907. };<\/li>
  908. v.isTarget = false<\/li>
  909. })<\/li>
  910. if (this.game.AI.ais) {<\/li>
  911. this.game.AI.ais.forEach(v => v.npos = v.pos = {<\/li>
  912. x: v.x,<\/li>
  913. y: v.y,<\/li>
  914. z: v.z<\/li>
  915. })<\/li>
  916. }<\/li>
  917.  <\/li>
  918. \/\/ AIMBOT<\/li>
  919. if (this.renderer && this.renderer.frustum && this.me.active) {<\/li>
  920. this.controls.target = null<\/li>
  921.  <\/li>
  922. \/\/ Finds all the visible enemies<\/li>
  923. let targets = this.game.players.list.filter(enemy => !enemy.isYTMP && enemy.hasOwnProperty(‘npos’) && (!this.settings.frustumCheck || this.containsPoint(enemy.npos)) && ((this.me.team === null || enemy.team !== this.me.team) && enemy.health > 0 && enemy.inView)).sort((e, e2) => this.getDistance(this.me.x, this.me.z, e.npos.x, e.npos.z) – this.getDistance(this.me.x, this.me.z, e2.npos.x, e2.npos.z));<\/li>
  924. let target = targets[0];<\/li>
  925.  <\/li>
  926. \/\/ If there’s a fov box, pick an enemy inside it instead (if there is)<\/li>
  927. if (this.settings.fovbox) {<\/li>
  928. const scale = this.scale || parseFloat(document.getElementById(“uiBase”).style.transform.match(\/\\((.+)\\)\/)[1])<\/li>
  929. const width = innerWidth \/ scale,<\/li>
  930. height = innerHeight \/ scale<\/li>
  931.  <\/li>
  932. let foundTarget = false<\/li>
  933. for (let i = 0; i < targets.length; i++) {<\/li>
  934. const t = targets[i]<\/li>
  935. const sp = this.world2Screen(new this.three.Vector3(t.x, t.y, t.z), width, height, t.height \/ 2)<\/li>
  936. let fovBox = [width \/ 3, height \/ 4, width * (1 \/ 3), height \/ 2]<\/li>
  937. switch (this.settings.fovBoxSize) {<\/li>
  938. \/\/ medium<\/li>
  939. case 2:<\/li>
  940. fovBox = [width * 0.4, height \/ 3, width * 0.2, height \/ 3]<\/li>
  941. break<\/li>
  942. \/\/ small<\/li>
  943. case 3:<\/li>
  944. fovBox = [width * 0.45, height * 0.4, width * 0.1, height * 0.2]<\/li>
  945. break<\/li>
  946. }<\/li>
  947. if (sp.x >= fovBox[0] && sp.x <= (fovBox[0] + fovBox[2]) && sp.y >= fovBox[1] && sp.y < (fovBox[1] + fovBox[3])) {<\/li>
  948. target = targets[i]<\/li>
  949. foundTarget = true<\/li>
  950. break<\/li>
  951. }<\/li>
  952. }<\/li>
  953. if (!foundTarget) {<\/li>
  954. target = void “kpal”<\/li>
  955. }<\/li>
  956. }<\/li>
  957.  <\/li>
  958. let isAiTarget = false<\/li>
  959. if (this.game.AI.ais && this.settings.AImbot) {<\/li>
  960. let aiTarget = this.game.AI.ais.filter(ent => ent.mesh && ent.mesh.visible && ent.health && ent.pos && ent.canBSeen).sort((p1, p2) => this.getDistance(this.me.x, this.me.z, p1.pos.x, p1.pos.z) – this.getDistance(this.me.x, this.me.z, p2.pos.x, p2.pos.z)).shift()<\/li>
  961. if (!target || (aiTarget && this.getDistance(this.me.x, this.me.z, aiTarget.pos.x, aiTarget.pos.z) > this.getDistance(this.me.x, this.me.z, target.pos.x, target.pos.z))) {<\/li>
  962. target = aiTarget<\/li>
  963. isAiTarget = true<\/li>
  964. }<\/li>
  965. }<\/li>
  966.  <\/li>
  967. const isShooting = input[key.shoot]<\/li>
  968. if (target && this.settings.aimbot &&<\/li>
  969. this.state.bindAimbotOn &&<\/li>
  970. (!this.settings.aimbotRange || this.getDistance3D(this.me.x, this.me.y, this.me.z, target.x, target.y, target.z) < this.settings.aimbotRange) &&<\/li>
  971. (!this.settings.rangeCheck || this.getDistance3D(this.me.x, this.me.y, this.me.z, target.x, target.y, target.z) <= this.me.weapon.range) &&<\/li>
  972. !this.me.reloadTimer) {<\/li>
  973.  <\/li>
  974. if (this.settings.awtv) {<\/li>
  975. input[key.scope] = 1<\/li>
  976. }<\/li>
  977. target.isTarget = this.settings.markTarget<\/li>
  978.  <\/li>
  979. const yDire = (this.getDir(this.me.z, this.me.x, target.npos.z, target.npos.x) || 0) * 1000<\/li>
  980. const xDire = isAiTarget ?<\/li>
  981. ((this.getXDir(this.me.x, this.me.y, this.me.z, target.npos.x, target.npos.y – target.dat.mSize \/ 2, target.npos.z) || 0) – (0.3 * this.me.recoilAnimY)) * 1000 :<\/li>
  982. ((this.getXDir(this.me.x, this.me.y, this.me.z, target.npos.x, target.npos.y – target.crouchVal * 3 + this.me.crouchVal * 3 + this.settings.aimOffset, target.npos.z) || 0) – (0.3 * this.me.recoilAnimY)) * 1000<\/li>
  983.  <\/li>
  984. \/\/ aimbot tweak<\/li>
  985. if (this.settings.forceUnsilent) {<\/li>
  986. this.controls.target = {<\/li>
  987. xD: xDire \/ 1000,<\/li>
  988. yD: yDire \/ 1000<\/li>
  989. }<\/li>
  990. this.controls.update(400)<\/li>
  991. }<\/li>
  992.  <\/li>
  993. \/\/ Different aimbot modes can share the same code<\/li>
  994. switch (this.settings.aimbot) {<\/li>
  995. \/\/ quickscope, silent, trigger aim, silent on aim, aim correction, unsilent<\/li>
  996. case 1:<\/li>
  997. case 2:<\/li>
  998. case 5:<\/li>
  999. case 6:<\/li>
  1000. case 9:<\/li>
  1001. case 10: {<\/li>
  1002. let onAim = [5, 6, 9].some(n => n == this.settings.aimbot)<\/li>
  1003. if ((this.settings.aimbot === 5 && input[key.scope]) || this.settings.aimbot === 10) {<\/li>
  1004. this.controls.target = {<\/li>
  1005. xD: xDire \/ 1000,<\/li>
  1006. yD: yDire \/ 1000<\/li>
  1007. }<\/li>
  1008. this.controls.update(400)<\/li>
  1009. }<\/li>
  1010. if ([2, 10].some(n => n == this.settings.aimbot) || (this.settings.aimbot === 1 && this.me.weapon.id)) {<\/li>
  1011. !this.me.weapon.melee && (input[key.scope] = 1)<\/li>
  1012. }<\/li>
  1013. if (this.me.didShoot) {<\/li>
  1014. input[key.shoot] = 0<\/li>
  1015. this.state.quickscopeCanShoot = false<\/li>
  1016. setTimeout(() => {<\/li>
  1017. this.state.quickscopeCanShoot = true<\/li>
  1018. }, this.me.weapon.rate * .85)<\/li>
  1019. } else if (this.state.quickscopeCanShoot && (!onAim || input[key.scope])) {<\/li>
  1020. if (!this.me.weapon.melee) {<\/li>
  1021. input[key.scope] = 1<\/li>
  1022. }<\/li>
  1023. if (!this.settings.superSilent && this.settings.aimbot !== 9) {<\/li>
  1024. input[key.ydir] = yDire<\/li>
  1025. input[key.xdir] = xDire<\/li>
  1026. }<\/li>
  1027. if ((this.settings.aimbot !== 9 && (!this.me.aimVal || this.me.weapon.noAim || this.me.weapon.melee)) ||<\/li>
  1028. (this.settings.aimbot === 9 && isShooting)) {<\/li>
  1029. input[key.ydir] = yDire<\/li>
  1030. input[key.xdir] = xDire<\/li>
  1031. input[key.shoot] = 1<\/li>
  1032. }<\/li>
  1033. }<\/li>
  1034. }<\/li>
  1035. break<\/li>
  1036. \/\/ spin aim useless rn<\/li>
  1037. \/\/ case 3: {<\/li>
  1038. \/\/ if (me[dog.vars.didShoot]) {<\/li>
  1039. \/\/ input[key.shoot] = 0<\/li>
  1040. \/\/ dog.state.quickscopeCanShoot = false<\/li>
  1041. \/\/ setTimeout(() => {<\/li>
  1042. \/\/ dog.state.quickscopeCanShoot = true<\/li>
  1043. \/\/ }, me.weapon.rate)<\/li>
  1044. \/\/ } else if (dog.state.quickscopeCanShoot && !dog.state.spinFrame) {<\/li>
  1045. \/\/ dog.state.spinFrame = input[key.frame]<\/li>
  1046. \/\/ } else {<\/li>
  1047. \/\/ const fullSpin = Math.PI * 2000<\/li>
  1048. \/\/ const spinFrames = dog.settings.spinAimFrames<\/li>
  1049. \/\/ const currentSpinFrame = input[key.frame]-dog.state.spinFrame<\/li>
  1050. \/\/ if (currentSpinFrame < 0) {<\/li>
  1051. \/\/ dog.state.spinFrame = 0<\/li>
  1052. \/\/ }<\/li>
  1053. \/\/ if (currentSpinFrame > spinFrames) {<\/li>
  1054. \/\/ if (!dog.settings.superSilent) {<\/li>
  1055. \/\/ input[key.ydir] = yDire<\/li>
  1056. \/\/ input[key.xdir] = xDire<\/li>
  1057. \/\/ }<\/li>
  1058. \/\/ if (!me[dog.vars.aimVal] || me.weapon.noAim || me.weapon.melee) {<\/li>
  1059. \/\/ input[key.ydir] = yDire<\/li>
  1060. \/\/ input[key.xdir] = xDire<\/li>
  1061. \/\/ input[key.shoot] = 1<\/li>
  1062. \/\/ dog.state.spinFrame = 0<\/li>
  1063. \/\/ }<\/li>
  1064. \/\/ } else {<\/li>
  1065. \/\/ input[key.ydir] = currentSpinFrame\/spinFrames * fullSpin<\/li>
  1066. \/\/ if (!me.weapon.melee)<\/li>
  1067. \/\/ input[key.scope] = 1<\/li>
  1068. \/\/ }<\/li>
  1069. \/\/ }<\/li>
  1070. \/\/ } break<\/li>
  1071.  <\/li>
  1072. \/\/ aim assist, smooth on aim, smoother, easy aim assist<\/li>
  1073. case 4:<\/li>
  1074. case 7:<\/li>
  1075. case 8:<\/li>
  1076. case 11:<\/li>
  1077. if (input[key.scope] || this.settings.aimbot === 11) {<\/li>
  1078. this.controls.target = {<\/li>
  1079. xD: xDire \/ 1000,<\/li>
  1080. yD: yDire \/ 1000<\/li>
  1081. }<\/li>
  1082. this.controls.update(({<\/li>
  1083. 4: 400,<\/li>
  1084. 7: 110,<\/li>
  1085. 8: 70,<\/li>
  1086. 11: 400<\/li>
  1087. })[this.settings.aimbot])<\/li>
  1088. if ([4, 11].some(n => n == this.settings.aimbot)) {<\/li>
  1089. input[key.xdir] = xDire<\/li>
  1090. input[key.ydir] = yDire<\/li>
  1091. }<\/li>
  1092. if (this.me.didShoot) {<\/li>
  1093. input[key.shoot] = 0<\/li>
  1094. this.state.quickscopeCanShoot = false<\/li>
  1095. setTimeout(() => {<\/li>
  1096. this.state.quickscopeCanShoot = true<\/li>
  1097. }, this.me.weapon.rate * 0.85)<\/li>
  1098. } else if (this.state.quickscopeCanShoot) {<\/li>
  1099. input[this.me.weapon.melee ? key.shoot : key.scope] = 1<\/li>
  1100. }<\/li>
  1101. } else {<\/li>
  1102. this.controls.target = null<\/li>
  1103. }<\/li>
  1104. break<\/li>
  1105. \/\/ trigger bot<\/li>
  1106. case 12: {<\/li>
  1107. if (!this.three ||<\/li>
  1108. !this.renderer ||<\/li>
  1109. !this.renderer.camera ||<\/li>
  1110. !this.game ||<\/li>
  1111. !this.game.players ||<\/li>
  1112. !this.game.players.list.length ||<\/li>
  1113. !input[key.scope] ||<\/li>
  1114. this.me.aimVal) {<\/li>
  1115. break<\/li>
  1116. }<\/li>
  1117. \/\/ Only create these once for performance<\/li>
  1118. if (!this.state.raycaster) {<\/li>
  1119. this.state.raycaster = new this.three.Raycaster()<\/li>
  1120. this.state.mid = new this.three.Vector2(0, 0)<\/li>
  1121. }<\/li>
  1122. const playerMaps = []<\/li>
  1123. for (let i = 0; i < this.game.players.list.length; i++) {<\/li>
  1124. let p = this.game.players.list[i]<\/li>
  1125. if (!p || !p.objInstances || p.isYTMP || !(this.me.team === null || p.team !== this.me.team) || !p.inView) {<\/li>
  1126. continue<\/li>
  1127. }<\/li>
  1128. playerMaps.push(p.objInstances)<\/li>
  1129. }<\/li>
  1130. const raycaster = this.state.raycaster<\/li>
  1131. raycaster.setFromCamera(this.state.mid, this.renderer.camera)<\/li>
  1132. if (raycaster.intersectObjects(playerMaps, true).length) {<\/li>
  1133. input[key.shoot] = this.me.didShoot ? 0 : 1<\/li>
  1134. }<\/li>
  1135. }<\/li>
  1136. break<\/li>
  1137. }<\/li>
  1138. } else {<\/li>
  1139. if (this.settings.uwtv) {<\/li>
  1140. input[key.scope] = 0<\/li>
  1141. }<\/li>
  1142. this.state.spinFrame = 0<\/li>
  1143. }<\/li>
  1144. }<\/li>
  1145.  <\/li>
  1146. if (this.settings.alwaysAim) {<\/li>
  1147. input[key.scope] = 1<\/li>
  1148. }<\/li>
  1149. if (this.settings.preventMeleeThrowing && this.me.weapon.melee) {<\/li>
  1150. input[key.scope] = 0<\/li>
  1151. }<\/li>
  1152. }<\/li>
  1153. return input;<\/li>
  1154. }<\/li>
  1155.  <\/li>
  1156. render() {<\/li>
  1157.  <\/li>
  1158. var scale = this.scale || parseFloat(document.getElementById(“uiBase”).style.transform.match(\/\\((.+)\\)\/)[1]);<\/li>
  1159. let width = innerWidth \/ scale,<\/li>
  1160. height = innerHeight \/ scale<\/li>
  1161.  <\/li>
  1162. let world2Screen = (pos, yOffset = 0) => {<\/li>
  1163. pos.y += yOffset<\/li>
  1164. pos.project(this.renderer.camera)<\/li>
  1165. pos.x = (pos.x + 1) \/ 2<\/li>
  1166. pos.y = (-pos.y + 1) \/ 2<\/li>
  1167. pos.x *= width<\/li>
  1168. pos.y *= height<\/li>
  1169. return pos<\/li>
  1170. }<\/li>
  1171. let line = (x1, y1, x2, y2, lW, sS) => {<\/li>
  1172. this.ctx.save()<\/li>
  1173. this.ctx.lineWidth = lW + 2<\/li>
  1174. this.ctx.beginPath()<\/li>
  1175. this.ctx.moveTo(x1, y1)<\/li>
  1176. this.ctx.lineTo(x2, y2)<\/li>
  1177. this.ctx.strokeStyle = “rgba(0, 0, 0, 0.25)”<\/li>
  1178. this.ctx.stroke()<\/li>
  1179. this.ctx.lineWidth = lW<\/li>
  1180. this.ctx.strokeStyle = sS<\/li>
  1181. this.ctx.stroke()<\/li>
  1182. this.ctx.restore()<\/li>
  1183. }<\/li>
  1184. let rect = (x, y, ox, oy, w, h, color, fill) => {<\/li>
  1185. this.ctx.save()<\/li>
  1186. this.ctx.translate(~~x, ~~y)<\/li>
  1187. this.ctx.beginPath()<\/li>
  1188. fill ? this.ctx.fillStyle = color : this.ctx.strokeStyle = color<\/li>
  1189. this.ctx.rect(ox, oy, w, h)<\/li>
  1190. fill ? this.ctx.fill() : this.ctx.stroke()<\/li>
  1191. this.ctx.closePath()<\/li>
  1192. this.ctx.restore()<\/li>
  1193. }<\/li>
  1194. let getTextMeasurements = (arr) => {<\/li>
  1195. for (let i = 0; i < arr.length; i++) {<\/li>
  1196. arr[i] = ~~this.ctx.measureText(arr[i]).width<\/li>
  1197. }<\/li>
  1198. return arr<\/li>
  1199. }<\/li>
  1200. let gradient = (x, y, w, h, colors) => {<\/li>
  1201. const grad = this.ctx.createLinearGradient(x, y, w, h)<\/li>
  1202. for (let i = 0; i < colors.length; i++) {<\/li>
  1203. grad.addColorStop(i, colors[i])<\/li>
  1204. }<\/li>
  1205. return grad<\/li>
  1206. }<\/li>
  1207. let text = (txt, font, color, x, y) => {<\/li>
  1208. this.ctx.save()<\/li>
  1209. this.ctx.translate(~~x, ~~y)<\/li>
  1210. this.ctx.fillStyle = color<\/li>
  1211. this.ctx.strokeStyle = “rgba(0, 0, 0, 0.5)”<\/li>
  1212. this.ctx.font = font<\/li>
  1213. this.ctx.lineWidth = 1<\/li>
  1214. this.ctx.strokeText(txt, 0, 0)<\/li>
  1215. this.ctx.fillText(txt, 0, 0)<\/li>
  1216. this.ctx.restore()<\/li>
  1217. }<\/li>
  1218.  <\/li>
  1219. const padding = 2<\/li>
  1220.  <\/li>
  1221. for (const player of this.game.players.list.filter(v => (!v.isYTMP && v.active && (v.pos = {<\/li>
  1222. x: v.x,<\/li>
  1223. y: v.y,<\/li>
  1224. z: v.z<\/li>
  1225. })))) {<\/li>
  1226. const pos = new this.three.Vector3(player.pos.x, player.pos.y, player.pos.z)<\/li>
  1227. const screenR = world2Screen(pos.clone())<\/li>
  1228. const screenH = world2Screen(pos.clone(), player.height)<\/li>
  1229. const hDiff = ~~(screenR.y – screenH.y)<\/li>
  1230. const bWidth = ~~(hDiff * 0.6)<\/li>
  1231. const font = this.settings.espFontSize + “px GameFont”<\/li>
  1232. const enemy = this.me.team === null || player.team !== this.me.team;<\/li>
  1233.  <\/li>
  1234. if (!this.containsPoint(player.pos)) {<\/li>
  1235. continue<\/li>
  1236. }<\/li>
  1237.  <\/li>
  1238. if (this.settings.tracers) {<\/li>
  1239. line(width \/ 2, (dog.settings.tracers === 2 ? height \/ 2 : height – 1), screenR.x, screenR.y, 2, player.team === null ? “#FF4444” : player.team === this.me.team ? “#44AAFF” : “#FF4444”)<\/li>
  1240. }<\/li>
  1241.  <\/li>
  1242. \/\/ Chams<\/li>
  1243. const obj = player.objInstances;<\/li>
  1244. if (this.isDefined(obj)) {<\/li>
  1245. if (!obj.visible) {<\/li>
  1246. Object.defineProperty(player.objInstances, ‘visible’, {<\/li>
  1247. value: true,<\/li>
  1248. writable: false<\/li>
  1249. });<\/li>
  1250. } else {<\/li>
  1251. let chamsEnabled = this.settings.chams;<\/li>
  1252. if (dog.gaybow >= 360) dog.gaybow = 0; else dog.gaybow++;<\/li>
  1253. obj.traverse(child => {<\/li>
  1254. if (child && child.type == “Mesh” && this.isDefined(child.material)) {<\/li>
  1255. if (!child.hasOwnProperty(dogStr)) {<\/li>
  1256. child[dogStr] = child.material;<\/li>
  1257. } else if (child.hasOwnProperty(dogStr)) {<\/li>
  1258. Object.defineProperty(child, ‘material’, {<\/li>
  1259. get(){<\/li>
  1260. return !chamsEnabled||(!enemy && !dog.settings.teamChams) ? this[dogStr] : new dog.three.MeshBasicMaterial({<\/li>
  1261. color: new dog.three.Color(dog.settings.chamsCol == 12 ? `hsl(${dog.gaybow},100%, 50%)` : Object.values(dog.colors)[dog.settings.chamsCol]),<\/li>
  1262. depthTest: false,<\/li>
  1263. transparent: true,<\/li>
  1264. fog: false,<\/li>
  1265. wireframe: dog.settings.wireframe<\/li>
  1266. })<\/li>
  1267. }<\/li>
  1268. });<\/li>
  1269. }<\/li>
  1270. }<\/li>
  1271. })<\/li>
  1272. }<\/li>
  1273. }<\/li>
  1274.  <\/li>
  1275. if (this.settings.esp > 1) {<\/li>
  1276. if (player.isTarget) {<\/li>
  1277. this.ctx.save()<\/li>
  1278. const meas = getTextMeasurements([“TARGET”])<\/li>
  1279. text(“TARGET”, font, “#FFFFFF”, screenH.x – meas[0] \/ 2, screenH.y – this.settings.espFontSize * 1.5)<\/li>
  1280.  <\/li>
  1281. this.ctx.beginPath()<\/li>
  1282.  <\/li>
  1283. this.ctx.translate(screenH.x, screenH.y + Math.abs(hDiff \/ 2))<\/li>
  1284. this.ctx.arc(0, 0, Math.abs(hDiff \/ 2) + 10, 0, Math.PI * 2)<\/li>
  1285.  <\/li>
  1286. this.ctx.strokeStyle = “#FFFFFF”<\/li>
  1287. this.ctx.stroke()<\/li>
  1288. this.ctx.closePath()<\/li>
  1289. this.ctx.restore()<\/li>
  1290. }<\/li>
  1291.  <\/li>
  1292. if (this.settings.esp === 2) {<\/li>
  1293. this.ctx.save()<\/li>
  1294. this.ctx.strokeStyle = (this.me.team === null || player.team !== this.me.team) ? “#FF4444” : “#44AAFF”<\/li>
  1295. this.ctx.strokeRect(screenH.x – bWidth \/ 2, screenH.y, bWidth, hDiff)<\/li>
  1296. this.ctx.restore()<\/li>
  1297. continue<\/li>
  1298. }<\/li>
  1299.  <\/li>
  1300. rect((screenH.x – bWidth \/ 2) – 7, ~~screenH.y – 1, 0, 0, 4, hDiff + 2, “#000000”, false)<\/li>
  1301. rect((screenH.x – bWidth \/ 2) – 7, ~~screenH.y – 1, 0, 0, 4, hDiff + 2, “#44FF44”, true)<\/li>
  1302. rect((screenH.x – bWidth \/ 2) – 7, ~~screenH.y – 1, 0, 0, 4, ~~((player.maxHealth – player.health) \/ player.maxHealth * (hDiff + 2)), “#000000”, true)<\/li>
  1303. this.ctx.save()<\/li>
  1304. this.ctx.lineWidth = 4<\/li>
  1305. this.ctx.translate(~~(screenH.x – bWidth \/ 2), ~~screenH.y)<\/li>
  1306. this.ctx.beginPath()<\/li>
  1307. this.ctx.rect(0, 0, bWidth, hDiff)<\/li>
  1308. this.ctx.strokeStyle = “rgba(0, 0, 0, 0.25)”<\/li>
  1309. this.ctx.stroke()<\/li>
  1310. this.ctx.lineWidth = 2<\/li>
  1311. this.ctx.strokeStyle = player.team === null ? ‘#FF4444’ : this.me.team === player.team ? ‘#44AAFF’ : ‘#FF4444’<\/li>
  1312. this.ctx.stroke()<\/li>
  1313. this.ctx.closePath()<\/li>
  1314. this.ctx.restore()<\/li>
  1315.  <\/li>
  1316. const playerDist = ~~(this.getDistance3D(this.me.x, this.me.y, this.me.z, player.pos.x, player.pos.y, player.pos.z) \/ 10)<\/li>
  1317. this.ctx.save()<\/li>
  1318. this.ctx.font = font<\/li>
  1319. const meas = getTextMeasurements([“[“, playerDist, “m]”, player.level, “\u00a9”, player.name])<\/li>
  1320. this.ctx.restore()<\/li>
  1321. const grad2 = gradient(0, 0, meas[4] * 5, 0, [“rgba(0, 0, 0, 0.25)”, “rgba(0, 0, 0, 0)”])<\/li>
  1322. if (player.level) {<\/li>
  1323. const grad = gradient(0, 0, (meas[4] * 2) + meas[3] + (padding * 3), 0, [“rgba(0, 0, 0, 0)”, “rgba(0, 0, 0, 0.25)”])<\/li>
  1324. rect(~~(screenH.x – bWidth \/ 2) – 12 – (meas[4] * 2) – meas[3] – (padding * 3), ~~screenH.y – padding, 0, 0, (meas[4] * 2) + meas[3] + (padding * 3), meas[4] + (padding * 2), grad, true)<\/li>
  1325. text(“” + player.level, font, ‘#FFFFFF’, ~~(screenH.x – bWidth \/ 2) – 16 – meas[3], ~~screenH.y + meas[4] * 1)<\/li>
  1326. }<\/li>
  1327. rect(~~(screenH.x + bWidth \/ 2) + padding, ~~screenH.y – padding, 0, 0, (meas[4] * 5), (meas[4] * 4) + (padding * 2), grad2, true)<\/li>
  1328. text(player.name, font, player.team === null ? ‘#FFCDB4’ : this.me.team === player.team ? ‘#B4E6FF’ : ‘#FFCDB4’, (screenH.x + bWidth \/ 2) + 4, screenH.y + meas[4] * 1)<\/li>
  1329. if (player.clan) text(“[” + player.clan + “]”, font, “#AAAAAA”, (screenH.x + bWidth \/ 2) + 8 + meas[5], screenH.y + meas[4] * 1)<\/li>
  1330. text(player.health + ” HP”, font, “#33FF33”, (screenH.x + bWidth \/ 2) + 4, screenH.y + meas[4] * 2)<\/li>
  1331. text(player.weapon.name, font, “#DDDDDD”, (screenH.x + bWidth \/ 2) + 4, screenH.y + meas[4] * 3)<\/li>
  1332. text(“[“, font, “#AAAAAA”, (screenH.x + bWidth \/ 2) + 4, screenH.y + meas[4] * 4)<\/li>
  1333. text(“” + playerDist, font, “#DDDDDD”, (screenH.x + bWidth \/ 2) + 4 + meas[0], screenH.y + meas[4] * 4)<\/li>
  1334. text(“m]”, font, “#AAAAAA”, (screenH.x + bWidth \/ 2) + 4 + meas[0] + meas[1], screenH.y + meas[4] * 4)<\/li>
  1335. }<\/li>
  1336.  <\/li>
  1337. }<\/li>
  1338.  <\/li>
  1339. if (this.settings.fovbox && this.settings.drawFovbox) {<\/li>
  1340. let fovBox = [width \/ 3, height \/ 4, width * (1 \/ 3), height \/ 2]<\/li>
  1341. switch (this.settings.fovBoxSize) {<\/li>
  1342. \/\/ medium<\/li>
  1343. case 2:<\/li>
  1344. fovBox = [width * 0.4, height \/ 3, width * 0.2, height \/ 3]<\/li>
  1345. break<\/li>
  1346. \/\/ small<\/li>
  1347. case 3:<\/li>
  1348. fovBox = [width * 0.45, height * 0.4, width * 0.1, height * 0.2]<\/li>
  1349. break<\/li>
  1350. }<\/li>
  1351. this.ctx.save()<\/li>
  1352. this.ctx.strokeStyle = “red”<\/li>
  1353. this.ctx.strokeRect(…fovBox)<\/li>
  1354. this.ctx.restore()<\/li>
  1355. }<\/li>
  1356. }<\/li>
  1357.  <\/li>
  1358. cleanGUI() {<\/li>
  1359. let head = document.head || document.getElementsByTagName(‘head’)[0] || 0,<\/li>
  1360. css = this.createElement(“style”, “#aMerger, #endAMerger { display: none !important }”);<\/li>
  1361. head.appendChild(css);<\/li>
  1362. window[‘onetrust-consent-sdk’].style.display = “none”;<\/li>
  1363. window.streamContainer.style.display = “none”;<\/li>
  1364. window.merchHolder.style.display = “none”;<\/li>
  1365. window.newsHolder.style.display = “none”;<\/li>
  1366. }<\/li>
  1367.  <\/li>
  1368. customCSS() {<\/li>
  1369. if (!this.isDefined(this.CSSres) && this.settings.kpalCSS) {<\/li>
  1370. let head = document.head || document.getElementsByTagName(‘head’)[0] || 0<\/li>
  1371. this.CSSres = document.createElement(“link”);<\/li>
  1372. this.CSSres.rel = “stylesheet”;<\/li>
  1373. this.CSSres.href = “https:\/\/skidlamer.github.io\/css\/kpal.css”<\/li>
  1374. this.CSSres.disabled = false;<\/li>
  1375. head.appendChild(this.CSSres);<\/li>
  1376. }<\/li>
  1377. if (this.settings.customCSS.startsWith(“http”) && this.settings.customCSS.endsWith(“.css”)) {<\/li>
  1378. \/\/let head = document.head||document.getElementsByTagName(‘head’)[0]||0<\/li>
  1379. this.CSSres.href = this.settings.customCSS;<\/li>
  1380. \/\/head.appendChild(this.CSSres);<\/li>
  1381. } else this.CSSres = undefined;<\/li>
  1382. }<\/li>
  1383.  <\/li>
  1384. initGUI() {<\/li>
  1385. function createButton(name, iconURL, fn) {<\/li>
  1386. const menu = document.querySelector(“#menuItemContainer”),<\/li>
  1387. menuItem = document.createElement(“div”),<\/li>
  1388. menuItemIcon = document.createElement(“div”),<\/li>
  1389. menuItemTitle = document.createElement(“div”)<\/li>
  1390.  <\/li>
  1391. menuItem.className = “menuItem”<\/li>
  1392. menuItemIcon.className = “menuItemIcon”<\/li>
  1393. menuItemTitle.className = “menuItemTitle”<\/li>
  1394.  <\/li>
  1395. menuItemTitle.innerHTML = name<\/li>
  1396. menuItemIcon.style.backgroundImage = `url(“https:\/\/i.imgur.com\/jjkFpnV.gif”)`<\/li>
  1397.  <\/li>
  1398. menuItem.append(menuItemIcon, menuItemTitle)<\/li>
  1399. menu.append(menuItem)<\/li>
  1400.  <\/li>
  1401. menuItem.addEventListener(“click”, fn)<\/li>
  1402. }<\/li>
  1403.  <\/li>
  1404. dog.GUI.setSetting = function(setting, value) {<\/li>
  1405. switch (setting) {<\/li>
  1406. case “customCSS”:<\/li>
  1407. dog.settings.customCSS = value<\/li>
  1408. dog.customCSS();<\/li>
  1409. break<\/li>
  1410.  <\/li>
  1411. default:<\/li>
  1412. console.log(“SET “, setting, ” “, value);<\/li>
  1413. dog.settings[setting] = value<\/li>
  1414. }<\/li>
  1415. localStorage.kro_setngss_json = JSON.stringify(dog.settings);<\/li>
  1416. }<\/li>
  1417. dog.GUI.windowIndex = windows.length + 1<\/li>
  1418. dog.GUI.settings = {<\/li>
  1419. aimbot: {<\/li>
  1420. val: this.settings.aimbot<\/li>
  1421. }<\/li>
  1422. }<\/li>
  1423. dog.GUI.windowObj = {<\/li>
  1424. header: “CH33T”,<\/li>
  1425. html: “”,<\/li>
  1426. gen() {<\/li>
  1427. return dog.getGuiHtml()<\/li>
  1428. }<\/li>
  1429. }<\/li>
  1430. Object.defineProperty(window.windows, windows.length, {<\/li>
  1431. value: dog.GUI.windowObj<\/li>
  1432. })<\/li>
  1433.  <\/li>
  1434. if (this.settings.showGuiButton) {<\/li>
  1435. createButton(“CH33TS”, null, () => {<\/li>
  1436. window.showWindow(dog.GUI.windowIndex)<\/li>
  1437. })<\/li>
  1438. }<\/li>
  1439. }<\/li>
  1440.  <\/li>
  1441. showGUI() {<\/li>
  1442. if (document.pointerLockElement || document.mozPointerLockElement) {<\/li>
  1443. document.exitPointerLock()<\/li>
  1444. }<\/li>
  1445. window.showWindow(this.GUI.windowIndex)<\/li>
  1446. }<\/li>
  1447.  <\/li>
  1448. getGuiHtml() {<\/li>
  1449. const builder = {<\/li>
  1450. checkbox: (name, settingName, description = “”, needsRestart = false) => `<div class=”settName” title=”${description}”>${name} ${needsRestart ? “<span style=\\”color: #eb5656\\”>*<\/span>” : “”}<label class=”switch” style=”margin-left:10px”><input type=”checkbox” onclick=’${dogStr}.GUI.setSetting(“${settingName}”, this.checked)’ ${dog.settings[settingName]?”checked”:””}><span class=”slider”><\/span><\/label><\/div>`,<\/li>
  1451. client_setting: (name, settingName, description = “”, needsRestart = true) => `<div class=”settName” title=”${description}”>${name} ${needsRestart ? “<span style=\\”color: #eb5656\\”>*<\/span>” : “”}<label class=”switch” style=”margin-left:10px”><input type=”checkbox” onclick=’doge_setsetting(“${settingName}”, this.checked?”1″:”0″)’ ${dog.settings[settingName]?”checked”:””}><span class=”slider”><\/span><\/label><\/div>`,<\/li>
  1452. select: (name, settingName, options, description = “”, needsRestart = false) => {<\/li>
  1453. let built = `<div class=”settName” title=”${description}”>${name} ${needsRestart ? “<span style=\\”color: #eb5656\\”>*<\/span>” : “”}<select onchange=’${dogStr}.GUI.setSetting(“${settingName}”, parseInt(this.value))’ class=”inputGrey2″>`<\/li>
  1454. for (const option in options) {<\/li>
  1455. if (options.hasOwnProperty(option))<\/li>
  1456. built += `<option value=”${options[option]}” ${dog.settings[settingName] == options[option]?”selected”:””}>${option}<\/option>,`<\/li>
  1457. }<\/li>
  1458. return built + “<\/select><\/div>”<\/li>
  1459. },<\/li>
  1460. slider: (name, settingName, min, max, step, description = “”) => `<div class=”settName” title=”${description}”>${name} <input type=”number” class=”sliderVal” id=”slid_input_${settingName}” min=”${min}” max=”${max}” value=”${dog.settings[settingName]}” onkeypress=”${dogStr}.GUI.setSetting(‘${settingName}’, parseFloat(this.value.replace(‘,’, ‘.’)));document.querySelector(‘#slid_input_${settingName}’).value=this.value” style=”margin-right:0;border-width:0″><div class=”slidecontainer” style=””><input type=”range” id=”slid_${settingName}” min=”${min}” max=”${max}” step=”${step}” value=”${dog.settings[settingName]}” class=”sliderM” oninput=”${dogStr}.GUI.setSetting(‘${settingName}’, parseFloat(this.value));document.querySelector(‘#slid_input_${settingName}’).value=this.value”><\/div><\/div>`,<\/li>
  1461. input: (name, settingName, type, description, extra) => `<div class=”settName” title=”${description}”>${name} <input type=”${type}” name=”${type}” id=”slid_utilities_${settingName}”\\n${‘color’ == type ? ‘style=”float:right;margin-top:5px”‘ : `class=”inputGrey2″ placeholder=”${extra}”`}\\nvalue=”${dog.settings[settingName]}” oninput=”${dogStr}.GUI.setSetting(\\x27${settingName}\\x27, this.value)”\/><\/div>`,<\/li>
  1462. label: (name, description) => “<br><span style=’color: black; font-size: 20px; margin: 20px 0′>” + name + “<\/span> <span style=’color: dimgrey; font-size: 15px’>” + (description || “”) + “<\/span><br>”,<\/li>
  1463. nobrlabel: (name, description) => “<span style=’color: black; font-size: 20px; margin: 20px 0′>” + name + “<\/span> <span style=’color: dimgrey; font-size: 15px’>” + (description || “”) + “<\/span><br>”,<\/li>
  1464. br: () => “<br>”,<\/li>
  1465. style: content => `<style>${content}<\/style>`,<\/li>
  1466. };<\/li>
  1467. let built = `<div id=”settHolder”><\/li>
  1468. <img src=”https:\/\/i.imgur.com\/tE0QUPv.png” width=”90%”><\/li>
  1469. <div class=”imageButton discordSocial” onmouseenter=”playTick()” onclick=”openURL(‘https:\/\/skidlamer.github.io\/wp\/index.html’)”><span style=’display:inline’><\/span><\/div>`<\/li>
  1470.  <\/li>
  1471. \/\/ fix fugly looking ‘built +=’ before every builder call<\/li>
  1472. Object.keys(builder).forEach(name => {<\/li>
  1473. const o = builder[name]<\/li>
  1474. builder[name] = function() {<\/li>
  1475. return built += o.apply(this, arguments), “”<\/li>
  1476. }<\/li>
  1477. })<\/li>
  1478.  <\/li>
  1479. \/\/ Tabs stuff<\/li>
  1480. const tabNames = [“Weapon”, “Wallhack”, “Visual”, “Tweaks”, “Movement”, “Other”]<\/li>
  1481. if (dog.isClient) {<\/li>
  1482. tabNames.push(“Client”)<\/li>
  1483. }<\/li>
  1484. builder.style(`.cheatTabButton { color: black; background: #ddd; padding: 2px 7px; font-size: 15px; cursor: pointer; text-align: center; } .cheatTabActive { background: #bbb;}`)<\/li>
  1485. this.GUI.changeTab = function(tabbtn) {<\/li>
  1486. const tn = tabbtn.innerText<\/li>
  1487. document.getElementById(“cheat-tabbtn-” + tabNames[dog.state.activeTab]).classList.remove(“cheatTabActive”)<\/li>
  1488. document.getElementById(“cheat-tab-” + tabNames[dog.state.activeTab]).style.display = “none”<\/li>
  1489. tabbtn.classList.add(“cheatTabActive”)<\/li>
  1490. document.getElementById(“cheat-tab-” + tn).style.display = “block”<\/li>
  1491. dog.state.activeTab = tabNames.indexOf(tn)<\/li>
  1492. }<\/li>
  1493. built += `<table style=”width: 100%; margin-bottom: 30px”><tr>`<\/li>
  1494. for (let i = 0; i < tabNames.length; i++) {<\/li>
  1495. const tab = tabNames[i]<\/li>
  1496. built += `<td id=”cheat-tabbtn-${tab}” onclick=”${dogStr}.GUI.changeTab(this)” class=”cheatTabButton ${tabNames[dog.state.activeTab] === tab ? ‘cheatTabActive’ : ”}”>`<\/li>
  1497. built += tab<\/li>
  1498. built += `<\/td>`<\/li>
  1499. }<\/li>
  1500. built += `<\/table><\/tr>`<\/li>
  1501.  <\/li>
  1502. function tab(i, cb) {<\/li>
  1503. built += `<div style=”display: ${dog.state.activeTab === i ? ‘block’ : ‘none’}” class=”cheat-tab” id=”cheat-tab-${tabNames[i]}”>`<\/li>
  1504. cb()<\/li>
  1505. built += `<\/div>`<\/li>
  1506. }<\/li>
  1507.  <\/li>
  1508. \/\/ build gui<\/li>
  1509. tab(0, () => {<\/li>
  1510. builder.select(“Aimbot [Y]”, “aimbot”, {<\/li>
  1511. “None”: 0,<\/li>
  1512. “Quickscope \/ Auto pick”: 1,<\/li>
  1513. “Silent aimbot”: 2,<\/li>
  1514. \/\/”Spin aimbot”: 3,<\/li>
  1515. “Aim assist”: 4,<\/li>
  1516. “Easy aim assist”: 11,<\/li>
  1517. “SP Trigger bot”: 12,<\/li>
  1518. “Silent on aim”: 6,<\/li>
  1519. “Smooth”: 7,<\/li>
  1520. “Unsilent”: 10,<\/li>
  1521. “Unsilent on aim”: 5,<\/li>
  1522. “Aim correction”: 9,<\/li>
  1523. })<\/li>
  1524. builder.select(“Spin aimbot speed”, “spinAimFrames”, {<\/li>
  1525. “1”: 30,<\/li>
  1526. “2”: 20,<\/li>
  1527. “3”: 15,<\/li>
  1528. “4”: 10,<\/li>
  1529. “5”: 5,<\/li>
  1530. })<\/li>
  1531. builder.slider(“Aim range”, “aimbotRange”, 0, 1000, 10, “Set above 0 to make the aimbot pick enemies only at the selected range”)<\/li>
  1532. builder.slider(“Aim offset”, “aimOffset”, -4, 1, 0.1, “The lower it is, the lower the aimbot will shoot (0 – head, -4 – body)”)<\/li>
  1533. builder.slider(“Aim noise”, “aimNoise”, 0, 2, 0.005, “The higher it is, the lower is the aimbot accuracy”)<\/li>
  1534. builder.checkbox(“Supersilent aim”, “superSilent”, “Only works with quickscope and silent aim, makes it almost invisible that you’re looking at somebody when you’re shooting at him”)<\/li>
  1535. builder.checkbox(“Aim at AIs”, “AImbot”, “Makes the aimbot shoot at NPCs”)<\/li>
  1536. builder.checkbox(“FOV check”, “frustumCheck”, “Makes you only shoot at enemies that are in your field of view. Prevents 180 flicks”)<\/li>
  1537. builder.checkbox(“FOV box”, “fovbox”, “Creates a box in which enemies can be targetted, enable with FOV check”)<\/li>
  1538. builder.select(“FOV box size”, “fovBoxSize”, {<\/li>
  1539. “Big”: 1,<\/li>
  1540. “Medium”: 2,<\/li>
  1541. “Small”: 3,<\/li>
  1542. })<\/li>
  1543. builder.checkbox(“Wallbangs”, “wallbangs”, “Makes the aimbot shoot enemies behind walls”)<\/li>
  1544. builder.checkbox(“Aimbot range check”, “rangeCheck”, “Checks if the enemy is in range of your weapon before shooting it, disable for rocket launcher”)<\/li>
  1545. builder.checkbox(“Auto reload”, “autoReload”, “Automatically reloads your weapon when it’s out of ammo”)<\/li>
  1546. builder.checkbox(“Prevent melee throwing”, “preventMeleeThrowing”, “Prevents you from throwing your knife”)<\/li>
  1547. \/\/builder.checkbox(“Auto swap”, “autoSwap”, “Automatically swaps the weapon when you’re out of ammo”)<\/li>
  1548. })<\/li>
  1549.  <\/li>
  1550. tab(1, () => {<\/li>
  1551. builder.select(“ESP [H]”, “esp”, {<\/li>
  1552. “None”: 0,<\/li>
  1553. “Nametags”: 1,<\/li>
  1554. “Box ESP”: 2,<\/li>
  1555. “Full ESP”: 3,<\/li>
  1556. })<\/li>
  1557. builder.select(“ESP Font Size”, “espFontSize”, {<\/li>
  1558. “30px”: 30,<\/li>
  1559. “25px”: 25,<\/li>
  1560. “20px”: 20,<\/li>
  1561. “15px”: 15,<\/li>
  1562. “10px”: 10,<\/li>
  1563. “5px”: 5,<\/li>
  1564. })<\/li>
  1565. builder.select(“Tracers”, “tracers”, {<\/li>
  1566. “None”: 0,<\/li>
  1567. “Bottom”: 1,<\/li>
  1568. “Middle”: 2,<\/li>
  1569. }, “Draws lines to players”)<\/li>
  1570. builder.checkbox(“Mark aimbot target”, “markTarget”, “Shows who is the aimbot targetting at the time, useful for aim assist\/aim correction”)<\/li>
  1571. builder.checkbox(“Draw FOV box”, “drawFovbox”, “Draws the FOV box from aimbot settings”)<\/li>
  1572. builder.checkbox(“Chams”, “chams”)<\/li>
  1573. builder.select(“Chams colour”, “chamsCol”, {<\/li>
  1574. White: 0,<\/li>
  1575. Black: 1,<\/li>
  1576. Purple: 2,<\/li>
  1577. Pink: 3,<\/li>
  1578. Blue: 4,<\/li>
  1579. DarkBlue: 5,<\/li>
  1580. Aqua: 6,<\/li>
  1581. Green: 7,<\/li>
  1582. Lime: 8,<\/li>
  1583. Orange: 9,<\/li>
  1584. Yellow: 10,<\/li>
  1585. Red: 11,<\/li>
  1586. Gaybow: 12,<\/li>
  1587. })<\/li>
  1588. builder.checkbox(“Friendly chams”, “teamChams”, “Show Chams for friendly players”)<\/li>
  1589. builder.checkbox(“Wireframe”, “wireframe”)<\/li>
  1590. builder.slider(“RGB interval”, “chamsInterval”, 50, 1000, 50, “How fast will the RGB chams change colour”)<\/li>
  1591. })<\/li>
  1592.  <\/li>
  1593. tab(2, () => {<\/li>
  1594. builder.checkbox(“Third person mode”, “thirdPerson”)<\/li>
  1595. builder.checkbox(“Skin hack”, “skinHack”, “Makes you able to use any skin in game, only shows on your side”)<\/li>
  1596. builder.checkbox(“Billboard shaders”, “animatedBillboards”, “Disable if you get fps drops”)<\/li>
  1597. builder.checkbox(“Any weapon trail”, “alwaysTrail”)<\/li>
  1598. builder.slider(“Weapon Zoom”, “weaponZoom”, 0, 20, .1, “Weapon Zoom Multiplier Adjust”)<\/li>
  1599. })<\/li>
  1600.  <\/li>
  1601. tab(3, () => {<\/li>
  1602. builder.checkbox(“Always aim”, “alwaysAim”, “Makes you slower and jump lower, but the aimbot can start shooting at enemies faster. Only use if ur good at bhopping”)<\/li>
  1603. builder.checkbox(“Aim when target visible”, “awtv”)<\/li>
  1604. builder.checkbox(“Unaim when no target visible”, “uwtv”)<\/li>
  1605. builder.checkbox(“Force unsilent”, “forceUnsilent”)<\/li>
  1606. })<\/li>
  1607.  <\/li>
  1608. tab(4, () => {<\/li>
  1609. builder.select(“Auto bhop”, “bhop”, {<\/li>
  1610. “None”: 0,<\/li>
  1611. “Auto Jump”: 1,<\/li>
  1612. “Key Jump”: 2,<\/li>
  1613. “Auto Slide”: 3,<\/li>
  1614. “Key Slide”: 4,<\/li>
  1615. })<\/li>
  1616. builder.label(“Only use with silent aim”)<\/li>
  1617. builder.select(“Pitch hax”, “pitchHack”, {<\/li>
  1618. “Disabled”: 0,<\/li>
  1619. “Downward”: 1,<\/li>
  1620. “Upward”: 2,<\/li>
  1621. “sin(time)”: 3,<\/li>
  1622. “sin(time\/5)”: 4,<\/li>
  1623. “double”: 5,<\/li>
  1624. “random”: 6,<\/li>
  1625. }, “Only use with aimbot on”)<\/li>
  1626. builder.checkbox(“Spin bot”, “spinBot”)<\/li>
  1627. })<\/li>
  1628.  <\/li>
  1629. tab(5, () => {<\/li>
  1630. builder.checkbox(“Show GUI button”, “showGuiButton”, “Disable if you don’t want the dog under settings to be visible”)<\/li>
  1631. builder.checkbox(“GUI on middle mouse button”, “guiOnMMB”, “Makes it possible to open this menu by clicking the mouse wheel”)<\/li>
  1632. builder.checkbox(“Keybinds”, “keybinds”, “Turn keybinds on\/off, Aimbot – Y, ESP – H”)<\/li>
  1633. builder.checkbox(“No inactivity kick”, “antikick”, “Disables the ‘Kicked for inactivity’ message (client side, but works)”)<\/li>
  1634. builder.checkbox(“Auto nuke”, “autoNuke”, “Automatically nukes when you are able to”)<\/li>
  1635. builder.checkbox(“Force nametags on”, “fgno”, “Use in custom games with disabled nametags”)<\/li>
  1636. builder.checkbox(“Use Kpal CSS”, “kpalCSS”, “Use the kpal CSS when no custom CSS is Applied”)<\/li>
  1637. builder.input(“Custom CSS”, “customCSS”, “url”, “”, “URL to CSS file”)<\/li>
  1638. })<\/li>
  1639.  <\/li>
  1640. if (dog.isClient) {<\/li>
  1641. tab(6, () => {<\/li>
  1642. builder.nobrlabel(“Restart is required after changing any of these settings”)<\/li>
  1643. builder.br()<\/li>
  1644. builder.client_setting(“Uncap FPS”, “uncap_fps”, “Disables V-Sync”)<\/li>
  1645. builder.client_setting(“Adblock”, “adblock”, “Disables ads”)<\/li>
  1646. })<\/li>
  1647. }<\/li>
  1648.  <\/li>
  1649. built += “<\/div>”<\/li>
  1650.  <\/li>
  1651. return built;<\/li>
  1652. }<\/li>
  1653.  <\/li>
  1654. getDistance(x1, y1, x2, y2) {<\/li>
  1655. return Math.sqrt((x2 -= x1) * x2 + (y2 -= y1) * y2);<\/li>
  1656. }<\/li>
  1657.  <\/li>
  1658. getDistance3D(x1, y1, z1, x2, y2, z2) {<\/li>
  1659. let dx = x1 – x2;<\/li>
  1660. let dy = y1 – y2;<\/li>
  1661. let dz = z1 – z2;<\/li>
  1662. return Math.sqrt(dx * dx + dy * dy + dz * dz);<\/li>
  1663. }<\/li>
  1664.  <\/li>
  1665. getXDir(x1, y1, z1, x2, y2, z2) {<\/li>
  1666. let h = Math.abs(y1 – y2);<\/li>
  1667. let dst = this.getDistance3D(x1, y1, z1, x2, y2, z2);<\/li>
  1668. return (Math.asin(h \/ dst) * ((y1 > y2) ? -1 : 1));<\/li>
  1669. }<\/li>
  1670.  <\/li>
  1671. getDir(x1, y1, x2, y2) {<\/li>
  1672. return Math.atan2(y1 – y2, x1 – x2);<\/li>
  1673. }<\/li>
  1674.  <\/li>
  1675. getAngleDist(a, b) {<\/li>
  1676. return Math.atan2(Math.sin(b – a), Math.cos(a – b));<\/li>
  1677. }<\/li>
  1678.  <\/li>
  1679. containsPoint(point) {<\/li>
  1680. let planes = this.renderer.frustum.planes;<\/li>
  1681. for (let i = 0; i < 6; i++) {<\/li>
  1682. if (planes[i].distanceToPoint(point) < 0) {<\/li>
  1683. return false;<\/li>
  1684. }<\/li>
  1685. }<\/li>
  1686. return true;<\/li>
  1687. }<\/li>
  1688.  <\/li>
  1689. world2Screen(pos, width, height, yOffset = 0) {<\/li>
  1690. pos.y += yOffset<\/li>
  1691. pos.project(this.renderer.camera)<\/li>
  1692. pos.x = (pos.x + 1) \/ 2<\/li>
  1693. pos.y = (-pos.y + 1) \/ 2<\/li>
  1694. pos.x *= width<\/li>
  1695. pos.y *= height<\/li>
  1696. return pos<\/li>
  1697. }<\/li>
  1698. };<\/li>
  1699.  <\/li>
  1700. window[dogStr] = new Dogeware();<\/li>
  1701.  <\/li>
  1702. })([…Array(8)].map(_ => ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’ [~~(Math.random() * 52)]).join(”));<\/li><\/ol>\n","protected":false},"excerpt":{"rendered":"

    \/\/ ==UserScript==\/\/ @name Krunker Dogeware – by The Gaming Gurus\/\/ @description The most advanced krunker cheat\/\/ @version 3.9.8\/\/ @author \u00a92021 Skid Lamer – The Gaming Gurus\u2122\/\/ @supportURL https:\/\/skidlamer.github.io\/wp\/\/ @homepage https:\/\/skidlamer.github.io\/\/\/ @icon https:\/\/i.imgur.com\/jjkFpnV.gif\/\/ @namespace https:\/\/greasyfork.org\/users\/704479\/\/ @include \/^https?\\:\\\/\\\/krunker\\..*\\\/.*$\/\/\/ @include \/^https?\\:\\\/\\\/.*.browserfps\\..*\\\/.*$\/\/\/ @exclude *:\/\/krunker.io\/editor*\/\/ @exclude *:\/\/krunker.io\/social*\/\/ @run-at document-start\/\/ @grant none\/\/ @noframes\/\/ ==\/UserScript== \/* eslint-env es6 *\/\/* eslint-disable curly, no-undef, no-loop-func, …<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8],"tags":[],"yoast_head":"\nKrunker Dogeware Source Code - Krunker Game Info<\/title>\n<meta name=\"description\" content=\"The most advanced krunker cheat - by The Gaming Gurus\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Krunker Dogeware Source Code - Krunker Game Info\" \/>\n<meta property=\"og:description\" content=\"The most advanced krunker cheat - by The Gaming Gurus\" \/>\n<meta property=\"og:url\" content=\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\" \/>\n<meta property=\"og:site_name\" content=\"Krunker Game Info\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-21T02:50:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-21T02:58:37+00:00\" \/>\n<meta name=\"author\" content=\"reconstdom\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"reconstdom\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"26 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\"},\"author\":{\"name\":\"reconstdom\",\"@id\":\"https:\/\/krunker.com\/#\/schema\/person\/8f55522c3e62a8cd98e264f473b42dcb\"},\"headline\":\"Krunker Dogeware Source Code\",\"datePublished\":\"2021-10-21T02:50:54+00:00\",\"dateModified\":\"2021-10-21T02:58:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\"},\"wordCount\":6858,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/krunker.com\/#organization\"},\"articleSection\":[\"krunker tips\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/krunker.com\/krunker-dogeware-source-code\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\",\"url\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\",\"name\":\"Krunker Dogeware Source Code - Krunker Game Info\",\"isPartOf\":{\"@id\":\"https:\/\/krunker.com\/#website\"},\"datePublished\":\"2021-10-21T02:50:54+00:00\",\"dateModified\":\"2021-10-21T02:58:37+00:00\",\"description\":\"The most advanced krunker cheat - by The Gaming Gurus\",\"breadcrumb\":{\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/krunker.com\/krunker-dogeware-source-code\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/krunker.com\/krunker-dogeware-source-code\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/krunker.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Krunker Dogeware Source Code\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/krunker.com\/#website\",\"url\":\"https:\/\/krunker.com\/\",\"name\":\"Krunker Game Info\",\"description\":\"games,bestgames,mobilegames,videogames\",\"publisher\":{\"@id\":\"https:\/\/krunker.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/krunker.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/krunker.com\/#organization\",\"name\":\"Krunker Game Info\",\"url\":\"https:\/\/krunker.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/krunker.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/krunker.com\/wp-content\/uploads\/2021\/10\/cooltext395207284743723.png?fit=317%2C73&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/krunker.com\/wp-content\/uploads\/2021\/10\/cooltext395207284743723.png?fit=317%2C73&ssl=1\",\"width\":317,\"height\":73,\"caption\":\"Krunker Game Info\"},\"image\":{\"@id\":\"https:\/\/krunker.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/krunker.com\/#\/schema\/person\/8f55522c3e62a8cd98e264f473b42dcb\",\"name\":\"reconstdom\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/krunker.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/77fe5a02d9055a430740c22ca3ae85a7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/77fe5a02d9055a430740c22ca3ae85a7?s=96&d=mm&r=g\",\"caption\":\"reconstdom\"},\"url\":\"https:\/\/krunker.com\/author\/reconstdom\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Krunker Dogeware Source Code - Krunker Game Info","description":"The most advanced krunker cheat - by The Gaming Gurus","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/krunker.com\/krunker-dogeware-source-code\/","og_locale":"en_US","og_type":"article","og_title":"Krunker Dogeware Source Code - Krunker Game Info","og_description":"The most advanced krunker cheat - by The Gaming Gurus","og_url":"https:\/\/krunker.com\/krunker-dogeware-source-code\/","og_site_name":"Krunker Game Info","article_published_time":"2021-10-21T02:50:54+00:00","article_modified_time":"2021-10-21T02:58:37+00:00","author":"reconstdom","twitter_card":"summary_large_image","twitter_misc":{"Written by":"reconstdom","Est. reading time":"26 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/#article","isPartOf":{"@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/"},"author":{"name":"reconstdom","@id":"https:\/\/krunker.com\/#\/schema\/person\/8f55522c3e62a8cd98e264f473b42dcb"},"headline":"Krunker Dogeware Source Code","datePublished":"2021-10-21T02:50:54+00:00","dateModified":"2021-10-21T02:58:37+00:00","mainEntityOfPage":{"@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/"},"wordCount":6858,"commentCount":0,"publisher":{"@id":"https:\/\/krunker.com\/#organization"},"articleSection":["krunker tips"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/krunker.com\/krunker-dogeware-source-code\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/","url":"https:\/\/krunker.com\/krunker-dogeware-source-code\/","name":"Krunker Dogeware Source Code - Krunker Game Info","isPartOf":{"@id":"https:\/\/krunker.com\/#website"},"datePublished":"2021-10-21T02:50:54+00:00","dateModified":"2021-10-21T02:58:37+00:00","description":"The most advanced krunker cheat - by The Gaming Gurus","breadcrumb":{"@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/krunker.com\/krunker-dogeware-source-code\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/krunker.com\/krunker-dogeware-source-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/krunker.com\/"},{"@type":"ListItem","position":2,"name":"Krunker Dogeware Source Code"}]},{"@type":"WebSite","@id":"https:\/\/krunker.com\/#website","url":"https:\/\/krunker.com\/","name":"Krunker Game Info","description":"games,bestgames,mobilegames,videogames","publisher":{"@id":"https:\/\/krunker.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/krunker.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/krunker.com\/#organization","name":"Krunker Game Info","url":"https:\/\/krunker.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/krunker.com\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/krunker.com\/wp-content\/uploads\/2021\/10\/cooltext395207284743723.png?fit=317%2C73&ssl=1","contentUrl":"https:\/\/i0.wp.com\/krunker.com\/wp-content\/uploads\/2021\/10\/cooltext395207284743723.png?fit=317%2C73&ssl=1","width":317,"height":73,"caption":"Krunker Game Info"},"image":{"@id":"https:\/\/krunker.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/krunker.com\/#\/schema\/person\/8f55522c3e62a8cd98e264f473b42dcb","name":"reconstdom","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/krunker.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/77fe5a02d9055a430740c22ca3ae85a7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/77fe5a02d9055a430740c22ca3ae85a7?s=96&d=mm&r=g","caption":"reconstdom"},"url":"https:\/\/krunker.com\/author\/reconstdom\/"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/posts\/144"}],"collection":[{"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/comments?post=144"}],"version-history":[{"count":1,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/posts\/144\/revisions"}],"predecessor-version":[{"id":145,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/posts\/144\/revisions\/145"}],"wp:attachment":[{"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/media?parent=144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/categories?post=144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/krunker.com\/wp-json\/wp\/v2\/tags?post=144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}