// ==UserScript== // @name 我的文字修仙全靠刷 脚本 // @namespace http://tampermonkey.net/ // @version 2024.8.5-4.1 // @description 修仙小游戏脚本 // @author mj // @match https://* // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net // @grant none // @license MIT // @downloadURL none // ==/UserScript== const myPlayer = document.querySelector('.game-container-wrapper').__vue__.$store.state.player let currentRoutingObject = document.querySelector('.game-container-wrapper').__vue__.$router.currentRoute.matched[0].instances.default let myTips = currentRoutingObject.$notify var intervalId1 = null; var intervalId2 = null; var intervalId3 = null; var attackInterval = null; var fightIntervalId = null; var restInterval = null; var restartIntervalId = null; var automaticSaleOfEquipmentId = null; var petIntervalId = null; var boosIntervalId = null; var boosStart = true; setInterval(() => { boosStart = true; }, 2 * 60 * 1000); (function() { const originalSetInterval = window.setInterval; const intervalIds = []; window.setInterval = function(callback, delay) { const id = originalSetInterval(callback, delay); intervalIds.push(id); return id; }; function clearAllIntervals() { intervalIds.forEach(id => clearInterval(id)); intervalIds.length = 0; } window.clearAllIntervals = clearAllIntervals; })(); function specifyRoutingObject(path) { const routerOptions = document.querySelector('.game-container-wrapper').__vue__.$router.options.routes return routerOptions.find(route => route.path === path).component } function clickButton(buttonText) { let buttons = document.querySelectorAll("button"); for (let button of buttons) { if (button.innerText === buttonText) { button.click(); return true; } } return false; } function clickButtonAndWaitForDOMUpdate(buttonName, callback) { if (!clickButton(buttonName)) { console.error(`按钮 "${buttonName}" 未找到`); return; } const observer = new MutationObserver((mutationsList, observer) => { for (let mutation of mutationsList) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { callback(); observer.disconnect(); break; } } }); observer.observe(document.body, { childList: true, subtree: true }); } function createRouteListener(callback) { if (typeof callback !== 'function') { throw new Error('Callback must be a function'); } (function(history) { var pushState = history.pushState; var replaceState = history.replaceState; history.pushState = function(state, title, url) { var result = pushState.apply(history, arguments); window.dispatchEvent(new Event('pushstate')); window.dispatchEvent(new Event('locationchange')); return result; }; history.replaceState = function(state, title, url) { var result = replaceState.apply(history, arguments); window.dispatchEvent(new Event('replacestate')); window.dispatchEvent(new Event('locationchange')); return result; }; window.addEventListener('popstate', function(event) { window.dispatchEvent(new Event('locationchange')); }); })(window.history); window.addEventListener('locationchange', function() { setTimeout(function() { callback(window.location.pathname); }, 0); }); } createRouteListener(function() { var wrapper = document.querySelector('.game-container-wrapper'); if (wrapper && wrapper.__vue__) { currentRoutingObject = wrapper.__vue__.$router.currentRoute.matched[0].instances.default; } else { console.log('当前路由对象未定义'); } }); function cultivateUntilMax() { currentRoutingObject.startCultivate(); currentRoutingObject.startCultivate(); currentRoutingObject.startCultivate(); if(document.body.innerText.includes("当前境界修为已满")) { if (currentRoutingObject.stopCultivate) { currentRoutingObject.stopCultivate(); clearAllIntervals(); } clickButtonAndWaitForDOMUpdate("返回家里", () => { cultivateExplore(); }); } } function cultivateExplore() { clickButton("探索秘境"); function checkFightStatus() { if (document.body.innerText.includes("恭喜你突破了")) { clearAllIntervals(); document.querySelector('.game-container-wrapper').__vue__.$router.push('/') setTimeout(() => { clickButtonAndWaitForDOMUpdate("开始修炼", () => { intervalId1 = setInterval(() => { cultivateUntilMax(); }, 1000); }, 500)}); return; } if (document.body.innerText.includes("被击败")) { clickButtonAndWaitForDOMUpdate("回家疗伤", () => { clearInterval(fightIntervalId); clearInterval(automaticSaleOfEquipmentId); cultivateExplore(); }); } else if (document.body.innerText.includes("你击败")||document.body.innerText.includes("你输了")) { clickButton("继续探索"); } else { if (currentRoutingObject.startFight) { currentRoutingObject.startFight(); } } } automaticSaleOfEquipmentId = setInterval(() => { myAutoSellEquipment(); }, 5000); fightIntervalId = setInterval(checkFightStatus, 100); } function myAutoSellEquipment() { const inventory = myPlayer.inventory; const sellingEquipmen = myPlayer.sellingEquipmentData; const selling = inventory.filter(item => sellingEquipmen.includes(item.quality) && !item.lock); if (!selling.length) { return; } const strengtheningStoneTotal = selling.reduce((total, i) => { let level = i.level + i.level * myPlayer.reincarnation / 10; level = Number(level) || 0; return total + Math.floor(level); }, 0); myPlayer.strengtheningStone += strengtheningStoneTotal; myPlayer.inventory = inventory.filter(item => !sellingEquipmen.includes(item.quality) || item.lock); document.querySelector('.game-container-wrapper').__vue__.$store.commit('setPlayer', myPlayer); myTips({ title: '背包装备出售提示', message: `背包内所有非锁定装备已成功出售, 你获得了${strengtheningStoneTotal}个炼器石` }); } function autoExplore() { function fightLoop() { if(myPlayer.level===40 && boosStart === true) { clickButton("世界BOSS"); boosIntervalId = setInterval(fightBossAndCheck, 100); waitForIntervalToFinish(); return; } clickButton("探索秘境"); function checkFightStatus() { if (document.body.innerText.includes("被击败")) { clickButton("回家疗伤"); clearInterval(fightIntervalId); if (!restartIntervalId) { restartIntervalId = setInterval(() => { fightLoop(); clearInterval(restartIntervalId); restartIntervalId = null; }, 500); } } else if (document.body.innerText.includes("你击败")|| document.body.innerText.includes("你输了")) { clickButton("继续探索"); } else { currentRoutingObject.startFight(); } } automaticSaleOfEquipmentId = setInterval(() => { myAutoSellEquipment(); }, 5000); fightIntervalId = setInterval(checkFightStatus, 10); } fightLoop(); } function waitForIntervalToFinish() { const checkInterval = setInterval(() => { if (boosStart === false) { clearInterval(checkInterval); autoExplore(); } }, 100); } function fightBossAndCheck() { currentRoutingObject.fightBoss(); let pageText = document.body.innerText; if (pageText.includes("太弱被击败了") || pageText.includes("你击败") ) { clickButton("回家疗伤"); clearInterval(boosIntervalId); if (boosStart === true) { boosStart = false; } } } function autoPet() { if (myPlayer.health === 0) { document.querySelector('.game-container-wrapper').__vue__.$router.push('/'); return; } clickButton("探索秘境") clickButton("收服对方") const failText = document.body.innerText.includes("失败"); if (failText) { clickButton("发起战斗") } const successText = document.body.innerText.includes("成功"); if (successText) { clickButton("继续探索") } const defeatText = document.body.innerText.includes("击败"); if (defeatText) { clickButton("继续探索") } } function startAutoPet() { intervalId3 = setInterval(autoPet, 100); } function initializeButtons() { var gameContainer = document.querySelector('.game-container'); if (gameContainer) { gameContainer.style.position = "relative"; var buttonContainer = document.createElement("div"); buttonContainer.style.position = "absolute"; buttonContainer.style.top = "0px"; buttonContainer.style.left = "50%"; buttonContainer.style.transform = "translateX(-50%)"; buttonContainer.style.display = "flex"; buttonContainer.style.gap = "10px"; buttonContainer.style.zIndex = "99999"; buttonContainer.style.borderRadius = "10px"; var button1 = document.createElement("button"); button1.innerHTML = "修炼"; styleButton(button1); button1.onclick = function () { if (intervalId1 === null) { if (myPlayer.level === 40) { myTips({title:'修炼提示',message:"已经修炼到最高级,无法继续自动修炼!"}); return; } clickButton("开始修炼"); button1.innerHTML = "🟥修炼"; disableOtherButtons(button2); disableOtherButtons(button3); disableOtherButtons(button4); console.log("自动修炼功能正在运行"); myTips({title:'修炼提示',message:"自动修炼过程中会自动出售装备,请调整出售装备设置!"}); intervalId1 = setInterval(() => { cultivateUntilMax(); }, 100); } else { intervalId1 = null; clearAllIntervals(); button1.innerHTML = "修炼"; enableAllButtons(button2); enableAllButtons(button3); enableAllButtons(button4); console.log("自动修炼功能已停止"); } }; var button2 = document.createElement("button"); button2.innerHTML = "探索"; styleButton(button2); button2.onclick = function () { if (intervalId2 === null) { intervalId2 = true; myTips({title:'探索提示',message:"自动探索将自动出售装备,请调整出售装备设置!"}); currentRoutingObject.sellingEquipmentShow=true; const checkPopupInterval = setInterval(() => { if (!currentRoutingObject.sellingEquipmentShow) { button2.innerHTML = "🟥探索"; disableOtherButtons(button1); disableOtherButtons(button3); disableOtherButtons(button4); console.log("自动探索功能正在运行"); autoExplore(); clearInterval(checkPopupInterval); } }, 100); } else { intervalId2 = null; clearAllIntervals(); button2.innerHTML = "探索"; document.querySelector('.game-container-wrapper').__vue__.$router.push('/') enableAllButtons(button1); enableAllButtons(button3); enableAllButtons(button4); console.log("自动探索功能已停止"); } }; var button3 = document.createElement("button"); button3.innerHTML = "收宠"; styleButton(button3); button3.onclick = function () { if (intervalId3 === null) { myTips({title:'收宠提示',message:"自动收宠将自动出售装备,请调整出售装备设置!"}); currentRoutingObject.sellingEquipmentShow=true; const checkPopupInterval = setInterval(() => { if (!currentRoutingObject.sellingEquipmentShow) { button3.innerHTML = "🟥收宠"; disableOtherButtons(button1); disableOtherButtons(button2); disableOtherButtons(button4); console.log("自动收宠功能正在运行"); startAutoPet(); clearInterval(checkPopupInterval); } }, 100); } else { clearAllIntervals(); intervalId3 = null; button3.innerHTML = "收宠"; enableAllButtons(button1); enableAllButtons(button2); enableAllButtons(button4); console.log("自动收宠功能已停止"); } } var button4 = document.createElement("button"); button4.innerHTML = "放宠"; styleButton(button4); button4.onclick = function () { let confirmRelease = confirm("确定要放生所有未出战灵宠吗?"); if (confirmRelease) { myPlayer.pets = []; document.querySelector('.game-container-wrapper').__vue__.$store.commit('setPlayer', myPlayer); myTips({title:'放宠提示',message:"已成功放生所有未出战灵宠!"}); return; } } buttonContainer.appendChild(button1); buttonContainer.appendChild(button2); buttonContainer.appendChild(button3); buttonContainer.appendChild(button4); gameContainer.appendChild(buttonContainer); myTips({title:'脚本初始化',message:"脚本初始化成功!",type:"success"}); } else { myTips({title:'脚本初始化',message:"脚本初始化失败,请刷新页面后重试!",type:"error"}); } } function styleButton(button) { button.style.padding = "5px 10px"; button.style.border = "none"; button.style.borderRadius = "5px"; button.style.backgroundColor = "#007bff"; button.style.color = "white"; button.style.fontSize = "16px"; button.style.cursor = "pointer"; button.style.transition = "background-color 0.3s, transform 0.3s"; button.onmouseover = function() { if (!button.disabled) { button.style.backgroundColor = "#0056b3"; button.style.transform = "scale(1.05)"; } }; button.onmouseout = function() { if (!button.disabled) { button.style.backgroundColor = "#007bff"; button.style.transform = "scale(1)"; } }; button.onmousedown = function() { if (!button.disabled) { button.style.backgroundColor = "#004494"; } }; button.onmouseup = function() { if (!button.disabled) { button.style.backgroundColor = "#0056b3"; } }; } function disableOtherButtons(activeButton) { activeButton.disabled = true; activeButton.style.backgroundColor = "darkgray"; activeButton.style.cursor = "not-allowed"; } function enableAllButtons(activeButton) { activeButton.disabled = false; activeButton.style.backgroundColor = "#007bff"; activeButton.style.cursor = "pointer"; } initializeButtons();