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,7 +6,8 @@ import attackHelper from "./func/module/attackHelper";
import priceWatcherHandle from "./func/module/priceWatcherHandle";
import WuhuBase from "./class/WuhuBase";
export default function () {
export class Common extends WuhuBase {
static resolve() {
let glob = WuhuBase.glob;
// 价格监控
priceWatcherHandle(glob.isPDA, glob.PDA_APIKey);
@ -77,4 +78,5 @@ export default function () {
// 战斗相关
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`;

View File

@ -3,24 +3,22 @@ import cityFinder from "./func/module/cityFinder";
import WHNotify from "./func/utils/WHNotify";
import elementReady from "./func/utils/elementReady";
import setWhSetting from "./func/utils/setWhSetting";
import log from "./func/utils/log";
import { missionDict } from "./dictionary/translation";
import getTaskHint from "./func/translate/getTaskHint";
import getPlayerInfo from "./func/utils/getPlayerInfo";
import Device from "./enum/Device";
import getSidebarData from "./func/utils/getSidebarData";
import getDeviceType from "./func/utils/getDeviceType";
import addStyle from "./func/utils/addStyle";
import WuHuTornHelper from "./class/WuhuTornHelper";
import WuhuBase from "./class/WuhuBase";
import Utils from "./class/Utils";
import Log from "./class/Log";
class UrlPattern extends WuhuBase {
export default class UrlPattern extends WuhuBase {
constructor() {
super();
}
}
export default async function urlMatch() {
static resolve() {
let { href, beer } = WuhuBase.glob;
// 捡垃圾助手
if (href.includes('city.php') && getWhSettingObj()['cityFinder']) {
@ -164,7 +162,7 @@ $<span class="total">1,000</span>
});
// 监听啤酒购买
$(document).ajaxComplete((_, xhr, settings) => {
log.info({ xhr, settings });
Log.info({ xhr, settings });
let { data } = settings, { responseText } = xhr;
let response = JSON.parse(responseText);
if (data.includes('step=buyShopItem') && data.includes('ID=180') && response['success']) {
@ -622,7 +620,12 @@ margin: 0 0 3px;
if (xmasTownNotify) {
const chestTypeDict = { '1': '金', '2': '银', '3': '铜', };
const chestTypeColorDict = { '1': 'gold', '2': 'silver', '3': 'sandybrown', };
const lootTypeDict = { 'chests': '钥匙箱', 'gifts': '礼物', 'combinationChest': '密码箱', 'keys': '钥匙', };
const lootTypeDict = {
'chests': '钥匙箱',
'gifts': '礼物',
'combinationChest': '密码箱',
'keys': '钥匙',
};
const keyTypeDict = { 'b': '铜', 's': '银', 'g': '金', };
let dropHist = localStorage.getItem('wh-loot-store')
? JSON.parse(localStorage.getItem('wh-loot-store'))
@ -921,12 +924,12 @@ margin: 0 0 3px;
};
addEventListener('hashchange', rw_raider);
await rw_raider();
rw_raider().then();
}
// 特定代码块
if (getPlayerInfo()['userID'] === 2687093 && getDeviceType() === Device.PC) {
await getSidebarData();
if (Utils.getPlayerInfo()['userID'] === 2687093 && getDeviceType() === Device.PC) {
getSidebarData().then(() => {
let item = document.getElementById('nav-items');
if (item) {
let copy = item.cloneNode(true);
@ -940,5 +943,7 @@ margin: 0 0 3px;
span.style.color = 'white';
item.after(copy);
}
});
}
}
}