Advertisement
NetcoreGaming

Diep.io hack 2020

Sep 25th, 2020
7,177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 54.42 KB | None | 0 0
  1. // ==UserScript==
  2. // @name Diep Mod 2020
  3. // @namespace None
  4. // @version 1.25
  5. // @description [Auto Class Builder / Achievement Changer / Server Selector / Bullet Stacker / Hp values / ViewRange / Aim Assist / Theme Changer]
  6. // @author Ponyo , BJR, SBB, SpadeSquad, Gokky
  7. // @include *://diep.io/*
  8. // @connect diep.io
  9. // @grant GM_addStyle
  10. // @grant GM_getResourceText
  11. // @grant GM_setClipboard
  12. // @grant GM_notification
  13. // @grant unsafeWindow
  14. // @require http://code.jquery.com/jquery-3.2.1.slim.min.js
  15. // @require http://code.jquery.com/jquery-latest.js
  16. // @resource diepCSS https://belowjobsrock.github.io/DiepMod2020/
  17. // ==/UserScript==
  18. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  19.  
  20. //https://belowjobsrock.github.io/DiepMod2020/
  21.  
  22. /* eslint-disable */
  23. let diepCSS = GM_getResourceText("diepCSS");
  24. GM_addStyle(diepCSS);
  25. /* eslint-enable */
  26.  
  27. (function () {
  28. "use strict";
  29.  
  30. let defaultConfig = {
  31. "hotkey": {
  32. "connectUI": "\t" // TAB
  33. },
  34. "gameModeName": {
  35. "ffa": "FFA",
  36. "survival": "Survival",
  37. "teams": "2TDM",
  38. "4teams": "4TDM",
  39. "dom": "Domination",
  40. "maze": "Maze",
  41. "tag": "Tag",
  42. "sandbox": "Sandbox"
  43. },
  44. "team": {
  45. "blue": [[0, 178, 225, 255], [76, 201, 234, 255]],
  46. "red": [[241, 78, 84, 255], [245, 131, 135, 255]],
  47. "green": [[0, 225, 110, 255], [76, 234, 153, 255]],
  48. "purple": [[191, 127, 245, 255], [210, 165, 248, 255]]
  49. },
  50. "settings": {
  51. "firstRunDisable": false
  52. },
  53. "script": {
  54. "currentServer": {},
  55. "debugging": false
  56. }
  57. };
  58.  
  59. const isObject = (obj) => {
  60. return obj instanceof Object && obj.constructor === Object;
  61. };
  62.  
  63. const dataStorage = {
  64. set (key, value) {
  65. localStorage.setItem(key, JSON.stringify(value));
  66. },
  67. get (key) {
  68. const value = localStorage.getItem(key);
  69. return value && JSON.parse(value);
  70. }
  71. };
  72.  
  73. (function () {
  74. let privateConfig;
  75. unsafeWindow.Config = {};
  76. const proxify = (obj) => {
  77. for (const subkey in obj) {
  78. if (Object.prototype.hasOwnProperty.call(obj, subkey)) {
  79. unsafeWindow.Config[subkey] = new Proxy(obj[subkey], {
  80. get (target, propKey, receiver) {
  81. if (propKey in target) {
  82. return Reflect.get(target, propKey, receiver);
  83. }
  84. throw new ReferenceError("Unknown property: " + propKey);
  85. },
  86. set (target, propKey, value, receiver) {
  87. target[propKey] = value;
  88. dataStorage.set("spadepublic", obj);
  89. return Reflect.set(target, propKey, value, receiver);
  90. }
  91. });
  92. }
  93. }
  94. };
  95.  
  96. if (dataStorage.get("spadepublic")) {
  97. privateConfig = dataStorage.get("spadepublic");
  98. } else {
  99. dataStorage.set("spadepublic", defaultConfig);
  100. privateConfig = defaultConfig;
  101. }
  102.  
  103. proxify(privateConfig);
  104.  
  105. unsafeWindow.resetConfig = () => {
  106. dataStorage.set("spadepublic", defaultConfig);
  107. unsafeWindow.Config = {};
  108. privateConfig = defaultConfig;
  109. proxify(privateConfig);
  110. };
  111. })();
  112.  
  113. let playing = () => {
  114. return false;
  115. };
  116.  
  117. $(window).on("load", () => {
  118. (function setBack () {
  119. try {
  120. if (unsafeWindow.input.should_prevent_unload) {
  121. playing = () => {
  122. return !!unsafeWindow.input.should_prevent_unload();
  123. };
  124. }
  125. } catch (error) {
  126. setTimeout(() => {
  127. setBack();
  128. }, 100);
  129. }
  130. })();
  131. });
  132.  
  133. let canvas, ctx;
  134. $(() => {
  135. canvas = $("#canvas").get(0);
  136. ctx = canvas.getContext("2d");
  137. });
  138.  
  139. HTMLElement.prototype.focus = () => {};
  140. HTMLElement.prototype.blur = () => {};
  141.  
  142. const capitalizeFirstLetter = (string) => {
  143. return string && string[0].toUpperCase() + string.slice(1);
  144. };
  145.  
  146. const createEl = (elObj, parent) => {
  147. let element;
  148. if (typeof elObj === "string") {
  149. element = $(document.createTextNode(elObj));
  150. } else {
  151. element = $(`<${elObj.node}>`);
  152. if (elObj.att) {
  153. let attributes = elObj.att;
  154. for (let key in attributes) {
  155. if (attributes.hasOwnProperty(key)) {
  156. if (key.charAt(0) === "@") {
  157. element.attr(key.substring(1), attributes[key]);
  158. } else {
  159. element.text(attributes[key]);
  160. }
  161. }
  162. }
  163. }
  164. if (elObj.evl) {
  165. element.on(elObj.evl.type, elObj.evl.f);
  166. }
  167. if (elObj.child) {
  168. elObj.child.forEach((node) => {
  169. createEl(node, element.get(0));
  170. });
  171. }
  172. }
  173. if (parent) {
  174. parent.append(element.get(0));
  175. }
  176. return element;
  177. };
  178.  
  179. const scriptBody = $("<body>").get(0);
  180. createEl({
  181. node: "div", att: {"@id": "main", "@class": "base"},
  182. child: [ {
  183. node: "div", att: {"@class": "top"},
  184. child: [ {
  185. node: "h2", att: {"@class": "title"},
  186. child: [ {
  187. node: "span", att: {"@class": "symbol", textContent: ""}
  188. }, " DiepMod Server Selector ", {
  189. node: "span", att: {"@class": "symbol", textContent: ""}
  190. }, {
  191. } ]
  192. }, {
  193. node: "span", att: {"@class": "menu"},
  194. child: [ {
  195. node: "a", att: {"@class": "menuButton close", textContent: "X"},
  196. evl: {
  197. type: "click",
  198. f: () => {
  199. $(".appear").removeClass("appear");
  200. }}
  201. } ]
  202. }]
  203. }, {
  204. node: "lable", att: {textContent: "Gamemode"},
  205. child: [ {
  206. node: "select", att: {"@id": "gamemode"}
  207. } ]
  208. }, {
  209. node: "lable", att: {textContent: "Server"},
  210. child: [ {
  211. node: "select", att: {"@id": "server"}
  212. } ]
  213. }, {
  214. node: "span", att: {"@id": "more", textContent: ""}
  215. }, {
  216. node: "div",
  217. child: [ {
  218. node: "button", att: {"@type": "button", "@id": "connect", "@class": "commandButton", textContent: "Connect"},
  219. evl: {
  220. type: "click",
  221. f: () => {
  222. connectServer();
  223. setTimeout(() => {
  224. $(".appear").removeClass( "appear" );
  225. }, 800);
  226. }}
  227. }, {
  228. node: "button", att: {"@type": "button", "@id": "disconnect", "@class": "commandButton", textContent: "Disconnect"},
  229. evl: {
  230. type: "click",
  231. f: () => {
  232. unsafeWindow.m28nOverride = false;
  233. unsafeWindow.input.execute("lb_reconnect");
  234. }}
  235. } ]
  236. }, {
  237. node: "p", att: {"@class": "ctag", textContent: ""},
  238. child: [ {
  239. } ]
  240. } ]
  241. }, scriptBody);
  242.  
  243. $(() => {});
  244.  
  245. $("body").after(scriptBody);
  246.  
  247. /* jshint ignore:start */
  248. const fetchServer = async (mode, times, ids = []) => {
  249. const url = "https://api.n.m28.io";
  250. const $serverSelect = $("#server");
  251. const $moreButton = $("#more");
  252. $moreButton.addClass("spin");
  253.  
  254. for (let i = 0; i < times; i++) {
  255. try {
  256. const response = await fetch(`${url}/endpoint/diepio-${mode}/findEach/`);
  257. const body = await response.json();
  258. if (body.hasOwnProperty("servers")) {
  259. Object.entries(body.servers).forEach(([key, val]) => {
  260. if (!ids.some((id) => {
  261. return id === val.id;
  262. })) {
  263. ids.push(val.id);
  264. const txt = key.replace(/(linode-|vultr-)/, "") + ` - ${val.id.toUpperCase()}`;
  265. $serverSelect.append($("<option>", {
  266. "value": JSON.stringify(val),
  267. "text": capitalizeFirstLetter(txt)
  268. }));
  269. }
  270. });
  271. }
  272. } catch (err) {
  273. console.error(err);
  274. }
  275. }
  276. $("#server option").detach().sort((a, b) => {
  277. a = $(a);
  278. b = $(b);
  279. return ((a.text() > b.text()) ?
  280. 1 :
  281. (a.text() < b.text()) ?
  282. -1 :
  283. 0);
  284. }).appendTo($serverSelect).filter(":first").attr("selected", true);
  285. $moreButton.on("click", () => {
  286. fetchServer(mode, 4, ids);
  287. }).removeClass("spin");
  288. };
  289. /* jshint ignore:end */
  290.  
  291. $(() => {
  292. const $gamemode = $("#gamemode");
  293. Object.entries(unsafeWindow.Config.gameModeName).forEach(([key, val]) => {
  294. $gamemode.append($("<option>", {
  295. "value": key,
  296. "text": val
  297. }));
  298. });
  299. $gamemode.change((event) => {
  300. $("#server").empty();
  301. fetchServer($(event.currentTarget).val(), 8, []);
  302. }).trigger("change");
  303. });
  304.  
  305. $(() => {
  306. unsafeWindow.m28n.findServerPreference = (endpoint, options, cb) => {
  307. if (unsafeWindow.m28nOverride)
  308. options(null, [JSON.parse($( "#server option:selected" ).val())]);
  309. if (typeof options == "function") {
  310. cb = options;
  311. options = {};
  312. }
  313. unsafeWindow.m28n.findServers(endpoint, (err, r) => {
  314. if (err)
  315. return cb(err);
  316. var availableRegions = [];
  317. for (var region in r.servers) {
  318. availableRegions.push(region);
  319. }
  320. if (availableRegions.length === 0) {
  321. cb("Couldn't find any servers in any region");
  322. return;
  323. }
  324. if (availableRegions.length === 1) {
  325. for (var region in r.servers) {
  326. cb(null, [r.servers[region]]);
  327. return;
  328. }
  329. }
  330. unsafeWindow.m28n.findRegionPreference(availableRegions, options, (err, regionList) => {
  331. if (err)
  332. return cb(err);
  333. var serverList = regionList.map((region) => {
  334. return r.servers[region];
  335. });
  336. cb(null, serverList);
  337. });
  338. });
  339. };
  340. });
  341.  
  342. const connectServer = () => {
  343. if ($("#server option:selected").length === 1) {
  344. const $autojoin = $("#autojoin");
  345. const $connect = $("#connect");
  346.  
  347. let Observer = new MutationObserver(mutation => {
  348. mutation.forEach(mutation => {
  349. if (mutation.target.style.display === "block") {
  350. if ($autojoin.prop("checked")) {
  351. const sequence = ["keydown", "keyup"];
  352. sequence.forEach(event => {
  353. $(canvas).trigger($.Event(event, {
  354. "keyCode": "\r".charCodeAt(0)
  355. }));
  356. });
  357. $(".appear").removeClass("appear");
  358. }
  359. $connect.removeClass("connecting");
  360. } else if (mutation.target.style.display === "none") {
  361. if (playing()) {
  362. Observer.disconnect();
  363. }
  364. unsafeWindow.m28nOverride = false;
  365. }
  366. });
  367. });
  368. $connect.addClass("connecting");
  369. unsafeWindow.m28nOverride = true;
  370. unsafeWindow.input.execute("lb_reconnect");
  371. Observer.observe($("#textInputContainer").get(0), {
  372. "attributes": true,
  373. "attributeFilter": ["style"]
  374. });
  375. }
  376. };
  377.  
  378. const WebSocketProxy = new Proxy(unsafeWindow.WebSocket, {
  379. construct (Target, args) {
  380. const instance = new Target(...args);
  381.  
  382. const messageHandler = (event) => {
  383. const buffer = new DataView(event.data);
  384. const opcode = buffer.getUint8(0);
  385. switch (opcode) {
  386. case 4:
  387. if (typeof unsafeWindow.Config.script.currentServer === "object") {
  388. const decoded = new TextDecoder("utf-8").decode(event.data);
  389. unsafeWindow.Config.script.currentServer = (/\W*(\w+).?((linode|)-(\w+))/).exec(decoded);
  390. unsafeWindow.Config.script.currentServer[4] = capitalizeFirstLetter(unsafeWindow.Config.script.currentServer[4]);
  391. }
  392. break;
  393. default:
  394. break;
  395. }
  396. };
  397.  
  398. instance.addEventListener("message", messageHandler);
  399. return instance;
  400. }
  401. });
  402.  
  403. unsafeWindow.WebSocket = WebSocketProxy;
  404.  
  405. const drawServer = () => {
  406. const x = window.innerWidth * window.devicePixelRatio / 2;
  407. const y = window.innerHeight * window.devicePixelRatio * 0.575;
  408. if (unsafeWindow.Config.script.currentServer.length === 5) {
  409. ctx.textAlign = "center";
  410. ctx.font = "25px Ubuntu";
  411. ctx.lineWidth = 5;
  412. ctx.strokeStyle = "rgba(0, 0, 0, 1)";
  413. ctx.strokeText("Server:", x, y);
  414. ctx.fillStyle = "rgba(255, 255, 255, 1)";
  415. ctx.fillText("Server:", x, y);
  416.  
  417. ctx.font = "35px Ubuntu";
  418. ctx.lineWidth = 5;
  419. ctx.strokeStyle = "rgba(0, 0, 0, 1)";
  420. ctx.strokeText(unsafeWindow.Config.script.currentServer[2], x, y + 45);
  421. ctx.fillStyle = "rgba(255, 255, 255, 1)";
  422. ctx.fillText(unsafeWindow.Config.script.currentServer[2], x, y + 45);
  423. }
  424. };
  425.  
  426. unsafeWindow.requestAnimFrame = (function () {
  427. return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame ||
  428. window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) {
  429. window.setTimeout(callback, 1000 / 60);
  430. };
  431. })();
  432.  
  433. $(window).on("load", function animate () {
  434. if ($("#textInputContainer").css("display") === "block" && !playing()) {
  435. drawServer();
  436. }
  437. unsafeWindow.requestAnimFrame(animate);
  438. });
  439.  
  440. const handleKeypress = (event) => {
  441. const key = String.fromCharCode(event.keyCode);
  442. switch (key) {
  443. case unsafeWindow.Config.hotkey.connectUI:
  444. event.preventDefault();
  445. event.stopPropagation();
  446. $("#main").toggleClass("appear");
  447. break;
  448. }
  449. };
  450.  
  451. $(document).keydown((event) => {
  452. handleKeypress(event);
  453. });
  454.  
  455. })();
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  463. (function(){//info
  464. if(window.updateInfo) return;
  465.  
  466.  
  467. var info = {};
  468. var info_container = document.createElement("div");
  469. info_container.style.position = "fixed";
  470. info_container.style.color = "white";
  471. info_container.style["pointer-events"] = "none";
  472. document.body.appendChild(info_container);
  473.  
  474. function toggle_info_container(e){
  475. if(e.key == "i"){
  476. info_container.style.display = info_container.style.display=="block" ? "none" : "block";
  477. }
  478. }
  479. window.addEventListener("keyup", toggle_info_container);
  480.  
  481. window.updateInfo = function(key, value){
  482. if(!value) delete info[key];
  483. else info[key] = value;
  484. var s = "";
  485. for(var _key in info){
  486. s += info[_key] + "\n";
  487. }
  488. info_container.innerText = s;
  489. };
  490. })();
  491.  
  492.  
  493. (function(){
  494. var cycleRate = 0.003125; // ms^-1
  495. var maxAngle = Math.PI * 45 / 180;
  496. var NCANNON = 3;
  497. var angleUnit = maxAngle / (NCANNON - 1);
  498.  
  499. var tankData = [
  500. {name: "Tri-angle", cycleRate: 0.003095, maxAngle: Math.PI * 135 / 180, NCANNON: 2},
  501. {name: "Penta", cycleRate: 0.003095, maxAngle: Math.PI * 45 / 180, NCANNON: 3},
  502. {name: "SpreadShot", cycleRate: 0.001515, maxAngle: Math.PI * 75 / 180, NCANNON: 6},
  503. {name: "Octo", cycleRate: 0.003095, maxAngle: Math.PI * 45 / 180, NCANNON: 2},
  504. {name: "GunnerTrapper",cycleRate: 0.015, maxAngle: Math.PI, NCANNON: 2},
  505. {name: "TripleTwin", cycleRate: 0.003125, maxAngle: Math.PI * 180 / 180, NCANNON: 2},
  506. {name: "Streamliner", cycleRate: 0.0625, maxAngle: Math.PI * 15 / 180, NCANNON: 3},
  507. ];
  508. var tankIndex = 0;
  509.  
  510. var measuring = false;
  511.  
  512. var effective = false;
  513. var frameRequest;
  514.  
  515. var canvas = window.document.getElementById("canvas");
  516.  
  517. var mouseX;
  518. var mouseY;
  519. var a = 0;
  520. var startA = 0;
  521. var artificialMouseMove = false;
  522.  
  523. var disabled = false;
  524.  
  525. function onMouseDown(e){
  526. if(e.button == 2){
  527. if(!effective){
  528. startA = a - 50;
  529. mouseX = e.clientX;
  530. mouseY = e.clientY;
  531. canvas.dispatchEvent(new MouseEvent("mousedown", {clientX: mouseX, clientY: mouseY}));
  532. }
  533. effective = true;
  534. }
  535. }
  536.  
  537. function onMouseUp(e){
  538. if(e.button == 2){
  539. if(effective){
  540. canvas.dispatchEvent(new MouseEvent("mouseup", {clientX: mouseX, clientY: mouseY}));
  541. }
  542. effective = false;
  543. }
  544. }
  545.  
  546. function onMouseMove(e){
  547. if(effective){
  548. if(!artificialMouseMove){
  549. e.stopPropagation();
  550. mouseX = e.clientX;
  551. mouseY = e.clientY;
  552. }
  553. }else{
  554. mouseX = e.clientX;
  555. mouseY = e.clientY;
  556. }
  557. }
  558.  
  559. function update(_a){
  560. frameRequest = window.requestAnimationFrame(update);
  561. a = _a;
  562.  
  563. if(effective){
  564. var da = a - startA;
  565. var state = Math.floor(cycleRate * da * NCANNON) % (NCANNON * 2);
  566. var state1 = state % NCANNON;
  567. var state2 = Math.floor(state / NCANNON);
  568. var angle = angleUnit * state1 * (state1 % 2 == state2 ? 1 : -1);
  569.  
  570. var cx = window.innerWidth / 2;
  571. var cy = window.innerHeight / 2;
  572. var sin = Math.sin(angle);
  573. var cos = Math.cos(angle);
  574.  
  575. var x = mouseX - cx;
  576. var y = mouseY - cy;
  577. var _x = cos * x - sin * y;
  578. var _y = sin * x + cos * y;
  579. x = _x + cx;
  580. y = _y + cy;
  581.  
  582. artificialMouseMove = true;
  583. canvas.dispatchEvent(new MouseEvent("mousemove", {clientX: x, clientY: y}));
  584. artificialMouseMove = false;
  585. }
  586. }
  587.  
  588. function onKeyUp(e){
  589. if(e.key == "Q"){
  590. disabled = !disabled;
  591. if(disabled){
  592. if(measuring){
  593. cycleRate = 1 / measuring.terminate();
  594. measuring = false;
  595. } else stop();
  596. }else start();
  597. window.updateInfo && window.updateInfo("off", disabled ? "Disabled." : null);
  598. return;
  599. }
  600.  
  601. if(disabled) return;
  602.  
  603. if(e.key == "R"){
  604. nextTank();
  605. }
  606. }
  607. function nextTank(){
  608. changeTank((tankIndex + 1) % tankData.length);
  609. }
  610. function changeTank(index){
  611. var data = tankData[index];
  612. tankIndex = index;
  613.  
  614. cycleRate = data.cycleRate; // ms^-1
  615. maxAngle = data.maxAngle;
  616. NCANNON = data.NCANNON;
  617. angleUnit = maxAngle / (NCANNON - 1);
  618. window.updateInfo && window.updateInfo("changeTank", "Tank: " + data.name);
  619. }
  620.  
  621. function init(){
  622. window.addEventListener("keyup", onKeyUp);
  623. start();
  624. changeTank(0);
  625. }
  626.  
  627. function start(){
  628. canvas.addEventListener("mousedown", onMouseDown);
  629. canvas.addEventListener("mouseup", onMouseUp);
  630. window.addEventListener("mousemove", onMouseMove, true);
  631. frameRequest = window.requestAnimationFrame(update);
  632. }
  633.  
  634. function stop(){
  635. canvas.removeEventListener("mousedown", onMouseDown);
  636. canvas.removeEventListener("mouseup", onMouseUp);
  637. window.removeEventListener("mousemove", onMouseMove, true);
  638. window.cancelAnimationFrame(frameRequest);
  639. effective = false;
  640. }
  641.  
  642.  
  643. init();
  644.  
  645. })();
  646.  
  647.  
  648. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  649. //asdasd add line here
  650.  
  651. var disabled = false;
  652. var aimLine = document.createElement("div");
  653. var centerX;
  654. var centerY;
  655. var lineTog = 0;
  656. var mouseX;
  657. var mouseY;
  658. var winX = document.documentElement.clientWidth;
  659. var winY = document.documentElement.clientHeight;
  660. var wDown = 0;
  661. aimLine.setAttribute("id", "divLine");
  662. document.body.appendChild(createLine( 0, 0, 0, 0));
  663. aimLine = 0;
  664.  
  665. function onKeyUp(e){
  666.  
  667. if(e.key == "J"){
  668. // Line on
  669. winX = document.documentElement.clientWidth;
  670. winY = document.documentElement.clientHeight;
  671.  
  672. aimLine = document.getElementById("divLine");
  673.  
  674. centerX = winX / 2;
  675. centerY = winY / 2;
  676. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  677. }
  678. if(e.key == "j"){
  679. // Line off
  680.  
  681. document.body.appendChild(createLine( 0, 0, 0, 0));
  682. aimLine = 0;
  683. }
  684. if(e.key == "w"){
  685.  
  686. centerY = winY / 2;
  687. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  688.  
  689. }
  690. if(e.key == "a"){
  691.  
  692. centerX = winX / 2;
  693. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  694.  
  695. }
  696. if(e.key == "s"){
  697.  
  698. centerY = winY / 2;
  699. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  700.  
  701.  
  702. }
  703. if(e.key == "d"){
  704.  
  705. centerX = winX / 2;
  706. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  707.  
  708. }
  709.  
  710. }
  711.  
  712. function onKeyDown(e){
  713. if(e.key == "w"){
  714. centerY = ((winY / 2) - (winY / 20));
  715.  
  716. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  717.  
  718. }
  719.  
  720. if(e.key == "a"){
  721. centerX = ((winX / 2) - (winX / 40));
  722.  
  723. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  724.  
  725.  
  726.  
  727. }
  728. if(e.key == "s"){
  729.  
  730.  
  731. centerY = ((winY / 2) + (winY / 20));
  732.  
  733. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  734.  
  735.  
  736.  
  737. }
  738. if(e.key == "d"){
  739. centerX = ((winX / 2) + (winX / 40));
  740.  
  741. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  742.  
  743.  
  744.  
  745. }
  746.  
  747.  
  748. }
  749.  
  750.  
  751.  
  752.  
  753. function createLineElement(x, y, length, angle) {
  754.  
  755. var styles = 'border: 1px dashed #eb8f34; '
  756. + 'width: ' + length + 'px; '
  757. + 'height: 0px; '
  758. + '-moz-transform: rotate(' + angle + 'rad); '
  759. + '-webkit-transform: rotate(' + angle + 'rad); '
  760. + '-o-transform: rotate(' + angle + 'rad); '
  761. + '-ms-transform: rotate(' + angle + 'rad); '
  762. + 'position: absolute; '
  763. + 'top: ' + y + 'px; '
  764. + 'left: ' + x + 'px; ';
  765. aimLine.setAttribute('style', styles);
  766. return aimLine;
  767. }
  768.  
  769.  
  770. function createLine(x1, y1, x2, y2) {
  771. var a = x1 - x2,
  772. b = y1 - y2,
  773. c = Math.sqrt(a * a + b * b);
  774.  
  775. var sx = (x1 + x2) / 2,
  776. sy = (y1 + y2) / 2;
  777.  
  778. var x = sx - c / 2,
  779. y = sy;
  780.  
  781. var alpha = Math.PI - Math.atan2(-b, a);
  782. return createLineElement(x, y, c, alpha);
  783.  
  784. }
  785.  
  786.  
  787.  
  788. document.onmousemove = handleMouseMove;
  789. function handleMouseMove(event) {
  790.  
  791. if (lineTog = true){
  792. var eventDoc, doc, body;
  793.  
  794. event = event || window.event; // IE-ism
  795.  
  796. // If pageX/Y aren't available and clientX/Y are,
  797. // calculate pageX/Y - logic taken from jQuery.
  798. // (This is to support old IE)
  799. if (event.pageX == null && event.clientX != null) {
  800. eventDoc = (event.target && event.target.ownerDocument) || document;
  801. doc = eventDoc.documentElement;
  802. body = eventDoc.body;
  803.  
  804. event.pageX = event.clientX +
  805. (doc && doc.scrollLeft || body && body.scrollLeft || 0) -
  806. (doc && doc.clientLeft || body && body.clientLeft || 0);
  807. event.pageY = event.clientY +
  808. (doc && doc.scrollTop || body && body.scrollTop || 0) -
  809. (doc && doc.clientTop || body && body.clientTop || 0 );
  810. }
  811. // // Use event.pageX / event.pageY here
  812.  
  813. mouseX = event.pageX;
  814. mouseY = event.pageY;
  815. document.body.appendChild(createLine(centerX, centerY, mouseX-5, mouseY+5));
  816.  
  817.  
  818. }
  819. }
  820.  
  821.  
  822. window.addEventListener("keyup", onKeyUp);
  823. window.addEventListener("keydown", onKeyDown);
  824.  
  825. //asdasd
  826. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  827.  
  828. // *** 変数宣言 *** //
  829.  
  830. var canvas = document.getElementById('canvas');
  831. var ctx = canvas.getContext("2d");
  832. var diepModMenu = document.createElement('div');
  833. var diepModConsole = "";
  834. var diepModCommandError = true;
  835. var lineGen = document.createElement('div');
  836.  
  837. // *** 初期化 *** //
  838. document.title = ( 'DiepMod' );
  839. styleInit();
  840. jsInit();
  841. bodyInit();
  842.  
  843. // *** CSSの初期化 *** //
  844. function styleInit() {
  845. addGlobalStyle(`div::-webkit-scrollbar{width: 8px;} div::-webkit-scrollbar-track{background: #FFFFFFEE; border: none; border-radius: 10px; box-shadow: inset 0 0 2px #ffc87a55;}div::-webkit-scrollbar-thumb{background: #ffc87a; border-radius: 10px; box-shadow: none;}`);
  846. addGlobalStyle(`.diepMod-menu{position:absolute; top:55px; left:-770px; padding: 0.5em 1em; margin: 2em 0; width: 400px; background: #FFFFFFEE; border: solid 0px #0082A155; border-radius: 0px;
  847. margin: 10px; padding: 10px; line-height: 1.3; overflow: auto; text-align: left; width: 750px; height: 300px;
  848. transition-duration: 0.1s;} .diepMod-menu:hover{position:absolute; left:-20px;}`);
  849. addGlobalStyle(`.diepMod-pretitle{font-size: 34px;}`);
  850. addGlobalStyle(`.diepMod-subtitle{font-size: 19px;}`);
  851. addGlobalStyle(`.diepMod-description{font-size: 16px;}`);
  852. addGlobalStyle(`.diepMod-warning{font-size: 16px; color:#ff9999}`);
  853. addGlobalStyle(`a {text-decoration: none;} a.diepMod-url:link{color:#FFFFFF} a.diepMod-url:visited{color:#FFFFFF;} a.diepMod-url:hover{color:#ffc87a;text-decoration: underline;} a.diepMod-url:active{color:#FFE66C;}`);
  854. addGlobalStyle(`.diepHack-hr{position: relative; height: 1px; border-width: 0; background-image: -webkit-linear-gradient(left, transparent 0%,#00B2E1 50%,transparent 100%); background-image: linear-gradient(90deg, transparent 0%,#00B2E1 50%,transparent 100%);}`);
  855. addGlobalStyle(`.diepMod-Regen{font-size: 16px; color:#EFB28D}`);
  856. addGlobalStyle(`.diepMod-Health{font-size: 16px; color:#EC66EB}`);
  857. addGlobalStyle(`.diepMod-Bump{font-size: 16px; color:#9A66EB}`);
  858. addGlobalStyle(`.diepMod-Speed{font-size: 16px; color:#6D92ED}`);
  859. addGlobalStyle(`.diepMod-Pen{font-size: 16px; color:#F0D367}`);
  860. addGlobalStyle(`.diepMod-Damage{font-size: 16px; color:#F16869}`);
  861. addGlobalStyle(`.diepMod-Reload{font-size: 16px; color:#99EC69}`);
  862. addGlobalStyle(`.diepMod-Move{font-size: 16px; color:#6DECE9}`);
  863. addGlobalStyle(`.diepMod-Tanktype{font-size: 22px; color:#fc7f2b}`);
  864. addGlobalStyle(`.diepMod-Stack{font-size: 18px; color:#eb8f34}`);
  865. addGlobalStyle(`.diepMod-bigtitle{font-size: 22px;}`);
  866. addGlobalStyle(`.diepMod-tabInfo{font-size: 18px; color:#99ffcc}`);
  867.  
  868.  
  869.  
  870. addGlobalStyle(`
  871. a.diepMod-button {
  872. display: inline-block;
  873. margin: 15px 15px 0;
  874. padding: .6em 1.1em;
  875. font-size: 14px;
  876. font-weight: bold;
  877. text-decoration: none;
  878. outline: none;
  879. color: #FFFFFF;
  880. text-align center;
  881. background-color: #ffc87a;
  882. border-radius: 32px;
  883. -webkit-background-clip: padding-box;
  884. background-clip: padding-box;
  885. -webkit-box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #ffc87a;
  886. box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #ffc87a;
  887. border: none;
  888. -webkit-transition: -webkit-box-shadow .3s;
  889. transition: box-shadow .3s;
  890. cursor: pointer
  891. }
  892. a.diepMod-button:hover, a.diepMod-button:focus {
  893. -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #ffc87a;
  894. box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #ffc87a;
  895. -webkit-transition-timing-function: cubic-bezier(0.6, 4, 0.3, 0.8);
  896. transition-timing-function: cubic-bezier(0.6, 4, 0.3, 0.8);
  897. -webkit-animation: gelatine 0.5s 1;
  898. animation: gelatine 0.5s 1;
  899. }
  900. a.diepMod-button-secondary {
  901. background: #FFFFFF;
  902. -webkit-box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #FFFFFF;
  903. box-shadow: 0 0 0 -2px #FFFFFF, 0 0 0 -1px #FFFFFF;
  904. }
  905. a.diepMod-button-secondary:hover {
  906. -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
  907. box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
  908. }
  909. a.diepMod-button:active, a.diepMod-button-secondary:active {
  910. background: #FFFFFF;
  911. -webkit-transition-duration: 0;
  912. transition-duration: 0;
  913. -webkit-box-shadow: 0 0 0 2px #FFFFFF, 0 0 0 4px #FFFFFF;
  914. box-shadow: 0 0 0 2px #ffc87a, 0 0 0 4px #FFFFFF;
  915. color: #ffc87a;
  916. }
  917. @keyframes gelatine {
  918. from, to {
  919. -webkit-transform: scale(1, 1);
  920. transform: scale(1, 1);
  921. }
  922. 25% {
  923. -webkit-transform: scale(0.9, 1.1);
  924. transform: scale(0.9, 1.1);
  925. }
  926. 50% {
  927. -webkit-transform: scale(1.1, 0.9);
  928. transform: scale(1.1, 0.9);
  929. }
  930. 75% {
  931. -webkit-transform: scale(0.95, 1.05);
  932. transform: scale(0.95, 1.05);
  933. }
  934. from, to {
  935. -webkit-transform: scale(1, 1);
  936. transform: scale(1, 1);
  937. }
  938. 25% {
  939. -webkit-transform: scale(0.9, 1.1);
  940. transform: scale(0.9, 1.1);
  941. }
  942. 50% {
  943. -webkit-transform: scale(1.1, 0.9);
  944. transform: scale(1.1, 0.9);
  945. }
  946. 75% {
  947. -webkit-transform: scale(0.95, 1.05);
  948. transform: scale(0.95, 1.05);
  949. }
  950. }
  951. @-webkit-keyframes gelatine {
  952. from, to {
  953. -webkit-transform: scale(1, 1);
  954. transform: scale(1, 1);
  955. }
  956. 25% {
  957. -webkit-transform: scale(0.9, 1.1);
  958. transform: scale(0.9, 1.1);
  959. }
  960. 50% {
  961. -webkit-transform: scale(1.1, 0.9);
  962. transform: scale(1.1, 0.9);
  963. }
  964. 75% {
  965. -webkit-transform: scale(0.95, 1.05);
  966. transform: scale(0.95, 1.05);
  967. }
  968. from, to {
  969. -webkit-transform: scale(1, 1);
  970. transform: scale(1, 1);
  971. }
  972. 25% {
  973. -webkit-transform: scale(0.9, 1.1);
  974. transform: scale(0.9, 1.1);
  975. }
  976. 50% {
  977. -webkit-transform: scale(1.1, 0.9);
  978. transform: scale(1.1, 0.9);
  979. }
  980. 75% {
  981. -webkit-transform: scale(0.95, 1.05);
  982. transform: scale(0.95, 1.05);
  983. }
  984. }
  985. `);
  986. function addGlobalStyle(css) {
  987. var head, style;
  988. head = document.getElementsByTagName('head')[0];
  989. if (!head) {
  990. return;
  991. }
  992. style = document.createElement('style');
  993. style.type = 'text/css';
  994. style.innerHTML = css;
  995. head.appendChild(style);
  996. }
  997. }
  998.  
  999. // *** JSの初期化 *** //
  1000. function jsInit() {
  1001. addGlobalJavaScript(`
  1002. function achievementFlag(aflag){
  1003. var achievementCode = JSON.parse('{"A::1ba4250a398116e7_1":"' + String(aflag) + '","A::1c00693fbf538316_1":"' + String(aflag) + '","A::22d84fdc78b1f1ae_1":"' + String(aflag) + '","A::22fd2ee6d05881d6_1":"' + String(aflag) + '","A::256245339c3742d2_1":"10000","A::2780b5743fe93789_1":"' + String(aflag) + '","A::300ddd6f1fb3d69d_1":"500","A::33e4cb47afd5602f_1":"10","A::3fd17b5d35c36670_1":"' + String(aflag) + '","A::4d545ac615beec40_1":"' + String(aflag) + '","A::4eebb78f4ee19cba_1":"' + String(aflag) + '","A::54084a4936c7e37_1":"' + String(aflag) + '","A::5613de303c7e06f0_1":"' + String(aflag) + '","A::5892e09831854ad2_1":"' + String(aflag) + '","A::5dbb422e510cec75_1":"' + String(aflag) + '","A::6502bcb56dfbc0e3_1":"' + String(aflag) + '","A::6520a970c68efb85_1":"' + String(aflag) + '","A::6d07f075d9877ab_1":"' + String(aflag) + '","A::6d671cfa6dceb09_1":"500","A::71c663fb258f5243_1":"' + String(aflag) + '","A::723c26b6a37fccbb_1":"100","A::76646f423e5d6bc4_1":"' + String(aflag) + '","A::8221180ec6d53232_1":"10000","A::87e48332e9161b3d_1":"' + String(aflag) + '","A::8abd923027114f9e_1":"1000","A::8b83f81f510fd136_1":"10","A::8b8fe153a4965c63_1":"' + String(aflag) + '","A::8eeec8c270ef92be_1":"' + String(aflag) + '","A::9898db9ff6d3c1b3_1":"' + String(aflag) + '","A::9953423e884422b6_1":"100","A::9f0edada2bd7cd6_1":"' + String(aflag) + '","A::a402fdb3f5cebf99_1":"' + String(aflag) + '","A::a81a738312c7705d_1":"' + String(aflag) + '","A::b8b3e7fd58ff6706_1":"' + String(aflag) + '","A::b95a9621ccccad3c_1":"' + String(aflag) + '","A::bb9188cddc9d5b1f_1":"100","A::bdf3e0a1c4ebcaee_1":"' + String(aflag) + '","A::cdf66074bb5ce7fa_1":"' + String(aflag) + '","A::d3e4829583362b48_1":"3000","A::d583013681f15fcc_1":"' + String(aflag) + '","A::d932ec7312510a14_1":"10","A::e1f4f3e6a5c9bacb_1":"' + String(aflag) + '","A::e6111736c85494e9_1":"' + String(aflag) + '","A::eb9792219de8f755_1":"' + String(aflag) + '","A::ecea90c4be06d999_1":"' + String(aflag) + '","A::eef89695be793c7f_1":"100","A::f3618c60205d7ded_1":"' + String(aflag) + '","A::f73016825baab042_1":"100","A::fc3b3faf73bae216_1":"' + String(aflag) + '","A::bae942e2191270e_1":"' + String(aflag) + '"}');
  1004. Object.keys(achievementCode).forEach((k) => {localStorage.setItem(k, achievementCode[k])});
  1005. location.reload(true);
  1006. };
  1007. `);
  1008. function addGlobalJavaScript(js) {
  1009. var head, script;
  1010. head = document.getElementsByTagName('head')[0];
  1011. if (!head) {
  1012. return;
  1013. }
  1014. script = document.createElement('script');
  1015. script.type = 'text/javascript';
  1016. script.innerHTML = js;
  1017. head.appendChild(script);
  1018. }
  1019. }
  1020.  
  1021. // *** HTMLの初期化 ***//
  1022. function bodyInit() {
  1023.  
  1024.  
  1025. document.getElementsByTagName('body')[0].appendChild(diepModMenu);
  1026. diepModMenu.style = "position:absolute; top:55px; left:0px; font-family: Ubuntu; color: #FFFFFF; font-style: normal; font-variant: normal; text-shadow: black 2px 0px, black -2px 0px, black 0px -2px, black 0px 2px, black 2px 2px, black -2px 2px, black 2px -2px, black -2px -2px, black 1px 2px, black -1px 2px, black 1px -2px, black -1px -2px, black 2px 1px, black -2px 1px, black 2px -1px, black -2px -1px;";
  1027. diepModMenu.innerHTML = `
  1028. <div class="diepMod-menu" oncopy="return false;" onselectstart="return false;" oncontextmenu="return false;">
  1029. <td><a class="diepMod-Stack">&nbsp;&nbsp;Press Tab to open server selector.&nbsp;&nbsp;&nbsp;</a></td>
  1030. <td><a href="https://spade-squad.com/" class="diepMod-Speed">Spade Squad Discord</a></td>
  1031. <hr class="diepMod-hr" />
  1032. <div class="diepMod-subtitle">&nbsp;&nbsp;Themes
  1033. <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x555555');input.execute('net_replace_color 1 0x999999');input.execute('net_replace_color 2 0x00B1DE');input.execute('net_replace_color 3 0x00B1DE');input.execute('net_replace_color 4 0xF14E54');input.execute('net_replace_color 5 0xBE7FF5');input.execute('net_replace_color 6 0x00F46C');input.execute('net_replace_color 7 0x89FF69');input.execute('net_replace_color 8 0xFFE869');input.execute('net_replace_color 9 0xFC7677');input.execute('net_replace_color 10 0x768DFC');input.execute('net_replace_color 11 0xFF77DC');input.execute('net_replace_color 12 0xFFE869');input.execute('net_replace_color 13 0x44FFA0');input.execute('net_replace_color 14 0xBBBBBB');input.execute('net_replace_color 15 0xFF0000');input.execute('net_replace_color 16 0xFF0000');input.execute('net_replace_color 17 0xC0C0C0');input.execute('ren_background_color 0xCDCDCD');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 0x000000');return false;">Default</a></td>
  1034. <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x000000');input.execute('net_replace_color 1 0x000000');input.execute('net_replace_color 2 0x99FF99');input.execute('net_replace_color 3 0x0000FF');input.execute('net_replace_color 4 0xFF0000');input.execute('net_replace_color 5 0x990099');input.execute('net_replace_color 6 0x00FF00');input.execute('net_replace_color 7 0xFFFFFF');input.execute('net_replace_color 8 0xFFFFFF');input.execute('net_replace_color 9 0xFFBBBB');input.execute('net_replace_color 10 0xCCCCFF');input.execute('net_replace_color 11 0xFF69B4');input.execute('net_replace_color 12 0xFFFF00');input.execute('net_replace_color 13 0xFFFF00');input.execute('net_replace_color 14 0x888888');input.execute('net_replace_color 15 0x0000FF');input.execute('net_replace_color 16 0xBBBB00');input.execute('net_replace_color 17 0x777777');input.execute('ren_background_color 0xCDCDCD');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 0x000000');return false;">Dark</a></td>
  1035. <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 4737096');input.execute('net_replace_color 1 10987439');input.execute('net_replace_color 2 10987439');input.execute('net_replace_color 3 10987439');input.execute('net_replace_color 4 13461149');input.execute('net_replace_color 5 13461149');input.execute('net_replace_color 6 13461149');input.execute('net_replace_color 7 0x89FF69');input.execute('net_replace_color 8 15714123');input.execute('net_replace_color 9 15714123');input.execute('net_replace_color 10 15714123');input.execute('net_replace_color 11 15714123');input.execute('net_replace_color 12 0xFFE869');input.execute('net_replace_color 13 9092159');input.execute('net_replace_color 14 9092159');input.execute('net_replace_color 15 9092159');input.execute('net_replace_color 16 0xFF0000');input.execute('net_replace_color 17 0xC0C0C0');input.execute('ren_background_color 14408667');input.execute('ren_border_color 0x666666');input.execute('ren_minimap_background_color 12499903');input.execute('ren_minimap_border_color 4737096');input.execute('ren_health_background_color 4737096');input.execute('ren_xp_bar_fill_color 15714123');input.execute('ren_score_bar_fill_color 9092159');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_grid_color 10987439');input.execute('ui_replace_colors 3974347 12183678 14696001 16642944');return false;">Arras</a></td>
  1036. <td><a class="diepMod-button" onclick="input.execute('net_replace_color 0 0x555555');input.execute('net_replace_color 1 0x999999');input.execute('net_replace_color 2 0x00e1ff');input.execute('net_replace_color 3 0x00e1ff');input.execute('net_replace_color 4 0xff0c00');input.execute('net_replace_color 5 0x7200ff');input.execute('net_replace_color 6 0x04ff00');input.execute('net_replace_color 7 0x04ff00');input.execute('net_replace_color 8 0xeeff00');input.execute('net_replace_color 9 0xFC7677');input.execute('net_replace_color 10 0x0000ff');input.execute('net_replace_color 11 0xf600ff');input.execute('net_replace_color 12 0xeeff00');input.execute('net_replace_color 13 0x00ff00');input.execute('net_replace_color 14 0xa3a3a3');input.execute('net_replace_color 15 0xff0c00');input.execute('net_replace_color 16 0xeeff00');input.execute('net_replace_color 17 0xa3a3a3');input.execute('net_replace_color 18 0xa3a3a3');input.execute('ren_background_color 0xd9d9d9');input.execute('net_replace_color 18 0xa3a3a3');input.execute('ren_minimap_background_color 0xCDCDCD');input.execute('ren_minimap_border_color 0x555555');input.execute('ren_health_background_color 0x555555');input.execute('ren_xp_bar_fill_color 0xF0D96C');input.execute('ren_score_bar_fill_color 0x6CEFA2');input.execute('ren_stroke_solid_color 0x555555');input.execute('ren_stroke_soft_color_intensity 1');return false;">Simple</a></td>
  1037.  
  1038. <hr class="diepMod-hr" />
  1039.  
  1040. <div class="diepMod-subtitle">&nbsp;&nbsp;Health Values
  1041. <td><a class="diepMod-button" onclick="input.execute('ren_raw_health_values = true');input.execute('ren_health_background_color 0x000000');return false;">Show</a></td>
  1042. <td><a class="diepMod-subtitle">Client FPS</td>
  1043. <td><a class="diepMod-button" onclick="input.execute('ren_fps = true');return false;">Show</a></td>
  1044. <td><a class="diepMod-subtitle">Map ViewRange</td>
  1045. <td><a class="diepMod-button" onclick="input.execute('ren_minimap_viewport = true');return false;">Show</a></td>
  1046. <br>
  1047. <hr class="diepMod-hr" />
  1048.  
  1049.  
  1050.  
  1051. <td><a class="diepMod-Stack">&nbsp;&nbsp;Use Right click to stack bullets, make sure auto fire and rotate are off.</td><br />
  1052.  
  1053.  
  1054. <td><a class="diepMod-subtitle"> &nbsp;&nbsp;Toggle Stack Shoot: &nbsp;&nbsp; </td>
  1055. <td><a class="diepMod-Tanktype"> Shift + Q &nbsp;&nbsp;&nbsp;&nbsp;</td>
  1056. <td><a class="diepMod-subtitle"> Change Stack Type: &nbsp;&nbsp; </td>
  1057. <td><a class="diepMod-Tanktype"> Shift + R &nbsp;&nbsp</td> <br>
  1058. <hr class="diepMod-hr" />
  1059. <td><a class="diepMod-subtitle"> &nbsp;&nbsp;&nbsp;Enable Bullet Line: &nbsp;&nbsp; </td>
  1060. <td><a class="diepMod-Tanktype"> &nbsp;Shift + J &nbsp;&nbsp;&nbsp;&nbsp;</td>
  1061.  
  1062. <td><a class="diepMod-subtitle"> &nbsp;&nbsp;&nbsp;Disable Bullet Line: &nbsp;&nbsp; </td>
  1063. <td><a class="diepMod-Tanktype"> &nbsp;&nbsp;&nbsp;J &nbsp;&nbsp;&nbsp;&nbsp;</td>
  1064.  
  1065.  
  1066. <hr class="diepMod-hr" />
  1067. <td><a class="diepMod-bigtitle">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Auto Builds</a></td>
  1068. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 999999999999999999999999999999999');return false;">Reset</a></td>
  1069.  
  1070. <table>
  1071. <tr>
  1072. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 1111111');return false;"><span class="diepMod-Regen">Health Regen</span></a></td>
  1073. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 2222222');return false;"><span class="diepMod-Health">Max Health</span></a></td>
  1074. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 3333333');return false;"><span class="diepMod-Bump">Body Dmg</span></a></td>
  1075. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 4444444');return false;"><span class="diepMod-Speed">Bullet Speed</span></a></td>
  1076. </tr>
  1077. <tr>
  1078. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 5555555');return false;"><span class="diepMod-Pen">Bullet Pen</span></a></td>
  1079. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 6666666');return false;"><span class="diepMod-Damage">Bullet Dmg</span></a></td>
  1080. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 7777777');return false;"><span class="diepMod-Reload">Reload</span></a></td>
  1081. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 8888888');return false;"><span class="diepMod-Move">Move Speed</span></a></td>
  1082. </tr>
  1083. </table>
  1084. </div>
  1085.  
  1086.  
  1087. <table>
  1088.  
  1089. <tr>
  1090. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456784567845678456745674567456788');return false;">Attacker</a></td>
  1091. <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">0</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">5</span></span></td>
  1092.  
  1093. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456456845684563458642586485638328');return false;">Drone</a></td>
  1094. <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">2</span> / <span class="diepMod-Bump">3</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>
  1095.  
  1096.  
  1097. </tr>
  1098. <tr>
  1099. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 332231332323121228881888187777777');return false;">Booster</a></td>
  1100. <td><span class="diepMod-description"><span class="diepMod-Regen">5</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">7</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">0</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>
  1101.  
  1102. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 458845457784785576546768678456768');return false;">Fighter</a></td>
  1103. <td><span class="diepMod-description"><span class="diepMod-Regen">0</span> / <span class="diepMod-Health">0</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">6</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">6</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">7</span></span></td>
  1104.  
  1105. </tr>
  1106. <tr>
  1107. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 567567567567567567567222222288113');return false;">Mineer</a></td>
  1108. <td><span class="diepMod-description"><span class="diepMod-Regen">2</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">1</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">2</span></span></td>
  1109.  
  1110. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 123232323232321818838888238238238');return false;">Smasher</a></td>
  1111. <td><span class="diepMod-description"><span class="diepMod-Regen">3</span> / <span class="diepMod-Health">10</span> / <span class="diepMod-Bump">10</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">0</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">10</span></span></td>
  1112.  
  1113. </tr>
  1114. <tr>
  1115. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 222113333333222211111686886868688');return false;">BaitSter</a></td>
  1116. <td><span class="diepMod-description"><span class="diepMod-Regen">7</span> / <span class="diepMod-Health">7</span> / <span class="diepMod-Bump">7</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">0</span> / <span class="diepMod-Damage">5</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">7</span></span></td>
  1117.  
  1118. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456741567425671456742567526754674');return false;">Penta</a></td>
  1119. <td><span class="diepMod-description"><span class="diepMod-Regen">2</span> / <span class="diepMod-Health">3</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">0</span></span></td>
  1120.  
  1121. </tr>
  1122. <tr>
  1123. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 456456456845168456845684562211888');return false;">Manager</a></td>
  1124. <td><span class="diepMod-description"><span class="diepMod-Regen">3</span> / <span class="diepMod-Health">2</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">7</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">0</span> / <span class="diepMod-Move">7</span></span></td>
  1125. <td><a class="diepMod-button" onclick="input.execute('game_stats_build 567567567567567567567822222288881');return false;">Multi</a></td>
  1126. <td><span class="diepMod-description"><span class="diepMod-Regen">1</span> / <span class="diepMod-Health">6</span> / <span class="diepMod-Bump">0</span> / <span class="diepMod-Speed">0</span> / <span class="diepMod-Pen">7</span> / <span class="diepMod-Damage">7</span> / <span class="diepMod-Reload">7</span> / <span class="diepMod-Move">5</span></span></td>
  1127.  
  1128. </tr>
  1129.  
  1130.  
  1131. </table>
  1132. <hr class="diepMod-hr" />
  1133. <div class="diepMod-subtitle">&nbsp;&nbsp;&nbsp;&nbsp;Achievements</div>
  1134. <table>
  1135. <tr>
  1136. <td><a class="diepMod-button" onclick="achievementFlag(1);return false;">Get all achievements</a></td>
  1137. <td><a class="diepMod-button" onclick="achievementFlag(0);return false;">Remove all achievements</a></td>
  1138. </tr>
  1139. <div>
  1140. <tr>
  1141. <td><span class="diepMod-warning">&nbsp;&nbsp;This will reload the page.</span></td>
  1142. </tr>
  1143. </table>
  1144.  
  1145. </div>
  1146. `;
  1147. }
  1148.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement