// ==UserScript==
// @name 怪物换皮 + 战败cg
// @namespace http://tampermonkey.net/
// @version 1.2
// @description 替换怪物图标为自定义图片,同时在玩家死亡时更换人物模型为复活图像
// @match https://www.milkywayidle.com/*
// @grant none
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const monsterImageMap = {
'fly': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'rat': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'skunk': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'porcupine': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'slimy': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'frog': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'snake': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'swampy': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'alligator': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'sea_snail': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'crab': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'aquahorse': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'nom_nom': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'turtle': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'jungle_sprite': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'myconid': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'treant': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'centaur_archer': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'stabby': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'slashy': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'smashy': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'shooty': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'boomy': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'eye': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'eyes': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'veyes': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'novice_sorcerer': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'ice_sorcerer': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'flame_sorcerer': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'elementalist': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'gummy_bear': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'panda': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'black_bear': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'grizzly_bear': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'polar_bear': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'zombie': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'vampire': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'werewolf': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'abyssal_imp': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'soul_hunter': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'infernal_warlock': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'granite_golem': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'magnetic_golem': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
'stalactite_golem': 'https://tupian.li/images/2025/04/26/680c4019ce7a1.gif',
// boss
'crystal_colossus': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'giant_shoebill': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'marine_huntress': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'luna_empress': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'gobo_chieftain': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'the_watcher': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'chronofrost_sorcerer': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'red_panda': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'dusk_revenant': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
'demonic_overlord': 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif',
};
const reviveImageUrl = 'https://tupian.li/images/2025/04/18/6801c297a15ef.gif'; // 玩家战败cg
let isPlayerReplaced = false;
let originalPlayerModel = null;
// 替换怪物图标
const replaceIcons = () => {
document.querySelectorAll('svg use[href*="combat_monsters_sprite"]').forEach(useEl => {
const href = useEl.getAttribute('href');
const monsterId = Object.keys(monsterImageMap).find(id => href.endsWith(id));
if (monsterId) {
const svgEl = useEl.closest('svg');
if (svgEl) {
const img = document.createElement('img');
img.src = monsterImageMap[monsterId];
img.style.width = svgEl.getAttribute('width') || '100%';
img.style.height = svgEl.getAttribute('height') || '100%';
img.style.objectFit = 'contain';
svgEl.parentNode.replaceChild(img, svgEl);
}
}
});
};
// 检查并替换玩家战败cg
const checkReviveStatus = () => {
const unit = document.querySelector('.CombatUnit_combatUnit__1m3XT');
const reviveOverlay = unit?.querySelector('.CountdownOverlay_countdownOverlay__2QRmL');
const modelContainer = unit?.querySelector('.CombatUnit_model__2qQML');
if (unit && modelContainer) {
if (reviveOverlay && !isPlayerReplaced) {
// 保存原始内容
originalPlayerModel = modelContainer.cloneNode(true);
// 替换为复活图像
modelContainer.innerHTML = `
<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
<img src="${reviveImageUrl}" alt="复活中" style="max-height: 100px;" />
</div>
`;
isPlayerReplaced = true;
} else if (!reviveOverlay && isPlayerReplaced && originalPlayerModel) {
// 恢复原模型
modelContainer.replaceWith(originalPlayerModel);
isPlayerReplaced = false;
originalPlayerModel = null;
}
}
};
// 启动监听器和定时器
const observer = new MutationObserver(() => {
replaceIcons();
checkReviveStatus();
});
observer.observe(document.body, { childList: true, subtree: true });
// 初始延迟触发一次
setTimeout(() => {
replaceIcons();
checkReviveStatus();
}, 500);
// 定时检查(确保复活状态不会漏)
setInterval(checkReviveStatus, 1000);
})();