// ==UserScript== // @name MWI Loadout Manager // @namespace https://github.com/tobytorn // @description Setup loadout according to Combat Simulator export files // @author tobytorn // @match https://www.milkywayidle.com/* // @match https://test.milkywayidle.com/* // @version 1.0.1 // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @supportURL https://github.com/tobytorn/mwi-loadout-manager // @license MIT // @require https://unpkg.com/jquery@3.7.0/dist/jquery.min.js // @downloadURL https://update.greasyfork.icu/scripts/502083/MWI%20Loadout%20Manager.user.js // @updateURL https://update.greasyfork.icu/scripts/502083/MWI%20Loadout%20Manager.meta.js // ==/UserScript== (function () { 'use strict'; const MISC_SVG = '/static/media/misc_sprite.2864433e.svg'; const ITEMS_SVG = '/static/media/items_sprite.8134f2ed.svg'; const ABILITIES_SVG = '/static/media/abilities_sprite.7b4605a0.svg'; const CSS = ` .lmInput { color: var(--color-text-dark-mode); background: var(--color-midnight-700); border: none; padding: 4px; resize: none; outline: none; } .lmError { color: var(--color-warning-hover); display: none; } .lmItemIcon { position: absolute; top: 15%; left: 15%; width: 70%; height: 70%; } .lmEnhancementLevel { z-index: 1; position: absolute; top: 1px; left: 1px; color: var(--color-orange-400); text-shadow: 1px 1px 3px var(--color-midnight-500); font-size: 12px; font-weight: 500; line-height: 12px; } .lmPanelEntry { margin: 0 auto 8px auto; width: fit-content; } .CombatZones_consumablesAndAbilitiesContainer__rb6Fi.lmSeen > *, .Party_consumablesAndAbilitiesContainer__2ff8f.lmSeen > * { margin-left: auto; } .lmCombatEntry { align-self: center; padding: 8px; } .lmCombatEntry.lmEntryCorrect::after { content: 'Correct'; font-size: 14px; color: var(--color-jade-600); } .lmCombatEntry.lmEntryWrong::after { content: 'Wrong'; font-size: 14px; color: var(--color-warning); } .lmSetTriggers { margin-bottom: 8px; } .lmNoPick { margin-bottom: 4px; text-align: center; color: var(--color-warning); } .lmModalContent { width: 350px; height: 550px; display: flex; flex-direction: column; gap: 4px; align-items: center; } .lmModalTitle { font-size: 16px; font-weight: 500; line-height: 20px; } .lmModalTabContainer { flex-shrink: 0; flex-grow: 0; margin: 0; overflow: hidden; width: 100%; border-bottom: 2px solid var(--color-divider); display: flex; letter-spacing: 0.02857em; } .lmTabButton { color: var(--color-text-dark-mode); font-size: 14px; font-weight: 500; min-height: 32px; height: 32px; margin: 0; border-top-left-radius: 4px; border-top-right-radius: 4px; padding: 6px; cursor: pointer; } .lmTabButton:hover { background: var(--color-midnight-300); } .lmTabButton.lmActive { background: var(--color-space-600); } .lmModalTabContent { display: flex; width: 100%; height: 100%; flex-direction: column; gap: 4px; text-align: left; overflow: auto; } .lmModalTabContent:not(.lmActive) { display: none; } #lmSelectTab .lmSelectTabNote { font-style: italic; } #lmLoadoutList { display: flex; flex-direction: column; gap: 8px; } #lmLoadoutList .lmLoadout { border-radius: 4px; border: 2px solid var(--color-midnight-700); background: var(--color-midnight-700); padding: 8px; display: flex; flex-direction: column; gap: 8px; cursor: pointer; } #lmLoadoutList .lmLoadout:hover { background-color: var(--color-midnight-300); } #lmLoadoutList .lmLoadout.lmActive { border: 2px solid var(--color-neutral-200); } #lmLoadoutList .lmLoadoutNameContainer { display: flex; gap: 4px; } #lmLoadoutList .lmLoadoutName { flex-grow: 1; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } #lmLoadoutList .lmLoadout.lmActive .lmLoadoutName { white-space: normal; } #lmLoadoutList .lmLoadoutStar { height: 20px; width: 20px; flex-shrink: 0; } #lmLoadoutList .lmLoadout:not(.lmCurrent) .lmLoadoutStar { display: none; } #lmLoadoutList .lmLoadoutSummary { display: grid; gap: 4px; grid-template-columns: repeat(6, 45px); } #lmLoadoutList .lmLoadoutSummary:empty::after { content: 'This exactly matches your current loadout'; font-style: italic; white-space: nowrap; color: var(--color-market-buy); } #lmLoadoutList .lmLoadout.lmActive .lmLoadoutSummary { display: none; } #lmLoadoutList .lmLoadoutDetails { display: grid; grid-template-columns: repeat(3, 45px); gap: 4px; justify-content: center; } #lmLoadoutList .lmLoadout:not(.lmActive) .lmLoadoutDetails { display: none; } #lmLoadoutList .lmLoadoutSlot { height: 45px; width: 45px; background-color: var(--color-midnight-500); border-radius: 4px; border: 1px solid var(--color-space-300); position: relative; } #lmLoadoutList .lmTriggerIcon { display: none; z-index: 1; position: absolute; left: 50%; bottom: -1px; transform: translate(-50%, 50%); width: 16px; height: 16px; } #lmLoadoutList .lmTriggerIcon svg { filter: brightness(0) saturate(100%) invert(25%) sepia(95%) saturate(3196%) hue-rotate(346deg) brightness(93%) contrast(84%); } #lmLoadoutList .lmTriggerIcon > div { position: absolute; width: 50%; height: 50%; border-radius: 50%; background-color: var(--color-midnight-500); top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: -1; } #lmLoadoutList .lmLoadoutSlot.lmBadTriggers .lmTriggerIcon { display: block; } #lmLoadoutList .lmLoadoutDetails .lmLoadoutSlot.lmBad { border: 3px solid var(--color-warning); } #lmLoadoutList .lmLoadoutActions { display: flex; gap: 4px; } #lmLoadoutList .lmDelete { background: var(--color-market-sell); } #lmLoadoutList .lmDelete:hover { background: var(--color-market-sell-hover); } #lmLoadoutList .lmDelete::after { content: 'Delete'; } #lmLoadoutList .lmDelete.lmConfirming { background: var(--color-disabled); } #lmLoadoutList .lmDelete.lmConfirming::after { content: 'Confirm Delete'; } #lmLoadoutList .lmDelete.lmConfirming.lmConfirmed { background: var(--color-warning); } #lmLoadoutList .lmDelete.lmConfirming.lmConfirmed:hover { background: var(--color-warning-hover); } #lmLoadoutList .lmLoadout:not(.lmActive) .lmLoadoutActions { display: none; } #lmLoadoutList .lmLoadout.lmCurrent .lmSelect, #lmLoadoutList .lmLoadout.lmCurrent .lmDelete { display: none; } #lmLoadoutList .lmLoadout:not(.lmCurrent) .lmDeselect { display: none; } #lmImportTab textarea { flex-grow: 1; } .EquipmentPanel_playerModel__3LRB6 > .lmHighlight .ItemSelector_itemSelector__2eTV6, .AbilitySlot_abilitySlot__22oxh.lmHighlight .AbilitySlot_slot__3BSD4, .ConsumableSlot_consumableSlotContainer__2DwgD.lmHighlight .ConsumableSlot_itemSelectorContainer__RODer { position: relative; } .EquipmentPanel_playerModel__3LRB6 > .lmHighlight .ItemSelector_itemSelector__2eTV6::after, .ConsumableSlot_consumableSlotContainer__2DwgD.lmHighlight .ConsumableSlot_itemSelectorContainer__RODer::after, .AbilitySlot_abilitySlot__22oxh.lmHighlight .AbilitySlot_slot__3BSD4::after { content: ''; display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; border-radius: inherit; border: 3px solid var(--color-warning); pointer-events: none; } .lmHighlightTriggers .CombatTriggersSetting_combatTriggersSetting__380iI { filter: brightness(0) saturate(100%) invert(25%) sepia(95%) saturate(3196%) hue-rotate(346deg) brightness(93%) contrast(84%); } .lmPick { position: relative; grid-area: 1 / 1; } .lmPick.lmPickSecond { grid-column-start: 2; } .lmPick::after { content: ''; display: block; width: 100%; height: 100%; position: absolute; top: 0; left: 0; border-radius: 4px; border: 3px solid var(--color-jade-600); pointer-events: none; } .lmCombatUnitWrongLoadout::after { content: 'Wrong Loadout'; width: 100%; height: 20px; font-size: 14px; font-weight: 500; color: var(--color-warning); } `; const PANEL_ENTRY_HTML = '