// ==UserScript== // @name Sigmally Mod // @version 4 // @description Sigmally Mod (Client) for Sigmally.com | by cursd#0126 // @author Cursed // @match *://sigmally.com/* // @icon https://i.ibb.co/M7CsXZW/SigMod4.png // @run-at document-end // @license MIT // @namespace https://greasyfork.org/users/981958 // @downloadURL none // ==/UserScript== (function() { 'use strict'; if(localStorage.getItem("SigmodSettings")) localStorage.removeItem("modSettings"); let spcl = []; let modSettings = localStorage.getItem("SigmodSettings"); if (!modSettings) { modSettings = { keyBindingsRapidFeed: "q", keyBindingsdoubleSplit: "d", keyBindingsTripleSplit: "f", keyBindingsQuadSplit: "g", keyBindingsFreezePlayer: "s", keyBindingsToggleMenu: "v", keyBindingsSwitchChat: "t", mapColor: null, nameColor: null, borderColor: null, mapImageURL: "", Theme: "Dark", savedNames: [], tag: 0, showClientChat: false, chatBGcolor: "#2a3052", chatTextColor: "#ffffff", }; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); } else { modSettings = JSON.parse(modSettings); } function hexToRGBA (hex, alpha) { const r = parseInt(hex.slice(1, 3), 16); const g = parseInt(hex.slice(3, 5), 16); const b = parseInt(hex.slice(5, 7), 16); return `rgba(${r}, ${g}, ${b}, ${alpha})`; } class Client { constructor() { this.ws = new WebSocket("wss://sigmallysocket.marco077x.repl.co"); this.id = ""; this.playerId = Math.floor(Math.random() * 1e15); console.log(this.playerId) this.gameMode = ""; this.chatData = []; this.Username = "User"; this.currentTag = 0; this.settingsShown = false; this.chatIsDown = false; this.unreadedMessages = 0; this.notification = document.getElementById("notification"); this.init(); } get style() { return ` #client-chat { position: fixed; bottom: 10px; left: 10px; z-index: 2147483647; overflow: hidden; width: 435px; height: 250px; border-radius: 2px; border-top-left-radius: 10px; border-top-right-radius: 10px; display: flex; flex-direction: column; justify-content: flex-end; transform-origin: bottom; transition: all .3s ease; } #client-messages { display: flex; flex-direction: column; max-height: 200px; overflow-y: auto; direction: rtl; } .message { direction: ltr; margin: 2px 0 0 5px; } #client-messages::-webkit-scrollbar { width: 10px; } #client-messages::-webkit-scrollbar-track { background: #222; border-radius: 5px; } #client-messages::-webkit-scrollbar-thumb { background-color: #333; border-radius: 5px; } #client-messages::-webkit-scrollbar-thumb:hover { background: #444; } #chatInputContainer { display: flex; align-items: center; padding: 5px; background: rgba(68, 68, 68, 0.5); } #chatSendInput { flex-grow: 1; border: none; background: transparent; color: #fff; padding: 5px; outline: none; } #sendButton { background: #e37955; border: none; border-radius: 5px; padding: 5px 10px; color: #fff; transition: all 0.3s; cursor: pointer; } #sendButton:hover { background: #cc603b; } .chatOptions { position: fixed; bottom: 10px; left: 450px; z-index: 2147483647; } .chatButton { background: #e37955; border: 0; border-radius: 5px; padding: 5px 10px; color: #fff; transition: all 0.3s; } .chatButton:hover { background: #cc603b; } .chatButton:active { scale: 0.95; } .chatText { color: #ffffff; font-weight: 500; -webkit-text-stroke: 0.5px #000; text-stroke: 0.5px #000; } #tag { width: 50px; margin-left: 5px } .ClientChatTitle { position: absolute; top: 5px; right: 5px; pointer-events: none; -webkit-text-stroke: 0.5px #000; text-stroke: 0.5px #000; color: #7400FF; font-size: 16px; font-weight: 500; } #sendButton { display: flex; align-items: center; gap: 5px; } #notification { position: absolute; top: -10px; right: -10px; background-color: #3EDF6F; color: #ffffff; font-size: 12px; font-weight: bold; padding: 2px 7px; border-radius: 50px; transform: rotate(15deg); font-weight: 500; } .chatSettings { position: absolute; top: 30px; right: 36px; border: none; background-color: transparent; transition: all .3s ease; } .chatSettings:hover { transform: scale(.9) } .chatDown { position: absolute; top: 30px; right: 5px; width: 30px; } .chatSettingsDiv { z-index: 99996; position: absolute; bottom: 45px; left: 450px; height: 215px; width: 150px; border-radius: 10px; display: flex; flex-direction: column; align-items: center; padding: 10px; transition: all .3s ease; } /* Mod Style */ :root { --default-mod-color: #2E2D80; } input, select, button{ outline: none; } .flex { display: flex; } .centerX { display: flex; justify-content: center; } .centerY { display: flex; align-items: center; } .centerXY { display: flex; align-items: center; justify-content: center } .f-column { display: flex; flex-direction: column; } #sig-mod-settings { border-radius: 4px; border: 2px solid #2E2D80; width: 440px; box-shadow: inset 0 0 10px #424190, 0 0 10px #424190; height: 355px; } .tabs_navigation { display: flex; justify-content: space-around; } .keybinding { max-width: 20px; text-align: center; margin-right: 5px; outline: none; color: #fff; background-color: #111; border: 0px solid #fff; font-weight: 500; border-bottom: 2px solid var(--default-mod-color); position: relative; border-top-right-radius: 4px; border-top-left-radius: 4px; transition: all .3s ease; } .keybinding:hover { background-color: #333; } #sig-mod-settings.hidden { display: none; } #text-block,#left_ad_block,#ad_bottom,.ad-block,.ad-block-left,.ad-block-right { display: none; } .SettingsTitle{ font-size: 32px; color: #EEE; margin-left: 10px; } .CloseBtn{ outline: none; background-color: transparent; padding: 10px; font-size: 16px; transition: all .3s; color: #fff; border-radius: 15px; border: 2px solid #4C2B8D; width: 48px; } .CloseBtn:hover{ border: 2px solid #5600FF; } .text { user-select: none; font-weight: 500; text-align: left; } .titleImg{ width: 50px; height: 50px; border-radius: 20px; object-fit: cover; } .modContainer { display: flex; justify-content: space-between; } .modButton{ background-color: #333; border-radius: 5px; color: #fff; transition: all .3s; outline: none; padding: 5px; font-size: 13px; border: none; } .modButton:hover { background-color: #222 } .tabbtn { background-color: #111; border-bottom: 2px solid var(--default-mod-color); border-radius: 0; position: relative; border-top-right-radius: 2px; border-top-left-radius: 2px; box-shadow: 0 4px 10px -4px var(--default-mod-color); } .tabbtn::before { content: ""; position: absolute; left: 0; bottom: 0; width: 100%; height: 0; background: linear-gradient(to top, var(--default-mod-color), transparent); transition: height 0.3s ease; } .tabbtn:hover::before { height: 30%; } .modInput { background-color: #111; border: none; border-bottom: 2px solid var(--default-mod-color); border-radius: 0; position: relative; border-top-right-radius: 4px; border-top-left-radius: 4px; font-family: arial; font-weight: 500; padding: 4px; box-shadow: 0 4px 10px -4px var(--default-mod-color); color: #fff; } .SettingsButton{ border: none; outline: none; margin-right: 10px; transition: all .3s ease; } .SettingsButton:hover { scale: 1.1; } .colorInput{ background-color: transparent; width: 33px; height: 35px; border-radius: 50%; border: none; } .colorInput::-webkit-color-swatch { border-radius: 50%; border: 1px solid #000; } #dclinkdiv { display: flex; flex-direction: row; } .dclinks { width: calc(50% - 5px); height: 36px; display: flex; justify-content: center; align-items: center; background-color: rgba(88, 101, 242, 1); border-radius: 6px; margin: 0 auto; color: #fff; } #settings { display: flex; flex-direction: column; } #cm_close__settings { width: 50px; transition: all .3s ease; } #cm_close__settings svg:hover { scale: 1.1; } #cm_close__settings svg { transition: all .3s ease; } .modTitleText { text-align: center; font-size: 16px; } #settings > .checkbox-grid { width: 232px; } .ModSettings { display: flex; justify-content: center; } .settingsTitle { margin-bottom: 6px; text-decoration: underline; font-size: 16px font-weight: 600 } .tab { display: none; } .modItem { display: flex; justify-content: center; align-items: center; flex-direction: column; } .tab-content { margin: 10px; } .w-100 { width: 100% } .btnRS { margin: 0 5px; width: 50% } #savedNames { background-color: #222; padding: 5px; border-top-left-radius: 5px; overflow-y: scroll; width: 200px; height: 170px; display: flex; border-bottom: 2px solid var(--default-mod-color); box-shadow: 0 4px 20px -4px var(--default-mod-color); } #savedNames::-webkit-scrollbar, .themes::-webkit-scrollbar, .modKeybindings::-webkit-scrollbar { width: 10px; } #savedNames::-webkit-scrollbar-track, .themes::-webkit-scrollbar-track, .modKeybindings::-webkit-scrollbar-track { background: #222; border-radius: 5px; } #savedNames::-webkit-scrollbar-thumb, .themes::-webkit-scrollbar-thumb, .modKeybindings::-webkit-scrollbar-thumb { background-color: #555; border-radius: 5px; } #savedNames::-webkit-scrollbar-thumb:hover, .themes::-webkit-scrollbar-thumb:hover, .modKeybindings::-webkit-scrollbar-thumb:hover { background: #666; } .themes { display: flex; flex-direction: row; width: 100%; height: 220px; background: #000; border-radius: 5px; overflow-y: scroll; gap: 10px; padding: 5px; flex-wrap: wrap; justify-content: center; } .themeContent { width: 50px; height: 50px; border: 2px solid #222; border-radius: 50%; background-position: center; } .theme { height: 75px; display: flex; align-items: center; justify-content: center; flex-direction: column; cursor: pointer; } .delName { font-weight: 500; background: #e17e7e; height: 20px; border: none; border-radius: 5px; font-size: 10px; margin-left: 5px; color: #fff; display: flex; justify-content: center; align-items: center; width: 20px; } .NameDiv { display: flex; background: #151515; border-radius: 5px; margin: 5px; padding: 3px 8px; height: 34px; align-items: center; justify-content: space-between; cursor: pointer; box-shadow: 0 4px 10px -4px var(--default-mod-color); } .NameLabel { cursor: pointer; font-weight: 500; text-align: center; color: #fff; } .resetButton { width: 25px; height: 25px; background-image: url("https://raw.githubusercontent.com/Sigmally/SigMod/main/images/reset.svg"); background-color: transparent; border: none; } .modAlert { position: absolute; top: 50px; left: 50%; transform: translate(-50%, -50%); z-index: 99998; background: #57C876; padding: 10px; border-radius: 10px; text-align: center; transition: all .3s ease-out; } .modAlert > .text { color: #fff; } .donate { position: fixed; top: 80px; left: 50%; transform: translate(-50%, -50%); z-index: 99995; background: #3F3F3F; border-radius: 10px; display: flex; flex-direction: column; padding: 10px; color: #fff; } .themeEditor { z-index: 100000; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); background: #222; color: #fff; padding: 10px; border-radius: 5px; } .modKeybindings { display: flex; flex-direction: column; overflow-y: scroll; max-height: 170px; } .modKeybindings > label { margin-right: 5px; } `; } sendLog(msg) { const logMessage = { type: "log", content: msg, name: this.Username, }; this.ws.send(JSON.stringify(logMessage)); } handleWSMessage(message) { const parsedMessage = JSON.parse(message); if (parsedMessage.type === "log-back") { console.log(parsedMessage.content); } else if (parsedMessage.type === "chat-message") { const content = parsedMessage.content; const msgUser = content.user; const msgContent = content.message; const tag = content.tag; const id = content.id; if (tag === this.currentTag) { this.chatData.push(msgUser, msgContent); this.updateChat(id, msgUser, msgContent); } } else if(parsedMessage.type === "auth-success") { spcl = parsedMessage.content; } } createTagElement() { const nick = document.querySelector("#nick"); const tagElement = document.createElement("input"); tagElement.classList.add("form-control"); tagElement.placeholder = "tag"; tagElement.setAttribute("id", "tag"); tagElement.setAttribute("maxLength", 3); tagElement.value = "0"; const pnick = nick.parentElement; pnick.style.display = "flex"; document.getElementById("play-btn").addEventListener("click", () => { this.currentTag = tagElement.value; document.getElementById("client-chat-title").innerText = `SigMod Client Chat | Tag: ${this.currentTag}`; modSettings.tag = this.currentTag; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }) nick.insertAdjacentElement("afterend", tagElement); } updateTag(message) { const content = message.content const tag = content.tag; const members = content.members; console.log(tag, members) } sendData(type, content) { const msg = { type: type, content: content } this.ws.send(JSON.stringify(msg)) } createClientChat() { const chat = document.createElement("div"); chat.id = "client-chat"; chat.classList.add("client_chat_div") chat.innerHTML = ` SigMod Client Chat | Tag: ${this.currentTag}
`; const chatOptions = document.createElement("div"); chatOptions.innerHTML = ` `; chatOptions.classList.add("chatOptions"); document.body.append(chatOptions); document.body.append(chat); const send = document.getElementById("sendButton"); send.addEventListener("click", () => { this.sendMsg(); }) const chatSendInput = document.getElementById("chatSendInput"); chatSendInput.addEventListener("keydown", (e) => { e.stopPropagation(); if(e.code == "Enter") { this.sendMsg(); setTimeout(() => { chatSendInput.blur(); }, 10) } }) chatSendInput.addEventListener("click", () => { const noti = document.getElementById("notifications"); if(document.getElementById("notification")) { document.getElementById("notification").remove(); this.unreadedMessages = 0; } }) document.addEventListener("keydown", (e) => { if(e.code == "Enter") { chatSendInput.focus(); if(document.getElementById("notification")) { document.getElementById("notification").remove(); this.unreadedMessages = 0; } } }) } switchChat() { const mainBtn = document.getElementById("mainBtn"); const partyBtn = document.getElementById("partyBtn"); const chatBlock = document.getElementById("chat_block"); const clientChat = document.getElementById("client-chat"); const showChat = document.getElementById("showChat"); mainBtn.addEventListener("click", () => { chatBlock.style.display = "block"; clientChat.style.display = "none"; if(!showChat.checked) showChat.click() modSettings.showClientChat = false; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)) }) partyBtn.addEventListener("click", () => { chatBlock.style.display = "none"; clientChat.style.display = "flex"; if(document.getElementById("notification")) { document.getElementById("notification").remove(); this.unreadedMessages = 0; } if(showChat.checked) showChat.click() modSettings.showClientChat = true; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)) }) } updateChat(id, user, message) { const chatContainer = document.getElementById("client-messages"); const formattedMessage = `${user}: ${message}`; chatContainer.innerHTML += formattedMessage; const messageCount = chatContainer.children.length; const messageLimit = 50; if (messageCount > messageLimit) { const messagesToRemove = messageCount - messageLimit; for (let i = 0; i < messagesToRemove; i++) { chatContainer.removeChild(chatContainer.firstChild); this.chatData.splice(0, 2); } } chatContainer.scrollTop = chatContainer.scrollHeight; if(id == this.playerId) return this.unreadedMessages++; if (this.unreadedMessages === 0) return; const partyBtn = document.getElementById("partyBtn"); const notification = this.notification; if (notification) { notification.textContent = this.unreadedMessages; } else { const notificationElement = document.createElement("span"); notificationElement.id = "notification"; notificationElement.textContent = this.unreadedMessages; partyBtn.appendChild(notificationElement); } } sendMsg() { const username = document.getElementById("nick").value; let msg = document.querySelector("#chatSendInput").value; let tag = this.currentTag; let id = this.playerId; const msgContent = { name: username, message: msg, length: msg.length, tag: tag, playerId: id }; if(msg == "") return const settings = document.querySelector(".chatSettings"); const chatDown = document.querySelector(".chatDown"); const sendButton = document.getElementById("sendButton"); const client_messages = document.getElementById("client-messages"); if(!this.chatIsDown) { document.getElementById("client-chat").style.height = "250px"; document.getElementById("client-chat-title").style.display = "block"; chatDown.style.rotate = "0deg"; chatDown.style.top = "30px"; settings.style.display = "block"; sendButton.style.display = "block"; client_messages.style.display = "flex"; this.chatIsDown = false; } this.sendData("chat-message", msgContent); document.getElementById("chatSendInput").value = ""; } chatOptions() { let chatIsDown = this.chatIsDown; const sendButton = document.getElementById("sendButton"); const settings = document.createElement("button"); const client_messages = document.getElementById("client-messages"); settings.innerHTML = "" settings.classList.add("chatSettings") document.getElementById("client-chat").append(settings) settings.addEventListener("click", this.chatSettings) const chatDown = document.createElement("button"); chatDown.innerHTML = "↓"; chatDown.addEventListener("click", () => { if(!chatIsDown) { document.getElementById("client-chat").style.height = "40px"; document.getElementById("client-chat-title").style.display = "none"; chatDown.style.rotate = "180deg"; chatDown.style.top = "6px"; settings.style.display = "none"; sendButton.style.display = "none"; client_messages.style.display = "none"; chatIsDown = true; } else { document.getElementById("client-chat").style.height = "250px"; document.getElementById("client-chat-title").style.display = "block"; chatDown.style.rotate = "0deg"; chatDown.style.top = "30px"; settings.style.display = "block"; sendButton.style.display = "block"; client_messages.style.display = "flex"; chatIsDown = false; } }) chatDown.classList.add("chatDown", "modButton") document.getElementById("client-chat").append(chatDown) } chatSettings() { let settingsShown = this.settingsShown; if(!settingsShown) { const settings = document.createElement("div"); settings.classList.add("chatSettingsDiv", "client_chat_div"); settings.id = "ClientChatSettings"; settings.innerHTML = ` More coming soon `; settings.style.backgroundColor = hexToRGBA(modSettings.chatBGcolor, 0.4); document.body.append(settings) setTimeout(() => { const changeBg = document.getElementById("changeChatBg") changeBg.addEventListener("input", () => { const clientChatDivs = document.getElementsByClassName("client_chat_div"); for (let i = 0; i < clientChatDivs.length; i++) { const rgbaColor = hexToRGBA(changeBg.value, 0.4); clientChatDivs[i].style.backgroundColor = rgbaColor; } modSettings.chatBGcolor = changeBg.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }); const changeChatColor = document.getElementById("changeChatColor") changeChatColor.addEventListener("input", () => { const chatText = document.getElementsByClassName("chatText"); for(let i=0; i < chatText.length; i++) { chatText[i].style.color = changeChatColor.value; } modSettings.chatTextColor = changeChatColor.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }); }); this.settingsShown = true; } else { document.querySelector(".chatSettingsDiv").remove(); this.settingsShown = false; } } init() { const chatBlock = document.getElementById("chat_block"); const showChat = document.getElementById("showChat"); //style const styleTag = document.createElement("style") styleTag.innerHTML = this.style; document.head.append(styleTag) setTimeout(() => { this.Username = uData.fullName || document.getElementById("nick").value || "User"; this.id = uData.id || ""; }, 1500) this.ws.onopen = () => { setTimeout(() => { this.sendLog(`${this.Username} connected to Client.`); this.sendData("auth", this.id) }, 1600) }; this.ws.onmessage = (event) => { const message = event.data; this.handleWSMessage(message); }; setTimeout(() => { const changeBg = document.getElementById("changeChatBg"); const changeChatColor = document.getElementById("changeChatColor"); this.switchChat(); this.chatOptions(); const clientChat = document.getElementById("client-chat"); if (localStorage.getItem("SigmodSettings")) { const modSettings = JSON.parse(localStorage.getItem("SigmodSettings")); if (modSettings.tag) { console.log(modSettings.tag); this.currentTag = modSettings.tag; document.getElementById("tag").value = this.currentTag; document.getElementById("client-chat-title").innerText = `SigMod Client Chat | Tag: ${this.currentTag}`; } if(!modSettings.showClientChat) { chatBlock.style.display = "block"; clientChat.style.display = "none"; if(showChat.checked) showChat.click(); } else { chatBlock.style.display = "none"; clientChat.style.display = "flex"; if(!showChat.checked) showChat.click(); } if(changeBg || changeChatColor) { changeBg.value = modSettings.chatBGcolor; changeChatColor.value = modSettings.chatTextColor; } const clientChatDivs = document.getElementsByClassName("client_chat_div"); for (let i = 0; i < clientChatDivs.length; i++) { const rgbaColor = hexToRGBA(modSettings.chatBGcolor, 0.4); clientChatDivs[i].style.backgroundColor = rgbaColor; } const chatText = document.getElementsByClassName("chatText"); for(let i=0; i < chatText.length; i++) { chatText[i].style.color = modSettings.chatTextColor; } } }); this.createTagElement(); this.createClientChat(); } } new Client(); function keypress(key, keycode) { const keyDownEvent = new KeyboardEvent("keydown", { key: key, code: keycode }); const keyUpEvent = new KeyboardEvent("keyup", { key: key, code: keycode }); window.dispatchEvent(keyDownEvent); window.dispatchEvent(keyUpEvent); } function mod() { this.welcomeUser = document.createElement("span"); this.splitKey = { keyCode: 32, code: "Space", cancelable: true, composed: true, isTrusted: true, which: 32, } this.createMenu(); } mod.prototype = { respawnTime: Date.now(), respawnCooldown: 1000, move(cx, cy) { const mouseMoveEvent = new MouseEvent("mousemove", { clientX: cx, clientY: cy }); const canvas = document.querySelector("canvas"); canvas.dispatchEvent(mouseMoveEvent); }, center(sx, sy) { const mouseMoveEvent = new MouseEvent("mousemove", { clientX: sx, clientY: sy }); const canvas = document.getElementById("canvas"); canvas.dispatchEvent(mouseMoveEvent); }, getColors() { const mapColor = document.getElementById("mapColor"); const mapImage = document.getElementById("mapImage"); const originalFillRect = CanvasRenderingContext2D.prototype.fillRect; function ChangeMapColor() { CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) { if ((width + height) / 2 === (window.innerWidth + window.innerHeight) / 2) { this.fillStyle = mapColor.value; } originalFillRect.apply(this, arguments); }; modSettings.mapColor = mapColor.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); } mapColor.addEventListener("input", ChangeMapColor); function ChangeMapImage() { const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const img = new Image(); let pattern; img.onload = function () { const tempCanvas = document.createElement("canvas"); const tempCtx = tempCanvas.getContext("2d"); tempCanvas.width = img.width; tempCanvas.height = img.height; tempCtx.drawImage(img, 0, 0); pattern = ctx.createPattern(tempCanvas, "repeat"); fillCanvas(); }; function fillCanvas() { const fillRect = CanvasRenderingContext2D.prototype.fillRect; CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) { this.fillStyle = pattern; fillRect.apply(this, arguments); }; ctx.fillRect(0, 0, canvas.width, canvas.height); } img.src = mapImage.value; modSettings.mapImageURL = mapImage.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); } document.getElementById("setMapImage").addEventListener("click", () => { if(mapImage.value == "") return const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const img = new Image(); let pattern; img.onload = function() { const tempCanvas = document.createElement("canvas"); const tempCtx = tempCanvas.getContext("2d"); tempCanvas.width = img.width; tempCanvas.height = img.height; tempCtx.drawImage(img, 0, 0); pattern = ctx.createPattern(tempCanvas, "repeat"); fillCanvas(); }; function fillCanvas() { const fillRect = CanvasRenderingContext2D.prototype.fillRect; CanvasRenderingContext2D.prototype.fillRect = function(x, y, width, height) { this.fillStyle = pattern; fillRect.apply(this, arguments); }; ctx.fillRect(0, 0, canvas.width, canvas.height); } img.src = mapImage.value; modSettings.mapImageURL = mapImage.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }); const mapColorReset = document.getElementById("mapColorReset"); mapColorReset.addEventListener("click", () => { modSettings.mapColor = null; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); const mapColor = document.getElementById("mapColor"); mapColor.value = ""; }); const removeButton = document.getElementById("removeMapImage"); removeButton.addEventListener("click", () => { if (mapImage.value == "" || modSettings.mapImageURL === "") return; if (confirm("You need to reload the page to remove the background image. Reload?")) { modSettings.mapImageURL = ""; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); location.reload(); } }); if (localStorage.getItem("SigmodSettings")) { function ChangeMapColor() { CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) { if ((width + height) / 2 === (window.innerWidth + window.innerHeight) / 2) { this.fillStyle = modSettings.mapColor; } originalFillRect.apply(this, arguments); }; } ChangeMapColor(); function ChangeMapImage() { const canvas = document.getElementById("canvas"); const ctx = canvas.getContext("2d"); const img = new Image(); let pattern; img.onload = function () { const tempCanvas = document.createElement("canvas"); const tempCtx = tempCanvas.getContext("2d"); tempCanvas.width = img.width; tempCanvas.height = img.height; tempCtx.drawImage(img, 0, 0); pattern = ctx.createPattern(tempCanvas, "repeat"); fillCanvas(); }; function fillCanvas() { const fillRect = CanvasRenderingContext2D.prototype.fillRect; CanvasRenderingContext2D.prototype.fillRect = function (x, y, width, height) { this.fillStyle = pattern; fillRect.apply(this, arguments); }; ctx.fillRect(0, 0, canvas.width, canvas.height); } img.src = modSettings.mapImageURL; } mapImage.value = modSettings.mapImageURL; ChangeMapImage(); } }, setColors() { // - NAME - // const nameColorValue = document.getElementById("nameColor"); const fillText = CanvasRenderingContext2D.prototype.fillText; nameColorValue.addEventListener("input", () => { CanvasRenderingContext2D.prototype.fillText = function(text, x, y) { if (text === document.getElementById("nick").value && this.playerId == this.playerId) { const width = this.measureText(text).width; this.fillStyle = nameColorValue.value; } return fillText.apply(this, arguments); }; modSettings.nameColor = nameColorValue.value localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)) }) if (localStorage.getItem("SigmodSettings")) { const nameColor = document.getElementById("nameColor"); CanvasRenderingContext2D.prototype.fillText = function(text, x, y) { if (text === document.getElementById("nick").value) { const width = this.measureText(text).width; this.fillStyle = modSettings.nameColor; } return fillText.apply(this, arguments); }; nameColor.value = modSettings.nameColor; } const nameColorReset = document.getElementById("nameColorReset"); nameColorReset.addEventListener("click", () => { CanvasRenderingContext2D.prototype.fillText = function(text, x, y) { if (text === document.getElementById("nick").value) { const width = this.measureText(text).width; const fontSize = 8; this.fillStyle = "#ffffff"; } return fillText.apply(this, arguments); }; nameColorValue.value = "#ffffff" modSettings.nameColor = null; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)) }); if(modSettings.nameColor == null) nameColorValue.value = "#ffffff"; // - BORDER - // const borderColorinput = document.getElementById("borderColor"); const borderColorReset = document.getElementById("borderColorReset"); const moveTo = CanvasRenderingContext2D.prototype.moveTo; borderColorinput.addEventListener("input", () => { CanvasRenderingContext2D.prototype.moveTo = function(x, y) { this.strokeStyle = borderColorinput.value; return moveTo.apply(this, arguments) } modSettings.borderColor = borderColorinput.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)) }) borderColorReset.addEventListener("click", () => { CanvasRenderingContext2D.prototype.moveTo = function(x, y) { this.strokeStyle = "" return moveTo.apply(this, arguments) } modSettings.borderColor = ""; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }) if(modSettings.borderColor !== null) { CanvasRenderingContext2D.prototype.moveTo = function(x, y) { this.strokeStyle = modSettings.borderColor; return moveTo.apply(this, arguments) } } }, menu() { let Tab1; let Tab2; let Tab3; let Tab4; let Tab5; const welcomeuser = this.welcomeUser; const ModSettings = document.createElement("div"); const KeyBindings = document.createElement("div"); function openTab(tab) { let tabSelected = document.getElementById(tab); let allTabs = document.getElementsByClassName("tab"); for (let i = 0; i < allTabs.length; i++) { allTabs[i].style.display = "none"; } tabSelected.style.display = "flex"; } const settings = document.querySelector("#cm_modal__settings > .ctrl-modal__overlay > .ctrl-modal__modal"); const DefaultSettings = document.querySelector("#settings > .checkbox-grid"); const settingsTitle = settings.querySelector(".ctrl-modal__header > .ctrl-modal__title"); settingsTitle.innerHTML = ' SigMod Settings'; settingsTitle.style.textAlign = "left"; settings.setAttribute("id", "sig-mod-settings"); const settingsHeader = settings.querySelector(".ctrl-modal__header"); const menuTabs = document.createElement("div"); menuTabs.classList.add("tabs_navigation"); menuTabs.innerHTML = ` `; settingsHeader.insertAdjacentElement("afterend", menuTabs); const gameSettings = document.querySelector("#settings"); const defaultSettingsTitle = document.createElement("span"); defaultSettingsTitle.textContent = "Basic Settings"; defaultSettingsTitle.classList.add("text", "settingsTitle"); gameSettings.insertAdjacentElement("afterbegin", defaultSettingsTitle); welcomeuser.textContent = `Welcome Guest, to SigMod!`; welcomeuser.classList.add("text"); welcomeuser.style = "margin: 10px 0; text-align: center; font-size: 16px;"; const bsettings = document.querySelector("#sig-mod-settings > .ctrl-modal__content > .menu__item"); bsettings.classList.add("tab") bsettings.style = "display: flex; flex-direction: column; margin: 0"; bsettings.insertAdjacentElement("afterbegin", welcomeuser); Tab1 = bsettings; Tab1.setAttribute("id", "Tab1") Tab2 = document.createElement("div"); Tab2.classList.add("centerX"); Tab2.innerHTML = `
Map Color
Name Color
Border Colors
Map image:
`; Tab2.classList.add("tab", "hidden"); Tab2.setAttribute("id", "Tab2"); Tab3 = document.createElement("div"); Tab3.innerHTML = `
Save names
saved:
`; Tab3.classList.add("tab", "hidden", "centerX"); Tab3.setAttribute("id", "Tab3"); Tab4 = document.createElement("div"); Tab4.innerHTML = `
`; Tab4.classList.add("tab", "hidden", "centerX"); Tab4.setAttribute("id", "Tab4"); Tab5 = document.createElement("div"); Tab5.innerHTML = `

