您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Klappt Einsätze mit dem "User"-Icon ein, basierend auf konfigurierbaren Einsatzlisten.
// ==UserScript== // @name LSS Auto-Einklappen // @namespace Hendrik // @version 1.1 // @description Klappt Einsätze mit dem "User"-Icon ein, basierend auf konfigurierbaren Einsatzlisten. // @match https://www.leitstellenspiel.de/ // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // ########## KONFIGURATION ########## // Hier kannst du festlegen, welche Einsatzlisten automatisch eingeklappt werden sollen. const ENABLE_MISSION_LIST = true; const ENABLE_KRANKENTRANSPORTE = true; const ENABLE_KRANKENTRANSPORTE_ALLIANCE = true; const ENABLE_SICHERHEITSWACCHE = true; const ENABLE_SICHERHEITSWACCHE_ALLIANCE = true; const ENABLE_ALLIANCE_LIST = true; const ENABLE_ALLIANCE_EVENT_LIST = true; // NEU HINZUGEFÜGT // ################################### // Liste der zu überwachenden Einsatzcontainer. // Wird jetzt nur noch einmal erstellt und nicht bei jedem Durchlauf neu. const missionLists = [ { id: 'mission_list', enabled: ENABLE_MISSION_LIST }, { id: 'mission_list_krankentransporte', enabled: ENABLE_KRANKENTRANSPORTE }, { id: 'mission_list_krankentransporte_alliance', enabled: ENABLE_KRANKENTRANSPORTE_ALLIANCE }, { id: 'mission_list_sicherheitswache', enabled: ENABLE_SICHERHEITSWACCHE }, { id: 'mission_list_sicherheitswache_alliance', enabled: ENABLE_SICHERHEITSWACCHE_ALLIANCE }, { id: 'mission_list_alliance', enabled: ENABLE_ALLIANCE_LIST }, { id: 'mission_list_alliance_event', enabled: ENABLE_ALLIANCE_EVENT_LIST } // NEU HINZUGEFÜGT ]; const eingeklappteMissionen = new Set(); const manuallyExpandedTimers = new Map(); const collapseIconName = 'down-left-and-up-right-to-center'; const expandIconName = 'up-right-and-down-left-from-center'; function isTextFieldActive() { return document.activeElement && (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA' || document.activeElement.isContentEditable); } function attemptReCollapse(missionId, missionEntry) { manuallyExpandedTimers.delete(missionId); if (!document.body.contains(missionEntry)) return; const collapseBtn = missionEntry.querySelector('button.lssmv4-extendedCallList_collapsable-missions_btn'); if (collapseBtn) { const svgIcon = collapseBtn.querySelector('svg[data-icon]'); if (svgIcon && svgIcon.getAttribute('data-icon') === collapseIconName) { collapseBtn.click(); eingeklappteMissionen.add(missionId); } } } function scheduleReCollapse(missionId, missionEntry) { if (manuallyExpandedTimers.has(missionId)) clearTimeout(manuallyExpandedTimers.get(missionId).timerId); const timerId = setTimeout(() => attemptReCollapse(missionId, missionEntry), 15000); manuallyExpandedTimers.set(missionId, { timerId, entry: missionEntry }); } function handleMissionCollapse() { const textFieldCurrentlyActive = isTextFieldActive(); for (const list of missionLists) { if (!list.enabled) continue; const missionContainer = document.querySelector(`#${list.id}`); if (!missionContainer) continue; for (const missionEntry of missionContainer.querySelectorAll('.missionSideBarEntry')) { const missionId = missionEntry.getAttribute('mission_id'); if (!missionId) continue; const isUserMission = missionEntry.querySelector('.glyphicon.glyphicon-user'); const isAsteriskMission = missionEntry.querySelector('.glyphicon.glyphicon-asterisk:not(.hidden)'); const shouldAttemptToManageCollapse = isUserMission && !isAsteriskMission; if (shouldAttemptToManageCollapse) { const collapseBtn = missionEntry.querySelector('button.lssmv4-extendedCallList_collapsable-missions_btn'); if (collapseBtn) { const svgIcon = collapseBtn.querySelector('svg[data-icon]'); if (svgIcon) { const currentIcon = svgIcon.getAttribute('data-icon'); if (eingeklappteMissionen.has(missionId) && currentIcon === collapseIconName && !manuallyExpandedTimers.has(missionId)) { eingeklappteMissionen.delete(missionId); scheduleReCollapse(missionId, missionEntry); } else if (!eingeklappteMissionen.has(missionId) && !manuallyExpandedTimers.has(missionId)) { if (currentIcon === collapseIconName && !textFieldCurrentlyActive) { collapseBtn.click(); eingeklappteMissionen.add(missionId); } else if (currentIcon === expandIconName) { eingeklappteMissionen.add(missionId); } } } } } else { if (manuallyExpandedTimers.has(missionId)) { clearTimeout(manuallyExpandedTimers.get(missionId).timerId); manuallyExpandedTimers.delete(missionId); } } } } } function timedLoop() { try { handleMissionCollapse(); } catch (e) { console.error("[LSS Auto-Einklappen] Fehler:", e); } setTimeout(timedLoop, 2000); } setTimeout(() => { timedLoop(); console.log("LSS Auto-Einklappen Skript gestartet."); }, 2000); })();