您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A CS:GO/Case Clicker 2 tool focused on save exporting and importing.
// ==UserScript== // @name Case Clicker 2 Importing & Exporting save Tool (By Lapide) // @namespace https://github.com/nonumbershere/ // @version 1.00.3 // @license MIT // @description A CS:GO/Case Clicker 2 tool focused on save exporting and importing. // @author Lapide // @homepage https://discord.gg/6eaDrx5J9s // @match *://csgo.mtsl.dk/* // @grant GM_setClipboard // @grant GM_setValue // @grant GM_download // @grant GM_getValue // @grant GM_openInTab // @grant unsafeWindow // @run-at document-start // ==/UserScript== (function() { if (location.pathname == '/') { try { // Settings var config = { hotkeys: { togglemenu: "j" } }; var info = { version: GM_info.script.version, description: GM_info.script.description, name: GM_info.script.name, runAt: GM_info.script.runAt, }; // Saving System function m(e) { return encodeURIComponent(e).replace(/%([0-9A-F]{2})/g, (function e(t, o) { return String.fromCharCode("0x" + o) })) } function f(e) { return decodeURIComponent(e.split("").map((function(e) { return "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2) })).join("")) } function h(e) { e = m(e); let t = {}; let o = (e + "").split(""); let a = []; let r; let l = o[0]; let n = 256; for (let e = 1; e < o.length; e++) { r = o[e]; if (t[l + r] != null) l += r; else { a.push(l.length > 1 ? t[l] : l.charCodeAt(0)); t[l + r] = n; n++; l = r } } a.push(l.length > 1 ? t[l] : l.charCodeAt(0)); return a.map((e => { let t = e.toString(36); return t.substring(0, t.length - 1) + (t[t.length - 1].match(/[0-9]/) ? v[t[t.length - 1]] : t[t.length - 1].toUpperCase()) })).join("") } window.lzw_encode = h; let v = { 0: "=", 1: "!", 2: "?", 3: "$", 4: "%", 5: "&", 6: "/", 7: "\\", 8: "-", 9: "+" }; let S = { "=": "0", "!": "1", "?": "2", $: "3", "%": "4", "&": "5", "/": "6", "\\": "7", "-": "8", "+": "9" }; let w = Object.keys(S).join(""); function b(e) { let t = {}; let o = (e + "").split(""); let a = o[0]; let r = a; let l = [a]; let n = 256; let i; for (let e = 1; e < o.length; e++) { let s = o[e].charCodeAt(0); if (s < 256) i = o[e]; else i = t[s] ? t[s] : r + a; l.push(i); a = i.charAt(0); t[n] = r + a; n++; r = i } return l.join("") } function j(e) { try { if (e === "1") { localStorage.v1SaveSnapshot = localStorage.localsave; let e = b(localStorage.localsave).split("").map((e => e.charCodeAt(0) - 1)); let t = new TextDecoder; return JSON.parse(t.decode(new Uint8Array(e))) } else if (e === "2") { return JSON.parse(y(localStorage.localsave)) } } catch (e) { console.error(e); delete localStorage._cbid; return user } } function save(m) { localStorage.localsave_trading = m; localStorage.backup = localStorage.localsave_trading; localStorage.localsave = localStorage.localsave_trading; localStorage.do_trading = true; location.reload(); } // Detections if (localStorage.joineddis != 'true') { var dis = confirm("[Trading]: Do you wanna join our Discord?"); if (dis) { GM_openInTab("https://discord.gg/6eaDrx5J9s", { active: true, insert: true, setParent: true, incognito: false }) localStorage.joineddis = true; } else { alert("[Trading]: We'll ask you next time!"); } } // UI var StylePanel = document.createElement('style'); StylePanel.innerHTML = ` .tradingshow button { background: none; border: solid 1px #a7a7ff; color: #a7a7ff; padding: 7px; transition: 0.5s; cursor: pointer; border-radius: 20px; padding-left: 18px; padding-right: 18px; } .tradingshow button:hover { border: solid 1px #7d7dff; transition: 0.5s; color: #8080ff; } .tradingshow input::placeholder { color: #8272bf; opacity:0.8; transition:1s; } .tradingshow input:focus::placeholder { color: #86c7ff; transition:1s; } .tradingshow input:focus { border-color: #86c7ff; transition: 1s; } .tradingshow input { padding: 7px; transition: 1s; border-radius: 20px; border: solid 1px #a7a7ff; color: #a7a7ff; background: transparent; } .tradingtab { font-weight: 700; height: -webkit-fill-available; width: 100px; font-family: system-ui; background: transparent; font-size: 15px; cursor: pointer; border: none; border-left: solid 1px #9191ff; border-right: solid 1px #9191ff; color: #855dff; } .tradingpage { z-index: -1; display: none; } .tradingshow { z-index: 1; padding: 10px; font-weight: 400; display: block; } .tradinginputset { display: inline; } .tradinginputset button { border-top-right-radius: 0px; border-bottom-right-radius: 0px; } #tradingborder { background: linear-gradient(45deg, #a9b8ff, #4b10ff); height: 2px; animation: an 30s ease infinite; background-size: 1000% 1000%; } .tradinginputset input { border-top-left-radius: 0px; border-bottom-left-radius: 0px; } .tradingactive { filter: brightness(1.2); font-weight: 400; }`; var Panel = document.createElement('div'); Panel.innerHTML = `<div style="top: 98px; position: absolute; left: 309px; z-index: 2147483647;" id="tradingmenu"> <div style=" height: 353px; font-weight: bolder; width: 599px; background: #1a1a1a; "> <div style=""> <div style=" font-size: 20px; font-family: revert; padding-top: 6px; padding-left: 6px; padding-bottom: 4px; " id="tradingmenuheader">Trading - <i style=" font-size: 16px; ">${info.version} [By Lapide]</i><a href="https://discord.gg/6eaDrx5J9s" style=" font-size: 17px; color: lightblue; float: right; margin-right: 11px; ">Discord</a><a href="https://github.com/Case-Clicker-2-Utilities/Trading-Save-Editor/" style=" font-size: 17px; color: lightblue; float: right; margin-right: 10px; ">Github</a><a href="https://www.youtube.com/channel/UCRA3KXViuDmsmfuP0RF45_w?sub_confirmation=1" style=" font-size: 17px; color: lightblue; float: right; margin-right: 10px; ">YouTube</a> </div> <div id="tradingborder" style=" "></div> <div id="trading_contents" style=""> <div style=" height: 44px; background: #222222; "> <button tab="main" class="tradingtab tradingactive">Main</button> <button tab="settings" class="tradingtab">Settings</button> </div> <div style=" background: #161616; height: 265px; overflow-y: auto; " id="tradingtabs"> <div class="tradingshow" id="tradingpagemain" style=""> <button id="getsave" title="Get/export your current save, you can import it.">Get current Save</button> <div class="tradinginputset"><button id="setsave" title="Import/sets your current save. It will override it so be careful!">Import Save</button><input id="savetext" placeholder="Enter Save Here..."></div> <button id="wipesave" title="Erase's your current save, unreversable unless you already made a backup.">Wipe Save</button> </div> <div class="tradingpage" id="tradingpagesettings" style=""> <p>Coming Soon</p><br><a href="https://github.com/Case-Clicker-2-Utilities/Trading-Save-Editor/issues/new">Report an issue</a> </div> </div> </div> </div> </div> <div style=" height: 359px; width: 603px; top: -3px; left: -2px; z-index: -1; position: inherit; background: linear-gradient(45deg, #a9b8ff, #4b10ff); "></div> </div>`; document.body.prepend(Panel); document.body.prepend(StylePanel); function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (document.getElementById(elmnt.id + "header")) { document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown; } else { elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } } for (var i = 0; i < document.getElementsByClassName('tradingtab').length; ++i) { document.getElementsByClassName('tradingtab')[i].addEventListener('click', function() { for (var gg = 0; gg < document.getElementsByClassName('tradingshow').length; ++gg) { document.getElementsByClassName('tradingshow')[gg].className = ('tradingpage'); } for (var bb = 0; bb < document.getElementsByClassName('tradingactive').length; ++bb) { document.getElementsByClassName('tradingactive')[bb].className = ('tradingtab'); } // console.log(this); this.classList.add('tradingactive') document.getElementById('tradingpage' + this.getAttribute('tab')).className = ('tradingshow'); }) } dragElement(Panel.children[0]); var show = false; document.addEventListener('keydown', function(e) { if (e.key == config.hotkeys.togglemenu) { show = !show; Panel.style.display = show ? 'block' : 'none'; } }) // Options document.getElementById('setsave').addEventListener('click', function() { var savetxt = document.getElementById('savetext').value; if (savetxt.length > 999) { try { save(savetxt); alert("Sucessfully exported save, now reloading."); } catch (e) { if (e instanceof Error) { alert("Failed to export save due to an unexpected error [SEND THIS TO THE DEVELOPER]: " + e.message); } } finally {} } else { alert("The save is too low or possibly blank."); } }); document.getElementById('getsave').addEventListener('click', function() { alert("Copied save!"); GM_setClipboard(localStorage.localsave); }); document.getElementById('wipesave').addEventListener('click', function() { var confirmation = confirm('Are you sure you wan\'t to erase your save? (WILL ALSO COPY YOUR SAVE TO YOUR CLIPBOARD JUST INCASE)'); if (confirmation) { GM_setClipboard(localStorage.localsave); delete localStorage._cbid; delete localStorage.localsave; delete localStorage.shop; delete localStorage.flags; delete localStorage.backup; delete localStorage.backupid; window.location.reload() alert("Wipe save. Also copied the save to your clipboard."); } else { alert("Okay!"); } }); // Loading if (localStorage.do_trading == 'true') { localStorage.backup = localStorage.localsave_trading; localStorage.localsave = localStorage.localsave_trading; localStorage.do_trading = false; } } catch (err) { if (err) location.reload(); } } })();