您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds customizable keybinds for panel switching, casting spells in combat, starting combat in the different areas and more.
// ==UserScript== // @name IdlePixel Keybinds - TheeMarcel Fork // @namespace com.godofnades.idlepixel // @version 1.2.1 // @description Adds customizable keybinds for panel switching, casting spells in combat, starting combat in the different areas and more. // @author Original Author: Anwinity || Modded By: GodofNades/TheeMarcel // @license MIT // @match *://idle-pixel.com/login/play* // @grant none // @require https://gf.qytechs.cn/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905 // ==/UserScript== (function() { 'use strict'; const SPELLS = Object.keys(Magic.spell_info); const PANELS = ["keyitems", "mining", "crafting", "gathering", "farming", "brewing", "woodcutting", "cooking", "fishing", "breeding", "invention", "combat", "combat-canvas", "combat-canvas-raids", "shop", "player-market", "donor-shop", "criptoe-market", "quests", "achievements", "collection-log", "history", "friends", "database", "idlepixelplus", "settings", "events-seed_piles", "events-yeti_boss"]; const COMBAT = ["field", "forest", "cave", "volcano", "northern_field", "mansion", "beach", "blood_field", "blood_forest", "blood_cave", "blood_volcano"]; const POTION = ["combat_loot_potion", "rain_potion", "rare_monster_potion", "super_rare_monster_potion", "magic_shiny_crystal_ball_potion", "magic_crystal_ball_potion", "raids_hp_potion", "raids_mana_potion", "raids_crits_potion"]; const SEED_PILE = ["1", "20", "40", "60", "80", "100", "random", "x2", "x3", "extra_points"]; let SPELL_MAPPING = {}; let PANEL_MAPPING = {}; let COMBAT_MAPPING = {}; let POTION_MAPPING = {}; let SEED_PILE_MAPPING = {}; class KeyBindPlugin extends IdlePixelPlusPlugin { constructor() { super("keybinds", { about: { name: GM_info.script.name + " (ver: " + GM_info.script.version + ")", 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 Areas", type: "label" }, ... COMBAT.map(combat => { return { id: combat, label: combat, type: "string", default: "" } }), { label: "Combat Spells", type: "label" }, ... SPELLS.map(spell => { return { id: spell, label: spell, type: "string", default: "" } }),{ label: "Potions", type: "label" }, ... POTION.map(potion => { return { id: potion, label: potion, type: "string", default: "" } }), { id: "selectMonster", label: "Monster for Select Potion (Direct Trigger)", type: "select", default: "default", options: [ {value: "default", label: "Select Monster"}, {value: "chicken", label: "Chicken (Fields)"}, {value: "rat", label: "Rat (Fields)"}, {value: "spider", label: "Spider (Fields)"}, {value: "bee", label: "Bee (Fields)"}, {value: "lizard", label: "Lizard (Fields)"}, {value: "snake", label: "Snake (Forest)"}, {value: "ants", label: "Ants (Forest)"}, {value: "wolf", label: "Wolf (Forest)"}, {value: "thief", label: "Thief (Forest)"}, {value: "forest_ent", label: "Forest Ent (Forest)"}, {value: "bear", label: "Bear (Cave)"}, {value: "goblin", label: "Goblin (Cave)"}, {value: "bat", label: "Bat (Cave)"}, {value: "skeleton", label: "Skeleton (Cave)"}, {value: "fire_hawk", label: "Fire Hawk (Volcano)"}, {value: "fire_snake", label: "Fire Snake (Volcano)"}, {value: "fire_golem", label: "Fire Golem (Volcano)"}, {value: "fire_witch", label: "Fire Witch (Volcano)"} ] }, { id: "selectPlusMonster", label: "Monster for Select Plus Potion (Direct Trigger)", type: "select", default: "default", options: [ {value: "default", label: "Select Monster"}, {value: "ice_hawk", label: "Ice Hawk (Northern Fields)"}, {value: "ice_golem", label: "Ice Golem (Northern Fields)"}, {value: "ice_witch", label: "Ice Witch (Northern Fields)"}, {value: "yeti", label: "Yeti (Northern Fields)"}, {value: "ghost", label: "Ghost (Haunted Mansion)"}, {value: "grandma", label: "Grandma (Haunted Mansion)"}, {value: "exorcist", label: "Exorcist (Haunted Mansion)"}, {value: "reaper", label: "Reaper (Haunted Mansion)"}, {value: "shark", label: "Shark (Beach)"}, {value: "sea_soldier", label: "Shark (Beach)"}, {value: "puffer_fish", label: "Puffer Fish (Beach)"}, {value: "saltwater_crocodile", label: "Crocodile (Beach)"} ] }, { label: "Panel Switching", type: "label" }, ... PANELS.map(panel => { return { id: panel, label: panel, type: "string", default: "" } }), { label: "Seed Pile", type: "label" }, ... SEED_PILE.map(seed_pile => { return { id: seed_pile, label: seed_pile, type: "string", default: "" } }) ] }); } onConfigsChanged() { SPELL_MAPPING = {}; PANEL_MAPPING = {}; COMBAT_MAPPING = {}; POTION_MAPPING = {}; SEED_PILE_MAPPING = {}; COMBAT.forEach(combat => { let key = this.getConfig(combat); if(key) { COMBAT_MAPPING[key] = combat; } }); SPELLS.forEach(spell => { let key = this.getConfig(spell); if(key) { SPELL_MAPPING[key] = spell; } }); POTION.forEach(potion => { let key = this.getConfig(potion); if(key) { POTION_MAPPING[key] = potion; } }); PANELS.forEach(panel => { let key = this.getConfig(panel); if(key) { PANEL_MAPPING[key] = panel; } }); SEED_PILE.forEach(seed_pile => { let key = this.getConfig(seed_pile); if(key) { SEED_PILE_MAPPING[key] = seed_pile; } }); } handleKeyEvent(event) { if(event.key in COMBAT_MAPPING) { var chat_focused_combat = $('#chat-area-input').is(':focus'); if(!chat_focused_combat) { if(Globals.currentPanel == "panel-combat") { const combat = COMBAT_MAPPING[event.key]; Combat.quickFight(combat); event.stopPropagation(); } } } if(event.key in SPELL_MAPPING) { var chat_focused_spell = $('#chat-area-input').is(':focus'); if(!chat_focused_spell) { const spell = SPELL_MAPPING[event.key]; if(Globals.currentPanel == "panel-combat-canvas") { IdlePixelPlus.sendMessage(`SPELL=${spell}`); }else if(Globals.currentPanel == "panel-combat-canvas-raids") { IdlePixelPlus.sendMessage(`CAST_RAID_SPELL=${spell}`); }else if (Globals.currentPanel == "panel-events-yeti_boss") { if (spell == "heal" || spell == "fire") { IdlePixelPlus.sendMessage(`EVENT_INPUT=YETI_BOSS~${spell}`); } } } } if(event.key in POTION_MAPPING) { var chat_focused_potion = $('#chat-area-input').is(':focus'); if(!chat_focused_potion) { if(Globals.currentPanel == "panel-combat-canvas" && ["combat_loot_potion", "rain_potion", "magic_shiny_crystal_ball_potion", "magic_crystal_ball_potion"].includes(POTION_MAPPING[event.key])) { const potion = POTION_MAPPING[event.key]; if(potion == "combat_loot_potion") { websocket.send('BREWING_DRINK_COMBAT_LOOT_POTION'); } else { websocket.send(`DRINK=${potion}`); } } else if(Globals.currentPanel == "panel-combat-canvas-raids" && ["raids_hp_potion", "raids_mana_potion", "raids_crits_potion"].includes(POTION_MAPPING[event.key])) { const potion = POTION_MAPPING[event.key]; Raids.drinkPotion(potion); } else if(Globals.currentPanel == "panel-combat" && POTION_MAPPING[event.key] == "rare_monster_potion") { var monsterSelect = this.getConfig("selectMonster"); if(monsterSelect != "default") { websocket.send('DRINK_SELECT_POTION=' + monsterSelect) } else { Modals.clicks_rare_monster_potion(); } } else if(Globals.currentPanel == "panel-combat" && POTION_MAPPING[event.key] == "super_rare_monster_potion") { var monsterSelectPlus = this.getConfig("selectPlusMonster"); if(monsterSelectPlus != "default") { websocket.send('DRINK_SUPER_SELECT_POTION=' + monsterSelectPlus); } else { Modals.clicks_super_rare_monster_potion(); } } } } if(event.key in PANEL_MAPPING) { var chat_focused_panel = $('#chat-area-input').is(':focus'); if(!chat_focused_panel) { const panel = PANEL_MAPPING[event.key]; const in_raid = IdlePixelPlus.getVarOrDefault("in_raids", 0, "int"); if(panel == "combat-canvas" && Combat.in_combat()) { IdlePixelPlus.setPanel(panel); } else if(panel == "combat-canvas-raids" && in_raid) { IdlePixelPlus.setPanel(panel) } else { IdlePixelPlus.setPanel(panel); } } } if(event.key in SEED_PILE_MAPPING) { var chat_focused_seed_pile = $('#chat-area-input').is(':focus'); if(!chat_focused_seed_pile) { const pile = SEED_PILE_MAPPING[event.key]; if (Globals.currentPanel == "panel-events-seed_piles") { if (["1", "20", "40", "60", "80", "100"].includes(pile)) { websocket.send(`EVENT_INPUT=seed_piles~${pile}`); } else if(["random", "extra_points"].includes(pile)) { const visibility_number = [...document.getElementsByClassName(`event-entry-${pile.replace("_","-")}`)] .map(function(e){return e.checkVisibility()}) .reduce((a, b) => a + b, 0); if (visibility_number) { websocket.send(`EVENT_INPUT=seed_piles~${pile}`); } } else { const visibility_number = document.getElementById(`event-seed-piles-img-points-${pile}`) .checkVisibility(); if (visibility_number) { websocket.send(`EVENT_INPUT=seed_piles~${pile}`); } } } } } } onLogin() { const self = this; document.addEventListener("keyup", e => { this.handleKeyEvent(e); }); this.onConfigsChanged(); } } const plugin = new KeyBindPlugin(); IdlePixelPlus.registerPlugin(plugin); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址