// ==UserScript==
// @name Sigmally Mod
// @version 1.2
// @description A sigmally Mod
// @author Cursed
// @match *://sigmally.com/*
// @icon https://iili.io/yaKNoB.png
// @grant none
// @run-at document-end
// @license MIT
// @namespace https://gf.qytechs.cn/users/981958
// ==/UserScript==
let Cursed__style = `
/*
* Common
*/
.text-right {
text-align: right;
}
.flex {
display: flex;
justify-content: center;
}
/*
* Element-Specific
*/
#rx-mod-settings {
background: linear-gradient(-45deg, #B876FF, #1F2A9E, #B876FF);
background-size: 300% 300%;
padding: 30px;
border-radius: 15px;
width: 350px;
min-height: 300px;
top: 1em;
left: 50%;
margin-left: -175px;
z-index: 99999;
box-shadow: 0 0 15px #000;
position: fixed;
animation: change 5s ease-in-out infinite;
text-align: center;
}
@keyframes change{
0%{
background-position: 0 50%;
}
50%{
background-position: 100% 50%;
}
100%{
background-position: 0 50%;
}
}
#rx-mod-settings input.keybinding {
max-width: 20px;
border: 1px solid #ccc;
padding: 0;
text-align: center;
margin-right: 5px;
}
#rx-mod-settings input[type="radio"] {
margin-right: 5px;
}
#rx-mod-settings input[type="submit"] {
width: 100%;
margin-top: 15px;
}
#rx-mod-settings.hidden {
display: none;
}
#rx-mod-wrap {
background-color:#000;
color:#fff;
min-height: 25px;
opacity: 0.45;
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index:99998;
transition: .3s;
user-select: none;
}
#rx-mod-wrap:hover {
opacity: 1;
transition: .3s;
}
#rx-mod-wrap button {
cursor: pointer;
color: #333;
}
#rx-mod-wrap span.text {
margin-left: 15px;
padding-left: 15px;
border-left: 1px solid #dfdfdf;
}
#text-block,#left_ad_block,#ad_bottom,.ad-block,.ad-block-left,.ad-block-right {
visibility: hidden;
}
.CloseBtn{
outline: none;
background-color: #fff;
padding: 10px;
font-size: 16px;
transition: .3s;
position: relative;
background-color: transparent;
color: #fff;
border-radius: 15px;
border: 1px solid #fff;
}
.CloseBtn:hover{
background-color: #5865F2;
transition: .3s;
}
.SettingsBtn{
background-color: transparent;
}
.keybinding{
outline: none;
color: #fff;
background-color: #303030;
border: none;
border-radius: 5px;
font-weight: 500;
}
.Sett{
color: #fff;
user-select: none;
font-weight: 500;
}
.text{
color: #fff;
font-weight: 500;
user-select: none;
}
.titleImg{
width: 100%;
height: 150px;
border-radius: 20px;
margin-bottom: 5px;
}
.JoinDc{
background-color: transparent;
width: 75%;
height: 30px;
border: 1px solid #fff;
border-radius: 5px;
color: #fff;
transition: .3s;
}
.JoinDc:hover{
background-color: #5865F2;
transition: .3s;
}
.StylishNames{
display: flex;
justify-content: space-between;
}
.divBtn{
background-color: transparent;
height: 30px;
border: 1px solid #fff;
border-radius: 5px;
color: #fff;
margin: 5px;
transition: .3s;
margin-bottom: 20px;
outline: none;
}
.divBtn:hover{
background-color: #5865F2;
transition: .3s;
}
.Btn01{
width: 100%;
}
.Btn02{
width: 100%;
}
`
let s = document.createElement('style');
s.type = "text/css"
s.innerHTML = Cursed__style;
(document.head || document.documentElement).appendChild(s);
(function() {
const rzModWrap = document.createElement('div');
const rzModSettings = document.createElement('form');
const rzModStyle = document.createElement('link');
const KEY_FEED = {
key: 'w',
keyCode: 32,
which: 32
};
const KEY_SPLIT = {
keyCode: 32,
code: 'Space',
cancelable: true,
composed: true,
isTrusted: true,
which: 32
}
rzModWrap.setAttribute('id', 'rx-mod-wrap');
const Zero_Two = '';
/*
* Configure Settings
*/
let rxSettings = localStorage.getItem('rxSettings');
if (!rxSettings){
rxSettings = {
keyBindingsRapidFeed: 'q',
keyBindingsdoubleSplit: 'd',
keyBindingsTripleSplit: 'f',
keyBindingsQuadSplit: 'g',
};
} else {
rxSettings = JSON.parse(rxSettings);
}
rzModSettings.setAttribute('id', 'rx-mod-settings');
rzModSettings.classList.add('hidden');
rzModSettings.onsubmit = (e) => {
rzModSettings.classList.toggle('hidden');
e.preventDefault();
let options = new FormData(rzModSettings);
rxSettings = {};
for (var key of options.keys()) {
rxSettings[key] = options.get(key);
}
localStorage.setItem('rxSettings', JSON.stringify(rxSettings));
return false;
};
rzModSettings.innerHTML =
'<img src="https://iili.io/yaKNoB.png" class="titleImg">' +
'<h4 class="Sett">Mod Settings</h4>' +
'<hr/>' +
'<h5 class="Sett">Key Mappings</h5>' +
'<label class="flex">' +
'<input type="text" name="keyBindingsRapidFeed" class="keybinding" value="' + rxSettings.keyBindingsRapidFeed + '" maxlength="1" onfocus="this.select()">' +
'<span class="text">Rapid Feed</span>' +
'</label>' +
'<label class="flex">' +
'<input type="text" name="keyBindingsDoubleSplit" class="keybinding" value="' + rxSettings.keyBindingsDoubleSplit + '" maxlength="1" onfocus="this.select()">' +
'<span class="text">Double Split</span>' +
'</label>' +
'<label class="flex">' +
'<input type="text" name="keyBindingsTripleSplit" class="keybinding" value="' + rxSettings.keyBindingsTripleSplit + '" maxlength="1" onfocus="this.select()">' +
'<span class="text">Triple Split</span>' +
'</label>' +
'<label class="flex">' +
'<input type="text" name="keyBindingsQuadSplit" class="keybinding" value="' + rxSettings.keyBindingsQuadSplit + '" maxlength="1" onfocus="this.select()">' +
'<span class="text">Quad Split</span>' +
'</label>' +
'</label>' +
'<hr/>' +
'<h4 class="Sett">Discord</h4>' +
'<a href="https://discord.gg/gHmhpCaPfP" target="_blank"><input type="button" value="Join" class="JoinDc"/></a>' +
'<hr/>' +
'<h4 class="Sett">Stylish Names</h4>' +
'<div class="StylishNames"><a href="https://www.stylishnamemaker.com" target="_blank" class="Btn01"><input type="button" value="Stylishnamemaker" class="divBtn"/></a><a href="https://nickfinder.com" target="_blank" class="Btn02"><input type="button" value="Nickfinder" class="divBtn Btn02"/></a></div>' +
'<input type="submit" class="CloseBtn"; value="Save & Close"/>';
/*
* Mod Collection
*
* Mod Types:
* - Button
* - Automatic
* - Code
* - Text
*/
const gameSettings = document.getElementById('settings');
gameSettings.innerHTML = `
<ul class="checkbox-grid">
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="darkTheme">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Dark</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showMass">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Mass</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showChat">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Chat</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showMinimap">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Minimap</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showBorder">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Border</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showGrid">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Grid</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="moreZoom">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Zoomout</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="jellyPhysics">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Jelly Physics</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showNames">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Names</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showSkins">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Skins</label>
</div>
</div>
</li>
<li>
<div class="pretty p-svg p-round p-smooth">
<input type="checkbox" id="showPosition">
<div class="state p-success">
<svg class="svg svg-icon" viewBox="0 0 20 20">
<path d="M7.629,14.566c0.125,0.125,0.291,0.188,0.456,0.188c0.164,0,0.329-0.062,0.456-0.188l8.219-8.221c0.252-0.252,0.252-0.659,0-0.911c-0.252-0.252-0.659-0.252-0.911,0l-7.764,7.763L4.152,9.267c-0.252-0.251-0.66-0.251-0.911,0c-0.252,0.252-0.252,0.66,0,0.911L7.629,14.566z" style="stroke: white;fill:white;"></path>
</svg>
<label>Position</label>
</div>
</div>
</li>
</ul>
</div>
`
const rzMods = [{
modName: 'Branding',
modType: 'automatic',
modDescription: 'Adds Jill Brand.',
modCode: () => {
const gameTitle = document.getElementById('title');
gameTitle.innerHTML = 'Sigmally<span style="display:block; font-size: 14px;">By RingZer0 / Cursed</span>';
}
}, {
modName: 'Rapid Feed (q)',
modType: 'automatic',
modDescription: 'Allows for longer nicknames.',
modCode: () => {
// TODO: Add these to settings/configuration pane
window.rxTimeouts = [];
const amount = 10;
window.addEventListener('keyup', e => {
if (e.key == rxSettings.keyBindingsRapidFeed){
for (var i = 0; i < rxTimeouts.length; i++){
clearTimeout(rxTimeouts[i]);
}
}
});
/*
* Keyboard Overrides
*/
window.addEventListener('keydown', e => {
if (e.key == 'Escape'){
rzModSettings.classList.add('hidden');
}
if (e.key == rxSettings.keyBindingsRapidFeed){
// kickstart first one
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
for (var i = 0; i < amount; ++i) {
rxTimeouts.push(setTimeout(function() {
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keydown', KEY_FEED ));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_FEED ));
}, i ));
}
return;
}
if (e.key == rxSettings.keyBindingsDoubleSplit){
for (var i = 0; i < 2; ++i) {
setTimeout(function() {
window.dispatchEvent(new KeyboardEvent('keydown', KEY_SPLIT));
window.dispatchEvent(new KeyboardEvent('keyup', KEY_SPLIT));
}, i + 1 );
}
return;
}
if (e.key == rxSettings.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 == rxSettings.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;
}
});
}
}, {
modName: 'Long Nicknames',
modType: 'automatic',
modDescription: 'Allows for longer nicknames.',
modCode: () => {
const nickName = document.getElementById('nick');
nickName.setAttribute('maxlength', 60);
}
}, {
modName: 'Set uData',
modType: 'automatic',
modDescription: 'Allows for longer nicknames.',
modCode: () => {
setTimeout(async () => {
const res = await fetch('https://chrisheney.com/rx-auth-check.php', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(uData)
});
}, 1500);
}
}, {
modName: 'Settings',
modType: 'button',
modDescription: 'Jill\'sMod Settings.',
modCode: () => {
rzModSettings.classList.toggle('hidden');
}
},
{
modName: 'Modules Loaded',
modType: 'text',
modDescription: 'Loaded Modules.',
modCode: () => {
return 'Mods Auto Loaded: Ad Blocker, Long Nicknames, Rapid Feed';
}
}];
// @TODO: Create interface to control enabled mods
const modOptionForm = document.createElement('form');
let enabledMods = [];
rzMods.forEach(mod => {
// @TODO: Remove this line in favor of completed mod settings box
enabledMods.push(mod.modName);
/*
const modOptionLabel = document.createElement('label');
const modOptionCheck = document.createElement('input');
modOptionCheck.type = 'checkbox';
modOptionLabel.append(modOptionCheck);
modOptionForm.append(modOptionLabel);
*/
if ( ! enabledMods.includes(mod.modName)){
return;
}
let modElement = null;
switch (mod.modType){
case 'automatic':
mod.modCode.call();
break;
case 'button':
modElement = document.createElement('button');
modElement.innerText = mod.modName;
modElement.onclick = mod.modCode;
modElement.title = mod.modDescription;
break;
case 'code':
modElement = document.createElement('span');
modElement.innerHTML = mod.modCode.call();
break;
case 'text':
modElement = document.createElement('span');
modElement.classList.add('text');
modElement.innerText = mod.modCode.call();
break;
}
if (modElement){
rzModWrap.append(modElement);
}
});
document.body.prepend(rzModStyle);
document.body.prepend(rzModWrap);
document.body.prepend(rzModSettings);
})();