您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds an option to export the sprites of items you right-click on.
// ==UserScript== // @name Item Exporter // @namespace http://tampermonkey.net/ // @version 1 // @description Adds an option to export the sprites of items you right-click on. // @author Zoltar // @match http://manyland.com/* // @icon https://cdn.discordapp.com/icons/852442189283983380/a_70793eeb1f509f9c4aa1021e5691fab4.webp // ==/UserScript== (function () { 'use strict'; // took this part from Eternity's mod function loadObf() { if (typeof Deobfuscator === 'undefined') return $.getScript("https://cdn.jsdelivr.net/gh/parseml/many-deobf@latest/deobf.js") } async function main() { ig.game.itemContextMenu.old_draw = ig.game.itemContextMenu.draw; let image = new Image(); image.src = 'https://cdn.discordapp.com/attachments/614637022614782000/867213341953097769/arrow.png' image.onclick = () => consoleref.log('test') // Thank you Stackoverflow! function toDataURL(url) { return fetch(url).then((response) => { return response.blob(); }).then(blob => { return URL.createObjectURL(blob); }); } async function exportSprite(item) { ig.game.sounds.click.play(); const a = document.createElement("a"); a.href = await toDataURL(`${item.imageURL}.png`); a.download = `${item.name}.png`; document.body.appendChild(a); window.removeEventListener('click', clickArrow) a.click(); document.body.removeChild(a); window.addEventListener('click', clickArrow) } function clickArrow(event) { if (ig.game.itemContextMenu.isOpen) { let selected = Deobfuscator.object(ig.game.itemContextMenu, 'thing'); let spot = { x1: (ig.game.itemContextMenu.pos.x + 102) * ig.system.scale, y1: (ig.game.itemContextMenu.pos.y + 14) * ig.system.scale, x2: ((ig.game.itemContextMenu.pos.x + 102) * ig.system.scale) + (11 * ig.system.scale), y2: ((ig.game.itemContextMenu.pos.y + 14) * ig.system.scale) + (9 * ig.system.scale), call: () => { exportSprite(selected.thing); } } let clickPos = { x: ig.input.mouse.x * ig.system.scale, y: ig.input.mouse.y * ig.system.scale } if (clickPos.x > spot.x1 && clickPos.x < spot.x2 && clickPos.y > spot.y1 && clickPos.y < spot.y2) { spot.call(); } } } window.addEventListener('click', clickArrow) ig.game.itemContextMenu.draw = () => { ig.game.itemContextMenu.old_draw(); if (ig.game.itemContextMenu.isOpen) { ig.system.context.globalAlpha = 0.4; ig.system.context.drawImage(image, (ig.game.itemContextMenu.pos.x + 102) * ig.system.scale, (ig.game.itemContextMenu.pos.y + 14) * ig.system.scale, (11 * ig.system.scale), (9 * ig.system.scale)); ig.system.context.globalAlpha = 1; } } } // Parses smooth loader !async function loader() { let loading = setInterval(async function () { if (typeof ig === "undefined") return else if (typeof ig.game === "undefined") return else if (typeof ig.game.screen === "undefined") return else if (ig.game.screen.x == 0) return else if (typeof Settings !== "function") return clearInterval(loading); await loadObf(); main(); }, 250) }() })();