Itslikeredstoneblock

Krunker map ripper

Jan 16th, 2021
983
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name         Krunker custom map ripper
  3. // @namespace    http://tampermonkey.net/
  4. // @version      0.1
  5. // @description  rips custom maps youre playing.
  6. // @author       Swat
  7. // @match        *://krunker.io/*
  8. // @require      https://cdnjs.cloudflare.com/ajax/libs/msgpack-lite/0.1.26/msgpack.min.js
  9. // @grant        none
  10. // ==/UserScript==
  11.  
  12. window.msgpack = msgpack;
  13. var copy_button = create_copy_button();
  14. var open_button = create_open_button();
  15. var map_button = create_map_button();
  16. var input_field = document.createElement("input");
  17.  
  18. function unpack(data) {
  19.     if (data instanceof DataView) data = new Uint8Array(data.buffer);
  20.     else if (data instanceof ArrayBuffer) data = new Uint8Array(data);
  21.     try { data = msgpack.decode(data); } catch (err) {}
  22.  
  23.     return data;
  24. }
  25.  
  26. function create_copy_button(){
  27.     let button = document.createElement("div");
  28.     default_button(button);
  29.     button.innerText = "Can't rip"
  30.     button.onclick = function(){
  31.         if (input_field.value != ""){
  32.             input_field.select();
  33.             document.execCommand("copy");
  34.             let text_backup = button.innerText;
  35.             button.style.minWidth = button.clientWidth + "px";
  36.             button.innerText = "Copied"
  37.             setTimeout(function(){ button.innerText = text_backup }, 1000);
  38.         }
  39.     }
  40.     return button;
  41. }
  42.  
  43. function create_open_button(){
  44.     let button = document.createElement("div");
  45.     default_button(button);
  46.     button.innerText = "Can't open"
  47.     button.onclick = function(){
  48.         if (input_field.value != ""){
  49.             let opened = window.open("");
  50.             opened.document.write(input_field.value);
  51.         }
  52.     }
  53.     return button;
  54. }
  55.  
  56. function default_button(el){
  57.     el.classList.add("button");
  58.     el.classList.add("small");
  59.     el.classList.add("buttonD");
  60.     el.setAttribute("onmouseenter", "playTick()");
  61.     el.fontSize = "18px";
  62. }
  63.  
  64. function create_container(){
  65.     let container = document.createElement("div");
  66.     container.style.display = "flex";
  67.     return container;
  68. }
  69.  
  70. function create_map_button(){
  71.     let button = document.createElement("div");
  72.     default_button(button);
  73.     button.innerText = "Public map";
  74.     button.onclick = function (){
  75.         if (input_field.value != "")
  76.             window.open("https://krunker.io/social.html?q=" + JSON.parse(input_field.value).name + "&p=map", "_blank");
  77.     }
  78.     return button
  79. }
  80.  
  81. window.WebSocket = new Proxy(WebSocket, {
  82.     construct(target, args) {
  83.         let ws = new target(...args);
  84.         ws.addEventListener('message', function(message) {
  85.             let data = unpack(message.data);
  86.             if (data[0] == "load"){
  87.                 let observer = new MutationObserver(() => {
  88.                     let container = create_container();
  89.                     let name = document.querySelector("#mapInfo").innerText;
  90.                     container.appendChild(map_button);
  91.                     container.appendChild(copy_button);
  92.                     container.appendChild(open_button);
  93.                     document.querySelector("#mapInfo").replaceWith(container);
  94.  
  95.                     document.getElementsByTagName("body")[0].appendChild(input_field);
  96.                     observer.disconnect();
  97.                 })
  98.                 observer.observe(document.querySelector("#mapInfo"), {childList: true});
  99.             }
  100.             if (data[0] == "init"){
  101.                 if(typeof data[10] === "object" && data[10] != null){
  102.                     try {
  103.                         input_field.value = data[10].data;
  104.                         open_button.classList.add("buttonB");
  105.                         open_button.classList.remove("buttonD");
  106.                         open_button.innerText = "Open";
  107.  
  108.                         copy_button.classList.add("buttonB");
  109.                         copy_button.classList.remove("buttonD");
  110.                         copy_button.innerText = "Copy";
  111.  
  112.                         map_button.classList.add("buttonB");
  113.                         map_button.classList.remove("buttonD");
  114.                         map_button.innerText = JSON.parse(input_field.value).name;
  115.                     }
  116.                     catch (err){ alert("An issue occured while loading this map: " + err); }
  117.                 }
  118.             }
  119.         })
  120.         return ws;
  121.     }
  122. });
  123.  
RAW Paste Data