您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
新しい放置ゲームで注意した方がいい情報を表示します
// ==UserScript== // @name 新しい放置ゲームで注意した方がいい情報を表示する // @namespace http://tampermonkey.net/ // @version 0.1.2 // @description 新しい放置ゲームで注意した方がいい情報を表示します // @author toomer // @match https://dem08656775.github.io/newincrementalgame* // @grant none // ==/UserScript== // jshint esversion: 6 (() => { 'use strict'; const D = (value) => new Decimal(value); const ctx = document.getElementById('app').__vue_app__._instance.ctx; function isChallengeActive(index) { return ctx.player.onchallenge && ctx.player.challenges.includes(index); } function isChallengeBonusActive(index) { return ctx.player.challengebonuses.includes(4) || !ctx.player.onchallenge ? ctx.player.challengebonuses.includes(index) : false; } function isRankChallengeBonusActive(index) { return ctx.player.rankchallengebonuses.includes(index); } function isGeneratorBuyable(index) { if (isChallengeActive(6)) if (index == 3 || index == 7) return false; return ctx.player.money.gte(ctx.player.generatorsCost[index]); } function isAcceleratorOpened(index) { if (index >= 1 && ctx.player.levelresettime.lte(0)) return false; if (index >= 2 && ctx.player.levelitems[3] + 1 < index) return false; return true; } function isAcceleratorBuyable(index) { if (isChallengeActive(5)) return false; if (!isAcceleratorOpened(index)) return false; return ctx.player.money.gte(ctx.player.acceleratorsCost[index]); } function isDarkGeneratorBuyable(index) { return ctx.player.money.gte(ctx.player.darkgeneratorsCost[index]); } const base_style = ` .nigi-tooltip { position: relative; padding: 1px 3px; font-size: 20px; } .nigi-tooltip:hover:after { content: attr(tooltip-msg); position: absolute; z-index: 1; background-color: black; color: white; text-align: center; white-space: nowrap; padding: 5px 5px; border-radius: 6px; }`; document.getElementsByTagName('head')[0].insertAdjacentHTML('afterbegin', `<style type="text/css" id="nigi-style">${base_style}</style>`); document.getElementsByTagName('body')[0].insertAdjacentHTML('afterbegin', '<div id="nigi-header"></div>'); const header = document.getElementById('nigi-header'); const style = document.getElementById('nigi-style'); let prev_exported_time = Date.now(); let prev_exported = ''; const checkMarkStyle = (id, content) => { return ` #${id} button { position: relative; } #${id} button::before { content: ''; display: block; position: absolute; top: .5em; left: 1.5em; width: 15px; height: 5px; border-left: 2px solid #25AF01; border-bottom: 2px solid #25AF01; transform: rotate(-45deg); } #${id} button:hover:after { content: '${content}'; position: absolute; z-index: 1; font-size: 16px; background-color: black; color: white; text-align: center; white-space: nowrap; padding: 5px 5px; border-radius: 6px; }`; }; const update = () => { let contents = ''; let stylestr = base_style; const buyableGenerators = [...Array(8)].map((_, i) => i).filter(i => isGeneratorBuyable(i)); if (buyableGenerators.length > 0) { contents += `<span class="nigi-tooltip" tooltip-msg="発生器を購入可能">発${buyableGenerators.reduce((s, i) => s + (i + 1), '')}</span>`; } const buyableAccelerators = [...Array(8)].map((_, i) => i).filter(i => isAcceleratorBuyable(i)); if (buyableAccelerators.length > 0) { contents += `<span class="nigi-tooltip" tooltip-msg="時間加速器を購入可能">時${buyableAccelerators.reduce((s, i) => s + (i + 1), '')}</span>`; } const buyableDarkGenerators = [...Array(8)].map((_, i) => i).filter(i => isDarkGeneratorBuyable(i)); if (buyableDarkGenerators.length > 0) { contents += `<span class="nigi-tooltip" tooltip-msg="裏発生器を購入可能">裏${buyableDarkGenerators.reduce((s, i) => s + (i + 1), '')}</span>`; } if (ctx.player.generatorsMode.some((m, i) => m != i)) { if (!isChallengeActive(3) && !isChallengeBonusActive(13)) contents += `<span class="nigi-tooltip" tooltip-msg="発生器のモードが最大でない">モ</span>`; } const challengeid = ctx.calcchallengeid(); if (ctx.player.onchallenge) { if (ctx.player.challengecleared.includes(challengeid)) { stylestr += checkMarkStyle('levelreset', '挑戦達成済です'); } else { contents += `<span class="nigi-tooltip" tooltip-msg="挑戦未達成">段</span>`; } if (ctx.player.challengecleared.length >= 128) if (ctx.player.rankchallengecleared.includes(challengeid)) { stylestr += checkMarkStyle('rankreset', '階位挑戦達成済です'); } else { contents += `<span class="nigi-tooltip" tooltip-msg="階位挑戦未達成">階</span>`; } if (ctx.player.challengecleared.length >= 9 && !ctx.player.challengebonuses.includes(4)) contents += `<span class="nigi-tooltip" tooltip-msg="挑戦中にもかかわらず効力5が有効でない">効5</span>`; } else if (challengeid > 0) { let message = ''; if (!ctx.player.challengecleared.includes(challengeid)) message += `挑戦`; if (ctx.player.challengecleared.length >= 128 && !ctx.player.rankchallengecleared.includes(challengeid)) message += (message === '' ? '' : '・') + `階位挑戦`; if (message !== '') contents += `<span class="nigi-tooltip" tooltip-msg="選択中の${message}未達成">挑</span>`; } if (ctx.player.shine > 0 && ctx.player.shine >= ctx.shinedata.getmaxshine(ctx.player.challengecleared.length)) contents += `<span class="nigi-tooltip" tooltip-msg="輝きが満タンです">輝</span>`; if (ctx.player.brightness > 0 && ctx.player.brightness >= ctx.shinedata.getmaxbr(ctx.player.rankchallengecleared.length)) contents += `<span class="nigi-tooltip" tooltip-msg="煌きが満タンです">煌</span>`; if (ctx.exported != prev_exported) { prev_exported = JSON.parse(JSON.stringify(ctx.exported)); prev_exported_time = Date.now(); } if (Date.now() - prev_exported_time >= 3600 * 1000 * 6 || ctx.exported == '' && Date.now() - prev_exported_time >= 3600 * 1000) contents += `<span class="nigi-tooltip" tooltip-msg="長時間データ吐き出しされていない">バ</span>`; if (style.innerHTML != stylestr) style.innerHTML = stylestr; if (header.innerHTML != contents) header.innerHTML = contents; setTimeout(update, 300); }; update(); })();