您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
ant sac logger for synergism
// ==UserScript== // @name ant sac logger // @namespace http://tampermonkey.net/ // @version 0.5 // @description ant sac logger for synergism // @author Kewne // @match https://v1011testing.vercel.app/ // @include https://game320578.konggames.com/gamez/0032/0578/live/* // @include https://v1011testing.vercel.app/ // @include https://pseudonian.github.io/SynergismOfficial/* // @connect https://www.kongregate.com/games/Platonic/synergism/* // @connect https://game320578.konggames.com/gamez/0032/0578/live/* // @connect https://pseudonian.github.io/SynergismOfficial/* // @grant none // ==/UserScript== (function () { let scriptData = { lastSacs: [] }; window.userjsLoggingThingy = scriptData; let hook = (name, pre, post) => { let original = window[name]; window[name] = (...args) => { if (pre) { pre(...args); } let ret = original.apply(this, args); if (post) { post(ret, ...args); } return ret; }; }; // from ants.js let antPointsToMulti = (points) => Math.pow(1 + points / 5000, 2); let logging = { button: null, display: null, visible: () => logging.display.style.display !== "none", clicked: () => { if (logging.visible()) { logging.hide(); } else { logging.refresh(); logging.show(); } }, refresh: () => { let tbody = logging.display.querySelector("tbody"); tbody.innerHTML = ""; for (let i = scriptData.lastSacs.length - 1; i >= 0; i--) { let data = scriptData.lastSacs[i]; let gainedMulti = window.format(antPointsToMulti(data.pointsAfter) - antPointsToMulti(data.pointsBefore), 3, false); let gainedMultiRelative = window.format(antPointsToMulti(data.pointsAfter) / antPointsToMulti(data.pointsBefore), 3, false) let rowHtml = ` <td><img src="Pictures/Offering Upgrade.png" alt=""> ${data.date.toLocaleTimeString()} [${data.timeTaken}]</td> <td><img src="Pictures/AntSacrifice.png" alt=""> ${data.antMultiplier} [+${gainedMulti}, x${gainedMultiRelative}]</td> <td title="${data.totalOfferings} total"><img src="Pictures/Offering.png" alt=""> ${data.offerings}</td> <td title="${data.totalObtainium} total"><img src="Pictures/Obtainium.png" alt=""> ${data.obtainium}</td> <td>${data.crumbs} [+${data.crumbSpeed}/s]</td> <td>${data.elo} ${data.effectiveElo}</td> `; let tr = document.createElement('tr'); tr.innerHTML = rowHtml; tbody.appendChild(tr); } }, show: () => logging.display.style.display = "block", hide: () => logging.display.style.display = "none" }; scriptData.logging = logging; logging.button = document.createElement("button"); logging.button.id = "userjs-loggingThingy-logbutton"; logging.button.innerText = "Log"; logging.button.addEventListener("click", logging.clicked); document.body.appendChild(logging.button); logging.display = document.createElement("div"); logging.display.id = "userjs-loggingThingy-logdisplay"; logging.display.style.display = "none"; logging.display.innerHTML = "<table><thead><tr><th>When</th><th>Multi</th><th>Off</th><th>Obt</th><th>Crumbs</th><th>ELO</th></tr></thead><tbody></tbody></table>"; document.body.appendChild(logging.display); // Add our stylesheet logging.css = document.createElement("style"); logging.css.textContent = ` #userjs-loggingThingy-logbutton { position: absolute; left: 660px; top: 55px; border: 1px solid hotpink; font-size: 16px; cursor: pointer; z-index: 999; } #userjs-loggingThingy-logdisplay { position: absolute; width: 1200px; top: 170px; left: 50px; background: #121212; color: lightgray; } #userjs-loggingThingy-logdisplay table { width: 100%; } #userjs-loggingThingy-logdisplay table td img { vertical-align: middle; height: 20px; } #userjs-loggingThingy-logdisplay table td[title] { text-decoration: dotted underline 2px; } `; document.head.appendChild(logging.css); // Hook to get data hook("sacrificeAnts", () => { let thisSac = { date: new Date(), pointsBefore: player.antSacrificePoints, timeTaken: document.getElementById('antSacrificeTimer').textContent, antMultiplier: document.getElementById('antSacrificeMultiplier').textContent.replace("Ant Multiplier ", ""), offerings: document.getElementById('antSacrificeOffering').textContent, obtainium: document.getElementById('antSacrificeObtainium').textContent, crumbs: window.format(player.antPoints, 2), crumbSpeed: window.format(antOneProduce, 3), elo: document.getElementById('ELO').textContent, effectiveElo: document.getElementById('effectiveELO').textContent, }; if (scriptData.lastSacs.length >= 10) { scriptData.lastSacs.shift(); } scriptData.lastSacs.push(thisSac); }, () => { scriptData.lastSacs[scriptData.lastSacs.length - 1].pointsAfter = player.antSacrificePoints; scriptData.lastSacs[scriptData.lastSacs.length - 1].totalOfferings = window.format(player.runeshards); scriptData.lastSacs[scriptData.lastSacs.length - 1].totalObtainium = window.format(player.researchPoints); if (logging.visible()) { logging.refresh(); } }); })();