// ==UserScript== // @name Grepolis Optimal Actions // @namespace http://tampermonkey.net/ // @version 3.0 // @description Suggests optimal actions in Grepolis based on current game state, with enhanced notifications and organized settings. // @author Nyxiafed // @match https://*.grepolis.com/* // @grant none // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/512053/Grepolis%20Optimal%20Actions.user.js // @updateURL https://update.greasyfork.icu/scripts/512053/Grepolis%20Optimal%20Actions.meta.js // ==/UserScript== (function () { 'use strict'; // Create a GUI overlay const gui = document.createElement('div'); gui.style.position = 'fixed'; gui.style.top = '50px'; gui.style.right = '10px'; gui.style.width = '320px'; gui.style.backgroundColor = '#1e1e1e'; // Dark background for dark mode gui.style.color = '#f0f0f0'; // Light text color gui.style.padding = '15px'; gui.style.zIndex = '9999'; gui.style.borderRadius = '12px'; // Rounded corners gui.style.fontFamily = 'Arial, sans-serif'; gui.style.boxShadow = '0 4px 15px rgba(0, 0, 0, 0.5)'; gui.style.maxHeight = '400px'; gui.style.overflowY = 'auto'; gui.style.opacity = '1'; // Fully visible document.body.appendChild(gui); // Create a static movable minimize/maximize button const toggleButton = document.createElement('button'); toggleButton.innerText = 'Minimize'; toggleButton.style.position = 'fixed'; // Position fixed toggleButton.style.width = '100px'; // Fixed width toggleButton.style.height = '40px'; // Fixed height toggleButton.style.backgroundColor = '#007bff'; // Blue color for the button toggleButton.style.color = '#fff'; toggleButton.style.border = 'none'; toggleButton.style.borderRadius = '5px'; toggleButton.style.cursor = 'pointer'; toggleButton.style.zIndex = '10000'; // Above the GUI toggleButton.style.right = '10px'; // Initial position toggleButton.style.top = '10px'; // Initial position document.body.appendChild(toggleButton); // Added button to GUI // Make the toggle button draggable makeDraggable(toggleButton); // Create main content areas for notifications and settings const contentArea = document.createElement('div'); contentArea.style.display = 'flex'; contentArea.style.flexDirection = 'column'; gui.appendChild(contentArea); // Create resource display area const resourceDisplay = createResourceDisplay(contentArea); // Create notification area const notificationArea = createNotificationArea(contentArea); // Create action history area const actionHistoryArea = createActionHistoryArea(contentArea); // Create a settings tab section const settingsTab = createSettingsTab(contentArea); contentArea.appendChild(settingsTab); // Load settings from local storage loadSettings(); // Show the GUI on page load gui.style.display = 'block'; // Make the GUI draggable makeDraggable(gui); // Fade everything else on the page when minimizing/maximizing toggleButton.addEventListener('click', toggleGUI); // Functions to handle the script logic function createResourceDisplay(parent) { const resourceDisplay = document.createElement('div'); resourceDisplay.style.backgroundColor = '#444'; // Darker background for resources resourceDisplay.style.padding = '10px'; resourceDisplay.style.borderRadius = '8px'; resourceDisplay.style.marginBottom = '10px'; resourceDisplay.style.color = 'white'; resourceDisplay.innerHTML = `

Resources

Wood: 0

Stone: 0

Silver: 0

`; parent.appendChild(resourceDisplay); updateResources(); return resourceDisplay; } function updateResources() { // Fetch current resources (replace with actual fetching logic) const wood = 1000; // Example value const stone = 800; // Example value const silver = 600; // Example value document.getElementById('woodAmount').innerText = wood; document.getElementById('stoneAmount').innerText = stone; document.getElementById('silverAmount').innerText = silver; } function createNotificationArea(parent) { const notificationArea = document.createElement('div'); notificationArea.style.backgroundColor = '#333'; // Darker background for notifications notificationArea.style.padding = '10px'; notificationArea.style.borderRadius = '8px'; notificationArea.style.marginBottom = '10px'; notificationArea.style.transition = 'opacity 0.3s'; parent.appendChild(notificationArea); return notificationArea; } function createActionHistoryArea(parent) { const actionHistoryArea = document.createElement('div'); actionHistoryArea.style.backgroundColor = '#444'; // Darker background for action history actionHistoryArea.style.padding = '10px'; actionHistoryArea.style.borderRadius = '8px'; actionHistoryArea.style.marginBottom = '10px'; actionHistoryArea.style.color = 'white'; const actionHistoryTitle = document.createElement('h3'); actionHistoryTitle.innerText = 'Action History'; actionHistoryTitle.style.margin = '0'; actionHistoryArea.appendChild(actionHistoryTitle); const actionList = document.createElement('ul'); actionList.id = 'actionList'; actionHistoryArea.appendChild(actionList); parent.appendChild(actionHistoryArea); return actionHistoryArea; } function logAction(action) { const actionList = document.getElementById('actionList'); const newAction = document.createElement('li'); const timestamp = new Date().toLocaleTimeString(); newAction.innerText = `${action} at ${timestamp}`; actionList.appendChild(newAction); } function createSettingsTab(parent) { const settingsTab = document.createElement('div'); settingsTab.innerHTML = `

