Attack NPC Timing

Add NPC attack time to the news ticker

当前为 2024-02-07 提交的版本,查看 最新版本

// ==UserScript==
// @name         Attack NPC Timing
// @namespace    npc.timing
// @version      v0.0.3
// @description  Add NPC attack time to the news ticker
// @author       IceBlueFire
// @license      MIT
// @match        https://www.torn.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=torn.com
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @require      https://code.jquery.com/jquery-1.8.2.min.js
// @connect      api.lzpt.io
// ==/UserScript==

const lzpt = getAttackTimes();
const color = "#8abeef";

const { fetch: originalFetch } = unsafeWindow;
unsafeWindow.fetch = async (...args) => {
    var [resource, config] = args;
    var response = await originalFetch(resource, config);
    const json = () => response.clone().json()
    .then((data) => {
        data = { ...data };
        if(response.url.indexOf('?sid=newsTicker') != -1) {
            lzpt.then(function(result) {
                var attackOrder = '';
                $.each(result.order, function(key, value) {
                    if(result.npcs[value].next){
                        attackOrder += result.npcs[value].name+', ';
                    }
                });
                attackOrder = attackOrder.slice(0, -2);
                attackOrder += '.';

                let attackItem = {ID: 0, headline: '<span style="color:'+color+'; font-weight: bold;">NPC attack set for '+utcformat(result.time.clear)+'. Order is: '+attackOrder+'</span>', countdown: true, endtime: result.time.clear, link: 'loader.php?sid=attack&user2ID='+result.order[0], isGlobal: false, type: 'generalMessage'};
                data.headlines.unshift(attackItem);
            }, function(err) {
                console.log(err); // Error: "It broke"
            });
        }
        return data
    })

    response.json = json;
    response.text = async () =>JSON.stringify(await json());

    return response;
};

function getTime(timestamp) {
    // Create a new JavaScript Date object based on the timestamp
    // multiplied by 1000 so that the argument is in milliseconds, not seconds
    var date = new Date(timestamp * 1000);

    // Hours part from the timestamp
    var hours = date.getHours();

    // Minutes part from the timestamp
    var minutes = "0" + date.getMinutes();

    // Seconds part from the timestamp
    var seconds = "0" + date.getSeconds();

    // Will display time in 10:30:23 format
    var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
    return formattedTime;
}

function utcformat(d){
    d= new Date(d * 1000);
    var tail= ' TCT', D= [d.getUTCFullYear(), d.getUTCMonth()+1, d.getUTCDate()],
    T= [d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds()];
    /* 12 hour format */
    /*
    if(+T[0]> 12){
        T[0]-= 12;
        tail= 'PM '+tail;
    }
    else tail= 'AM '+tail;
    */
    var i= 3;
    while(i){
        --i;
        if(D[i]<10) D[i]= '0'+D[i];
        if(T[i]<10) T[i]= '0'+T[i];
    }
    return T.join(':')+ tail;
}

async function getAttackTimes() {
    return new Promise(resolve => {
        const request_url = `https://api.lzpt.io/loot`;
        GM_xmlhttpRequest ({
            method:     "GET",
            url:        request_url,
            headers:    {
                "Content-Type": "application/json"
            },
            onload: response => {
                try {
                    const data = JSON.parse(response.responseText);
                    if(!data) {
                        console.log('No response from Loot Rangers');
                    } else {
                        return resolve(data)
                    }
                }
                catch (e) {
                    console.error(e);
                }

            },
            onerror: (e) => {
                console.error(e);
            }
        })
    });
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址