Block Pragmatic Drops & Wins Popups

Analyzes game code to block Drops & Wins (Prize Drops/Tournaments) popups from opening, based on logo_info.js analysis.

目前為 2025-06-09 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Block Pragmatic Drops & Wins Popups
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  Analyzes game code to block Drops & Wins (Prize Drops/Tournaments) popups from opening, based on logo_info.js analysis.
// @author       Sharkytank
// @match        *://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    console.log("Block Drops & Wins script is running...");

    /**
     * A helper function to apply patches once the game's code is ready.
     * It periodically checks if the required components are loaded before applying the patch.
     * @param {object} info - The patch information object {name, ready(), apply(), interval}.
     */
    function UHTPatch(info) {
        if (info._UHT_timer) {
            clearInterval(info._UHT_timer);
        }

        info._UHT_timer = setInterval(function() {
            try {
                if (info.ready()) {
                    clearInterval(info._UHT_timer);
                    info.apply();
                    console.log('[DW-Blocker] Patch applied: ' + info.name);
                }
            } catch (e) {
                // Game might not be fully initialized, just wait for the next interval
            }
        }, info.interval || 500);
    }

    /**
     * PATCH 1: Block the "You Won a Prize" Popup.
     * This is the most intrusive popup. We check the promotion type when a win is announced.
     * If it's a "WD" (Wheel Drop / Drops & Wins) type, we block the function from running.
     */
    UHTPatch({
        name: "BlockDropsAndWinsPrizePopup",
        ready: function() {
            return (typeof window.PromotionsAnnouncer !== 'undefined' &&
                    typeof window.PromotionsAnnouncer.prototype.OnShowWin !== 'undefined' &&
                    typeof window.PromotionsHelper !== 'undefined' &&
                    typeof window.PromotionsHelper.FindDetails !== 'undefined' &&
                    typeof window.XT !== 'undefined' &&
                    typeof window.TournamentVars !== 'undefined' &&
                    typeof window.TournamentVars.Promotion_WinID !== 'undefined');
        },
        apply: function() {
            const originalOnShowWin = window.PromotionsAnnouncer.prototype.OnShowWin;

            window.PromotionsAnnouncer.prototype.OnShowWin = function() {
                try {
                    const details = window.PromotionsHelper.FindDetails(window.XT.GetString(window.TournamentVars.Promotion_WinID));
                    // "WD" is the type for "Drops & Wins" / "Prize Drop" promotions.
                    if (details && details.type === "WD") {
                        console.log("[DW-Blocker] Drops & Wins prize window blocked.");
                        if (this.gameObject && typeof this.gameObject.SetActive === 'function') {
                            this.gameObject.SetActive(false); // Attempt to hide the parent object
                        }
                        return; // Prevent the original function from running
                    }
                } catch (e) {
                    console.error("[DW-Blocker] Error in BlockDropsAndWinsPrizePopup patch:", e);
                }
                // If it's not a Drops & Wins promo, let it run as usual.
                return originalOnShowWin.apply(this, arguments);
            };
        }
    });

    /**
     * PATCH 2: Block the "A New Promotion Has Started" Popup.
     * This patch prevents the initial announcements for Drops & Wins races.
     */
    UHTPatch({
        name: "BlockDropsAndWinsAnnouncements",
        ready: function() {
            return (typeof window.TournamentAnnouncementDisplayer !== 'undefined' &&
                    typeof window.TournamentAnnouncementDisplayer.prototype.OnShowAnnouncement !== 'undefined' &&
                    typeof window.XT !== 'undefined' &&
                    typeof window.AnnouncementVars !== 'undefined' &&
                    typeof window.TournamentProtocol !== 'undefined');
        },
        apply: function() {
            const originalOnShowAnnouncement = window.TournamentAnnouncementDisplayer.prototype.OnShowAnnouncement;

            window.TournamentAnnouncementDisplayer.prototype.OnShowAnnouncement = function() {
                try {
                    const announcement = window.XT.GetObject(window.AnnouncementVars.Announcement);
                    // `this.type` distinguishes between tournament and race announcers.
                    // Races are the type used for Drops & Wins.
                    if (announcement && this.type === window.TournamentProtocol.PromoType.Race) {
                        console.log("[DW-Blocker] Drops & Wins start-of-promo announcement blocked.");
                        if (this.announcerWindow && typeof this.announcerWindow.SetActive === 'function') {
                            this.announcerWindow.SetActive(false);
                        }
                        return; // Prevent the original function from running
                    }
                } catch (e) {
                    console.error("[DW-Blocker] Error in BlockDropsAndWinsAnnouncements patch:", e);
                }
                return originalOnShowAnnouncement.apply(this, arguments);
            };
        }
    });

    /**
     * PATCH 3: Block the "Ear" Icon Notification.
     * This prevents the little notification icon from appearing on the side of the screen
     * for Drops & Wins promotions.
     */
    UHTPatch({
        name: "BlockDropsAndWinsEarIcon",
        ready: function() {
            return (typeof window.NotificationsManager !== 'undefined' &&
                    typeof window.NotificationsManager.prototype.OnAddNotification !== 'undefined' &&
                    typeof window.PromotionsHelper !== 'undefined' &&
                    typeof window.TournamentProtocol !== 'undefined');
        },
        apply: function() {
            const originalOnAddNotification = window.NotificationsManager.prototype.OnAddNotification;

            window.NotificationsManager.prototype.OnAddNotification = function(notification) {
                try {
                    if (notification && notification.uid) {
                        const promo = window.PromotionsHelper.FindPromotion(notification.uid);
                        // Block if the promotion type is a Race (Drops & Wins).
                        if (promo && promo.type === window.TournamentProtocol.PromoType.Race) {
                            console.log("[DW-Blocker] Drops & Wins ear notification blocked for promo: " + promo.name);
                            return; // Don't add the notification
                        }
                    }
                } catch (e) {
                    console.error("[DW-Blocker] Error in BlockDropsAndWinsEarIcon patch:", e);
                }
                return originalOnAddNotification.apply(this, arguments);
            };
        }
    });

})();