- // ==UserScript==
- // @name !! ~ Player Joined Notifications &&& Server's Player List ~ !!
- // @name:ru !! ~ Уведомления о присоединении игроков []И[] Список игроков на сервере ~ !!
- // @name:vi !! ~ Thông báo Người chơi tham gia []VÀ[] Danh sách Người chơi trên Máy chủ ~ !!
- // @name:zh !! ~ 玩家加入通知 []和[] 服务器的玩家列表 ~ !!
- // @namespace http://tampermonkey.net/
- // @version 2024-04-23
- // @description Find your friends easily in sploop.io! The first script of its type 🤯😁😎✌️. Press Semicolum " ; " to toggle the aesthetic player list and select the theme of your choice!
- // @description:ru Легко находите своих друзей в sploop.io! Первый скрипт такого типа 🤯😁😎✌️. Нажмите точку с запятой " ; ", чтобы переключить эстетический список игроков и выбрать тему по вашему выбору!
- // @description:vi Tìm bạn dễ dàng trong sploop.io! Đây là kịch bản đầu tiên của loại này 🤯😁😎✌️. Nhấn chấm phẩy " ; " để chuyển đổi danh sách người chơi thẩm mỹ và chọn chủ đề theo ý muốn!
- // @description:zh 在 sploop.io 中轻松找到你的朋友!这是这种类型的第一个脚本 🤯😁😎✌️。按分号 " ; " 切换美观的玩家列表并选择您喜欢的主题!
- // @author fizzixww
- // @match https://sploop.io/
- // @icon https://i.postimg.cc/Z5WBHzhP/8-d-Sov4iq-FMua-At-VE.png
- // @grant none
- // @license All Rights Reserved
- // ==/UserScript==
-
- /*
- I wish I could live in a snowy boreal forest and watch the beautiful northern lights every night....
- ` : | | | |: || : ` : | |+|: | : : :| . ` .
- ` : | :| || |: : ` | | :| : | : |: | . :
- .' ': || |: | ' ` || | : | |: : | . ` . :.
- `' || | ' | * ` : | | :| |*| : : :|
- * * ` | : : | . ` ' :| | :| . : : * :.||
- .` | | | : .:| ` | || | : |: | | ||
- ' . + ` | : .: . '| | : :| : . |:| ||
- . . ` *| || : ` | | :| | : |:| |
- . . . || |.: * | || : : :|||
- . . . * . . ` |||. + + '| ||| . ||`
- . * . +:`|! . |||| :.||`
- + . ..!|* . | :`||+ |||`
- . + : |||` .| :| | | |.| ||` .
- * + ' + :|| |` :.+. || || | |:`|| `
- . .||` . ..|| | |: '` `| | |` +
- . +++ || !|!: ` :| |
- + . . | . `|||.: .|| . . `
- ' `|. . `:||| + ||' `
- __ + * `' `'|. `:
- "' `---"""----....____,..^---`^``----.,.___ `. `. . ____,.,-
- ___,--'""`---"' ^ ^ ^ ^ """'---,..___ __,..---""'
- --"' ^ ``--..,__
- https://i.postimg.cc/kgLVhYn0/8-jo1z9twm6-Kyo-SJf.png
- https://i.postimg.cc/Z5WBHzhP/8-d-Sov4iq-FMua-At-VE.png
- */
-
- /*disclaimers:
- users with the exact same name will only be written down once. this is why the player list size is smaller than the server size.
- When a player leaves, their name will remain on the player list.
- If you have any script ideas, dm me on discord: fizzixww
- */
-
- (function() {
- 'use strict';
-
- const fizzixwwsCssVariables = `
- :root {
- --bg-gradient-start: #7CCD7C;
- --bg-gradient-end: #3F7A3F;
- --border-color: #4CAF50;
- --scrollbar-color: #4CAF50;
- --text-color: #ffffff;
- --shadow-color: rgba(0, 0, 0, 0.7);
- }
- `;
-
- var fizzixwwsCssVariablesStyle = document.createElement('style');
- fizzixwwsCssVariablesStyle.textContent = fizzixwwsCssVariables;
- document.head.appendChild(fizzixwwsCssVariablesStyle);
-
- var xXplayerList = document.createElement('div');
- xXplayerList.className = 'player-list';
- document.body.appendChild(xXplayerList);
-
- var xXplayerNames = new Set();
-
- function xXaddPlayerName(name) {
- if (!xXplayerNames.has(name)) {
- var xXplayerNameElement = document.createElement('div');
- xXplayerNameElement.textContent = name;
- xXplayerNameElement.className = 'player-name';
- xXplayerNameElement.style.opacity = '0';
- xXplayerNameElement.style.animationDelay = Math.random() + 's';
- xXplayerList.appendChild(xXplayerNameElement);
- xXplayerNames.add(name);
-
- setTimeout(() => {
- xXplayerNameElement.style.opacity = '1';
- }, 100);
-
- xXdisplayJoinNotification(name);
- }
- }
-
- function xXdisplayJoinNotification(name) {
- var xXnotification = document.createElement('div');
- xXnotification.textContent = `${name} has joined the server!`;
- xXnotification.className = 'join-notification';
- document.body.appendChild(xXnotification);
-
- var existingNotifications = document.querySelectorAll('.join-notification');
- var topPosition = 20 + existingNotifications.length * 50;
- xXnotification.style.top = `${topPosition}px`;
-
- setTimeout(() => {
- xXnotification.style.opacity = '1';
- }, 100);
-
- setTimeout(() => {
-
- xXnotification.style.opacity = '0';
-
- existingNotifications.forEach((existingNotification, index) => {
- var newPosition = 20 + index * 50;
- existingNotification.style.transition = 'top 0.3s, opacity 0.5s';
- existingNotification.style.top = `${newPosition}px`;
- });
-
- setTimeout(() => {
- xXnotification.remove();
- }, 500);
- }, 3000);
- }
-
- WebSocket.prototype.fizzixwwsRealSend = WebSocket.prototype.send;
- WebSocket.prototype.send = function(data) {
- this.fizzixwwsRealSend(data);
- };
-
- function fizzixwwsHandleWebSocketMessages(event) {
- try {
- var fizzixwwsMessageData = JSON.parse(event.data);
- if (fizzixwwsMessageData[0] === 33) {
-
- xXplayerList.innerHTML = '';
- xXplayerNames.clear();
-
- var players = fizzixwwsMessageData[3];
- if (players.length === 0) {
- xXaddPlayerName("Server Joined");
- } else {
- players.forEach(function(player) {
- var name = player[1];
- xXaddPlayerName(name);
- });
- }
-
- fizzixwwsApplyScrollbarStyling();
- } else if (fizzixwwsMessageData[0] === 32 || fizzixwwsMessageData[0] === 35) {
- var playerName = fizzixwwsMessageData[2];
- xXaddPlayerName(playerName);
- }
- } catch (error) {
- console.error('Error parsing WebSocket message:', error);
- }
- }
-
- var fizzixwwsWsProto = WebSocket.prototype;
- var fizzixwwsOrigSend = fizzixwwsWsProto.send;
- var fizzixwwsOrigAddEventListener = fizzixwwsWsProto.addEventListener;
-
- fizzixwwsWsProto.send = function(data) {
- fizzixwwsOrigSend.apply(this, arguments);
- fizzixwwsOrigAddEventListener.call(this, 'message', fizzixwwsHandleWebSocketMessages);
- };
-
- setInterval(() => {
- xXplayerList.scrollTop += 1;
- }, 50);
-
- function fizzixwwsSetPinkTheme() {
- document.documentElement.style.setProperty('--bg-gradient-start', '#FFC6D9');
- document.documentElement.style.setProperty('--bg-gradient-end', '#FF9494');
- document.documentElement.style.setProperty('--border-color', '#FF69B4');
- document.documentElement.style.setProperty('--scrollbar-color', '#FF69B4');
- document.documentElement.style.setProperty('--text-color', '#ffe6fb');
- document.documentElement.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.7)');
- }
-
- function fizzixwwsSetLightOrangeTheme() {
- document.documentElement.style.setProperty('--bg-gradient-start', '#FFD699');
- document.documentElement.style.setProperty('--bg-gradient-end', '#FFB74D');
- document.documentElement.style.setProperty('--border-color', '#FF9800');
- document.documentElement.style.setProperty('--scrollbar-color', '#FF9800');
- document.documentElement.style.setProperty('--text-color', '#fff1c7');
- document.documentElement.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.7)');
- }
-
- function fizzixwwsSetSkyeBlueTheme() {
- document.documentElement.style.setProperty('--bg-gradient-start', '#A6DAFF');
- document.documentElement.style.setProperty('--bg-gradient-end', '#77BDFE');
- document.documentElement.style.setProperty('--border-color', '#4FC3F7');
- document.documentElement.style.setProperty('--scrollbar-color', '#4FC3F7');
- document.documentElement.style.setProperty('--text-color', '#cffdff');
- document.documentElement.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.7)');
- }
-
- function fizzixwwsSetGreenTheme() {
- document.documentElement.style.setProperty('--bg-gradient-start', '#7CCD7C');
- document.documentElement.style.setProperty('--bg-gradient-end', '#3F7A3F');
- document.documentElement.style.setProperty('--border-color', '#4CAF50');
- document.documentElement.style.setProperty('--scrollbar-color', '#4CAF50');
- document.documentElement.style.setProperty('--text-color', '#ddffdb');
- document.documentElement.style.setProperty('--shadow-color', 'rgba(0, 0, 0, 0.7)');
- }
-
- var fizzixwwsThemeButtonsContainer = document.createElement('div');
- fizzixwwsThemeButtonsContainer.className = 'theme-buttons-container';
- var pinkButton = fizzixwwsCreateThemeButton('pink-button', fizzixwwsSetPinkTheme);
- var lightOrangeButton = fizzixwwsCreateThemeButton('light-orange-button', fizzixwwsSetLightOrangeTheme);
- var skyeBlueButton = fizzixwwsCreateThemeButton('skye-blue-button', fizzixwwsSetSkyeBlueTheme);
- var greenButton = fizzixwwsCreateThemeButton('green-button', fizzixwwsSetGreenTheme);
-
- fizzixwwsThemeButtonsContainer.appendChild(pinkButton);
- fizzixwwsThemeButtonsContainer.appendChild(lightOrangeButton);
- fizzixwwsThemeButtonsContainer.appendChild(skyeBlueButton);
- fizzixwwsThemeButtonsContainer.appendChild(greenButton);
- document.body.appendChild(fizzixwwsThemeButtonsContainer);
-
- function fizzixwwsCreateThemeButton(className, onClick) {
- var button = document.createElement('div');
- button.className = 'theme-button ' + className;
- button.onclick = onClick;
- return button;
- }
- var fizzixwwsTextElement = document.createElement('span');
- var fizzixwwsData = atob('YnkgZml6eml4d3c=');
- fizzixwwsTextElement.textContent = fizzixwwsData;
- fizzixwwsTextElement.style.position = 'absolute';
- fizzixwwsTextElement.style.top = '0';
- fizzixwwsTextElement.style.left = '80px';
- fizzixwwsTextElement.style.zIndex = '9999';
- fizzixwwsTextElement.style.color = 'rgba(0, 0, 0, 0.07)';
- document.body.appendChild(fizzixwwsTextElement);
- var fizzixwwsDisplayToggled = false;
- document.addEventListener('keydown', function(event) {
- if (event.key === ';') {
- if (fizzixwwsDisplayToggled) {
- xXplayerList.style.display = 'block';
- fizzixwwsThemeButtonsContainer.style.display = 'flex';
- } else {
- xXplayerList.style.display = 'none';
- fizzixwwsThemeButtonsContainer.style.display = 'none';
- }
- fizzixwwsDisplayToggled = !fizzixwwsDisplayToggled;
- }
- });
-
- // Function to apply scrollbar styling only when needed
- function fizzixwwsApplyScrollbarStyling() {
- if (xXplayerList.scrollHeight > xXplayerList.clientHeight) {
- var style = document.createElement('style');
- style.textContent = `
- .player-list::-webkit-scrollbar {
- width: 10px;
- }
-
- .player-list::-webkit-scrollbar-thumb {
- background-color: var(--scrollbar-color);
- border-radius: 5px;
- }
- `;
- document.head.appendChild(style);
- }
- }
-
- var fizzixwwsStyle = document.createElement('style');
- fizzixwwsStyle.textContent = `
- .player-list {
- font-family: 'Arial', sans-serif;
- position: fixed;
- top: 10%;
- left: 10%;
- padding: 20px;
- background: linear-gradient(to bottom right, var(--bg-gradient-start), var(--bg-gradient-end));
- border: 12px solid var(--border-color);
- border-radius: 20px;
- overflow: auto;
- max-height: 80%;
- scrollbar-width: thin;
- scrollbar-color: var(--scrollbar-color) transparent;
- animation: sway 10s ease-in-out infinite;
- box-shadow: 0 0 20px var(--shadow-color);
- }
-
- .player-name {
- margin-bottom: 10px;
- color: var(--text-color);
- font-size: 18px;
- text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5);
- animation: fadeIn 1.5s ease-out forwards, idle 5s infinite ease-in-out, pulse 2s infinite ease-in-out;
- }
-
- @keyframes sway {
- 0% {
- transform: rotate(-1deg);
- }
- 50% {
- transform: rotate(1deg);
- }
- 100% {
- transform: rotate(-1deg);
- }
- }
-
- @keyframes fadeIn {
- from {
- opacity: 0;
- transform: translateY(10px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
-
- @keyframes idle {
- 0% {
- transform: translateY(0);
- }
- 50% {
- transform: translateY(-2px);
- }
- 100% {
- transform: translateY(0);
- }
- }
-
- @keyframes pulse {
- 0% {
- transform: scale(1);
- }
- 50% {
- transform: scale(1.05);
- }
- 100% {
- transform: scale(1);
- }
- }
-
- .theme-buttons-container {
- position: fixed;
- top: 10%;
- left: 5%;
- display: flex;
- flex-direction: column;
- gap: 10px;
- }
-
- .theme-button {
- width: 40px;
- height: 40px;
- border-radius: 50%;
- cursor: pointer;
- border: none;
- background-image: linear-gradient(to bottom right, var(--bg-gradient-start), var(--bg-gradient-end));
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);
- transition: transform 0.3s, box-shadow 0.3s;
- }
-
- .theme-button:hover {
- transform: translateY(-2px);
- box-shadow: 0 6px 8px rgba(0, 0, 0, 0.15), 0 2px 4px rgba(0, 0, 0, 0.1);
- }
-
- .pink-button { background-image: linear-gradient(to bottom right, #FFC6D9, #FF9494); }
- .light-orange-button { background-image: linear-gradient(to bottom right, #FFD699, #FFB74D); }
- .skye-blue-button { background-image: linear-gradient(to bottom right, #A6DAFF, #77BDFE); }
- .green-button { background-image: linear-gradient(to bottom right, #7CCD7C, #3F7A3F); }
-
- .join-notification {
- position: fixed;
- left: 50%;
- transform: translateX(-50%);
- background-color: rgba(0, 0, 0, 0.3);
- color: #ffffff;
- padding: 8px 16px;
- border-radius: 8px;
- font-size: 14px;
- opacity: 0;
- transition: opacity 0.5s, top 0.3s;
- }
- `;
- document.head.appendChild(fizzixwwsStyle);
- })();
-
-
- //some code by cactus that makes homepage look nice
- const idsToDelete = ['game-bottom-content', 'da-left', 'da-right', 'game-left-content-main', "game-right-content-main", "discord", 'alsoTryLink', 'cross-promo'];
- idsToDelete.forEach(id => {
- const elementToRemove = document.getElementById(id);
- if (elementToRemove) {
- elementToRemove.parentNode.removeChild(elementToRemove);
- } else {
- console.error(`Element with ID ${id} not found!`);
- }
- });
- const container = document.getElementById('game-content');
- const elementToRealign = document.getElementById('game-middle-main');
- const leftOffset = (container.offsetWidth - elementToRealign.offsetWidth) / 2;
- elementToRealign.style.left = leftOffset + 'px';
-
- function blur() {
- const homepage = document.getElementById("homepage");
- homepage.style.display = "flex";
- const blurValue = 1.5;
- homepage.style.backdropFilter = `blur(${blurValue}px)`;
- }
- setTimeout(blur, 2000);
-
- (function() {
- 'use strict';
-
- const styleElement = document.head.appendChild(document.createElement('style'));
- styleElement.type = 'text/css';
- styleElement.appendChild(document.createTextNode(`#cross-promo, #bottom-wrap, #google_play, #game-left-content-main, #game-bottom-content, #game-right-content-main, #right-content { display: none !important; }`));
-
-
- const mainContent = document.querySelector('#main-content');
- mainContent.style.width = '100%';
-
- const popUi = document.getElementById('pop-ui');
- popUi.style.opacity = '0.7';
-
- const rankingMiddleMain = document.getElementById('ranking-middle-main');
- rankingMiddleMain.style.height = '380px';
-
- const rankingRanksContainer = document.getElementById('ranking-ranks-container');
- rankingRanksContainer.style.height = '295px';
-
- const ranking2MiddleMain = document.getElementById('ranking2-middle-main');
- ranking2MiddleMain.style.height = '380px';
-
- const rankingRankContainer = document.getElementById('ranking-rank-container');
- rankingRankContainer.style.height = '295px';
-
- const profileLeftMain = document.getElementById('profile-left-main');
- profileLeftMain.style.width = '650px';
-
- const changeUsername = document.getElementById('change-username');
- changeUsername.style.width = '200px';
-
- const popBoxes = document.querySelectorAll('.pop-box');
- popBoxes.forEach((box) => {
- box.style.boxShadow = "inset 0 4px 0 #4e564500, inset 0 -4px 0 #38482500, 0px 2px 0 5px rgb(20 20 20 / 0%), 0px 0px 0 15px rgb(20 20 20 / 0%)";
- });
- })();
-
-
- // hi =)) thanks to bear for teaching me about websockets