HWHAdvExt

Extension for Hero Wars Helper. Modifies the adventure button to fetch the paths from https://www.solfors.com. You can choose any path listed and it will do it automatically. HeroWarsHelper

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name            HWHAdvExt
// @namespace       HWHAdvExt
// @version         0.0.5
// @license         Copyright ZingerY & orb 
// @description     Extension for Hero Wars Helper. Modifies the adventure button to fetch the paths from https://www.solfors.com. You can choose any path listed and it will do it automatically. HeroWarsHelper
// @author          ZingerY
// @match           https://www.hero-wars.com/*
// @match           https://apps-1701433570146040.apps.fbsbx.com/*
// @match           https://www.solfors.com/*

// @run-at          document-start
// @grant           GM_xmlhttpRequest
// @connect         solfors.com
// ==/UserScript==

(function () {
    if (!this.HWHClasses) {
        console.log('%cHeroWarsHelper not found', 'color: red');
        return;
    }

    console.log('%cHWH Adventure Extension loaded', 'color: green');
    const { addExtentionName, getSaveVal, I18N, popup, setSaveVal } = HWHFuncs;
    addExtentionName(GM_info.script.name, GM_info.script.version, GM_info.script.author);
    
    // Store original getPath method
    const originalGetPath = HWHClasses.executeAdventure.prototype.getPath;
    
    // Override getPath method
    HWHClasses.executeAdventure.prototype.getPath = async function () {
        const oldVal = getSaveVal('adventurePath', '');
        const keyPath = `adventurePath:${this.mapIdent}`;
        
        // Get paths from solfors.com
        const solforsPaths = await this.fetchSolforsPaths();
        
        // Prepare popup buttons
        const popupButtons = [
            {
                msg: I18N('START_ADVENTURE'),
                placeholder: '1,2,3,4,5,6',
                isInput: true,
                default: getSaveVal(keyPath, oldVal)
            },
            {
                msg: I18N('BTN_CANCEL'),
                result: false,
                isCancel: true
            }
        ];
        
        // Add Solfors path buttons if available
        if (solforsPaths) {
            ['blue', 'orange', 'green'].forEach(color => {
                if (solforsPaths[color]) {
                    popupButtons.unshift({
                        msg: `${color === 'blue' ? '🔵' : color === 'orange' ? '🟠' : '🟢'} ${color.charAt(0).toUpperCase() + color.slice(1)}: ${solforsPaths[color]}`,
                        result: solforsPaths[color],
                        isPathButton: true
                    });
                }
            });
        }
        
        const answer = await popup.confirm('SELECT PATH OR ENTER A CUSTOM PATH', popupButtons);
        
        if (!answer) {
            this.terminatеReason = I18N('BTN_CANCELED');
            return false;
        }

        let path = answer.split(',');
        if (path.length < 2) {
            path = answer.split('-');
        }
        if (path.length < 2) {
            this.terminatеReason = I18N('MUST_TWO_POINTS');
            return false;
        }

        for (let p in path) {
            path[p] = +path[p].trim();
            if (Number.isNaN(path[p])) {
                this.terminatеReason = I18N('MUST_ONLY_NUMBERS');
                return false;
            }
        }

        if (!this.checkPath(path)) {
            return false;
        }
        setSaveVal(keyPath, answer);
        return path;
    };
    
    // Method to fetch paths from solfors.com
    HWHClasses.executeAdventure.prototype.fetchSolforsPaths = async function () {
        try {
            // Get adventure ID
            const adventureInfo = await Caller.send('adventure_getInfo');
            const adventureId = adventureInfo.adventureId;
            console.log('Current adventure:', adventureId);
            
            if (!adventureId || adventureId < 1 || adventureId > 12) {
                console.log('Invalid adventure ID');
                return null;
            }
            
            const url = `https://www.solfors.com/adventure/${adventureId}`;
            console.log('Fetching paths from:', url);
            
            // Fetch page content
            const response = await new Promise((resolve) => {
                GM_xmlhttpRequest({
                    method: "GET",
                    url: url,
                    onload: resolve,
                    onerror: () => resolve(null)
                });
            });
            
            if (!response || response.status !== 200) {
                console.log('Failed to fetch Solfors page');
                return null;
            }
            
            // Improved path extraction
            const text = response.responseText.replace(/<[^>]*>/g, ' '); // Remove HTML tags
            const paths = {};
            
            // Regex to capture the full path including optional Boss suffix
            const pathRegex = /(Blue|Orange|Green)\s*:\s*((?:\d+-)*\d+)(?:-Boss(?:\(x\d+\))?)?/gi;
            let match;
            
            while ((match = pathRegex.exec(text)) !== null) {
                const color = match[1].toLowerCase();
                // Clean up the path - this now captures ONLY the numbers part (match[2])
                let pathValue = match[2] // This is the captured numbers part only
                    .trim()
                    .replace(/\s+/g, ''); // Remove all whitespace
                
                paths[color] = pathValue;
                console.log(`Found ${color} path: ${pathValue}`);
            }
            
            if (Object.keys(paths).length === 0) {
                console.log('No paths found in page content');
                console.log('Content sample:', text.substring(0, 500));
                return null;
            }
            
            return paths;
            
        } catch (error) {
            console.error('Error in fetchSolforsPaths:', error);
            return null;
        }
    };

})();