HenterVerse Clutter One-Click Seller

Sell all the clutter in The Market with one single click!

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==UserScript==
// @name         HenterVerse Clutter One-Click Seller
// @namespace    hvcluttersell
// @version      0.1.7
// @description  Sell all the clutter in The Market with one single click!
// @author       Retr#000
// @match        https://*hentaiverse.org/*?s=Bazaar&ss=mk*
// @icon         data:image/png;base64,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
// @grant        GM_setValue
// @grant        GM_getValue
// @license      CC BY-NC 3.0
// ==/UserScript==

(function () {
    'use strict';

    ///////// Config /////////

    const HVCConfig_default = {
        "Settings": {
            HVCdelay: 500,
        },
        "Item List": [
            { name: 'ManBearPig Tail', sell_as_clutter: true, min_undercut: false, id: 30016, type: 'Trophy', desc: 'No longer will MBP spread havoc, destruction, and melted polar ice caps. [Tier 2]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Holy Hand Grenade of Antioch', sell_as_clutter: true, min_undercut: false, id: 30017, type: 'Trophy', desc: 'You found this item in the lair of a White Bunneh. It appears to be a dud. [Tier 2]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Mithra\'s Flower', sell_as_clutter: true, min_undercut: false, id: 30018, type: 'Trophy', desc: 'A Lilac flower given to you by a Mithra when you defeated her. Apparently, this type was her favorite. [Tier 2]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Dalek Voicebox', sell_as_clutter: true, min_undercut: false, id: 30019, type: 'Trophy', desc: 'Taken from the destroyed remains of a Dalek shell. [Tier 2]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Lock of Blue Hair', sell_as_clutter: true, min_undercut: false, id: 30020, type: 'Trophy', desc: 'Given to you by Konata when you defeated her. It smells of Timotei. [Tier 2]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Bunny-Girl Costume', sell_as_clutter: true, min_undercut: false, id: 30021, type: 'Trophy', desc: 'Given to you by Mikuru when you defeated her. If you wear it, keep it to yourself. [Tier 3]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Hinamatsuri Doll', sell_as_clutter: true, min_undercut: false, id: 30022, type: 'Trophy', desc: 'Given to you by Ryouko when you defeated her. You decided to name it Achakura, for no particular reason. [Tier 3]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Broken Glasses', sell_as_clutter: true, min_undercut: false, id: 30023, type: 'Trophy', desc: 'Given to you by Yuki when you defeated her. She looked better without them anyway. [Tier 3]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Black T-Shirt', sell_as_clutter: true, min_undercut: false, id: 30024, type: 'Trophy', desc: 'A plain black 100% cotton T-Shirt. On the front, an inscription in white letters reads\: \"I defeated Real Life, and all I got was this lousy T-Shirt\" [Tier 4]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Sapling', sell_as_clutter: true, min_undercut: false, id: 30030, type: 'Trophy', desc: 'A sapling from Yggdrasil, the World Tree. [Tier 4]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Unicorn Horn', sell_as_clutter: true, min_undercut: false, id: 30031, type: 'Trophy', desc: 'An Invisible Pink Unicorn Horn taken from the Invisible Pink Unicorn. It doesn\'t weigh anything and has the consistency of air, but you\'re quite sure it\'s real. [Tier 5]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Noodly Appendage', sell_as_clutter: true, min_undercut: false, id: 30032, type: 'Trophy', desc: 'A nutritious pasta-based appendage from the Flying Spaghetti Monster. [Tier 6]', isekai: { sell_as_clutter: true, min_undercut: false } },
            { name: 'Precursor Artifact', sell_as_clutter: false, min_undercut: false, id: 20001, type: 'Artifact', desc: 'An advanced technological artifact from an ancient and long-lost civilization. Handing these in at the Shrine of Snowflake will grant you a reward.' },
            { name: 'Energy Drink', sell_as_clutter: false, min_undercut: false, id: 11401, type: 'Consumable', desc: 'Restores 10 points of Stamina, up to the maximum of 99. When used in battle, also boosts Overcharge and Spirit by 10% for ten turns.' },
            { name: 'Low-Grade Cloth', sell_as_clutter: false, min_undercut: false, id: 60001, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade cloth armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Mid-Grade Cloth', sell_as_clutter: false, min_undercut: false, id: 60002, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade cloth armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'High-Grade Cloth', sell_as_clutter: false, min_undercut: false, id: 60003, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade cloth armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Low-Grade Leather', sell_as_clutter: false, min_undercut: false, id: 60004, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade light armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Mid-Grade Leather', sell_as_clutter: false, min_undercut: false, id: 60005, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade light armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'High-Grade Leather', sell_as_clutter: false, min_undercut: false, id: 60006, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade light armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Low-Grade Metals', sell_as_clutter: false, min_undercut: false, id: 60007, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade heavy armor and weapons.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Mid-Grade Metals', sell_as_clutter: false, min_undercut: false, id: 60008, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade heavy armor and weapons.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'High-Grade Metals', sell_as_clutter: false, min_undercut: false, id: 60009, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade heavy armor and weapons.' },
            { name: 'Low-Grade Wood', sell_as_clutter: false, min_undercut: false, id: 60010, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade staffs and shields.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Mid-Grade Wood', sell_as_clutter: false, min_undercut: false, id: 60011, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade staffs and shields.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'High-Grade Wood', sell_as_clutter: false, min_undercut: false, id: 60012, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge and upgrade staffs and shields.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scrap Cloth', sell_as_clutter: false, min_undercut: false, id: 60051, type: 'Material', desc: 'Various bits and pieces of scrap cloth. These can be used to mend the condition of an equipment piece.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scrap Leather', sell_as_clutter: false, min_undercut: false, id: 60052, type: 'Material', desc: 'Various bits and pieces of scrap leather. These can be used to mend the condition of an equipment piece.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scrap Metal', sell_as_clutter: false, min_undercut: false, id: 60053, type: 'Material', desc: 'Various bits and pieces of scrap metal. These can be used to mend the condition of an equipment piece.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scrap Wood', sell_as_clutter: false, min_undercut: false, id: 60054, type: 'Material', desc: 'Various bits and pieces of scrap wood. These can be used to mend the condition of an equipment piece.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Energy Cell', sell_as_clutter: false, min_undercut: false, id: 60071, type: 'Material', desc: 'A cylindrical object filled to the brim with arcano-technological energy.<br>Required to restore advanced armor and shields to full condition.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Crystallized Phazon', sell_as_clutter: false, min_undercut: false, id: 60101, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge Phase Armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Shade Fragment', sell_as_clutter: false, min_undercut: false, id: 60102, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge Shade Armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Repurposed Actuator', sell_as_clutter: false, min_undercut: false, id: 60104, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge Power Armor.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Defense Matrix Modulator', sell_as_clutter: false, min_undercut: false, id: 60105, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to reforge Force Shields.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Binding of Slaughter', sell_as_clutter: false, min_undercut: false, id: 60201, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Physical Base Damage.' },
            { name: 'Binding of Balance', sell_as_clutter: false, min_undercut: false, id: 60202, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Physical Hit Chance.' },
            { name: 'Binding of Destruction', sell_as_clutter: false, min_undercut: false, id: 60203, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Magical Base Damage.' },
            { name: 'Binding of Focus', sell_as_clutter: false, min_undercut: false, id: 60204, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Magical Hit Chance.' },
            { name: 'Binding of Protection', sell_as_clutter: false, min_undercut: false, id: 60205, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Physical Defense.' },
            { name: 'Binding of the Fleet', sell_as_clutter: false, min_undercut: false, id: 60206, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Evade Chance.' },
            { name: 'Binding of the Barrier', sell_as_clutter: false, min_undercut: false, id: 60207, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Block Chance.' },
            { name: 'Binding of the Nimble', sell_as_clutter: false, min_undercut: false, id: 60208, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Parry Chance.' },
            { name: 'Binding of the Elementalist', sell_as_clutter: false, min_undercut: false, id: 60209, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Elemental Magic Proficiency.' },
            { name: 'Binding of the Heaven-sent', sell_as_clutter: false, min_undercut: false, id: 60210, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Divine Magic Proficiency.' },
            { name: 'Binding of the Demon-fiend', sell_as_clutter: false, min_undercut: false, id: 60211, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Forbidden Magic Proficiency.' },
            { name: 'Binding of the Curse-weaver', sell_as_clutter: false, min_undercut: false, id: 60212, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Depreciating Magic Proficiency.' },
            { name: 'Binding of the Earth-walker', sell_as_clutter: false, min_undercut: false, id: 60213, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Supportive Magic Proficiency.' },
            { name: 'Binding of Surtr', sell_as_clutter: false, min_undercut: false, id: 60215, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Fire Spell Damage.' },
            { name: 'Binding of Niflheim', sell_as_clutter: false, min_undercut: false, id: 60216, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Cold Spell Damage.' },
            { name: 'Binding of Mjolnir', sell_as_clutter: false, min_undercut: false, id: 60217, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Elec Spell Damage.' },
            { name: 'Binding of Freyr', sell_as_clutter: false, min_undercut: false, id: 60218, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Wind Spell Damage.' },
            { name: 'Binding of Heimdall', sell_as_clutter: false, min_undercut: false, id: 60219, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Holy Spell Damage.' },
            { name: 'Binding of Fenrir', sell_as_clutter: false, min_undercut: false, id: 60220, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Dark Spell Damage.' },
            { name: 'Binding of Dampening', sell_as_clutter: false, min_undercut: false, id: 60221, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Crushing Mitigation.' },
            { name: 'Binding of Stoneskin', sell_as_clutter: false, min_undercut: false, id: 60222, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Slashing Mitigation.' },
            { name: 'Binding of Deflection', sell_as_clutter: false, min_undercut: false, id: 60223, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Piercing Mitigation.' },
            { name: 'Binding of the Fire-eater', sell_as_clutter: false, min_undercut: false, id: 60224, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Fire Mitigation.' },
            { name: 'Binding of the Frost-born', sell_as_clutter: false, min_undercut: false, id: 60225, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Cold Mitigation.' },
            { name: 'Binding of the Thunder-child', sell_as_clutter: false, min_undercut: false, id: 60226, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Elec Mitigation.' },
            { name: 'Binding of the Wind-waker', sell_as_clutter: false, min_undercut: false, id: 60227, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Wind Mitigation.' },
            { name: 'Binding of the Thrice-blessed', sell_as_clutter: false, min_undercut: false, id: 60228, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Holy Mitigation.' },
            { name: 'Binding of the Spirit-ward', sell_as_clutter: false, min_undercut: false, id: 60229, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Dark Mitigation.' },
            { name: 'Binding of the Ox', sell_as_clutter: false, min_undercut: false, id: 60230, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Strength.' },
            { name: 'Binding of the Raccoon', sell_as_clutter: false, min_undercut: false, id: 60231, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Dexterity.' },
            { name: 'Binding of the Cheetah', sell_as_clutter: false, min_undercut: false, id: 60232, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Agility.' },
            { name: 'Binding of the Turtle', sell_as_clutter: false, min_undercut: false, id: 60233, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Endurance.' },
            { name: 'Binding of the Fox', sell_as_clutter: false, min_undercut: false, id: 60234, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Intelligence.' },
            { name: 'Binding of the Owl', sell_as_clutter: false, min_undercut: false, id: 60235, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Wisdom.' },
            { name: 'Binding of Warding', sell_as_clutter: false, min_undercut: false, id: 60236, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Magical Mitigation.' },
            { name: 'Binding of Negation', sell_as_clutter: false, min_undercut: false, id: 60237, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Resist Chance.' },
            { name: 'Binding of Isaac', sell_as_clutter: false, min_undercut: false, id: 60238, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Physical Crit Chance.' },
            { name: 'Binding of Friendship', sell_as_clutter: false, min_undercut: false, id: 60239, type: 'Material', desc: 'Some materials scavenged from fallen adventurers by a monster.<br>Required to upgrade equipment bonuses to Magical Crit Chance.' },
            { name: 'Legendary Weapon Core', sell_as_clutter: false, min_undercut: false, id: 60402, type: 'Material', desc: 'The core of a legendary weapon. Contains the power to improve a weapon beyond its original potential.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Legendary Staff Core', sell_as_clutter: false, min_undercut: false, id: 60412, type: 'Material', desc: 'The core of a legendary staff. Contains the power to improve a staff beyond its original potential.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Legendary Armor Core', sell_as_clutter: false, min_undercut: false, id: 60422, type: 'Material', desc: 'The core of a legendary armor. Contains the power to improve an armor piece or shield beyond its original potential.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Voidseeker Shard', sell_as_clutter: false, min_undercut: false, id: 61001, type: 'Material', desc: 'When used with an equipment piece, this shard will temporarily imbue it with the Voidseeker\'s Blessing enchantment. (Weapon\'s damage type is changed to void, and a +50% physical accuracy bonus. No stack for DW.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Aether Shard', sell_as_clutter: false, min_undercut: false, id: 61101, type: 'Material', desc: 'When used with an equipment piece, this shard will temporarily imbue it with the Suffused Aether enchantment. (Gives +10% mana conservation bonus and a +50% magic accuracy bonus. No stack for DW.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Featherweight Shard', sell_as_clutter: false, min_undercut: false, id: 61501, type: 'Consumable', desc: 'When used with an equipment piece, this shard will temporarily imbue it with the Featherweight Charm enchantment. (Burden and interference by 7 or 50%, whichever is higher.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Amnesia Shard', sell_as_clutter: false, min_undercut: false, id: 65001, type: 'Consumable', desc: 'Can be used to reset the unlocked potencies and experience of an equipment piece.', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Flames', sell_as_clutter: false, min_undercut: false, id: 12101, type: 'Consumable', desc: 'You gain +25% resistance to Fire elemental attacks and do 25% more damage with Fire magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Frost', sell_as_clutter: false, min_undercut: false, id: 12201, type: 'Consumable', desc: 'You gain +25% resistance to Cold elemental attacks and do 25% more damage with Cold magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Lightning', sell_as_clutter: false, min_undercut: false, id: 12301, type: 'Consumable', desc: 'You gain +25% resistance to Elec elemental attacks and do 25% more damage with Elec magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Storms', sell_as_clutter: false, min_undercut: false, id: 12401, type: 'Consumable', desc: 'You gain +25% resistance to Wind elemental attacks and do 25% more damage with Wind magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Divinity', sell_as_clutter: false, min_undercut: false, id: 12501, type: 'Consumable', desc: 'You gain +25% resistance to Holy elemental attacks and do 25% more damage with Holy magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Infusion of Darkness', sell_as_clutter: false, min_undercut: false, id: 12601, type: 'Consumable', desc: 'You gain +25% resistance to Dark elemental attacks and do 25% more damage with Dark magicks. (50 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of Swiftness', sell_as_clutter: false, min_undercut: false, id: 13101, type: 'Consumable', desc: 'Grants the Haste effect.<br>(Increases Action Speed by 60% than ≤ 50% by spell for 100 turns.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of Protection', sell_as_clutter: false, min_undercut: false, id: 13111, type: 'Consumable', desc: 'Grants the Protection effect.<br>(Absorbs all damage taken by 50% than ≤ 30% by spell for 100 turns.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of the Avatar', sell_as_clutter: false, min_undercut: false, id: 13199, type: 'Consumable', desc: 'Grants the Haste and Protection effects with twice the normal duration.<br>(= Scroll of Swiftness + Protection for 200 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of Absorption', sell_as_clutter: false, min_undercut: false, id: 13201, type: 'Consumable', desc: 'Grants the Absorb effect.<br>(Absorption Chance is 100% than ≤ 90% by spell.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of Shadows', sell_as_clutter: false, min_undercut: false, id: 13211, type: 'Consumable', desc: 'Grants the Shadow Veil effect.<br>(Increases evasion by 30% than ≤ 25% by spell for 100 turns.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of Life', sell_as_clutter: false, min_undercut: false, id: 13221, type: 'Consumable', desc: 'Grants the Spark of Life effect.<br>(100 turns, alive HP is 50% than 2 by spell, consumes 25% base SP than 50% by spell.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Scroll of the Gods', sell_as_clutter: false, min_undercut: false, id: 13299, type: 'Consumable', desc: 'Grants the Absorb, Shadow Veil and Spark of Life effects with twice the normal duration.<br>(= Scroll of Absorb + Shadow Veil + Spark of Life for 200 turns)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Flower Vase', sell_as_clutter: false, min_undercut: false, id: 19111, type: 'Consumable', desc: 'There are three flowers in a vase. The third flower is green.<br>(Sleeper Imprint: Your attack/magic damage, attack/magic hit/crit chance, and evade/resist chance increases significantly for a short time.)', isekai: { sell_as_clutter: false, min_undercut: false } },
            { name: 'Bubble-Gum', sell_as_clutter: false, min_undercut: false, id: 19131, type: 'Consumable', desc: 'It is time to kick ass and chew bubble-gum... and here is some gum.<br>(Kicking Ass: Your attacks and spells deal twice as much damage for a short time, will always hit, and will always land critical hits.)', isekai: { sell_as_clutter: false, min_undercut: false } },
        ],
    };

    //////// Image Data //////////
    const configButtonImg = 'data:image/png;base64,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';

    const configButton_Img = 'data:image/png;base64,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';

    ////////// Code ///////////

    if (GM_getValue('Configurations') == undefined) { // initialization
        GM_setValue('Configurations', HVCConfig_default);
    }
    const HVCConfig = GM_getValue('Configurations'); // load configurations

    const inIsekai = location.pathname == '/isekai/';
    const itemList = HVCConfig["Item List"];

    function getItemNum() { // get isekai items number
        var itemNum = [];
        if (inIsekai) {
            for (let i = 0, j = 0; i < itemList.length; i++) {
                if (itemList[i].isekai) {
                    itemNum[j] = i;
                    j++;
                }
            }
        } else {
            for (let i = 0; i < itemList.length; i++) {
                itemNum[i] = i;
            }
        }
        return itemNum;
    }

    // common functions
    function cE(name) { // create element shortcut
        return document.createElement(name);
    }
    function qS(name) { // selector
        return document.querySelector(name);
    }
    function delay(ms) { // function to delay
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    function crtText(textContent, id, style) { // create text element
        const text = cE('text');
        text.textContent = textContent;
        if (id) text.id = id;
        if (style) text.style = style;
        return text;
    }
    function crtInput(type, id, className, style) { // create input element
        const input = cE('input');
        input.type = type;
        if (id) input.id = id;
        if (className) input.className = className;
        if (style) input.style = style;
        return input;
    }

    function gE(ele, mode, parent) { // get element
        if (typeof ele === 'object') {
            return ele;
        } if (mode === undefined && parent === undefined) {
            return (isNaN(ele * 1)) ? document.querySelector(ele) : document.getElementById(ele);
        } if (mode === 'all') {
            return (parent === undefined) ? document.querySelectorAll(ele) : parent.querySelectorAll(ele);
        } if (typeof mode === 'object' && parent === undefined) {
            return mode.querySelector(ele);
        }
    }

    function configButton() { // clutter configuration button
        const configButton = cE("div");
        configButton.id = 'hvcConfig';
        configButton.innerHTML = [
            '<button id="hvcConfig" style="border-width: 0px; padding: 0px; background: rgb(237, 235, 223); position: relative; top: -20px;">',
            '  <img src="',
            `${configButtonImg}`,
            '" alt="hvcConfig.png"></button>',
        ].join('');
        const left_up = qS('#market_xfer > div:nth-child(1)');
        left_up.parentElement.insertBefore(configButton, left_up);
        const balance_cur = qS('#market_xfer > div[class="credit_balance"]');
        balance_cur.style = 'position: relative; margin-top: -15px;';

        configButton.onclick = function () { // config chain buttom
            // styles
            const align_style = 'text-align: center; position: relative; left: 10px; top: 5px;';

            const globalStyle = gE('head').appendChild(cE('style'));
            const cssContent = [
                '#hvc_table{user-select:none}',
                '#hvc_table{flex-grow: 1;flex-shrink:1;overflow:auto}',
                '#hvc_table>table{min-width:800px;text-align: center;margin:auto;font-family:verdana;font-size:10pt;font-weight:bold;border-collapse:separate;border-spacing:0}',
                '#hvc_table tr:hover:not(:first-child),.market_itemorders tr[onclick]:hover{color:#9B4E03;background:linear-gradient(to right,#605A5A00 0%, #605A5A0A 5%, #605A5A0A 95%,#605A5A00 100%)}',
                '#hvc_table th{border-bottom:1px solid #5C0D11;padding:10px 0 10px 20px;position:sticky;top:0;background:#EDEBDF;z-index:1;font-size:18px;}',
                '#hvc_table th:first-child{min-width:200px}',
                '#hvc_table td{height:30px;border-bottom:1px solid #5C0D1136}',
                '#hvc_table td:nth-child(2), #hvc_table td:nth-child(3){padding-right:20px}',
                '#hvc_table td:last-child,#hvc_table th:last-child{padding-right:20px}',
                '#hvc_table td:not(:first-child){font-weight:normal}',
                '#hvc_table>p{font-size:9pt;font-style:italic;padding:10px}',
                '#hvc_table tr[data-orderdisabled="1"]{color:#e63e3e}',
                '.hvcCheckBox{width: 15px; height: 15px;}', // checkbox style
                '#hvcTitle{font-size: 20pt; font-family: verdana; font-weight: bold;}', // title style
            ].join('');
            globalStyle.textContent += cssContent;

            // clear right screen and remove old button
            var market_right, hvcgui, hvcTable_, hvcTable;
            market_right = qS('#market_right')
            market_right.innerHTML = '';
            configButton.remove();

            // config ui
            hvcgui = market_right.appendChild(cE('table'));
            hvcgui.id = 'hvcgui';

            // title universal
            const title1_ = hvcgui.insertRow().insertCell();
            title1_.style = align_style
            const title1 = crtText('Universal', 'hvcTitle');
            title1_.appendChild(title1);

            // HVCdelay
            const input_ = hvcgui.insertRow().insertCell();
            input_.style = align_style;
            input_.id = 'inputbox';
            const input = cE('input');
            input.type = 'text';
            input.value = HVCConfig["Settings"].HVCdelay;
            input.style = 'width: 50px; height: 12px; margin-bottom: 10px;';
            const input_desc = crtText('ms delay between each order', null, 'margin-left: 5px; font-size: 10pt;');
            input_.appendChild(input);
            input_.appendChild(input_desc);

            // item table
            hvcTable_ = market_right.appendChild(cE('div'));
            hvcTable_.id = 'hvc_table';
            hvcTable = hvcTable_.appendChild(cE('table'));

            const header = hvcTable.insertRow();
            const header1 = cE('th');
            header1.textContent = inIsekai ? 'Isekai Items' : 'Persistent Items';
            const header2 = cE('th');
            header2.textContent = 'Sell as Clutter';
            const header3 = cE('th');
            header3.textContent = 'Min Undercut';
            header.append(header1, header2, header3);

            function item_row(table, item) { // use for create new content row
                const config = inIsekai ? item.isekai : item; // differ config scope
                const row = table.insertRow();

                // name
                const cell_name = row.insertCell();
                const item_name = crtText(item.name, 'item_name');
                cell_name.appendChild(item_name);
                item_name.setAttribute('onmouseover', `common.show_popup_box(10,-40,398,82,\'hvc_table\',this,\'right\','${item.name.replace(/\'/g, '\\\'')}','${item.desc.replace(/\'/g, '\\\'')}','${item.type}')`);
                item_name.setAttribute('onmouseout', 'common.hide_popup_box()');

                // sell as clutter
                const cell_sell = row.insertCell();
                const checkbox_sell = crtInput('checkbox', 'sell_as_clutter', 'hvcCheckBox');
                checkbox_sell.checked = config.sell_as_clutter;
                cell_sell.appendChild(checkbox_sell);

                // min undercut
                const cell_minundercut = row.insertCell();
                const checkbox_minundercut = crtInput('checkbox', 'min_undercut', 'hvcCheckBox');
                checkbox_minundercut.checked = config.min_undercut;
                cell_minundercut.appendChild(checkbox_minundercut);
            }

            const itemNum = getItemNum(); // get number

            for (let i = 0; i < itemNum.length; i++) {
                var item = itemList[itemNum[i]];
                item_row(hvcTable, item);
            }

            // new style button to save config
            const configButton_ = cE("div");
            configButton_.id = 'hvcConfig_';
            configButton_.innerHTML = [
                '<button id="hvcConfig" style="border-width: 0px; padding: 0px; background: rgb(237, 235, 223); position: relative; top: -20px;">',
                '  <img src="',
                `${configButton_Img}`,
                '" alt="hvcConfig.png"></button>',
            ].join('');
            const left_up = qS('#market_xfer > div:nth-child(1)');
            left_up.parentElement.insertBefore(configButton_, left_up);

            function saveTable(config, checkSell, checkMinU) {
                config = inIsekai ? config.isekai : config;
                config.sell_as_clutter = checkSell.checked;
                config.min_undercut = checkMinU.checked;
            }

            configButton_.onclick = function () { // save config
                HVCConfig.Settings.HVCdelay = input.value;
                const checkSellAll = hvcTable.querySelectorAll('input[id="sell_as_clutter"]');
                const checkMinUcAll = hvcTable.querySelectorAll('input[id="min_undercut"]');
                for (let i = 0; i < itemNum.length; i++) {
                    saveTable(itemList[itemNum[i]], checkSellAll[i], checkMinUcAll[i]);
                }
                GM_setValue('Configurations', HVCConfig);
                window.location.href = window.location;
            };
        };
    } configButton();

    function sellClutterButton() { // sell clutter button
        const sellButton = cE("div");
        sellButton.innerHTML = [
            '<input',
            ' name="sell_clutter"',
            ' type="submit"',
            ' value="Sell Clutter"',
            ' style="font-size:10pt;border-radius:16px;">',
        ].join('');
        const market_left = qS('#market_left > div:nth-child(7)');
        market_left.parentElement.insertBefore(sellButton, market_left);

        // blank to adjust position
        const blank = cE("div");
        blank.style.paddingTop = "16px";
        const sellButton_ = qS('#market_left > div:nth-child(7)');
        sellButton_.parentElement.insertBefore(blank, sellButton_);

        // const selector strings
        const selector_sell_str = '#sellorder_update';
        const selector_stock_str = '#sell_order_stock_field > span';
        const selector_minundercut_str = '#market_itemsell > div:nth-child(1) > form > table > tbody > tr:nth-child(5) > td';
        const selector_0order_str = '#market_itembuy > div.market_itemorders > p';
        const input_price_str = '#sellorder_batchprice';

        async function sellClutter() { // traverse links and sell trophies
            const itemNum = getItemNum(); // get item number

            const iframe_ = document.createElement('iframe');
            iframe_.id = 'hvciframe';
            iframe_.hidden = true;
            document.querySelector('body').appendChild(iframe_);
            const iframe = document.querySelector('#hvciframe');

            async function clutterClick(item, ms) { // click buttons
                const config = inIsekai ? item.isekai : item; // differ config scope
                if (!config.sell_as_clutter) return 0;

                qS('#hvcselling').innerHTML = `---------------------- Selling now ----------------------<br><br>\> ${item.name} \<<br><br>------------------- ⚠ Click to stop ⚠ -------------------`;

                function getType(type) {
                    switch (type) {
                        case 'Trophy':
                            return 'tr';
                        case 'Material':
                            return 'ma';
                        case 'Consumable':
                            return 'co';
                        case 'Artifact':
                            return 'ar';
                    }
                }

                iframe.src = `https://hentaiverse.org/${inIsekai ? 'isekai/' : ''}?s=Bazaar&ss=mk&screen=browseitems&filter=${getType(item.type)}&itemid=${item.id}`;

                await new Promise(resolve => iframe.addEventListener('load', resolve)); // wait for iframe to load completely # by OpenAI ChatGPT

                var iframeDoc = iframe.contentWindow.document;

                // selectors
                const selector_sell = iframeDoc.querySelector(selector_sell_str);
                const selector_stock = iframeDoc.querySelector(selector_stock_str);
                const selector_minundercut = iframeDoc.querySelector(selector_minundercut_str);
                const input_price = iframeDoc.querySelector(input_price_str);
                const selector_0order = iframeDoc.querySelector(selector_0order_str);
                if (selector_stock.textContent.match(/^0.*/) || selector_0order) { // contine the next iteration if there is no stock or no order
                    iframe.src = "";
                    return 0;
                } else {
                    if (config.min_undercut) {
                        selector_minundercut.click();
                        await delay(1);
                        selector_stock.click();
                        await delay(1);
                        selector_sell.click();
                    } else {
                        input_price.value = 10;
                        await delay(1);
                        selector_stock.click();
                        await delay(1);
                        selector_sell.click();
                    }
                    await new Promise(resolve => iframe.addEventListener('load', resolve)); // wait for iframe to load completely # by OpenAI ChatGPT
                    iframeDoc = iframe.contentWindow.document; // since the page refresh, old iframDoc was cleared, new iframeDoc must be selected again
                }
                while ((iframeDoc.querySelector(selector_stock_str) && !(iframeDoc.querySelector(selector_stock_str).textContent.match(/^0.*/))) | !iframeDoc.querySelector(selector_stock_str)) {
                    await delay(10); // loop until the sell finished
                    if (iframeDoc.querySelector('#messagebox_inner > p[class="messagebox_error"]')) {
                        iframe.src = "";
                        return 1;
                    }
                }
                await delay(ms); // prevent too fast
                iframe.src = "";
                return 0;
            }

            for (let i = 0; i < itemNum.length; i++) {
                const item = itemList[itemNum[i]];
                while (await clutterClick(item, HVCConfig.Settings.HVCdelay) == 1) {
                    await clutterClick(item, HVCConfig.Settings.HVCdelay);
                }
            }
        }

        function startPopup() { // processing notification
            let popup_ = cE("div");
            popup_.innerHTML = [
                '<div id="messagebox_outer" onclick="{window.location.href = window.location;}">',
                '  <div id="messagebox_inner" style="overflow-y:auto">',
                `    <p class="messagebox_error" style="color:red" id="hvcselling">---------------------- Selling now ----------------------<br><br><br><br>------------------- ⚠ Click to stop ⚠ -------------------</p></div></div>`,
            ].join('');
            let market_outer = qS('#market_outer');
            market_outer.parentElement.insertBefore(popup_, market_outer);
        }
        function endPopup() { // finish notification
            qS('#messagebox_outer').remove();
            qS('#hvciframe').remove();
            let popup = cE("div");
            popup.innerHTML = [
                '<div id="messagebox_outer" onclick="{window.location.href = window.location;}">',
                '  <div id="messagebox_inner" style="overflow-y:auto">',
                '    <p class="messagebox_error" style="color:green">Clutter have been sold</p></div></div>',
            ].join('');
            let market_outer = qS('#market_outer');
            market_outer.parentElement.insertBefore(popup, market_outer);
        }
        sellButton.onclick = async function () { // sell clutter
            startPopup();
            await sellClutter();
            endPopup();
        }
    } sellClutterButton();

})();