import Alert from "../../class/utils/Alert"; import InfoUtils from "../../class/utils/InfoUtils"; import Log from "../../class/Log"; import Popup from "../../class/utils/Popup"; import { Container } from "../../container/Container"; // 守望者 export default function safeKeeper() { let infoUtils = Container.factory(InfoUtils); let url = `https://www.torn.com/loader.php?sid=attackData&mode=json&step=poll&user2ID=`; let popup = new Popup('

监测目标ID玩家的防御状态,找出隐身攻击者

', '守望者 (测试中)'); let p = document.createElement('p'); let uid: HTMLInputElement = document.createElement('input'); let start = document.createElement('button'); let stop = document.createElement('button'); let self_target = document.createElement('button'); let attackers: MyHTMLElement = document.createElement('div'); attackers.obj = {}; let records: MyHTMLElement = document.createElement('div'); records.list = []; records.details = {}; // interval loop_id let loop_id = null; let updateAttackersDOM = function () { let html = '进攻者:
'; Object.keys(attackers.obj).forEach(id => html += `[${ id }]
`); attackers.innerHTML = html; }; let updateRecordsDOM = function () { let html = '战斗记录:
'; records.list.forEach(rid => { let { TimeCreated, attackID, attackerID, attackerItemID, result, text } = records.details[rid]; html += `[${ TimeCreated }] [${ attackerID }] [${ attackerItemID }] ${ result } ${ text }
`; }); records.innerHTML = html; }; uid.type = 'text'; uid.placeholder = '目标ID'; start.innerHTML = '开启'; stop.innerHTML = '关闭'; stop.disabled = true; self_target.innerHTML = '填入自己'; // 弹出窗口关闭时结束 let popup_close = popup.close; popup.close = () => { if (loop_id === null) { popup.close = popup_close; popup.close(); } else new Alert('守望者运行中,请先停止', { timeout: 2 }); } popup.getElement().appendChild(p); popup.getElement().appendChild(uid); popup.getElement().appendChild(start); popup.getElement().appendChild(stop); popup.getElement().appendChild(self_target); popup.getElement().appendChild(attackers); popup.getElement().appendChild(records); start.addEventListener('click', () => { if (loop_id !== null || !uid.value) return; start.disabled = true; stop.disabled = false; uid.readOnly = true; p.innerHTML = '状态:已开 ✅'; let count = 0; loop_id = window.setInterval(async () => { // 记录当前循环的id let that_id = loop_id; let res = await (await window.fetch(url + uid.value, { headers: { 'X-Requested-With': 'XMLHttpRequest' }, referrer: "loader.php?sid=attack&user2ID=" + uid.value })).text(); if (loop_id !== that_id) return; let data = JSON.parse(res.split(' { if (id === uid.value) return; if (!attackers.obj[id]) { attackers.obj[id] = true; updateAttackersDOM(); } }); // 攻击历史 (DB['currentFightHistory'] || []).forEach(record => { if (records.list.includes(record['ID'])) return; let { ID, TimeCreated, attackID, attackerID, attackerItemID, result, text } = record; records.list.push(ID); records.details[ID] = { TimeCreated, attackID, attackerID, attackerItemID, result, text }; updateRecordsDOM(); }); // 攻击历史日志 if (histLog && histLog[uid.value]) histLog[uid.value].forEach(log => { if (records.list.includes(log['ID'])) return; let { ID, TimeCreated, attackID, attackResult, userID } = log; records.list.push(ID); records.details[ID] = { TimeCreated, attackID, attackerID: userID, attackerItemID: 0, result: attackResult, text: '' }; updateRecordsDOM(); }); }, 900); }); stop.addEventListener('click', () => { if (loop_id === null) return; start.disabled = false; stop.disabled = true; uid.readOnly = false; window.clearInterval(loop_id); loop_id = null; p.innerHTML = '状态:已关 ❎'; }); self_target.addEventListener('click', () => uid.value = (infoUtils.getPlayerInfo()['userID']) + ''); }