Add NPC attack time to the news ticker
当前为
// ==UserScript==
// @name Attack NPC Timing
// @namespace npc.timing
// @version v0.0.2
// @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) {
// console.log(result); // "Stuff worked!"
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);
}
})
});
}