This commit is contained in:
Liwanyi 2022-09-20 19:18:21 +08:00
parent 17c295c13e
commit c1ba5c04ec
19 changed files with 792 additions and 586 deletions

View File

@ -1,9 +1,9 @@
import BuyBeer, { BeerMonitorLoop } from "../func/utils/BuyBeer";
import Device from "../enum/Device";
import getPlayerInfo from "../func/utils/getPlayerInfo";
import WindowActiveState from "../func/utils/WindowActiveState";
import WuhuBase from "./WuhuBase";
import IGlobal from "../interface/IGlobal";
import Utils from "./Utils";
export default class Global extends WuhuBase implements IGlobal {
GM_xmlhttpRequest: Function = null;
@ -53,7 +53,7 @@ export default class Global extends WuhuBase implements IGlobal {
this.PDA_APIKey = '###PDA-APIKEY###';
this.isPDA = !this.PDA_APIKey.includes('###');
this.device = window.innerWidth >= 1000 ? Device.PC : window.innerWidth <= 600 ? Device.MOBILE : Device.TABLET;
this.player_info = getPlayerInfo();
this.player_info = Utils.getPlayerInfo();
this.beer = BuyBeer();
this.popup_node = null;
this.notifies = { count: 0 };

View File

@ -1,13 +1,13 @@
import UserScriptEngine from "../enum/UserScriptEngine";
import log from "../func/utils/log";
import Global from "./Global";
import WuhuBase from "./WuhuBase";
import Log from "./Log";
import Device from "../enum/Device";
import ISidebarData from "../interface/ISidebarData";
import IWHSettings from "../interface/IWHSettings";
export default class Utils extends WuhuBase{
export default class Utils extends WuhuBase {
static getScriptEngine() {
// let glob = WuHuTornHelper.getGlob();
let glob = Global.glob;
let glob = WuhuBase.glob;
return glob.unsafeWindow ? UserScriptEngine.GM : glob.isPDA
? UserScriptEngine.PDA : UserScriptEngine.RAW;
}
@ -26,26 +26,26 @@ export default class Utils extends WuhuBase{
// get
if (method === 'get') {
if (typeof PDA_httpGet !== 'function') {
log.error('COFetch网络错误PDA版本不支持');
Log.error('COFetch网络错误PDA版本不支持');
reject('COFetch网络错误PDA版本不支持');
}
PDA_httpGet(url)
.then(res => resolve(res.responseText))
.catch(e => {
log.error('COFetch网络错误', e);
Log.error('COFetch网络错误', e);
reject(`COFetch网络错误 ${ e }`);
})
}
// post
else {
if (typeof PDA_httpPost !== 'function') {
log.error('COFetch网络错误PDA版本不支持');
Log.error('COFetch网络错误PDA版本不支持');
reject('COFetch网络错误PDA版本不支持');
}
PDA_httpPost(url, { 'content-type': 'application/json' }, body)
.then(res => resolve(res.responseText))
.catch(e => {
log.error('COFetch网络错误', e);
Log.error('COFetch网络错误', e);
reject(`COFetch网络错误 ${ e }`);
});
}
@ -54,7 +54,7 @@ export default class Utils extends WuhuBase{
case UserScriptEngine.GM: {
let { GM_xmlhttpRequest } = window;
if (typeof GM_xmlhttpRequest !== 'function') {
log.error('COFetch网络错误用户脚本扩展API错误');
Log.error('COFetch网络错误用户脚本扩展API错误');
reject('错误用户脚本扩展API错误');
}
GM_xmlhttpRequest({
@ -70,4 +70,83 @@ export default class Utils extends WuhuBase{
}
});
}
/**
* { playername: string, userID: number }
* @return {PlayerInfo} rs
*/
static getPlayerInfo(): PlayerInfo {
const node = document.querySelector('script[uid]');
if (node) return {
playername: node.getAttribute('name'),
userID: node.getAttribute('uid') as unknown as number,
}
}
// 用户设备类型 对应PC MOBILE TABLET
static getDeviceType(): Device {
return window.innerWidth >= 1000
? Device.PC : window.innerWidth <= 600 ? Device.MOBILE : Device.TABLET;
}
// 得到一个两数之间的随机整数
static getRandomInt(min: number, max: number): number {
min = Math.ceil(min);
max = Math.floor(max);
//不含最大值,含最小值
return Math.floor(Math.random() * (max - min)) + min;
}
/**
*
* @param {Number} ms
* @returns {Promise<void>}
*/
static sleep(ms) {
let time = Math.max(ms, 10);
return new Promise(resolve => setTimeout(() => resolve(null), time));
}
static getSessionData(): Promise<ISidebarData> {
let field: string = 'sidebarData' + this.getPlayerInfo().userID;
let ret: ISidebarData = {};
return new Promise(async resolve => {
let c = 0;
while (!sessionStorage.getItem(field) && c < 50) {
c++;
await this.sleep(10);
}
ret = JSON.parse(sessionStorage.getItem(field));
ret.headerData = JSON.parse(sessionStorage.getItem('headerData'));
resolve(ret);
});
}
static async getSidebarData() {
return (await this.getSessionData()).areas;
}
static async getUserState() {
return (await this.getSessionData()).headerData.user.state;
}
static getWhSettingObj(): IWHSettings {
return JSON.parse(localStorage.getItem('wh_trans_settings')) || {}
}
static getYaoCD(): string {
if (document.querySelector("#icon49-sidebar")) { // 0-10min
return '<10分'
} else if (document.querySelector("#icon50-sidebar")) { // 10min-1h
return '<1时'
} else if (document.querySelector("#icon51-sidebar")) { // 1h-2h
return '1~2时'
} else if (document.querySelector("#icon52-sidebar")) { // 2h-5h
return '2~5时'
} else if (document.querySelector("#icon53-sidebar")) { // 5h+
return '>5时'
} else {
return '无效'
}
}
}

View File

View File

@ -6,75 +6,77 @@ import attackHelper from "./func/module/attackHelper";
import priceWatcherHandle from "./func/module/priceWatcherHandle";
import WuhuBase from "./class/WuhuBase";
export default function () {
let glob = WuhuBase.glob;
// 价格监控
priceWatcherHandle(glob.isPDA, glob.PDA_APIKey);
export class Common extends WuhuBase {
static resolve() {
let glob = WuhuBase.glob;
// 价格监控
priceWatcherHandle(glob.isPDA, glob.PDA_APIKey);
// 啤酒提醒
if (getWhSettingObj()['_15Alarm']) glob.beer.start();
// 啤酒提醒
if (getWhSettingObj()['_15Alarm']) glob.beer.start();
// 点击4条转跳对应的页面
if (getWhSettingObj()['barsRedirect']) {
const eb = document.getElementById('barEnergy') as HTMLAnchorElement;
const nb = document.getElementById('barNerve') as HTMLAnchorElement;
const hb = document.getElementById('barHappy') as HTMLAnchorElement;
const lb = document.getElementById('barLife') as HTMLAnchorElement;
if (eb) {
eb.addEventListener('click', () => location.href = '/gym.php');
eb.href = '/gym.php';
} else {
elementReady('#barEnergy').then(eb => {
// 点击4条转跳对应的页面
if (getWhSettingObj()['barsRedirect']) {
const eb = document.getElementById('barEnergy') as HTMLAnchorElement;
const nb = document.getElementById('barNerve') as HTMLAnchorElement;
const hb = document.getElementById('barHappy') as HTMLAnchorElement;
const lb = document.getElementById('barLife') as HTMLAnchorElement;
if (eb) {
eb.addEventListener('click', () => location.href = '/gym.php');
(eb as HTMLAnchorElement).href = '/gym.php';
});
}
if (nb) {
nb.addEventListener('click', () => location.href = '/crimes.php');
nb.href = '/crimes.php';
} else {
elementReady('#barNerve').then(nb => {
eb.href = '/gym.php';
} else {
elementReady('#barEnergy').then(eb => {
eb.addEventListener('click', () => location.href = '/gym.php');
(eb as HTMLAnchorElement).href = '/gym.php';
});
}
if (nb) {
nb.addEventListener('click', () => location.href = '/crimes.php');
(nb as HTMLAnchorElement).href = '/crimes.php';
});
}
if (hb) {
hb.addEventListener('click', () => location.href = '/item.php#boosters-items');
hb.href = '/item.php#boosters-items';
} else {
elementReady('#barHappy').then(hb => {
nb.href = '/crimes.php';
} else {
elementReady('#barNerve').then(nb => {
nb.addEventListener('click', () => location.href = '/crimes.php');
(nb as HTMLAnchorElement).href = '/crimes.php';
});
}
if (hb) {
hb.addEventListener('click', () => location.href = '/item.php#boosters-items');
(hb as HTMLAnchorElement).href = '/item.php#boosters-items';
});
}
if (lb) {
lb.addEventListener('click', () => location.href = '/item.php#medical-items');
lb.href = '/item.php#medical-items';
} else {
elementReady('#barLife').then(lb => {
hb.href = '/item.php#boosters-items';
} else {
elementReady('#barHappy').then(hb => {
hb.addEventListener('click', () => location.href = '/item.php#boosters-items');
(hb as HTMLAnchorElement).href = '/item.php#boosters-items';
});
}
if (lb) {
lb.addEventListener('click', () => location.href = '/item.php#medical-items');
(lb as HTMLAnchorElement).href = '/item.php#medical-items';
});
lb.href = '/item.php#medical-items';
} else {
elementReady('#barLife').then(lb => {
lb.addEventListener('click', () => location.href = '/item.php#medical-items');
(lb as HTMLAnchorElement).href = '/item.php#medical-items';
});
}
}
/**
*
* TODO
*/
if (getWhSettingObj()['removeScripts']) {
document.querySelectorAll('script[src*="google"]').forEach(item => item.remove());
document.querySelectorAll('#gtm_tag').forEach(item => item.remove());
document.querySelectorAll('script[src*="chat/gonline"]').forEach(item => item.remove());
document.querySelectorAll('head script[nonce]').forEach(item => item.remove());
}
// 存钱相关
depoHelper();
// 飞行相关
travelHelper().then();
// 战斗相关
attackHelper().then();
}
/**
*
* TODO
*/
if (getWhSettingObj()['removeScripts']) {
document.querySelectorAll('script[src*="google"]').forEach(item => item.remove());
document.querySelectorAll('#gtm_tag').forEach(item => item.remove());
document.querySelectorAll('script[src*="chat/gonline"]').forEach(item => item.remove());
document.querySelectorAll('head script[nonce]').forEach(item => item.remove());
}
// 存钱相关
depoHelper();
// 飞行相关
travelHelper().then();
// 战斗相关
attackHelper().then();
}

View File

@ -1,7 +1,7 @@
import getPlayerInfo from "../utils/getPlayerInfo";
import popupMsg from "../utils/popupMsg";
import WHNotify from "../utils/WHNotify";
import log from "../utils/log";
import Utils from "../../class/Utils";
// 守望者
export default function safeKeeper() {
@ -116,5 +116,5 @@ export default function safeKeeper() {
loop_id = null;
p.innerHTML = '状态:已关 ❎';
});
self_target.addEventListener('click', () => uid.value = (getPlayerInfo()['userID']) + '');
self_target.addEventListener('click', () => uid.value = (Utils.getPlayerInfo()['userID']) + '');
}

View File

@ -4,7 +4,7 @@ import WHNotify from "./WHNotify";
import getRandomInt from "./getRandomInt";
import setWhSetting from "./setWhSetting";
import audioPlay from "./audioPlay";
import getUserState from "./getUserState";
import Utils from "../../class/Utils";
// 啤酒
export default function BuyBeer() {
@ -19,9 +19,9 @@ export default function BuyBeer() {
log.info('啤酒助手已在运行');
return;
}
started = setInterval(() => {
started = setInterval(async () => {
// 海外取消提醒
let { isTravelling, isAbroad } = getUserState();
let { isTravelling, isAbroad } = await Utils.getUserState();
if (isTravelling || isAbroad) {
loop.stop();
return;

View File

@ -1,6 +1,8 @@
import Device from "../../enum/Device";
// 用户设备类型 对应PC MOBILE TABLET
/**
* @deprecated
*/
export default function getDeviceType() {
return window.innerWidth >= 1000
? Device.PC : window.innerWidth <= 600 ? Device.MOBILE : Device.TABLET;

View File

@ -1,5 +1,6 @@
/**
* user
* @deprecated
* @return {PlayerInfo} rs
*/
export default function getPlayerInfo(): PlayerInfo {

View File

@ -1,4 +1,8 @@
// 得到一个两数之间的随机整数
/**
* @deprecated
* @param min
* @param max
*/
export default function getRandomInt(min: number, max: number): number {
min = Math.ceil(min);
max = Math.floor(max);

View File

@ -1,7 +1,9 @@
import UserScriptEngine from "../../enum/UserScriptEngine";
import WuhuBase from "../../class/WuhuBase";
// 用户脚本平台类型
/**
* @deprecated
*/
export default function getScriptEngine() {
let glob = WuhuBase.glob;
return glob.unsafeWindow ? UserScriptEngine.GM : glob.isPDA

View File

@ -4,7 +4,7 @@ import log from "./log";
/**
*
* @deprecated
* @returns {any}
* @returns {unknown}
*/
export default async function getSidebarData() {
let ret = {};

View File

@ -1,4 +1,6 @@
// 玩家状态
/**
* @deprecated
*/
export default function getUserState(): {} | any {
let obj = {};
let hdd = sessionStorage['headerData'];

View File

@ -1,8 +1,11 @@
/**
* @deprecated
*/
export default function getWhSettingObj(): WHSettings {
return JSON.parse(localStorage.getItem('wh_trans_settings')) || {}
}
export interface WHSettings {
interface WHSettings {
// TODO 补全
[key: string]: any;
}

View File

@ -1,4 +1,6 @@
// 药cd
/**
* @deprecated
*/
export default function getYaoCD(): string {
if (document.querySelector("#icon49-sidebar")) { // 0-10min
return '<10分'

View File

@ -1,8 +0,0 @@
/**
*
* @param {Number} ms
* @returns {Promise<unknown>}
*/
export default function sleep(ms) {
return new Promise(resolve => setTimeout(() => resolve(null), ms));
}

View File

@ -0,0 +1,108 @@
export default interface ISidebarData {
// TODO 补全
statusIcons?: unknown;
user?: {
userID: number,
name: string,
link: string,
money: {
value: number,
},
donator: boolean,
level: {
value: number,
upgradePossibility: boolean,
link: string,
}
};
bars?: {
energy: Bar,
nerve: Bar,
happy: Bar,
life: Bar,
chain: Bar,
};
areas?: {
[area: string]: Area
}
headerData?: HeaderData;
[key: string]: unknown;
}
interface Area {
"name": string,
"shortName": string,
"link": string,
"icon": string,
"styleStatus": string,
"linkOrder": number,
"highlightStatus": unknown,
"status": unknown,
"favorite": boolean,
"added": unknown,
"amount": unknown
}
interface Bar {
"name": string,
"timeToUpdate": number,
"amount": number,
"max": number,
"step": number,
"coolDown"?: number,
"endCoolDownTimestamp"?: number,
"timestampToUpdate": number,
"bonuses"?: number,
"link"?: string
}
interface HeaderData {
"user": {
"state": {
"status": "ok"|string,
"isLoggedIn": boolean,
"isDonator": boolean,
"isTravelling": boolean,
"isAbroad": boolean
},
"data": {
"hospitalStamp": number,
"jailStamp": number,
"logoutHash": string,
"userID": number,
"avatar": {
"isDefault": false,
"link": string
}
}
},
"serverState": {
"serverName": string,
"currentTime": number
},
"settings": {
"emptyHeader": boolean,
"emptyLinks": boolean,
"hideActivityLog": boolean,
"hideAdvancedSearch": boolean,
"hideSettingsDropdown": boolean,
"hasAccessToDarkMode": boolean
},
"logo": {
"name": string,
"title": string,
"country": string,
"darkModeLogo": string,
"additionalData": unknown[]
},
"links": Link[],
"headlines": unknown
}
interface Link {
"name": string,
"link": string,
"icon": string,
"inNewTab": boolean
}

View File

@ -0,0 +1,4 @@
export default interface IWHSettings {
// TODO 补全
[key: string]: any;
}

View File

@ -1,10 +1,10 @@
import getWhSettingObj from "./func/utils/getWhSettingObj";
import translateMain from "./func/translate/translateMain";
import common from "./common";
import urlMatch from "./urlMatch";
import { Common } from "./common";
import WuHuTornHelper from "./class/WuhuTornHelper";
import ZhongIcon from "./class/ZhongIcon";
import WuhuBase from "./class/WuhuBase";
import UrlPattern from "./urlMatch";
(function main() {
let started = new Date().getTime();
@ -20,9 +20,9 @@ import WuhuBase from "./class/WuhuBase";
if (getWhSettingObj()['transEnable']) translateMain(glob.href);
common();
Common.resolve();
urlMatch().then();
UrlPattern.resolve();
let runTime = new Date().getTime() - started;
ZhongIcon.ZhongNode.initTimer.innerHTML = `助手加载时间 ${ runTime }ms`;

File diff suppressed because it is too large Load Diff