Settings


Construction Preferences

`; return settingsTab; } function toggleGUI() { if (gui.style.opacity === '0') { gui.style.opacity = '1'; toggleButton.innerText = 'Minimize'; } else { gui.style.opacity = '0'; toggleButton.innerText = 'Maximize'; } } function makeDraggable(element) { let offsetX, offsetY; element.onmousedown = function (e) { offsetX = e.clientX - element.getBoundingClientRect().left; offsetY = e.clientY - element.getBoundingClientRect().top; document.onmousemove = function (e) { element.style.left = e.clientX - offsetX + 'px'; element.style.top = e.clientY - offsetY + 'px'; }; document.onmouseup = function () { document.onmousemove = null; }; }; } // Save Settings button event listener document.getElementById('saveSettings').addEventListener('click', () => { // Save general settings to local storage localStorage.setItem('minWood', document.getElementById('minWood').value); localStorage.setItem('minStone', document.getElementById('minStone').value); localStorage.setItem('minSilver', document.getElementById('minSilver').value); // Save construction preferences localStorage.setItem('upgradeTimberCamp', document.getElementById('upgradeTimberCamp').checked); localStorage.setItem('upgradeSilverMine', document.getElementById('upgradeSilverMine').checked); localStorage.setItem('upgradeBarracks', document.getElementById('upgradeBarracks').checked); localStorage.setItem('upgradeTownHall', document.getElementById('upgradeTownHall').checked); localStorage.setItem('buildMarket', document.getElementById('buildMarket').checked); localStorage.setItem('buildWorkshop', document.getElementById('buildWorkshop').checked); localStorage.setItem('buildWarehouse', document.getElementById('buildWarehouse').checked); alert('Settings saved!'); }); // Toggle Settings Tabs document.getElementById('generalSettingsBtn').addEventListener('click', () => { document.getElementById('generalSettings').style.display = 'block'; document.getElementById('notificationSettings').style.display = 'none'; }); document.getElementById('notificationSettingsBtn').addEventListener('click', () => { document.getElementById('generalSettings').style.display = 'none'; document.getElementById('notificationSettings').style.display = 'block'; }); // Toggle Construction Preferences document.getElementById('toggleConstruction').addEventListener('click', () => { const constructionPreferences = document.getElementById('constructionPreferences'); constructionPreferences.style.display = constructionPreferences.style.display === 'none' ? 'block' : 'none'; document.getElementById('toggleConstruction').innerText = constructionPreferences.style.display === 'none' ? '+' : '-'; }); // Test Sound Button document.getElementById('testSound').addEventListener('click', () => { const sound = document.getElementById('notificationSound').value; playSound(sound); }); function playSound(sound) { const audio = new Audio(sound); audio.play(); } // User Feedback Submission document.getElementById('submitFeedback').addEventListener('click', () => { const feedback = document.getElementById('userFeedback').value; if (feedback) { localStorage.setItem('userFeedback', feedback); alert('Feedback submitted!'); document.getElementById('userFeedback').value = ''; // Clear the textarea } else { alert('Please enter feedback before submitting.'); } }); function loadSettings() { document.getElementById('minWood').value = localStorage.getItem('minWood') || 500; document.getElementById('minStone').value = localStorage.getItem('minStone') || 300; document.getElementById('minSilver').value = localStorage.getItem('minSilver') || 400; document.getElementById('upgradeTimberCamp').checked = JSON.parse(localStorage.getItem('upgradeTimberCamp') || 'false'); document.getElementById('upgradeSilverMine').checked = JSON.parse(localStorage.getItem('upgradeSilverMine') || 'false'); document.getElementById('upgradeBarracks').checked = JSON.parse(localStorage.getItem('upgradeBarracks') || 'false'); document.getElementById('upgradeTownHall').checked = JSON.parse(localStorage.getItem('upgradeTownHall') || 'false'); document.getElementById('buildMarket').checked = JSON.parse(localStorage.getItem('buildMarket') || 'false'); document.getElementById('buildWorkshop').checked = JSON.parse(localStorage.getItem('buildWorkshop') || 'false'); document.getElementById('buildWarehouse').checked = JSON.parse(localStorage.getItem('buildWarehouse') || 'false'); } // Add quick action buttons to the settings const quickActionButtons = document.createElement('div'); quickActionButtons.style.marginBottom = '10px'; quickActionButtons.innerHTML = `

Quick Actions

`; parent.appendChild(quickActionButtons); // Event listeners for quick actions document.getElementById('gatherResources').addEventListener('click', () => logAction('Gathered Resources')); document.getElementById('build').addEventListener('click', () => logAction('Built Structure')); document.getElementById('upgrade').addEventListener('click', () => logAction('Upgraded Structure')); document.getElementById('sendTroops').addEventListener('click', () => logAction('Sent Troops')); // Help section document.getElementById('helpButton').addEventListener('click', () => { alert('Help:\n- Use the Settings tab to configure your preferences.\n- Click Quick Actions for immediate actions.\n- Feedback is saved for future improvements.'); }); })();