[extension_name] MickFX Zeus [extension_info] Zeus effect for MickFX. Summon a God of old times. [extension_version] 1.0.0 [insert_external]
Starting MickFX Zeus in 5...
`; statusDiv.parentNode.insertBefore(completeContainer, statusDiv.nextSibling); let timeLeft = 5; const countdownElement = document.getElementById('MickFX-Zeus-Countdown'); const timer = setInterval(() => { timeLeft--; if (timeLeft > 0) { countdownElement.textContent = `Starting MickFX Zeus in ${timeLeft}...`; } else { clearInterval(timer); MickFXZeusCompleteInstall(); } }, 1000); statusDiv.dataset.completeTimer = timer; } } catch (error) { console.error('[MickFX Zeus] Error processing download stage:', error); } }); } function MickFXZeusInstallClicked() { MickFX_ZeusInstalling = true; let statusDiv = document.getElementById('MickFX-Zeus-Popup'); const installButton = document.getElementById('MickFX-Zeus-InstallButton'); // Create or reset status elements if (!statusDiv) { statusDiv = document.createElement('div'); statusDiv.id = 'MickFX-Zeus-Popup'; statusDiv.className = 'MickFX-Popup-ContainerFX'; statusDiv.innerHTML = ` Please wait. Setting up MickFX Zeus `; installButton.parentNode.insertBefore(statusDiv, installButton); } else { // Reset existing status div statusDiv.innerHTML = ` Please wait. Setting up MickFX Zeus `; } // Show status message and hide install button statusDiv.style.display = 'block'; installButton.style.display = 'none'; SAMMI.triggerButton('MickFXZeusInstall') .catch(error => console.error('[MickFX Zeus] Install error:', error)); } function MickFXZeusContinueInstall() { MickFX_ZeusInstalling = true; const runButton = document.getElementById('MickFX-Zeus-RunButton'); if (runButton) runButton.style.display = 'none'; const popup = document.getElementById('MickFX-Zeus-Popup'); popup.style.display = 'block'; // Add the complete install listener sammiclient.removeAllListeners('MickFXZeusCompleteInstall'); sammiclient.on('MickFXZeusCompleteInstall', (payload) => { console.log('[MickFX Zeus] Received complete payload:', payload); try { const data = JSON.parse(payload.Data.json); if (data.result === true) { const popup = document.getElementById('MickFX-Zeus-Popup'); const settingsPath = MickFX_MainDirectory + "/Information/fxsettings.ini"; popup.innerHTML = ` Zeus is now fully set up and good to go! `; MickFX_ZeusInstalling = false; SAMMI.saveIni(settingsPath, "Zeus", "Install Complete", 1, "number") .then(() => { setTimeout(() => { popup.style.display = 'none'; const runButton = document.getElementById('MickFX-Zeus-RunButton'); if (runButton) runButton.style.display = 'block'; MickFXZeusInit(); }, 5000); }); } } catch (error) { console.error('[MickFX Zeus] Complete Install Error:', error); } }); // Start with the new voice manager system MickFXZeusVoiceManager('popup', 'assess'); } function MickFXZeusCompleteInstall() { MickFX_ZeusInstalling = false; MickFX_ZeusInstalled = 1; // Clear any existing timer const timer = document.getElementById('MickFX-Zeus-Popup')?.dataset.completeTimer; if (timer) clearInterval(Number(timer)); // Remove the complete container (which includes button and countdown) const completeContainer = document.getElementById('MickFX-Zeus-CompleteContainer'); if (completeContainer) completeContainer.remove(); // Let BaseCheck handle the rest of the UI state MickFXZeusInit(); } function MickFXZeusHideTimer() { const toggleType = document.getElementById('MickFX-ZeusToggleType').value; const timerGroup = document.getElementById('MickFX-Zeus-Timer-Group'); if (toggleType === "1") { timerGroup.style.display = 'none'; } else { timerGroup.style.display = 'block'; } } function MickFXZeusDropdown(element, selectId) { MickFXDropdown(element, selectId); if (selectId === 'MickFX-ZeusToggleType') { MickFXZeusHideTimer(); } // Handle Mode-specific logic if (selectId === 'MickFX-Zeus-Mode') { const selectedValue = parseInt(element.getAttribute('data-value')); MickFXZeusModeVisibility(selectedValue); } // Handle Skeleton-specific logic if (selectId === 'MickFX-Zeus-Skeleton') { const selectedValue = parseInt(element.getAttribute('data-value')); const skeletonFlipGroup = document.getElementById('MickFX-Zeus-SkeletonFlipGroup'); if (skeletonFlipGroup) { skeletonFlipGroup.style.display = selectedValue === 1 ? 'block' : 'none'; } } } function MickFXZeusModeVisibility(mode) { const sideGroup = document.getElementById('MickFX-Zeus-SideGroup'); const positionGroup = document.getElementById('MickFX-Zeus-PositionGroup'); if (sideGroup) { sideGroup.style.display = mode === 0 ? 'block' : 'none'; } if (positionGroup) { positionGroup.style.display = mode === 2 ? 'block' : 'none'; } // Clear validation when NOT in mode 2 if (mode !== 2) { MickFXClearZeusValidation(); } // Apply validation for mode 2 if (mode === 2) { MickFXZeusUpdatePositionSection(); } } function MickFXApplyZeusValidation(saveButton) { if (saveButton._zeusValidation) { Object.entries(saveButton._zeusValidation).forEach(([event, handler]) => { saveButton.removeEventListener(event, handler); }); delete saveButton._zeusValidation; } // Apply special disabled class instead of disabled attribute saveButton.classList.add('MickFX-Button--disabled-tooltip'); const showTooltip = (e) => MickFXShowTooltip(e, "Please set Zeus position first"); saveButton.addEventListener('mousemove', showTooltip); saveButton.addEventListener('mouseleave', MickFXHideTooltip); // Store handlers for cleanup saveButton._zeusValidation = { mousemove: showTooltip, mouseleave: MickFXHideTooltip }; // Prevent actual clicking saveButton.onclick = (e) => { e.preventDefault(); return false; }; } function MickFXClearZeusValidation() { console.log('Clearing Zeus validation'); const saveButton = document.getElementById('MickFX-Zeus-FXSaveButton'); if (!saveButton) return; // Only clear if button has validation if (saveButton._zeusValidation) { saveButton.classList.remove('MickFX-Button--disabled-tooltip'); Object.entries(saveButton._zeusValidation).forEach(([event, handler]) => { saveButton.removeEventListener(event, handler); }); delete saveButton._zeusValidation; // Restore original click handler saveButton.onclick = () => MickFXZeusSaveSettings(); } } function MickFXZeusCancelPosition() { SAMMI.triggerButton('MickFXZeusPositionReset'); MickFXZeusUpdatePositionSection(); } function MickFXZeusUpdatePositionSection() { const settingsPath = MickFX_MainDirectory + "/Information/fxsettings.ini"; Promise.all([ SAMMI.loadIni(settingsPath, "Zeus", "Mode", "number"), SAMMI.loadIni(settingsPath, "Zeus", "UserPosX", "number"), SAMMI.loadIni(settingsPath, "Zeus", "UserPosY", "number"), SAMMI.loadIni(settingsPath, "Zeus", "UserScaleX", "number"), SAMMI.loadIni(settingsPath, "Zeus", "UserScaleY", "number") ]).then(([mode, userPosX, userPosY, userScaleX, userScaleY]) => { const positionDisplay = document.getElementById('MickFX-Zeus-Position'); const buttonContainer = document.getElementById('MickFX-Zeus-PositionButtons'); const hasValidPosition = userPosX.Value && userPosY.Value && userScaleX.Value && userScaleY.Value; if (mode.Value === 2 && hasValidPosition) { positionDisplay.textContent = `X = ${parseInt(userPosX.Value)} | Y = ${parseInt(userPosY.Value)} | ScaleX = ${parseFloat(userScaleX.Value).toFixed(2)} | ScaleY = ${parseFloat(userScaleY.Value).toFixed(2)}`; buttonContainer.innerHTML = ` `; } else { positionDisplay.textContent = 'Position = Not Set'; buttonContainer.innerHTML = ` `; } // Handle main save button validation const saveButton = document.querySelector('#MickFX-Zeus-FXSaveButton'); if (saveButton) { if (mode.Value === 2 && !hasValidPosition) { MickFXApplyZeusValidation(saveButton); } else { MickFXClearZeusValidation(); } } }); } function MickFXZeusSavePosition() { SAMMI.triggerButton('MickFXZeusPosition2'); const saveButton = document.getElementById('MickFX-Zeus-SavePositionButton'); const cancelButton = saveButton.parentElement.querySelector('button[onclick*="MickFXZeusCancelPosition"]'); if (cancelButton) { cancelButton.disabled = true; } MickFXHandleButton('MickFX-Zeus-SavePositionButton', 'success', { text: 'Position saved!', duration: 3000 }); setTimeout(() => { if (cancelButton) { cancelButton.disabled = false; } const settingsPath = MickFX_MainDirectory + "/Information/fxsettings.ini"; SAMMI.saveIni(settingsPath, "Zeus", "Mode", 2, "number").then(() => { MickFXZeusUpdatePositionSection(); // This will clear validation since position is now set }); }, 3000); } function MickFXZeusSetPosition() { // Change text and show Save/Cancel buttons const positionDisplay = document.getElementById('MickFX-Zeus-Position'); const buttonContainer = document.getElementById('MickFX-Zeus-PositionButtons'); if (positionDisplay) { // Check if we already have a position set const hasPosition = !positionDisplay.textContent.includes('Position = Not Set'); if (hasPosition) { positionDisplay.textContent = 'MickFX Zeus should have appeared on your screen. Move it to where you want it to appear then click save.'; } else { positionDisplay.textContent = 'MickFX Zeus should have appeared on your screen. Move it to where you want it to appear then click save.'; } } if (buttonContainer) { buttonContainer.innerHTML = `