diff --git a/package-lock.json b/package-lock.json
index f956be6..2c02e7a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -30,6 +30,14 @@
"js-tokens": "^4.0.0"
}
},
+ "@rollup/plugin-json": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmmirror.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz",
+ "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==",
+ "requires": {
+ "@rollup/pluginutils": "^3.0.8"
+ }
+ },
"@rollup/plugin-typescript": {
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.5.0.tgz",
@@ -44,7 +52,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
- "dev": true,
"requires": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
@@ -54,8 +61,7 @@
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
- "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
- "dev": true
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw=="
},
"@types/jquery": {
"version": "3.5.14",
@@ -122,8 +128,7 @@
"estree-walker": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
- "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
- "dev": true
+ "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg=="
},
"fsevents": {
"version": "2.3.2",
@@ -216,8 +221,7 @@
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
"resolve": {
"version": "1.22.1",
@@ -297,7 +301,8 @@
"uglify-js": {
"version": "3.16.1",
"resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.16.1.tgz",
- "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ=="
+ "integrity": "sha512-X5BGTIDH8U6IQ1TIRP62YC36k+ULAa1d59BxlWvPUJ1NkW5L3FwcGfEzuVvGmhJFBu0YJ5Ge25tmRISqCmLiRQ==",
+ "dev": true
}
}
}
diff --git a/package.json b/package.json
index 4bb6b9f..43bff9f 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,7 @@
{
"name": "wuhu-torn-helper",
"version": "0.5.1",
- "dependencies": {
- },
+ "dependencies": {},
"scripts": {
"release": "npm run minify && node build.js",
"minify": "uglifyjs misc/wuhu-torn-helper.js -o release.min.user.js -m",
@@ -14,6 +13,7 @@
"@rollup/plugin-typescript": "^8.5.0",
"@types/jquery": "^3.5.14",
"@types/node": "^18.0.6",
+ "@rollup/plugin-json": "^4.1.0",
"rollup": "^2.79.0",
"rollup-plugin-serve": "^2.0.1",
"tslib": "^2.4.0",
diff --git a/rollup.config.js b/rollup.config.js
index 2644968..9c10c6e 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,5 @@
import typescript from "@rollup/plugin-typescript";
+import json from "@rollup/plugin-json";
export default {
input: 'src/index.ts',
@@ -7,6 +8,7 @@ export default {
},
plugins: [
typescript(),
+ json(),
// uglify(),
],
};
diff --git a/src/class/Application.ts b/src/class/Application.ts
index 98d31d9..fc3d04f 100644
--- a/src/class/Application.ts
+++ b/src/class/Application.ts
@@ -1,8 +1,8 @@
import WuhuBase from "./WuhuBase";
import WuHuTornHelper from "./WuhuTornHelper";
import ZhongIcon from "./ZhongIcon";
-import { Common } from "../common";
-import UrlPattern from "../urlMatch";
+import { Common } from "./Common";
+import UrlPattern from "./UrlMatch";
import WuhuConfig from "./WuhuConfig";
import translateMain from "../func/translate/translateMain";
@@ -23,7 +23,7 @@ export default class Application {
if (WuhuConfig.get('transEnable')) translateMain(glob.href);
- let runTime = (performance.now() - started) | 0;
+ let runTime: number = (performance.now() - started) | 0;
ZhongIcon.ZhongNode.initTimer.innerHTML = `助手加载时间 ${ runTime }ms`;
}
}
\ No newline at end of file
diff --git a/src/common.ts b/src/class/Common.ts
similarity index 89%
rename from src/common.ts
rename to src/class/Common.ts
index 52eccb5..1ce8b20 100644
--- a/src/common.ts
+++ b/src/class/Common.ts
@@ -1,10 +1,10 @@
-import elementReady from "./func/utils/elementReady";
-import depoHelper from "./func/module/depoHelper";
-import travelHelper from "./func/module/travelHelper";
-import attackHelper from "./func/module/attackHelper";
-import priceWatcherHandle from "./func/module/priceWatcherHandle";
-import WuhuBase from "./class/WuhuBase";
-import WuhuConfig from "./class/WuhuConfig";
+import elementReady from "../func/utils/elementReady";
+import depoHelper from "../func/module/depoHelper";
+import travelHelper from "../func/module/travelHelper";
+import attackHelper from "../func/module/attackHelper";
+import priceWatcherHandle from "../func/module/priceWatcherHandle";
+import WuhuBase from "./WuhuBase";
+import WuhuConfig from "./WuhuConfig";
export class Common extends WuhuBase {
static resolve() {
diff --git a/src/class/Log.ts b/src/class/Log.ts
index 5d89386..d63ad5d 100644
--- a/src/class/Log.ts
+++ b/src/class/Log.ts
@@ -1,12 +1,16 @@
export default class Log {
static info(...o): void {
if (this.debug()) {
- console.log('[WH]', this.getTime(), ...o)
+ console.log('[WH] IFO', this.getTime(), ...o)
}
}
static error(...o): void {
- (this.debug()) && (console.error('[WH]', this.getTime(), ...o))
+ (this.debug()) && (console.error('[WH] ERR', this.getTime(), ...o))
+ }
+
+ static warn(...o): void {
+ (this.debug()) && (console.warn('[WH] WRN', this.getTime(), ...o))
}
static debug(): boolean {
diff --git a/src/urlMatch.ts b/src/class/UrlMatch.ts
similarity index 98%
rename from src/urlMatch.ts
rename to src/class/UrlMatch.ts
index 66c316b..0747040 100644
--- a/src/urlMatch.ts
+++ b/src/class/UrlMatch.ts
@@ -1,15 +1,15 @@
-import getWhSettingObj from "./func/utils/getWhSettingObj";
-import cityFinder from "./func/module/cityFinder";
-import elementReady from "./func/utils/elementReady";
-import { missionDict } from "./dictionary/translation";
-import getTaskHint from "./func/translate/getTaskHint";
-import Device from "./enum/Device";
-import WuhuBase from "./class/WuhuBase";
-import Utils from "./class/utils/Utils";
-import Log from "./class/Log";
-import WuhuConfig from "./class/WuhuConfig";
-import Alert from "./class/utils/Alert";
-import InfoUtils from "./class/utils/InfoUtils";
+import getWhSettingObj from "../func/utils/getWhSettingObj";
+import cityFinder from "../func/module/cityFinder";
+import elementReady from "../func/utils/elementReady";
+import { missionDict } from "../dictionary/translation";
+import getTaskHint from "../func/translate/getTaskHint";
+import Device from "../enum/Device";
+import WuhuBase from "./WuhuBase";
+import Utils from "./utils/Utils";
+import Log from "./Log";
+import WuhuConfig from "./WuhuConfig";
+import Alert from "./utils/Alert";
+import InfoUtils from "./utils/InfoUtils";
export default class UrlPattern extends WuhuBase {
constructor() {
diff --git a/src/class/WuhuConfig.ts b/src/class/WuhuConfig.ts
index 6e3b200..3d3f148 100644
--- a/src/class/WuhuConfig.ts
+++ b/src/class/WuhuConfig.ts
@@ -16,7 +16,7 @@ export default class WuhuConfig extends WuhuBase {
if (isNotify)
new Alert('已保存设置')
new Promise(() => callback()).then();
- Log.info('值变更:' + prev + ' -> ' + val);
+ Log.info(`值变更:[${ key }] ${ prev } -> ${ val }`);
return val;
}
}
\ No newline at end of file
diff --git a/src/class/WuhuTornHelper.ts b/src/class/WuhuTornHelper.ts
index 134bf6e..0cd3575 100644
--- a/src/class/WuhuTornHelper.ts
+++ b/src/class/WuhuTornHelper.ts
@@ -5,6 +5,7 @@ import TravelItem from "./action/TravelItem";
import Global from "./Global";
import Log from "./Log";
import WuhuConfig from "./WuhuConfig";
+import * as css from "../json/css.json"
export default class WuHuTornHelper extends WuhuBase {
@@ -12,15 +13,19 @@ export default class WuHuTornHelper extends WuhuBase {
Log.info('WuHuTornHelper初始化');
WuhuBase.glob = Global.getInstance() as Global;
let glob = WuHuTornHelper.glob;
- glob.fStock = TravelItem.getInstance() as TravelItem;
+ glob.fStock = TravelItem.getInstance();
Log.info('fStock: ', glob.fStock)
// 请求通知权限
- if (window.Notification && window.Notification.permission !== 'granted') {
- window.alert("芜湖助手即将请求浏览器通知权限……");
- window.Notification.requestPermission().then();
+ if (window.Notification) {
+ if (window.Notification.permission !== 'granted') {
+ Log.info("芜湖助手即将请求浏览器通知权限……");
+ window.Notification.requestPermission().then();
+ } else {
+ Log.warn('没有浏览器通知权限');
+ }
} else {
- Log.info({ Notification });
+ Log.error('当前浏览器不支持系统通知');
}
// 扩展正则方法
@@ -51,191 +56,7 @@ export default class WuHuTornHelper extends WuhuBase {
return clone;
};
- Utils.addStyle(`
-.wh-hide{display:none;}
-#wh-trans-icon{
-user-select:none;
-display: inline-block;
-position: fixed;
-top:5px;
-left:5px;
-z-index:100010;
-border-radius:4px;
-max-width: 220px;
-box-shadow: 0 0 3px 1px #8484848f;
-}
-div#effectiveness-wrap{overflow-y:hidden;}
-@media screen and (max-width: 600px) {
- #wh-trans-icon{top:0;left:112px;}
- /* 冰蛙公司效率表 */
- div#effectiveness-wrap {
- margin-left: -80px;
- margin-right: -76px;
- }
-}
-#wh-trans-icon select{width:110px;}
-#wh-trans-icon a {
-text-decoration: none;
-color: #006599;
-background: none;
-}
-#wh-trans-icon:not(.wh-icon-expanded):hover {background: #f8f8f8;}
-#wh-trans-icon button{
-margin:0;
-padding:0;
-border:0;
-cursor:pointer;
-}
-#wh-inittimer{margin-top:6px;color:#b0b0b0;}
-#wh-gSettings div{margin: 4px 0;}
-#wh-trans-icon .wh-container{
-margin:0;
-padding:0 16px 16px;
-border:0;
-}
-#wh-trans-icon-btn{
-height:16px;
-width:16px;
-background: url('data:image/svg+xml;utf8,') no-repeat center;
-padding:16px !important;
-}
-#wh-trans-icon .wh-container{display:none;}
-#wh-trans-icon.wh-icon-expanded .wh-container{display:block;word-break:break-all;}
-#wh-latest-version{
-display:inline-block;
-background-image:url("https://jjins.github.io/t2i/version.png?${ performance.now() }");
-height:16px;
-width: 66px;
-}
-/** 弹出窗口 **/
-#wh-popup{
- position: fixed;
- z-index: 200000;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: #00000090;
- color:#333;
-}
-div#wh-popup::after {
- content: '点击空白处关闭';
- display: block;
- color: #ffffffdb;
- text-align: center;
- font-size: 14px;
- line-height: 22px;
-}
-#wh-popup-container{
- max-width: 568px;
- margin: 5em auto 0;
- background: #d7d7d7;
- min-height: 120px;
- box-shadow: 0 0 5px 1px #898989;
- border-radius: 4px;
-}
-#wh-popup-title p{
- padding: 1em 0;
- font-size: 16px;
- font-weight: bold;
- text-align: center;
-}
-/** 弹出窗口的内容 **/
-#wh-popup-cont{
- padding: 0 1em 1em;
- max-height: 30em;
- overflow-y: auto;
- font-size:14px;
- line-height: 16px;
-}
-#wh-popup-cont .gSetting > div{
- display: inline-block;
- width: 47%;
- margin: 2px 0;
-}
-#wh-popup-cont .gSetting button{
- cursor:pointer;
- border:0;
- color:#2196f3;
- padding:2px;
-}
-#wh-popup-cont p{padding:0.25em 0;}
-#wh-popup-cont a{color:red;text-decoration:none;}
-#wh-popup-cont li{margin:4px 0;}
-#wh-popup-cont h4{margin:0;padding: 0.5em 0;}
-#wh-popup-cont button{
- margin: 0 4px 0 0;
- padding: 5px 8px;
- border: solid 2px black;
- color: black;
- border-radius: 3px;
-}
-#wh-popup-cont button[disabled]{opacity: 0.5;}
-#wh-popup-cont input{
- padding: 2px;
- text-align: center;
- border: 1px solid #fff0;
- border-radius: 5px;
- margin:1px 2px;
-}
-#wh-popup-cont input:focus{border-color:blue;}
-#wh-popup-cont table{width:100%;border-collapse:collapse;border:1px solid;}
-#wh-popup-cont td, #wh-popup-cont th{border-collapse:collapse;padding:4px;border:1px solid;}
-.wh-display-none{display:none !important;}
-#wh-gym-info-cont{
- background-color: #363636;
- color: white;
- padding: 8px;
- font-size: 15px;
- border-radius: 4px;
- text-shadow: 0 0 2px black;
- background-image: linear-gradient(90deg,transparent 50%,rgba(0,0,0,.07) 0);
- background-size: 4px;
- line-height: 20px;
-}
-#wh-gym-info-cont button{
-cursor:pointer;
-}
-#wh-notify {
- display: inline-block;
- position: fixed;
- top: 0;
- left: calc(50% - 180px);
- width: 360px;
- z-index: 9999990;
- color:#333;
-}
-#wh-notify a{
-color:red;
-text-decoration:none;
-}
-#wh-notify .wh-notify-item {
- /*height: 50px;*/
- background: rgb(239 249 255 / 90%);
- border-radius: 2px;
- margin: 0.5em 0 0 0;
- box-shadow: 0 0 5px 0px #959595;
-}
-#wh-notify .wh-notify-item:hover {
- background: rgb(239 249 255 / 98%);
-}
-#wh-notify .wh-notify-item .wh-notify-bar {
- height:2px;
- background:#2196f3;
-}
-#wh-notify .wh-notify-item .wh-notify-close {
- float:right;
- padding:0;
-width:16px;height:16px;
-background:url('data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%201024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M923%20571H130.7c-27.6%200-50-22.4-50-50s22.4-50%2050-50H923c27.6%200%2050%2022.4%2050%2050s-22.4%2050-50%2050z%22%20fill%3D%22%232196f3%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E') no-repeat center;
-background-size:100%;
-margin: 6px 6px 0 0;
-cursor: pointer;
-}
-#wh-notify .wh-notify-item .wh-notify-msg {
- padding:12px;
-}
-`);
+ Utils.addStyle(css.css);
// 测试用
if ('Ok' !== localStorage['WHTEST']) {
diff --git a/src/class/ZhongIcon.ts b/src/class/ZhongIcon.ts
index 849e589..515610d 100644
--- a/src/class/ZhongIcon.ts
+++ b/src/class/ZhongIcon.ts
@@ -1,8 +1,7 @@
-import popupMsg from "../func/utils/popupMsg";
+import popupMsg from "../func/utils/@deprecated/popupMsg";
import forStock from "../func/utils/forStock";
import doQuickFly from "../func/module/doQuickFly";
import loadGS from "../func/module/loadGS";
-import loading_gif_html from "../func/utils/loading_gif_html";
import adHelper from "../func/module/adHelper";
import safeKeeper from "../func/module/safeKeeper";
import mdParse from "../func/utils/MarkdownParser";
@@ -15,6 +14,9 @@ import Utils from "./utils/Utils";
import WuhuConfig from "./WuhuConfig";
import Alert from "./utils/Alert";
import IGlobal from "../interface/IGlobal";
+import Test from "../test/Test";
+import * as EVENTS from "../json/event.json";
+import * as FEST from "../json/fest.json";
export default class ZhongIcon extends WuhuBase {
static ZhongNode: MyHTMLElement = null;
@@ -33,7 +35,7 @@ export default class ZhongIcon extends WuhuBase {
input.id = domId;
input.checked = WuhuConfig.get(dictName);
input.onchange = e => {
- WuhuConfig.set(dictName, (e.target as HTMLInputElement).checked);
+ WuhuConfig.set(dictName, (e.target as HTMLInputElement).checked, true);
if (setting.changeEv) setting.changeEv(e);
};
label.innerHTML = domText;
@@ -84,6 +86,7 @@ export default class ZhongIcon extends WuhuBase {
}
}
// 移动节点
+ Log.info('创建node', new_node);
return root_node.appendChild(new_node);
}
@@ -228,24 +231,7 @@ export default class ZhongIcon extends WuhuBase {
let fest_date_html = ': ';
{
// 节日字典
- const dict = {
- '0105': { name: '周末自驾游', eff: '获得双倍的赛车点数与赛车技能等级增益' },
- '0114': { name: '情人节', eff: '使用爱情果汁(Love Juice)后获得降低攻击与复活的能量消耗的增益' },
- '0204': { name: '员工激励日', eff: '获得三倍的工作点数与火车增益' },
- '0217': { name: '圣帕特里克日', eff: '获得双倍的酒类效果增益,城市中可以捡到绿色世涛(Green Stout)' },
- '0320': { name: '420日', eff: '获得三倍的大麻(Cannabis)效果增益' },
- '0418': { name: '博物馆日', eff: '获得10%提高的博物馆PT兑换增益' },
- '0514': { name: '世界献血日', eff: '获得减半的抽血CD和扣血增益' },
- '0611': { name: '世界人口日', eff: '获得双倍的通过攻击获取的经验的增益' },
- '0629': { name: '世界老虎日', eff: '获得5倍的狩猎技能增益' },
- '0705': { name: '国际啤酒节', eff: '获得5倍的啤酒物品效果增益' },
- '0827': { name: '旅游节', eff: '获得双倍的起飞后物品携带容量增益' },
- '0915': { name: '饮料节', eff: '获得双倍的能量饮料效果增益' },
- '1014': { name: '世界糖尿病日', eff: '获得三倍的糖类效果增益' },
- '1015': { name: '周年庆', eff: '左上角的TORN图标可以食用' },
- '1025': { name: '黑色星期五', eff: '某些商家将提供1元购活动' },
- '1114': { name: '住院日', eff: '获得降低75%的住院时间增益' },
- };
+ const dict = FEST.val;
menu_list.fest_date_dict = dict;
menu_list.fest_date_list = Object.keys(dict);
const formatMMDD = (m, d) => {
@@ -284,43 +270,7 @@ export default class ZhongIcon extends WuhuBase {
let eventObj: EventWrapper = {
onEv: false,
daysLeft: Infinity,
- events: [
- {
- start: [0, 17, 8], end: [0, 24, 8],
- name: '捡垃圾周',
- eff: '获得捡垃圾概率提升的增益',
- },
- {
- start: [3, 5, 20], end: [3, 25, 20],
- name: '复活节狩猎',
- eff: '复活节彩蛋会随机出现,集齐10个可兑换金蛋和一个独特的头像框(章)。',
- },
- {
- start: [5, 20, 20], end: [5, 29, 20],
- name: '狗牌',
- eff: '击败其他玩家以获得狗牌,小心保护你的狗牌。',
- },
- {
- start: [6, 5, 20], end: [6, 25, 20],
- name: '托恩先生和托恩女士',
- eff: '上传你的真实图片,然后拿章',
- },
- {
- start: [8, 5, 20], end: [8, 23, 20],
- name: '大逃杀',
- eff: '加入特定队伍后,攻击其他队伍玩家,存活下来的3个队伍可以拿章',
- },
- {
- start: [9, 25, 20], end: [10, 1, 20],
- name: '不给糖就捣蛋',
- eff: '买篮子之后攻击其他玩家后会随机掉落糖果,可用于兑换许多高价值物品',
- },
- {
- start: [11, 14, 20], end: [11, 31, 20],
- name: '圣诞小镇',
- eff: '在小镇中闲逛来获取随机掉落的物品',
- },
- ],
+ events: EVENTS,
};
menu_list.events = eventObj.events;
eventObj.events.forEach((obj, index) => {
@@ -741,7 +691,7 @@ background-size: 100% auto !important;
clickFunc: function () {
// 弹出小窗口
const ifHTML = ``;
- const popup_insert = `
加载中请稍后${ loading_gif_html() }
`;
+ const popup_insert = `加载中请稍后${ Utils.loading_gif_html() }
`;
const $popup = popupMsg(popup_insert, '小窗快速犯罪');
// 运行状态node
let loading_node = $popup.querySelector('p:first-of-type');
@@ -962,7 +912,7 @@ color:black;
clickFunc: async function () {
Log.info('测试开始');
-
+ Test.getInstance().test();
Log.info('测试结束');
},
diff --git a/src/class/action/TravelItem.ts b/src/class/action/TravelItem.ts
index 5eec14a..a90b5d9 100644
--- a/src/class/action/TravelItem.ts
+++ b/src/class/action/TravelItem.ts
@@ -1,8 +1,8 @@
import Utils from "../utils/Utils";
-import WuhuBaseAction from "./WuhuBaseAction";
import Log from "../Log";
+import WuhuBase from "../WuhuBase";
-export default class TravelItem extends WuhuBaseAction {
+export default class TravelItem extends WuhuBase {
obj: any = null;
res: any = null;
@@ -25,4 +25,7 @@ export default class TravelItem extends WuhuBaseAction {
}
return this.obj;
}
+
+ public clickHandler() {
+ }
}
\ No newline at end of file
diff --git a/src/class/action/WindowActiveState.ts b/src/class/action/WindowActiveState.ts
index 88666cb..e3cc50b 100644
--- a/src/class/action/WindowActiveState.ts
+++ b/src/class/action/WindowActiveState.ts
@@ -1,7 +1,7 @@
import uuidv4 from "../../func/utils/uuidv4";
-import WuhuBaseAction from "./WuhuBaseAction";
+import WuhuBase from "../WuhuBase";
-export default class WindowActiveState extends WuhuBaseAction {
+export default class WindowActiveState extends WuhuBase {
isFocus = false;
uuid = uuidv4();
diff --git a/src/class/action/WuhuBaseAction.ts b/src/class/action/WuhuBaseAction.ts
index 7dbd6b6..e793b37 100644
--- a/src/class/action/WuhuBaseAction.ts
+++ b/src/class/action/WuhuBaseAction.ts
@@ -1,15 +1,15 @@
-import WuhuBase from "../WuhuBase";
-
-export default class WuhuBaseAction extends WuhuBase {
- name: string
-
- protected constructor() {
- super();
- }
-
- // static getInstance(this) {
- // if (!this.instance)
- // this.instance = new this();
- // return this.instance;
- // }
-}
\ No newline at end of file
+// import WuhuBase from "../WuhuBase";
+//
+// export default class WuhuBaseAction extends WuhuBase {
+// name: string
+//
+// protected constructor() {
+// super();
+// }
+//
+// // static getInstance(this) {
+// // if (!this.instance)
+// // this.instance = new this();
+// // return this.instance;
+// // }
+// }
\ No newline at end of file
diff --git a/src/class/provider/Starter.ts b/src/class/provider/Starter.ts
index dc44613..b0c9e6c 100644
--- a/src/class/provider/Starter.ts
+++ b/src/class/provider/Starter.ts
@@ -2,8 +2,9 @@ export default class Starter {
public static run(T): void {
try {
new T().main();
- } catch (e) {
- console.log(e);
+ } catch (error) {
+ console.log(error);
+ console.log('trace: ', JSON.stringify({ error }));
}
}
}
\ No newline at end of file
diff --git a/src/class/utils/Popup.ts b/src/class/utils/Popup.ts
new file mode 100644
index 0000000..5c5d6f0
--- /dev/null
+++ b/src/class/utils/Popup.ts
@@ -0,0 +1,46 @@
+import WuhuBase from "../WuhuBase";
+
+export default class Popup extends WuhuBase {
+ private readonly container: HTMLElement = null;
+ private readonly node: HTMLElement = null;
+
+ constructor(innerHTML: string, title: string = '芜湖助手') {
+ super();
+ if (Popup.glob.popup_node) Popup.glob.popup_node.close();
+ const popup = document.createElement('div');
+ popup.id = 'wh-popup';
+ popup.innerHTML = ``;
+ document.body.append(popup);
+ popup.addEventListener('click', e => {
+ e.stopImmediatePropagation();
+ if (e.target === popup) this.close();
+ });
+ this.container = popup;
+ this.node = popup.querySelector('#wh-popup-cont');
+ this.hideChat();
+ }
+
+ public close() {
+ this.container.remove();
+ this.showChat();
+ }
+
+ public getElement(): HTMLElement {
+ return this.node;
+ }
+
+ private hideChat() {
+ document.querySelector('#chatRoot').classList.add('wh-hide');
+ }
+
+ private showChat() {
+ document.querySelector('#chatRoot').classList.remove('wh-hide');
+ }
+
+ private getInstance() {
+ }
+}
\ No newline at end of file
diff --git a/src/class/utils/Utils.ts b/src/class/utils/Utils.ts
index 9024885..af49170 100644
--- a/src/class/utils/Utils.ts
+++ b/src/class/utils/Utils.ts
@@ -4,6 +4,7 @@ import Log from "../Log";
import Device from "../../enum/Device";
import AjaxFetchOption from "../../interface/AjaxFetchOption";
import Alert from "./Alert";
+import * as json from "../../json/loading.json";
export default class Utils extends WuhuBase {
static getScriptEngine() {
@@ -172,4 +173,8 @@ export default class Utils extends WuhuBase {
}
Log.info('CSS规则已添加', element);
}
+
+ static loading_gif_html(): string {
+ return json.html;
+ }
}
\ No newline at end of file
diff --git a/src/func/module/adHelper.ts b/src/func/module/adHelper.ts
index eb32cfa..7277a6f 100644
--- a/src/func/module/adHelper.ts
+++ b/src/func/module/adHelper.ts
@@ -1,4 +1,4 @@
-import popupMsg from "../utils/popupMsg";
+import popupMsg from "../utils/@deprecated/popupMsg";
// 传单助手
export default function adHelper() {
diff --git a/src/func/module/landedRedirect.ts b/src/func/module/landedRedirect.ts
index 5a5db69..23bcd1b 100644
--- a/src/func/module/landedRedirect.ts
+++ b/src/func/module/landedRedirect.ts
@@ -1,6 +1,6 @@
import getWhSettingObj from "../utils/getWhSettingObj";
import setWhSetting from "../utils/setWhSetting";
-import popupMsg from "../utils/popupMsg";
+import popupMsg from "../utils/@deprecated/popupMsg";
// 落地转跳设置
export default function landedRedirect() {
diff --git a/src/func/module/safeKeeper.ts b/src/func/module/safeKeeper.ts
index e60b671..84f4908 100644
--- a/src/func/module/safeKeeper.ts
+++ b/src/func/module/safeKeeper.ts
@@ -1,4 +1,4 @@
-import popupMsg from "../utils/popupMsg";
+import popupMsg from "../utils/@deprecated/popupMsg";
import Alert from "../../class/utils/Alert";
import InfoUtils from "../../class/utils/InfoUtils";
import Log from "../../class/Log";
diff --git a/src/func/utils/loading_gif_html.ts b/src/func/utils/@deprecated/loading_gif_html.ts
similarity index 97%
rename from src/func/utils/loading_gif_html.ts
rename to src/func/utils/@deprecated/loading_gif_html.ts
index b2f5756..acaa72d 100644
--- a/src/func/utils/loading_gif_html.ts
+++ b/src/func/utils/@deprecated/loading_gif_html.ts
@@ -1,4 +1,6 @@
-// 返回一个加载中gif图形HTML
+/**
+ * @deprecated
+ */
export default function loading_gif_html(): string {
const gif_base64 = `data:image/svg+xml,%3Csvg t='1656084442571' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3924' width='14' height='14'%3E%3Cpath d='M512.032002 237.105181a29.310168 29.310168 0 0 1-29.310168-29.246172V29.310168a29.310168 29.310168 0 0 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 237.105181zM512.032002 1024a29.310168 29.310168 0 0 1-29.310168-29.310168v-178.484845a29.310168 29.310168 0 1 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 1024z m482.657834-482.657834h-178.484845a29.310168 29.310168 0 1 1 0-58.620336h178.548841a29.310168 29.310168 0 1 1 0 58.620336z m-786.830823 0H29.310172a29.310168 29.310168 0 0 1 0-58.620336h178.548841a29.310168 29.310168 0 0 1 0 58.620336z m519.263546-215.090557a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412 41.405412l-126.264108 126.264108a29.182176 29.182176 0 0 1-20.670708 8.575464zM170.741333 882.568839a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.246172 29.246172 0 1 1 41.405412 41.405412L191.412041 874.057371a29.182176 29.182176 0 0 1-20.670708 8.575464z m682.581338 0a29.182176 29.182176 0 0 1-20.670708-8.575464l-126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688zM297.005441 326.251609a29.182176 29.182176 0 0 1-20.670708-8.575464L150.006629 191.412037a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688z' p-id='3925'%3E%3C/path%3E%3C/svg%3E`
return `
`;
diff --git a/src/func/utils/popupMsg.ts b/src/func/utils/@deprecated/popupMsg.ts
similarity index 83%
rename from src/func/utils/popupMsg.ts
rename to src/func/utils/@deprecated/popupMsg.ts
index 3cdcfbd..b61c426 100644
--- a/src/func/utils/popupMsg.ts
+++ b/src/func/utils/@deprecated/popupMsg.ts
@@ -1,10 +1,7 @@
-import WuhuBase from "../../class/WuhuBase";
+import WuhuBase from "../../../class/WuhuBase";
/**
- * 弹出窗口
- * @param {String} innerHTML 内容html string
- * @param {String} title 弹窗标题
- * @returns {null|Element}
+ * @deprecated 使用new Popup()
*/
export default function popupMsg(innerHTML, title = '芜湖助手') {
let glob = WuhuBase.glob;
diff --git a/src/func/utils/forStock.ts b/src/func/utils/forStock.ts
index bc43821..0947ad3 100644
--- a/src/func/utils/forStock.ts
+++ b/src/func/utils/forStock.ts
@@ -1,62 +1,19 @@
import UserScriptEngine from "../../enum/UserScriptEngine";
-import getScriptEngine from "./getScriptEngine";
-import popupMsg from "./popupMsg";
-import loading_gif_html from "./loading_gif_html";
import WuhuBase from "../../class/WuhuBase";
+import Utils from "../../class/utils/Utils";
+import InfoUtils from "../../class/utils/InfoUtils";
+import Popup from "../../class/utils/Popup";
+import * as FILTER from "../../json/ForStockItemFilter.json";
// 海外库存
export default async function forStock() {
- if (getScriptEngine() === UserScriptEngine.RAW) {
+ if (InfoUtils.getInstance().getScriptEngine() === UserScriptEngine.RAW) {
const insert = `
`;
- popupMsg(insert, '飞花库存');
+ new Popup(insert, '飞花库存');
} else {
- const popup = popupMsg(`请稍后${ loading_gif_html() }`, '飞花库存');
+ const popup = new Popup(`请稍后${ Utils.loading_gif_html() }`, '飞花库存');
let table = `| 目的地 - 更新时间 | 库存 |
`;
- const dest = [
- {
- name: 'mex', show: '墨西哥',
- stocks: { 'Dahlia': '花', 'Jaguar Plushie': '偶' }
- },
- {
- name: 'cay', show: '开曼',
- stocks: { 'Banana Orchid': '花', 'Stingray Plushie': '偶' }
- },
- {
- name: 'can', show: '加拿大',
- stocks: { 'Crocus': '花', 'Wolverine Plushie': '偶' }
- },
- {
- name: 'haw', show: '夏威夷',
- stocks: { 'Orchid': '花', 'Large Suitcase': '大箱' }
- },
- {
- name: 'uni', show: '嘤国',
- stocks: { 'Heather': '花', 'Red Fox Plushie': '赤狐', 'Nessie Plushie': '水怪' }
- },
- {
- name: 'arg', show: '阿根廷',
- stocks: { 'Ceibo Flower': '花', 'Monkey Plushie': '偶', 'Tear Gas': '催泪弹' },
- },
- {
- name: 'swi', show: '瑞士',
- stocks: { 'Edelweiss': '花', 'Chamois Plushie': '偶' },
- },
- {
- name: 'jap', show: '日本',
- stocks: { 'Cherry Blossom': '花' },
- },
- {
- name: 'chi', show: '祖国',
- stocks: { 'Peony': '花', 'Panda Plushie': '偶' },
- },
- {
- name: 'uae', show: '迪拜',
- stocks: { 'Tribulus Omanense': '花', 'Camel Plushie': '偶' },
- },
- {
- name: 'sou', show: '南非',
- stocks: { 'African Violet': '花', 'Lion Plushie': '偶', 'Xanax': 'XAN' },
- }];
+ const dest = FILTER;
const now = new Date();
const res = await WuhuBase.glob.fStock.get();
if (!res['stocks']) return;
@@ -77,6 +34,6 @@ export default async function forStock() {
table += '';
});
table += '
';
- popup.innerHTML = table;
+ popup.getElement().innerHTML = table;
}
}
\ No newline at end of file
diff --git a/src/json/ForStockItemFilter.json b/src/json/ForStockItemFilter.json
new file mode 100644
index 0000000..03936b9
--- /dev/null
+++ b/src/json/ForStockItemFilter.json
@@ -0,0 +1,92 @@
+[
+ {
+ "name": "mex",
+ "show": "墨西哥",
+ "stocks": {
+ "Dahlia": "花",
+ "Jaguar Plushie": "偶"
+ }
+ },
+ {
+ "name": "cay",
+ "show": "开曼",
+ "stocks": {
+ "Banana Orchid": "花",
+ "Stingray Plushie": "偶"
+ }
+ },
+ {
+ "name": "can",
+ "show": "加拿大",
+ "stocks": {
+ "Crocus": "花",
+ "Wolverine Plushie": "偶"
+ }
+ },
+ {
+ "name": "haw",
+ "show": "夏威夷",
+ "stocks": {
+ "Orchid": "花",
+ "Large Suitcase": "大箱"
+ }
+ },
+ {
+ "name": "uni",
+ "show": "嘤国",
+ "stocks": {
+ "Heather": "花",
+ "Red Fox Plushie": "赤狐",
+ "Nessie Plushie": "水怪"
+ }
+ },
+ {
+ "name": "arg",
+ "show": "阿根廷",
+ "stocks": {
+ "Ceibo Flower": "花",
+ "Monkey Plushie": "偶",
+ "Tear Gas": "催泪弹"
+ }
+ },
+ {
+ "name": "swi",
+ "show": "瑞士",
+ "stocks": {
+ "Edelweiss": "花",
+ "Chamois Plushie": "偶"
+ }
+ },
+ {
+ "name": "jap",
+ "show": "日本",
+ "stocks": {
+ "Cherry Blossom": "花"
+ }
+ },
+ {
+ "name": "chi",
+ "show": "祖国",
+ "stocks": {
+ "Peony": "花",
+ "Panda Plushie": "偶"
+ }
+ },
+ {
+ "name": "uae",
+ "show": "迪拜",
+ "stocks": {
+ "Tribulus Omanense": "花",
+ "Camel Plushie": "偶"
+ }
+ },
+ {
+ "name": "sou",
+ "show": "南非",
+ "stocks": {
+ "African Violet": "花",
+ "Lion Plushie": "偶",
+ "Xanax": "XAN"
+ }
+ }
+]
\ No newline at end of file
diff --git a/src/json/css.json b/src/json/css.json
new file mode 100644
index 0000000..dd09908
--- /dev/null
+++ b/src/json/css.json
@@ -0,0 +1,3 @@
+{
+ "css": ".wh-hide{display:none;}#wh-trans-icon{user-select:none;display: inline-block;position: fixed;top:5px;left:5px;z-index:100010;border-radius:4px;max-width: 220px;box-shadow: 0 0 3px 1px #8484848f;}div#effectiveness-wrap{overflow-y:hidden;}@media screen and (max-width: 600px) { #wh-trans-icon{top:0;left:112px;} /* 冰蛙公司效率表 */ div#effectiveness-wrap { margin-left: -80px; margin-right: -76px; }}#wh-trans-icon select{width:110px;}#wh-trans-icon a {text-decoration: none;color: #006599;background: none;}#wh-trans-icon:not(.wh-icon-expanded):hover {background: #f8f8f8;}#wh-trans-icon button{margin:0;padding:0;border:0;cursor:pointer;}#wh-inittimer{margin-top:6px;color:#b0b0b0;}#wh-gSettings div{margin: 4px 0;}#wh-trans-icon .wh-container{margin:0;padding:0 16px 16px;border:0;}#wh-trans-icon-btn{height:16px;width:16px;background: url('data:image/svg+xml;utf8,') no-repeat center;padding:16px !important;}#wh-trans-icon .wh-container{display:none;}#wh-trans-icon.wh-icon-expanded .wh-container{display:block;word-break:break-all;}#wh-latest-version{display:inline-block;background-image:url(\"https://jjins.github.io/t2i/version.png?${ performance.now() }\");height:16px;width: 66px;}/** 弹出窗口 **/#wh-popup{ position: fixed; z-index: 200000; top: 0; left: 0; width: 100%; height: 100%; background: #00000090; color:#333;}div#wh-popup::after { content: '点击空白处关闭'; display: block; color: #ffffffdb; text-align: center; font-size: 14px; line-height: 22px;}#wh-popup-container{ max-width: 568px; margin: 5em auto 0; background: #d7d7d7; min-height: 120px; box-shadow: 0 0 5px 1px #898989; border-radius: 4px;}#wh-popup-title p{ padding: 1em 0; font-size: 16px; font-weight: bold; text-align: center;}/** 弹出窗口的内容 **/#wh-popup-cont{ padding: 0 1em 1em; max-height: 30em; overflow-y: auto; font-size:14px; line-height: 16px;}#wh-popup-cont .gSetting > div{ display: inline-block; width: 47%; margin: 2px 0;}#wh-popup-cont .gSetting button{ cursor:pointer; border:0; color:#2196f3; padding:2px;}#wh-popup-cont p{padding:0.25em 0;}#wh-popup-cont a{color:red;text-decoration:none;}#wh-popup-cont li{margin:4px 0;}#wh-popup-cont h4{margin:0;padding: 0.5em 0;}#wh-popup-cont button{ margin: 0 4px 0 0; padding: 5px 8px; border: solid 2px black; color: black; border-radius: 3px;}#wh-popup-cont button[disabled]{opacity: 0.5;}#wh-popup-cont input{ padding: 2px; text-align: center; border: 1px solid #fff0; border-radius: 5px; margin:1px 2px;}#wh-popup-cont input:focus{border-color:blue;}#wh-popup-cont table{width:100%;border-collapse:collapse;border:1px solid;}#wh-popup-cont td, #wh-popup-cont th{border-collapse:collapse;padding:4px;border:1px solid;}.wh-display-none{display:none !important;}#wh-gym-info-cont{ background-color: #363636; color: white; padding: 8px; font-size: 15px; border-radius: 4px; text-shadow: 0 0 2px black; background-image: linear-gradient(90deg,transparent 50%,rgba(0,0,0,.07) 0); background-size: 4px; line-height: 20px;}#wh-gym-info-cont button{cursor:pointer;}#wh-notify { display: inline-block; position: fixed; top: 0; left: calc(50% - 180px); width: 360px; z-index: 9999990; color:#333;}#wh-notify a{color:red;text-decoration:none;}#wh-notify .wh-notify-item { /*height: 50px;*/ background: rgb(239 249 255 / 90%); border-radius: 2px; margin: 0.5em 0 0 0; box-shadow: 0 0 5px 0px #959595;}#wh-notify .wh-notify-item:hover { background: rgb(239 249 255 / 98%);}#wh-notify .wh-notify-item .wh-notify-bar { height:2px; background:#2196f3;}#wh-notify .wh-notify-item .wh-notify-close { float:right; padding:0;width:16px;height:16px;background:url('data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%201024%201024%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M923%20571H130.7c-27.6%200-50-22.4-50-50s22.4-50%2050-50H923c27.6%200%2050%2022.4%2050%2050s-22.4%2050-50%2050z%22%20fill%3D%22%232196f3%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E') no-repeat center;background-size:100%;margin: 6px 6px 0 0;cursor: pointer;}#wh-notify .wh-notify-item .wh-notify-msg { padding:12px;}"
+}
\ No newline at end of file
diff --git a/src/json/event.json b/src/json/event.json
new file mode 100644
index 0000000..bb96151
--- /dev/null
+++ b/src/json/event.json
@@ -0,0 +1,100 @@
+[
+ {
+ "start": [
+ 0,
+ 17,
+ 8
+ ],
+ "end": [
+ 0,
+ 24,
+ 8
+ ],
+ "name": "捡垃圾周",
+ "eff": "获得捡垃圾概率提升的增益"
+ },
+ {
+ "start": [
+ 3,
+ 5,
+ 20
+ ],
+ "end": [
+ 3,
+ 25,
+ 20
+ ],
+ "name": "复活节狩猎",
+ "eff": "复活节彩蛋会随机出现,集齐10个可兑换金蛋和一个独特的头像框(章)。"
+ },
+ {
+ "start": [
+ 5,
+ 20,
+ 20
+ ],
+ "end": [
+ 5,
+ 29,
+ 20
+ ],
+ "name": "狗牌",
+ "eff": "击败其他玩家以获得狗牌,小心保护你的狗牌。"
+ },
+ {
+ "start": [
+ 6,
+ 5,
+ 20
+ ],
+ "end": [
+ 6,
+ 25,
+ 20
+ ],
+ "name": "托恩先生和托恩女士",
+ "eff": "上传你的真实图片,然后拿章"
+ },
+ {
+ "start": [
+ 8,
+ 5,
+ 20
+ ],
+ "end": [
+ 8,
+ 23,
+ 20
+ ],
+ "name": "大逃杀",
+ "eff": "加入特定队伍后,攻击其他队伍玩家,存活下来的3个队伍可以拿章"
+ },
+ {
+ "start": [
+ 9,
+ 25,
+ 20
+ ],
+ "end": [
+ 10,
+ 1,
+ 20
+ ],
+ "name": "不给糖就捣蛋",
+ "eff": "买篮子之后攻击其他玩家后会随机掉落糖果,可用于兑换许多高价值物品"
+ },
+ {
+ "start": [
+ 11,
+ 14,
+ 20
+ ],
+ "end": [
+ 11,
+ 31,
+ 20
+ ],
+ "name": "圣诞小镇",
+ "eff": "在小镇中闲逛来获取随机掉落的物品"
+ }
+]
\ No newline at end of file
diff --git a/src/json/fest.json b/src/json/fest.json
new file mode 100644
index 0000000..a531a76
--- /dev/null
+++ b/src/json/fest.json
@@ -0,0 +1,68 @@
+{
+ "val": {
+ "0105": {
+ "name": "周末自驾游",
+ "eff": "获得双倍的赛车点数与赛车技能等级增益"
+ },
+ "0114": {
+ "name": "情人节",
+ "eff": "使用爱情果汁(Love Juice)后获得降低攻击与复活的能量消耗的增益"
+ },
+ "0204": {
+ "name": "员工激励日",
+ "eff": "获得三倍的工作点数与火车增益"
+ },
+ "0217": {
+ "name": "圣帕特里克日",
+ "eff": "获得双倍的酒类效果增益,城市中可以捡到绿色世涛(Green Stout)"
+ },
+ "0320": {
+ "name": "420日",
+ "eff": "获得三倍的大麻(Cannabis)效果增益"
+ },
+ "0418": {
+ "name": "博物馆日",
+ "eff": "获得10%提高的博物馆PT兑换增益"
+ },
+ "0514": {
+ "name": "世界献血日",
+ "eff": "获得减半的抽血CD和扣血增益"
+ },
+ "0611": {
+ "name": "世界人口日",
+ "eff": "获得双倍的通过攻击获取的经验的增益"
+ },
+ "0629": {
+ "name": "世界老虎日",
+ "eff": "获得5倍的狩猎技能增益"
+ },
+ "0705": {
+ "name": "国际啤酒节",
+ "eff": "获得5倍的啤酒物品效果增益"
+ },
+ "0827": {
+ "name": "旅游节",
+ "eff": "获得双倍的起飞后物品携带容量增益"
+ },
+ "0915": {
+ "name": "饮料节",
+ "eff": "获得双倍的能量饮料效果增益"
+ },
+ "1014": {
+ "name": "世界糖尿病日",
+ "eff": "获得三倍的糖类效果增益"
+ },
+ "1015": {
+ "name": "周年庆",
+ "eff": "左上角的TORN图标可以食用"
+ },
+ "1025": {
+ "name": "黑色星期五",
+ "eff": "某些商家将提供1元购活动"
+ },
+ "1114": {
+ "name": "住院日",
+ "eff": "获得降低75%的住院时间增益"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/json/loading.json b/src/json/loading.json
new file mode 100644
index 0000000..e467d5f
--- /dev/null
+++ b/src/json/loading.json
@@ -0,0 +1,4 @@
+{
+ "name": "loading gif html",
+ "html": "
"
+}
\ No newline at end of file
diff --git a/src/test/Test.ts b/src/test/Test.ts
new file mode 100644
index 0000000..0ee461a
--- /dev/null
+++ b/src/test/Test.ts
@@ -0,0 +1,8 @@
+import WuhuBase from "../class/WuhuBase";
+import Popup from "../class/utils/Popup";
+
+export default class Test extends WuhuBase {
+ public test(): void {
+ new Popup("123")
+ }
+}
\ No newline at end of file
diff --git a/src/zhongIcon.ts b/src/zhongIcon.ts
deleted file mode 100644
index 595f485..0000000
--- a/src/zhongIcon.ts
+++ /dev/null
@@ -1,1471 +0,0 @@
-// import getWhSettingObj from "./func/utils/getWhSettingObj";
-// import setWhSetting from "./func/utils/setWhSetting";
-// import addStyle from "./func/utils/addStyle";
-// import WHNotify from "./func/utils/WHNotify";
-// import getScriptEngine from "./func/utils/getScriptEngine";
-// import COFetch from "./func/utils/COFetch";
-// import popupMsg from "./func/utils/popupMsg";
-// import forStock from "./func/utils/forStock";
-// import updateTransDict from "./func/translate/updateTransDict";
-// import landedRedirect from "./func/module/landedRedirect";
-// import doQuickFly from "./func/module/doQuickFly";
-// import getYaoCD from "./func/utils/getYaoCD";
-// import loading_gif_html from "./func/utils/loading_gif_html";
-// import elementReady from "./func/utils/elementReady";
-// import loadGS from "./func/module/loadGS";
-// import adHelper from "./func/module/adHelper";
-// import safeKeeper from "./func/module/safeKeeper";
-// import mdParse from "./func/utils/MarkdownParser";
-// import log from "./func/utils/log";
-// import getDeviceType from "./func/utils/getDeviceType";
-// import Global from "./class/Global"
-//
-// export default function zhongIcon(glob: Global) {
-// setDefaultSettings();
-// // 菜单node
-// glob.$zhongNode = initIcon(getMenuItems(glob));
-// }
-//
-// interface MenuItemConfig {
-// tagName?: string;
-// domType: 'button' | 'plain' | 'checkbox' | 'select';
-// domId?: string;
-// domText?: string;
-// clickFunc?: (ev?) => void;
-// domHTML?: string;
-// tip?: string;
-// dictName?: string;
-// changeEv?: (ev) => void;
-// domSelectOpt?: { domVal: string, domText: string }[];
-// }
-//
-// interface EventWrapper {
-// onEv: boolean;
-// daysLeft: number;
-// events: Event[];
-// current?: Event;
-// next?: Event;
-// html?: string;
-// }
-//
-// interface Event {
-// start: number[];
-// end: number[];
-// name: string;
-// eff: string;
-// }
-//
-// // 元素生成器
-// function elemGenerator(setting: MenuItemConfig, root_node: Node) {
-// let { tip, domType } = setting;
-// let new_node = null;
-// switch (domType) {
-// case 'checkbox': {
-// new_node = document.createElement('div');
-// let { domId, dictName, domText } = setting;
-// let label = document.createElement('label');
-// (tip) && (label.setAttribute('title', tip));
-// let input = document.createElement('input');
-// input.type = 'checkbox';
-// input.id = domId;
-// input.checked = getWhSettingObj()[dictName];
-// input.onchange = e => {
-// setWhSetting(dictName, (e.target as HTMLInputElement).checked);
-// if (setting.changeEv) setting.changeEv(e);
-// };
-// label.innerHTML = domText;
-// label.prepend(input);
-// new_node.appendChild(label);
-// break;
-// }
-// case 'button': {
-// new_node = document.createElement('div');
-// let { domId, domText, clickFunc } = setting;
-// let btn = document.createElement('button');
-// (tip) && (btn.setAttribute('title', tip));
-// btn.id = domId;
-// btn.innerHTML = domText;
-// btn.addEventListener('click', clickFunc);
-// new_node.appendChild(btn);
-// break;
-// }
-// case 'select': {
-// new_node = document.createElement('div');
-// let { domSelectOpt, dictName, domId, domText } = setting;
-// let label = document.createElement('label');
-// (tip) && (label.setAttribute('title', tip));
-// let text = document.createTextNode(domText);
-// let select = document.createElement('select');
-// select.id = domId;
-// domSelectOpt.forEach((opt, i) => {
-// let { domVal, domText } = opt;
-// let option = document.createElement('option');
-// option.value = domVal;
-// option.innerHTML = domText;
-// option.selected = i === getWhSettingObj()[dictName];
-// option.innerHTML = domText;
-// select.appendChild(option);
-// });
-// select.onchange = e => setWhSetting(dictName, (e.target).selectedIndex);
-// label.appendChild(text);
-// label.appendChild(select);
-// new_node.appendChild(label);
-// break;
-// }
-// case 'plain': {
-// let tag = setting.tagName || 'div';
-// new_node = document.createElement(tag);
-// if (setting.domId) new_node.id = setting.domId;
-// new_node.innerHTML += setting['domHTML'];
-// break;
-// }
-// }
-// // 移动节点
-// return root_node.appendChild(new_node);
-// }
-//
-// /*
-// 添加左侧图标
-// */
-// function initIcon(settings: MenuItemConfig[]): MyHTMLElement {
-// let zhong_node: MyHTMLElement = document.querySelector('div#wh-trans-icon');
-// let { version } = window.WHPARAMS;
-// if ((self !== top) || !!zhong_node) return zhong_node;
-// zhong_node = document.createElement('div');
-// zhong_node.id = 'wh-trans-icon';
-// zhong_node.classList.add('cont-gray');
-// zhong_node.innerHTML = `
-//
-//
-//
芜湖助手
-//
-//
当前版本: ${ version.slice(-1) === '$' ? 'DEV' : version }
-//
-//
-//
-//
`;
-// // 助手菜单
-// const menu_cont = zhong_node.querySelector('#wh-gSettings');
-// // 设置选项
-// zhong_node.setting_root = document.createElement('div');
-// zhong_node.setting_root.classList.add('gSetting');
-// // 遍历菜单node设置
-// settings.forEach(setting => elemGenerator(setting, menu_cont));
-// // 计时node
-// zhong_node.initTimer = zhong_node.querySelector('#wh-inittimer');
-// // 芜湖助手图标点击事件
-// (zhong_node.querySelector('#wh-trans-icon-btn')).onclick = () => {
-// zhong_node.classList.toggle('wh-icon-expanded');
-// const click_func = e => {
-// // e.stopImmediatePropagation();
-// log.info(e.target);
-// if (e.target === zhong_node.querySelector('#wh-trans-icon-btn')) return;
-// if (!zhong_node.contains(e.target)) {
-// log.info('移除事件监听器');
-// document.body.removeEventListener('click', click_func);
-// zhong_node.classList.remove('wh-icon-expanded');
-// }
-// };
-// if (zhong_node.classList.contains('wh-icon-expanded')) {
-// log.info('添加事件监听器');
-// document.body.addEventListener('click', click_func);
-// } else {
-// log.info('移除事件监听器');
-// document.body.removeEventListener('click', click_func);
-// }
-// };
-// // 更新按钮点击事件
-// (zhong_node.querySelector('#wh-update-btn')).onclick = e => {
-// (e.target).blur();
-// const innerHtml = `电脑
-// 通常电脑浏览器装有油猴等用户脚本扩展时可以使用链接安装(自动更新):点此安装。
-// 这些扩展长这样:

-//
-// 手机
-// 安卓 KIWI 等可以用油猴脚本的浏览器也可以点上面的链接安装👆
-// Torn PDA app 或 Alook 用户可打开这个网页快捷复制粘贴。
-// 直接复制
-// 加载脚本然后直接复制粘贴到用户脚本处。
-//
-// `;
-// const node = popupMsg(innerHtml, '如何更新');
-// // 直接复制的按钮
-// node.querySelector('button').onclick = async (e) => {
-// let target = e.target as HTMLButtonElement;
-// target.innerHTML = '加载中';
-// const js_text = await COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${ performance.now() }`);
-// target.innerHTML = '点击复制到剪切板';
-// target.onclick = () => {
-// const textarea_node = document.createElement('textarea');
-// textarea_node.innerHTML = js_text;
-// target.parentElement.append(textarea_node);
-// textarea_node.focus();
-// textarea_node.select();
-// document.execCommand('Copy');
-// textarea_node.remove();
-// target.innerHTML = '已复制';
-// target.onclick = null;
-// WHNotify('脚本已复制,请前往粘贴');
-// };
-// };
-// };
-// // 节日
-// zhong_node.querySelectorAll('#wh-trans-fest-date button').forEach((el, i) => i === 0
-// ? el.addEventListener('click', () => {
-// let html = '';
-// settings.fest_date_list.sort().forEach(date =>
-// html += `| ${ 1 + ((date.slice(0, 2)) | 0) }月${ date.slice(2) }日 | ${ settings.fest_date_dict[date].name } | ${ settings.fest_date_dict[date].eff } |
`
-// );
-// popupMsg(html += '
', '节日');
-// })
-// : el.addEventListener('click', null));
-// // 活动
-// zhong_node.querySelectorAll('#wh-trans-event-cont button').forEach((el, i) => i === 0
-// ? el.addEventListener('click', () => {
-// let html = '';
-// settings.events.forEach(el =>
-// html += `| ${ el.name } | ${ el.start[0] + 1 }月${ el.start[1] }日${ el.start[2] }:00~${ el.end[0] + 1 }月${ el.end[1] }日${ el.end[2] }:00 |
| ${ el.eff } |
`);
-// popupMsg(html += '
更多信息请关注群聊和公众号
', '活动');
-// })
-// : el.addEventListener('click', null));
-// document.body.append(zhong_node);
-// // 引入torn自带浮动提示
-// (window['initializeTooltip']) && (window['initializeTooltip']('.wh-container', 'white-tooltip'));
-// // 加载torn mini profile
-// window.initMiniProf('#wh-trans-icon');
-// return zhong_node;
-// }
-//
-// // 菜单
-// function getMenuItems(glob): MenuItemConfig[] {
-// const date = new Date();
-//
-// const menu_list: MenuItemConfig[] = [];
-//
-// // 欢迎 显示玩家id
-// if (glob.player_info.userID !== 0) {
-// menu_list.push({
-// domType: 'plain',
-// domId: 'wh-trans-welcome',
-// domHTML: `欢迎 ${ glob.player_info.playername }[${ glob.player_info.userID }] 大佬`,
-// });
-// }
-// // 节日
-// let fest_date_html = ': ';
-// {
-// // 节日字典
-// const dict = {
-// '0105': { name: '周末自驾游', eff: '获得双倍的赛车点数与赛车技能等级增益' },
-// '0114': { name: '情人节', eff: '使用爱情果汁(Love Juice)后获得降低攻击与复活的能量消耗的增益' },
-// '0204': { name: '员工激励日', eff: '获得三倍的工作点数与火车增益' },
-// '0217': { name: '圣帕特里克日', eff: '获得双倍的酒类效果增益,城市中可以捡到绿色世涛(Green Stout)' },
-// '0320': { name: '420日', eff: '获得三倍的大麻(Cannabis)效果增益' },
-// '0418': { name: '博物馆日', eff: '获得10%提高的博物馆PT兑换增益' },
-// '0514': { name: '世界献血日', eff: '获得减半的抽血CD和扣血增益' },
-// '0611': { name: '世界人口日', eff: '获得双倍的通过攻击获取的经验的增益' },
-// '0629': { name: '世界老虎日', eff: '获得5倍的狩猎技能增益' },
-// '0705': { name: '国际啤酒节', eff: '获得5倍的啤酒物品效果增益' },
-// '0827': { name: '旅游节', eff: '获得双倍的起飞后物品携带容量增益' },
-// '0915': { name: '饮料节', eff: '获得双倍的能量饮料效果增益' },
-// '1014': { name: '世界糖尿病日', eff: '获得三倍的糖类效果增益' },
-// '1015': { name: '周年庆', eff: '左上角的TORN图标可以食用' },
-// '1025': { name: '黑色星期五', eff: '某些商家将提供1元购活动' },
-// '1114': { name: '住院日', eff: '获得降低75%的住院时间增益' },
-// };
-// menu_list.fest_date_dict = dict;
-// menu_list.fest_date_list = Object.keys(dict);
-// const formatMMDD = (m, d) => {
-// const MM = m < 10 ? `0${ m }` : m.toString();
-// const DD = d < 10 ? `0${ d }` : d.toString();
-// return MM + DD;
-// }
-// const fest_date_key = formatMMDD(date.getUTCMonth(), date.getUTCDate());
-// if (dict[fest_date_key]) fest_date_html += `今天 - ${ dict[fest_date_key]['name'] }()`;
-// else {
-// // 月日列表
-// let list = Object.keys(dict);
-// list.push(fest_date_key);
-// // 下个节日的位置
-// const index: number = list.sort().indexOf(fest_date_key) + 1;
-// // 下个节日obj
-// const next_fest_date = dict[list[index] || list[0]];
-// // 下个节日的时间
-// let next = new Date(
-// index !== list.length ? date.getUTCFullYear() : date.getUTCFullYear() + 1,
-// (list[index !== list.length ? index : 0] as any).slice(0, 2) | 0,
-// (list[index !== list.length ? index : 0] as any).slice(2) | 0,
-// 8
-// ).getTime();
-// // 剩余天数
-// const left = (next - date.getTime()) / 86400000 | 0;
-// fest_date_html += `${ left }天后 - ${ next_fest_date.name }()`;
-// }
-// }
-// menu_list.push({
-// domType: 'plain',
-// domId: 'wh-trans-fest-date',
-// domHTML: fest_date_html,
-// });
-// // 活动
-// let eventObj: EventWrapper = {
-// onEv: false,
-// daysLeft: Infinity,
-// events: [
-// {
-// start: [0, 17, 8], end: [0, 24, 8],
-// name: '捡垃圾周',
-// eff: '获得捡垃圾概率提升的增益',
-// },
-// {
-// start: [3, 5, 20], end: [3, 25, 20],
-// name: '复活节狩猎',
-// eff: '复活节彩蛋会随机出现,集齐10个可兑换金蛋和一个独特的头像框(章)。',
-// },
-// {
-// start: [5, 20, 20], end: [5, 29, 20],
-// name: '狗牌',
-// eff: '击败其他玩家以获得狗牌,小心保护你的狗牌。',
-// },
-// {
-// start: [6, 5, 20], end: [6, 25, 20],
-// name: '托恩先生和托恩女士',
-// eff: '上传你的真实图片,然后拿章',
-// },
-// {
-// start: [8, 5, 20], end: [8, 23, 20],
-// name: '大逃杀',
-// eff: '加入特定队伍后,攻击其他队伍玩家,存活下来的3个队伍可以拿章',
-// },
-// {
-// start: [9, 25, 20], end: [10, 1, 20],
-// name: '不给糖就捣蛋',
-// eff: '买篮子之后攻击其他玩家后会随机掉落糖果,可用于兑换许多高价值物品',
-// },
-// {
-// start: [11, 14, 20], end: [11, 31, 20],
-// name: '圣诞小镇',
-// eff: '在小镇中闲逛来获取随机掉落的物品',
-// },
-// ],
-// };
-// menu_list.events = eventObj.events;
-// eventObj.events.forEach((obj, index) => {
-// if (eventObj.onEv) return;
-// // 当前年份
-// const nowYear = date.getFullYear();
-// // 当前遍历的活动开始时间
-// const start = new Date(nowYear, obj.start[0], obj.start[1], obj.start[2]);
-// // 当前遍历的活动结束时间
-// const end = new Date(nowYear, obj.end[0], obj.end[1], obj.end[2]);
-// // 当前处于活动中
-// if (start < date && date < end) {
-// eventObj.onEv = true;
-// eventObj.daysLeft = (end.getTime() - date.getTime()) / 86400000 | 0;
-// eventObj.current = obj;
-// }
-// // 当前没有活动
-// else {
-// // 当前遍历的活动如果已经经过了,那么下次活动就是遍历的下一个活动对象,否则为当前活动。
-// // 如果本年度活动都经过了,那么下次活动是列表的第一个活动对象
-// const next = end < date ? eventObj.events[index + 1] || eventObj.events[0] : obj;
-// // 经过了最后一个活动所以下次活动开始时间是第二年
-// const start = new Date(next !== obj && index === eventObj.events.length - 1 ? nowYear + 1 : nowYear, next.start[0], next.start[1], next.start[2]);
-// const daysLeft = (start.getTime() - date.getTime()) / 86400000 | 0;
-// if (0 <= daysLeft && daysLeft < eventObj.daysLeft) {
-// eventObj.daysLeft = daysLeft;
-// eventObj.next = next;
-// }
-// }
-// });
-// eventObj.html = ': ';
-// eventObj.onEv
-// ? eventObj.html += `${ eventObj.current.name }() - 剩余${ eventObj.daysLeft }天`
-// : eventObj.html += `${ eventObj.daysLeft }天后 - ${ eventObj.next.name }()`;
-// menu_list.push({
-// domType: 'plain',
-// domId: 'wh-trans-event-cont',
-// domHTML: eventObj.html,
-// });
-// // 飞花库存
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-foreign-stock-btn',
-// domText: '🌸 飞花库存',
-// clickFunc: async function (e) {
-// e.target.blur();
-// forStock(glob).then();
-// },
-// });
-// // 一键起飞
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-quick-fly-btn',
-// domText: '✈️ 一键起飞',
-// clickFunc: async function () {
-// if (window.hasWHQuickFlyOpt) return;
-// window.hasWHQuickFlyOpt = true;
-// addStyle(`#wh-quick-fly-opt{
-// position:fixed;
-// left:64px;
-// top:64px;
-// background: #008000db;
-// padding: 8px;
-// border-radius: 4px;
-// box-shadow: 0 0 5px 1px #ffffff29;
-// color: white;
-// font-size: 15px;
-// width: 220px;
-// z-index: 199999;
-// }
-// #wh-quick-fly-opt p{margin:4px 0;}
-// #wh-quick-fly-opt a{
-// cursor: pointer;
-// border: 1px solid;
-// padding: 4px;
-// display: inline-block;
-// border-radius: 2px;
-// }
-// #wh-quick-fly-opt label{
-// display:block;
-// }
-// #wh-quick-fly-opt select{
-// width: 100%;
-// padding: 6px;
-// margin: 4px 0;
-// }
-// #wh-quick-fly-opt button{
-// font-size: 16px;
-// color: white;
-// cursor: pointer;
-// float: right;
-// background: #00BCD4;
-// padding: 8px;
-// border-radius: 4px;
-// }
-// #wh-quick-fly-opt.wh-quick-fly-opt-hide *{
-// display: none;
-// }
-// #wh-quick-fly-opt.wh-quick-fly-opt-hide input{
-// display: inline-block;
-// }
-// info{display:block;}
-// `);
-// const node = document.createElement('div');
-// node.id = 'wh-quick-fly-opt';
-// node.innerHTML = `
-//
-// 主要用途:出院秒飞
-// 点起飞,页面加载完成后会马上飞走
-//
-//
-//
-//
-//
查看花偶库存
-//
注:需要验证时无法起飞
-//
-//
-// `;
-// const [dest_node, type_node] = node.querySelectorAll('select') as any as HTMLSelectElement[];
-// node.querySelector('button').addEventListener('click', () => {
-// sessionStorage['wh-quick-fly'] = `${ dest_node.selectedIndex } ${ type_node.selectedIndex } ${ new Date().getTime() }`;
-// if (!glob.href.contains('travelagency.php')) {
-// WHNotify('正在转跳');
-// location.href = 'https://www.torn.com/travelagency.php';
-// } else {
-// doQuickFly();
-// }
-// });
-// node.querySelector('a').addEventListener('click', (e) => {
-// e.preventDefault();
-// forStock(glob);
-// });
-// node.querySelector('input').addEventListener('click', (e) => {
-// node.classList.toggle('wh-quick-fly-opt-hide');
-// const el = e.target as HTMLInputElement;
-// el.value = el.value === ' - ' ? ' + ' : ' - ';
-// });
-// const info_node = node.querySelector('info');
-// const time_predict = document.createElement('p');
-// const yaoCD = document.createElement('p');
-// info_node.append(time_predict);
-// info_node.append(yaoCD);
-// const predict = [
-// ['~54分', '~36分', '~26分', '~16分',],
-// ['~1时10分', '~50分', '~36分', '~22分',],
-// ['~1时22分', '~58分', '~40分', '~24分',],
-// ['~4时28分', '~3时8分', '~2时14分', '~1时20分',],
-// ['~5时18分', '~3时42分', '~2时40分', '~1时36分',],
-// ['~5时34分', '~3时54分', '~2时46分', '~1时40分',],
-// ['~5时50分', '~4时6分', '~2时56分', '~1时46分',],
-// ['~7时30分', '~5时16分', '~3时46分', '~2时16分',],
-// ['~8时4分', '~5时38分', '~4时2分', '~2时24分',],
-// ['~9时2分', '~6时20分', '~4时30分', '~2时42分',],
-// ['~9时54分', '~6时56分', '~4时58分', '~2时58分',],
-// ];
-// const showTime = function () {
-// time_predict.innerHTML = `往返时间:${ predict[dest_node.selectedIndex][type_node.selectedIndex] }`;
-// }
-// dest_node.addEventListener('change', showTime);
-// type_node.addEventListener('change', showTime);
-// document.body.append(node);
-// showTime();
-// yaoCD.innerHTML = `药CD剩余:${ getYaoCD() }`;
-// },
-// });
-// // NPC LOOT
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-npc-loot-btn',
-// domText: '🔫 LOOT',
-// clickFunc: function (e) {
-// e.target.blur();
-// const insert = `点击开打:
-//
-// `;
-// popupMsg(insert, 'NPC LOOT');
-// },
-// tip: '显示5个可击杀NPC的开打时间',
-// });
-// // 查看NNB
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-nnb-info',
-// domText: '👮 查看NNB',
-// clickFunc: function (e) {
-// e.target.blur();
-// const insert = `
-//
-// NNB(Natural Nerve Bar)意思是:扣除所有加成后,玩家本身的犯罪条上限,可用于衡量大佬隐藏的犯罪技能等级
-// 一般来说,左侧红色的犯罪条(Nerve Bar/NB)的上限都是包含加成的,如来自帮派、天赋的加成等。额外的加成不会影响玩家的犯罪技能
-// 查看NNB的方法很简单,在Torn主页面的最下方有一栏Perks,NB-Perks=NNB
-//
-//
-// `;
-// const popup = popupMsg(insert, '查看NNB');
-// const select = popup.querySelector('input');
-// const node = popup.querySelector('p');
-// popup.querySelector('button').addEventListener('click', ev => {
-// let target = ev.target as HTMLInputElement;
-// target.style.display = 'none';
-// node.innerHTML = '加载中';
-// // API 计算
-// if (select.checked) {
-// const api_key = glob.isPDA ? glob.PDA_APIKey : window.localStorage.getItem('APIKey');
-// fetch(`https://api.torn.com/user/?selections=bars,perks&key=${ api_key }`)
-// .then(res => res.json())
-// .then(data => {
-// if (data['error']) {
-// node.innerHTML = `出错了 ${ JSON.stringify(data['error']) }`;
-// target.style.display = null;
-// return;
-// }
-// let nb = data['nerve']['maximum'];
-// let perks = 0;
-// Object.values(data).forEach(val => {
-// (val instanceof Array) && val.forEach(s => {
-// s = s.toLowerCase();
-// s.includes('maximum nerve') && (perks += (new RegExp('[0-9].').exec(s))[0] | 0)
-// })
-// });
-// node.innerHTML = `NNB: ${ nb - perks }`;
-// target.style.display = null;
-// });
-// }
-// // 主页计算
-// else {
-// if (window.location.href.includes('index.php') && document.title.includes('Home')) {
-// let nb = (document.querySelector('#barNerve p[class^="bar-value___"]').innerText.split('/')[1]) | 0;
-// let perks = 0;
-// document.querySelectorAll('#personal-perks li').forEach(elem => {
-// const str = elem.innerText.toLowerCase();
-// str.includes('maximum nerve') && (perks += (/[0-9]./.exec(str) as any)[0] | 0)
-// });
-// node.innerHTML = `NNB: ${ nb - perks }`;
-// target.style.display = null;
-// return;
-// }
-// node.innerHTML = '不在主页面,点击前往';
-// target.style.display = null;
-// }
-// });
-// },
-// });
-// // 常用链接
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-link-collection',
-// domText: '🔗 常用链接',
-// clickFunc: function (e) {
-// if (!this.styleAdded) {
-// addStyle(`
-// .wh-link-collection-cont a{
-// display: inline-block;
-// border: solid 1px #b3b3b3;
-// border-radius: 4px;
-// margin: 0 5px 2px 0;
-// padding: 4px 8px;
-// text-align:center;
-// background: #efefef;
-// background: linear-gradient(#f1f1f1,#e3e3e3);
-// color:black !important;
-// }
-// .wh-link-collection-cont span{
-// display: block;
-// /*padding: 0 4px 8px;*/
-// }
-// .wh-link-collection-cont .wh-link-collection-img{
-// display: block;
-// width:60px;
-// height:30px;
-// background-size: 100% auto !important;
-// }
-// `);
-// this.styleAdded = true;
-// }
-// e.target.blur();
-// const quick_link_dict = [];
-// // 生存手册
-// quick_link_dict.push({
-// name: '生存手册',
-// url: 'https://docs.qq.com/doc/DTVpmV2ZaRnB0RG56',
-// new_tab: true,
-// img: 'https://www.torn.com/images/items/293/medium.png',
-// });
-// // 买啤酒
-// quick_link_dict.push({
-// name: '抢啤酒',
-// url: 'https://www.torn.com/shops.php?step=bitsnbobs',
-// new_tab: true,
-// img: 'https://www.torn.com/images/items/180/medium.png',
-// });
-// // 买XAN
-// quick_link_dict.push({
-// name: '买XAN',
-// url: 'https://www.torn.com/imarket.php#/p=shop&step=shop&type=&searchname=Xanax',
-// new_tab: true,
-// img: 'https://www.torn.com/images/items/206/medium.png',
-// });
-// // 起飞
-// quick_link_dict.push({
-// name: '起飞',
-// url: 'https://www.torn.com/travelagency.php',
-// new_tab: true,
-// img: 'https://www.torn.com/images/items/396/medium.png',
-// });
-// // 买PT
-// quick_link_dict.push({
-// name: '买PT',
-// url: 'https://www.torn.com/pmarket.php',
-// new_tab: true,
-// img: 'https://www.torn.com/images/items/722/medium.png',
-// });
-// // 租PI
-// quick_link_dict.push({
-// name: '租PI',
-// url: 'https://www.torn.com/properties.php?step=rentalmarket#/property=13',
-// new_tab: false,
-// img: 'https://www.torn.com/images/v2/properties/350x230/350x230_default_private_island.png',
-// });
-// // 找工作
-// quick_link_dict.push({
-// name: '找工作',
-// url: 'https://www.torn.com/joblist.php#!p=main',
-// new_tab: false,
-// img: 'https://www.torn.com/images/items/421/medium.png',
-// });
-// // 下悬赏
-// quick_link_dict.push({
-// name: '下悬赏',
-// url: 'https://www.torn.com/bounties.php#/p=add',
-// new_tab: false,
-// img: 'https://www.torn.com/images/items/431/medium.png',
-// });
-// let insert = '';
-// quick_link_dict.forEach(el => {
-// insert += `${ el.name }`;
-// });
-// insert += '
'
-// let popup = popupMsg(insert, '常用链接');
-// popup.classList.add('wh-link-collection-cont');
-// popup.addEventListener('click', ev => {
-// let target = ev.target as HTMLElement;
-// if (target.tagName.toLowerCase() === 'a' || target.tagName.toLowerCase() === 'span') {
-// popup.close();
-// }
-// });
-// },
-// });
-// // 飞贼
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-gs-btn',
-// domText: '🐏 飞贼小助手',
-// clickFunc: function (e) {
-// e.target.blur();
-// loadGS(getScriptEngine(glob));
-// },
-// tip: '加载从PC端移植的伞佬的油猴版飞贼小助手',
-// });
-// // 物品价格监视
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-price-watcher-btn',
-// domText: '💊 价格监视',
-// clickFunc: function () {
-// const watcher_conf = getWhSettingObj()['priceWatcher'];
-// const pre_str = JSON.stringify(watcher_conf);
-// const html = `
-// 输入需要监视的价格,低于该价格发出通知,-1为关闭
-// 注:需要APIKey,当前可用APIKey为
-// (来自冰蛙)
-// (来自PDA)
-//
-// PT
-// XAN
-//
-// `;
-// const popup = popupMsg(html, '价格监视设置');
-// popup.querySelector('button').onclick = () => {
-// const [pt_node, xan_node] = Array.from(>popup.querySelectorAll('input[type="number"]'));
-// watcher_conf.pt = (pt_node.value as any) | 0;
-// watcher_conf.xan = (xan_node.value as any) | 0;
-// if (JSON.stringify(watcher_conf) !== pre_str) setWhSetting('priceWatcher', watcher_conf);
-// popup.close();
-// };
-// }
-// });
-// // 小窗犯罪
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-crime-iframe-btn',
-// domText: '🤑 小窗犯罪',
-// clickFunc: function () {
-// // 弹出小窗口
-// const ifHTML = ``;
-// const popup_insert = `加载中请稍后${ loading_gif_html() }
`;
-// const $popup = popupMsg(popup_insert, '小窗快速犯罪');
-// // 运行状态node
-// let loading_node = $popup.querySelector('p:first-of-type');
-// // if容器
-// const if_cont = $popup.querySelector('#wh-quick-crime-if-container');
-// if_cont.innerHTML = ifHTML;
-//
-// // if内未加载脚本时插入的快捷crime node
-// const mobile_prepend_node = document.createElement('div');
-// mobile_prepend_node.classList.add('wh-translate');
-// mobile_prepend_node.innerHTML = `快捷操作:
-//
-//
-//
`;
-//
-// // if对象加载后运行
-// let cIframe = $popup.querySelector('iframe');
-//
-// // 加载状态
-// const if_onload_func = () => {
-// // if内部文档对象
-// const ifDocu = cIframe.contentWindow.document;
-// // 内部插件运行flag
-// const ifWH = cIframe.contentWindow.WHTRANS;
-// // 文档加载完成后移除
-// if (!!loading_node) loading_node.remove();
-// // 文档加载完成后才显示if
-// cIframe.style.display = 'block';
-// // 验证码flag
-// const isValidate = ifDocu.querySelector('h4#skip-to-content').innerText.toLowerCase().includes('validate');
-// // 如果iframe内部未运行脚本
-// if (ifWH === undefined) {
-// // 隐藏顶部
-// elementReady('#header-root', ifDocu).then(e => e.style.display = 'none');
-// // 隐藏4条
-// elementReady('#sidebarroot', ifDocu).then(e => e.style.display = 'none');
-// // 隐藏聊天
-// elementReady('#chatRoot', ifDocu).then(e => e.style.display = 'none');
-// // 非验证码页面隐藏滚动条
-// if (!isValidate) ifDocu.body.style.overflow = 'hidden';
-// // 调整容器位置
-// elementReady('.content-wrapper', ifDocu).then(elem => {
-// // 加入
-// elem.prepend(mobile_prepend_node);
-// elem.style.margin = '0px';
-// elem.style.position = 'absolute';
-// elem.style.top = '-35px';
-// new MutationObserver((m, o) => {
-// o.disconnect();
-// if (!elem.querySelector('.wh-translate')) elem.prepend(mobile_prepend_node);
-// o.observe(elem, { childList: true, subtree: true });
-// })
-// .observe(elem, { childList: true, subtree: true });
-// });
-// // 隐藏返回顶部按钮
-// elementReady('#go-to-top-btn button', ifDocu).then(e => e.style.display = 'none');
-// }
-// };
-// cIframe.onload = if_onload_func;
-//
-// // 超时判断
-// let time_counter = 0;
-// let time_out_id = window.setInterval(() => {
-// loading_node = $popup.querySelector('p:first-of-type');
-// if (!loading_node) {
-// clearInterval(time_out_id);
-// time_out_id = undefined;
-// return;
-// }
-// time_counter++;
-// if (time_counter > 0 && !loading_node.querySelector('button')) {
-// const reload_btn = document.createElement('button');
-// reload_btn.innerHTML = '重新加载';
-// reload_btn.onclick = () => {
-// reload_btn.remove();
-// time_counter = 0;
-// if_cont.innerHTML = null;
-// if_cont.innerHTML = ifHTML;
-// cIframe = $popup.querySelector('iframe');
-// cIframe.onload = if_onload_func;
-// };
-// loading_node.append(reload_btn);
-// }
-// }, 1000);
-// }
-// });
-// // 危险行为开关⚠️
-// menu_list.push({
-// domType: 'button',
-// domId: 'wh-danger-zone',
-// domText: '⚠️ 危险功能',
-// clickFunc: function (e) {
-// e.target.blur();
-// const insert = `即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。
-//
-// `;
-// const popup = popupMsg(insert, '⚠️警告');
-// const warning_check = popup.querySelector('input');
-// const ok_btn = popup.querySelector('button');
-// warning_check.onchange = () => ok_btn.disabled = false;
-// ok_btn.onclick = () => {
-// setWhSetting('dangerZone', warning_check.checked);
-// popup['close']();
-// window.location.reload();
-// };
-// },
-// });
-// // 传单助手
-// menu_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '📜️ 传单助手',
-// clickFunc: adHelper
-// });
-// // 守望者
-// menu_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '🛡️ 守望者',
-// clickFunc: function () {
-// safeKeeper();
-// },
-// });
-// // 更新历史
-// menu_list.push({
-// domType: 'button', domId: '', domText: '🐞 更新历史', clickFunc: async () => {
-// let popup = popupMsg(
-// '更新历史:
https://gitlab.com/JJins/wuhu-torn-helper/-/blob/dev/CHANGELOG.md
',
-// '更新历史'
-// );
-// popup.classList.add('wh-changelog');
-// let progressBar = document.createElement('div');
-// progressBar.style.height = '2px';
-// progressBar.style.width = '1%';
-// progressBar.style.backgroundColor = 'red';
-// let progressText = document.createElement('p');
-// progressText.innerText = '加载更新文件……';
-// progressText.style.textAlign = 'center';
-// let style = document.createElement('style');
-// style.innerHTML = `.wh-changelog h2,.wh-changelog h3,.wh-changelog h4 {margin:8px 0;}.wh-changelog li{list-style: inside;}`;
-//
-// popup.append(progressBar, progressText, style);
-// let update = await COFetch('https://gitlab.com/JJins/wuhu-torn-helper/-/raw/dev/CHANGELOG.md?' + Date.now());
-// progressBar.style.width = '60%';
-// progressText.innerText = '解析中……';
-// let md = mdParse(update);
-// popup.append(md);
-// progressBar.style.width = '100%';
-// progressText.innerText = '加载完成';
-//
-// setTimeout(() => {
-// progressBar.remove();
-// progressText.remove()
-// }, 3000);
-// },
-// });
-// // 助手设置
-// menu_list.push({
-// domType: 'button', domId: '', domText: '⚙️ 助手设置', clickFunc: () => {
-// let { $zhongNode } = glob;
-// $zhongNode.setting_root = document.createElement('div');
-// $zhongNode.setting_root.classList.add('gSetting');
-// getSettingItems(glob).forEach(set => elemGenerator(set, $zhongNode.setting_root));
-// let pop = popupMsg('', '芜湖助手设置');
-// pop.appendChild($zhongNode.setting_root);
-// // 本日不提醒
-// $zhongNode.setting_root.querySelector('#wh-qua-alarm-check-btn').addEventListener('click', glob.beer.skip_today);
-// // 开发详情按钮
-// if (log.debug()) $zhongNode.setting_root.querySelector('button#wh-devInfo').onclick = () => {
-// const date = new Date();
-// let os = '未知';
-// try {
-// os = window.navigator.userAgentData.platform || window.navigator.platform
-// } catch {
-// }
-//
-// const insert = `
-// | URL | ${ window.location.href } |
-// | 页面尺寸 | ${ window.innerWidth }x${ window.innerHeight } |
-// | 设备类型 | ${ getDeviceType().toUpperCase() } |
-// | 脚本运行方式 | ${ { 'gm': '油猴', 'raw': '直接运行', 'pda': 'TornPDA' }[getScriptEngine(glob)] } |
-// | 时间 | ${ date.getFullYear() }/${ date.getMonth() + 1 }/${ date.getDate() } ${ date.getHours() }:${ date.getMinutes() }:${ date.getSeconds() } |
-// | 插件版本 | ${ glob.version } |
-// | 操作系统 | ${ os } |
-// | UA | ${ window.navigator.userAgent } |
-// | 用户ID | ${ glob.player_info.userID } |
-// | 用户名 | ${ glob.player_info.playername } |
-//
-// `;
-// pop.close();
-// popupMsg(insert, '开发者详情');
-// };
-// (window['initializeTooltip']) && (window['initializeTooltip']('#wh-popup-cont', 'white-tooltip'));
-// },
-// });
-// // 测试
-// if (log.debug()) menu_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '📐️ 测试',
-// clickFunc: async function () {
-// let res = await COFetch('https://gitlab.com/JJins/wuhu-torn-helper/-/raw/dev/CHANGELOG.md')
-// log.info(mdParse(res))
-// },
-// });
-//
-// return menu_list;
-// }
-//
-// // 设置
-// function getSettingItems(glob): MenuItemConfig[] {
-// const date = new Date();
-//
-// let setting_list = [];
-//
-// // 12月时加入圣诞小镇选项
-// if (date.getMonth() === 11) {
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '圣诞小镇',
-// tagName: 'h4',
-// })
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-xmastown-wt',
-// domText: ' 圣诞小镇攻略',
-// dictName: 'xmasTownWT',
-// isHide: true,
-// });
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-xmastown-notify',
-// domText: ' 圣诞小镇物品提示',
-// dictName: 'xmasTownNotify',
-// isHide: true,
-// });
-// }
-//
-// // 翻译
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '翻译',
-// tagName: 'h4',
-// });
-// // 开启翻译
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-trans-enable',
-// domText: ' 开启翻译',
-// dictName: 'transEnable',
-// isHide: true,
-// });
-// // 更新翻译词库
-// setting_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '更新翻译词库',
-// clickFunc: updateTransDict
-// });
-//
-// // 战斗优化
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '战斗优化',
-// tagName: 'h4',
-// });
-// // 光速拔刀
-// setting_list.push({
-// domType: 'select',
-// domId: 'wh-quick-attack-index',
-// domText: '光速拔刀 ',
-// domSelectOpt: [
-// {
-// domVal: 'pri',
-// domText: '主手',
-// },
-// {
-// domVal: 'sec',
-// domText: '副手',
-// },
-// {
-// domVal: 'wea',
-// domText: '近战',
-// },
-// {
-// domVal: 'gre',
-// domText: '手雷',
-// },
-// {
-// domVal: 'fis',
-// domText: '拳头',
-// },
-// {
-// domVal: 'kic',
-// domText: '脚踢',
-// },
-// {
-// domVal: 'none',
-// domText: '关闭',
-// },
-// ],
-// dictName: 'quickAttIndex',
-// isHide: true,
-// tip: '将Start Fight按钮移动到指定格子上',
-// });
-// // 光速跑路
-// setting_list.push({
-// domType: 'select',
-// domId: 'wh-quick-mug',
-// domText: '光速跑路 ',
-// domSelectOpt: [
-// {
-// domVal: 'leave',
-// domText: '跑路(LEAVE)',
-// },
-// {
-// domVal: 'mug',
-// domText: '打劫(MUG)',
-// },
-// {
-// domVal: 'hosp',
-// domText: '住院(HOSP)',
-// },
-// {
-// domVal: 'none',
-// domText: '关闭',
-// },
-// ],
-// dictName: 'quickFinishAtt',
-// isHide: true,
-// tip: '将结束后指定按钮移动到上面指定的格子上',
-// });
-// // 攻击链接转跳
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-attack-relocate',
-// domText: ' 真·攻击界面转跳',
-// dictName: 'attRelocate',
-// tip: '在无法打开攻击界面的情况下依然可以转跳到正确的攻击页面',
-// isHide: true,
-// });
-//
-// // 飞行
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '飞行',
-// tagName: 'h4',
-// });
-// // 起飞警告
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-energy-alert',
-// domText: ' 起飞爆E警告',
-// dictName: 'energyAlert',
-// tip: '起飞前计算来回是否会爆体,红字警告',
-// isHide: true,
-// });
-// // 飞行闹钟
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-trv-alarm-check',
-// domText: ' 飞行闹钟',
-// dictName: 'trvAlarm',
-// tip: '(仅PC) 飞行页面将显示一个内建的闹钟,落地前声音提醒,需要打开浏览器声音权限',
-// isHide: true,
-// });
-// // 海外警告
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 海外警告',
-// dictName: 'abroadWarning',
-// tip: '海外落地后每30秒通知警告',
-// });
-// // 落地转跳
-// setting_list.push({ domType: 'button', domId: '', domText: '落地转跳', clickFunc: landedRedirect });
-//
-// // 公司
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '公司',
-// tagName: 'h4',
-// });
-// // 浮动存钱框
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 浮动存钱框',
-// dictName: 'floatDepo',
-// tip: '打开公司或帮派的存钱页面后存钱框将浮动显示',
-// });
-// // 公司转跳存钱
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 公司转跳存钱',
-// dictName: 'companyRedirect',
-// tip: '打开公司页面时自动打开存钱选项卡',
-// });
-// // 收起公司冰蛙效率表
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 收起公司冰蛙效率表',
-// dictName: 'companyBWCollapse',
-// tip: '开启后可手动显示隐藏冰蛙公司表格',
-// });
-// // 任何位置一键存钱
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 任何位置一键存钱',
-// dictName: 'companyDepositAnywhere',
-// tip: '在所有页面显示一键存钱按钮,Torn OK状态下可用,此功能未完全测试无害,使用请慎重',
-// });
-//
-// // 啤酒
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '啤酒',
-// tagName: 'h4',
-// });
-// // 啤酒提醒
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-qua-alarm-check',
-// domText: ' 啤酒提醒 ',
-// dictName: '_15Alarm',
-// tip: '每小时的整15分钟的倍数时通知提醒抢啤酒或者血包',
-// isHide: true,
-// changeEv: function (ev) {
-// ev.target.checked ? glob.beer.start() : glob.beer.stop();
-// },
-// });
-// // 啤酒提醒状态
-// setting_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '啤酒提醒状态',
-// clickFunc: function () {
-// WHNotify(`啤酒提醒${ glob.beer.status() }`);
-// }
-// });
-// // 啤酒提醒时间
-// setting_list.push({
-// domType: 'button',
-// domId: '',
-// domText: '啤酒提醒时间设定',
-// // tip: '通知提前时间',
-// clickFunc: function () {
-// glob.popup_node.close();
-// let popup = popupMsg(`区间为 1 ~ 60,默认 50
`, '啤酒提醒时间设定');
-// let confirm = document.createElement('button');
-// confirm.innerHTML = '确定';
-// confirm.style.float = 'right';
-// confirm.addEventListener('click', () => {
-// let input: HTMLInputElement = popup.querySelector('input');
-// let num = (input.value as any) | 0;
-// if (num === getWhSettingObj()['_15AlarmTime']) return;
-// if (num < 1 || num > 60) num = 50;
-// input.value = num.toString();
-// setWhSetting('_15AlarmTime', num);
-// // 之前的运行状态
-// let before_state = glob.beer.is_running();
-// glob.beer.set_time(num);
-// if (before_state) glob.beer.start();
-// popup.close();
-// });
-// popup.appendChild(confirm);
-// },
-// });
-//
-// // 其他
-// setting_list.push({
-// domType: 'plain',
-// domId: '',
-// domHTML: '其他',
-// tagName: 'h4',
-// });
-// // 任务助手
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-mission-lint',
-// domText: ' 任务助手',
-// dictName: 'missionHint',
-// tip: 'Duke任务的一些中文小提示',
-// isHide: true,
-// });
-// // 捡垃圾助手
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-city-finder',
-// domText: ' 捡垃圾助手',
-// dictName: 'cityFinder',
-// tip: '城市地图中放大显示物品并且估计价值',
-// isHide: true,
-// });
-// // 快速crime
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-quick-crime',
-// domText: ' 快速犯罪',
-// dictName: 'quickCrime',
-// tip: '显示快捷操作按钮,目前不支持自定义',
-// isHide: true,
-// });
-// // 叠E保护
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-SEProtect-check',
-// domText: ' 叠E保护',
-// dictName: 'SEProtect',
-// tip: '隐藏健身房的锻炼按钮,防止误操作',
-// isHide: true,
-// });
-// // PT一键购买
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-ptQuickBuy-check',
-// domText: ' PT一键购买',
-// dictName: 'ptQuickBuy',
-// tip: 'PT市场页面购买时跳过确认',
-// isHide: true,
-// });
-// // 4条转跳
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 4条转跳',
-// dictName: 'barsRedirect',
-// tip: '点击4条时转跳对应页面',
-// });
-// // 清除多余的脚本
-// setting_list.push({
-// domType: 'checkbox',
-// domId: '',
-// domText: ' 清除多余的脚本',
-// dictName: 'removeScripts',
-// tip: '清除Google相关脚本、顶部横幅等',
-// });
-// // 危险行为⚠️
-// if (getWhSettingObj()['dangerZone'] === true) {
-// // 攻击界面自刷新
-// setting_list.push({
-// domType: 'select',
-// domId: 'wh-attack-reload',
-// domText: '⚠️攻击界面自动刷新 ',
-// dictName: 'attReload',
-// domSelectOpt: [
-// {
-// domVal: 'none',
-// domText: '无间隔',
-// },
-// {
-// domVal: '1',
-// domText: '约1s',
-// },
-// {
-// domVal: '2',
-// domText: '约2s',
-// },
-// {
-// domVal: '3',
-// domText: '约3s',
-// },
-// {
-// domVal: '4',
-// domText: '约4s',
-// },
-// {
-// domVal: '5',
-// domText: '约5s',
-// },
-// {
-// domVal: 'disabled',
-// domText: '关闭',
-// },
-// ],
-// isHide: true,
-// tip: '危险功能:接机时常用,将自动刷新页面直到目标落地',
-// });
-// // 自动开打和结束
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-auto-start-finish',
-// domText: ' ⚠️自动开打和结束',
-// dictName: 'autoStartFinish',
-// tip: '脚本将会自动按下战斗和结束按钮',
-// isHide: true,
-// });
-// } else {
-// setWhSetting('autoStartFinish', false, false)
-// setWhSetting('attReload', 6, false)
-// }
-// // dev
-// setting_list.push({
-// domType: 'checkbox',
-// domId: 'wh-dev-mode',
-// domText: ` 开发者模式${ log.debug() ? ' ' : '' }`,
-// dictName: 'isDev',
-// isHide: true,
-// });
-// // 更多设定
-// if (log.debug()) setting_list.push({
-// domType: 'button', domId: 'wh-otherBtn', domText: '更多设定', clickFunc: () => {
-// const html = `清空设置数据、请求通知权限、测试跨域请求`;
-// const popup = popupMsg(html, '更多设定');
-// },
-// isHide: true,
-// });
-//
-// return setting_list;
-// }
-//
-// // 默认设置
-// function setDefaultSettings(): void {
-// [
-// // 开启翻译
-// { key: 'transEnable', val: false },
-// // 快速犯罪
-// { key: 'quickCrime', val: true },
-// // 任务助手
-// { key: 'missionHint', val: true },
-// // 小镇攻略
-// { key: 'xmasTownWT', val: true },
-// // 小镇提醒
-// { key: 'xmasTownNotify', val: true },
-// // 起飞爆e
-// { key: 'energyAlert', val: true },
-// // 飞行闹钟
-// { key: 'trvAlarm', val: true },
-// // 啤酒提醒
-// { key: '_15Alarm', val: true },
-// // 捡垃圾助手
-// { key: 'cityFinder', val: false },
-// // 叠E保护
-// { key: 'SEProtect', val: false },
-// // PT一键购买
-// { key: 'ptQuickBuy', val: false },
-// // 光速拔刀 6-关闭
-// { key: 'quickAttIndex', val: 2 },
-// // 光速跑路 0-leave 1-mug 2-hos 3-关闭
-// { key: 'quickFinishAtt', val: 3 },
-// // 自动开打和结束
-// { key: 'autoStartFinish', val: false },
-// // 废弃
-// { key: 'attRelocate', val: true },
-// // 攻击自刷新 0-无间隔 1-5s 6-关闭
-// { key: 'attReload', val: 6 },
-// // 价格监视
-// { key: 'priceWatcher', val: { xan: -1, pt: -1 } },
-// // 开发者模式
-// { key: 'isDev', val: false },
-// // 啤酒提醒时间
-// { key: '_15AlarmTime', val: 50 },
-// // 4条转跳
-// { key: 'barsRedirect', val: true },
-// // 浮动存钱框
-// { key: 'floatDepo', val: true },
-// // 公司转跳存钱
-// { key: 'companyRedirect', val: true },
-// // 收起公司冰蛙效率表
-// { key: 'companyBWCollapse', val: true },
-// // 清除多余的脚本
-// { key: 'removeScripts', val: true },
-// // 海外警告
-// { key: 'abroadWarning', val: true },
-// // 落地转跳
-// { key: 'landedRedirect', val: '' },
-// // 任何位置一键存钱
-// { key: 'companyDepositAnywhere', val: false },
-//
-// // 危险行为⚠️
-// { key: 'dangerZone', val: false },
-// ].forEach(df => {
-// if (typeof getWhSettingObj()[df.key] !== typeof df.val) setWhSetting(df.key, df.val);
-// });
-// }
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index 9485d5c..1530b35 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,5 +9,6 @@
"target": "ES6",
"removeComments": true,
"sourceMap": false,
+ "resolveJsonModule": true
}
}
\ No newline at end of file