- // ==UserScript==
- // @name IdlePixel+ Teams QoL
- // @namespace com.zlef.idlepixel
- // @version 2.1.1
- // @description Various teams quality of life additions, quick deposit/withdraw fight points, better interface when clicking on stored items, storage organisation
- // @author Zlef
- // @license MIT
- // @match *://idle-pixel.com/login/play*
- // @grant none
- // @icon https://cdn.idle-pixel.com/images/teams_sigil.png
- // @require https://greasyfork.org/scripts/441206-idlepixel/code/IdlePixel+.js?anticache=20220905
- // @require https://update.greasyfork.org/scripts/484046/1307183/IdlePixel%2B%20Custom%20Handling.js
- // ==/UserScript==
-
- (function() {
- 'use strict';
-
- class TeamsQoL extends IdlePixelPlusPlugin {
- constructor() {
- super("teamsqol", {
- about: {
- name: GM_info.script.name,
- version: GM_info.script.version,
- author: GM_info.script.author,
- description: GM_info.script.description
- },
- });
- this.queue = [];
- this.processingQueue = false;
-
- this.settings = {
- fight_points_buffer: -10,
- show_fight_points_buttons: true,
- show_energy_buttons: false,
- show_quick_deposit_all_button: false,
- include_equipped_gear_in_quick_deposit: false,
- quick_deposit_visibility: {
- 'quick_deposit_ores': true,
- 'quick_deposit_bars': true,
- 'quick_deposit_seeds': true,
- 'quick_deposit_brewing_ingredients': true,
- 'quick_deposit_logs': true,
- 'quick_deposit_raw': true,
- 'quick_deposit_cooked': true,
- 'quick_deposit_cooking': true,
- 'quick_deposit_combat': true
- },
- quick_deposit_ores: {
- 'stone': true, 'copper': true, 'iron': true, 'silver': true, 'gold': true,
- 'promethium': true, 'titanium': true, 'ancient_ore': true, 'dragon_ore': true,
- 'sapphire': false, 'emerald': false, 'ruby': false, 'diamond': false,
- 'blue_marble_mineral': true, 'amethyst_mineral': true, 'sea_crystal_mineral': true,
- 'dense_marble_mineral': true, 'fluorite_mineral': true, 'clear_marble_mineral': true,
- 'jade_mineral': true, 'lime_quartz_mineral': true, 'opal_mineral': true,
- 'purple_quartz_mineral': true, 'amber_mineral': true, 'smooth_pearl_mineral': true,
- 'sulfer_mineral': true, 'topaz_mineral': true, 'tanzanite_mineral': true,
- 'magnesium_mineral': true, 'frozen_mineral': true, 'blood_crystal_mineral': true
- },
- quick_deposit_bars: {
- 'bronze_bar': true, 'iron_bar': true, 'silver_bar': true, 'gold_bar': true,
- 'promethium_bar': true, 'titanium_bar': true, 'ancient_bar': true, 'dragon_bar': true,
- 'charcoal': false, 'lava': false, 'plasma': false,
- },
- quick_deposit_seeds: {
- 'dotted_green_leaf_seeds': true, 'green_leaf_seeds': true, 'lime_leaf_seeds': true,
- 'gold_leaf_seeds': true, 'crystal_leaf_seeds': true, 'red_mushroom_seeds': true,
- 'stardust_seeds': true, 'tree_seeds': true, 'oak_tree_seeds': true, 'willow_tree_seeds': true,
- 'maple_tree_seeds': true, 'stardust_tree_seeds': true, 'pine_tree_seeds': true,
- 'redwood_tree_seeds': true, 'apple_tree_seeds': true, 'banana_tree_seeds': true,
- 'orange_tree_seeds': true, 'palm_tree_seeds': true, 'dragon_fruit_tree_seeds': true,
- 'lava_tree_seeds': true, 'bone_tree_seeds': true, 'strange_tree_seeds': true,
- 'bones': false, 'big_bones': false, 'ashes': false, 'ice_bones': false, 'blood_bones': false
- },
- quick_deposit_brewing_ingredients: {
- 'dotted_green_leaf': true, 'green_leaf': true, 'lime_leaf': true,
- 'gold_leaf': true, 'crystal_leaf': true, 'red_mushroom': true,
- 'strange_leaf': true, 'stranger_leaf': true, 'strangest_leaf': true
- },
- quick_deposit_logs: {
- 'logs': true, 'oak_logs': true, 'willow_logs': true, 'maple_logs': true,
- 'stardust_logs': true, 'pine_logs': true, 'redwood_logs': true, 'dense_logs': true
- },
- quick_deposit_raw: {
- 'raw_chicken': true, 'raw_bird_meat': true, 'raw_meat': true,
- 'raw_shrimp': true, 'raw_anchovy': true, 'raw_sardine': true, 'raw_crab': true,
- 'raw_piranha': true, 'raw_salmon': true, 'raw_trout': true, 'raw_pike': true,
- 'raw_eel': true, 'raw_rainbow_fish': true, 'raw_tuna': true, 'raw_swordfish': true,
- 'raw_manta_raw': true, 'raw_shark': true, 'raw_whale': true,
- 'raw_small_stardust_fish': true, 'raw_medium_stardust_fish': true, 'raw_large_stardust_fish': true,
- 'raw_angler_fish': true, 'bait': false, 'super_bait': false, 'mega_bait': false, 'seaweed': false
- },
- quick_deposit_cooked: {
- 'cooked_chicken': true, 'cooked_bird_meat': true, 'cooked_meat': true, 'honey': true, 'cheese': true,
- 'cooked_shrimp': true, 'cooked_anchovy': true, 'cooked_sardine': true, 'cooked_crab': true, 'cooked_piranha': true,
- 'cooked_salmon': true, 'cooked_trout': true, 'cooked_pike': true, 'cooked_cooked_eel': true, 'cooked_rainbow_fish': true,
- 'cooked_tuna': true, 'cooked_swordfish': true, 'cooked_manta_raw': true, 'cooked_shark': true, 'cooked_whale': true,
- 'cooked_small_stardust_fish': true, 'cooked_medium_stardust_fish': true, 'cooked_large_stardust_fish': true,
- 'cooked_angler_fish': true
- },
- quick_deposit_cooking: {
- 'egg': true, 'flour': true, 'chocolate': true, 'maggots': true, 'apple': true, 'banana': true,
- 'orange': true, 'maple_syrup': true, 'coconut': true, 'dragon_fruit': true, 'potato': true,
- 'carrot': true, 'beet': true, 'broccoli': true,
- 'dotted_salad': false, 'chocolate_cake': false, 'lime_leaf_salad': false, 'golden_apple': false,
- 'banana_jello': false, 'orange_pie': false, 'pancakes': false, 'coconut_stew': false, 'dragon_fruit_salad': false,
- 'potato_shake': false, 'carrot_shake': false, 'beet_shake': false, 'broccoli_shake': false
- },
- quick_deposit_combat: {
- "fighting_dust_potion": false, "feathers": true, "fire_feathers": true, "ice_feathers": true, "ancient_feathers": true,
- "string": true, "poison": true, "ant_needles": true, "molten_glass": true, "lantern": true,
- "flippers": true,"bone_amulet": true,"ashes_amulet": true,"ice_amulet": true,"blood_amulet": false,"amulet_of_healing_rain": true,
- "lizard_skin": true, "bat_skin": true, "bear_fur": true, "reaper_silk": true, "crocodile_hide": true, "frozen_crocodile_hide": false,
- "stinger": true, "iron_dagger": true, "skeleton_sword": true, "club": true, "spiked_club": true, "dense_club": false,
- "spiked_dense_club": false, "scythe": true, "double_scythe": false, "trident": true, "long_trident": false, "rapier": true,
- "gold_rapier": false, "skeleton_shield": true, "stinger_dagger": true, "long_spear": true,
- "long_bow": true, "haunted_bow": true, "balista": false, "toy_slingshot": true,
- "wooden_arrows": true, "fire_arrows": true, "ice_arrows": true, "ancient_arrows": false,
- "lizard_mask": true, "lizard_body": true, "lizard_legs": true, "lizard_gloves": true,"lizard_boots": true,
- "bat_mask": true,"bat_body": true,"bat_legs": true,"bat_gloves": true,"bat_boots": true,
- "bear_mask": true,"bear_body": true,"bear_legs": true,"bear_gloves": true,"bear_boots": true,
- "moonstone_mask": true,"moonstone_body": true,"moonstone_legs": true,"moonstone_gloves": true,"moonstone_boots": true,
- "crocodile_mask": true,"crocodile_body": true,"crocodile_legs": true,"crocodile_gloves": true,"crocodile_boots": true,
- "frozen_crocodile_mask": true,"frozen_crocodile_body": true,"frozen_crocodile_legs": true,"frozen_crocodile_gloves": true,"frozen_crocodile_boots": true,
- "dragon_helmet": false,"dragon_body": false,"dragon_legs": false,"dragon_gloves": false,"dragon_boots": false,
- "undead_staff": false,"undead_hp_staff": false,"undead_mana_staff": false,"undead_defence_staff": false,"undead_full_staff": false
- }
- }
- this.defaultSettings = this.settings
-
- this.quickDepositIcons = {
- quick_deposit_ores: "https://cdn.idle-pixel.com/images/stone.png",
- quick_deposit_bars: "https://cdn.idle-pixel.com/images/bronze_bar.png",
- quick_deposit_seeds: "https://cdn.idle-pixel.com/images/dotted_green_leaf_seeds.png",
- quick_deposit_brewing_ingredients: "https://cdn.idle-pixel.com/images/dotted_green_leaf.png",
- quick_deposit_logs: "https://cdn.idle-pixel.com/images/logs.png",
- quick_deposit_raw: "https://cdn.idle-pixel.com/images/raw_chicken.png",
- quick_deposit_cooked: "https://cdn.idle-pixel.com/images/cooked_chicken.png",
- quick_deposit_cooking: "https://cdn.idle-pixel.com/images/chefs_hat.png",
- quick_deposit_combat: "https://cdn.idle-pixel.com/images/skeleton_sword.png",
- }
-
- this.currentPopup = null;
-
- this.overlay = document.createElement('div');
- this.overlay.id = 'newCardOverlayTeams';
- this.overlay.style.position = 'fixed';
- this.overlay.style.top = '0';
- this.overlay.style.left = '0';
- this.overlay.style.width = '100%';
- this.overlay.style.height = '100%';
- this.overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';
- this.overlay.style.zIndex = '1000';
- this.overlay.style.display = 'flex';
- this.overlay.style.justifyContent = 'center';
- this.overlay.style.alignItems = 'center';
- this.overlay.addEventListener('click', (event) => {
- if (event.target === this.overlay) {
- this.closePopup();
- }
- });
-
- window.addEventListener('resize', this.adjustPopupPosition.bind(this));
-
- this.storable_items = {'coins': 'Special', 'stardust': 'Special', 'fight_points': 'Special', 'energy': 'Special', 'criptoe': 'Special', 'donor_coins': 'Special', 'treasure_chest': 'Special', 'green_treasure_chest': 'Special', 'red_treasure_chest': 'Special', 'blue_pickaxe_orb': 'Special', 'blue_hammer_orb': 'Special', 'blue_woodcutting_orb': 'Special', 'blue_oil_storage_orb': 'Special', 'blue_oil_well_orb': 'Special', 'blue_farming_orb': 'Special', 'green_arrow_orb': 'Special', 'green_boat_orb': 'Special', 'green_bone_orb': 'Special', 'green_charcoal_orb': 'Special', 'green_log_orb': 'Special', 'red_farming_orb': 'Special', 'red_woodcutting_orb': 'Special', 'red_combat_orb': 'Special', 'red_oil_factory_orb': 'Special', 'red_stardust_watch_orb': 'Special', 'stone': 'Mining', 'copper': 'Mining', 'iron': 'Mining', 'silver': 'Mining', 'gold': 'Mining', 'promethium': 'Mining', 'titanium': 'Mining', 'ancient_ore': 'Mining', 'dragon_ore': 'Mining', 'moonstone': 'Mining', 'grey_geode': 'Mining', 'blue_geode': 'Mining', 'green_geode': 'Mining', 'red_geode': 'Mining', 'cyan_geode': 'Mining', 'ancient_geode': 'Mining', 'blue_marble_mineral': 'Mining', 'amethyst_mineral': 'Mining', 'sea_crystal_mineral': 'Mining', 'dense_marble_mineral': 'Mining', 'fluorite_mineral': 'Mining', 'clear_marble_mineral': 'Mining', 'jade_mineral': 'Mining', 'lime_quartz_mineral': 'Mining', 'opal_mineral': 'Mining', 'purple_quartz_mineral': 'Mining', 'amber_mineral': 'Mining', 'smooth_pearl_mineral': 'Mining', 'sulfer_mineral': 'Mining', 'topaz_mineral': 'Mining', 'tanzanite_mineral': 'Mining', 'magnesium_mineral': 'Mining', 'frozen_mineral': 'Mining', 'blood_crystal_mineral': 'Mining', 'sapphire': 'Mining', 'emerald': 'Mining', 'ruby': 'Mining', 'diamond': 'Mining', 'gathering_sapphire_fragments': 'Mining', 'gathering_emerald_fragments': 'Mining', 'gathering_ruby_fragments': 'Mining', 'gathering_diamond_fragments': 'Mining', 'bronze_bar': 'Crafting', 'iron_bar': 'Crafting', 'silver_bar': 'Crafting', 'gold_bar': 'Crafting', 'promethium_bar': 'Crafting', 'titanium_bar': 'Crafting', 'ancient_bar': 'Crafting', 'dragon_bar': 'Crafting', 'charcoal': 'Crafting', 'lava': 'Crafting', 'plasma': 'Crafting', 'junk': 'Gathering', 'gathering_loot_bag_mines': 'Gathering', 'gathering_loot_bag_fields': 'Gathering', 'gathering_loot_bag_forest': 'Gathering', 'gathering_loot_bag_fishing_pond': 'Gathering', 'gathering_loot_bag_gem_mine': 'Gathering', 'gathering_loot_bag_kitchen': 'Gathering', 'gathering_loot_bag_castle': 'Gathering', 'bones': 'Farming', 'big_bones': 'Farming', 'ashes': 'Farming', 'ice_bones': 'Farming', 'blood_bones': 'Farming', 'dotted_green_leaf_seeds': 'Farming', 'green_leaf_seeds': 'Farming', 'lime_leaf_seeds': 'Farming', 'gold_leaf_seeds': 'Farming', 'crystal_leaf_seeds': 'Farming', 'red_mushroom_seeds': 'Farming', 'stardust_seeds': 'Farming', 'mega_dotted_green_leaf_seeds': 'Farming', 'mega_green_leaf_seeds': 'Farming', 'mega_lime_leaf_seeds': 'Farming', 'mega_gold_leaf_seeds': 'Farming', 'mega_crystal_leaf_seeds': 'Farming', 'mega_red_mushroom_seeds': 'Farming', 'tree_seeds': 'Farming', 'oak_tree_seeds': 'Farming', 'willow_tree_seeds': 'Farming', 'apple_tree_seeds': 'Farming', 'maple_tree_seeds': 'Farming', 'banana_tree_seeds': 'Farming', 'stardust_tree_seeds': 'Farming', 'orange_tree_seeds': 'Farming', 'pine_tree_seeds': 'Farming', 'redwood_tree_seeds': 'Farming', 'palm_tree_seeds': 'Farming', 'dragon_fruit_tree_seeds': 'Farming', 'bone_tree_seeds': 'Farming', 'lava_tree_seeds': 'Farming', 'strange_tree_seeds': 'Farming', 'potato_seeds': 'Farming', 'carrot_seeds': 'Farming', 'beet_seeds': 'Farming', 'broccoli_seeds': 'Farming', 'dotted_green_leaf': 'Brewing', 'green_leaf': 'Brewing', 'lime_leaf': 'Brewing', 'gold_leaf': 'Brewing', 'crystal_leaf': 'Brewing', 'red_mushroom': 'Brewing', 'strange_leaf': 'Brewing', 'stranger_leaf': 'Brewing', 'strangest_leaf': 'Brewing', 'shooting_star': 'Brewing', 'blue_shooting_star': 'Brewing', 'green_shooting_star': 'Brewing', 'red_shooting_star': 'Brewing', 'seaweed': 'Brewing', 'logs': 'Woodcutting', 'oak_logs': 'Woodcutting', 'willow_logs': 'Woodcutting', 'maple_logs': 'Woodcutting', 'stardust_logs': 'Woodcutting', 'pine_logs': 'Woodcutting', 'redwood_logs': 'Woodcutting', 'dense_logs': 'Woodcutting', 'raw_chicken': 'Raw', 'raw_bird_meat': 'Raw', 'raw_meat': 'Raw', 'raw_shrimp': 'Raw', 'raw_anchovy': 'Raw', 'raw_sardine': 'Raw', 'raw_crab': 'Raw', 'raw_piranha': 'Raw', 'raw_salmon': 'Raw', 'raw_trout': 'Raw', 'raw_pike': 'Raw', 'raw_eel': 'Raw', 'raw_rainbow_fish': 'Raw', 'raw_tuna': 'Raw', 'raw_swordfish': 'Raw', 'raw_manta_ray': 'Raw', 'raw_shark': 'Raw', 'raw_whale': 'Raw', 'raw_small_stardust_fish': 'Raw', 'raw_medium_stardust_fish': 'Raw', 'raw_large_stardust_fish': 'Raw', 'raw_angler_fish': 'Raw', 'cooked_shrimp': 'Food', 'cooked_anchovy': 'Food', 'cooked_sardine': 'Food', 'cooked_crab': 'Food', 'cooked_piranha': 'Food', 'cooked_salmon': 'Food', 'cooked_trout': 'Food', 'cooked_pike': 'Food', 'cooked_eel': 'Food', 'cooked_rainbow_fish': 'Food', 'cooked_tuna': 'Food', 'cooked_swordfish': 'Food', 'cooked_manta_ray': 'Food', 'cooked_shark': 'Food', 'cooked_whale': 'Food', 'cooked_small_stardust_fish': 'Food', 'cooked_medium_stardust_fish': 'Food', 'cooked_large_stardust_fish': 'Food', 'cooked_angler_fish': 'Food', 'cooked_chicken': 'Food', 'cooked_bird_meat': 'Food', 'cooked_meat': 'Food', 'honey': 'Food', 'cheese': 'Food', 'apple': 'Food', 'maple_syrup': 'Food', 'banana': 'Food', 'orange': 'Food', 'maggots': 'Food', 'potato': 'Food', 'carrot': 'Food', 'beet': 'Food', 'broccoli': 'Food', 'coconut': 'Food', 'dragon_fruit': 'Food', 'egg': 'Food', 'chocolate': 'Food', 'dotted_salad': 'Food', 'chocolate_cake': 'Food', 'lime_leaf_salad': 'Food', 'golden_apple': 'Food', 'banana_jello': 'Food', 'orange_pie': 'Food', 'pancakes': 'Food', 'bait': 'Bait', 'super_bait': 'Bait', 'mega_bait': 'Bait', 'string': 'Drops', 'poison': 'Drops', 'ant_needles': 'Drops', 'molten_glass': 'Drops', 'lizard_skin': 'Drops', 'bat_skin': 'Drops', 'bear_fur': 'Drops', 'reaper_silk': 'Drops', 'crocodile_hide': 'Drops', 'frozen_crocodile_hide': 'Drops', 'green_gaurdian_key': 'Drops', 'blue_gaurdian_key': 'Drops', 'purple_gaurdian_key': 'Drops', 'mixed_gaurdian_key': 'Drops', 'feathers': 'Combat', 'fire_feathers': 'Combat', 'ice_feathers': 'Combat', 'ancient_feathers': 'Combat', 'wooden_arrows': 'Combat', 'fire_arrows': 'Combat', 'ice_arrows': 'Combat', 'ancient_arrows': 'Combat', 'stinger': 'Combat', 'iron_dagger': 'Combat', 'skeleton_sword': 'Combat', 'club': 'Combat', 'spiked_club': 'Combat', 'dense_club': 'Combat', 'spiked_dense_club': 'Combat', 'scythe': 'Combat', 'double_scythe': 'Combat', 'rapier': 'Combat', 'gold_rapier': 'Combat', 'stinger_dagger': 'Combat', 'long_spear': 'Combat', 'trident': 'Combat', 'long_trident': 'Combat', 'long_bow': 'Combat', 'toy_slingshot': 'Combat', 'haunted_bow': 'Combat', 'balista': 'Combat', 'skeleton_shield': 'Combat', 'lantern': 'Combat', 'undead_staff': 'Combat', 'undead_hp_staff': 'Combat', 'undead_mana_staff': 'Combat', 'undead_defence_staff': 'Combat', 'undead_full_staff': 'Combat', 'lizard_mask': 'Armour', 'lizard_body': 'Armour', 'lizard_legs': 'Armour', 'lizard_gloves': 'Armour', 'lizard_boots': 'Armour', 'bat_mask': 'Armour', 'bat_body': 'Armour', 'bat_legs': 'Armour', 'bat_gloves': 'Armour', 'bat_boots': 'Armour', 'bear_mask': 'Armour', 'bear_body': 'Armour', 'bear_legs': 'Armour', 'bear_gloves': 'Armour', 'bear_boots': 'Armour', 'moonstone_mask': 'Armour', 'moonstone_body': 'Armour', 'moonstone_legs': 'Armour', 'moonstone_gloves': 'Armour', 'moonstone_boots': 'Armour', 'crocodile_mask': 'Armour', 'crocodile_body': 'Armour', 'crocodile_legs': 'Armour', 'crocodile_gloves': 'Armour', 'crocodile_boots': 'Armour', 'frozen_crocodile_mask': 'Armour', 'frozen_crocodile_body': 'Armour', 'frozen_crocodile_legs': 'Armour', 'frozen_crocodile_gloves': 'Armour', 'frozen_crocodile_boots': 'Armour', 'dragon_helmet': 'Armour', 'dragon_body': 'Armour', 'dragon_legs': 'Armour', 'dragon_gloves': 'Armour', 'dragon_boots': 'Armour', 'flippers': 'Armour', 'bone_amulet': 'Armour', 'ashes_amulet': 'Armour', 'ice_amulet': 'Armour', 'blood_amulet': 'Armour', 'amulet_of_healing_rain': 'Armour', 'stardust_potion': 'Potions', 'energy_potion': 'Potions', 'anti_disease_potion': 'Potions', 'tree_speed_potion': 'Potions', 'smelting_upgrade_potion': 'Potions', 'great_stardust_potion': 'Potions', 'farming_speed_potion': 'Potions', 'rare_monster_potion': 'Potions', 'super_stardust_potion': 'Potions', 'gathering_unique_potion': 'Potions', 'heat_potion': 'Potions', 'bait_potion': 'Potions', 'bone_potion': 'Potions', 'furnace_speed_potion': 'Potions', 'promethium_potion': 'Potions', 'super_rare_monster_potion': 'Potions', 'ultra_stardust_potion': 'Potions', 'cooks_dust_potion': 'Potions', 'fighting_dust_potion': 'Potions', 'tree_dust_potion': 'Potions', 'farm_dust_potion': 'Potions', 'magic_shiny_crystal_ball_potion': 'Potions', 'birdhouse_potion': 'Potions', 'rocket_potion': 'Potions', 'titanium_potion': 'Potions', 'raids_hp_potion': 'Potions', 'blue_orb_potion': 'Potions', 'geode_potion': 'Potions', 'magic_crystal_ball_potion': 'Potions', 'stone_converter_potion': 'Potions', 'rain_potion': 'Potions', 'combat_loot_potion': 'Potions', 'raids_mana_potion': 'Potions', 'gathering_worker_potion': 'Potions', 'rotten_potion': 'Potions', 'merchant_speed_potion': 'Potions', 'ancient_potion': 'Potions', 'green_orb_potion': 'Potions', 'raids_crits_potion': 'Potions', 'guardian_key_potion': 'Potions', 'red_orb_potion': 'Potions'};
- this.storage_sections = ['Special', 'Mining', 'Crafting', 'Gathering', 'Farming', 'Brewing', 'Woodcutting', 'Raw', 'Food', 'Bait', 'Drops', 'Combat', 'Armour', 'Potions', 'Uncategorized'];
- this.initCustomCSS();
- }
-
- initCustomCSS() {
- const css = `
- .teamsqol-storage-section {
- border: 1px solid black;
- background-color: white;
- padding: 10px 10px 0px 10px;
- margin-bottom: 10px;
- }
- .teamsqol-storage-section-title {
- margin-bottom: 10px;
- margin-left: 2px;
- font-weight: bold;
- cursor: pointer;
- }
- .teamsqol-storage-section-content {
- display: block;
- }
- .teamsqol-storage-section-content.zlefs-hidden {
- display: none;
- }
- `;
- const style = document.createElement('style');
- style.type = 'text/css';
- style.appendChild(document.createTextNode(css));
- document.head.appendChild(style);
- }
-
- storableAsSections(items) {
- const organized = {};
-
- for (const [item, type] of Object.entries(items)) {
- if (!organized[type]) {
- organized[type] = [];
- }
- organized[type].push(item);
- }
-
- return organized;
- }
-
- toggleSectionContent(event) {
- const sectionTitle = event.target;
- const sectionContent = sectionTitle.nextElementSibling;
- sectionContent.classList.toggle('zlefs-hidden');
- }
-
- replaceRefreshTeamStorageData(){
- const self = this;
- Modals.refreshTeamStorageData = function(raw) {
- var dataArray = raw.split("~");
- var itemData = {};
- for (var i = 0; i < dataArray.length; i += 2) {
- var itemName = dataArray[i];
- var itemAmount = parseInt(dataArray[i + 1]);
- if (itemAmount > 0) {
- itemData[itemName] = itemAmount;
- }
- }
-
- var sectionsHtml = {};
- self.storage_sections.forEach(section => {
- sectionsHtml[section] = `<div class='teamsqol-storage-section' id='section-${section}'><div class='teamsqol-storage-section-title'>${section}</div><div class='teamsqol-storage-section-content'>`;
- });
-
- const organizedItems = self.storableAsSections(self.storable_items);
-
- for (const [category, items] of Object.entries(organizedItems)) {
- items.forEach(itemName => {
- if (itemData[itemName]) {
- sectionsHtml[category] += `
- <div data-item-team-storage='${itemName}' onclick='Modals.clicksTeamStorageItem("${itemName}", ${itemData[itemName]})' class='team-trading-box-entry hover'>
- <img src='https://cdn.idle-pixel.com/images/${itemName}.png' />
- <span>${format_number(itemData[itemName])}</span>
- </div>`;
- }
- });
- }
-
- // Handle uncategorized items
- Object.keys(itemData).forEach(itemName => {
- if (!self.storable_items[itemName]) {
- sectionsHtml['Uncategorized'] += `
- <div data-item-team-storage='${itemName}' onclick='Modals.clicksTeamStorageItem("${itemName}", ${itemData[itemName]})' class='team-trading-box-entry hover'>
- <img src='https://cdn.idle-pixel.com/images/${itemName}.png' />
- <span>${format_number(itemData[itemName])}</span>
- </div>`;
- }
- });
-
- // Close all section divs and filter out empty sections
- var html = '';
- self.storage_sections.forEach(section => {
- sectionsHtml[section] += '</div></div>';
- if (sectionsHtml[section].includes('data-item-team-storage')) {
- html += sectionsHtml[section];
- }
- });
-
- document.getElementById("team-storage-box-content").innerHTML = html;
-
- // Add event listeners for toggling visibility
- const sectionTitles = document.querySelectorAll('.teamsqol-storage-section-title');
- sectionTitles.forEach(title => {
- title.addEventListener('click', self.toggleSectionContent);
- });
- };
- }
-
-
- onMessageReceived(message) {
- if(message.startsWith("TEAMS_STORAGE_DATA")){
- this.parseStorage(message.split("=")[1])
- }
- }
-
- parseStorage(storage_string){
- this.team_storage = {}
- const data_array = storage_string.split("~")
- for (let i = 0; i<data_array.length - 1; i+=2) {
- this.team_storage[data_array[i]] = data_array[i+1]
- }
- }
-
- onLogin() {
- this.teamStorageTopBar();
- this.replaceItemClickModal();
- this.loadSettings();
- this.applySettings();
- this.replaceRefreshTeamStorageData();
-
- // Add scrollbar to storage log until Smitty fixes
- const storeLog = document.getElementById("team-stoage-logger-context");
- storeLog.style.maxHeight = "150px";
- storeLog.style.overflowY = "auto";
-
- let autoScroll = true;
- let userScrolled = false;
- let reenableAutoScrollTimeout = null;
-
- function teamLogScroll() {
- if (autoScroll && !userScrolled) {
- storeLog.scrollTop = storeLog.scrollHeight;
- }
- }
-
- storeLog.addEventListener('scroll', () => {
- if (storeLog.scrollTop + storeLog.clientHeight >= storeLog.scrollHeight) {
- userScrolled = false;
- autoScroll = true;
- clearTimeout(reenableAutoScrollTimeout);
- } else {
- userScrolled = true;
- autoScroll = false;
- clearTimeout(reenableAutoScrollTimeout);
- reenableAutoScrollTimeout = setTimeout(() => {
- userScrolled = false;
- autoScroll = true;
- }, 5000);
- }
- });
-
- const observer = new MutationObserver(() => {
- if (autoScroll && !userScrolled) {
- teamLogScroll();
- } else if (!userScrolled) {
- // When user scrolls manually, autoscroll will be disabled for the next 5 seconds
- setTimeout(teamLogScroll, 5000);
- }
- });
- observer.observe(storeLog, { childList: true });
- }
-
-
- replaceItemClickModal(){
- const self = this;
- Modals.clicksTeamStorageItem = function(item_var, amount) {
- const player_amount = window[`var_${item_var}`] || 0;
- self.newWithdrawPopup(item_var, amount, player_amount);
-
- };
- }
-
- loadSettings() {
- const user = window.var_username;
- const savedSettings = localStorage.getItem(`${user}_teamsqol_settings`);
- let needsSave = false;
-
- if (savedSettings) {
- const parsedSettings = JSON.parse(savedSettings);
-
- needsSave = this.updateQuickDepositSettings(parsedSettings) || needsSave;
-
- const updateSettings = (defaultSettings, userSettings) => {
- const mergedSettings = {};
- for (const key in defaultSettings) {
- if (typeof defaultSettings[key] === 'object' && defaultSettings[key] !== null) {
- if (!userSettings[key] || typeof userSettings[key] !== 'object') {
- userSettings[key] = {};
- needsSave = true;
- }
- mergedSettings[key] = updateSettings(defaultSettings[key], userSettings[key]);
- } else {
- if (userSettings[key] === undefined) {
- userSettings[key] = defaultSettings[key];
- needsSave = true;
- }
- mergedSettings[key] = userSettings[key];
- }
- }
-
- for (const key in userSettings) {
- if (!defaultSettings.hasOwnProperty(key)) {
- delete userSettings[key];
- needsSave = true;
- console.log(`Removing obsolete setting: ${key}`);
- }
- }
- return mergedSettings;
- };
-
- this.settings = updateSettings(this.settings, parsedSettings);
-
- if (needsSave) {
- this.saveSettings();
- }
- }
- }
-
- updateQuickDepositSettings(parsedSettings) {
- const quickDepositKeys = Object.keys(this.settings).filter(key => key.startsWith('quick_deposit'));
- let needsSave = false;
-
- quickDepositKeys.forEach(key => {
- const defaultQuickDepositSettings = this.settings[key];
- const userQuickDepositSettings = parsedSettings[key] || {};
-
- for (const item in defaultQuickDepositSettings) {
- if (userQuickDepositSettings[item] === undefined) {
- userQuickDepositSettings[item] = defaultQuickDepositSettings[item];
- needsSave = true;
- }
- }
-
- for (const item in userQuickDepositSettings) {
- if (!defaultQuickDepositSettings.hasOwnProperty(item)) {
- delete userQuickDepositSettings[item];
- needsSave = true;
- }
- }
-
- parsedSettings[key] = userQuickDepositSettings;
- });
-
- return needsSave;
- }
-
- saveSettings() {
- const user = window.var_username;
- const saveSettingsOrdered = (defaultSettings, userSettings) => {
- const orderedSettings = {};
- for (const key in defaultSettings) {
- if (typeof defaultSettings[key] === 'object' && defaultSettings[key] !== null) {
- orderedSettings[key] = saveSettingsOrdered(defaultSettings[key], userSettings[key]);
- } else {
- orderedSettings[key] = userSettings[key];
- }
- }
- return orderedSettings;
- };
-
- const orderedSettings = saveSettingsOrdered(this.settings, this.settings);
- localStorage.setItem(`${user}_teamsqol_settings`, JSON.stringify(orderedSettings));
- this.applySettings();
- }
-
- resetSettings() {
- const user = window.var_username;
- localStorage.setItem(`${user}_teamsqol_settings`, JSON.stringify(this.defaultSettings));
- this.loadSettings();
- this.applySettings();
- }
-
- applySettings() {
- const buttonMapping = {
- show_fight_points_buttons: 'fpQuickButtons',
- show_energy_buttons: 'energyQuickButtons',
- show_quick_deposit_all_button: 'quickDepositAllButton',
- };
-
- for (const [setting, buttonId] of Object.entries(buttonMapping)) {
- const buttonElement = document.getElementById(buttonId);
- if (buttonElement) {
- buttonElement.style.display = this.settings[setting] ? 'flex' : 'none';
- }
- }
-
- let anyTrue = false;
-
- for (const category in this.settings.quick_deposit_visibility) {
- const button = document.getElementById(category);
- if (button) {
- button.style.display = this.settings.quick_deposit_visibility[category] ? 'block' : 'none';
- }
-
- if (this.settings.quick_deposit_visibility[category]) {
- anyTrue = true;
- }
- }
-
- const quickDepositButtons = document.getElementById('quickDepositButtons');
- if (quickDepositButtons) {
- quickDepositButtons.style.display = anyTrue ? 'flex' : 'none';
- }
- }
-
- teamsSettingPopup() {
- const settingsPopupStyles = `
- <style>
- #teamqol-settingsPopup {
- display: flex;
- flex-direction: column;
- align-items: center;
- width: 100%;
- max-width: 440px;
- margin: 0 auto;
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
- padding: 20px;
- box-sizing: border-box;
- position: relative;
- overflow-y: auto;
- max-height: 75vh;
- }
- #teamqol-settingsPopup .teamqol-settings-row {
- display: flex;
- width: 100%;
- margin-bottom: 10px;
- flex-wrap: wrap;
- }
- #teamqol-settingsPopup .teamqol-settings-col {
- flex: 1;
- box-sizing: border-box;
- padding: 10px;
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- #teamqol-settingsPopup .teamqol-settings-button-container {
- display: flex;
- justify-content: center;
- width: 100%;
- }
- #teamqol-settingsPopup button {
- padding: 10px 20px;
- cursor: pointer;
- margin-top: 10px;
- }
- #teamqol-settingsPopup .teamqol-close-button {
- position: absolute;
- top: 10px;
- right: 10px;
- background: none;
- border: none;
- font-size: 10px;
- cursor: pointer;
- padding: 5px;
- }
- #teamqol-settingsPopup .teamqol-section-title {
- width: 100%;
- text-align: left;
- font-weight: bold;
- cursor: pointer;
- }
- #teamqol-settingsPopup .teamqol-setting-item {
- width: 100%;
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 5px;
- }
- .teamqol-settings-section {
- border:1px solid black;
- background-color: white;
- padding: 10px 10px;
- width:400px;
- margin-top: 10px;
- }
- .teamqol-hidden {
- display: none;
- }
- </style>
- `;
-
- document.head.insertAdjacentHTML('beforeend', settingsPopupStyles);
-
- const popupBox = document.createElement('div');
- popupBox.id = 'teamqol-settingsPopup';
-
- const titleDiv = document.createElement('div');
- titleDiv.className = "teamqol-settings-row";
- popupBox.appendChild(titleDiv);
-
- const title = document.createElement('h5');
- title.textContent = 'Settings';
- title.className = "modal-title";
- title.style.textAlign = 'center';
- titleDiv.appendChild(title);
-
- const closeButton = document.createElement('button');
- closeButton.textContent = '✖';
- closeButton.className = 'teamqol-close-button';
- closeButton.type = 'button';
- popupBox.appendChild(closeButton);
-
- const settingsContent = document.createElement('div');
- settingsContent.className = 'teamqol-settings-row';
- popupBox.appendChild(settingsContent);
-
- // Generate settings inputs
- for (const setting in this.settings) {
- if (typeof this.settings[setting] === 'object' && this.settings[setting] !== null) {
- const sectionDiv = document.createElement('div');
- sectionDiv.className = 'teamqol-settings-section';
-
- const sectionTitle = document.createElement('div');
- sectionTitle.textContent = setting.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase());
- sectionTitle.className = 'teamqol-section-title';
- sectionDiv.appendChild(sectionTitle);
-
- const sectionContent = document.createElement('div');
- sectionContent.className = 'teamqol-section-content teamqol-hidden';
-
- for (const item in this.settings[setting]) {
- const settingItemDiv = document.createElement('div');
- settingItemDiv.className = 'teamqol-setting-item';
-
- const settingLabel = document.createElement('label');
- settingLabel.textContent = item.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase());
- settingLabel.style.cursor = 'pointer'; // Add this line
- settingItemDiv.appendChild(settingLabel);
-
- const settingInput = document.createElement('input');
- settingInput.type = 'checkbox';
- settingInput.checked = this.settings[setting][item];
- settingItemDiv.appendChild(settingInput);
-
- settingLabel.addEventListener('click', () => {
- settingInput.checked = !settingInput.checked;
- this.settings[setting][item] = settingInput.checked;
- this.saveSettings();
- this.applySettings();
- });
-
- settingInput.addEventListener('change', () => {
- this.settings[setting][item] = settingInput.checked;
- this.saveSettings();
- this.applySettings();
- });
-
- sectionContent.appendChild(settingItemDiv);
- }
-
- sectionDiv.appendChild(sectionContent);
-
- sectionTitle.addEventListener('click', () => {
- sectionContent.classList.toggle('teamqol-hidden');
- });
-
- settingsContent.appendChild(sectionDiv);
- } else {
- const settingItemDiv = document.createElement('div');
- settingItemDiv.className = 'teamqol-setting-item';
-
- const settingLabel = document.createElement('label');
- settingLabel.textContent = setting.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase());
- settingLabel.style.cursor = 'pointer'; // Add this line
- settingItemDiv.appendChild(settingLabel);
-
- const settingInput = document.createElement('input');
- settingInput.type = typeof this.settings[setting] === 'boolean' ? 'checkbox' : 'number';
- if (typeof this.settings[setting] === 'boolean') {
- settingInput.checked = this.settings[setting];
- } else {
- settingInput.value = this.settings[setting];
- }
- if (typeof this.settings[setting] === 'number'){
- settingInput.max = 0;
- }
- settingItemDiv.appendChild(settingInput);
-
- settingLabel.addEventListener('click', () => {
- if (settingInput.type === 'checkbox') {
- settingInput.checked = !settingInput.checked;
- this.settings[setting] = settingInput.checked;
- } else {
- settingInput.focus();
- }
- this.saveSettings();
- });
-
- settingInput.addEventListener('change', () => {
- if (settingInput.type === 'checkbox') {
- this.settings[setting] = settingInput.checked;
- } else {
- this.settings[setting] = settingInput.value;
- }
- this.saveSettings();
- });
-
- settingsContent.appendChild(settingItemDiv);
- }
- }
-
- const actions = [
- {
- button: closeButton,
- handler: () => {
- this.closePopup();
- },
- closeOnAction: true
- }
- ];
-
- this.launchPopup(popupBox, actions);
- }
-
- newWithdrawPopup(item_var, amount, player_amount) {
- const teamsPopupStyles = `
- <style>
- #teamsPopup {
- display: flex;
- flex-direction: column;
- align-items: center;
- width: 100%;
- max-width: 500px;
- margin: 0 auto;
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
- padding: 20px;
- box-sizing: border-box;
- position: relative;
- }
- #teamsPopup .teamsPopup-row {
- display: flex;
- width: 100%;
- margin-bottom: 10px;
- }
- #teamsPopup .teamsPopup-col {
- flex: 1;
- box-sizing: border-box;
- padding: 10px;
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- #teamsPopup .teamsPopup-deposit-container,
- #teamsPopup .teamsPopup-withdraw-container {
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- #teamsPopup .teamsPopup-button-container {
- display: flex;
- justify-content: center;
- width: 100%;
- }
- #teamsPopup button {
- padding: 10px 20px;
- cursor: pointer;
- margin-top: 10px;
- }
- #teamsPopup .deposit-button {
- background-color: red;
- color: white;
- }
- #teamsPopup .withdraw-button {
- background-color: green;
- color: white;
- }
- #teamsPopup input {
- margin: 10px 0;
- }
- #teamsPopup .vertical-divider {
- width: 1px;
- background-color: #ccc;
- margin: 0 20px;
- }
- #teamsPopup .close-button {
- position: absolute;
- top: 10px;
- right: 10px;
- background: none;
- border: none;
- font-size: 10x;
- cursor: pointer;
- padding: 5px;
- }
- </style>
- `;
-
- document.head.insertAdjacentHTML('beforeend', teamsPopupStyles);
-
- const popupBox = document.createElement('div');
- popupBox.id = 'teamsPopup';
-
- const titleDiv = document.createElement('div');
- titleDiv.className = "teamsPopup-row";
- popupBox.appendChild(titleDiv);
-
- const title = document.createElement('h5');
- title.textContent = item_var.replace(/_/g, ' ').replace(/\b\w/g, char => char.toUpperCase());
- title.className = "modal-title";
- title.style.textAlign = 'center';
- titleDiv.appendChild(title);
-
- const closeButton = document.createElement('button');
- closeButton.textContent = '✖';
- closeButton.className = 'close-button';
- closeButton.type = 'button';
- popupBox.appendChild(closeButton);
-
- const rowDiv = document.createElement('div');
- rowDiv.className = 'teamsPopup-row';
- popupBox.appendChild(rowDiv);
-
- const depositColDiv = document.createElement('div');
- depositColDiv.className = 'teamsPopup-col teamsPopup-deposit-container';
- rowDiv.appendChild(depositColDiv);
-
- const divider = document.createElement('div');
- divider.className = 'vertical-divider';
- rowDiv.appendChild(divider);
-
- const withdrawColDiv = document.createElement('div');
- withdrawColDiv.className = 'teamsPopup-col teamsPopup-withdraw-container';
- rowDiv.appendChild(withdrawColDiv);
-
- const depositLabel = document.createElement('label');
- depositLabel.textContent = 'Deposit Amount';
- depositColDiv.appendChild(depositLabel);
-
- const depositInput = document.createElement('input');
- depositInput.type = 'number';
- depositInput.max = player_amount;
- depositInput.min = 0;
- depositInput.className = 'storage-control';
- depositInput.id = 'depositAmount';
- depositInput.value = player_amount;
- depositColDiv.appendChild(depositInput);
-
- const depositButton = document.createElement('button');
- depositButton.textContent = 'DEPOSIT';
- depositButton.className = 'btn btn-secondary deposit-button';
- depositColDiv.appendChild(depositButton);
-
- const withdrawLabel = document.createElement('label');
- withdrawLabel.textContent = 'Withdraw Amount';
- withdrawColDiv.appendChild(withdrawLabel);
-
- let withdraw_amount = amount;
- if (item_var == "fight_points"){
- const fight_points = window.var_fight_points || 0;
- const max_fight_points = window.var_max_fight_points || 0;
- withdraw_amount = Math.max(0, (max_fight_points - fight_points) - 10);
-
- }
-
- const withdrawInput = document.createElement('input');
- withdrawInput.type = 'number';
- withdrawInput.max = amount;
- withdrawInput.min = 0;
- withdrawInput.className = 'storage-control';
- withdrawInput.id = 'withdrawAmount';
- withdrawInput.value = withdraw_amount;
- withdrawColDiv.appendChild(withdrawInput);
-
- const withdrawButton = document.createElement('button');
- withdrawButton.textContent = 'WITHDRAW';
- withdrawButton.className = 'btn btn-secondary withdraw-button';
- withdrawColDiv.appendChild(withdrawButton);
-
- const actions = [
- {
- button: depositButton,
- handler: () => {
- // console.log("Pressed deposit button");
- const store_amount = depositInput.value;
- websocket.send(`TEAM_STORE_ITEM=${item_var}~${store_amount}`);
- }
- },
- {
- button: withdrawButton,
- handler: () => {
- // console.log("Pressed withdraw button");
- let take_amount = withdrawInput.value;
- websocket.send(`TEAM_TAKE_ITEM=${item_var}~${take_amount}`);
- }
- },
- {
- button: closeButton,
- handler: () => {
- this.closePopup();
- },
- closeOnAction: true
- }
- ];
-
- this.launchPopup(popupBox, actions);
- }
-
- launchPopup(popup, actions) {
- if (this.currentPopup) {
- if (this.overlay.contains(this.currentPopup)) {
- this.overlay.removeChild(this.currentPopup);
- }
- this.currentPopup = null;
- }
-
- this.currentPopup = popup;
-
- this.overlay.appendChild(popup);
- document.body.appendChild(this.overlay);
-
- this.adjustPopupPosition();
-
- actions.forEach(action => {
- const button = action.button;
- button.addEventListener('click', () => {
- action.handler();
- if (action.closeOnAction !== false) {
- this.closePopup();
- }
- });
- });
- }
-
- adjustPopupPosition() {
- if (!this.currentPopup) return;
-
- const viewportHeight = window.innerHeight;
- const popupHeight = this.currentPopup.offsetHeight;
- const scrollOffset = window.pageYOffset || document.documentElement.scrollTop;
- const topPosition = (viewportHeight - popupHeight) / 2 + scrollOffset;
- this.currentPopup.style.position = 'absolute';
- this.currentPopup.style.top = `${topPosition > 0 ? topPosition : 0}px`;
- }
-
- closePopup() {
- if (this.currentPopup && this.overlay.contains(this.currentPopup)) {
- this.overlay.removeChild(this.currentPopup);
- this.currentPopup = null;
- }
- if (document.body.contains(this.overlay)) {
- document.body.removeChild(this.overlay);
- }
- }
-
- teamStorageTopBar(){
- const teamTradingBox = document.querySelector('.team-trading-box');
-
- const container = document.createElement('div');
- container.className = 'container';
-
- const row1 = document.createElement('div');
- row1.className = 'row';
- row1.style.marginBottom = '5px';
-
- // Column 1 - "Team Storage" & "Add items"
- const col1 = document.createElement('div');
- col1.className = 'col';
- col1.style.flex = "0 0 auto";
- col1.style.width = "auto";
- col1.innerHTML = `
- <div class="font-large" style="color: rgb(175, 131, 14);">Team Storage</div>
- <div><u id="add-item-teams-label" onclick="Modals.clicksAddItemTeamStorage()" class="color-grey hover" style="color: rgb(56, 41, 241);">Add Item</u></div>
- <div id="remember-storage-take-div" class="color-grey hover" style="float: right; color: rgb(56, 41, 241);" onclick="Modals.clicksRememberTakeFromStore()"></div>
- `;
-
- // Column 2 - Everything plugin related
- const col2 = document.createElement('div');
- col2.className = 'col';
- col2.style.display = "flex";
- col2.style.alignItems = "center";
- col2.style.marginLeft = "10px";
-
- this.quickButtons(col2);
-
- // Column 3 - Search bar and settings button
- const col3 = document.createElement('div');
- col3.className = 'col';
- col3.style.maxWidth = "150px";
- col3.style.minWidth = "150px";
- col3.style.display = "flex";
- col3.style.flexDirection = "column";
- col3.style.alignItems = "flex-end";
-
- // Settings button
- const settingsButton = document.createElement('button');
- settingsButton.textContent = 'Teams QoL Settings';
- settingsButton.style.border = 'none';
- settingsButton.style.background = 'none';
- settingsButton.style.cursor = 'pointer';
- settingsButton.style.padding = '0';
- settingsButton.style.width = '150px';
- settingsButton.style.height = '30px';
- settingsButton.style.alignSelf = 'flex-end';
-
- settingsButton.addEventListener('click', () => this.teamsSettingPopup());
- col3.appendChild(settingsButton);
-
- // Search bar
- const searchBar = document.createElement('input');
- searchBar.type = "text";
- searchBar.onkeyup = function() { Modals.searchTeamStorageKeyPress(this) };
- searchBar.style.maxWidth = "150px";
- searchBar.style.maxHeight = "28px";
- searchBar.style.marginTop = '10px'; // Adds some space between the button and search bar
- searchBar.placeholder = "Search Storage";
-
- col3.appendChild(searchBar);
-
-
- row1.appendChild(col1);
- row1.appendChild(col2);
- row1.appendChild(col3);
-
- container.appendChild(row1);
-
- const row2 = document.createElement('div');
- row2.className = 'row';
-
- const teamStorageBoxContent = document.getElementById('team-storage-box-content');
- if (teamStorageBoxContent) {
- row2.appendChild(teamStorageBoxContent);
- }
-
- container.appendChild(row2);
-
- teamTradingBox.innerHTML = '';
- teamTradingBox.appendChild(container);
- }
-
- quickButtons(col2) {
- // FP Buttons
- const fpButtonContainer = document.createElement('div');
- fpButtonContainer.style.display = 'flex';
- fpButtonContainer.style.alignItems = 'center';
- fpButtonContainer.id = 'fpQuickButtons'
-
- const fpUrl = "https://cdn.idle-pixel.com/images/fight_points.png";
- const withdrawFPButton = this.createLargeButton('Withdraw fight points', fpUrl, 'green', () => this.withdrawFightPoints());
- const depositFPButton = this.createLargeButton('Deposit fight points', fpUrl, 'red', () => this.depositFightPoints(), true);
-
- fpButtonContainer.appendChild(depositFPButton);
- fpButtonContainer.appendChild(withdrawFPButton);
- col2.appendChild(fpButtonContainer);
-
- // Energy Buttons
- const energyButtonContainer = document.createElement('div');
- energyButtonContainer.style.display = 'flex';
- energyButtonContainer.style.alignItems = 'center';
- energyButtonContainer.id = 'energyQuickButtons'
-
- const energyUrl = "https://cdn.idle-pixel.com/images/energy.png";
- const withdrawEnergyButton = this.createLargeButton('Withdraw energy points', energyUrl, 'green', () => this.withdrawEnergy());
- const depositEnergyButton = this.createLargeButton('Deposit energy points', energyUrl, 'red', () => this.depositEnergy(), true);
-
- energyButtonContainer.appendChild(depositEnergyButton);
- energyButtonContainer.appendChild(withdrawEnergyButton);
- col2.appendChild(energyButtonContainer);
-
- // Quick Deposit All Button
- const quickDepositButtonContainer = document.createElement('div');
- quickDepositButtonContainer.style.display = 'flex';
- quickDepositButtonContainer.style.alignItems = 'center';
- quickDepositButtonContainer.id = 'quickDepositAllButtonContainer';
-
- const quickDepositUrl = "https://cdn.idle-pixel.com/images/treasure_chest.png";
- const quickDepositAllButton = this.createLargeButton('Quick Deposit All', quickDepositUrl, 'red', () => this.quickDepositAll(), true);
- quickDepositAllButton.id = 'quickDepositAllButton';
-
- quickDepositButtonContainer.appendChild(quickDepositAllButton);
- col2.appendChild(quickDepositButtonContainer);
-
- // Quick Deposit Buttons
- const quickDepositContainer = document.createElement('div');
- quickDepositContainer.style.display = 'flex';
- quickDepositContainer.style.flexDirection = 'column';
- quickDepositContainer.style.alignItems = 'center';
- quickDepositContainer.style.marginLeft = '10px';
- quickDepositContainer.style.paddingBottom = '10px';
- quickDepositContainer.style.alignItems = 'flex-start';
- quickDepositContainer.id = "quickDepositButtons";
-
- const quickDepositTitle = document.createElement('div');
- quickDepositTitle.textContent = 'Quick Deposit';
- quickDepositTitle.style.marginBottom = '5px';
- quickDepositTitle.style.textAlign = 'left';
- quickDepositContainer.appendChild(quickDepositTitle);
-
- const quickDepositIconsContainer = document.createElement('div');
- quickDepositIconsContainer.style.display = 'flex';
- quickDepositIconsContainer.style.flexWrap = 'wrap';
- quickDepositIconsContainer.style.gap = '5px';
-
- for (const [category, iconUrl] of Object.entries(this.quickDepositIcons)) {
- const iconButton = this.createQuickDepositButton(category, iconUrl);
- quickDepositIconsContainer.appendChild(iconButton);
- }
-
- quickDepositContainer.appendChild(quickDepositIconsContainer);
- col2.appendChild(quickDepositContainer);
- }
-
-
- createLargeButton(altText, image_url, arrowColor, clickHandler, isDeposit = false) {
- const button = document.createElement("button");
- button.alt = altText;
- button.style.border = "none";
- button.style.background = "none";
- button.style.cursor = "pointer";
- button.style.position = "relative";
- button.style.marginRight = isDeposit ? '5px' : '0';
- button.title = altText;
- // Giving up on trying to display alt text on buttons, image takes over like a prick
- const img = document.createElement("img");
- img.src = image_url;
- img.style.width = "50px";
- img.style.height = "50px";
-
- const arrow = document.createElement("div");
- arrow.innerHTML = this.svgArrow(arrowColor, 30, isDeposit ? "down" : "up");
- arrow.style.position = "absolute";
- arrow.style.bottom = "0";
- arrow.style.right = "0";
- arrow.title = altText;
-
- button.appendChild(img);
- button.appendChild(arrow);
- button.addEventListener("click", clickHandler);
-
- return button;
- }
-
- createQuickDepositButton(category, iconUrl) {
- const button = document.createElement("button");
- button.alt = `Quick deposit ${category}`;
- button.style.border = "none";
- button.style.background = "none";
- button.style.cursor = "pointer";
- button.style.position = "relative";
- button.id = category;
-
- if (!this.settings.quick_deposit_visibility[category]) {
- button.style.display = 'none';
- }
-
- let imgWidth = "30px";
- let imgHeight = "30px";
-
- if (category == "quick_deposit_cooking"){
- imgWidth = "22px";
- imgHeight = "22px";
- }
-
- const img = document.createElement("img");
- img.src = iconUrl;
- img.style.width = imgWidth;
- img.style.height = imgHeight;
-
- const arrow = document.createElement("div");
- arrow.innerHTML = this.svgArrow("red", 20, "down");
- arrow.style.position = "absolute";
- arrow.style.bottom = "0";
- arrow.style.right = "0";
-
- button.appendChild(img);
- button.appendChild(arrow);
- button.addEventListener("click", () => this.quickDeposit(category));
-
- return button;
- }
-
- quickDeposit(category) {
- const items = this.settings[category];
- let bulkStoreString = '';
- if (category == "quick_deposit_combat" && this.settings.include_equipped_gear_in_quick_deposit){
- websocket.send("UNEQUIP_ALL");
- }
-
- for (const item in items) {
- if (items[item]) {
- const amount = window[`var_${item}`] || 0;
- if (amount > 0) {
- bulkStoreString += `${item}~${amount}~`;
- }
- }
- }
-
- if (bulkStoreString) {
- this.queue.push(bulkStoreString.slice(0, -1)); // Remove trailing '~' and add to queue
- this.processQueue();
- }
- }
-
- processQueue() {
- if (this.processingQueue) return;
-
- const processNext = () => {
- if (this.queue.length === 0) {
- this.processingQueue = false;
- return;
- }
-
- this.processingQueue = true;
- const bulkStoreString = this.queue.shift();
- websocket.send(`TEAM_BULK_STORE_ITEMS=${bulkStoreString}`);
- // console.log(`TEAM_BULK_STORE_ITEMS=${bulkStoreString}`);
-
- // Minimum delay of 200ms
- setTimeout(() => {
- processNext();
- }, 200);
- };
-
- processNext();
- }
-
- quickDepositAll() {
- const button = document.getElementById('quickDepositAllButton');
- button.disabled = true;
- setTimeout(() => {
- button.disabled = false;
- }, 2000);
-
- let bulkStoreString = '';
- const categories = Object.keys(this.settings.quick_deposit_visibility);
- for (const category of categories) {
- const items = this.settings[category];
- for (const item in items) {
- if (items[item]) {
- const amount = window[`var_${item}`] || 0;
- if (amount > 0) {
- bulkStoreString += `${item}~${amount}~`;
- }
- }
- }
- }
-
- if (bulkStoreString) {
- websocket.send(`TEAM_BULK_STORE_ITEMS=${bulkStoreString.slice(0, -1)}`);
- // console.log(`TEAM_BULK_STORE_ITEMS=${bulkStoreString.slice(0, -1)}`);
- }
- }
-
-
- withdrawFightPoints() {
- const fight_points = window.var_fight_points || 0;
- const max_fight_points = window.var_max_fight_points || 0;
- const fight_points_needed = Math.max(0, (max_fight_points - fight_points) - Math.abs(this.settings.fight_points_buffer));
- if (this.team_storage.fight_points >= fight_points_needed){
- // console.log(`TEAM_TAKE_ITEM=fight_points~${fight_points_needed}`)
- websocket.send(`TEAM_TAKE_ITEM=fight_points~${fight_points_needed}`);
- } else if (this.team_storage.fight_points > 0){
- // console.log(`TEAM_TAKE_ITEM=fight_points~${this.team_storage.fight_points}`)
- websocket.send(`TEAM_TAKE_ITEM=fight_points~${this.team_storage.fight_points}`);
- }
- }
-
- depositFightPoints() {
- const fight_points = window.var_fight_points || 0;
- websocket.send(`TEAM_STORE_ITEM=fight_points~${fight_points}`);
- }
-
- withdrawEnergy() {
- websocket.send(`TEAM_TAKE_ITEM=energy~${this.team_storage.energy}`);
- }
-
- depositEnergy() {
- const energy = window.var_energy || 0;
- websocket.send(`TEAM_STORE_ITEM=energy~${energy}`);
- }
-
- svgArrow(color, size, direction = "up") {
- let rotation;
- switch (direction) {
- case "up":
- case 0:
- rotation = 0;
- break;
- case "down":
- case 180:
- rotation = 180;
- break;
- case "left":
- case 270:
- rotation = 270;
- break;
- case "right":
- case 90:
- rotation = 90;
- break;
- default:
- rotation = parseInt(direction) || 0;
- }
-
- return `
- <svg width="${size}" height="${size}" viewBox="0 0 16 16" fill="${color}" xmlns="http://www.w3.org/2000/svg" style="transform: rotate(${rotation}deg);">
- <path d="M14.13 9.11h-12l6-7 6 7z"/>
- <path d="M6.12 8h4v6h-4z" fill="${color}"/>
- </svg>`;
- }
-
- }
-
- const plugin = new TeamsQoL();
- IdlePixelPlus.registerPlugin(plugin);
-
- })();