2022-12-08 16:20:02 +08:00

104 lines
4.3 KiB
TypeScript

import WuhuBase from "../WuhuBase";
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.css";
import TornStyleBlock from "../utils/TornStyleBlock";
import MathUtils from "../utils/MathUtils";
import FetchUtils from "../utils/FetchUtils";
/**
* 寻找木桩
* /item.php?temp=4#xunzhaomuzhuang
*/
export default class XZMZ extends WuhuBase {
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() {
super();
}
public init() {
CommonUtils.addStyle(XUNZHAOMUZHUANG_CSS);
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) {
FetchUtils.getInstance().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 CommonUtils.getInstance().sleep(MathUtils.getInstance().getRandomInt(100, 200));
}
private addRow(data) {
let $parentNode = this.mainRoleContainer.querySelector('#table-body'),
$node = '<tr data-id="' + data.player_id + '"></tr>';
$node += '<td style="border: 1px solid darkgray;padding:5px;text-align:center;">' + data.player_id + '</td>'
$node += `<td style="border: 1px solid darkgray;padding:5px;text-align:center;"><a href="/profiles.php?XID=${ data.player_id }">${ data.name }</a></td>`;
$node += '<td style="border: 1px solid darkgray;padding:5px;text-align:center;">' + data.level + '</td>'
$node += '<td style="border: 1px solid darkgray;padding:5px;text-align:center;"><a href="https://www.torn.com/loader.php?sid=attack&user2ID=' + data.player_id + '" target="_blank" class="torn-btn">攻击</a></td>'
$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);
}
}
}