import XUNZHAOMUZHUANG_HTML from "../../../static/html/xunzhaomuzhuang/index.html"; import * as MUZHUANG_ID_LIST_JSON from "../../../static/json/muzhuang_id_list.json"; import CommonUtils from "../utils/CommonUtils"; import XUNZHAOMUZHUANG_CSS from "../../../static/css/xunzhaomuzhuang.module.css"; import TornStyleBlock from "../utils/TornStyleBlock"; import MathUtils from "../utils/MathUtils"; import FetchUtils from "../utils/FetchUtils"; import ClassName from "../../container/ClassName"; import { Injectable } from "../../container/Injectable"; /** * 寻找木桩 * /item.php?temp=4#xunzhaomuzhuang */ @ClassName('XZMZ') @Injectable() export default class XZMZ { className = 'XZMZ'; private mainRoleContainer: HTMLElement; private IDList: number[]; private btn: HTMLButtonElement; private stopBtn: HTMLButtonElement; private stopSignal: boolean = false; private tips: HTMLElement; private counter: number; public constructor( private readonly mathUtils: MathUtils, private readonly commonUtils: CommonUtils, private readonly fetchUtils: FetchUtils, ) { } public init() { this.commonUtils.styleInject(XUNZHAOMUZHUANG_CSS); document.body.classList.add('wh-hide-title'); document.title = document.title.replace('Items', '寻找木桩'); this.mainRoleContainer = document.querySelector('div[role="main"]'); let block = new TornStyleBlock('寻找木桩'); block.setContent(XUNZHAOMUZHUANG_HTML); this.mainRoleContainer.append(block.getBase()); this.IDList = MUZHUANG_ID_LIST_JSON.default; this.btn = block.querySelector('#deadman-start-btn') as HTMLButtonElement; this.stopBtn = this.btn.nextElementSibling as HTMLButtonElement; this.tips = block.querySelector('#deadman_tips'); this.btn.addEventListener('click', () => { this.mainRoleContainer.querySelector('#table-body').innerHTML = ''; this.btn.disabled = true; this.stopSignal = false; this.StartSearch(); }); this.stopBtn.addEventListener('click', () => this.stopSignal = true); } private StartSearch() { this.counter = this.IDList.length; const tips = this.tips; tips.innerText = "---寻找中,长按目标名字弹出迷你档案---"; window.setTimeout(async () => { for (const id of this.IDList) { if (this.stopSignal) { this.stopSignal = false; this.counter = 1; this.counterHandler(false); return; } await this.SearchDeadman(id); } }, 1); } private async SearchDeadman(id) { this.fetchUtils.getProfile(id).then((res) => { if (res.userStatus.status.type === 'ok') { this.addRow({ player_id: res.user.userID, name: res.userInformation.name, level: res.userInformation.level }); } }); await this.commonUtils.sleep(this.mathUtils.getRandomInt(100, 200)); } private addRow(data) { let $parentNode = this.mainRoleContainer.querySelector('#table-body'), $node = ''; $node += '' + data.player_id + '' $node += `${ data.name }`; $node += '' + data.level + '' $node += '攻击' $parentNode.insertAdjacentHTML('beforeend', $node) } private counterHandler(hasCoolDown: boolean = true): void { this.counter--; if (this.counter === 0) { this.tips.innerText = "---寻找结束,等待60秒后重试---"; let countdown = hasCoolDown ? 60 : 2; let timer = window.setInterval(() => { this.btn.innerHTML = (countdown--).toString(); if (countdown === 0) { window.clearInterval(timer); this.btn.disabled = false; this.btn.innerHTML = '重新寻找'; } }, 1000); } } }