SigMod V4 | Cursed YT | Official Sigmally YT

`; Tab5.classList.add("tab", "hidden"); Tab5.setAttribute("id", "Tab5"); document.getElementById("modHome").addEventListener("click", () => { openTab("Tab1"); }); document.getElementById("GameOptions").addEventListener("click", () => { openTab("Tab2"); }); document.getElementById("NameOptions").addEventListener("click", () => { openTab("Tab3"); }); document.getElementById("modThemes").addEventListener("click", () => { openTab("Tab4"); }); document.getElementById("modInfo").addEventListener("click", () => { openTab("Tab5"); }); const tabContent = document.querySelector("#sig-mod-settings > .ctrl-modal__content"); tabContent.append(Tab2) tabContent.append(Tab3) tabContent.append(Tab4) tabContent.append(Tab5) KeyBindings.classList.add("modKeybindings") KeyBindings.innerHTML = ` KeyBindings `; bsettings.append(ModSettings); ModSettings.append(gameSettings) ModSettings.append(KeyBindings); ModSettings.classList.add("ModSettings") document.querySelector("#cm_close__settings svg").setAttribute("width", "22") document.querySelector("#cm_close__settings svg").setAttribute("height", "24") }, Themes() { const elements = [ "#menu", ".top-users__inner", "#left-menu", ".menu-links", ".menu--stats-mode", "#js-skin-select-icon-text", "#nick", "#tag", "#gamemode", "#option_0", "#option_1", "#option_2", "#signInBtn", "#cm_modal__settings > .ctrl-modal__overlay > .ctrl-modal__modal" ]; const b_inner = document.querySelector(".body__inner"); let bodyColorElements = b_inner.querySelectorAll( ".body__inner > :not(.body__inner), #s-skin-select-icon-text" ); const toggleColor = (element, background, text) => { let image = `url("${background}")`; if (background.includes("http")) { element.style.background = image; element.style.backgroundPosition = "center"; element.style.backgroundSize = "cover"; } else { element.style.background = background; } element.style.color = text; }; const openSVG = document.querySelector("#clans_and_settings > Button > svg"); const openSVGPath = document.querySelector("#clans_and_settings > Button > svg > path"); const newPath = openSVG.setAttribute("fill", "#fff") const closeSVGPath = document.querySelector("#cm_close__settings > svg > path"); openSVG.setAttribute("width", "36") openSVG.setAttribute("height", "36") const toggleTheme = (theme) => { if (theme.text === "#FFFFFF") { openSVGPath.setAttribute("fill", "#fff") closeSVGPath.setAttribute("stroke", "#fff") } else { closeSVGPath.setAttribute("stroke", "#222"); openSVG.setAttribute("fill", "#222"); } const backgroundColor = theme.background; const textColor = theme.text; elements.forEach((element) => { const el = document.querySelector(element); toggleColor(el, backgroundColor, textColor); }); bodyColorElements.forEach((element) => { element.style.color = textColor; }); modSettings.Theme = theme.name; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }; const themes = { defaults: [ { name: "Dark", background: "#151515", text: "#FFFFFF" }, { name: "White", background: "#ffffff", text: "#000000" }, ], orderly: [ { name: "THC", background: "linear-gradient(160deg, #9BEC7A, #117500)", text: "#000000" }, { name: "4 AM", background: "linear-gradient(160deg, #8B0AE1, #111)", text: "#FFFFFF" }, { name: "OTO", background: "linear-gradient(160deg, #A20000, #050505)", text: "#FFFFFF" }, { name: "Gaming", background: "https://i.ibb.co/DwKkQfh/BG-1-lower-quality.jpg", text: "#FFFFFF" }, { name: "Shapes", background: "https://i.ibb.co/h8TmVyM/BG-2.png", text: "#FFFFFF" }, { name: "Blue", background: "https://i.ibb.co/9yQBfWj/BG-3.png", text: "#FFFFFF" }, { name: "Blue - 2", background: "https://i.ibb.co/7RJvNCX/BG-4.png", text: "#FFFFFF" }, { name: "Purple", background: "https://i.ibb.co/vxY15Tv/BG-5.png", text: "#FFFFFF" }, { name: "Orange Blue", background: "https://i.ibb.co/99nfFBN/BG-6.png", text: "#FFFFFF" }, { name: "Gradient", background: "https://i.ibb.co/hWMLwLS/BG-7.png", text: "#FFFFFF" }, { name: "Sky", background: "https://i.ibb.co/P4XqDFw/BG-9.png", text: "#000000" }, { name: "Sunset", background: "https://i.ibb.co/0BVbYHC/BG-10.png", text: "#FFFFFF" }, { name: "Galaxy", background: "https://i.ibb.co/MsssDKP/Galaxy.png", text: "#FFFFFF" }, { name: "Planet", background: "https://i.ibb.co/KLqWM32/Planet.png", text: "#FFFFFF" }, { name: "colorful", background: "https://i.ibb.co/VqtB3TX/colorful.png", text: "#FFFFFF" }, { name: "Sunset - 2", background: "https://i.ibb.co/TLp2nvv/Sunset.png", text: "#FFFFFF" }, { name: "Epic", background: "https://i.ibb.co/kcv4tvn/Epic.png", text: "#FFFFFF" }, { name: "Galaxy - 2", background: "https://i.ibb.co/smRs6V0/galaxy.png", text: "#FFFFFF" }, { name: "Cloudy", background: "https://i.ibb.co/MCW7Bcd/cloudy.png", text: "#000000" }, ] }; function createThemeCard(theme) { const themeCard = document.createElement("div"); themeCard.classList.add("theme"); let themeBG; if (theme.background.includes("http")) { themeBG = `background: url(${theme.background})`; } else { themeBG = `background: ${theme.background}`; } themeCard.innerHTML = `
${theme.name}
`; themeCard.addEventListener("click", () => { toggleTheme(theme); }); return themeCard; } const themesContainer = document.getElementById("themes"); themes.defaults.forEach((theme) => { const themeCard = createThemeCard(theme); themesContainer.append(themeCard); }); const orderlyThemes = themes.orderly.sort((a, b) => a.name.localeCompare(b.name)); orderlyThemes.forEach((theme) => { const themeCard = createThemeCard(theme); themesContainer.append(themeCard); }); const savedTheme = modSettings.Theme; if (savedTheme) { let selectedTheme; selectedTheme = themes.defaults.find((theme) => theme.name === savedTheme); if (!selectedTheme) { selectedTheme = themes.orderly.find((theme) => theme.name === savedTheme); } if (selectedTheme) { toggleTheme(selectedTheme); } } }, smallMods() { let user; const welcomeuser = this.welcomeUser; setTimeout(() => { user = uData.givenName || "Guest"; welcomeuser.textContent = `Welcome ${user}, to SigMod!` }, 1500) const gameSettings = document.querySelector(".checkbox-grid"); gameSettings.innerHTML += `
  • `; const gameTitle = document.getElementById("title"); gameTitle.innerHTML = 'SigmallyMod by Cursed'; const nickName = document.getElementById("nick"); nickName.maxLength = 50; }, saveNames() { let savedNames = modSettings.savedNames; let savedNamesOutput = document.getElementById("savedNames"); let saveNameBtn = document.getElementById("saveName"); let saveNameInput = document.getElementById("saveNameValue"); const createNameDiv = (name) => { let nameDiv = document.createElement("div"); nameDiv.classList.add("NameDiv"); let nameLabel = document.createElement("label"); nameLabel.classList.add("NameLabel"); nameLabel.innerText = name; let delName = document.createElement("button"); delName.innerText = "X"; delName.classList.add("delName"); nameDiv.addEventListener("click", () => { navigator.clipboard.writeText(nameLabel.innerText).then(() => { const copiedAlert = document.createElement("div"); copiedAlert.innerHTML = ` Added Nickname to clipboard! `; copiedAlert.classList.add("modAlert"); setTimeout(() => { copiedAlert.style.opacity = 0; setTimeout(() => { copiedAlert.remove(); }, 300) }, 500) document.querySelector(".body__inner").append(copiedAlert) }); }); delName.addEventListener("click", () => { if (confirm("Are you sure you want to delete the name '" + nameLabel.innerText + "'?")) { console.log("deleted name: " + nameLabel.innerText); nameDiv.remove(); savedNames = savedNames.filter((n) => n !== nameLabel.innerText); modSettings.savedNames = savedNames; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); } }); nameDiv.appendChild(nameLabel); nameDiv.appendChild(delName); return nameDiv; }; saveNameBtn.addEventListener("click", () => { if (saveNameInput.value == "") { console.log("empty name"); } else { setTimeout(() => { saveNameInput.value = ""; }, 10); if (savedNames.includes(saveNameInput.value)) { console.log("You already have this name saved!"); return; } let nameDiv = createNameDiv(saveNameInput.value); savedNamesOutput.appendChild(nameDiv); savedNames.push(saveNameInput.value); modSettings.savedNames = savedNames; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); } }); if (savedNames.length > 0) { savedNames.forEach((name) => { let nameDiv = createNameDiv(name); savedNamesOutput.appendChild(nameDiv); }); } }, Macros() { const KEY_SPLIT = this.splitKey; let ff = null; let keydown = false; let open = false; document.addEventListener("keyup", (e) => { if (e.key == modSettings.keyBindingsRapidFeed && keydown) { clearInterval(ff); keydown = false; } }); document.addEventListener("keydown", (e) => { if (document.activeElement instanceof HTMLInputElement) return; if (e.key == "Tab") { e.preventDefault(); } if (e.key == modSettings.keyBindingsToggleMenu) { if (!open) { _cm_settings_open(); open = true; } else { document.querySelector("#cm_close__settings").click(); open = false; } } if (e.key === modSettings.keyBindingsSwitchChat) { if (modSettings.showClientChat) { document.getElementById("mainBtn").click(); } else { document.getElementById("partyBtn").click(); } } if (e.key == modSettings.keyBindingsFreezePlayer) { const CX = window.innerWidth / 2; const CY = window.innerHeight / 2; this.center(CX, CY); } if (e.key == modSettings.keyBindingsRapidFeed && !keydown) { keydown = true; function fastMass() { let x = 15; while (x--) { keypress("w", "KeyW"); } } ff = setInterval(fastMass, 50); } if (e.key == modSettings.keyBindingsdoubleSplit) { window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); return; } if (e.key == modSettings.keyBindingsTripleSplit) { window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); return; } if (e.key == modSettings.keyBindingsQuadSplit) { window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keydown", KEY_SPLIT)); window.dispatchEvent(new KeyboardEvent("keyup", KEY_SPLIT)); return; } }); }, setInputActions() { const macroInputs = ["modinput1", "modinput2", "modinput3", "modinput4", "modinput5", "modinput6", "modinput7"]; macroInputs.forEach((modkey) => { const modInput = document.getElementById(modkey); document.addEventListener("keydown", (event) => { if (document.activeElement !== modInput) return; if (event.key === "Backspace") { modInput.value = ""; let propertyName = modInput.name; modSettings[propertyName] = ""; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); return; } modInput.value = event.key.toLowerCase(); if (modInput.value !== "" && (macroInputs.filter((item) => item === modInput.value).length > 1 || macroInputs.some((otherKey) => { const otherInput = document.getElementById(otherKey); return otherInput !== modInput && otherInput.value === modInput.value; }))) { alert("You can't use 2 keybindings at the same time."); setTimeout(() => {modInput.value = ""}) return; } let propertyName = modInput.name; modSettings[propertyName] = modInput.value; localStorage.setItem("SigmodSettings", JSON.stringify(modSettings)); }); }); }, mainMenu() { let menucontent = document.querySelector(".menu-center-content"); menucontent.style.margin = "auto"; const discordlinks = document.createElement("div"); discordlinks.setAttribute("id", "dclinkdiv") discordlinks.innerHTML = ` Sigmally Discord SigModz Discord `; document.getElementById("discord_link").remove(); document.getElementById("menu").appendChild(discordlinks) document.querySelector("#cm_modal__settings .ctrl-modal__modal").style.padding = "20px" }, respawn() { const __line2 = document.getElementById("__line2") const c = document.getElementById("continue_button") const p = document.getElementById("play-btn") if (__line2.classList.contains("line--hidden")) return this.respawnTime = null setTimeout(() => { c.click() setTimeout(() => { p.click() this.respawnTime = Date.now() }, 200) }, 200) }, donate() { // Link: https://Sigmally.sell.app/product/donation const Donate = document.createElement("div"); Donate.classList.add("donate") Donate.innerHTML = ` Donate to get custom color!
    `; setTimeout(() => { document.getElementById("closeDonate").addEventListener("click", () => { Donate.remove(); }); document.getElementById("donateBtn").addEventListener("click", () => { window.open("https://Sigmally.sell.app/product/donation"); }) }) document.body.append(Donate); }, createMenu() { this.smallMods(); this.menu(); // this.donate(); I will add this when I added custom name color feature setTimeout(() => { this.Macros(); this.Themes(); this.saveNames(); this.setInputActions(); this.getColors(); this.setColors(); this.mainMenu(); setInterval(() => { if (document.getElementById("autoRespawn").checked && this.respawnTime && Date.now() - this.respawnTime >= this.respawnCooldown) { this.respawn(); } }) }) } } // PF macro: window.setInterval = new Proxy(setInterval, { apply(target, _this, args) { if (args[1] === (1000 / 7)) { args[1] = 0 } return target.apply(_this, args) } }) new mod(); })();