SHARE
TWEET

Untitled

a guest Mar 19th, 2019 64 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name        ScriptSource: The Leading Portal for Web Apps [YouTube / Reddit / MooMoo.io / Krunker.io]
  3. // @namespace    -
  4. // @version      32
  5. // @description  Currently trusted by over 100,000 users!
  6. // @author       Sammy «Z»#7383
  7. // @match        *://*.youtube.com/*
  8. // @match        *://diservers.org/*
  9. // @match        *://moomoo.io/*
  10. // @match        *://krunker.io/*
  11. // @match        http://dev.moomoo.io/*
  12. // @match        *sandbox.moomoo.io/*
  13. // @include      /^(https?:\/\/)?(www\.)?(.+)krunker\.io(|\/|\/\?(server|party)=.+)$/
  14. // @grant        GM_xmlhttpRequest
  15. // @require https://greasyfork.org/scripts/368273-msgpack/code/msgpack.js?version=598723
  16. // @require http://code.jquery.com/jquery-3.3.1.min.js
  17. // @require https://code.jquery.com/ui/1.12.0/jquery-ui.min.js
  18. // @require https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.js
  19. // @run-at       document-start
  20. // ==/UserScript==
  21.  
  22. var msgpack5 = msgpack;
  23.  
  24. if (window.location.href.includes("moomoo")){
  25.     $(document).ready(() => {
  26.  
  27. //Neat cursor: credit to FlareZ 3301#6016
  28. $("#gameCanvas").css('cursor', 'url(http://cur.cursors-4u.net/user/use-1/use153.cur), default');
  29. $("#consentBlock").css({display: "none"});
  30. var autoHealSpeed = 150; //Bigger number = SLOWER autoheal; fastest is 0.
  31. var DEFAULT_HAT = 7;
  32. var DEFAULT_WINGS = 18;
  33. var instaKillKey = 114;
  34. var spikeKey = 118;
  35. var trapKey = 102;
  36. var removeMonkeyTail = true;
  37. var askMeAgain = true; //set this to false if the user doesnt want to be asked about hat switching again
  38.  
  39. var allTraps = [];
  40. var CORESTATE = {
  41.         inwater: {active: false},
  42.         nearenemy: {active: false},
  43.         intrap: {active: false},
  44.         ipress: {active: false},
  45. };
  46.  
  47. try {
  48. document.getElementById("moomooio_728x90_home").style.display = "none"; //Remove sidney's ads
  49.     $("#moomooio_728x90_home").parent().css({display: "none"});
  50. } catch (e) {
  51.   console.log("error removing ad");
  52. }
  53.  
  54. unsafeWindow.onbeforeunload = null;
  55.  
  56.  
  57. let coreURL =  new URL(window.location.href);
  58. window.sessionStorage.force = coreURL.searchParams.get("fc");
  59.  
  60.  
  61. if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  62.     console.error(window.sessionStorage.force);
  63.     /*alert(window.location.force);*/
  64.     document.getElementsByClassName("menuHeader")[0].innerHTML = `Servers <span style="color: red;">Force (${window.sessionStorage.force})</span>`;
  65. }
  66.  
  67.  
  68. var oldAlert = unsafeWindow.alert;
  69. unsafeWindow.alert = function(){
  70.     $.alert({title: "Full Server!",
  71.             content: "This server is full! Would you like to force connect?",
  72.             useBootstrap: false,
  73.             buttons: {
  74.                   Back: () => { unsafeWindow.onbeforeunload = null; window.location = "http://moomoo.io"; },
  75.                   Yes: () => {
  76.                           let coreURL =  new URL(window.location.href);
  77.                           let server = coreURL.searchParams.get("server");
  78.                           window.sessionStorage.force = server;
  79.                           window.sessionStorage.dog = server;
  80.                           console.error(window.sessionStorage.force);
  81.                           console.error(window.sessionStorage.dog);
  82.                           console.error(server);
  83.                           setTimeout(() => {
  84.                                    console.error(window.sessionStorage.force);
  85.                                   window.location = `http://moomoo.io?fc=${server}`;
  86.                           }, 500);
  87.                   },
  88.             }
  89.             });
  90. }
  91.  
  92.  
  93. class ForceSocket extends WebSocket {
  94.           constructor(...args){
  95.               if (window.sessionStorage.force != "false" && window.sessionStorage.force && window.sessionStorage.force.toString() != "null"){
  96.                   let server = window.sessionStorage.force;
  97.                   let sip = "";
  98.                   for (let gameServer of window.vultr.servers){
  99.                       if (`${gameServer.region}:${gameServer.index}:0` == server){
  100.                                sip = gameServer.ip;
  101.                       }
  102.                   }
  103.                   args[0] = `wss://ip_${sip}.moomoo.io:8008/?gameIndex=0`;
  104.  
  105.                   console.error("Setting false");
  106.                   console.error(args[0]);
  107.                   delete window.sessionStorage.force;
  108.               }
  109.  
  110.              super(...args);
  111.  
  112.           }
  113.  
  114.  
  115. }
  116.  
  117. WebSocket = ForceSocket;
  118.  
  119.  
  120. unsafeWindow.admob = {
  121.     requestInterstitialAd: ()=>{},
  122.     showInterstitialAd: ()=>{}
  123. }
  124.  
  125.  
  126. var accessories = [{
  127.         id: 12,
  128.         name: "Snowball",
  129.         price: 1e3,
  130.         scale: 105,
  131.         xOff: 18,
  132.         desc: "no effect"
  133.     }, {
  134.         id: 9,
  135.         name: "Tree Cape",
  136.         price: 1e3,
  137.         scale: 90,
  138.         desc: "no effect"
  139.     }, {
  140.         id: 10,
  141.         name: "Stone Cape",
  142.         price: 1e3,
  143.         scale: 90,
  144.         desc: "no effect"
  145.     }, {
  146.         id: 3,
  147.         name: "Cookie Cape",
  148.         price: 1500,
  149.         scale: 90,
  150.         desc: "no effect"
  151.     }, {
  152.         id: 8,
  153.         name: "Cow Cape",
  154.         price: 2e3,
  155.         scale: 90,
  156.         desc: "no effect"
  157.     }, {
  158.         id: 11,
  159.         name: "Monkey Tail",
  160.         price: 2e3,
  161.         scale: 97,
  162.         xOff: 25,
  163.         desc: "Super speed but reduced damage",
  164.         spdMult: 1.35,
  165.         dmgMultO: .2
  166.     }, {
  167.         id: 17,
  168.         name: "Apple Basket",
  169.         price: 3e3,
  170.         scale: 80,
  171.         xOff: 12,
  172.         desc: "slowly regenerates health over time",
  173.         healthRegen: 1
  174.     }, {
  175.         id: 6,
  176.         name: "Winter Cape",
  177.         price: 3e3,
  178.         scale: 90,
  179.         desc: "no effect"
  180.     }, {
  181.         id: 4,
  182.         name: "Skull Cape",
  183.         price: 4e3,
  184.         scale: 90,
  185.         desc: "no effect"
  186.     }, {
  187.         id: 5,
  188.         name: "Dash Cape",
  189.         price: 5e3,
  190.         scale: 90,
  191.         desc: "no effect"
  192.     }, {
  193.         id: 2,
  194.         name: "Dragon Cape",
  195.         price: 6e3,
  196.         scale: 90,
  197.         desc: "no effect"
  198.     }, {
  199.         id: 1,
  200.         name: "Super Cape",
  201.         price: 8e3,
  202.         scale: 90,
  203.         desc: "no effect"
  204.     }, {
  205.         id: 7,
  206.         name: "Troll Cape",
  207.         price: 8e3,
  208.         scale: 90,
  209.         desc: "no effect"
  210.     }, {
  211.         id: 14,
  212.         name: "Thorns",
  213.         price: 1e4,
  214.         scale: 115,
  215.         xOff: 20,
  216.         desc: "no effect"
  217.     }, {
  218.         id: 15,
  219.         name: "Blockades",
  220.         price: 1e4,
  221.         scale: 95,
  222.         xOff: 15,
  223.         desc: "no effect"
  224.     }, {
  225.         id: 20,
  226.         name: "Devils Tail",
  227.         price: 1e4,
  228.         scale: 95,
  229.         xOff: 20,
  230.         desc: "no effect"
  231.     }, {
  232.         id: 16,
  233.         name: "Sawblade",
  234.         price: 12e3,
  235.         scale: 90,
  236.         spin: !0,
  237.         xOff: 0,
  238.         desc: "deal damage to players that damage you",
  239.         dmg: .15
  240.     }, {
  241.         id: 13,
  242.         name: "Angel Wings",
  243.         price: 15e3,
  244.         scale: 138,
  245.         xOff: 22,
  246.         desc: "slowly regenerates health over time",
  247.         healthRegen: 3
  248.     }, {
  249.         id: 19,
  250.         name: "Shadow Wings",
  251.         price: 15e3,
  252.         scale: 138,
  253.         xOff: 22,
  254.         desc: "increased movement speed",
  255.         spdMult: 1.1
  256.     }, {
  257.         id: 18,
  258.         name: "Blood Wings",
  259.         price: 2e4,
  260.         scale: 178,
  261.         xOff: 26,
  262.         desc: "restores health when you deal damage",
  263.         healD: .2
  264.     }, {
  265.         id: 21,
  266.         name: "Corrupt X Wings",
  267.         price: 2e4,
  268.         scale: 178,
  269.         xOff: 26,
  270.         desc: "deal damage to players that damage you",
  271.         dmg: .25
  272.     }]
  273.  
  274.  
  275. var hats = hats = [{
  276.         id: 45,
  277.         name: "Shame!",
  278.         dontSell: !0,
  279.         price: 0,
  280.         scale: 120,
  281.         desc: "hacks are for losers"
  282.     }, {
  283.         id: 51,
  284.         name: "Moo Cap",
  285.         price: 0,
  286.         scale: 120,
  287.         desc: "coolest mooer around"
  288.     }, {
  289.         id: 50,
  290.         name: "Apple Cap",
  291.         price: 0,
  292.         scale: 120,
  293.         desc: "apple farms remembers"
  294.     }, {
  295.         id: 28,
  296.         name: "Moo Head",
  297.         price: 0,
  298.         scale: 120,
  299.         desc: "no effect"
  300.     }, {
  301.         id: 29,
  302.         name: "Pig Head",
  303.         price: 0,
  304.         scale: 120,
  305.         desc: "no effect"
  306.     }, {
  307.         id: 30,
  308.         name: "Fluff Head",
  309.         price: 0,
  310.         scale: 120,
  311.         desc: "no effect"
  312.     }, {
  313.         id: 36,
  314.         name: "Pandou Head",
  315.         price: 0,
  316.         scale: 120,
  317.         desc: "no effect"
  318.     }, {
  319.         id: 37,
  320.         name: "Bear Head",
  321.         price: 0,
  322.         scale: 120,
  323.         desc: "no effect"
  324.     }, {
  325.         id: 38,
  326.         name: "Monkey Head",
  327.         price: 0,
  328.         scale: 120,
  329.         desc: "no effect"
  330.     }, {
  331.         id: 44,
  332.         name: "Polar Head",
  333.         price: 0,
  334.         scale: 120,
  335.         desc: "no effect"
  336.     }, {
  337.         id: 35,
  338.         name: "Fez Hat",
  339.         price: 0,
  340.         scale: 120,
  341.         desc: "no effect"
  342.     }, {
  343.         id: 42,
  344.         name: "Enigma Hat",
  345.         price: 0,
  346.         scale: 120,
  347.         desc: "join the enigma army"
  348.     }, {
  349.         id: 43,
  350.         name: "Blitz Hat",
  351.         price: 0,
  352.         scale: 120,
  353.         desc: "hey everybody i'm blitz"
  354.     }, {
  355.         id: 49,
  356.         name: "Bob XIII Hat",
  357.         price: 0,
  358.         scale: 120,
  359.         desc: "like and subscribe"
  360.     }, {
  361.         id: 8,
  362.         name: "Bummle Hat",
  363.         price: 100,
  364.         scale: 120,
  365.         desc: "no effect"
  366.     }, {
  367.         id: 2,
  368.         name: "Straw Hat",
  369.         price: 500,
  370.         scale: 120,
  371.         desc: "no effect"
  372.     }, {
  373.         id: 15,
  374.         name: "Winter Cap",
  375.         price: 600,
  376.         scale: 120,
  377.         desc: "allows you to move at normal speed in snow",
  378.         coldM: 1
  379.     }, {
  380.         id: 5,
  381.         name: "Cowboy Hat",
  382.         price: 1e3,
  383.         scale: 120,
  384.         desc: "no effect"
  385.     }, {
  386.         id: 4,
  387.         name: "Ranger Hat",
  388.         price: 2e3,
  389.         scale: 120,
  390.         desc: "no effect"
  391.     }, {
  392.         id: 18,
  393.         name: "Explorer Hat",
  394.         price: 2e3,
  395.         scale: 120,
  396.         desc: "no effect"
  397.     }, {
  398.         id: 31,
  399.         name: "Flipper Hat",
  400.         price: 2500,
  401.         scale: 120,
  402.         desc: "have more control while in water",
  403.         watrImm: !0
  404.     }, {
  405.         id: 1,
  406.         name: "Marksman Cap",
  407.         price: 3e3,
  408.         scale: 120,
  409.         desc: "increases arrow speed and range",
  410.         aMlt: 1.3
  411.     }, {
  412.         id: 10,
  413.         name: "Bush Gear",
  414.         price: 3e3,
  415.         scale: 160,
  416.         desc: "allows you to disguise yourself as a bush"
  417.     }, {
  418.         id: 48,
  419.         name: "Halo",
  420.         price: 3e3,
  421.         scale: 120,
  422.         desc: "no effect"
  423.     }, {
  424.         id: 6,
  425.         name: "Soldier Helmet",
  426.         price: 4e3,
  427.         scale: 120,
  428.         desc: "reduces damage taken but slows movement",
  429.         spdMult: .94,
  430.         dmgMult: .75
  431.     }, {
  432.         id: 23,
  433.         name: "Anti Venom Gear",
  434.         price: 4e3,
  435.         scale: 120,
  436.         desc: "makes you immune to poison",
  437.         poisonRes: 1
  438.     }, {
  439.         id: 13,
  440.         name: "Medic Gear",
  441.         price: 5e3,
  442.         scale: 110,
  443.         desc: "slowly regenerates health over time",
  444.         healthRegen: 3
  445.     }, {
  446.         id: 9,
  447.         name: "Miners Helmet",
  448.         price: 5e3,
  449.         scale: 120,
  450.         desc: "earn 1 extra gold per resource",
  451.         extraGold: 1
  452.     }, {
  453.         id: 32,
  454.         name: "Musketeer Hat",
  455.         price: 5e3,
  456.         scale: 120,
  457.         desc: "reduces cost of projectiles",
  458.         projCost: .5
  459.     }, {
  460.         id: 7,
  461.         name: "Bull Helmet",
  462.         price: 6e3,
  463.         scale: 120,
  464.         desc: "increases damage done but drains health",
  465.         healthRegen: -5,
  466.         dmgMultO: 1.5,
  467.         spdMult: .96
  468.     }, {
  469.         id: 22,
  470.         name: "Emp Helmet",
  471.         price: 6e3,
  472.         scale: 120,
  473.         desc: "turrets won't attack but you move slower",
  474.         antiTurret: 1,
  475.         spdMult: .7
  476.     }, {
  477.         id: 12,
  478.         name: "Booster Hat",
  479.         price: 6e3,
  480.         scale: 120,
  481.         desc: "increases your movement speed",
  482.         spdMult: 1.16
  483.     }, {
  484.         id: 26,
  485.         name: "Barbarian Armor",
  486.         price: 8e3,
  487.         scale: 120,
  488.         desc: "knocks back enemies that attack you",
  489.         dmgK: .6
  490.     }, {
  491.         id: 21,
  492.         name: "Plague Mask",
  493.         price: 1e4,
  494.         scale: 120,
  495.         desc: "melee attacks deal poison damage",
  496.         poisonDmg: 5,
  497.         poisonTime: 6
  498.     }, {
  499.         id: 46,
  500.         name: "Bull Mask",
  501.         price: 1e4,
  502.         scale: 120,
  503.         desc: "bulls won't target you unless you attack them",
  504.         bullRepel: 1
  505.     }, {
  506.         id: 14,
  507.         name: "Windmill Hat",
  508.         topSprite: !0,
  509.         price: 1e4,
  510.         scale: 120,
  511.         desc: "generates points while worn",
  512.         pps: 1.5
  513.     }, {
  514.         id: 11,
  515.         name: "Spike Gear",
  516.         topSprite: !0,
  517.         price: 1e4,
  518.         scale: 120,
  519.         desc: "deal damage to players that damage you",
  520.         dmg: .45
  521.     }, {
  522.         id: 53,
  523.         name: "Turret Gear",
  524.         topSprite: !0,
  525.         price: 1e4,
  526.         scale: 120,
  527.         desc: "you become a walking turret",
  528.         turret: {
  529.             proj: 1,
  530.             range: 700,
  531.             rate: 2500
  532.         },
  533.         spdMult: .5
  534.     }, {
  535.         id: 20,
  536.         name: "Samurai Armor",
  537.         price: 12e3,
  538.         scale: 120,
  539.         desc: "increased attack speed and fire rate",
  540.         atkSpd: .78
  541.     }, {
  542.         id: 16,
  543.         name: "Bushido Armor",
  544.         price: 12e3,
  545.         scale: 120,
  546.         desc: "restores health when you deal damage",
  547.         healD: .4
  548.     }, {
  549.         id: 27,
  550.         name: "Scavenger Gear",
  551.         price: 15e3,
  552.         scale: 120,
  553.         desc: "earn double points for each kill",
  554.         kScrM: 2
  555.     }, {
  556.         id: 40,
  557.         name: "Tank Gear",
  558.         price: 15e3,
  559.         scale: 120,
  560.         desc: "increased damage to buildings but slower movement",
  561.         spdMult: .3,
  562.         bDmg: 3.3
  563.     }, {
  564.         id: 52,
  565.         name: "Thief Gear",
  566.         price: 15e3,
  567.         scale: 120,
  568.         desc: "steal half of a players gold when you kill them",
  569.         goldSteal: .5
  570.     }]
  571.  
  572.  
  573. var objects = [{
  574.         id: 0,
  575.         name: "food",
  576.         layer: 0
  577.     }, {
  578.         id: 1,
  579.         name: "walls",
  580.         place: !0,
  581.         limit: 30,
  582.         layer: 0
  583.     }, {
  584.         id: 2,
  585.         name: "spikes",
  586.         place: !0,
  587.         limit: 15,
  588.         layer: 0
  589.     }, {
  590.         id: 3,
  591.         name: "mill",
  592.         place: !0,
  593.         limit: 7,
  594.         layer: 1
  595.     }, {
  596.         id: 4,
  597.         name: "mine",
  598.         place: !0,
  599.         limit: 1,
  600.         layer: 0
  601.     }, {
  602.         id: 5,
  603.         name: "trap",
  604.         place: !0,
  605.         limit: 6,
  606.         layer: -1
  607.     }, {
  608.         id: 6,
  609.         name: "booster",
  610.         place: !0,
  611.         limit: 12,
  612.         layer: -1
  613.     }, {
  614.         id: 7,
  615.         name: "turret",
  616.         place: !0,
  617.         limit: 2,
  618.         layer: 1
  619.     }, {
  620.         id: 8,
  621.         name: "watchtower",
  622.         place: !0,
  623.         limit: 12,
  624.         layer: 1
  625.     }, {
  626.         id: 9,
  627.         name: "buff",
  628.         place: !0,
  629.         limit: 4,
  630.         layer: -1
  631.     }, {
  632.         id: 10,
  633.         name: "spawn",
  634.         place: !0,
  635.         limit: 1,
  636.         layer: -1
  637.     }, {
  638.         id: 11,
  639.         name: "sapling",
  640.         place: !0,
  641.         limit: 2,
  642.         layer: 0
  643.     }, {
  644.         id: 12,
  645.         name: "blocker",
  646.         place: !0,
  647.         limit: 3,
  648.         layer: -1
  649.     }, {
  650.         id: 13,
  651.         name: "teleporter",
  652.         place: !0,
  653.         limit: 1,
  654.         layer: -1
  655.     }]
  656.  
  657.     var weapons = [{
  658.         id: 0,
  659.         type: 0,
  660.         name: "tool hammer",
  661.         desc: "tool for gathering all resources",
  662.         src: "hammer_1",
  663.         length: 140,
  664.         width: 140,
  665.         xOff: -3,
  666.         yOff: 18,
  667.         dmg: 25,
  668.         range: 65,
  669.         gather: 1,
  670.         speed: 300
  671.     }, {
  672.         id: 1,
  673.         type: 0,
  674.         age: 2,
  675.         name: "hand axe",
  676.         desc: "gathers resources at a higher rate",
  677.         src: "axe_1",
  678.         length: 140,
  679.         width: 140,
  680.         xOff: 3,
  681.         yOff: 24,
  682.         dmg: 30,
  683.         spdMult: 1,
  684.         range: 70,
  685.         gather: 2,
  686.         speed: 400
  687.     }, {
  688.         id: 2,
  689.         type: 0,
  690.         age: 8,
  691.         pre: 1,
  692.         name: "great axe",
  693.         desc: "deal more damage and gather more resources",
  694.         src: "great_axe_1",
  695.         length: 140,
  696.         width: 140,
  697.         xOff: -8,
  698.         yOff: 25,
  699.         dmg: 35,
  700.         spdMult: 1,
  701.         range: 75,
  702.         gather: 4,
  703.         speed: 400
  704.     }, {
  705.         id: 3,
  706.         type: 0,
  707.         age: 2,
  708.         name: "short sword",
  709.         desc: "increased attack power but slower move speed",
  710.         src: "sword_1",
  711.         iPad: 1.3,
  712.         length: 130,
  713.         width: 210,
  714.         xOff: -8,
  715.         yOff: 46,
  716.         dmg: 35,
  717.         spdMult: .85,
  718.         range: 110,
  719.         gather: 1,
  720.         speed: 300
  721.     }, {
  722.         id: 4,
  723.         type: 0,
  724.         age: 8,
  725.         pre: 3,
  726.         name: "katana",
  727.         desc: "greater range and damage",
  728.         src: "samurai_1",
  729.         iPad: 1.3,
  730.         length: 130,
  731.         width: 210,
  732.         xOff: -8,
  733.         yOff: 59,
  734.         dmg: 40,
  735.         spdMult: .8,
  736.         range: 118,
  737.         gather: 1,
  738.         speed: 300
  739.     }, {
  740.         id: 5,
  741.         type: 0,
  742.         age: 2,
  743.         name: "polearm",
  744.         desc: "long range melee weapon",
  745.         src: "spear_1",
  746.         iPad: 1.3,
  747.         length: 130,
  748.         width: 210,
  749.         xOff: -8,
  750.         yOff: 53,
  751.         dmg: 45,
  752.         knock: .2,
  753.         spdMult: .82,
  754.         range: 142,
  755.         gather: 1,
  756.         speed: 700
  757.     }, {
  758.         id: 6,
  759.         type: 0,
  760.         age: 2,
  761.         name: "bat",
  762.         desc: "fast long range melee weapon",
  763.         src: "bat_1",
  764.         iPad: 1.3,
  765.         length: 110,
  766.         width: 180,
  767.         xOff: -8,
  768.         yOff: 53,
  769.         dmg: 20,
  770.         knock: .7,
  771.         range: 110,
  772.         gather: 1,
  773.         speed: 300
  774.     }, {
  775.         id: 7,
  776.         type: 0,
  777.         age: 2,
  778.         name: "daggers",
  779.         desc: "really fast short range weapon",
  780.         src: "dagger_1",
  781.         iPad: .8,
  782.         length: 110,
  783.         width: 110,
  784.         xOff: 18,
  785.         yOff: 0,
  786.         dmg: 20,
  787.         knock: .1,
  788.         range: 65,
  789.         gather: 1,
  790.         hitSlow: .1,
  791.         spdMult: 1.13,
  792.         speed: 100
  793.     }, {
  794.         id: 8,
  795.         type: 0,
  796.         age: 2,
  797.         name: "stick",
  798.         desc: "great for gathering but very weak",
  799.         src: "stick_1",
  800.         length: 140,
  801.         width: 140,
  802.         xOff: 3,
  803.         yOff: 24,
  804.         dmg: 1,
  805.         spdMult: 1,
  806.         range: 70,
  807.         gather: 7,
  808.         speed: 400
  809.     }, {
  810.         id: 9,
  811.         type: 1,
  812.         age: 6,
  813.         name: "hunting bow",
  814.         desc: "bow used for ranged combat and hunting",
  815.         src: "bow_1",
  816.         req: ["wood", 4],
  817.         length: 120,
  818.         width: 120,
  819.         xOff: -6,
  820.         yOff: 0,
  821.         projectile: 0,
  822.         spdMult: .75,
  823.         speed: 600
  824.     }, {
  825.         id: 10,
  826.         type: 1,
  827.         age: 6,
  828.         name: "great hammer",
  829.         desc: "hammer used for destroying structures",
  830.         src: "great_hammer_1",
  831.         length: 140,
  832.         width: 140,
  833.         xOff: -9,
  834.         yOff: 25,
  835.         dmg: 10,
  836.         spdMult: .88,
  837.         range: 75,
  838.         sDmg: 7.5,
  839.         gather: 1,
  840.         speed: 400
  841.     }, {
  842.         id: 11,
  843.         type: 1,
  844.         age: 6,
  845.         name: "wooden shield",
  846.         desc: "blocks projectiles and reduces melee damage",
  847.         src: "shield_1",
  848.         length: 120,
  849.         width: 120,
  850.         shield: .2,
  851.         xOff: 6,
  852.         yOff: 0,
  853.         spdMult: .7
  854.     }, {
  855.         id: 12,
  856.         type: 1,
  857.         age: 8,
  858.         pre: 9,
  859.         name: "crossbow",
  860.         desc: "deals more damage and has greater range",
  861.         src: "crossbow_1",
  862.         req: ["wood", 5],
  863.         aboveHand: !0,
  864.         armS: .75,
  865.         length: 120,
  866.         width: 120,
  867.         xOff: -4,
  868.         yOff: 0,
  869.         projectile: 2,
  870.         spdMult: .7,
  871.         speed: 700
  872.     }, {
  873.         id: 13,
  874.         type: 1,
  875.         age: 9,
  876.         pre: 12,
  877.         name: "repeater crossbow",
  878.         desc: "high firerate crossbow with reduced damage",
  879.         src: "crossbow_2",
  880.         req: ["wood", 10],
  881.         aboveHand: !0,
  882.         armS: .75,
  883.         length: 120,
  884.         width: 120,
  885.         xOff: -4,
  886.         yOff: 0,
  887.         projectile: 3,
  888.         spdMult: .7,
  889.         speed: 300
  890.     }, {
  891.         id: 14,
  892.         type: 1,
  893.         age: 6,
  894.         name: "mc grabby",
  895.         desc: "steals resources from enemies",
  896.         src: "grab_1",
  897.         length: 130,
  898.         width: 210,
  899.         xOff: -8,
  900.         yOff: 53,
  901.         dmg: 0,
  902.         steal: 250,
  903.         knock: .2,
  904.         spdMult: 1.05,
  905.         range: 125,
  906.         gather: 0,
  907.         speed: 700
  908.     }, {
  909.         id: 15,
  910.         type: 1,
  911.         age: 9,
  912.         pre: 12,
  913.         name: "musket",
  914.         desc: "slow firerate but high damage and range",
  915.         src: "musket_1",
  916.         req: ["stone", 10],
  917.         aboveHand: !0,
  918.         rec: .35,
  919.         armS: .6,
  920.         hndS: .3,
  921.         hndD: 1.6,
  922.         length: 205,
  923.         width: 205,
  924.         xOff: 25,
  925.         yOff: 0,
  926.         projectile: 5,
  927.         hideProjectile: !0,
  928.         spdMult: .6,
  929.         speed: 1500
  930.     }]
  931.  
  932. var activeObjects = [{
  933.         name: "apple",
  934.         desc: "restores 20 health when consumed",
  935.         req: ["food", 10],
  936.         consume: function (e) {
  937.             return e.changeHealth(20, e)
  938.         },
  939.         scale: 22,
  940.         holdOffset: 15
  941.     }, {
  942.         age: 3,
  943.         name: "cookie",
  944.         desc: "restores 40 health when consumed",
  945.         req: ["food", 15],
  946.         consume: function (e) {
  947.             return e.changeHealth(40, e)
  948.         },
  949.         scale: 27,
  950.         holdOffset: 15
  951.     }, {
  952.         age: 7,
  953.         name: "pizza",
  954.         desc: "restores 30 health and another 50 over 5 seconds",
  955.         req: ["food", 30],
  956.         consume: function (e) {
  957.             return !!(e.changeHealth(30, e) || e.health < 100) && (e.dmgOverTime.dmg = -10, e.dmgOverTime.doer = e, e.dmgOverTime.time = 5, !0)
  958.         },
  959.         scale: 27,
  960.         holdOffset: 15
  961.     }, {
  962.         name: "wood wall",
  963.         desc: "provides protection for your village",
  964.         req: ["wood", 10],
  965.         projDmg: !0,
  966.         health: 380,
  967.         scale: 50,
  968.         holdOffset: 20,
  969.         placeOffset: -5
  970.     }, {
  971.         age: 3,
  972.         name: "stone wall",
  973.         desc: "provides improved protection for your village",
  974.         req: ["stone", 25],
  975.         health: 900,
  976.         scale: 50,
  977.         holdOffset: 20,
  978.         placeOffset: -5
  979.     }, {
  980.         age: 7,
  981.         pre: 1,
  982.         name: "castle wall",
  983.         desc: "provides powerful protection for your village",
  984.         req: ["stone", 35],
  985.         health: 1500,
  986.         scale: 52,
  987.         holdOffset: 20,
  988.         placeOffset: -5
  989.     }, {
  990.         name: "spikes",
  991.         desc: "damages enemies when they touch them",
  992.         req: ["wood", 20, "stone", 5],
  993.         health: 400,
  994.         dmg: 20,
  995.         scale: 49,
  996.         spritePadding: -23,
  997.         holdOffset: 8,
  998.         placeOffset: -5
  999.     }, {
  1000.         age: 5,
  1001.         name: "greater spikes",
  1002.         desc: "damages enemies when they touch them",
  1003.         req: ["wood", 30, "stone", 10],
  1004.         health: 500,
  1005.         dmg: 35,
  1006.         scale: 52,
  1007.         spritePadding: -23,
  1008.         holdOffset: 8,
  1009.         placeOffset: -5
  1010.     }, {
  1011.         age: 9,
  1012.         pre: 1,
  1013.         name: "poison spikes",
  1014.         desc: "poisons enemies when they touch them",
  1015.         req: ["wood", 35, "stone", 15],
  1016.         health: 600,
  1017.         dmg: 30,
  1018.         pDmg: 5,
  1019.         scale: 52,
  1020.         spritePadding: -23,
  1021.         holdOffset: 8,
  1022.         placeOffset: -5
  1023.     }, {
  1024.         age: 9,
  1025.         pre: 2,
  1026.         name: "spinning spikes",
  1027.         desc: "damages enemies when they touch them",
  1028.         req: ["wood", 30, "stone", 20],
  1029.         health: 500,
  1030.         dmg: 45,
  1031.         turnSpeed: .003,
  1032.         scale: 52,
  1033.         spritePadding: -23,
  1034.         holdOffset: 8,
  1035.         placeOffset: -5
  1036.     }, {
  1037.         name: "windmill",
  1038.         desc: "generates gold over time",
  1039.         req: ["wood", 50, "stone", 10],
  1040.         health: 400,
  1041.         pps: 1,
  1042.         turnSpeed: .0016,
  1043.         spritePadding: 25,
  1044.         iconLineMult: 12,
  1045.         scale: 45,
  1046.         holdOffset: 20,
  1047.         placeOffset: 5
  1048.     }, {
  1049.         age: 5,
  1050.         pre: 1,
  1051.         name: "faster windmill",
  1052.         desc: "generates more gold over time",
  1053.         req: ["wood", 60, "stone", 20],
  1054.         health: 500,
  1055.         pps: 1.5,
  1056.         turnSpeed: .0025,
  1057.         spritePadding: 25,
  1058.         iconLineMult: 12,
  1059.         scale: 47,
  1060.         holdOffset: 20,
  1061.         placeOffset: 5
  1062.     }, {
  1063.         age: 8,
  1064.         pre: 1,
  1065.         name: "power mill",
  1066.         desc: "generates more gold over time",
  1067.         req: ["wood", 100, "stone", 50],
  1068.         health: 800,
  1069.         pps: 2,
  1070.         turnSpeed: .005,
  1071.         spritePadding: 25,
  1072.         iconLineMult: 12,
  1073.         scale: 47,
  1074.         holdOffset: 20,
  1075.         placeOffset: 5
  1076.     }, {
  1077.         age: 5,
  1078.         type: 2,
  1079.         name: "mine",
  1080.         desc: "allows you to mine stone",
  1081.         req: ["wood", 20, "stone", 100],
  1082.         iconLineMult: 12,
  1083.         scale: 65,
  1084.         holdOffset: 20,
  1085.         placeOffset: 0
  1086.     }, {
  1087.         age: 5,
  1088.         type: 0,
  1089.         name: "sapling",
  1090.         desc: "allows you to farm wood",
  1091.         req: ["wood", 150],
  1092.         iconLineMult: 12,
  1093.         colDiv: .5,
  1094.         scale: 110,
  1095.         holdOffset: 50,
  1096.         placeOffset: -15
  1097.     }, {
  1098.         age: 4,
  1099.         name: "pit trap",
  1100.         desc: "pit that traps enemies if they walk over it",
  1101.         req: ["wood", 30, "stone", 30],
  1102.         trap: !0,
  1103.         ignoreCollision: !0,
  1104.         hideFromEnemy: !0,
  1105.         health: 500,
  1106.         colDiv: .2,
  1107.         scale: 50,
  1108.         holdOffset: 20,
  1109.         placeOffset: -5
  1110.     }, {
  1111.         age: 4,
  1112.         name: "boost pad",
  1113.         desc: "provides boost when stepped on",
  1114.         req: ["stone", 20, "wood", 5],
  1115.         ignoreCollision: !0,
  1116.         boostSpeed: 1.5,
  1117.         health: 150,
  1118.         colDiv: .7,
  1119.         scale: 45,
  1120.         holdOffset: 20,
  1121.         placeOffset: -5
  1122.     }, {
  1123.         age: 7,
  1124.         doUpdate: !0,
  1125.         name: "turret",
  1126.         desc: "defensive structure that shoots at enemies",
  1127.         req: ["wood", 200, "stone", 150],
  1128.         health: 800,
  1129.         projectile: 1,
  1130.         shootRange: 700,
  1131.         shootRate: 2200,
  1132.         scale: 43,
  1133.         holdOffset: 20,
  1134.         placeOffset: -5
  1135.     }, {
  1136.         age: 7,
  1137.         name: "platform",
  1138.         desc: "platform to shoot over walls and cross over water",
  1139.         req: ["wood", 20],
  1140.         ignoreCollision: !0,
  1141.         zIndex: 1,
  1142.         health: 300,
  1143.         scale: 43,
  1144.         holdOffset: 20,
  1145.         placeOffset: -5
  1146.     }, {
  1147.         age: 7,
  1148.         name: "healing pad",
  1149.         desc: "standing on it will slowly heal you",
  1150.         req: ["wood", 30, "food", 10],
  1151.         ignoreCollision: !0,
  1152.         healCol: 15,
  1153.         health: 400,
  1154.         colDiv: .7,
  1155.         scale: 45,
  1156.         holdOffset: 20,
  1157.         placeOffset: -5
  1158.     }, {
  1159.         age: 9,
  1160.         name: "spawn pad",
  1161.         desc: "you will spawn here when you die but it will dissapear",
  1162.         req: ["wood", 100, "stone", 100],
  1163.         health: 400,
  1164.         ignoreCollision: !0,
  1165.         spawnPoint: !0,
  1166.         scale: 45,
  1167.         holdOffset: 20,
  1168.         placeOffset: -5
  1169.     }, {
  1170.         age: 7,
  1171.         name: "blocker",
  1172.         desc: "blocks building in radius",
  1173.         req: ["wood", 30, "stone", 25],
  1174.         ignoreCollision: !0,
  1175.         blocker: 300,
  1176.         health: 400,
  1177.         colDiv: .7,
  1178.         scale: 45,
  1179.         holdOffset: 20,
  1180.         placeOffset: -5
  1181.     }, {
  1182.         age: 7,
  1183.         name: "teleporter",
  1184.         desc: "teleports you to a random point on the map",
  1185.         req: ["wood", 60, "stone", 60],
  1186.         ignoreCollision: !0,
  1187.         teleport: !0,
  1188.         health: 200,
  1189.         colDiv: .7,
  1190.         scale: 45,
  1191.         holdOffset: 20,
  1192.         placeOffset: -5
  1193.     }];
  1194.  
  1195. var allContainers = [accessories, hats, objects, weapons, activeObjects];
  1196. function obs(objName){
  1197.     for (let container of allContainers){
  1198.        for (let obj of container){
  1199.            if (obj.name.toLowerCase() == objName.toLowerCase()){
  1200.              return obj.id;
  1201.            }
  1202.        }
  1203.     }
  1204.  
  1205.     return -1;
  1206.  
  1207. }
  1208.  
  1209. function activeObs(objName){
  1210.     for (var i=0;i<activeObjects.length;i++){
  1211.       let activeObj = activeObjects[i];
  1212.       if (activeObj.name.toLowerCase() == objName.toLowerCase()){
  1213.           return i;
  1214.       }
  1215.  
  1216.     }
  1217. }
  1218.  
  1219.  
  1220.  
  1221. var switchToHat = obs("bull helmet");
  1222. var switchToAccessory = obs("blood wings");
  1223. var switchToWep = obs("polearm");
  1224. var switchToRange = obs("crossbow");
  1225. var bullHelm = obs("bull helmet");
  1226. var monkeyTail = obs("monkey tail");
  1227.  
  1228. var invalidHats = [obs("shame!")]
  1229. console.log(invalidHats);
  1230.  
  1231.  
  1232.  
  1233. const START_SSWX =  [146, 161, 99, 146, 1, 192]
  1234. var noallow = false;
  1235. const END_SSWX =  [146, 161, 99, 146, 0, 192];
  1236. const TAKEOUT = [4, 132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 147, 161, 53, 15, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47];
  1237. const APPLE = [4, 132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 147, 161, 53, 0, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47];
  1238. const COOKIE = [4, 132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 147, 161, 53, 1, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47];
  1239. const PIZZA =  [97, 117, 116, 111, 115, 112, 101, 101, 100]
  1240. var currentHat = 0;
  1241. var currentAccessory = 0;
  1242. var IN_PROCESS = false;
  1243. var justDied = false;
  1244. var recentHealth = 100;
  1245. var ws;
  1246. var MYID;
  1247. var hasApple = true;
  1248. var foodInHand = false;
  1249. var autoheal = true;
  1250. var autobull = true;
  1251. var STATE = 0;
  1252. var inInstaProcess = false;
  1253. var autoattack = false;
  1254. var allMooMooObjects = {};
  1255. var bowWorked = false;
  1256. var hasWinter = false;
  1257. var hasFlipper = false;
  1258. var myCLAN = null;
  1259. var goodData;
  1260. var myPlayer;
  1261. var nearestPlayerAngle = 0;
  1262. var focusPlayerObj;
  1263. var MYANGLE = 0;
  1264. let coregood = [212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112];
  1265. var targets = [false, false];
  1266.  
  1267.  
  1268. let badreplace = [130, 166, 98, 117, 102, 102, 101, 114, 130, 164, 116, 121, 112, 101, 166, 66, 117, 102, 102, 101, 114, 164, 100, 97, 116, 97, 145, 0, 164, 116, 121, 112, 101, 0]
  1269. document.msgpack = msgpack;
  1270. function n(){
  1271.      this.buffer = new Uint8Array([0]);
  1272.      this.buffer.__proto__ = new Uint8Array;
  1273.      this.type = 0;
  1274. }
  1275.  
  1276. var nval = msgpack5.decode([132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 146, 161, 51, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47]).data[1];
  1277. document.n = nval;
  1278. document.timeTween = 130;
  1279.  
  1280. function replaceFromArray(oldp, newp, array){
  1281.   return array.join(",").replace(oldp.join(","), newp.join(",")).split(",").map(x => parseInt(x))
  1282.  
  1283. }
  1284.  
  1285. var playersNear = [];
  1286.  
  1287. var player = function(id, x, y, clan){
  1288.     this.id = id;
  1289.     this.x = x;
  1290.     this.y = y;
  1291.     this.clan = clan;
  1292. }
  1293.  
  1294. var repeatingLast = false;
  1295. var lastWords = "";
  1296.  
  1297. var styleSheetObj = document.createElement("link");
  1298. styleSheetObj.rel = "stylesheet";
  1299. styleSheetObj.href = "https://cdnjs.cloudflare.com/ajax/libs/jquery-confirm/3.3.0/jquery-confirm.min.css"
  1300. document.head.appendChild(styleSheetObj);
  1301.  
  1302. var settingsDiv = document.createElement('div');
  1303. var settingsSlider = document.createElement('input');
  1304. var itemTitle = document.createElement("h1");
  1305. var currentSpeed = document.createElement("h2");
  1306. var speedContain = document.createElement("div");
  1307. settingsSlider.type = "range";
  1308. settingsSlider.min = "12";
  1309. settingsSlider.max = "99";
  1310. settingsSlider.value = "50";
  1311. settingsSlider.id = "healSlider";
  1312. itemTitle.innerText = "AutoHeal Speed";
  1313. currentSpeed.innerHTML = '<div id="cspeed">Current Speed »</div> <div id="numfocus">50</div>';
  1314. currentSpeed.id = "currentSpeed";
  1315. speedContain.id = "speedContain";
  1316. itemTitle.id = "itemTitle";
  1317. settingsDiv.appendChild(settingsSlider);
  1318. speedContain.appendChild(currentSpeed);
  1319. /*document.querySelector("#setupCard").appendChild(itemTitle);
  1320. document.querySelector("#setupCard").appendChild(settingsDiv);
  1321. document.querySelector("#setupCard").appendChild(speedContain);
  1322. $("#healSlider").css({width: "100%", marginTop: 10});
  1323. $("#itemTitle").css({fontWeight: '100', fontSize: 25, width: "100%", textAlign: "center", fontFamily: "sans-serif"});*/
  1324.  
  1325. var targetbtn = document.createElement("img");
  1326. targetbtn.src = "https://i.imgur.com/gWzcwQR.png";
  1327. targetbtn.id = "tbtn";
  1328. document.body.prepend(targetbtn);
  1329.  
  1330. $("#healSlider").change((event, ui) => {
  1331.    let coreVal = parseInt($("#healSlider").val());
  1332.     autoHealSpeed = 150 - coreVal;
  1333.     currentSpeed.innerHTML = `<div id="cspeed">Current Speed »</div> <div id="numfocus">${coreVal}</div>`;
  1334. })
  1335.  
  1336. function generateHatHTML(name, id){
  1337.     return `<div id="flextop"><img id="hatimgmain" src="http://moomoo.io/img/hats/hat_${id}.png">
  1338.             <h1 id="changeAlert">Biome Hat Changed!</h1></div>
  1339.             <h3 id="typealert">Your hat was automatically changed to the <span id="hatname">${name}</span></h3>
  1340.  
  1341.             <div id="flexlow">
  1342.             <button id="sback">Switch Back!</button> <button id="okbtn">OK</button>
  1343.             </div>`
  1344. }
  1345.  
  1346. var menuChange = document.createElement("div");
  1347. menuChange.className = "menuCard";
  1348. menuChange.id = "mainSettings";
  1349. menuChange.innerHTML = `
  1350. <h1 id="settingsTitle">CloudyMod Settings</h1>
  1351. <div class="flexControl">
  1352. <h3 class="menuPrompt">Insta-kill when I press: </h3> <input value="${String.fromCharCode(instaKillKey)}" id="keyPress" maxlength="1" type="text"/>
  1353. </div>
  1354. <hr/>
  1355. <h3 class="menuPrompt">When I attack, put on:</h3>
  1356. <div id="choiceWrap">
  1357. <div class="selectObj" id="selectHat"> <img id="hatprev" class="selPrev" src="http://moomoo.io/img/hats/hat_${DEFAULT_HAT}.png"/> </div>
  1358. <img id="middlePlus" src="https://i.imgur.com/Sya0CZr.png"/>
  1359. <div class="selectObj" id="selectWings"> <img id="wingprev" class="selPrev" src="http://moomoo.io/img/accessories/access_${DEFAULT_WINGS}.png"/> </div>
  1360. </div>
  1361. <div id="mnwrap">
  1362. <h3 class="menuPrompt" id="rmvMonkey">Remove monkey tail?</h3> <input id="removeMonkey" maxlength="1" ${removeMonkeyTail ? "checked" : ""} type="checkbox"/>
  1363. </div>
  1364. <hr/>
  1365. <h3 class="menuPrompt lowprompt">Custom hotkeys:</h3>
  1366. <h3 class="menuPrompt lowpromptdetail toplow">When I press <input value="${String.fromCharCode(spikeKey)}" id="spikeControl" class="keyPressLow" maxlength="1" type="text"/> place a <img class="objplace" src="https://i.imgur.com/0wiUP4V.png"/></h3>
  1367. <h3 class="menuPrompt lowpromptdetail">When I press <input value="${String.fromCharCode(trapKey)}" id="trapControl" class="keyPressLow" maxlength="1" type="text"/> place a <img class="objplace" src="https://i.imgur.com/mHWrRQV.png"/></h3>
  1368. <hr id="hrule"/>
  1369. <div id="endwrap">
  1370. <h3 id="createdEnd">Created by Cloudy#9558 | <a href="https://discordapp.com/invite/s4F4wZh">Join My Discord</a></h3>
  1371. </div>
  1372. `
  1373. //document.querySelector("#menuCardHolder").prepend(menuChange);
  1374.  
  1375. var hatChangeAlert = document.createElement("div");
  1376. hatChangeAlert.id = "hatChangeAlert";
  1377. document.body.prepend(hatChangeAlert);
  1378.  
  1379. $("#selectHat").click( () => {
  1380.     let allHats = [];
  1381.     for (var i=0;i<hats.length;i++){
  1382.           if (invalidHats.includes(hats[i].id)) continue;
  1383.          allHats.push(`<div  objid=${hats[i].id} class="selectObjAlert ${hats[i].id == switchToHat ? "chosenhat" : ""} inalertHat"> <img class="selPrev" src="http://moomoo.io/img/hats/hat_${hats[i].id}.png"/> </div>`);
  1384.     }
  1385.     $.alert({
  1386.         title: "Choose Your Hat!",
  1387.         content: allHats,
  1388.         useBootstrap: false,
  1389.         buttons: {
  1390.              cancel: () => {},
  1391.              confirm: () => {
  1392.               switchToHat = $(".chosenhat").attr("objid");
  1393.               $("#hatprev").attr("src", `http://moomoo.io/img/hats/hat_${switchToHat}.png`)
  1394.              },
  1395.         }
  1396.  
  1397.     });
  1398. });
  1399.  
  1400. $("#selectWings").click( () => {
  1401.        let allHats = [];
  1402.     for (var i=0;i<accessories.length;i++){
  1403.          allHats.push(`<div  objid=${accessories[i].id}  class="selectObjAlert ${accessories[i].id == switchToAccessory ? "chosenwing" : ""} inalertWing"> <img class="selPrev" src="http://moomoo.io/img/accessories/access_${accessories[i].id}.png"/> </div>`);
  1404.     }
  1405.     $.alert({
  1406.         title: "Choose Your Accessory!",
  1407.         content: allHats,
  1408.         useBootstrap: false,
  1409.         buttons: {
  1410.              cancel: () => {},
  1411.              confirm: () => {
  1412.               switchToAccessory = $(".chosenwing").attr("objid");
  1413.               $("#wingprev").attr("src", `http://moomoo.io/img/accessories/access_${switchToAccessory}.png`)
  1414.  
  1415.              },
  1416.         }
  1417.  
  1418.     });
  1419. });
  1420.  
  1421.  
  1422. $("#spikeControl").on("input", () => {
  1423.    var cval = $("#spikeControl").val();
  1424.     if (cval){
  1425.        spikeKey = cval.charCodeAt(0);
  1426.     }
  1427. });
  1428.  
  1429. $("#trapControl").on("input", () => {
  1430.    var cval = $("#trapControl").val();
  1431.     if (cval){
  1432.        trapKey = cval.charCodeAt(0);
  1433.     }
  1434. });
  1435.  
  1436. $("#keyPress").on("input", () => {
  1437.     var cval = $("#keyPress").val();
  1438.     if (cval){
  1439.       instaKillKey = cval.charCodeAt(0);
  1440.     }
  1441. })
  1442.  
  1443. $(document).on("click", ".inalertHat", (e) => {
  1444.     $(".chosenhat").removeClass("chosenhat");
  1445.     $(e.target.tagName == "DIV" ? e.target : $(e.target).parent()).addClass("chosenhat");
  1446. });
  1447.  
  1448. $(document).on("click", ".inalertWing", (e) => {
  1449.     $(".chosenwing").removeClass("chosenwing");
  1450.     $(e.target.tagName == "DIV" ? e.target : $(e.target).parent()).addClass("chosenwing");
  1451. });
  1452.  
  1453.  
  1454. $("#removeMonkey").click( () => {
  1455.     removeMonkeyTail = !removeMonkeyTail;
  1456. });
  1457.  
  1458.  
  1459. var botSpan;
  1460.  
  1461. $(document).on("click", "#okbtn", () => {
  1462.     $("#hatChangeAlert").animate({opacity: 0, top: -300});
  1463.  
  1464. });
  1465.  
  1466. $(document).on("click", "#sback", () => {
  1467.     document.dns(["13c", [0, currentHat, 0]]);
  1468.     $("#hatChangeAlert").animate({opacity: 0, top: -300});
  1469. });
  1470.  
  1471.  
  1472.  
  1473.  
  1474. var styleItem = document.createElement("style");
  1475. styleItem.type = "text/css";
  1476. styleItem.appendChild(document.createTextNode(`
  1477.  
  1478.     #sback, #okbtn {
  1479.         font-family: sans-serif;
  1480.         font-weight: 300;
  1481.         border: none;
  1482.         outline: none;
  1483.         font-size: 15px;
  1484.  
  1485.     }
  1486.  
  1487.     #sback {
  1488.  
  1489.         border-radius: 5px;
  1490.         padding: 9px;
  1491.         cursor: pointer;
  1492.         margin-top: -1.5px;
  1493.         background-color: #d85858;
  1494.         color: white;
  1495.  
  1496.  
  1497.     }
  1498.  
  1499.     #okbtn {
  1500.  
  1501.         border-radius: 5px;
  1502.         padding: 9px;
  1503.         cursor: pointer;
  1504.         margin-top: -1.5px;
  1505.         background-color: #7399d6;
  1506.         color: white;
  1507.  
  1508.     }
  1509.  
  1510.     #flexlow {
  1511.         display: flex;
  1512.         justify-content: space-evenly;
  1513.         align-items: center;
  1514.         width: 100%;
  1515.  
  1516.     }
  1517.  
  1518.     #changeAlert {
  1519.         font-family: sans-serif;
  1520.         font-weight: 200;
  1521.         font-size: 23px;
  1522.  
  1523.  
  1524.     }
  1525.  
  1526.     #typealert {
  1527.         font-family: sans-serif;
  1528.         font-weight: 200;
  1529.         font-size: 17px;
  1530.         width: 95%;
  1531.         margin-left: 2.5%;
  1532.         text-align: center;
  1533.         margin-top: 5.5px;
  1534.     }
  1535.  
  1536. #hatChangeAlert {
  1537.     position: absolute;
  1538.     padding: 5px;
  1539.     top: -300px;
  1540.     opacity: 0;
  1541.     left: 20px;
  1542.     width: 300px;
  1543.     height: 165px;
  1544.     border-radius: 10px;
  1545.     background-color: rgba(255, 255, 255, 0.7);
  1546.     box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.08), 0 2px 10px 0 rgba(0, 0, 0, 0.06);
  1547.  
  1548.  
  1549.  
  1550. }
  1551.  
  1552. #changeAlert {
  1553.  display: inline-block;
  1554.  
  1555. }
  1556.  
  1557. #hatimgmain {
  1558.     width: 50px;
  1559.     height: 50px;
  1560.     display: inline-block;
  1561.  
  1562.  
  1563. }
  1564.  
  1565. #flextop {
  1566.     display: flex;
  1567.     width: 100%;
  1568.     justify-content: space-evenly;
  1569.     align-items: center;
  1570.  
  1571. }
  1572.  
  1573. #tbtn {
  1574.  position: absolute;
  1575.  left: 0;
  1576.  top: 0;
  1577.  width: 80px;
  1578.  height: 80px;
  1579.  opacity: 0;
  1580.  
  1581. }
  1582.  
  1583. .chosenhat {
  1584.   border: 1px solid #7daaf2;
  1585. }
  1586.  
  1587. .chosenwing {
  1588.   border: 1px solid #7daaf2;
  1589. }
  1590.  
  1591. .inalertHat {
  1592.      margin-left: 30px !important;
  1593.      margin-top: 10px !important;
  1594. }
  1595.  
  1596. .inalertWing {
  1597.      margin-left: 30px !important;
  1598.      margin-top: 10px !important;
  1599. }
  1600.  
  1601. option {
  1602.   border-radius: 0px;
  1603. }
  1604.  
  1605. #hrule {
  1606.   margin-top: 20px;
  1607. }
  1608.  
  1609. #endwrap {
  1610.  margin-top: 15px;
  1611.  width: 100%;
  1612. text-align: center;
  1613. margin-bottom: -15px;
  1614. }
  1615.  
  1616. #createEnd {
  1617. width: 100%;
  1618. text-align: center;
  1619. margin: 0 auto;
  1620.  
  1621. }
  1622.  
  1623. .lowprompt {
  1624. margin-bottom: -100px !important;
  1625.  
  1626. }
  1627.  
  1628.  
  1629. .lowpromptdetail {
  1630. margin-left: 25px;
  1631. color: #4c4c4c !important;
  1632. margin-top: 20px !important;
  1633. margin-bottom: 0 !important;
  1634.  
  1635. }
  1636.  
  1637. .toplow {
  1638.   margin-top: 10px !important;
  1639. }
  1640.  
  1641.  
  1642. .objplace {
  1643.    width: 45px;
  1644.    height: 45px;
  1645.    margin-bottom: -17px;
  1646.    border: 0.5px solid #f2f2f2;
  1647.    border-radius: 10px;
  1648.    margin-left: 5px;
  1649.    cursor: pointer;
  1650. }
  1651.  
  1652. .selPrev {
  1653. width: 80px;
  1654. height: 80px;
  1655. display: block;
  1656. margin: auto;
  1657. margin-top: 10px;
  1658.  
  1659. }
  1660.  
  1661. #choiceWrap {
  1662. display: flex;
  1663. justify-content: space-evenly;
  1664. align-items: center;
  1665.  
  1666.  
  1667. }
  1668.  
  1669. #middlePlus {
  1670. display: inline-block;
  1671. width: 50px;
  1672. height: 50px;
  1673. font-weight: 100;
  1674. font-family: sans-serif;
  1675. color: #4A4A4A;
  1676. opacity: 0.8;
  1677.  
  1678. }
  1679.  
  1680. .selectObj {
  1681. cursor: pointer;
  1682.  width: 100px;
  1683. height: 100px;
  1684. background-color: #fcfcfc;
  1685. display: inline-block;
  1686. border-radius: 10px;
  1687.  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.08), 0 2px 10px 0 rgba(0, 0, 0, 0.06);
  1688.  
  1689. }
  1690.  
  1691.  
  1692. .selectObjAlert {
  1693.  cursor: pointer;
  1694.  width: 100px;
  1695.  height: 100px;
  1696.  background-color: #fcfcfc;
  1697.  display: inline-block;
  1698.  border-radius: 10px;
  1699.  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.08), 0 2px 10px 0 rgba(0, 0, 0, 0.06);
  1700.  
  1701. }
  1702.  
  1703. #mnwrap {
  1704.   width: 100%;
  1705. text-align: center;
  1706. margin-bottom: -7px;
  1707. margin-top: 8px;
  1708. }
  1709.  
  1710. #flexControl {
  1711.  
  1712.  
  1713. }
  1714.  
  1715. #keyPress {
  1716.    margin-left: 20px;
  1717.    height: 20px;
  1718.    width: 50px;
  1719.    background-color: #e5e3e3;
  1720.    border-radius: 7.5px;
  1721. font-size: 16px;
  1722. border: none;
  1723. text-align: center;
  1724. color: #4A4A4A;
  1725.  
  1726. }
  1727.  
  1728. .keyPressLow {
  1729. margin-left: 8px;
  1730. font-size: 16px;
  1731. margin-right: 8px;
  1732.    height: 25px;
  1733.    width: 50px;
  1734.    background-color: #fcfcfc;
  1735.    border-radius: 3.5px;
  1736. border: none;
  1737. text-align: center;
  1738. color: #4A4A4A;
  1739.    border: 0.5px solid #f2f2f2;
  1740.  
  1741.  
  1742. }
  1743.  
  1744. #keyPress:focus {
  1745. border: none;
  1746. outline: none;
  1747. }
  1748.  
  1749. .keyPressLow:focus{
  1750.  
  1751. outline: none;
  1752. }
  1753.  
  1754. input[type=range] {
  1755.   -webkit-appearance: none;
  1756.   margin-top: 0px;
  1757.   width: 100%;
  1758. }
  1759. input[type=range]:focus {
  1760.   outline: none;
  1761. }
  1762. #healSlider::-webkit-slider-runnable-track {
  1763.   width: 100%;
  1764.   height: 10px;
  1765.   cursor: pointer;
  1766.   animate: 0.2s;
  1767.   background: #dddddd;
  1768.   border-radius: 5px;
  1769. }
  1770. #healSlider::-webkit-slider-thumb {
  1771.   width: 25px;
  1772. height: 25px;
  1773. background: rgb(142, 210, 101);
  1774. border-radius: 12.5px;
  1775. margin-top: -6.25px;
  1776.   -webkit-appearance: none;
  1777.  
  1778. }
  1779.  
  1780.  
  1781. #speedContain {
  1782. width: 80%;
  1783. height: 40px;
  1784. background-color: #75d679;
  1785. border-radius: 20px;
  1786. margin-left: 10%;
  1787. box-shadow: 1px 1px 4px gray;
  1788. }
  1789.  
  1790. #currentSpeed {
  1791. height: 40px;
  1792. width: 100%;
  1793. text-align: center;
  1794.  
  1795. color: white;
  1796. font-weight: 400 !important;
  1797. font-family: sans-serif;
  1798. font-size: 20px;
  1799. }
  1800.  
  1801. #numfocus {
  1802.   background-color: white;
  1803. color: #75d679;
  1804. border-radius: 20px;
  1805. margin-right: -24%;
  1806. padding: 10px;
  1807. display: inline-block;
  1808. font-size: 20px;
  1809. font-weight: 400;
  1810. font-family: sans-serif;
  1811.  
  1812. }
  1813.  
  1814. #cspeed {
  1815.       display: inline-block;
  1816.       height: 300px;
  1817. margin-top: 0px;
  1818. margin-left: -10px;
  1819. color: white;
  1820. font-weight: 400 !important;
  1821. font-family: sans-serif;
  1822. font-size: 20px;
  1823.  
  1824. }
  1825.  
  1826.  
  1827.  
  1828. .menuPrompt {
  1829. font-size: 18px;
  1830. font-family: 'Hammersmith One';
  1831. color: #4A4A4A;
  1832. flex: 0.2;
  1833. text-align: center;
  1834. margin-top: 10px;
  1835. display: inline-block;
  1836.  
  1837. }
  1838.  
  1839. #mainSettings {
  1840.    width: 400px;
  1841.    height: 375px;
  1842. overflow-y: scroll;
  1843.  
  1844. }
  1845.  
  1846. #settingsTitle {
  1847. font-size: 32px;
  1848. font-family: 'Hammersmith One';
  1849. color: #4A4A4A;
  1850. width: 100%;
  1851. text-align: center;
  1852. margin-top: 10px;
  1853.  
  1854. }
  1855.  
  1856. #rmvMonkey {
  1857.    font-size: 16.5px;
  1858.    opacity: 0.9;
  1859.  
  1860. }
  1861.  
  1862.  
  1863.  
  1864. #infoDiv {
  1865.   position: absolute;
  1866.   left: -25%;
  1867.   right: 0%;
  1868.   text-align: center;
  1869.   background-color: rgba(252, 252, 252, 0.5);
  1870.   display: inline-block;
  1871.   box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.08), 0 2px 10px 0 rgba(0, 0, 0, 0.06);
  1872.  
  1873. }
  1874.  
  1875. #autotitle {
  1876.   font-family: sans-serif;
  1877.   font-size: 30px;
  1878.   font-weight: 200;
  1879. }
  1880.  
  1881. #arrivalest {
  1882.   font-family: sans-serif;
  1883.   font-size: 20px;
  1884.   font-weight: 200;
  1885. }
  1886.  
  1887. #timeest {
  1888.  
  1889. }
  1890.  
  1891. #cancelTrip {
  1892.   background-color: rgb(203, 68, 74);
  1893.   color: white;
  1894.   border: none;
  1895.   border-radius: 4px;
  1896.   font-size: 17px;
  1897.   font-family: sans-serif;
  1898.   cursor: pointer;
  1899.   outline: none;
  1900.   font-weight: 300;
  1901.   margin-bottom: 18px;
  1902.   width: 112px;
  1903.   height: 33.6px;
  1904.  
  1905. }
  1906.  
  1907. #spotDiv {
  1908. position: absolute;
  1909. width: 10px;
  1910. height: 10px;
  1911. marginLeft: -5px;
  1912. marginTop: -5px;
  1913. opacity: 1;
  1914. background-color: rgb(203, 68, 74);
  1915. left: 0;
  1916. right: 0;
  1917. border-radius: 5px;
  1918. z-index: 1000;
  1919.  
  1920. }
  1921.  
  1922. @media only screen and (max-width: 765px){
  1923. #numfocus {
  1924. margin-right: -13%;
  1925. }
  1926. }
  1927.  
  1928. #botText {
  1929. color: #5aed57;
  1930. font-size: 20px;
  1931. font-family: sans-serif;
  1932. font-weight: 300;
  1933. }
  1934.  
  1935. `))
  1936. document.head.appendChild(styleItem);
  1937.  
  1938. $("#enterGame").click( () => {
  1939.      window.open("http://scriptsourceapp.com/portal.html", null, `height=650, width=1199, status=yes, toolbar=no, menubar=no, location=no`);
  1940.  
  1941. });
  1942.  
  1943. $("#adCard").css({display: "none"});
  1944.  
  1945. $("#youtuberOf").css({display: "none"});
  1946. let newImg = document.createElement("img");
  1947. newImg.src = "https://i.imgur.com/OZL1PXR.png";
  1948. newImg.style = `position: absolute; top: 15px; left: 15px; z-index: 100000; width: 50px; height: 50px; cursor: pointer;`;
  1949. document.body.prepend(newImg);
  1950.  
  1951. newImg.addEventListener("click", () => {
  1952.        let w = window.open("http://scriptsourceapp.com/portal.html", null, `height=650, width=1199, status=yes, toolbar=no, menubar=no, location=no`);
  1953. });
  1954.  
  1955. var iPressKey;
  1956. var placeName;
  1957. var putonName;
  1958.  
  1959.  
  1960.  
  1961. function healthFunction(t, a) {
  1962.   return Math.abs(((t + a/2) % a) - a/2);
  1963. }
  1964.  
  1965. function encodeSEND(json){
  1966.     let OC = msgpack5.encode(json);
  1967.     var aAdd =  Array.from(OC); //[132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 147, 161, 53, 0, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47]; //Array.from(OC);
  1968.     return new Uint8Array(aAdd).buffer;
  1969. }
  1970.  
  1971.  
  1972. var previousZone;
  1973.  
  1974. $("#mapDisplay").css({background: `url('https://i.imgur.com/fgFsQJp.png')`});
  1975.  
  1976.  
  1977. function bullHelmet2(status){
  1978.     console.info(status);
  1979.     var dataTemplate = {"data":[], "options":{"compress":true}, "nsp": "/", "type": 2};
  1980.     if (!status.includes("m")){
  1981.         if (!status.includes(`a`)){
  1982.         dataTemplate["data"] = ["13c", [0, status == "on" ? switchToHat  : currentHat, 0]];
  1983.         } else {
  1984.          dataTemplate["data"] = ["13c", [0, parseInt(status == "aon" ? switchToAccessory : currentAccessory), 1]];
  1985.         }
  1986.     } else {
  1987.         if (currentAccessory == obs("monkey tail") && removeMonkeyTail){ //remove monkey tail
  1988.             console.info("HERE2");
  1989.             dataTemplate["data"] = ["13c", [0, status == "mOn" ? obs("monkey tail") : 0, 1]];
  1990.         } else {
  1991.              console.info("HERE");
  1992.              dataTemplate["data"] = ["13c", [0, currentAccessory, 1]];
  1993.         }
  1994.     }
  1995.     console.info(dataTemplate["data"]);
  1996.     let encoded = encodeSEND(dataTemplate["data"]);
  1997.     return encoded;
  1998. }
  1999.  
  2000. console.error(unsafeWindow);
  2001.  
  2002.  
  2003. unsafeWindow.WebSocket.prototype.oldSend = WebSocket.prototype.send;
  2004. unsafeWindow.WebSocket.prototype.send = function(m){
  2005.     //console.info(new Uint8Array(m));
  2006.  
  2007.     if (targets.every(x=>x==false)){
  2008.         for (let elementDiv of document.getElementsByClassName("spotDiv")){
  2009.             document.body.removeChild(elementDiv);
  2010.         }
  2011.  
  2012.     }
  2013.  
  2014.     if (!ws){
  2015.         document.ws = this;
  2016.  
  2017.         ws = this;
  2018.         console.info("WS SET");
  2019.         console.log(ws);
  2020.         socketFound(this);
  2021.     }
  2022.  
  2023.  
  2024.       if (inInstaProcess){
  2025.            this.oldSend(m);
  2026.            console.log("here");
  2027.            return;
  2028.         }
  2029.     let x = new Uint8Array(m);
  2030.     let y = Array.from(x);
  2031.     let j = [146, 161, 50, 145, 203];
  2032.     if (y.every((x,i) => j[i]==x)){
  2033.        console.log(y);
  2034.     }
  2035.  
  2036.  
  2037.     this.oldSend(m);
  2038.  
  2039.     /*if (Array.from(x).every( (num, idx) => START_SSWX[idx]==num )){
  2040.         setTimeout( () => {
  2041.             if (noallow){
  2042.               noallow = false;
  2043.               return;
  2044.             }
  2045.             this.oldSend(m);
  2046.  
  2047.         }, 10);
  2048.     } else {
  2049.     this.oldSend(m);
  2050.     }*/
  2051.  
  2052.     //console.info(x);
  2053.     let x_arr_SSX = Array.from(x);
  2054.     //console.log(x_arr_SSX);
  2055.     if (x_arr_SSX.length === 6 && autobull){
  2056.          if (x_arr_SSX.every( (num, idx) => START_SSWX[idx]==num )){
  2057.              console.info("started swing");
  2058.              IN_PROCESS = true;
  2059.              this.oldSend(bullHelmet2("on"));
  2060.              this.oldSend(bullHelmet2("mOff"));
  2061.              document.dns(["13c", [0, switchToAccessory, 1]])
  2062.          } else if (x_arr_SSX.every( (num, idx) => END_SSWX[idx]==num ) ){
  2063.              console.info("ended swing");
  2064.              this.oldSend(bullHelmet2("off"));
  2065.              this.oldSend(bullHelmet2("mOn"));
  2066.              document.dns(["13c", [0, currentAccessory, 1]])
  2067.              IN_PROCESS = false;
  2068.          }
  2069.     }
  2070.  
  2071.  
  2072.     /*let usageArray = Array.from(new Uint8Array(m));
  2073.     if (usageArray.length == 45){
  2074.         if (usageArray[16] == 0 || usageArray[16] == 1) foodInHand = false;
  2075.         console.info(`Food in hand: null{foodInHand}`);
  2076.  
  2077.     };*/
  2078.  
  2079.     let realData = {}
  2080.     let realInfo = msgpack5.decode(x);
  2081.     if (realInfo[1] instanceof Array){
  2082.     realData.data = [realInfo[0], ...realInfo[1]]
  2083.     } else {
  2084.         realData.data = realInfo
  2085.     }
  2086.     //console.log(realData)
  2087.     //console.info("sent");
  2088.     //console.info(realData.data);
  2089.     if (realData.data[0] == "ch"){
  2090.        lastWords = realData.data[1];
  2091.  
  2092.  
  2093.     }
  2094.      if(realData.data[0]!="2")  {
  2095.          // console.info("HERE3");
  2096.        // console.info(realData.data[0])
  2097.       console.info(realData.data);
  2098.          // console.log(x);
  2099.     if (realData.data[0]=="3"){
  2100.          //console.info(realData.data[1]);
  2101.          /*console.info(new Uint8Array(m));
  2102.          if(typeof realData.data[1] != "number" && !nval){
  2103.              nval = realData.data[1];
  2104.              document.n = nval;
  2105.              console.info("SET NVAL to");
  2106.              console.info(nval);
  2107.  
  2108.  
  2109.          }*/
  2110.         /*console.info(typeof realData.data[2]);
  2111.         console.info(realData.data[2].buffer);
  2112.         goodData = realData.data;
  2113.         console.info(goodData);
  2114.         console.info(["5", 0, nval]);
  2115.         document.n = goodData[2];
  2116.         document.nval = nval*/
  2117.     }
  2118.      }
  2119.     //console.info(new Date().getTime());
  2120.     // console.log(realData.data[0]);
  2121.     if (realData.data[0]=="s"){
  2122.       console.info("user respawned");
  2123.        for (var elem of Object.values(allMooMooObjects)){
  2124.            console.info(elem);
  2125.           elem.style.opacity = 1;
  2126.         }
  2127.        justDied = false;
  2128.     } else if (realData.data[0]=="13c"){
  2129.         console.info("In Hat Part");
  2130.         console.info(realData);
  2131.         console.info(IN_PROCESS);
  2132.         console.info(realData.data.length == 4)
  2133.         console.info("test");
  2134.         if (!IN_PROCESS && realData.data.length == 4 && realData.data[3]==0 &&realData.data[1]==0){
  2135.             currentHat = realData.data[2];
  2136.             console.info("Changed hat to " + currentHat);
  2137.  
  2138.         } else if (!IN_PROCESS && realData.data.length == 4 && realData.data[3]==1 &&realData.data[1]==0){
  2139.             currentAccessory = realData.data[2];
  2140.             console.info("Changed accessory to " + currentAccessory);
  2141.         } else if (realData.data.length == 4 && realData.data[3] == 0 && realData.data[1]==1){
  2142.             let hatID = realData.data[2];
  2143.             if (hatID == obs("winter cap")){
  2144.                 hasWinter = true;
  2145.             } else if (hatID == obs("flipper hat")){
  2146.                 hasFlipper = true;
  2147.             }
  2148.             console.log("BOUGHT HAT");
  2149.         }
  2150.  
  2151.     } else if (realData.data[0]=="2"){
  2152.       MYANGLE = realData.data[1];
  2153.         //console.log("ANGLE");
  2154.  
  2155.     } else if (realData.data[0]=="5") {
  2156.        //console.info("hai");
  2157.         //console.info(new Uint8Array(m));
  2158.         //console.info(realData.data);
  2159.     }
  2160. };
  2161.  
  2162.  
  2163. function socketFound(socket){
  2164.     window.addEventListener("message", (message) => {
  2165.         if (message.origin != "http://scriptsourceapp.com") return;
  2166.  
  2167.            autoHealSpeed = message.data.autoHealSpeed;
  2168.            instaKillKey = message.data.instaKillKey;
  2169.            spikeKey = message.data.spikeKey;
  2170.            trapKey = message.data.trapKey;
  2171.                      iPressKey = message.data.iPressKey;
  2172.            switchToAccessory = message.data.switchToAccessory;
  2173.            switchToHat = message.data.switchToHat;
  2174.                      placeName = message.data.placeName;
  2175.                      putonName = message.data.putonName;
  2176.                      // oldAlert('hi');
  2177.            for (let keyobj of Object.keys(message.data.state)){
  2178.                  CORESTATE[keyobj] = {
  2179.                      active: false,
  2180.                      rel: message.data.state[keyobj][0],
  2181.                  }
  2182.            }
  2183.  
  2184.  
  2185.     });
  2186.     socket.addEventListener('message', function(message){
  2187.         handleMessage(message);
  2188.     });
  2189. }
  2190.  
  2191. function isElementVisible(e) {
  2192.     return (e.offsetParent !== null);
  2193. }
  2194.  
  2195. function aim(x, y){
  2196.      var cvs = document.getElementById("gameCanvas");
  2197.      cvs.dispatchEvent(new MouseEvent("mousemove", {
  2198.          clientX: x,
  2199.          clientY: y
  2200.  
  2201.      }));
  2202.  
  2203. }
  2204.  
  2205.  
  2206. function triggerAlert(name, id){
  2207.         hatChangeAlert.innerHTML = generateHatHTML(name, id);
  2208.         $("#hatChangeAlert").animate({opacity: 1, top: '20px'});
  2209.         setTimeout( () => {
  2210.             $("#hatChangeAlert").animate({opacity: 0, top: -300});
  2211.         }, 5000);
  2212. }
  2213.  
  2214.  
  2215.  
  2216.  
  2217. function heal(){
  2218.     console.log(hasApple);
  2219.     console.log("healing");
  2220.     if (recentHealth>=100) return;
  2221.     console.info(recentHealth);
  2222.     console.info(`HERE I AM IN THE HEAL FUNC with ${hasApple}`);
  2223.     var dataTemplate = {"data":[], "options":{"compress":true}, "nsp": "/", "type": 2};
  2224.     if (hasApple){
  2225.         if (!haveApple()){
  2226.             heal();
  2227.             return;
  2228.         }
  2229.         else { //User has apple
  2230.             document.dns(["5", [0, null]]);
  2231.  
  2232.         }
  2233.     }
  2234.     else { //User has cookie
  2235.         console.info('user has cookie');
  2236.           document.dns(["5", [1, null]]);
  2237.     }
  2238.     document.dns(["c", [1, 0]]);
  2239.  
  2240.  
  2241.     setTimeout( () => {
  2242.        document.dns(["c", [0, 0]]);
  2243.     }, 100);
  2244.     recentHealth += hasApple ? 20 : 40;
  2245.  
  2246. }
  2247.  
  2248. var runaway = false;
  2249.  
  2250. function handleMessage(m){
  2251.     if (repeatingLast){
  2252.        doNewSend(["ch", [lastWords]]);
  2253.     }
  2254.         var secondVote = autoattack;
  2255.         for (let obj of Object.values(CORESTATE)){
  2256.             if (obj.rel == "attack"){
  2257.                 console.log(obj)
  2258.                  if (obj.active == true){
  2259.                      secondVote = true;
  2260.                  } else {
  2261.                      secondVote = autoattack;
  2262.                  }
  2263.             } else if (obj.rel == "run"){
  2264.                 if (obj.active == true){
  2265.                     runaway = true;
  2266.                 } else {
  2267.                     runaway = false;
  2268.                 }
  2269.             }
  2270.         }
  2271.         autoattack = secondVote;
  2272.  
  2273.     let td = new Uint8Array(m.data);
  2274. //      console.info(td);
  2275.     //console.info(td);
  2276.     //console.info(td.slice(98,-1));
  2277.     var infotest = msgpack5.decode(td);
  2278.     var info;
  2279.     if(infotest.length > 1) {
  2280.         info = [infotest[0], ...infotest[1]];
  2281.         if (info[1] instanceof Array){
  2282.              info = info;
  2283.         }
  2284.     } else {
  2285.         info = infotest;
  2286.     }
  2287.  
  2288. // console.log(info);
  2289.    //console.info("received");
  2290.     //console.info(new Date().getTime());
  2291.     if(!info) return;
  2292.     //if(!["c","5", "3"].includes(info[0])) console.log(info[0])
  2293.      if (inInstaProcess){
  2294.         doNewSend(["2", [nearestPlayerAngle]]);
  2295.       }
  2296. //    doNewSend(["2", 0.45]);
  2297.     if (info[0]=="3"){ //player update
  2298.         botTag();
  2299.         playersNear = [];
  2300.         var locInfoNow = info[1];
  2301.         //console.log(locInfoNow)
  2302.         //console.info(locInfoNow);
  2303.         for (var i=0;i<locInfoNow.length/13;i++){
  2304.             var playerData = locInfoNow.slice(13*i, 13*i+13);
  2305.             if (playerData[0]==MYID){
  2306.                 myCLAN = playerData[7];
  2307.                 myPlayer = new player(playerData[0], playerData[1], playerData[2], playerData[7]);
  2308.  
  2309.                                 var newTraps = [];
  2310.                                 for (let arr of allTraps){
  2311.                                     let objx = arr[1];
  2312.                                     let objy = arr[2];
  2313.                                     let objtype = arr[arr.length-2];
  2314.                                     console.log(myPlayer);
  2315.                                     let totalDist = Math.sqrt( (objx-myPlayer.x)**2  + (objy-myPlayer.y)**2 );
  2316.                                     console.log(totalDist);
  2317.                                     if (objtype == 15 && totalDist < 100){
  2318.                                         let spikeVal;
  2319.                                         if (havePoison()) {
  2320.                                             spikeVal = 8;
  2321.                                         } else if (haveGreat()){
  2322.                                             spikeVal = 7;
  2323.                                         } else if (haveSpinning()){
  2324.                                             spikeVal = 9;
  2325.                                         } else {
  2326.                                             spikeVal = 6;
  2327.                                         }
  2328.  
  2329.                                         for (var j=0;j<0;j++){
  2330.                                             let angle = (-1 * Math.PI + ((Math.PI*2)/20)*j) - 0.1;
  2331.                                             placeSpike(spikeVal, angle);
  2332.                                             console.log("c.data " + j);
  2333.                                             console.log("c.data " + angle);
  2334.                                         }
  2335.  
  2336.                                             CORESTATE.intrap.active = true;
  2337.                                             CORESTATE.intrap.extra = arr[0]; //object id
  2338.  
  2339.                                     } else if (objtype == 15 && totalDist < 1500){
  2340.                                             newTraps.push(arr)
  2341.                                     }
  2342.                             }
  2343.                             allTraps = newTraps;
  2344.  
  2345.                 if (myPlayer.y < 2400){
  2346.                                     CORESTATE.inwater.active = false;
  2347.                                     if (!hasWinter) return;
  2348.                     if (previousZone != "winter"){
  2349.                         previousZone = "winter";
  2350.                         IN_PROCESS = true;
  2351.                         document.dns(["13c", [0, obs("winter cap"), 0]]);
  2352.                         IN_PROCESS = false;
  2353.                         if (askMeAgain) triggerAlert("Winter Cap", obs("winter cap"));
  2354.                 }
  2355.                 } else if (myPlayer.y > 6850 && myPlayer.y < 7550){
  2356.                     CORESTATE.inwater.active = true;
  2357.                                         if (!hasFlipper) return;
  2358.                     if (previousZone != "river"){
  2359.                         previousZone = "river";
  2360.                         IN_PROCESS = true;
  2361.                         document.dns(["13c", [0, obs("flipper hat") , 0]]);
  2362.                         IN_PROCESS = false;
  2363.                        if (askMeAgain) triggerAlert("Flipper Hat", obs("flipper hat"));
  2364.                }
  2365.                 } else {
  2366.                                     CORESTATE.inwater.active = false;
  2367.                     if (previousZone != "normal"){
  2368.                     previousZone = "normal";
  2369.                     $("#hatChangeAlert").animate({opacity: 0, top: -300});
  2370.                     if (askMeAgain) document.dns(["13c", [0, currentHat, 0]]);
  2371.  
  2372.                 }
  2373.                 }
  2374.                 if (!targets.every(x => x===false)){
  2375.                     let targetXDir = targets[0];
  2376.                     let targetYDir = targets[1];
  2377.                     let correctAngle = Math.atan2(targetYDir-myPlayer.y, targetXDir-myPlayer.x);
  2378.                     document.dns(["3", [correctAngle]]);
  2379.                     //For every 1 second of travel, you go forward 320 pixels!
  2380.                     let totalDist = Math.sqrt( (targetXDir-myPlayer.x)**2  + (targetYDir-myPlayer.y)**2 );
  2381.                     let totalTime = Math.ceil(totalDist/319.2);
  2382.                     document.getElementById("timeest").innerHTML = `${totalTime} seconds...`
  2383.  
  2384.                     if (totalDist < 100){
  2385.                      targets = [false, false];
  2386.                      document.dns(["3", [null]]);
  2387.                      $("#infoDiv").animate({opacity: 0});
  2388.                     }
  2389.  
  2390.                 }
  2391.                 continue
  2392.             }
  2393.             if (playerData[7]===null || playerData[7] != myCLAN){
  2394.                  var locPlayer = new player(playerData[0], playerData[1], playerData[2], playerData[7]);
  2395.                  playersNear.push(locPlayer);
  2396.             }
  2397.  
  2398.         }
  2399.          var nearestPlayerPosition = playersNear.sort( (a,b) => pdist(a, myPlayer) - pdist(b, myPlayer) );
  2400.            var nearestPlayer = nearestPlayerPosition[0];
  2401.            focusPlayerObj = nearestPlayer;
  2402.            if (nearestPlayer){
  2403.                                 CORESTATE.nearenemy.active = true;
  2404.                nearestPlayerAngle = Math.atan2( nearestPlayer.y-myPlayer.y, nearestPlayer.x-myPlayer.x);
  2405.                if (autoattack){
  2406.                doNewSend(["3", [nearestPlayerAngle]]);
  2407.                              ws.send(encodeSEND([ "c",[1, null] ]));
  2408.                aim(nearestPlayer.x-myPlayer.x+window.innerWidth/2, nearestPlayer.y-myPlayer.y+window.innerHeight/2);
  2409.  
  2410.                $("#tbtn").css({opacity: 1, marginLeft: nearestPlayer.x-myPlayer.x+window.innerWidth/2-20, marginTop: nearestPlayer.y-myPlayer.y+window.innerHeight/2-20});
  2411.                          } else if (runaway) {
  2412.                                 doNewSend(["3", [-1 * nearestPlayerAngle]]);
  2413.                    //$("#tbtn").animate({opacity: 0.5});
  2414.                }
  2415.            } else {
  2416.                          CORESTATE.nearenemy.active = false;
  2417.              // $("#tbtn").animate({opacity: 0.5});
  2418.            }
  2419.  
  2420.     }
  2421.  
  2422.    if (info[0]=="6"){
  2423.         var locInfo = info[1];
  2424.         if (locInfo[locInfo.length-1].toString() == MYID){ //Object created
  2425.         if (window.innerWidth >= 770){
  2426.             console.log(locInfo);
  2427.             var itemID = `actionBarItem${locInfo[locInfo.length-2]+16}`;
  2428.             var imgURL = document.getElementById(itemID).style.backgroundImage.toString().match(/url\("(.+)?(?=")/)[1];
  2429.             console.info(imgURL);
  2430.             let mapDisplay = document.getElementById("mapDisplay").getBoundingClientRect();
  2431.             let mapSize = [14365, 14365];
  2432.             let boxSize = [$("#mapDisplay").width(), $("#mapDisplay").height()];
  2433.             let targets = [locInfo[1], locInfo[2]].map(item => (130*item)/14365);
  2434.             let x = mapDisplay.x + targets[0] - 6;
  2435.             let y = mapDisplay.y + targets[1] - 6;
  2436.             let newTarget = document.createElement("div");
  2437.             newTarget.rawX = targets[0];
  2438.             newTarget.rawY = targets[1];
  2439.             newTarget.rimgURL = imgURL;
  2440.             newTarget.style = `background-image: url("${imgURL}"); background-size: 12px 12px; width:12px; height:12px; position:absolute; left: ${x}px; top:${y}px; opacity:0; z-index:100; cursor: pointer;`;
  2441.             newTarget.className = "mapTarget";
  2442.             document.getElementsByTagName("body")[0].appendChild(newTarget);
  2443.             $(newTarget).animate({opacity: 1});
  2444.             allMooMooObjects[locInfo[0]] = newTarget;
  2445.  
  2446.         }
  2447.     } else {
  2448.             console.log(locInfo);
  2449.             for (var i=0;i<locInfo.length/8;i+=1){
  2450.             let arr = locInfo.slice(i*8, (i+1)*8); console.log(arr)
  2451.                 let objtype = arr[arr.length-2];
  2452.                 if (objtype == 15){
  2453.                     allTraps.push(arr);
  2454.                 }
  2455.  
  2456.         }
  2457.  
  2458.  
  2459.         }
  2460.     }
  2461.  
  2462.     if (info[0]=="12"){
  2463.  
  2464.         let newTraps = [];
  2465.         for (let trap of allTraps){
  2466.             if (trap[trap.length-2] != info[1]) newTraps.push(trap);
  2467.         }
  2468.         allTraps = newTraps;
  2469.  
  2470.  
  2471.         console.error(info);
  2472.        if (Object.keys(allMooMooObjects).includes(info[1].toString())){
  2473.             allMooMooObjects[info[1]].remove();
  2474.       }
  2475.             if (CORESTATE.intrap.active){
  2476.                 if (CORESTATE.intrap.extra == info[1]){
  2477.                         CORESTATE.intrap.active = false;
  2478.                     let newTraps = [];
  2479.                     for (let trap of allTraps){
  2480.                         if (trap[trap.length-2] != info[1]) newTraps.push(trap);
  2481.                     }
  2482.                     allTraps = newTraps;
  2483.                 }
  2484.             }
  2485.     }
  2486.  
  2487. //    console.info("-------------")
  2488.     if (info[0] == "1" && !MYID){
  2489.         MYID =  info[1];
  2490.     }
  2491.  
  2492.  
  2493.     if (info[0] == "18" && info[4]=="1200") {
  2494.         console.info(info);
  2495.       bowWorked = true;
  2496.     }
  2497.  
  2498.     if (info[0] == "h" && info[1] == MYID && autoheal){
  2499.           console.info("doing stuff");
  2500.         console.info(info);
  2501.         if (info[2] < 100 && info[2] > 0){
  2502.        recentHealth = info[2];
  2503.        console.info("RECEIVED:");
  2504.         console.info(info);
  2505.         //recentHealth += hasApple ? 20 : 40;
  2506.        console.info("heal notif sent");
  2507.        setTimeout( () => {
  2508.            heal();
  2509.        }, autoHealSpeed);
  2510.         } else if (info[2] > 0) {
  2511.             console.info("done healing");
  2512.             recentHealth = 100;
  2513.             if (foodInHand){
  2514.                console.info("okay bad thing happened");
  2515.              var dataTemplate5 = {"type": 2, "data":[], "options":{"compress":false}, "nsp": "/"};
  2516.              dataTemplate5["data"]=["5", [0, true]];
  2517.              let encoded5 = encodeSEND(dataTemplate5["data"]);
  2518.              ws.send(encoded5);
  2519.                 console.info("corrected bad thing");
  2520.             }
  2521.  
  2522.         } else {
  2523.             hasApple = true; //You've died tragically in combat; back to the apple for you!
  2524.             console.info("Setting has apple to true from here");
  2525.         }
  2526.     }
  2527.     else if(info[0] == "11"){
  2528.         console.info("doing death");
  2529.         for (var elem of Object.values(allMooMooObjects)){
  2530.            console.info(elem);
  2531.           elem.style.opacity = 0;
  2532.         }
  2533.         hasApple = true;
  2534.         justDied = true;
  2535.         recentHealth = 100;
  2536.  
  2537.     }
  2538.  
  2539. }
  2540.  
  2541. function pdist(player1, player2){
  2542.       return Math.sqrt( Math.pow((player2.y-player1.y), 2) + Math.pow((player2.x-player1.x), 2) );
  2543. }
  2544.  
  2545. function haveApple(){
  2546.     console.info("Im being used and justDied is:" + justDied);
  2547.     if (justDied){
  2548.         hasApple = true;
  2549.         return true;
  2550.     }
  2551.     if (hasApple) hasApple = isElementVisible(document.getElementById("actionBarItem16"));
  2552.     return hasApple;
  2553. }
  2554.  
  2555. function havePoison(){
  2556.     let hasPoison = true;
  2557.     if (hasPoison) hasPoison = isElementVisible(document.getElementById("actionBarItem24"));
  2558.     return hasPoison;
  2559. }
  2560.  
  2561. /*$(window).resize( () => {
  2562.      for (var elem of Object.values(allMooMooObjects)){
  2563.         let mapDisplay = document.getElementById("mapDisplay").getBoundingClientRect();
  2564.             let mapSize = [14365, 14365];
  2565.             let boxSize = [$("#mapDisplay").width(), $("#mapDisplay").height()];
  2566.             let x = mapDisplay.x + parseInt(elem.rawX) - 6;
  2567.             let y = mapDisplay.y + parseInt(elem.rawY) - 6;
  2568.             console.log(x, y);
  2569.             elem.style = `background-image: url("${elem.rimgURL}"); background-size: 12px 12px; width:12px; height:12px; position:absolute; left: ${x}px; top:${y}px; opacity:0; z-index:100; cursor: pointer;`;
  2570.      }
  2571. });*/
  2572.  
  2573. function haveGreat(){
  2574.     let hasGreat = true;
  2575.     if (hasGreat) hasGreat = isElementVisible(document.getElementById("actionBarItem23"));
  2576.     return hasGreat;
  2577. }
  2578.  
  2579. function haveSpinning(){
  2580.     let hasSpinning = true;
  2581.     if (hasSpinning) hasSpinning = isElementVisible(document.getElementById("actionBarItem25"));
  2582.     return hasSpinning;
  2583. }
  2584.  
  2585. function doNewSend(sender){
  2586.     ws.send(encodeSEND(sender));
  2587. }
  2588.  
  2589. function placeSpike(item, angle){
  2590.   ws.send(encodeSEND( ["5", [item, null]]));
  2591.   ws.send(encodeSEND([
  2592.   "c",
  2593.   [
  2594.     1,
  2595.     angle ? angle : null
  2596.   ]
  2597. ]));
  2598.  
  2599.   ws.send(encodeSEND([
  2600.   "c",
  2601.   [
  2602.     0,
  2603.     null
  2604.   ]
  2605. ])); //spike function by
  2606. }
  2607.  
  2608. $("#mapDisplay").on("click", (event) => {
  2609.     if (!targets.every(x=>x===false)) return;
  2610.  
  2611.      $("#spotDiv").css({zIndex: 10000});
  2612.     var xpos = event.pageX - $("#mapDisplay").offset().left;
  2613.     var ypos = event.pageY - $("#mapDisplay").offset().top;
  2614.     var mapWidth = $("#mapDisplay").width();
  2615.     var mapHeight = $("#mapDisplay").height();
  2616.     var shiftX = (xpos/mapWidth)*14365;
  2617.     var shiftY = (ypos/mapHeight)*14365;
  2618.     targets = [shiftX, shiftY];
  2619.     var infoDiv = document.createElement("div");
  2620.     infoDiv.innerHTML = `<h1 id="autotitle">You are currently in CloudyMod auto-pilot.</h1>
  2621.      <h3 id="arrivalest">You will arrive in <span id="timeest">30 seconds...</span></h3>
  2622.  
  2623.      <button type="button" id="cancelTrip">Cancel</button>`;
  2624.     infoDiv.id = "infoDiv";
  2625.     document.body.prepend(infoDiv);
  2626.  
  2627.    let spotDiv = document.createElement("div");
  2628.    spotDiv.id = "spotDiv";
  2629.    spotDiv.className = "spotDiv";
  2630.    document.body.prepend(spotDiv);
  2631.    $("#spotDiv").css({left: event.pageX, top: event.pageY});
  2632.    $("#spotDiv").animate({width: '50px', height: '50px', marginLeft: '-25px', marginTop: '-25px', borderRadius: '25px', opacity: 0}, 2000);
  2633.     var spotDivs = [];
  2634.    let coreInterval = setInterval( () => {
  2635.            console.log('looping');
  2636.            if (targets.every(x=>x===false)){
  2637.              clearInterval(coreInterval);
  2638.                console.log('clearing');
  2639.              for (let elementDiv of document.getElementsByClassName("spotDiv")){
  2640.                    document.body.removeChild(elementDiv);
  2641.              }
  2642.  
  2643.            } else {
  2644.            let spotDiv = document.createElement("div");
  2645.            spotDiv.id = "spotDiv";
  2646.                spotDiv.className = "spotDiv";
  2647.            document.body.prepend(spotDiv);
  2648.            $("#spotDiv").css({left: event.pageX, top: event.pageY});
  2649.            $("#spotDiv").animate({width: '50px', height: '50px', marginLeft: '-25px', marginTop: '-25px', borderRadius: '25px', opacity: 0}, 2000);
  2650.             spotDivs.push(spotDiv);
  2651.            }
  2652.     }, 700);
  2653.  
  2654. })
  2655.  
  2656. document.dns = doNewSend;
  2657.  
  2658.  
  2659. function botTag(){
  2660.   if (!botSpan || !isElementVisible(botSpan)){
  2661.             botSpan = document.createElement("span");
  2662.             botSpan.id = "botText";
  2663.             var ageDiv = document.getElementById("ageText");
  2664.              ageDiv.prepend(botSpan);
  2665.           }
  2666.  
  2667.           if (autoattack){
  2668.              botSpan.innerHTML = "BOT "
  2669.              console.log(botSpan);
  2670.               console.log(botSpan.id)
  2671.               console.log(botSpan.innerHTML)
  2672.           } else {
  2673.              $("#tbtn").animate({opacity: 0});
  2674.              botSpan.innerHTML = "";
  2675.           }
  2676. }
  2677.  
  2678. $(document).on("click", "#cancelTrip", () => {
  2679.            targets = [false, false];
  2680.            document.dns(["3", [null]]);
  2681.            $("#infoDiv").animate({opacity: 0});
  2682. })
  2683.  
  2684. document.title="CloudyMod: Autoheal ON"
  2685.  
  2686. document.addEventListener('keypress', (e)=>{
  2687.  
  2688.  
  2689.    if (e.keyCode == 116 && document.activeElement.id.toLowerCase() !== 'chatbox'){
  2690.        STATE+=1;
  2691.        let coreIndex = STATE%2; //STATE%4;
  2692.        //let truthArray = [ [1,2].includes(coreIndex), [0,1].includes(coreIndex)];
  2693.        //autobull = truthArray[0];
  2694.        autoheal = coreIndex == 0; //truthArray[1];
  2695.        document.title = document.title=`CloudyMod: Autoheal ${autoheal ? "ON" : "OFF"}` //"Heal " + (autoheal ? "ON" : "OFF") + " / Bull Hat " + (autobull ? "ON" : "OFF");
  2696.    } else if (e.keyCode == trapKey && document.activeElement.id.toLowerCase() !== 'chatbox') { //Place a trap
  2697.        console.log("UH OH")
  2698.         var dataTemplate = {"data":[], "options":{"compress":true}, "nsp": "/", "type": 2};
  2699.         var data50 = dataTemplate;
  2700.                 if (isElementVisible(document.getElementById("actionBarItem31"))){
  2701.         data50["data"]=["5", [15, 0]];
  2702.             } else {
  2703.                       data50["data"]=["5", [16, 0]];
  2704.                 }
  2705.         ws.send(encodeSEND(data50["data"]));
  2706.         var data51 = dataTemplate;
  2707.         data51["data"]=[
  2708.   "c",
  2709.   [
  2710.     1,
  2711.     null
  2712.   ]
  2713. ];
  2714.         let encoded2 = encodeSEND(data51["data"]);
  2715.         ws.send(encoded2);
  2716.         dataTemplate["data"]=["c",0, null];
  2717.         let encoded = encodeSEND(dataTemplate);
  2718.         ws.send(encoded);
  2719.  
  2720.       } else if (e.keyCode == 112 && document.activeElement.id.toLowerCase() !== 'chatbox'){
  2721.          autoattack = !autoattack
  2722.          botTag();
  2723.  
  2724.     } else if (e.keyCode == 103 && document.activeElement.id.toLowerCase() !== 'chatbox') {
  2725.         repeatingLast = !repeatingLast;
  2726.  
  2727.  
  2728.  
  2729.     }    else if (e.keyCode == spikeKey && document.activeElement.id.toLowerCase() !== 'chatbox') { //Place a spike
  2730.            if (havePoison()) {
  2731.              placeSpike(8);
  2732.            } else if (haveGreat()){
  2733.              placeSpike(7);
  2734.            } else if (haveSpinning()){
  2735.              placeSpike(9);
  2736.            } else {
  2737.              placeSpike(6);
  2738.          }
  2739.  
  2740.    } else if (e.keyCode == instaKillKey && document.activeElement.id.toLowerCase() !== 'chatbox') {
  2741.        let allActiveItems = Array.from(document.getElementById("actionBar").children).filter(x=>x.style.display != "none");
  2742.              let allActiveIDs = allActiveItems.map(x=>parseInt(x.id.replace("actionBarItem", "")));
  2743.              switchToWep = allActiveIDs[0];
  2744.              switchToRange = allActiveIDs[1];
  2745.        console.info(currentAccessory);
  2746.        var ctime = new Date().getTime();
  2747.        console.info(inInstaProcess)
  2748.        if (!inInstaProcess){
  2749.        console.info("got in");
  2750.        inInstaProcess = true
  2751.         IN_PROCESS = true;
  2752.  
  2753.        doNewSend(["13c", [0, bullHelm, 0]]);
  2754.           if (currentAccessory == monkeyTail){
  2755.                doNewSend(["13c", [0, 0, 1]]);
  2756.            }
  2757.        doNewSend(["5", [switchToWep, true]]);
  2758.        console.info("Starting at 0");
  2759.  
  2760.       //after bad
  2761.  
  2762.  
  2763.        setTimeout( () => {
  2764.            doNewSend(["2", [nearestPlayerAngle]]);
  2765.            doNewSend([
  2766.   "c",
  2767.   [
  2768.     1,
  2769.     null
  2770.   ]
  2771. ]); //If we're perfect, we only send this once
  2772.            console.info(`Sending swing at ${new Date().getTime() - ctime}`);
  2773.            ctime = new Date().getTime();
  2774.        }, 20);
  2775.  
  2776.  
  2777.  
  2778.        setTimeout( () => {
  2779.            doNewSend(["2", [nearestPlayerAngle]]);
  2780.            doNewSend(["5", [switchToRange, true]]);
  2781.            console.info(`Changed weapon at ${new Date().getTime() - ctime}`);
  2782.            ctime = new Date().getTime();
  2783.        }, document.timeTween); //120-140?
  2784.  
  2785.  
  2786.  
  2787.  
  2788.        setTimeout( () => {
  2789.            doNewSend(["c", [0, null]]);
  2790.            doNewSend(["13c", [0, currentHat, 0]]);
  2791.            if (currentAccessory == monkeyTail){
  2792.                 doNewSend(["13c", [0, currentAccessory, 1]]);
  2793.                     }
  2794.            doNewSend(["5", [switchToWep, true]]);
  2795.            console.info(`Finished at  ${new Date().getTime() - ctime}`);
  2796.            ctime = new Date().getTime();
  2797.        }, 600);
  2798.  
  2799.         setTimeout( () => {
  2800.           if (bowWorked){
  2801.           doNewSend(["5", [switchToRange, true]]);
  2802.         }
  2803.        }, 730);
  2804.  
  2805.         setTimeout( () => {
  2806.           if (bowWorked){
  2807.           doNewSend([
  2808.   "c",
  2809.   [
  2810.     1,
  2811.     null
  2812.   ]
  2813. ]);
  2814.         }
  2815.        }, 840);
  2816.  
  2817.       setTimeout( () => {
  2818.            if (bowWorked){
  2819.           doNewSend(["c", [0, null]]);
  2820.         }
  2821.        }, 950);
  2822.  
  2823.       setTimeout( () => {
  2824.           inInstaProcess = false;
  2825.           if (bowWorked){
  2826.          doNewSend(["5",  [switchToWep, true]]);
  2827.               setTimeout( () => {
  2828.          doNewSend(["c", [0, null]]);
  2829.               }, 300);
  2830.          bowWorked = false;
  2831.          IN_PROCESS = false;
  2832.        }
  2833.         IN_PROCESS = false;
  2834.        }, 1060);
  2835.  
  2836.     //if it worked, fire, if it didn't dont fire
  2837.        }
  2838.  
  2839. //IT WORKS ON AND OFF
  2840. //    WTF ??!?p!?
  2841.  
  2842.  
  2843.    } else if (document.activeElement.id.toLowerCase() !== 'chatbox' ){
  2844.        if (e.keyCode == 108){ //use pressed "l"; spikes
  2845.  
  2846.  
  2847.            let spikeVal;
  2848.                                         if (havePoison()) {
  2849.                                             spikeVal = 8;
  2850.                                         } else if (haveGreat()){
  2851.                                             spikeVal = 7;
  2852.                                         } else if (haveSpinning()){
  2853.                                             spikeVal = 9;
  2854.                                         } else {
  2855.                                             spikeVal = 6;
  2856.                                         }
  2857.  
  2858.  
  2859.          for (var i=0;i<4;i++){
  2860.              let angle = (Math.PI/2)*i;
  2861.              /*let x = Math.cos(angle)*50;
  2862.              let y = Math.sin(angle)*50;
  2863.              console.log(x, y);
  2864.              aim(x, y);*/
  2865.              document.dns(["2", [angle]]);
  2866.              placeSpike(spikeVal);
  2867.  
  2868.          }
  2869.  
  2870.  
  2871.        } else if (e.keyCode == 111){ //user pressed "i"; traps
  2872.            for (var j=0;j<4;j++){
  2873.               document.dns(["2", [(Math.PI/2)*j]]);
  2874.               document.dns(["5", [15, 0]]);
  2875.               document.dns(["c", [1, null]]);
  2876.               document.dns(["c", [0, null]]);
  2877.            }
  2878.  
  2879.        } else if (e.keyCode == iPressKey){
  2880.  
  2881.                  if (CORESTATE.ipress.rel){
  2882.                         if (CORESTATE.ipress.rel == "puton"){
  2883.                                 document.dns(["13c", [0, putonName, 0]]);
  2884.                         } else if (CORESTATE.ipress.rel == "place"){
  2885.                             placeSpike(placeName);
  2886.                         }
  2887.                  }
  2888.              }
  2889.       else if (e.keyCode == 104){
  2890.           if (focusPlayerObj && focusPlayerObj.clan){
  2891.              document.dns(["10", [focusPlayerObj.clan]]);
  2892.           }
  2893.       }
  2894.   }
  2895. });
  2896.  
  2897. window.kiH = () => {};
  2898.  
  2899. document.body.oncontextmenu = (e) => {
  2900.  
  2901.    noallow = true;
  2902.  
  2903.     setTimeout( () =>  {
  2904.  
  2905.      let allActiveItems = Array.from(document.getElementById("actionBar").children).filter(x=>x.style.display != "none");
  2906.              let allActiveIDs = allActiveItems.map(x=>parseInt(x.id.replace("actionBarItem", "")));
  2907.              switchToWep = allActiveIDs[0];
  2908.              switchToRange = allActiveIDs[1];
  2909.        console.info(currentAccessory);
  2910.        var ctime = new Date().getTime();
  2911.        console.info(inInstaProcess)
  2912.        if (!inInstaProcess){
  2913.        console.info("got in");
  2914.        inInstaProcess = true
  2915.         IN_PROCESS = true;
  2916.  
  2917.        doNewSend(["13c", [0, bullHelm, 0]]);
  2918.           if (currentAccessory == monkeyTail){
  2919.                doNewSend(["13c", [0, 0, 1]]);
  2920.            }
  2921.        doNewSend(["5", [switchToWep, true]]);
  2922.        console.info("Starting at 0");
  2923.  
  2924.       //after bad
  2925.  
  2926.  
  2927.        setTimeout( () => {
  2928.            doNewSend(["2", [nearestPlayerAngle]]);
  2929.            doNewSend([
  2930.   "c",
  2931.   [
  2932.     1,
  2933.     null
  2934.   ]
  2935. ]); //If we're perfect, we only send this once
  2936.            console.info(`Sending swing at ${new Date().getTime() - ctime}`);
  2937.            ctime = new Date().getTime();
  2938.        }, 20);
  2939.  
  2940.  
  2941.  
  2942.        setTimeout( () => {
  2943.            doNewSend(["2", [nearestPlayerAngle]]);
  2944.            doNewSend(["5", [switchToRange, true]]);
  2945.            console.info(`Changed weapon at ${new Date().getTime() - ctime}`);
  2946.            ctime = new Date().getTime();
  2947.        }, document.timeTween); //120-140?
  2948.  
  2949.  
  2950.  
  2951.  
  2952.        setTimeout( () => {
  2953.            doNewSend(["c", [0, null]]);
  2954.            doNewSend(["13c", [0, currentHat, 0]]);
  2955.            if (currentAccessory == monkeyTail){
  2956.                 doNewSend(["13c", [0, currentAccessory, 1]]);
  2957.                     }
  2958.            doNewSend(["5", [switchToWep, true]]);
  2959.            console.info(`Finished at  ${new Date().getTime() - ctime}`);
  2960.            ctime = new Date().getTime();
  2961.        }, 600);
  2962.  
  2963.         setTimeout( () => {
  2964.           if (bowWorked){
  2965.           doNewSend(["5", [switchToRange, true]]);
  2966.         }
  2967.        }, 730);
  2968.  
  2969.         setTimeout( () => {
  2970.           if (bowWorked){
  2971.           doNewSend([
  2972.   "c",
  2973.   [
  2974.     1,
  2975.     null
  2976.   ]
  2977. ]);
  2978.         }
  2979.        }, 840);
  2980.  
  2981.       setTimeout( () => {
  2982.            if (bowWorked){
  2983.           doNewSend(["c", [0, null]]);
  2984.         }
  2985.        }, 950);
  2986.  
  2987.       setTimeout( () => {
  2988.           inInstaProcess = false;
  2989.           if (bowWorked){
  2990.          doNewSend(["5",  [switchToWep, true]]);
  2991.               setTimeout( () => {
  2992.          doNewSend(["c", [0, null]]);
  2993.               }, 300);
  2994.          bowWorked = false;
  2995.          IN_PROCESS = false;
  2996.        }
  2997.         IN_PROCESS = false;
  2998.        }, 1060);
  2999.  
  3000.     //if it worked, fire, if it didn't dont fire
  3001.        }
  3002.  
  3003. //IT WORKS ON AND OFF
  3004. //    WTF ??!?p!?
  3005.  
  3006.  
  3007.     }, 150);
  3008. }
  3009.  
  3010.  
  3011. document.ps = placeSpike;
  3012.  
  3013.     });
  3014. } else if (window.location.href.includes("krunker")) {
  3015.  
  3016.  var krSocket;
  3017.  
  3018.   console.log(window.WebSocket)
  3019.  
  3020.    /* INTERNALS RECEIVING
  3021.        0 =
  3022.        1 = users, [userid, x, y, z, angle_x, angle_y, ?, ?, ?], len=9
  3023.        6 = kill data, [ ["Kill Type", Points, ...], ? (type=some_binary), ?(type=some_binary)], len=2
  3024.        7 = leaderboard, [?, user, position, score, ?(always=0), ?], len=6
  3025.  
  3026.    */
  3027.  
  3028.  
  3029.     /*INTERNALS SENDING
  3030.         "etr" = [[zero-indexed position of wep on menu,0,[-1,-1],-1,-1,2,0]]]
  3031.  
  3032.     */
  3033.  
  3034.   var current = 0;
  3035.   var current2 = 0;
  3036.   var current10 = 0;
  3037.   var pending;
  3038.  
  3039.     var START_ATTACK =  msgpack5.encode(["i",[[1142,16,"f",-1,1,0,0,0,0,0,16,"f",-1,"f"]]]);
  3040.     var END_ATTACK = [146, 161, 105, 145, 158, 205, 5, 53, 18, 161, 102, 255, 161, 102, 15, 161, 102, 255, 0, 0, 0, 0, 0, 0];
  3041.  
  3042.   window.WebSocket.prototype.oldSend = WebSocket.prototype.send;
  3043.   window.WebSocket.prototype.send = function(m){
  3044.         if (!krSocket){
  3045.           addListener(this);
  3046.         }
  3047.      /* console.log(m);
  3048.       let data = msgpack5.decode(m);
  3049.       console.log(JSON.stringify(data));
  3050.       if (data[0] == "i"){
  3051.        current = data[1][0][0];
  3052.        current2 = data[1][0][1];
  3053.        //current10 = data[1][0][5];
  3054.       }*/
  3055.  
  3056.       if (Math.random() > 2){
  3057.          let realAttack = msgpack5.decode(START_ATTACK);
  3058.          realAttack[1][0][0] = current;
  3059.          realAttack[1][0][1] = current2;
  3060.          realAttack[1][0][10] = current10;
  3061.          console.error(`Sending ${JSON.stringify(realAttack)}`);
  3062.          this.oldSend(msgpack5.encode(realAttack));
  3063.         //["i",[[402,17,"f",-1,"f",17,"f",-1,0,0,0,0,0,0]]]
  3064.         pending = false;
  3065.       } else {
  3066.         this.oldSend(m);
  3067.       }
  3068.  
  3069.  
  3070.   }
  3071.  
  3072.  
  3073.    var dist3 = (p1, p2) => {
  3074.         const dx = p1.x - p2.x;
  3075.         const dy = p1.y - p2.y;
  3076.         const dz = p1.z - p2.z;
  3077.         return Math.sqrt(dx * dx + dy * dy + dz * dz)
  3078.     }
  3079.  
  3080.  
  3081.  
  3082. /*XMLHttpRequest.prototype.oldOpen = XMLHttpRequest.prototype.open;
  3083. XMLHttpRequest.prototype.open = function(){
  3084.     console.log(arguments[1]);
  3085.     if (arguments[1].includes("game.js")){
  3086.        arguments[1] = "https://cdn.jsdelivr.net/gh/Sam-DevZ/io-games/gamenew.js";
  3087.     }
  3088.     this.oldOpen(...arguments);
  3089. }*/
  3090.  
  3091.  
  3092.  
  3093. window.stop();
  3094. document.innerHTML = ``;
  3095.  
  3096. GM_xmlhttpRequest({
  3097.     method: "GET",
  3098.     url: `https://cdn.jsdelivr.net/gh/Sam-DevZ/io-track2/io-track2/gamejsv102.js`,
  3099.     onload: jsresp => {
  3100.         let code = jsresp.responseText
  3101.  
  3102.  
  3103.         GM_xmlhttpRequest({
  3104.             method: "GET" ,
  3105.             url: document.location.origin,
  3106.             onload: inRes => {
  3107.                 let dbody = inRes.responseText;
  3108.                 console.log(code);
  3109.                 newBody = dbody.replace(/<script src="js\/game\.js\?build=.+"><\/script>/g, `<script type="text/plain" src="js/game.js?build=fL02f"></script>`);
  3110.                 newBody += `<script type="text/javascript">${code.toString()}</script>`;
  3111.                 //newBody = newBody.replace(/libs\/zip\.js\?build=.+?(?=")/g, `https://cdn.jsdelivr.net/gh/Sam-DevZ/io-track/zip.js`);
  3112.                 newBody = newBody.replace("jsdelivr", "xyzsource");
  3113.                 newBody = newBody.replace("SCRIPT", "BLEEP");
  3114.                 document.open();
  3115.                 document.write(newBody);
  3116.                 document.close();
  3117.  
  3118.  
  3119.  
  3120.                 unsafeWindow.addEventListener("message", (message) => {
  3121.                     if (message.origin != "http://scriptsourceapp.com") return;
  3122.                     console.log(message.data.autoAimOnScreen)
  3123.                     unsafeWindow.mdlsettings.screenaim = message.data.autoAimOnScreen;
  3124.  
  3125.                 });
  3126.  
  3127.             }
  3128.         });
  3129.  
  3130.  
  3131.  
  3132.         }});
  3133.  
  3134. /*2 problems
  3135. - looking @ very slowly
  3136. - not zoooming in / gun following insanely slowly
  3137. - not stopping after target leaves view - fixed*/
  3138.  
  3139.  
  3140. var socialWS = new WebSocket(`wss://krunker_social.krunker.io/ws`);
  3141. socialWS.binaryType = "arraybuffer";
  3142. socialWS.onopen = (open) => {
  3143.   console.log("Opened!");
  3144. }
  3145.  
  3146. socialWS.onclose = (close) => {
  3147.   console.log("Closed!");
  3148. }
  3149.  
  3150. socialWS.onmessage = (msg) => {
  3151.   //console.log(msg);
  3152.   let msgRaw = new Uint8Array(msg.data).slice(2);
  3153.   //console.log(msgRaw);
  3154.   msg = msgpack5.decode(Array.from( msgRaw ));
  3155.   let playerData = msg[1][2];
  3156.   let playerObj = unsafeWindow.players.filter(x=>x.name == playerData.player_name)[0];
  3157.   playerObj.kdval = Math.round(playerData.player_kills / playerData.player_deaths*100)/100;
  3158.   if (!playerObj.kdval) playerObj.kdval = "N/A"
  3159.  
  3160. }
  3161.  
  3162.  
  3163. var past = new Date().getTime();
  3164.  
  3165. unsafeWindow.Ze2 = unsafeWindow.Ze = (t, e, i) => {
  3166.         for (chatList.innerHTML += i ? "<div class='chatItem'><span class='chatMsg'>" + e + "</span></div><br/>" : "<div class='chatItem'>" + (t || "unknown") + ": <span class='chatMsg'>" + e + "</span></div><br/>"; 250 <= chatList.scrollHeight;) chatList.removeChild(chatList.childNodes[0])
  3167.     }
  3168.  
  3169.  
  3170. unsafeWindow.mdlsettingsmain = {bhop: true, autoaim: 1, info: true};
  3171. unsafeWindow.mdlsettings = {screenaim: false};
  3172.  
  3173.  
  3174.   function handleMessage(m){
  3175.  
  3176.   }
  3177.  
  3178.     unsafeWindow.mnxrecoil = (me, inputs) => {
  3179.  
  3180.          if (!unsafeWindow.players) return;
  3181.  
  3182.           me = unsafeWindow.players.filter(x=>x.isYou)[0];
  3183.  
  3184.           for (let player of unsafeWindow.players){
  3185.            if (unsafeWindow.mdlsettingsmain.info){
  3186.            if (!player.kdval){
  3187.                //console.log("Setting kdval!");
  3188.                let data = msgpack5.encode(["r",["profile",player.name,null,null]]);
  3189.                data = Array.from(data);
  3190.                data.unshift(0, 7);
  3191.                data = new Uint8Array(data);
  3192.                socialWS.send(data);
  3193.            }
  3194.            } else {
  3195.              player.kdval = "";
  3196.            }
  3197.           }
  3198.  
  3199.  
  3200.  
  3201.           if (me.weapon.ammo && me.ammos[me.weaponIndex] === 0){
  3202.               //console.log(inputs);
  3203.               if (inputs && /* inval */ inputs[9] === 0){
  3204.                   inputs[9] = 1; //Simulate click
  3205.                }
  3206.           }
  3207.  
  3208.           //$('#aHolder').css({opacity: 0, cursor: "default", marginTop: 5000, position: "absolute"});
  3209.  
  3210.  
  3211.  
  3212.         for (let playerInfo of playerInfos.children){
  3213.                 if (!unsafeWindow.mdlsettingsmain.info) continue;
  3214.                 let pname = playerInfo.querySelectorAll(".pInfoH")[0];
  3215.                 if (!pname) continue;
  3216.                 let pid = parseInt(playerInfo.id.replace("pInfo", ""));
  3217.                 let playerObj = unsafeWindow.players.filter(x=>x.sid == pid)[0];
  3218.  
  3219.                 pname.innerHTML = `${playerObj.name} (${Math.round(dist3(playerObj, me))/10} mm)<h4 style="color: white; text-align: center; margin-top: 20px; margin-bottom: 0px;">[${playerObj.weapon.name}]</h4>`;
  3220.  
  3221.         }
  3222.  
  3223.  
  3224.         //window.idleTimer = 0;
  3225.         //let arr = new Uint8Array(m.data);
  3226.         //let full = msgpack5.decode(arr);
  3227.         //console.log(full[0]);
  3228.  
  3229.       if (unsafeWindow.mdlsettingsmain.bhop){
  3230.         unsafeWindow.control.keys[32] = unsafeWindow.control.keys[32] ? !unsafeWindow.control.keys[32] : 1
  3231.         }
  3232.         let nplayers = unsafeWindow.players.filter(x=>x.inView).filter(x=>!x.isYou).filter(x=> (!x.team || (x.team !== me.team))).filter(x=>x.active).filter(x=>unsafeWindow.mdlsettings.screenaim ? unsafeWindow.camhook.containsPoint(x) : true ).sort( (a,b) => dist3(me, a) - dist3(me, b) );
  3233.         let closest = nplayers[0];
  3234.         //console.log(closest);
  3235.         //console.log(me.aimVal);
  3236.  
  3237.  
  3238.  
  3239.         if (closest){
  3240.  
  3241.  
  3242.          //console.log('closest');
  3243.         //if (unsafeWindow.control.mouseDownL = 1) unsafeWindow.control.mouseDownL = 0;
  3244.         if (!unsafeWindow.mdlsettingsmain.autoaim%3) return;
  3245.          
  3246.          //console.error("ZOOMING IN ON TARGET");
  3247.           // console.log('aimval' + me.aimVal);
  3248.  
  3249.           if (unsafeWindow.mdlsettingsmain.autoaim%3 === 1){
  3250.               unsafeWindow.control.camLookAt(closest.x, closest.y + 11 - 1.5 - 2.5 * closest.crouchVal - me.recoilAnimY * 0.3 * 25, closest.z);
  3251.               if (unsafeWindow.control.mouseDownR != 1) {
  3252.                   unsafeWindow.control.mouseDownR = 1;
  3253.               } else if (me.aimVal < 0.2) {
  3254.                   //console.log(unsafeWindow.control.mouseDownL);
  3255.                   if (unsafeWindow.control.mouseDownL === 0){
  3256.                       unsafeWindow.control.mouseDownL = 1;
  3257.                       //console.log('shoooting');
  3258.                   } else {
  3259.                       unsafeWindow.control.mouseDownL = 0;
  3260.                   }
  3261.  
  3262.               }
  3263.           } else if (unsafeWindow.mdlsettingsmain.autoaim%3 === 2){
  3264.               if (me.aimVal === 0){
  3265.               unsafeWindow.control.camLookAt(closest.x, closest.y + 11 - 1.5 - 2.5 * closest.crouchVal - me.recoilAnimY * 0.3 * 25, closest.z);
  3266.  
  3267.               }
  3268.  
  3269.           }
  3270.  
  3271.  
  3272.         } else {
  3273.             unsafeWindow.control.camLookAt(null);
  3274.             unsafeWindow.control.aimTarget = null;
  3275.             unsafeWindow.control.target = null;
  3276.             if (unsafeWindow.mdlsettingsmain.autoaim%3 === 1){
  3277.             unsafeWindow.control.mouseDownL = 0;
  3278.             if (unsafeWindow.control.mouseDownR !== 0) unsafeWindow.control.mouseDownR = 0;
  3279.             } else {
  3280.  
  3281.             }
  3282.         }
  3283.  
  3284.  
  3285.  
  3286.  
  3287.   }
  3288.  
  3289.   function addListener(socket){
  3290.     unsafeWindow.socket = socket;
  3291.     krSocket = socket;
  3292.     $('#aHolder').css({opacity: 0, cursor: "default", marginTop: 5000, position: "absolute"});
  3293.     unsafeWindow.Ze2("ScriptSource", `Welcome to ScriptSource Krunker! Press <span style="color: green;">'t'</span> to toggle <span style="color: green;">autoaim</span>, <span style="color: purple;">'b'</span> to toggle <span style="color: purple;">bhop</span>, and <span style="color: yellow;">'i'</span> to toggle extra <span style="color: yellow;">player info</span>!`);
  3294.     krSocket.addEventListener("message", (m) => {
  3295.         handleMessage(m);
  3296.     });
  3297.   }
  3298.  
  3299. /*unsafeWindow.dns = function(json){
  3300.     let OC = msgpack5.encode(json);
  3301.     console.log(OC);
  3302.     var aAdd =  Array.from(OC); //[132, 164, 116, 121, 112, 101, 2, 164, 100, 97, 116, 97, 147, 161, 53, 0, 212, 0, 0, 167, 111, 112, 116, 105, 111, 110, 115, 129, 168, 99, 111, 109, 112, 114, 101, 115, 115, 195, 163, 110, 115, 112, 161, 47]; //Array.from(OC);
  3303.     return new Uint8Array(aAdd).buffer;
  3304. }*/
  3305.  
  3306.  
  3307.  
  3308. setTimeout( () => {
  3309.     pending = true;
  3310. }, 5000);
  3311.  
  3312.  
  3313.  var weps =   [{
  3314.         name: "Sniper Rifle",
  3315.         src: "weapon_1",
  3316.         icon: "icon_1",
  3317.         sound: "weapon_1",
  3318.         nAuto: !0,
  3319.         type: 0,
  3320.         scope: !0,
  3321.         swapTime: 300,
  3322.         aimSpeed: 120,
  3323.         spdMlt: .95,
  3324.         ammo: 3,
  3325.         reload: 1500,
  3326.         dmg: 100,
  3327.         pierce: .2,
  3328.         range: 1e3,
  3329.         dropStart: 230,
  3330.         dmgDrop: 30,
  3331.         scale: 1.1,
  3332.         leftHoldY: -.7,
  3333.         rightHoldY: -.75,
  3334.         leftHoldZ: 2.4,
  3335.         rightHoldZ: .4,
  3336.         xOff: .8,
  3337.         yOff: -.75,
  3338.         zOff: -2,
  3339.         xOrg: 0,
  3340.         yOrg: -.55,
  3341.         zOrg: -.8,
  3342.         muzOff: 8,
  3343.         muzMlt: 1.6,
  3344.         rate: 900,
  3345.         spread: 260,
  3346.         zoom: 2.7,
  3347.         leanMlt: 2,
  3348.         recoil: .009,
  3349.         recoilR: .02,
  3350.         recover: .993,
  3351.         recoverY: .997,
  3352.         recoverF: .975,
  3353.         recoilY: 1,
  3354.         recoilZ: 1.8
  3355.     }, {
  3356.         name: "Assault Rifle",
  3357.         src: "weapon_2",
  3358.         icon: "icon_2",
  3359.         sound: "weapon_2",
  3360.         transp: !0,
  3361.         type: 0,
  3362.         swapTime: 300,
  3363.         aimSpeed: 130,
  3364.         spdMlt: .95,
  3365.         ammo: 30,
  3366.         reload: 1200,
  3367.         dmg: 22,
  3368.         pierce: 1,
  3369.         range: 700,
  3370.         dmgDrop: 10,
  3371.         scale: 1,
  3372.         leftHoldY: -.5,
  3373.         rightHoldY: -.7,
  3374.         leftHoldZ: 2,
  3375.         rightHoldZ: .2,
  3376.         xOff: 1.2,
  3377.         yOff: -1,
  3378.         zOff: -2.5,
  3379.         xOrg: 0,
  3380.         yOrg: -.55,
  3381.         zOrg: -.2,
  3382.         caseZOff: -1.7,
  3383.         caseYOff: -.2,
  3384.         muzOff: 5.9,
  3385.         muzOffY: .3,
  3386.         muzMlt: 1.4,
  3387.         rate: 110,
  3388.         spread: 120,
  3389.         minSpread: 5,
  3390.         zoom: 1.6,
  3391.         leanMlt: 1,
  3392.         recoil: .003,
  3393.         recoilR: .012,
  3394.         recover: .978,
  3395.         recoverY: .995,
  3396.         recoverF: .975,
  3397.         recoilY: 1,
  3398.         recoilZ: 5
  3399.     }, {
  3400.         name: "Pistol",
  3401.         src: "weapon_3",
  3402.         icon: "icon_3",
  3403.         sound: "weapon_3",
  3404.         secondary: !0,
  3405.         transp: !0,
  3406.         nAuto: !0,
  3407.         kill: ["", 75],
  3408.         type: 1,
  3409.         swapTime: 350,
  3410.         aimSpeed: 120,
  3411.         spdMlt: 1.05,
  3412.         ammo: 10,
  3413.         reload: 700,
  3414.         dmg: 20,
  3415.         range: 700,
  3416.         dmgDrop: 10,
  3417.         scale: .95,
  3418.         leftHoldY: -.82,
  3419.         rightHoldY: -.62,
  3420.         leftHoldZ: -.5,
  3421.         rightHoldZ: -.5,
  3422.         xOff: .7,
  3423.         yOff: -.95,
  3424.         zOff: -4.5,
  3425.         xOrg: 0,
  3426.         yOrg: -.2,
  3427.         zOrg: -4.25,
  3428.         caseZOff: .2,
  3429.         caseYOff: 0,
  3430.         muzOff: 1.5,
  3431.         muzOffY: 0,
  3432.         muzMlt: .95,
  3433.         rate: 150,
  3434.         spread: 90,
  3435.         zoom: 1.4,
  3436.         leanMlt: 1,
  3437.         recoil: .006,
  3438.         recoilR: .005,
  3439.         recover: .98,
  3440.         recoverY: .99,
  3441.         recoverF: .98,
  3442.         recoilY: 3,
  3443.         recoilZ: 1
  3444.     }, {
  3445.         name: "Submachine Gun",
  3446.         src: "weapon_4",
  3447.         icon: "icon_4",
  3448.         sound: "weapon_4",
  3449.         transp: !0,
  3450.         type: 0,
  3451.         swapTime: 300,
  3452.         aimSpeed: 120,
  3453.         spdMlt: 1.04,
  3454.         ammo: 24,
  3455.         reload: 1200,
  3456.         dmg: 18,
  3457.         pierce: 1,
  3458.         range: 700,
  3459.         dmgDrop: 12,
  3460.         scale: 1,
  3461.         leftHoldY: -.35,
  3462.         rightHoldY: -.45,
  3463.         leftHoldZ: 1.2,
  3464.         rightHoldZ: -.2,
  3465.         xOff: .95,
  3466.         yOff: -.95,
  3467.         zOff: -3,
  3468.         xOrg: 0,
  3469.         yOrg: -.62,
  3470.         zOrg: -2.5,
  3471.         caseYOff: -.15,
  3472.         caseZOff: -.4,
  3473.         muzOff: 2.7,
  3474.         muzOffY: .1,
  3475.         rate: 90,
  3476.         spread: 170,
  3477.         minSpread: 20,
  3478.         zoom: 1.5,
  3479.         leanMlt: 1.2,
  3480.         recoil: .0034,
  3481.         recoilR: .015,
  3482.         recover: .978,
  3483.         recoverY: .996,
  3484.         recoverF: .975,
  3485.         recoilY: .3,
  3486.         recoilZ: 5.3
  3487.     }, {
  3488.         name: "Revolver",
  3489.         src: "weapon_5",
  3490.         icon: "icon_5",
  3491.         sound: "weapon_5",
  3492.         nAuto: !0,
  3493.         nCase: !0,
  3494.         transp: !0,
  3495.         kill: ["", 50],
  3496.         type: 1,
  3497.         swapTime: 200,
  3498.         aimSpeed: 120,
  3499.         spdMlt: 1.04,
  3500.         ammo: 6,
  3501.         reload: 900,
  3502.         dmg: 66,
  3503.         pierce: .85,
  3504.         dmgDrop: 10,
  3505.         scale: 1.3,
  3506.         leftHoldY: -1,
  3507.         rightHoldY: -.8,
  3508.         leftHoldZ: -.5,
  3509.         rightHoldZ: -.5,
  3510.         xOff: .7,
  3511.         yOff: -.8,
  3512.         zOff: -4.1,
  3513.         xOrg: 0,
  3514.         yOrg: -.35,
  3515.         zOrg: -3.8,
  3516.         muzOff: 2.75,
  3517.         muzOffY: .2,
  3518.         muzMlt: .95,
  3519.         range: 700,
  3520.         rate: 300,
  3521.         spread: 100,
  3522.         zoom: 1.4,
  3523.         leanMlt: 1.6,
  3524.         recoil: .01,
  3525.         recoilR: .01,
  3526.         recover: .982,
  3527.         recoverY: .994,
  3528.         recoverF: .98,
  3529.         recoilY: 1.25,
  3530.         recoilZ: 2
  3531.     }, {
  3532.         name: "Shotgun",
  3533.         src: "weapon_6",
  3534.         icon: "icon_6",
  3535.         sound: "weapon_6",
  3536.         nAuto: !0,
  3537.         nCase: !0,
  3538.         type: 0,
  3539.         swapTime: 300,
  3540.         aimSpeed: 180,
  3541.         spdMlt: 1,
  3542.         ammo: 2,
  3543.         shots: 5,
  3544.         reload: 1100,
  3545.         dmg: 50,
  3546.         dmgDrop: 40,
  3547.         scale: 1.25,
  3548.         leftHoldY: -.7,
  3549.         rightHoldY: -.9,
  3550.         leftHoldZ: 1.2,
  3551.         rightHoldZ: -.3,
  3552.         xOff: .95,
  3553.         yOff: -.8,
  3554.         zOff: -3,
  3555.         xOrg: 0,
  3556.         yOrg: -.2,
  3557.         zOrg: -1.5,
  3558.         muzOff: 6,
  3559.         muzMlt: 1.5,
  3560.         range: 240,
  3561.         rate: 400,
  3562.         innac: 110,
  3563.         spread: 120,
  3564.         minSpread: 20,
  3565.         zoom: 1.25,
  3566.         leanMlt: 1.6,
  3567.         recoil: .013,
  3568.         recoilR: .015,
  3569.         recover: .99,
  3570.         recoverF: .975,
  3571.         recoilY: .8,
  3572.         recoilZ: 2
  3573.     }, {
  3574.         name: "Light Machine Gun",
  3575.         src: "weapon_7",
  3576.         icon: "icon_7",
  3577.         sound: "weapon_7",
  3578.         transp: !0,
  3579.         type: 0,
  3580.         swapTime: 800,
  3581.         aimSpeed: 200,
  3582.         spdMlt: .79,
  3583.         ammo: 100,
  3584.         reload: 2500,
  3585.         dmg: 22,
  3586.         pierce: 1,
  3587.         range: 700,
  3588.         dmgDrop: 10,
  3589.         scale: 1.3,
  3590.         leftHoldY: -.65,
  3591.         leftHoldX: .4,
  3592.         rightHoldY: -.75,
  3593.         leftHoldZ: 1,
  3594.         rightHoldZ: -.2,
  3595.         xOff: .95,
  3596.         yOff: -.8,
  3597.         zOff: -2.8,
  3598.         xOrg: 0,
  3599.         yOrg: -.45,
  3600.         zOrg: -2,
  3601.         caseInd: 2,
  3602.         caseZOff: -.5,
  3603.         caseYOff: -.1,
  3604.         muzOff: 5.5,
  3605.         muzMlt: 1.65,
  3606.         rate: 120,
  3607.         spread: 300,
  3608.         minSpread: 15,
  3609.         zoom: 1.2,
  3610.         leanMlt: 1.6,
  3611.         recoil: .0032,
  3612.         recoilR: .012,
  3613.         recover: .98,
  3614.         recoverY: .9975,
  3615.         recoverF: .975,
  3616.         recoilY: .4,
  3617.         recoilZ: 3.8
  3618.     }, {
  3619.         name: "Semi Auto",
  3620.         src: "weapon_8",
  3621.         icon: "icon_8",
  3622.         sound: "weapon_8",
  3623.         nAuto: !0,
  3624.         type: 0,
  3625.         scope: !0,
  3626.         swapTime: 400,
  3627.         aimSpeed: 120,
  3628.         spdMlt: 1,
  3629.         ammo: 8,
  3630.         reload: 1300,
  3631.         dmg: 35,
  3632.         pierce: .2,
  3633.         range: 1e3,
  3634.         dmgDrop: 0,
  3635.         scale: 1,
  3636.         leftHoldY: -.7,
  3637.         rightHoldY: -.75,
  3638.         leftHoldZ: 2.4,
  3639.         rightHoldZ: .4,
  3640.         xOff: .8,
  3641.         yOff: -.75,
  3642.         zOff: -2,
  3643.         xOrg: 0,
  3644.         yOrg: -.55,
  3645.         zOrg: -.8,
  3646.         muzOff: 5.7,
  3647.         muzOffY: .5,
  3648.         muzMlt: 1.4,
  3649.         rate: 250,
  3650.         spread: 300,
  3651.         zoom: 2.4,
  3652.         leanMlt: 2,
  3653.         recoil: .01,
  3654.         recoilR: .01,
  3655.         recover: .984,
  3656.         recoverY: .997,
  3657.         recoverF: .975,
  3658.         recoilY: .4,
  3659.         recoilZ: 1.8
  3660.     }, {
  3661.         name: "Rocket Launcher",
  3662.         src: "weapon_9",
  3663.         icon: "icon_9",
  3664.         sound: "weapon_9",
  3665.         nSkill: !0,
  3666.         nAuto: !0,
  3667.         nCase: !0,
  3668.         projectile: 0,
  3669.         type: 0,
  3670.         swapTime: 600,
  3671.         aimSpeed: 200,
  3672.         spdMlt: .9,
  3673.         ammo: 1,
  3674.         reload: 1600,
  3675.         scale: 1.3,
  3676.         leftHoldY: -.5,
  3677.         rightHoldY: -.6,
  3678.         leftHoldZ: 3.2,
  3679.         rightHoldZ: 1.6,
  3680.         xOff: .95,
  3681.         yOff: -.4,
  3682.         zOff: -.7,
  3683.         xOrg: 0,
  3684.         yOrg: -.6,
  3685.         zOrg: -1.5,
  3686.         muzOff: 5,
  3687.         muzOffY: 0,
  3688.         muzMlt: 1.5,
  3689.         rate: 1,
  3690.         spread: 120,
  3691.         minSpread: 15,
  3692.         zoom: 1.5,
  3693.         leanMlt: 1.4,
  3694.         recoil: .008,
  3695.         recoilR: .012,
  3696.         recover: .99,
  3697.         recoverY: .998,
  3698.         recoverF: .975,
  3699.         recoilY: .8,
  3700.         recoilZ: 4
  3701.     }, {
  3702.         name: "Akimbo Uzi",
  3703.         src: "weapon_10",
  3704.         icon: "icon_10",
  3705.         sound: "weapon_10",
  3706.         noAim: !0,
  3707.         akimbo: !0,
  3708.         type: 0,
  3709.         swapTime: 300,
  3710.         aimSpeed: 120,
  3711.         spdMlt: 1.04,
  3712.         ammo: 18,
  3713.         reload: 1200,
  3714.         dmg: 18,
  3715.         pierce: 1,
  3716.         range: 700,
  3717.         dmgDrop: 12,
  3718.         scale: .9,
  3719.         rightHoldY: -.55,
  3720.         leftHoldZ: .3,
  3721.         leftHoldX: -.25,
  3722.         leftHoldY: -.55,
  3723.         rightHoldZ: .3,
  3724.         rightHoldX: -.25,
  3725.         holdW: 1.3,
  3726.         xOff: 1.5,
  3727.         yOff: -.95,
  3728.         zOff: -3.3,
  3729.         xOrg: 0,
  3730.         yOrg: -.62,
  3731.         zOrg: -2.5,
  3732.         caseYOff: -.15,
  3733.         caseZOff: -.4,
  3734.         muzOff: 3.6,
  3735.         rate: 60,
  3736.         spread: 50,
  3737.         spreadInc: 1.5,
  3738.         minSpread: 10,
  3739.         zoom: 1.5,
  3740.         leanMlt: 1,
  3741.         recoil: .0034,
  3742.         recoilR: .015,
  3743.         recover: .978,
  3744.         recoverY: .996,
  3745.         recoverF: .975,
  3746.         recoilY: .3,
  3747.         recoilZ: 5
  3748.     }, {
  3749.         name: "Desert Eagle",
  3750.         src: "weapon_11",
  3751.         icon: "icon_11",
  3752.         sound: "weapon_11",
  3753.         secondary: !0,
  3754.         minRec: 15,
  3755.         nAuto: !0,
  3756.         transp: !0,
  3757.         kill: ["", 50],
  3758.         type: 1,
  3759.         swapTime: 200,
  3760.         aimSpeed: 120,
  3761.         spdMlt: 1,
  3762.         ammo: 6,
  3763.         reload: 1e3,
  3764.         dmg: 50,
  3765.         pierce: .85,
  3766.         dmgDrop: 10,
  3767.         scale: .94,
  3768.         leftHoldY: -.9,
  3769.         rightHoldY: -.7,
  3770.         leftHoldZ: -.5,
  3771.         rightHoldZ: -.5,
  3772.         holdW: .95,
  3773.         xOff: 1.3,
  3774.         yOff: -.95,
  3775.         zOff: -4.1,
  3776.         xOrg: 0,
  3777.         yOrg: -.2,
  3778.         zOrg: -3.8,
  3779.         muzOff: 2,
  3780.         muzMlt: 1.1,
  3781.         range: 700,
  3782.         rate: 400,
  3783.         spread: 150,
  3784.         zoom: 1.4,
  3785.         leanMlt: 1.6,
  3786.         recoil: .01,
  3787.         recoilR: .01,
  3788.         recover: .985,
  3789.         recoverY: .996,
  3790.         recoverF: .98,
  3791.         recoilY: 1.4,
  3792.         recoilZ: 2
  3793.     }, {
  3794.         name: "Alien Blaster",
  3795.         src: "weapon_13",
  3796.         icon: "icon_13",
  3797.         sound: "weapon_13",
  3798.         secondary: !0,
  3799.         nAuto: !0,
  3800.         transp: !0,
  3801.         nCase: !0,
  3802.         minRec: 50,
  3803.         kill: ["", 50],
  3804.         type: 1,
  3805.         swapTime: 200,
  3806.         aimSpeed: 120,
  3807.         spdMlt: 1,
  3808.         ammo: 4,
  3809.         reload: 1500,
  3810.         dmg: 40,
  3811.         pierce: .85,
  3812.         dmgDrop: 20,
  3813.         scale: 1.1,
  3814.         leftHoldY: -1,
  3815.         rightHoldY: -.65,
  3816.         leftHoldZ: -.2,
  3817.         rightHoldZ: -.2,
  3818.         xOff: 1.3,
  3819.         yOff: -.95,
  3820.         zOff: -4.1,
  3821.         xOrg: 0,
  3822.         yOrg: -.6,
  3823.         zOrg: -3.8,
  3824.         holdW: .7,
  3825.         muzOff: 2.2,
  3826.         muzOffY: .1,
  3827.         muzID: 3,
  3828.         muzMlt: 1.1,
  3829.         range: 700,
  3830.         rate: 150,
  3831.         spread: 150,
  3832.         zoom: 1.4,
  3833.         leanMlt: 1.6,
  3834.         recoil: .008,
  3835.         recoilR: .01,
  3836.         recover: .985,
  3837.         recoverY: .996,
  3838.         recoverF: .98,
  3839.         recoilY: 1.05,
  3840.         recoilZ: 2
  3841.     }, {
  3842.         name: "Hands",
  3843.         melee: !0,
  3844.         type: 1,
  3845.         swapTime: 350,
  3846.         spdMlt: 1.1,
  3847.         spread: 100,
  3848.         leftHoldY: -.82,
  3849.         leftHoldX: 1.3,
  3850.         rightHoldX: -1.3,
  3851.         rightHoldY: -.82,
  3852.         leftHoldZ: -.5,
  3853.         rightHoldZ: -.5,
  3854.         xOff: 0,
  3855.         yOff: -.95,
  3856.         zOff: -3,
  3857.         xOrg: 0,
  3858.         yOrg: 0,
  3859.         zOrg: 0,
  3860.         leanMlt: 1
  3861.     }]
  3862.  
  3863.  
  3864. } else if (window.location.href.includes("reddit")){ // "Old reddit, please!"
  3865.    if (!window.location.href.includes("old.reddit") && window.oldReddit) window.location.assign(window.location.href.replace("https://www.", "old."));
  3866. } else {
  3867.   var currentTitle = "";
  3868.   setInterval(() => {
  3869.      if (window.location.href.includes("watch")){
  3870.          if (document.title != currentTitle || !(document.querySelector("#timeBtn"))){
  3871.              let btn = document.createElement("button");
  3872.              btn.id = "timeBtn";
  3873.              btn.style = "width: 150px; height: 50px; font-size: 17.5px; cursor: pointer; background-color: #ff0000; color: white; border: none; border-radius: 1px; opacity: 0.95; outline: none; box-shadow: 0 10px 30px 0 rgba(73,85,114,.18);";
  3874.              btn.innerText = "Get Time!";
  3875.              document.querySelector("#meta-contents").appendChild(btn);
  3876.              currentTitle = document.title;
  3877.              $(btn).click(() => {
  3878.                  let w = window.open("http://scriptsourceapp.com/portal.html?yturl="+window.location.href.split("v=")[1], null, `height=497, width=1009, status=yes, toolbar=no, menubar=no, location=no`);
  3879.              });
  3880.          }
  3881.      }
  3882.   }, 50);
  3883. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top