Automatic Missions Handler (for hentaiheroes.com)

3 functions: missionHandlerBackground, missionHandlerGUI, displayMissionsId

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @name         Automatic Missions Handler (for hentaiheroes.com)
// @namespace    https://greasyfork.org/fr/scripts/424552
// @version      1.1
// @description  3 functions: missionHandlerBackground, missionHandlerGUI, displayMissionsId
// @author       ManJizz
// @match        https://www.hentaiheroes.com/
// @grant        none
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/notify/0.4.2/notify.js

// missionHandlerBackground:
//      It checks for missions to start and rewards to claimon on a regular basis by sending POST requests to the server (even if the mission section is not displayed).
//      Use the function displayMissionsId to get your missions.

// missionHandlerGUI:
//      It checks for missions to start and rewards to claimon on a regular basis by sending POST requests to the server.
//      It's only triggered if the harem section is open
//      This function doesn't need the ids of your mission. It finds them himself in the panel.

// displayMissionsId:
//      It displays the missions' id on the browser console.
//      The mission panel has to be open.

// The functions don't refresh the page so you will still see the progress bar after the checks.
// Both funtions use JQuery and Notify.js, which is a JQuery plugin for the notifications
// The script has been made for https://www.hentaiheroes.com/

// ==/UserScript==
jQuery(function($) {
    // Options for the notification
    var notifOpts = {
        autoHideDelay: 5000,
        showAnimation: "fadeIn",
        hideAnimation: "fadeOut",
        className: 'info',
    };

    // Mission handler that runs even if the mission panel is closed
    function missionHandlerBackground(){
        /**
        * missionIds => Object to be filled with the key/value pair
        * key: id_member_mission / value: id_mission
        * use the function displayMissionsId to get your missions' id and paste the result here
        **/
        var missionIds = { "935091121" : "915", "935091123" : "24", "935091124" : "5", "935091125" : "710", "935091126" : "185", "935091127" : "13", "935091128" : "10", "935091129" : "31", "935091130" : "813", "935091131" : "37", "935091132" : "190", "935091133" : "828" };
        var promises = [];
        var missionStarted = "";
        var rewardClaimed = "";

        // First, we check if there is any mission to start
        $.each(missionIds, function(index, value) {
            var dfd = new $.Deferred();
            // Post request to query the server
            $.post('ajax.php', { class: "Missions", action : "start_mission", id_mission : value , id_member_mission: index }, function(response){
                var data = JSON.parse(JSON.stringify(response));
                if(data.success === true){
                    missionStarted = value;
                }
            }).done(function() {
                dfd.resolve();
            }).fail(function() {
                console.log('failed');
            });
            promises.push(dfd);
        });

        // If not, we check there is any reward to claim
        if (missionStarted.length == 0){
            $.each(missionIds, function(index, value) {
                var dfd = new $.Deferred();
                // Post request to query the server
                $.post('ajax.php', { class: "Missions", action : "claim_reward", id_mission : value , id_member_mission: index }, function(response){
                    var data = JSON.parse(JSON.stringify(response));
                    if(data.success === true){
                        rewardClaimed = value;
                    }
                }).done(function() {
                    dfd.resolve();
                }).fail(function() {
                    console.log('failed');
                });
                promises.push(dfd);
            });
        }

        // All post requests are treated => report
        $.when.apply($, promises).done(function () {
            // The start_mission request returns true when the mission is ongoing so we check the reward first
            if(rewardClaimed.length > 0){
                $.notify('Reward for mission n°' + rewardClaimed + ' has been claimed', notifOpts);
                console.log('Reward for mission n°' + rewardClaimed + ' has been claimed');
            } else {
                // If there is no reward to claim, we check if a mission has been started
                $.notify('No reward to claim', notifOpts);
                console.log('No reward to claim');
            }

            // If there is no reward to claim, we check if a mission has been started
            if(missionStarted.length > 0) {
                $.notify('Mission n°' + missionStarted + ' has been started', notifOpts);
                console.log('Mission n°' + missionStarted + ' has been started');
            } else {
                $.notify('No mission to start', notifOpts);
                console.log('No mission to start');

            }
        });
    }

    // Mission handler that runs only when the mission panel is open
    function missionHandlerGUI(){
        var divMissions = $('#hh_game').contents().find('body div#contains_all.fixed_scaled div#activities div#missions div.missions_wrap div.mission_object');
        var arrayMissions = [];
        if(divMissions.length > 0){
            var missionStarted = "";
            var rewardClaimed = "";
            $.each(divMissions, function() {
                var arrayData = JSON.parse($(this).attr("data-d"));
                arrayMissions.push(arrayData);
            });

            $.each(arrayMissions, function() {
                var dfd = new $.Deferred();
                var mission = $(this).get(0);
                // Post request to query the server
                $.post('ajax.php', { class: "Missions", action : "start_mission", id_mission : mission.id_mission , id_member_mission: mission.id_member_mission }, function(response){
                    var data = JSON.parse(JSON.stringify(response));
                    if(data.success === true){
                        missionStarted = mission.id_mission;
                    }
                }).fail(function() {
                    console.log('failed');
                });
            });

            if (missionStarted.length == 0){
                $.each(arrayMissions, function(index, value) {
                    var dfd = new $.Deferred();
                    var mission = $(this).get(0);
                    // Post request to query the server
                    $.post('ajax.php', { class: "Missions", action : "claim_reward",id_mission : mission.id_mission , id_member_mission: mission.id_member_mission }, function(response){
                        var data = JSON.parse(JSON.stringify(response));
                        if(data.success === true){
                            rewardClaimed = value;
                        }
                    }).fail(function() {
                        console.log('failed');
                    });
                });
             }

            // The start_mission request returns true when the mission is ongoing so we check the reward first
            if(rewardClaimed.length > 0){
                $.notify('Reward for mission n°' + rewardClaimed + ' has been claimed', notifOpts);
                console.log('Reward for mission n°' + rewardClaimed + ' has been claimed');
            } else {
                // If there is no reward to claim, we check if a mission has been started
                $.notify('No reward to claim', notifOpts);
                console.log('No reward to claim');
            }

            // If there is no reward to claim, we check if a mission has been started
            if(missionStarted.length > 0) {
                $.notify('Mission n°' + missionStarted + ' has been started', notifOpts);
                console.log('Mission n°' + missionStarted + ' has been started');
            } else {
                $.notify('No mission to start', notifOpts);
                console.log('No mission to start');
            }
        } else {
            $.notify('The missions panel is not open.', notifOpts);
            console.log('The missions panel is not open.');
        }
    }


    // Print all the missions' id in the panel
    function displayMissionsId(){
        var divMissions = $('#hh_game').contents().find('body div#contains_all.fixed_scaled div#activities div#missions div.missions_wrap div.mission_object');
        var arrayMissions = [];
        var missionId = [];
        var jsonString = "{ ";
        if(divMissions.length > 0){
            divMissions.each(function() {
                var arrayData = JSON.parse($(this).attr("data-d"));
                arrayMissions.push(arrayData);
            });

            $.each(arrayMissions,function(index) {
                var isLastElement = index == arrayMissions.length -1;
                if (isLastElement) {
                    jsonString = jsonString.concat("\"" + $(this).get(0).id_member_mission + "\"" + ' : ' + "\"" + $(this).get(0).id_mission + "\"");
                } else {
                    jsonString = jsonString.concat("\"" + $(this).get(0).id_member_mission + "\"" + ' : ' + "\"" + $(this).get(0).id_mission + "\"").concat(', ');
                }
            });
            jsonString = jsonString.concat(' }');
            console.log(jsonString);
            /* $.each(JSON.parse(jsonString), function(key, value){
                console.log(key + " - " + value);
                $.notify(key + " - " + value, notifOpts);
            });*/
        } else {
            console.log("Can't get the missions id");
            $.notify("Can't get the missions id", notifOpts);
        }
    }


    // 1 s = 1000 ms / 1 min = 60000 ms
    var interval = 180000;

    /** First call **/
    missionHandlerBackground();
    //missionHandlerGUI();
    //displayMissionsId();

    /** Interval: duration between each request **/
    window.setInterval(missionHandlerBackground,interval);
    //window.setInterval(missionHandlerGUI,interval);
    //window.setInterval(displayMissionsId,interval);
});