Hellcase Win Rate Calculator

Intercept Hellcase API and calculate the chance to earn money on one case

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

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

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Hellcase Win Rate Calculator
// @version      1.0
// @description  Intercept Hellcase API and calculate the chance to earn money on one case
// @author       Altorru
// @match        https://hellcase.com/fr/open/*
// @grant        GM_xmlhttpRequest
// @namespace https://greasyfork.org/users/1177108
// ==/UserScript==

(function() {
    'use strict';

    // Initialize a variable to store the total odds
    let totalOdds = 0;

    // Get the current page's URL
    const currentPageUrl = window.location.href;

    // Extract the part of the URL after 'https://hellcase.com/fr/open/'
    const urlSuffix = currentPageUrl.replace('https://hellcase.com/fr/open/', '');

    // Construct the API request URL
    const apiUrl = `https://api.hellcase.com/open/${urlSuffix}`;

    // Intercept the request to the constructed API URL
    GM_xmlhttpRequest({
        method: 'GET',
        url: apiUrl,
        onload: function(response) {
            try {
                // Parse the JSON response
                const data = JSON.parse(response.responseText);

                // Access the 'slice_code' property and log it
                if (data && data.slice_code) {
                    console.log('Value of slice_code:', data.slice_code);

                    // Now you can use the 'data.slice_code' value in your specific API request
                    const specificApiUrl = `https://api.hellcase.com/cases/get_slice/${data.slice_code}?game=csgo`;

                    // Make a new API request using the extracted slice_code
                    GM_xmlhttpRequest({
                        method: 'GET',
                        url: specificApiUrl,
                        onload: function(specificResponse) {
                            try {
                                // Parse the JSON response from the specific API request
                                const specificData = JSON.parse(specificResponse.responseText);

                                // Access and log the specific data here if needed
                                console.log('Specific API Response:', specificData);

                                // Extract the value of <div class="core-price core-price--preset--default">
                                const priceElement = document.querySelector('.core-price.core-price--preset--default');
                                if (priceElement) {
                                    const priceText = priceElement.textContent;

                                    // Use regular expression to extract the decimal number
                                    const priceValueMatch = priceText.match(/\d+\.\d+/);

                                    if (priceValueMatch) {
                                        const priceValue = parseFloat(priceValueMatch[0]); // Convert to a float

                                        // Iterate through the structure and calculate total odds
                                        if (specificData && specificData.items) {
                                            for (const item of specificData.items) {
                                                if (item && item.items) {
                                                    for (const subItem of item.items) {
                                                        if (subItem && subItem.steam_price_en >= priceValue) {
                                                            totalOdds += subItem.odds;
                                                        }
                                                    }
                                                }
                                            }
                                        }

                                        // Create a new HTML element to display the total odds
                                        const oddsElement = document.createElement('h1');
                                        oddsElement.textContent = `Win money : ${totalOdds}%`;
                                        oddsElement.style.position = 'relative';
                                        oddsElement.style.zIndex = '9'; // Set a higher z-index
                                        oddsElement.style.top = '180px';
                                        oddsElement.style.textAlign = 'center';

                                        // Find the target element to insert the odds element
                                        const targetElement = document.querySelector('.core-case-image.core-case-image--case.core-case-image-block__image');

                                        if (targetElement) {
                                            // Insert the odds element next to the target element
                                            targetElement.insertAdjacentElement('afterend', oddsElement);
                                        } else {
                                            console.error('Target element not found');
                                        }
                                    } else {
                                        console.error('Price value not found');
                                    }
                                } else {
                                    console.error('Price element not found');
                                }
                            } catch (error) {
                                console.error('Error parsing specific JSON:', error);
                            }
                        },
                        onerror: function(specificError) {
                            console.error('Error in specific API request:', specificError);
                        }
                    });
                } else {
                    console.error('slice_code not found in the response');
                }
            } catch (error) {
                console.error('Error parsing JSON:', error);
            }
        },
        onerror: function(error) {
            console.error('Error:', error);
        }
    });

})();