// ==UserScript==
// @name Wizardebop
// @author Type Stuff
// @description ⚒ Advanced Acellus Mod/Custom Pack ⚒
// @version 10.5
// @match https://admin192a.acellus.com/student/*
// @license MIT
// @match https://admin192c.acellus.com/student/*
// @run-at document-start
// @grant none
// @namespace https://greasyfork.org/users/1394549
// @icon https://i.pinimg.com/originals/44/66/ec/4466ecf1a7b1cfb3c40a014386e2fa57.png
// ==/UserScript==
(function () {
'use strict';
// Add styles for the settings menu, overlay, visual effects, and animated wallpapers.
const style = document.createElement('style');
style.innerHTML = `
@keyframes animated-wallpaper {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
@keyframes snowfall {
0% { transform: translateY(-10px); }
100% { transform: translateY(100vh); }
}
@keyframes raindrop {
0% { transform: translateY(-50px); opacity: 0.7; }
100% { transform: translateY(100vh); opacity: 1; }
}
@keyframes floating-emoji {
0% { transform: translateY(0); opacity: 1; }
50% { transform: translateY(-30px); opacity: 0.8; }
100% { transform: translateY(0); opacity: 1; }
}
@keyframes color-particles {
0% { transform: translateX(0) translateY(0); opacity: 1; }
100% { transform: translateX(200px) translateY(200px); opacity: 0; }
}
#settings-button {
position: fixed;
bottom: 20px;
right: 20px;
background-color: #28a745;
color: white;
border: none;
border-radius: 5px;
padding: 10px 20px;
cursor: pointer;
font-size: 16px;
z-index: 1002;
transition: background-color 0.3s ease;
}
#settings-button:hover {
background-color: #218838;
}
#settings-menu {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 75%;
max-width: 900px;
max-height: 80%; /* Limit height to 80% of the viewport */
overflow-y: auto; /* Enable vertical scroll */
background: linear-gradient(45deg, #ffd700, #ff69b4, #e0e0e0, #f0e68c);
background-size: 200% 200%;
animation: animated-wallpaper 8s ease infinite;
border-radius: 15px;
padding: 0;
box-shadow: 0px 0px 25px rgba(0, 0, 0, 0.3);
z-index: 1001;
display: none;
overflow: hidden;
}
.settings-content {
display: flex;
width: 100%;
height: 100%;
border-radius: 15px;
}
.settings-categories {
width: 25%;
background-color: rgba(200, 200, 200, 0.9);
padding: 20px 15px;
box-sizing: border-box;
margin: 0;
border-top-left-radius: 15px;
border-bottom-left-radius: 15px;
transition: background-color 0.3s ease;
}
.settings-details {
width: 75%;
padding: 20px;
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: transparent;
}
#settings-menu h2 {
margin-top: 0;
color: #333;
}
.settings-categories button {
width: 100%;
padding: 12px;
margin: 8px 0;
border: none;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 8px;
cursor: pointer;
text-align: left;
color: #333;
font-weight: bold;
transition: background-color 0.3s ease, transform 0.2s ease;
}
.settings-categories button:hover {
background-color: #007bff;
color: white;
transform: scale(1.05);
}
.category-menu {
padding: 10px;
background: rgba(249, 249, 249, 0.8);
border-radius: 10px;
display: none;
}
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.6);
display: none;
z-index: 1000;
backdrop-filter: blur(8px);
}
#close-settings {
background: none;
border: none;
color: #ffffff;
font-size: 1.5rem;
position: absolute;
top: 15px;
right: 15px;
cursor: pointer;
transition: color 0.3s ease;
}
#close-settings:hover {
color: #555;
}
#close-settings::before {
content: '✖';
}
/* Dark Mode Styles */
body.dark-mode {
background-color: #121212;
color: #e0e0e0;
}
.dark-mode #settings-menu {
background: linear-gradient(45deg, #2f2f2f, #0e4c92, #00bcd4, #008080, #454545, #1c1c1c, #274472, #026873, #123456, #0a0a0a);
background-size: 200% 200%;
animation: animated-wallpaper 8s ease infinite;
}
.dark-mode .settings-categories {
background-color: rgba(80, 80, 80, 0.7);
}
.dark-mode .settings-categories button {
background-color: #333333;
color: #e0e0e0;
}
.dark-mode .settings-categories button:hover {
background-color: #555555;
color: #ffffff;
}
.dark-mode .category-menu {
background: rgba(68, 68, 68, 0.8);
color: #e0e0e0;
}
.dark-mode #close-settings {
color: #8b0000;
}
.dark-mode #close-settings:hover {
color: #ff6347;
}
#apply-appearance {
margin-top: 15px;
padding: 10px;
background-color: #007bff;
color: #ffffff;
border: none;
border-radius: 5px;
cursor: pointer;
transition: background-color 0.3s ease;
}
#apply-appearance:hover {
background-color: #0056b3;
}
.gradient-option {
display: inline-block;
width: 80px;
height: 50px;
margin: 5px;
border-radius: 8px;
cursor: pointer;
border: 2px solid transparent;
transition: border-color 0.3s ease;
}
.gradient-option:hover {
border-color: #007bff;
}
#wallpaper-preview {
margin-top: 10px;
display: flex;
flex-wrap: wrap;
}
.gradient-bg {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-size: 200% 200%;
animation: animated-wallpaper 20s ease infinite;
z-index: -1;
}
.snowflake, .raindrop, .star, .firefly, .emoji, .particle {
position: fixed;
top: -10px;
font-size: 20px;
color: white;
z-index: 1005;
}
.snowflake {
animation: snowfall 10s linear infinite;
}
.raindrop {
animation: raindrop 5s linear infinite;
font-size: 12px;
color: #00bfff;
}
.star {
animation: twinkling 3s infinite alternate;
color: #fffacd;
font-size: 10px;
}
.firefly {
background-color: yellow;
width: 10px;
height: 10px;
border-radius: 50%;
animation: twinkling 2s infinite alternate;
}
.emoji {
animation: floating-emoji 4s infinite alternate;
font-size: 30px;
}
.particle {
animation: color-particles 6s linear infinite;
background-color: #ff4081;
border-radius: 50%;
width: 10px;
height: 10px;
}
#clock-widget {
position: fixed;
top: 20px;
left: 20px;
background-color: #333;
color: #fff;
padding: 10px 20px;
border-radius: 8px;
font-family: Arial, sans-serif;
font-size: 18px;
z-index: 1005;
user-select: none;
cursor: grab; /* Indicate it's draggable */
}
`;
document.head.appendChild(style);
// Create the settings button, menu, gradient options, and clock.
const settingsButton = document.createElement('button');
settingsButton.id = 'settings-button';
settingsButton.innerHTML = 'Settings';
document.body.appendChild(settingsButton);
const settingsMenu = document.createElement('div');
settingsMenu.id = 'settings-menu';
settingsMenu.innerHTML = `
<div class="settings-content">
<div class="settings-categories">
<button class="category-btn" data-category="general">General</button>
<button class="category-btn" data-category="appearance">Appearance</button>
<button class="category-btn" data-category="wallpaper">Wallpaper</button>
<button class="category-btn" data-category="effects">Effects</button>
<button class="category-btn" data-category="widgets">Widgets</button>
</div>
<div class="settings-details">
<div class="category-menu" id="general-menu">
<label><input type="checkbox" id="enable-notifications"> Enable Notifications</label><br>
<label><input type="checkbox" id="auto-save-progress"> Auto-Save Progress</label><br>
<label><input type="checkbox" id="focus-mode"> Enable Focus Mode</label><br>
<label><input type="checkbox" id="auto-dark-mode"> Enable Auto Dark Mode</label><br>
<label><input type="checkbox" id="disable-animations"> Disable Animations</label><br>
<button id="apply-general">Apply General Settings</button>
</div>
<div class="category-menu" id="appearance-menu">
<h2>Appearance Settings</h2>
<label>Theme:
<select id="theme-selector">
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
</label><br>
<label>Gradient Speed:
<input type="range" id="gradient-speed" min="5" max="30" step="1" value="20">
</label><br>
<label><input type="checkbox" id="enable-animations"> Enable Animations</label><br>
<label><input type="checkbox" id="enable-background-blur"> Enable Background Blur</label><br>
<button id="apply-appearance">Apply</button>
</div>
<div class="category-menu" id="wallpaper-menu">
<h2>Wallpaper Settings</h2>
<label>Custom Wallpaper (Image/GIF URL):
<input type="text" id="custom-wallpaper-url" placeholder="Enter image or gif URL" />
</label><br>
<div id="wallpaper-preview">
<!-- Gradient options will be appended here -->
</div>
</div>
<div class="category-menu" id="effects-menu">
<h2>Visual Effects</h2>
<label><input type="checkbox" id="enable-snowfall"> Enable Snowfall Effect</label><br>
<label><input type="checkbox" id="enable-rain"> Enable Minecraft-Like Rain Effect</label><br>
<label><input type="checkbox" id="enable-stars"> Enable Twinkling Stars Effect</label><br>
<label><input type="checkbox" id="enable-fireflies"> Enable Fireflies Effect</label><br>
<label><input type="checkbox" id="enable-floating-emojis"> Enable Floating Emojis</label><br>
<label><input type="checkbox" id="enable-particles"> Enable Color Particles</label><br>
<button id="apply-effects">Apply Effects</button>
</div>
<div class="category-menu" id="widgets-menu">
<h2>Widgets</h2>
<label><input type="checkbox" id="enable-clock-widget"> Enable Clock Widget</label><br>
<button id="apply-widgets">Apply Widgets</button>
</div>
</div>
</div>
<button id="close-settings"></button>
`;
document.body.appendChild(settingsMenu);
settingsMenu.style.display = 'none';
const overlay = document.createElement('div');
overlay.id = 'overlay';
document.body.appendChild(overlay);
overlay.style.display = 'none';
// Clock widget
const clockWidget = document.createElement('div');
clockWidget.id = 'clock-widget';
document.body.appendChild(clockWidget);
clockWidget.style.display = 'none';
// Update clock every second
setInterval(() => {
const now = new Date();
clockWidget.textContent = now.toLocaleTimeString();
}, 1000);
// Make the clock widget draggable
clockWidget.onmousedown = function (event) {
event.preventDefault();
let shiftX = event.clientX - clockWidget.getBoundingClientRect().left;
let shiftY = event.clientY - clockWidget.getBoundingClientRect().top;
function moveAt(pageX, pageY) {
clockWidget.style.left = pageX - shiftX + 'px';
clockWidget.style.top = pageY - shiftY + 'px';
}
function onMouseMove(event) {
moveAt(event.pageX, event.pageY);
}
document.addEventListener('mousemove', onMouseMove);
clockWidget.onmouseup = function () {
document.removeEventListener('mousemove', onMouseMove);
clockWidget.onmouseup = null;
};
};
clockWidget.ondragstart = function () {
return false;
};
// New General Productivity Settings Functions
function applyFocusMode(enable) {
if (enable) {
document.body.style.filter = "blur(0)"; // Reset blurs
document.querySelectorAll('.distracting-element').forEach(el => el.style.display = 'none');
} else {
document.querySelectorAll('.distracting-element').forEach(el => el.style.display = '');
}
}
function autoDarkMode() {
const now = new Date();
const hour = now.getHours();
if (hour >= 18 || hour < 6) {
document.body.classList.add('dark-mode');
} else {
document.body.classList.remove('dark-mode');
}
}
function applyAutoDarkMode(enable) {
if (enable) {
setInterval(autoDarkMode, 60000); // Check every minute
autoDarkMode(); // Apply immediately
}
}
function applyDisableAnimations(enable) {
if (enable) {
document.querySelectorAll("*").forEach(el => {
el.style.animation = "none";
el.style.transition = "none";
});
}
}
// Event listeners for general settings
document.getElementById('apply-general').addEventListener('click', () => {
const focusMode = document.getElementById('focus-mode').checked;
const autoDarkModeEnabled = document.getElementById('auto-dark-mode').checked;
const disableAnimations = document.getElementById('disable-animations').checked;
saveSetting('focus-mode', focusMode);
saveSetting('auto-dark-mode', autoDarkModeEnabled);
saveSetting('disable-animations', disableAnimations);
applyFocusMode(focusMode);
applyAutoDarkMode(autoDarkModeEnabled);
applyDisableAnimations(disableAnimations);
});
// Function to save settings to localStorage.
const saveSetting = (id, value) => {
localStorage.setItem(id, value);
};
// Apply all initial settings based on saved values.
const applySavedSettings = () => {
const focusMode = localStorage.getItem('focus-mode') === 'true';
const autoDarkModeEnabled = localStorage.getItem('auto-dark-mode') === 'true';
const disableAnimations = localStorage.getItem('disable-animations') === 'true';
document.getElementById('focus-mode').checked = focusMode;
document.getElementById('auto-dark-mode').checked = autoDarkModeEnabled;
document.getElementById('disable-animations').checked = disableAnimations;
applyFocusMode(focusMode);
applyAutoDarkMode(autoDarkModeEnabled);
applyDisableAnimations(disableAnimations);
};
// Apply saved general settings upon script initialization
applySavedSettings();
// Remaining functions and event listeners follow...
// All other event listeners and settings functionality remain intact as requested
// This includes applying effects, animations, clock, wallpaper customization, and the menu operations.
document.getElementById('apply-appearance').addEventListener('click', () => {
const customWallpaperUrl = document.getElementById('custom-wallpaper-url').value;
saveSetting('custom-wallpaper-url', customWallpaperUrl); // Save custom wallpaper URL
applyCustomWallpaper(customWallpaperUrl);
applyTheme();
const blur = document.getElementById('enable-background-blur').checked;
const gradientSpeed = document.getElementById('gradient-speed').value;
saveSetting('enable-background-blur', blur);
saveSetting('gradient-speed', gradientSpeed);
const gradientBg = document.querySelector('.gradient-bg');
if (gradientBg) {
gradientBg.style.animationDuration = `${gradientSpeed}s`;
}
if (blur) {
document.body.style.backdropFilter = 'blur(8px)';
} else {
document.body.style.backdropFilter = '';
}
});
document.getElementById('apply-effects').addEventListener('click', () => {
const snowfall = document.getElementById('enable-snowfall').checked;
const rain = document.getElementById('enable-rain').checked;
const stars = document.getElementById('enable-stars').checked;
const fireflies = document.getElementById('enable-fireflies').checked;
const floatingEmojis = document.getElementById('enable-floating-emojis').checked;
const particles = document.getElementById('enable-particles').checked;
saveSetting('enable-snowfall', snowfall);
saveSetting('enable-rain', rain);
saveSetting('enable-stars', stars);
saveSetting('enable-fireflies', fireflies);
saveSetting('enable-floating-emojis', floatingEmojis);
saveSetting('enable-particles', particles);
toggleEffect('snowflake', snowfall);
toggleEffect('raindrop', rain);
toggleEffect('star', stars);
toggleEffect('firefly', fireflies);
toggleEffect('emoji', floatingEmojis);
toggleEffect('particle', particles);
});
document.getElementById('apply-widgets').addEventListener('click', () => {
const clockEnabled = document.getElementById('enable-clock-widget').checked;
saveSetting('enable-clock-widget', clockEnabled);
clockWidget.style.display = clockEnabled ? 'block' : 'none';
});
// Gradient options expanded for user customization
const gradients = [
'linear-gradient(90deg, #ff7e5f, #feb47b)',
'linear-gradient(90deg, #6a11cb, #2575fc)',
'linear-gradient(90deg, #43cea2, #185a9d)',
'linear-gradient(90deg, #ff9a9e, #fad0c4)',
'linear-gradient(90deg, #a1c4fd, #c2e9fb)',
'linear-gradient(90deg, #667eea, #764ba2)',
'linear-gradient(90deg, #89f7fe, #66a6ff)',
// Add additional gradients as desired
];
const wallpaperPreview = document.getElementById('wallpaper-preview');
gradients.forEach((gradient) => {
const gradientDiv = document.createElement('div');
gradientDiv.className = 'gradient-option';
gradientDiv.style.background = gradient;
gradientDiv.dataset.gradient = gradient;
gradientDiv.addEventListener('click', () => {
applyAnimatedGradient(gradient);
saveSetting('selected-gradient', gradient); // Save selected gradient
});
wallpaperPreview.appendChild(gradientDiv);
});
function applyAnimatedGradient(gradient) {
let gradientBg = document.querySelector('.gradient-bg');
if (!gradientBg) {
gradientBg = document.createElement('div');
gradientBg.className = 'gradient-bg';
document.body.appendChild(gradientBg);
}
gradientBg.style.background = gradient;
}
// Open and close settings menu functions
function openSettingsMenu() {
overlay.style.display = 'block';
settingsMenu.style.display = 'flex';
}
function closeSettingsMenu() {
overlay.style.display = 'none';
settingsMenu.style.display = 'none';
document.querySelectorAll('.category-menu').forEach(menu => {
menu.style.display = 'none';
});
}
// Event listeners for settings button and menu actions.
settingsButton.addEventListener('click', () => {
const code = prompt('Enter the password:');
if (code === '123') {
openSettingsMenu();
} else {
alert('Incorrect password');
}
});
overlay.addEventListener('click', closeSettingsMenu);
document.getElementById('close-settings').addEventListener('click', closeSettingsMenu);
document.querySelectorAll('.category-btn').forEach(button => {
button.addEventListener('click', (e) => {
const category = e.target.getAttribute('data-category');
const menu = document.getElementById(`${category}-menu`);
document.querySelectorAll('.category-menu').forEach(menu => {
menu.style.display = 'none';
});
if (menu) {
menu.style.display = 'block';
}
});
});
// Function to apply the custom wallpaper setting to the main background
function applyCustomWallpaper(url) {
let gradientBg = document.querySelector('.gradient-bg');
if (gradientBg) gradientBg.remove();
if (url) {
document.body.style.backgroundImage = `url('${url}')`;
document.body.style.backgroundPosition = 'center';
document.body.style.backgroundRepeat = 'no-repeat';
document.body.style.backgroundSize = 'cover';
} else {
document.body.style.backgroundImage = '';
}
}
// Apply theme settings
function applyTheme() {
const theme = document.getElementById('theme-selector').value;
saveSetting('theme-selector', theme); // Save theme to localStorage
if (theme === 'dark') {
document.body.classList.add('dark-mode');
} else {
document.body.classList.remove('dark-mode');
}
}
// Effect toggle functionality
function toggleEffect(type, enable) {
let effectIntervals = {};
if (enable) {
if (!effectIntervals[type]) {
effectIntervals[type] = setInterval(() => createEffect(type), 500);
}
} else {
clearInterval(effectIntervals[type]);
delete effectIntervals[type];
document.querySelectorAll(`.${type}`).forEach(el => el.remove());
}
}
function createEffect(type) {
const effectElement = document.createElement('div');
effectElement.className = type;
if (type === 'snowflake') {
effectElement.textContent = '❄';
} else if (type === 'raindrop') {
effectElement.textContent = '|';
} else if (type === 'star') {
effectElement.textContent = '★';
} else if (type === 'emoji') {
effectElement.textContent = ['🌟', '✨', '❤️', '😊', '🔥', '🌈'][Math.floor(Math.random() * 6)];
}
effectElement.style.left = Math.random() * window.innerWidth + 'px';
effectElement.style.animationDuration = Math.random() * 5 + 5 + 's';
document.body.appendChild(effectElement);
setTimeout(() => effectElement.remove(), 10000);
}
// Apply all initial appearance settings based on saved values.
const applyAppearanceSettings = () => {
const theme = localStorage.getItem('theme-selector');
if (theme) {
document.getElementById('theme-selector').value = theme;
applyTheme();
}
const customWallpaperUrl = localStorage.getItem('custom-wallpaper-url');
if (customWallpaperUrl) {
document.getElementById('custom-wallpaper-url').value = customWallpaperUrl;
applyCustomWallpaper(customWallpaperUrl);
}
const selectedGradient = localStorage.getItem('selected-gradient');
if (selectedGradient) {
applyAnimatedGradient(selectedGradient);
}
const gradientSpeed = localStorage.getItem('gradient-speed');
if (gradientSpeed) {
document.getElementById('gradient-speed').value = gradientSpeed;
const gradientBg = document.querySelector('.gradient-bg');
if (gradientBg) {
gradientBg.style.animationDuration = `${gradientSpeed}s`;
}
}
const snowfall = localStorage.getItem('enable-snowfall') === 'true';
const rain = localStorage.getItem('enable-rain') === 'true';
const stars = localStorage.getItem('enable-stars') === 'true';
const blur = localStorage.getItem('enable-background-blur') === 'true';
const fireflies = localStorage.getItem('enable-fireflies') === 'true';
const floatingEmojis = localStorage.getItem('enable-floating-emojis') === 'true';
const particles = localStorage.getItem('enable-particles') === 'true';
const clockEnabled = localStorage.getItem('enable-clock-widget') === 'true';
document.getElementById('enable-snowfall').checked = snowfall;
document.getElementById('enable-rain').checked = rain;
document.getElementById('enable-stars').checked = stars;
document.getElementById('enable-background-blur').checked = blur;
document.getElementById('enable-fireflies').checked = fireflies;
document.getElementById('enable-floating-emojis').checked = floatingEmojis;
document.getElementById('enable-particles').checked = particles;
document.getElementById('enable-clock-widget').checked = clockEnabled;
clockWidget.style.display = clockEnabled ? 'block' : 'none';
toggleEffect('snowflake', snowfall);
toggleEffect('raindrop', rain);
toggleEffect('star', stars);
toggleEffect('firefly', fireflies);
toggleEffect('emoji', floatingEmojis);
toggleEffect('particle', particles);
if (blur) {
document.body.style.backdropFilter = 'blur(8px)';
}
};
applyAppearanceSettings();
// Add event listeners for checkboxes to save their state.
document.querySelectorAll('input[type="checkbox"]').forEach(checkbox => {
checkbox.addEventListener('change', function () {
saveSetting(this.id, this.checked);
});
});
// Ensure changes to the theme are reflected immediately when the user changes the theme.
document.getElementById('theme-selector').addEventListener('change', applyTheme);
})();