// ==UserScript==
// @name LMVZ Solver 02
// @namespace http://tampermonkey.net/
// @version 2024-10-01
// @description delete or insert to start
// @author Claimingnine
// @match https://003.lmvz.ch/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=lmvz.ch
// @grant none
// ==/UserScript==
(function() {
let isRunning = false;
let intervalId;
let solvedCount = 0;
// Create UI Panel
function createUI() {
// Create toggle button
const toggleBtn = document.createElement('div');
toggleBtn.id = 'lmvz-math-toggle-btn';
toggleBtn.innerHTML = '🧮';
toggleBtn.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
width: 50px;
height: 50px;
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
cursor: pointer;
z-index: 10000;
box-shadow: 0 4px 15px rgba(240, 147, 251, 0.4);
transition: all 0.3s ease;
`;
toggleBtn.onmouseover = () => {
toggleBtn.style.transform = 'scale(1.1)';
toggleBtn.style.boxShadow = '0 6px 20px rgba(240, 147, 251, 0.6)';
};
toggleBtn.onmouseout = () => {
toggleBtn.style.transform = 'scale(1)';
toggleBtn.style.boxShadow = '0 4px 15px rgba(240, 147, 251, 0.4)';
};
// Create control panel
const panel = document.createElement('div');
panel.id = 'lmvz-math-control-panel';
panel.style.cssText = `
position: fixed;
top: 80px;
right: 20px;
width: 320px;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-radius: 16px;
padding: 20px;
z-index: 9999;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
display: none;
animation: slideIn 0.3s ease;
`;
panel.innerHTML = `
Auto-Solver Stopped
`;
// Add to page
document.body.appendChild(toggleBtn);
document.body.appendChild(panel);
// Toggle panel
let isOpen = false;
toggleBtn.addEventListener('click', () => {
isOpen = !isOpen;
panel.style.display = isOpen ? 'block' : 'none';
toggleBtn.style.transform = isOpen ? 'rotate(90deg)' : 'rotate(0deg)';
});
// Update status display
function updateStatusDisplay() {
const statusDot = document.getElementById('lmvz-math-status-dot');
const statusText = document.getElementById('lmvz-math-status-text');
const statusLabel = document.getElementById('lmvz-math-status-label');
const toggleIcon = document.getElementById('lmvz-math-toggle-icon');
const toggleText = document.getElementById('lmvz-math-toggle-text');
const solvedDisplay = document.getElementById('lmvz-math-solved-count');
if (statusDot && statusText && statusLabel) {
if (isRunning) {
statusDot.className = 'lmvz-math-status-dot running';
statusText.textContent = 'Auto-Solver Running';
statusLabel.textContent = 'Active';
toggleIcon.textContent = '⏸️';
toggleText.textContent = 'Stop Auto-Solver';
} else {
statusDot.className = 'lmvz-math-status-dot stopped';
statusText.textContent = 'Auto-Solver Stopped';
statusLabel.textContent = 'Idle';
toggleIcon.textContent = '▶️';
toggleText.textContent = 'Start Auto-Solver';
}
}
if (solvedDisplay) {
solvedDisplay.textContent = solvedCount;
}
}
// Toggle auto-solver
document.getElementById('lmvz-math-toggle-btn').addEventListener('click', () => {
if (!isRunning) {
intervalId = setInterval(wiederholen, 100);
isRunning = true;
} else {
clearInterval(intervalId);
isRunning = false;
}
updateStatusDisplay();
});
// Custom amount
document.getElementById('lmvz-math-custom-btn').addEventListener('click', () => {
const input = document.getElementById('lmvz-math-custom-count');
const value = parseInt(input.value, 10);
if (!isNaN(value) && value > 0) {
solvedCount += value;
trichtige += value;
wiederholen();
updateStatusDisplay();
input.value = '';
}
});
// Double count
document.getElementById('lmvz-math-double-btn').addEventListener('click', () => {
solvedCount = (solvedCount * 2) - 1;
trichtige = (trichtige * 2) - 1;
wiederholen();
updateStatusDisplay();
});
// Reset counter
document.getElementById('lmvz-math-reset-btn').addEventListener('click', () => {
solvedCount = 0;
trichtige = -1;
wiederholen();
updateStatusDisplay();
});
// Solve one
document.getElementById('lmvz-math-solve-one-btn').addEventListener('click', () => {
wiederholen();
solvedCount++;
updateStatusDisplay();
});
// Update display periodically
setInterval(updateStatusDisplay, 500);
// Make panel draggable
let isDragging = false;
let currentX;
let currentY;
let initialX;
let initialY;
panel.addEventListener('mousedown', (e) => {
if (e.target === panel || e.target.className === 'lmvz-math-header') {
isDragging = true;
initialX = e.clientX - panel.offsetLeft;
initialY = e.clientY - panel.offsetTop;
panel.style.cursor = 'move';
}
});
document.addEventListener('mousemove', (e) => {
if (isDragging) {
e.preventDefault();
currentX = e.clientX - initialX;
currentY = e.clientY - initialY;
panel.style.left = currentX + 'px';
panel.style.top = currentY + 'px';
panel.style.right = 'auto';
}
});
document.addEventListener('mouseup', () => {
isDragging = false;
panel.style.cursor = 'default';
});
updateStatusDisplay();
}
// Initialize UI when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', createUI);
} else {
createUI();
}
function wiederholen() {
tzeigen();
tbewerten();
var resultatElement = document.querySelector('#resultat.resultate');
if (resultatElement) {
var centerElement = resultatElement.querySelector('center');
var resultText = centerElement ? centerElement.innerText : '';
var inputFeld = document.querySelector('input[name="tresultat"]');
if (inputFeld) {
var allText = resultText.replace(/%/g, '');
inputFeld.value = allText;
trichtige += 1;
tpruefen();
}
}
}
document.addEventListener('keydown', function(e) {
if (e.key === 'Delete') {
if (!isRunning) {
intervalId = setInterval(wiederholen, 100);
isRunning = true;
} else {
clearInterval(intervalId);
isRunning = false;
}
} else if (e.key === 'Insert') {
var eingabe = prompt("Wie viele gelöste Aufgaben willst du?");
var zahl = parseInt(eingabe, 10);
if (!isNaN(zahl)) {
trichtige += zahl;
wiederholen();
}
} else if (e.key === '§') {
trichtige = (trichtige * 2) - 1;
wiederholen();
} else if (e.key === 'b') {
wiederholen();
} else if (e.key === 'p') {
trichtige = -1;
wiederholen();
}
});
})();