您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds customizable keybinds for panel switching and casting spells in combat.
// ==UserScript== // @name IdlePixel Keybinds // @namespace com.anwinity.idlepixel // @version 1.0.0 // @description Adds customizable keybinds for panel switching and casting spells in combat. // @author Anwinity // @license MIT // @match *://idle-pixel.com/login/play* // @grant none // @require https://greasyfork.org/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905 // ==/UserScript== (function() { 'use strict'; const SPELL_DEFAULTS = { heal: "h", fire: "f", reflect: "r", invisibility: "i" }; const SPELLS = Object.keys(Magic.spell_info); const PANELS = ["keyitems", "mining", "crafting", "gathering", "farming", "brewing", "woodcutting", "cooking", "fishing", "combat", "combat-canvas", "quests", "settings", "shop", "player-market", "donor-shop", "achievements", "idlepixelplus"]; let SPELL_MAPPING = {}; let PANEL_MAPPING = {}; class KeyBindPlugin extends IdlePixelPlusPlugin { constructor() { super("keybinds", { about: { name: GM_info.script.name, version: GM_info.script.version, author: GM_info.script.author, description: GM_info.script.description + `<br />In general, lowercase letters map to their respective keys. For other keys, check out <a href="https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_key_values">this page</a>. Note that this does NOT use KeyboardEvent.keyCode, it uses KeyboardEvent.key.` }, config: [ { label: "Combat Spells", type: "label" }, ... SPELLS.map(spell => { return { id: spell, label: spell, type: "string", default: SPELL_DEFAULTS[spell]||"" } }), { label: "Panel Switching", type: "label" }, ...PANELS.map(panel => { return { id: panel, label: panel, type: "string", default: "" } }) ] }); } onConfigsChanged() { SPELL_MAPPING = {}; PANEL_MAPPING = {}; SPELLS.forEach(spell => { let key = this.getConfig(spell); if(key) { SPELL_MAPPING[key] = spell; } }); PANELS.forEach(panel => { let key = this.getConfig(panel); if(key) { PANEL_MAPPING[key] = panel; } }); } handleKeyEvent(event) { if(event.key in SPELL_MAPPING) { if(Globals.currentPanel == "panel-combat-canvas") { const spell = SPELL_MAPPING[event.key]; IdlePixelPlus.sendMessage(`SPELL=${spell}`); } } if(event.key in PANEL_MAPPING) { const focused = document.activeElement; if(!focused || !["INPUT", "SELECT"].includes((focused.tagName||"").toUpperCase())) { const panel = PANEL_MAPPING[event.key]; if(panel == "combat-canvas") { if(Combat.in_combat()) { IdlePixelPlus.setPanel(panel); } } else { IdlePixelPlus.setPanel(panel); } } } } onLogin() { const self = this; document.addEventListener("keyup", e => { this.handleKeyEvent(e); }); this.onConfigsChanged(); } } const plugin = new KeyBindPlugin(); IdlePixelPlus.registerPlugin(plugin); })();