-
-
Notifications
You must be signed in to change notification settings - Fork 130
Expand file tree
/
Copy pathhvAutoAttack.user.js
More file actions
4353 lines (4201 loc) · 210 KB
/
hvAutoAttack.user.js
File metadata and controls
4353 lines (4201 loc) · 210 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* eslint-env browser */
// ==UserScript==
// @name [HV]AutoAttack
// @name:zh-TW [HV]AutoAttack
// @name:zh-CN [HV]AutoAttack
// @description HV auto attack script, for the first user, should configure before use it.
// @description:zh-CN HV自动打怪脚本,初次使用,请先设置好选项,请确认字体设置正常
// @description:zh-TW HV自動打怪腳本,初次使用,請先設置好選項,請確認字體設置正常
// @version 2.90.22.12
// @author dodying
// @namespace https://github.com/dodying/
// @supportURL https://github.com/dodying/UserJs/issues
// @icon https://github.com/dodying/UserJs/raw/master/Logo.png
// @include http*://hentaiverse.org/*
// @include http*://alt.hentaiverse.org/*
// @include http*://e-hentai.org/*
// @connect hentaiverse.org
// @connect e-hentai.org
// @compatible Firefox + Greasemonkey
// @compatible Chrome/Chromium + Tampermonkey
// @compatible Android + Firefox + Usi/Tampermonkey
// @compatible Other + Bookmarklet
// @grant GM_deleteValue
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_notification
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @run-at document-end
// ==/UserScript==
/* eslint-disable camelcase */
const standalone = ['option', 'arena', 'drop', 'stats', 'staminaLostLog', 'battleCode', 'disabled', 'stamina', 'staminaTime', 'lastHref', 'battle', 'monsterDB', 'monsterMID', 'ability'];
const sharable = ['option'];
const excludeStandalone = { 'option': ['optionStandalone', 'version', 'lang'] };
const href = window.location.href;
const isIsekai = href.indexOf('isekai') !== -1;
const current = isIsekai ? 'isekai' : 'persistent';
const other = isIsekai ? 'persistent' : 'isekai';
let GM_cache;
const _1s = 1000;
const _1m = 60 * _1s;
const _1h = 60 * _1m;
const _1d = 24 * _1h;
try {
const isFrame = window.self !== window.top;
if (isFrame) {
if (!window.top.location.href.match(`/equip/`) && (gE('#riddlecounter') || !gE('#navbar'))) {
if(!window.top.location.href.endsWith(`?s=Battle`)){
setValue('lastHref', window.top.location.href);
}
window.top.location.href = window.self.location.href;
}
if(window.location.href.indexOf(`?s=Battle&ss=ar`) !== -1 || window.location.href.indexOf(`?s=Battle&ss=rb`) !== -1){
loadOption();
setArenaDisplay();
}
return;
}
try {
if(window.location.href.startsWith('https://')) {
MAIN_URL = MAIN_URL.replace(/^http:/, /^https:/);
} else {
MAIN_URL = MAIN_URL.replace(/^https:/, /^http:/);
}
} catch (e) {}
const Debug = {
Stack: class extends Error {
constructor(description, ...params) {
super(...params);
this.name = 'Debug.Stack';
}
},
realtime: false,
logList: [],
maxLogCache: 100,
switchRealtimeLog: function () {
Debug.enableRealtimeLog(Debug.realtime);
},
enableRealtimeLog: function (enabled) {
Debug.realtime = enabled;
if (enabled) {
Debug.shiftLog();
}
},
log: function () {
if (Debug.realtime) {
console.log(...arguments, `\n`, (new Debug.Stack()).stack);
return;
}
Debug.logList.push({
args: arguments,
stack: (new Debug.Stack()).stack
});
if (Debug.logList.length > Debug.maxLogCache) {
Debug.logList.shift();
}
},
shiftLog: function () {
while (Debug.logList.length) {
const log = Debug.logList.shift();
console.log(...log.args, `\n`, log.stack);
}
}
}
const asyncList = [];
function consoleAsyncTasks(name, state) {
if (!state) {
asyncList.splice(asyncList.indexOf(name), 1);
} else {
asyncList.push(name);
}
console.log(`${state ? 'Start' : 'End'} ${name}\n`, JSON.parse(JSON.stringify(asyncList)));
}
function logSwitchAsyncTask(args) {
try{
const argsStr = Array.from(args).join(',');
const name = `${args.callee.name}${argsStr === '' ? argsStr : `(${argsStr})`}`;
consoleAsyncTasks(name, asyncList.indexOf(name) === -1);
}catch(e){}
}
//ajax
function $doc(h) {
const d = document.implementation.createHTMLDocument(''); d.documentElement.innerHTML = h; return d;
}
var $ajax = {
interval: 300, // DO NOT DECREASE THIS NUMBER, OR IT MAY TRIGGER THE SERVER'S LIMITER AND YOU WILL GET BANNED
max: 4,
tid: null,
conn: 0,
index: 0,
queue: [],
fetch: function (url, data, method, context = {}, headers = {}) {
return new Promise((resolve, reject) => {
$ajax.add(method, url, data, resolve, reject, context, headers);
});
},
open: function (url, data, method, context = {}, headers = {}) {
$ajax.fetch(url, data, method, context, headers).then(goto).catch(e=>{console.error(e)});
},
openNoFetch: function (url, newTab) {
window.open(url, newTab ? '_blank' : '_self')
// const a = gE('body').appendChild(cE('a'));
// a.href = url;
// a.target = newTab ? '_blank' : '_self';
// a.click();
},
repeat: function (count, func, ...args) {
const list = [];
for (let i = 0; i < count; i++) {
list.push(func(...args));
}
return list;
},
add: function (method, url, data, onload, onerror, context = {}, headers = {}) {
method = !data ? 'GET' : method ?? 'POST';
if (method === 'POST') {
headers['Content-Type'] ??= 'application/x-www-form-urlencoded';
if (data && typeof data === 'object') {
data = Object.entries(data).map(([k, v]) => encodeURIComponent(k) + '=' + encodeURIComponent(v)).join('&');
}
} else if (method === 'JSON') {
method = 'POST';
headers['Content-Type'] ??= 'application/json';
if (data && typeof data === 'object') {
data = JSON.stringify(data);
}
}
context.onload = onload;
context.onerror = onerror;
$ajax.queue.push({ method, url, data, headers, context, onload: $ajax.onload, onerror: $ajax.onerror });
$ajax.next();
},
next: function () {
if (!$ajax.queue[$ajax.index] || $ajax.error) {
return;
}
if ($ajax.tid) {
if (!$ajax.conn) {
clearTimeout($ajax.tid);
$ajax.timer();
$ajax.send();
}
} else {
if ($ajax.conn < $ajax.max) {
$ajax.timer();
$ajax.send();
}
}
},
timer: function () {
var _ns = isIsekai ? 'hvuti' : 'hvut';
function getValue(k, d, p = _ns + '_') { const v = localStorage.getItem(p + k); return v === null ? d : JSON.parse(v); }
function setValue(k, v, p = _ns + '_', r) { localStorage.setItem(p + k, JSON.stringify(v, r)); }
function ontimer() {
const now = new Date().getTime();
const last = getValue('last_post');
if (last && last - now < $ajax.interval) {
$ajax.next();
return;
}
setValue('last_post', now);
$ajax.tid = null;
$ajax.next();
};
$ajax.tid = setTimeout(ontimer, $ajax.interval);
},
send: function () {
GM_xmlhttpRequest($ajax.queue[$ajax.index]);
$ajax.index++;
$ajax.conn++;
},
onload: function (r) {
$ajax.conn--;
const text = r.responseText;
if (r.status !== 200) {
$ajax.error = `${r.status} ${r.statusText}: ${r.finalUrl}`;
r.context.onerror?.();
} else if (text === 'state lock limiter in effect') {
if ($ajax.error !== text) {
// popup(`<p style="color: #f00; font-weight: bold;">${text}</p><p>Your connection speed is so fast that <br>you have reached the maximum connection limit.</p><p>Try again later.</p>`);
console.error(`${text}\nYour connection speed is so fast that you have reached the maximum connection limit. Try again later.`)
}
$ajax.error = text;
r.context.onerror?.();
} else {
r.context.onload?.(text);
$ajax.next();
}
},
onerror: function (r) {
$ajax.conn--;
$ajax.error = `${r.status} ${r.statusText}: ${r.finalUrl}`;
r.context.onerror?.();
$ajax.next();
},
};
window.addEventListener('unhandledrejection', (e) => { console.error($ajax.error, e); });
(function init() {
if (!checkIsHV()) {
return;
}
if (!gE('#navbar,#riddlecounter,#textlog')) {
setTimeout(goto, 5 * _1m);
return;
}
g('version', GM_info ? GM_info.script.version.substr(0, 4) : '2.90');
if (!getValue('option')) {
g('lang', window.prompt('请输入以下语言代码对应的数字\nPlease put in the number of your preferred language (0, 1 or 2)\n0.简体中文\n1.繁體中文\n2.English', 0) || 2);
addStyle(g('lang'));
_alert(0, '请设置hvAutoAttack', '請設置hvAutoAttack', 'Please config this script');
gE('.hvAAButton').click();
return;
}
loadOption();
g('lang', g('option').lang || '0');
addStyle(g('lang'));
if (g('option').version !== g('version')) {
gE('.hvAAButton').click();
if (_alert(1, 'hvAutoAttack版本更新,请重新设置\n强烈推荐【重置设置】后再设置。\n是否查看更新说明?', 'hvAutoAttack版本更新,請重新設置\n強烈推薦【重置設置】後再設置。\n是否查看更新說明?', 'hvAutoAttack version update, please reset\nIt\'s recommended to reset all configuration.\nDo you want to read the changelog?')) {
$ajax.openNoFetch('https://github.com/dodying/UserJs/commits/master/HentaiVerse/hvAutoAttack/hvAutoAttack.user.js', true);
}
gE('.hvAAReset').focus();
return;
}
if (gE('[class^="c5"],[class^="c4"]') && _alert(1, '请设置字体\n使用默认字体可能使某些功能失效\n是否查看相关说明?', '請設置字體\n使用默認字體可能使某些功能失效\n是否查看相關說明?', 'Please set the font\nThe default font may make some functions fail to work\nDo you want to see instructions?')) {
$ajax.openNoFetch(`https://github.com/dodying/UserJs/blob/master/HentaiVerse/hvAutoAttack/README${g('lang') === '2' ? '_en.md#about-font' : '.md#关于字体的说明'}`, true);
return;
}
unsafeWindow = typeof unsafeWindow === 'undefined' ? window : unsafeWindow;
if (gE('#riddlecounter')) { // 需要答题
if (!g('option').riddlePopup || window.opener) {
riddleAlert(); // 答题警报
return;
}
window.open(window.location.href, 'riddleWindow', 'resizable,scrollbars,width=1241,height=707');
return;
}
if (window.location.href.indexOf(`?s=Battle&ss=ba`) !== -1) {
// 补充记录(因写入冲突、网络卡顿等)未被记录的encounter链接
const encounterURL = window.location.href?.split('/')[3];
const encounter = getEncounter();
if (!encounter.filter(e => e.href === encounterURL).length) {
encounter.unshift({ href: encounterURL, time: time(0), encountered: time(0) });
}
setEncounter(encounter);
}
if (!gE('#navbar')) { // 战斗中
const box2 = gE('#battle_main').appendChild(cE('div'));
box2.id = 'hvAABox2';
setPauseUI(box2);
reloader();
g('attackStatus', g('option').attackStatus);
g('timeNow', time(0));
g('runSpeed', 1);
Debug.log('______________newRound', false);
newRound(false);
if (g('option').recordEach && !getValue('battleCode')) {
setValue('battleCode', `${time(1)}: ${g('battle')?.roundType?.toUpperCase()}-${g('battle')?.roundAll}`);
}
onBattle();
updateEncounter(false, true);
return;
}
if(window.top.location.href.endsWith(`?s=Battle`)){
$ajax.openNoFetch(getValue('lastHref'));
return;
}
// 战斗外
if (window.location.href.indexOf(`?s=Battle&ss=ba`) === -1) { // 不缓存encounter
setValue('lastHref', window.top.location.href); // 缓存进入战斗前的页面地址
setArenaDisplay();
}
delValue(1);
if (g('option').showQuickSite && g('option').quickSite) {
quickSite();
}
const hvAAPauseUI = document.body.appendChild(cE('div'));
hvAAPauseUI.classList.add('hvAAPauseUI');
setPauseUI(hvAAPauseUI);
asyncOnIdle();
}());
function setArenaDisplay(){
if(window.location.href.indexOf(`?s=Battle&ss=ar`) === -1 && window.location.href.indexOf(`?s=Battle&ss=rb`) === -1){
return;
}
var ar = g('option').idleArenaValue?.split(',');
if(!ar || ar.length === 0){
return;
}
if(!g('option').obscureNotIdleArena){
return;
}
gE('img[src*="startchallenge.png"]', 'all', document).forEach((btn) => {
const temp = btn.getAttribute('onclick').match(/init_battle\((\d+),\d+,'(.*?)'\)/);
if(ar.includes(temp[1])) {
return;
}
gE('div', 'all', btn.parentNode.parentNode).forEach(div=>{div.style.cssText += 'color:grey!important;'});
});
}
function loadOption() {
let option = getValue('option', true);
const aliasDict = {
'debuffSkillImAll': 'debuffSkillAllIm',
'debuffSkillWeAll': 'debuffSkillAllWk',
'debuffSkillAllImCondition': 'debuffSkillImpCondition',
'debuffSkillAllWeCondition': 'debuffSkillWkCondition',
'battleUnresponsive_Alert': 'delayAlert',
'battleUnresponsive_Reload': 'delayReload',
'battleUnresponsive_Alt': 'delayAlt',
'battleUnresponsiveTime_Alert': 'delayAlertTime',
'battleUnresponsiveTime_Reload': 'delayReloadTime',
'battleUnresponsiveTime_Alt': 'delayAltTime',
}
for (let key in aliasDict) {
const itemArray = key.split('_');
if (itemArray.length === 1) {
option[key] ??= option[aliasDict[key]];
option[aliasDict[key]] = undefined;
} else {
option[itemArray[0]] ??= {};
option[itemArray[0]][itemArray[1]] ??= option[aliasDict[key]];
}
}
if(isFrame){
g('option', option);
} else{
g('option', setValue('option', option));
}
}
function pauseAsync(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function asyncOnIdle() { try {
if(getValue('disabled')){
await pauseAsync(_1s);
return await asyncOnIdle();
}
let notBattleReady = false;
const idleStart = time(0);
await Promise.all([
(async () => { try {
await asyncGetItems();
const checked = await asyncCheckSupply();
notBattleReady ||= !checked;
} catch (e) {console.error(e)}})(),
asyncSetStamina(),
asyncSetEnergyDrinkHathperk(),
asyncSetAbilityData(),
updateArena(),
updateEncounter(g('option').encounter),
(async () => { try {
const checked = await asyncCheckRepair();
notBattleReady ||= !checked;
} catch (e) {console.error(e)}})(),
]);
if (notBattleReady) {
return;
}
if (g('option').idleArena && g('option').idleArenaValue) {
startUpdateArena(idleStart);
}
setTimeout(autoSwitchIsekai, (g('option').isekaiTime * (Math.random() * 20 + 90) / 100) * _1s - (time(0) - idleStart));
} catch (e) {console.error(e)}}
// 通用//
function setPauseUI(parent) {
setPauseButton(parent);
setPauseHotkey();
}
function setPauseButton(parent) {
if (!g('option').pauseButton) {
return;
}
const button = parent.appendChild(cE('button'));
button.innerHTML = '<l0>暂停</l0><l1>暫停</l1><l2>Pause</l2>';
if (getValue('disabled')) { // 如果禁用
document.title = _alert(-1, 'hvAutoAttack暂停中', 'hvAutoAttack暫停中', 'hvAutoAttack Paused');
button.innerHTML = '<l0>继续</l0><l1>繼續</l1><l2>Continue</l2>';
}
button.className = 'pauseChange';
button.onclick = pauseChange;
}
function setPauseHotkey() {
if (!g('option').pauseHotkey) {
return;
}
document.addEventListener('keydown', (e) => {
if (e.target.tagName === 'INPUT' || e.target.tagName === 'TEXTAREA') {
return;
}
if (e.keyCode === g('option').pauseHotkeyCode) {
pauseChange();
}
}, false);
}
function formatTime(t, size = 2) {
t = [t / _1h, (t / _1m) % 60, (t / _1s) % 60, (t % _1s) / 10].map(cdi => Math.floor(cdi));
while (t.length > Math.max(size, g('option').encounterQuickCheck ? 2 : 3)) { // remove zero front
const front = t.shift();
if (!front) {
continue;
}
t.unshift(front);
break;
}
return t;
}
function getKeys(objArr, prop) {
let out = [];
objArr.forEach((_objArr) => {
out = prop ? out.concat(Object.keys(_objArr[prop])) : out.concat(Object.keys(_objArr));
});
out = out.sort();
for (let i = 1; i < out.length; i++) {
if (out[i - 1] === out[i]) {
out.splice(i, 1);
i--;
}
}
return out;
}
function time(e, stamp) {
const date = stamp ? new Date(stamp) : new Date();
if (e === 0) {
return date.getTime();
} if (e === 1) {
return `${date.getUTCMonth() + 1}/${date.getUTCDate()}`;
} if (e === 2) {
return `${date.getUTCFullYear()}/${date.getUTCMonth() + 1}/${date.getUTCDate()}`;
} if (e === 3) {
return date.toLocaleString(navigator.language, {
hour12: false,
});
}
}
function gE(ele, mode, parent) { // 获取元素
if (typeof ele === 'object') {
return ele;
} if (mode === undefined && parent === undefined) {
return (isNaN(ele * 1)) ? document.querySelector(ele) : document.getElementById(ele);
} if (mode === 'all') {
return (parent === undefined) ? document.querySelectorAll(ele) : parent.querySelectorAll(ele);
} if (typeof mode === 'object' && parent === undefined) {
return mode.querySelector(ele);
}
}
function cE(name) { // 创建元素
return document.createElement(name);
}
function isOn(id) { // 是否可以施放技能/使用物品
if (id * 1 > 10000) { // 使用物品
return gE(`.bti3>div[onmouseover*="${id}"]`);
} // 施放技能
return (gE(id) && gE(id).style.opacity !== '0.5') ? gE(id) : false;
}
function setLocal(item, value) {
if (typeof GM_setValue === 'undefined') {
window.localStorage[`hvAA-${item}`] = (typeof value === 'string') ? value : JSON.stringify(value);
} else {
GM_setValue(item, value);
}
}
function setValue(item, value) { // 储存数据
if (!standalone.includes(item)) {
setLocal(item, value);
return value;
}
setLocal(`${current}_${item}`, value);
if (sharable.includes(item) && !getValue('option').optionStandalone) {
setLocal(`${other}_${item}`, value);
}
return value;
}
function getLocal(item, toJSON) {
if (typeof GM_getValue === 'undefined' || !GM_getValue(item, null)) {
item = `hvAA-${item}`;
return (item in window.localStorage) ? ((toJSON) ? JSON.parse(window.localStorage[item]) : window.localStorage[item]) : null;
}
return GM_getValue(item, null);
}
function getValue(key, toJSON) { // 读取数据
if (!standalone.includes(key)) {
return getLocal(key, toJSON);
}
let otherWorldItem = getLocal(`${other}_${key}`);
// 将旧的数据迁移到新的数据
if (!getLocal(`${current}_${key}`)) {
let itemExisted = getLocal(key);
if (!itemExisted && sharable.includes(key)) {
itemExisted = otherWorldItem;
}
if (!itemExisted) {
return null; // 若都没有该数据
}
itemExisted = JSON.parse(JSON.stringify(itemExisted));
setLocal(`${current}_${key}`, itemExisted);
delLocal(key);
}
if (Object.keys(excludeStandalone).includes(key)) {
otherWorldItem ??= getLocal(`${current}_${key}`) ?? {};
for (let i of excludeStandalone[key]) {
otherWorldItem[i] = getLocal(`${current}_${key}`)[i];
}
}
setLocal(`${other}_${key}`, otherWorldItem);
return getLocal(`${current}_${key}`);
}
function delLocal(key) {
if (typeof GM_deleteValue === 'undefined') {
window.localStorage.removeItem(`hvAA-${key}`);
return;
}
GM_deleteValue(key);
}
function delValue(key) { // 删除数据
if (standalone.includes(key)) {
key = `${current}_${key}`;
}
if (typeof key === 'string') {
delLocal(key);
return;
}
if (typeof key !== 'number') {
return;
}
const itemMap = {
0: ['disabled'],
1: ['battle', 'battleCode'],
}
for (let item of itemMap[key]) {
delValue(item);
}
}
function goto() { // 前进
window.location.href = window.location;
setTimeout(goto, 5000);
}
function gotoAlt() {
const hv = 'hentaiverse.org';
const alt = 'alt.' + hv;
if(window.location.host === hv) {
window.location.href = window.location.href.replace(`://${hv}`, `://${alt}`)
} else if (window.location.host === alt) {
window.location.href = window.location.href.replace(`://${alt}`, `://${hv}`)
}
}
function g(key, value) { // 全局变量
const hvAA = window.hvAA || {};
if (key === undefined && value === undefined) {
return hvAA;
} if (value === undefined) {
return hvAA[key];
}
hvAA[key] = value;
window.hvAA = hvAA;
return window.hvAA[key];
}
function objArrSort(key) { // 对象数组排序函数,从小到大排序
return function (obj1, obj2) {
return (obj2[key] < obj1[key]) ? 1 : (obj2[key] > obj1[key]) ? -1 : 0;
};
}
function objSort(obj) { // 对象排序
const objNew = {};
const arr = Object.keys(obj).sort();
arr.forEach((key) => {
objNew[key] = obj[key];
});
return objNew;
}
function _alert(func, l0, l1, l2, answer) {
const lang = [l0, l1, l2][g('lang')];
if (func === -1) {
return lang;
} if (func === 0) {
window.alert(lang);
} else if (func === 1) {
return window.confirm(lang);
} else if (func === 2) {
return window.prompt(lang, answer);
}
}
function addStyle(lang) { // CSS
const langStyle = gE('head').appendChild(cE('style'));
langStyle.className = 'hvAA-LangStyle';
langStyle.textContent = `l${lang}{display:inline!important;}`;
if (/^[01]$/.test(lang)) {
langStyle.textContent = `${langStyle.textContent}l01{display:inline!important;}`;
}
const globalStyle = gE('head').appendChild(cE('style'));
const cssContent = [
// hvAA
'l0,l1,l01,l2{display:none;}', // l0: 简体 l1: 繁体 l01:简繁体共用 l2: 英文
'#hvAABox2{position:absolute;left:1075px;padding-top: 6px;}',
'.hvAALog{font-size:20px;}',
'.hvAAPauseUI{top:30px;left:1246px;position:absolute;z-index:9999}',
'.hvAAButton{top:5px;left:1255px;position:absolute;z-index:9999;cursor:pointer;width:24px;height:24px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADi0lEQVRIiZVWPYgUZxj+dvGEk7vsNdPYCMul2J15n+d991PIMkWmOEyMyRW2FoJIUojYp5ADFbZJkyISY3EqKGpgz+Ma4bqrUojICaIsKGIXSSJcsZuD3RT3zWZucquXDwYG5n2f9/d5vnFuHwfAZySfAXgN4DXJzTiOj+3H90OnkmXZAe/9FMm3JJ8AuBGepyRfle2yLDvgnKt8EDVJkq8B3DGzjve+1m63p0n2AVzJbUh2SG455yre+5qZ/aCq983sxMfATwHYJvlCVYckHwFYVdURgO8LAS6RHJJcM7N1VR0CeE5yAGBxT3AR+QrA3wA20tQOq+pFkgOS90Tk85J51Xs9qaorqjoAcC6KohmSGyQHcRx/kbdv7AHgDskXaWqH0zSddc5Voyia2SOXapqmswsLvpam6ez8/Pwn+YcoimYAvARw04XZ5N8qZtZR1aGqXnTOVSd0cRd42U5EzqvqSFWX2u32tPd+yjnnXNiCGslHJAf7ybwM7r2vAdgWkYdZls157w+NK/DeT7Xb7WkAqyTvlZHjOD5oxgtmtqrKLsmze1VJsquqKwsLO9vnnKvkJHpLsq+qo/JAd8BtneTvqvqTiPwoIu9EZKUUpGpmi2Y2UtU+yTdJkhx1JJ8FEl0pruK/TrwA4F2r1WrkgI1G4wjJP0XkdLF9WaZzZnZZVa8GMj5xgf43JvXczFZbLb1ebgnJn0nenjQbEVkG0JsUYOykyi6Aa+XoQTJuTRr8OADJzVBOh+SlckYkz5L8Q0TquXOj0fhURN6r6pkSeAXAUsDaJPnYxXF8jOQrklskh97ryZJTVURWAPwF4DqAX0TkvRl/zTKdK2aeJMnxICFbAHrNZtOKVVdIrrVa2t1jz6sicprkbQC3VPVMGTzMpQvgQY63i8lBFddVdVCk/6TZlMFzopFci+P44H+YHCR3CODc/wUvDPY7ksMg9buZrKr3ATwvyoT3vrafzPP3er1eA9Azs7tjJhcqOBHkeSOKohkROR9K7prZYqnnlSRJjofhb4vIt/V6vUbyN1Xtt1qtb1zpZqs45xyAxXAnvCQ5FJGHqrpiZiMzu5xnHlZxCOABybXw3gvgp/Zq3/gA+BLATVVdyrJsbods2lfVq7lN4crMtapjZndD5pPBixWFLTgU7uQ3AJ6KyLKILAdy9sp25bZMBC//JSRJcjQIYg9Aj+TjZrNp+/mb+Ad711sdZZ1k/QAAAABJRU5ErkJggg==) center no-repeat transparent;}',
'#hvAABox{left:calc(50% - 350px);top:50px;font-size:16px!important;z-index:4;width:700px;height:538px;position:absolute;text-align:left;background-color:#E3E0D1;border:1px solid #000;border-radius:10px;font-family:"Microsoft Yahei";}',
'.hvAATablist{position:relative;left:14px;}',
'.hvAATabmenu{position:absolute;left:-9px;}',
'.hvAATabmenu>span{display:block;padding:5px 10px;margin:0 10px 0 0;border:1px solid #91a7b4;border-radius:5px;background-color:#E3F1F8;color:#000;text-decoration:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;cursor:pointer;}',
'.hvAATabmenu>span:hover{left:-5px;position:relative;color:#0000FF;z-index:2!important;}',
'.hvAATabmenu>span>input{margin:0 0 0 -8px;}',
'.hvAATab{position:absolute;width:605px;height:430px;left:36px;padding:15px;border:1px solid #91A7B4;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,0.1);color:#666;background-color:#EDEBDF;overflow:auto;}',
'.hvAATab>div:nth-child(2n){border:1px solid #EAEAEA;background-color:#FAFAFA;}',
'.hvAATab>div:nth-child(2n+1){border:1px solid #808080;background-color:#DADADA;}',
'.hvAATab a{margin:0 2px;}',
'.hvAATab b{font-family:Georgia,Serif;font-size:larger;}',
'.hvAATab input.hvAANumber{width:24px;text-align:right;}',
'#hvAABox input[type=\'checkbox\']{top: 3px;}',
'.hvAATab ul,.hvAATab ol{margin:0;}',
'.hvAATab label{cursor:pointer;}',
'.hvAATab table{border:2px solid #000;border-collapse:collapse;margin:0 auto;}',
'.hvAATh>*{font-weight:bold;font-size:larger;}',
'.hvAATab table>tbody>tr>*{border:1px solid #000;}',
'#hvAATab-Drop tr>td:nth-child(1),#hvAATab-Usage tr>td:nth-child(1){text-align:left;}',
'#hvAATab-Drop td,#hvAATab-Usage td{text-align:right;white-space:nowrap;}',
// '#hvAATab-Drop td:empty:before,#hvAATab-Usage td:empty:before{content:"";}',
'.selectTable{cursor:pointer;}',
`.selectTable:before{content:"${String.fromCharCode(0x22A0.toString(10))}";}`,
'.hvAACenter{text-align:center;}',
'.hvAATitle{font-weight:bolder;}',
'.hvAAGoto{cursor:pointer;text-decoration:underline;}',
'.hvAANew{width:25px;height:25px;float:left;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAMCAYAAACX8hZLAAAAcElEQVQ4jbVRSQ4AIQjz/59mTiZIF3twmnCwFAq4FkeFXM+5vCzohYxjPMtfxS8CN6iqQ7TfE0wrODxVbzJNgoaTo4CmbBO1ZWICouQ0DHaL259MEzaU+w8pZOdSjcUgaPJDHCbO0A2kuAiuwPGQ+wBms12x8HExTwAAAABJRU5ErkJggg==) center no-repeat transparent;}',
'#hvAATab-Alarm input[type="text"]{width:512px;}',
'.testAlarms>div{border:2px solid #000;}',
'.hvAAArenaLevels{display:none; grid-template-columns:repeat(7, 20px 1fr);}',
'.hvAAcheckItems{display:grid; grid-template-columns:repeat(3, 0.1fr 0.3fr 1fr)}',
'.hvAAcheckItems>input.hvAANumber{width:32px}',
'.hvAAConfig{width:100%;height:16px;}',
'.hvAAButtonBox{position:relative;top:468px;}',
'.encounterUI{font-weight:bold;font-size:10pt;position:absolute;top:58px;left:1240px;text-decoration:none;}',
'.quickSiteBar{position:absolute;top:0px;left:1290px;font-size:18px;text-align:left;width:165px;height:calc(100% - 10px);display:flex;flex-direction:column;flex-wrap:wrap;}',
'.quickSiteBar>span{display:block;max-height:24px;overflow:hidden;text-overflow:ellipsis;}',
'.quickSiteBar>span>a{text-decoration:none;}',
'.customize{border: 2px dashed red!important;min-height:21px;}',
'.customize>.customizeGroup{display:block;background-color:#FFF;}',
'.customize>.customizeGroup:nth-child(2n){background-color:#C9DAF8;}',
'.customizeBox{position:absolute;z-index:-1;border:1px solid #000;background-color:#EDEBDF;}',
'.customizeBox>span{display:inline-block;font-size:16px;margin:0 1px;padding:0 5px;font-weight:bold;border:1px solid #5C0D11;border-radius:10px;}',
'.customizeBox>span.hvAAInspect{padding:0 3px;cursor:pointer;}',
'.customizeBox>span.hvAAInspect[title="on"]{background-color:red;}',
'.customizeBox>span a{text-decoration:none;}',
'.customizeBox>select{max-width:60px;}',
'.favicon{width:16px;height:16px;margin:-3px 1px;border:1px solid #000;border-radius:3px;}',
'.answerBar{z-index:1000;width:710px;height:40px;position:absolute;top:55px;left:282px;display:table;border-spacing:5px;}',
'.answerBar>div{border:4px solid red;display:table-cell;cursor:pointer;}',
'.answerBar>div:hover{background:rgba(63,207,208,0.20);}',
'#hvAAInspectBox{background-color:#EDEBDF;position:absolute;z-index:9;border: 2px solid #5C0D11;font-size:16px;font-weight:bold;padding:3px;display:none;}',
// 全局
'button{border-radius:3px;border:2px solid #808080;cursor:pointer;margin:0 1px;}',
// hv
'#riddleform>div:nth-child(3)>img{width:700px;}',
'#battle_right{overflow:visible;}',
'#pane_log{height:403px;}',
'.tlbQRA{text-align:left;font-weight:bold;}', // 标记已检测的日志行
'.tlbWARN{text-align:left;font-weight:bold;color:red;font-size:20pt;}', // 标记检测出异常的日志行
// 怪物标号用数字替代字母,目前弃用
// '#pane_monster{counter-reset:order;}',
// '.btm2>div:nth-child(1):before{font-size:23px;font-weight:bold;text-shadow:1px 1px 2px;content:counter(order);counter-increment:order;}',
// '.btm2>div:nth-child(1)>img{display:none;}',
].join('');
globalStyle.textContent = cssContent;
optionButton(lang);
}
function optionButton(lang) { // 配置按钮
const optionButton = gE('body').appendChild(cE('div'));
optionButton.className = 'hvAAButton';
optionButton.onclick = function () {
if (gE('#hvAABox')) {
gE('#hvAABox').style.display = (gE('#hvAABox').style.display === 'none') ? 'block' : 'none';
} else {
optionBox();
gE('#hvAATab-Main').style.zIndex = 1;
gE('select[name="lang"]').value = lang;
}
};
}
function optionBox() { // 配置界面
const optionBox = gE('body').appendChild(cE('div'));
optionBox.id = 'hvAABox';
optionBox.innerHTML = [
'<div class="hvAACenter">',
' <h1 style="display:inline;">hvAutoAttack</h1>',
' <a href="https://github.com/dodying/UserJs/commits/master/HentaiVerse/hvAutoAttack/hvAutoAttack.user.js" target="_blank"><l0>更新历史</l0><l1>更新歷史</l1><l2>ChangeLog</l2></a>',
' <l01><a href="https://github.com/dodying/UserJs/blob/master/HentaiVerse/hvAutoAttack/README.md" target="_blank">使用说明</a></l01><l2><a href="https://github.com/dodying/UserJs/blob/master/HentaiVerse/hvAutoAttack/README_en.md" target="_blank">README</a></l2>',
' <select name="lang"><option value="0">简体中文</option><option value="1">繁體中文</option><option value="2">English</option></select>',
(g('option')?.optionStandalone? isIsekai?'<l0>当前为异世界单独配置</l0><l1>當前為異世界單獨配置</l1><l2>Using Isekai standalone option</l2>':'<l0>当前为恒定世界单独配置</l0><l1>當前為恆定世界單獨配置</l1><l2>Using Persistent standalone option</l2>':''),
' <l2><span style="font-size:small;"><a target="_blank" href="https://greasyfork.org/forum/profile/18194/Koko191" style="color:#E3E0D1;background-color:#E3E0D1;" title="Thanks to Koko191 who give help in the translation">by Koko191</a></span></l2></div>',
'<div class="hvAATablist">',
'<div class="hvAATabmenu">',
' <span name="Main"><l0>主要选项</l0><l1>主要選項</l1><l2>Main</l2></span>',
' <span name="BattleStarter"><l0>战斗开启</l0><l1>戰鬥開啟</l1><l2>BattleStarter</l2></span>',
' <span name="Recovery"><l0>恢复技能</l0><l1>恢復技能</l1><l2>Recovery</l2></span>',
' <span name="Channel"><input id="channelSkillSwitch" type="checkbox"><l0>引导技能</l0><l1>引導技能</l1><l2>Channel Spells</l2></span>',
' <span name="Buff"><input id="buffSkillSwitch" type="checkbox">BUFF<l01>技能</l01><l2> Spells</l2></span>',
' <span name="Debuff"><input id="debuffSkillSwitch" type="checkbox">DEBUFF<l01>技能</l01><l2> Spells</l2></span>',
' <span name="Skill"><input id="skillSwitch" type="checkbox"><l01>其他技能</l01><l2>Skills</l2></span>',
' <span name="Scroll"><input id="scrollSwitch" type="checkbox"><l0>卷轴</l0><l1>捲軸</l1><l2>Scroll</l2></span>',
' <span name="Alarm"><l0>警报</l0><l1>警報</l1><l2>Alarm</l2></span>',
' <span name="Rule"><l0>攻击规则</l0><l1>攻擊規則</l1><l2>Attack Rule</l2></span>',
' <span name="Drop"><input id="dropMonitor" type="checkbox"><l0>掉落监测</l0><l1>掉落監測</l1><l2>Drops Tracking</l2></span>',
' <span name="Usage"><input id="recordUsage" type="checkbox"><l0>数据记录</l0><l1>數據記錄</l1><l2>Usage Tracking</l2></span>',
' <span name="Tools"><l0>工具</l0><l1>工具</l1><l2>Tools</l2></span>',
' <span name="Feedback"><l01>反馈</l01><l2>Feedback</l2></span>',
'</div>',
'<div class="hvAATab" id="hvAATab-Main">',
' <div><b><l0>异世界相关</l0><l1>異世界相關</l1><l2>Isekai</l2></b>: ',
' <input id="isekai" type="checkbox"><label for="isekai"><l0>自动切换恒定世界和异世界;</l0><l1>自動切換恆定世界和異世界;</l1><l2>Auto switch between Isekai and Persistent;</l2></label>',
' <input id="optionStandalone" type="checkbox"><label for="optionStandalone"><l0>两个世界使用不同的配置</l0><l1>兩個世界使用不同的配置</l1><l2>Use standalone options.</l2></label>; ',
' <l0><br>在任意页面停留</l0><l1><br>在任意頁面停留</l1><l2><br>Idle in any page for </l2><input class="hvAANumber" name="isekaiTime" type="text"><l0>秒后,进行跳转</l0><l1>秒後,進行跳轉</l1><l2>s, start switch check</l2></label></div>',
'<div><b><l0>小马答题</l0><l1>小馬答題</l1><l2>RIDDLE</l2></b>: <input id="riddlePopup" type="checkbox"><label for="riddlePopup"><l0>弹窗答题</l0><l1>弹窗答题</l1><l2>POPUP a window to answer</l2></label>; <button class="testPopup"><l0>预处理</l0><l1>預處理</l1><l2>Pretreat</l2></button>',
' <div><l01>内置插件</l01><l2>Built-in Plugin</l2>: <input id="riddleRadio" type="checkbox"><label for="riddleRadio">RiddleLimiter Plus</label>; </div>',
' <div><l0>时间</l0><l1>時間</l1><l2>If ETR</l2> ≤ <input class="hvAANumber" name="riddleAnswerTime" placeholder="3" type="text"><l0>秒,如果输入框为空则随机生成答案并提交</l0><l1>秒,如果輸入框為空則隨機生成答案並提交</l1><l2>s and no answer has been chosen yet, a random answer will be generated and submitted</l2></div>',
' </div>',
' <div><b><l0>脚本行为</l0><l1>腳本行為</l1><l2>Script Activity</l2></b>',
' <div><l0>暂停相关</l0><l1>暫停相關</l1><l2>Pause with</l2>: ',
' <input id="pauseButton" type="checkbox"><label for="pauseButton"><l0>使用按钮</l0><l1>使用按鈕</l1><l2>Button</l2></label>; ',
' <input id="pauseHotkey" type="checkbox"><label for="pauseHotkey"><l0>使用热键</l0><l1>使用熱鍵</l1><l2>Hotkey</l2>: <input name="pauseHotkeyStr" style="width:30px;" type="text"><input class="hvAANumber" name="pauseHotkeyCode" type="hidden" disabled="true"></label></div>',
' <div><l0>警告相关</l0><l1>警告相關</l1><l2>To Warn</l2>: ',
' <input id="alert" type="checkbox"><label for="alert"><l0>音频警报</l0><l1>音頻警報</l1><l2>Audio Alarms</l2></label>; ',
' <input id="notification" type="checkbox"><label for="notification"><l0>桌面通知</l0><l1>桌面通知</l1><l2>Notifications</l2></label> ',
' <button class="testNotification"><l0>预处理</l0><l1>預處理</l1><l2>Pretreat</l2></button></div>',
' <div><l0>掉落及数据记录</l0><l1>掉落及數據記錄</l1><l2>Drops and Usage Tracking</l2>: <input id="recordEach" type="checkbox"><label for="recordEach"><l0>单独记录每场战役</l0><l1>單獨記錄每場戰役</l1><l2>Record each battle separately</l2></label></div>',
' <div><l0>延迟</l0><l1>延遲</l1><l2>Delay</l2>: 1. <l0>Buff/Debuff/其他技能</l0><l1>Buff/Debuff/其他技能</l1><l2>Skills&BUFF/DEBUFF Spells</l2>: <input class="hvAANumber" name="delay" placeholder="200" type="text">ms 2. <l01>其他</l01><l2>Other</l2>: <input class="hvAANumber" name="delay2" placeholder="30" type="text">ms (',
' <l0>说明: 单位毫秒,且在设定值基础上取其的50%-150%进行延迟,0表示不延迟</l0><l1>說明: 單位毫秒,且在設定值基礎上取其的50%-150%進行延遲,0表示不延遲</l1><l2>Note: unit milliseconds, and based on the set value multiply 50% -150% to delay, 0 means no delay</l2>)</div>',
' </div>',
' <div id="attackStatus" style="color:red;"><b>*<l0>攻击模式</l0><l1>攻擊模式</l1><l2>Attack Mode</l2></b>:',
' <select class="hvAANumber" name="attackStatus"><option value="-1"></option><option value="0">物理 / Physical</option><option value="1">火 / Fire</option><option value="2">冰 / Cold</option><option value="3">雷 / Elec</option><option value="4">风 / Wind</option><option value="5">圣 / Divine</option><option value="6">暗 / Forbidden</option></select></div>',
' <div class="battleOrder"><b><l0>战斗执行顺序(未配置的按照下面的顺序)</l0><l1>戰鬥執行順序(未配置的按照下面的順序)</l1><l2>Battal Order(Using order below as default if not configed)</l2></b>: <input name="battleOrderName" style="width:80%;" type="text" disabled="true"><input name="battleOrderValue" style="width:80%;" type="hidden" disabled="true"><br>',
' <input id="battleOrder_autoPause" value="Pause,2" type="checkbox"><label for="battleOrder_autoPause"><l0>自动暂停</l0><l1>自動暫停</l1><l2>Auto Pause</l2></label>',
' <input id="battleOrder_autoRecover" value="Rec,1" type="checkbox"><label for="battleOrder_autoRecover"><l0>恢复技能</l0><l1>恢復技能</l1><l2>Cure Skills</l2></label>',
' <input id="battleOrder_autoDefend" value="Def,4" type="checkbox"><label for="battleOrder_autoDefend"><l0>自动防御</l0><l1>自動防禦</l1><l2>Auto Defence</l2></label>',
' <input id="battleOrder_useScroll" value="Scroll,5" type="checkbox"><label for="battleOrder_useScroll"><l0>使用卷轴</l0><l1>使用捲軸</l1><l2>Use Scroll</l2></label><br>',
' <input id="battleOrder_useChannelSkill" value="Channel,6" type="checkbox"><label for="battleOrder_useChannelSkill"><l0>引导技能</l0><l1>引導技能</l1><l2>Channel Skill</l2></label>',
' <input id="battleOrder_useBuffSkill" value="Buff,7" type="checkbox"><label for="battleOrder_useBuffSkill"><l0>Buff技能</l0><l1>Buff技能</l1><l2>Buff Skills</l2></label>',
' <input id="battleOrder_useInfusions" value="Infus,8" type="checkbox"><label for="battleOrder_useInfusions"><l0>使用魔药</l0><l1>使用魔藥</l1><l2>Infusions</l2></label>',
' <input id="battleOrder_useDeSkill" value="Debuff,9" type="checkbox"><label for="battleOrder_useDeSkill"><l0>Debuff技能</l0><l1>Debuff技能</l1><l2>Debuff Skills</l2></label><br>',
' <input id="battleOrder_autoFocus" value="Focus,10" type="checkbox"><label for="battleOrder_autoFocus"><l0>自动集中</l0><l1>自動集中</l1><l2>Focus</l2></label>',
' <input id="battleOrder_autoSS" value="SS,3" type="checkbox"><label for="battleOrder_autoSS"><l0>灵动架式</l0><l1>靈動架式</l1><l2>Auto Sprite</l2></label>',
' <input id="battleOrder_autoSkill" value="Skill,11" type="checkbox"><label for="battleOrder_autoSkill"><l0>释放技能</l0><l1>釋放技能</l1><l2>Auto Skill</l2></label>',
' <input id="battleOrder_attack" value="Atk,12" type="checkbox"><label for="battleOrder_attack"><l0>自动攻击</l0><l1>自動攻擊</l1><l2>Attack</l2></label></div>',
' <div><input id="infusionSwitch" type="checkbox"><b><l0>使用魔药(与攻击模式相同)</l0><l1>使用魔藥(與攻擊模式相同)</l1><l2>Use Infusion(same as attack mode)</l2></b>{{infusionCondition}}</div>',
' <div><label for="middleSkillCondition"><b><l0>中阶魔法技能使用条件</l0><l1>中階魔法技能使用條件</l1><l2>Conditions for 2nd Tier Offensive Magic</l2></b>: {{middleSkillCondition}}</label></div>',
' <div><label for="highSkillCondition"><b><l0>高阶魔法技能使用条件</l0><l1>高階魔法技能使用條件</l1><l2>Conditions for 3rd Tier Offensive Magic</l2></b>: {{highSkillCondition}}</label></div>',
' <div><input id="etherTap" type="checkbox"><label for="etherTap"><b><l0>以太水龙头</l0><l1>以太水龍頭</l1><l2>Ether Tap</l2></b></label>: {{etherTapCondition}}</div>',
' <div><input id="turnOnSS" type="checkbox"><label for="turnOnSS"><b><l0>开启灵动架式</l0><l1>開啟靈動架勢</l1><l2>Turn on Spirit Stance</l2></b></label>: {{turnOnSSCondition}}</div>',
' <div><input id="turnOffSS" type="checkbox"><label for="turnOffSS"><b><l0>关闭灵动架式</l0><l1>關閉靈動架勢</l1><l2>Turn off Spirit Stance</l2></b></label>: {{turnOffSSCondition}}</div>',
' <div><input id="defend" type="checkbox"><label for="defend"><b>Defend</b></label>: {{defendCondition}}</div>',
' <div><input id="focus" type="checkbox"><label for="focus"><b>Focus</b></label>: {{focusCondition}}</div>',
' <div><input id="autoPause" type="checkbox"><label for="autoPause"><b><l0>自动暂停</l0><l1>自動暫停</l1><l2>Pause</l2></b></label>: {{pauseCondition}}</div>',
' <div><input id="autoFlee" type="checkbox"><label for="autoFlee"><b><l0>自动逃跑</l0><l1>自動逃跑</l1><l2>Flee</l2></b></label>: {{fleeCondition}}</div>',
' <div><input id="autoSkipDefeated" type="checkbox"><label for="autoSkipDefeated"><b><l0>战败自动退出战斗</l0><l1>戰敗自動退出戰鬥</l1><l2>Exit battle when defeated.</l2></b></label></div>',
' <div><b><l0>继续新回合延时</l0><l1>繼續新回合延時</l1><l2>New round wait time</l2></b>: <input class="hvAANumber" name="NewRoundWaitTime" placeholder="0" type="text"><l0>(秒)</l0><l1>(秒)</l1><l2>(s)</l2></div>',
' <div><b><l0>战斗结束退出延时</l0><l1>戰鬥結束退出延時</l1><l2>Exit battle wait time</l2></b>: <input class="hvAANumber" name="ExitBattleWaitTime" placeholder="3" type="text"><l0>(秒)</l0><l1>(秒)</l1><l2>(s)</l2></div>',
' <div style="display: flex; flex-flow: wrap;"><b><l0>当损失精力</l0><l1>當損失精力</l1><l2>If it lost Stamina</l2></b> ≥ <input class="hvAANumber" name="staminaLose" placeholder="5" type="text">: ',
' <input id="staminaPause" type="checkbox"><label for="staminaPause"><l0>脚本暂停</l0><l1>腳本暫停</l1><l2>pause script</l2></label>;',
' <input id="staminaWarn" type="checkbox"><label for="staminaWarn"><l01>警告</l01><l2>warn</l2></label>; ',
' <input id="staminaFlee" type="checkbox"><label for="staminaFlee"><l01>逃跑</l01><l2>flee</l2></label>',
' <button class="staminaLostLog"><l0>精力损失日志</l0><l1>精力損失日誌</l1><l2>staminaLostLog</l2></button></div>',
' <div style="display: flex; flex-flow: wrap;"><b><l0>战斗页面停留</l0><l1>戰鬥頁面停留</l1><l2>If the page for </l2></b>: ',
' <input id="battleUnresponsive_Alert" type="checkbox"><label for="battleUnresponsive_Alert"><input class="hvAANumber" name="battleUnresponsiveTime_Alert" type="text"><l0>秒,警报</l0><l1>秒,警報</l1><l2>s, alarm</l2></label>; ',
' <input id="battleUnresponsive_Reload" type="checkbox"><label for="battleUnresponsive_Reload"><input class="hvAANumber" name="battleUnresponsiveTime_Reload" type="text"><l0>秒,刷新页面</l0><l1>秒,刷新頁面</l1><l2>s, reload page</l2></label>',
' <div><input id="battleUnresponsive_Alt" type="checkbox"><label for="battleUnresponsive_Alt"><input class="hvAANumber" name="battleUnresponsiveTime_Alt" type="text"><l0>秒,切换主服务器与alt服务器</l0><l1>秒,切換主服務器與alt服務器</l1><l2>s, switch between alt.hentaiverse</l2></label></div></div>',
' </div>',
'<div class="hvAATab" id="hvAATab-BattleStarter">',
' <div><input id="encounter" type="checkbox"><label for="encounter"><b><l0>自动遭遇战</l0><l1>自動遭遇戰</l1><l2>Auto Encounter</l2></b></label><input id="encounterQuickCheck" type="checkbox"><label for="encounterQuickCheck"><l0>精准倒计时(影响性能)</l0><l1>精準(影響性能)</l1><l2>Precise encounter cd(might reduced performsance)</l2></label></div>',
' <div><input id="idleArena" type="checkbox"><label for="idleArena"><b><l0>闲置竞技场</l0><l1>閒置競技場</l1><l2>Idle Arena</l2>: </b>',
' <l0>在任意页面停留</l0><l1>在任意頁面停留</l1><l2>Idle in any page for </l2><input class="hvAANumber" name="idleArenaTime" type="text"><l0>秒后,开始竞技场</l0><l1>秒後,開始競技場</l1><l2>s, start Arena</l2></label> <button class="idleArenaReset"><l01>重置</l01><l2>Reset</l2></button>;<br>',
' <l0>进行的竞技场相对应等级</l0><l1>進行的競技場相對應等級</l1><l2>The levels of the Arena you want to complete</l2>: ',
' <button class="hvAAShowLevels"><l0>显示更多</l0><l1>顯示更多</l1><l2>Show more</l2></button><button class="hvAALevelsClear"><l01>清空</l01><l2>Clear</l2></button><br>',
' <input name="idleArenaLevels" style="width:calc(100% - 20px);" type="text" disabled="true"><input name="idleArenaValue" style="width:98%;" type="hidden" disabled="true">',
' <div class="hvAAArenaLevels">',
' <input id="arLevel_1" value="1,1" type="checkbox"><label for="arLevel_1">1</label> <input id="arLevel_10" value="10,3" type="checkbox"><label for="arLevel_10">10</label> <input id="arLevel_20" value="20,5" type="checkbox"><label for="arLevel_20">20</label> <input id="arLevel_30" value="30,8" type="checkbox"><label for="arLevel_30">30</label> <input id="arLevel_40" value="40,9" type="checkbox"><label for="arLevel_40">40</label> <input id="arLevel_50" value="50,11" type="checkbox"><label for="arLevel_50">50</label> <input id="arLevel_60" value="60,12" type="checkbox"><label for="arLevel_60">60</label> <input id="arLevel_70" value="70,13" type="checkbox"><label for="arLevel_70">70</label> <input id="arLevel_80" value="80,15" type="checkbox"><label for="arLevel_80">80</label> <input id="arLevel_90" value="90,16" type="checkbox"><label for="arLevel_90">90</label> <input id="arLevel_100" value="100,17" type="checkbox"><label for="arLevel_100">100</label> <input id="arLevel_110" value="110,19" type="checkbox"><label for="arLevel_110">110</label>',
' <input id="arLevel_120" value="120,20" type="checkbox"><label for="arLevel_120">120</label> <input id="arLevel_130" value="130,21" type="checkbox"><label for="arLevel_130">130</label> <input id="arLevel_140" value="140,23" type="checkbox"><label for="arLevel_140">140</label> <input id="arLevel_150" value="150,24" type="checkbox"><label for="arLevel_150">150</label> <input id="arLevel_165" value="165,26" type="checkbox"><label for="arLevel_165">165</label> <input id="arLevel_180" value="180,27" type="checkbox"><label for="arLevel_180">180</label> <input id="arLevel_200" value="200,28" type="checkbox"><label for="arLevel_200">200</label> <input id="arLevel_225" value="225,29" type="checkbox"><label for="arLevel_225">225</label> <input id="arLevel_250" value="250,32" type="checkbox"><label for="arLevel_250">250</label> <input id="arLevel_300" value="300,33" type="checkbox"><label for="arLevel_300">300</label> <input id="arLevel_400" value="400,34" type="checkbox"><label for="arLevel_400">400</label> <input id="arLevel_500" value="500,35" type="checkbox"><label for="arLevel_500">500</label>',
' <input id="arLevel_RB50" value="RB50,105" type="checkbox"><label for="arLevel_RB50">RB50</label> <input id="arLevel_RB75A" value="RB75A,106" type="checkbox"><label for="arLevel_RB75A">RB75A</label> <input id="arLevel_RB75B" value="RB75B,107" type="checkbox"><label for="arLevel_RB75B">RB75B</label> <input id="arLevel_RB75C" value="RB75C,108" type="checkbox"><label for="arLevel_RB75C">RB75C</label>',
' <input id="arLevel_RB100" value="RB100,109" type="checkbox"><label for="arLevel_RB100">RB100</label> <input id="arLevel_RB150" value="RB150,110" type="checkbox"><label for="arLevel_RB150">RB150</label> <input id="arLevel_RB200" value="RB200,111" type="checkbox"><label for="arLevel_RB200">RB200</label> <input id="arLevel_RB250" value="RB250,112" type="checkbox"><label for="arLevel_RB250">RB250</label> <input id="arLevel_GF" value="GF,gr" type="checkbox"><label for="arLevel_GF" >GrindFest </label><input class="hvAANumber" name="idleArenaGrTime" placeholder="1" type="text"></div><div><input id="obscureNotIdleArena" type="checkbox"><label for="obscureNotIdleArena"><l0>页面中置灰未设置且未完成的</l0><l1>頁面中置灰未設置且未完成的</l1><l2>obscure not setted and not battled in Battle>Arena/RingOfBlood</l2></div></div>',
' <div style="display: flex; flex-flow: wrap;">',
' <div><b><l0>精力</l0><l1>精力</l1><l2>Stamina</l2>: </b><l0>阈值</l0><l1>閾值</l1><l2><b></b> threshold</l2>: Min(85, <input class="hvAANumber" name="staminaLow" placeholder="60" type="text">); </div>',
' <div><l0>含本日自然恢复的阈值<l1>含本日自然恢復的閾值</l1><l2><b></b>Stamina threshold with naturally recovers today.</l2>: <input class="hvAANumber" name="staminaLowWithReNat" placeholder="0" type="text">; </div>',
' <div><input id="restoreStamina" type="checkbox"><label for="restoreStamina"><l0>战前恢复</l0><l1>戰前恢復</l1><l2>Restore stamina</l2>; </div>',
' <div><l0>进入遭遇战的最低精力<l1>進入遭遇戰的最低精力</l1><l2><b></b>Minimum stamina to engage encounter</l2>: <input class="hvAANumber" name="staminaEncounter" placeholder="60" type="text"></div>',
' </div>',
' <div><input id="repair" type="checkbox"><label for="repair"><b><l0>修复装备</l0><l1>修復裝備</l1><l2>Repair Equipment</l2></b></label>: ',
' <l0>耐久度</l0><l1>耐久度</l1><l2>Durability</l2> ≤ <input class="hvAANumber" name="repairValue" type="text">%</div>',
' <div><input id="checkSupply" type="checkbox"><b><l0>检查物品库存</l0><l1>檢查物品庫存</l1><l2>Check is item needs supply</l2></b>: ',
' <div class="hvAAcheckItems">',
' <input id="isCheck_11191" type="checkbox"><input class="hvAANumber" name="checkItem_11191" placeholder="0" type="text"><l0>体力药水</l0><l1>體力藥水</l1><l2>Health Potion</l2>',
' <input id="isCheck_11195" type="checkbox"><input class="hvAANumber" name="checkItem_11195" placeholder="0" type="text"><l0>体力长效药</l0><l1>體力長效藥</l1><l2>Health Draught</l2>',
' <input id="isCheck_11199" type="checkbox"><input class="hvAANumber" name="checkItem_11199" placeholder="0" type="text"><l0>体力秘药</l0><l1>體力秘藥</l1><l2>Health Elixir</l2>',
' <input id="isCheck_11291" type="checkbox"><input class="hvAANumber" name="checkItem_11291" placeholder="0" type="text"><l0>魔力药水</l0><l1>魔力藥水</l1><l2>Mana Potion</l2>',
' <input id="isCheck_11295" type="checkbox"><input class="hvAANumber" name="checkItem_11295" placeholder="0" type="text"><l0>魔力长效药</l0><l1>魔力長效藥</l1><l2>Mana Draught</l2>',
' <input id="isCheck_11299" type="checkbox"><input class="hvAANumber" name="checkItem_11299" placeholder="0" type="text"><l0>魔力秘药</l0><l1>魔力秘藥</l1><l2>Mana Elixir</l2>',
' <input id="isCheck_11391" type="checkbox"><input class="hvAANumber" name="checkItem_11391" placeholder="0" type="text"><l0>灵力药水</l0><l1>靈力藥水</l1><l2>Spirit Potion</l2>',
' <input id="isCheck_11395" type="checkbox"><input class="hvAANumber" name="checkItem_11395" placeholder="0" type="text"><l0>灵力长效药</l0><l1>靈力長效藥</l1><l2>Spirit Draught</l2>',
' <input id="isCheck_11399" type="checkbox"><input class="hvAANumber" name="checkItem_11399" placeholder="0" type="text"><l0>灵力秘药</l0><l1>靈力秘藥</l1><l2>Spirit Elixir</l2>',
' <input id="isCheck_11501" type="checkbox"><input class="hvAANumber" name="checkItem_11501" placeholder="0" type="text"><l0>终极秘药</l0><l1>終極秘藥</l1><l2>Last Elixir</l2>',
' <input id="isCheck_19111" type="checkbox"><input class="hvAANumber" name="checkItem_19111" placeholder="0" type="text"><l0>花瓶</l0><l1>花瓶</l1><l2>Flower Vase</l2>',
' <input id="isCheck_19131" type="checkbox"><input class="hvAANumber" name="checkItem_19131" placeholder="0" type="text"><l0>泡泡糖</l0><l1>泡泡糖</l1><l2>Bubble-Gum</l2>',
' <input id="isCheck_11401" type="checkbox"><input class="hvAANumber" name="checkItem_11401" placeholder="0" type="text"><l0>能量饮料</l0><l1>能量飲料</l1><l2>Energy Drink</l2>',
' <input id="isCheck_11402" type="checkbox"><input class="hvAANumber" name="checkItem_11402" placeholder="0" type="text"><l0>咖啡因糖果</l0><l1>咖啡因糖果</l1><l2>Caffeinated Candy</l2>',
' <input id="isCheck_12101" type="checkbox"><input class="hvAANumber" name="checkItem_12101" placeholder="0" type="text"><l0>火焰魔药</l0><l1>火焰魔藥</l1><l2>Infusion of Flames</l2>',
' <input id="isCheck_12201" type="checkbox"><input class="hvAANumber" name="checkItem_12201" placeholder="0" type="text"><l0>冰冷魔药</l0><l1>冰冷魔藥</l1><l2>Infusion of Frost</l2>',
' <input id="isCheck_12301" type="checkbox"><input class="hvAANumber" name="checkItem_12301" placeholder="0" type="text"><l0>闪电魔药</l0><l1>閃電魔藥</l1><l2>Infusion of Lightning</l2>',
' <input id="isCheck_12401" type="checkbox"><input class="hvAANumber" name="checkItem_12401" placeholder="0" type="text"><l0>风暴魔药</l0><l1>風暴魔藥</l1><l2>Infusion of Storms</l2>',
' <input id="isCheck_12501" type="checkbox"><input class="hvAANumber" name="checkItem_12501" placeholder="0" type="text"><l0>神圣魔药</l0><l1>神聖魔藥</l1><l2>Infusion of Divinity</l2>',
' <input id="isCheck_12601" type="checkbox"><input class="hvAANumber" name="checkItem_12601" placeholder="0" type="text"><l0>黑暗魔药</l0><l1>黑暗魔藥</l1><l2>Infusion of Darkness</l2>',
' <input id="isCheck_13101" type="checkbox"><input class="hvAANumber" name="checkItem_13101" placeholder="0" type="text"><l0>加速卷轴</l0><l1>加速捲軸</l1><l2>Scroll of Swiftness</l2>',
' <input id="isCheck_13111" type="checkbox"><input class="hvAANumber" name="checkItem_13111" placeholder="0" type="text"><l0>守护卷轴</l0><l1>守護捲軸</l1><l2>Scroll of Protection</l2>',
' <input id="isCheck_13199" type="checkbox"><input class="hvAANumber" name="checkItem_13199" placeholder="0" type="text"><l0>化身卷轴</l0><l1>化身捲軸</l1><l2>Scroll of the Avatar</l2>',
' <input id="isCheck_13201" type="checkbox"><input class="hvAANumber" name="checkItem_13201" placeholder="0" type="text"><l0>吸收卷轴</l0><l1>吸收捲軸</l1><l2>Scroll of Absorption</l2>',
' <input id="isCheck_13211" type="checkbox"><input class="hvAANumber" name="checkItem_13211" placeholder="0" type="text"><l0>幻影卷轴</l0><l1>幻影捲軸</l1><l2>Scroll of Shadows</l2>',
' <input id="isCheck_13221" type="checkbox"><input class="hvAANumber" name="checkItem_13221" placeholder="0" type="text"><l0>生命卷轴</l0><l1>生命捲軸</l1><l2>Scroll of Life</l2>',
' <input id="isCheck_13299" type="checkbox"><input class="hvAANumber" name="checkItem_13299" placeholder="0" type="text"><l0>众神卷轴</l0><l1>眾神捲軸</l1><l2>Scroll of the Gods</l2>',
'</div></div>',
' </div>',
'<div class="hvAATab" id="hvAATab-Recovery">',
' <div class="itemOrder"><b><l0>施放顺序</l0><l1>施放順序</l1><l2>Cast Order</l2></b>: <input name="itemOrderName" style="width:80%;" type="text" disabled="true"><input name="itemOrderValue" style="width:80%;" type="hidden" disabled="true"><br>',
' <input id="itemOrder_Cure" value="Cure,311" type="checkbox"><label for="itemOrder_Cure"><l0>治疗(Cure)</l0><l1>治療(Cure)</l1><l2>Cure</l2></label>',
' <input id="itemOrder_FC" value="FC,313" type="checkbox"><label for="itemOrder_FC"><l0>完全治愈(FC)</l0><l1>完全治愈(FC)</l1><l2>Full-Cure</l2></label><br>',
' <input id="itemOrder_HG" value="HG,10005" type="checkbox"><label for="itemOrder_HG"><l0>生命宝石(HG)</l0><l1>生命寶石(HG)</l1><l2>Health Gem</l2></label>',
' <input id="itemOrder_MG" value="MG,10006" type="checkbox"><label for="itemOrder_MG"><l0>魔力宝石(MG)</l0><l1>魔力寶石(MG)</l1><l2>Mana Gem</l2></label>',
' <input id="itemOrder_SG" value="SG,10007" type="checkbox"><label for="itemOrder_SG"><l0>灵力宝石(SG)</l0><l1>靈力寶石(SG)</l1><l2>Spirit Gem</l2></label>',
' <input id="itemOrder_Mystic" value="Mystic,10008" type="checkbox"><label for="itemOrder_Mystic"><l0>神秘宝石(Mystic)</l0><l1>神秘寶石(Mystic)</l1><l2>Mystic Gem</l2></label><br>',
' <input id="itemOrder_HP" value="HP,11195" type="checkbox"><label for="itemOrder_HP"><l0>生命药水(HP)</l0><l1>生命藥水(HP)</l1><l2>Health Potion</l2></label>',
' <input id="itemOrder_HE" value="HE,11199" type="checkbox"><label for="itemOrder_HE"><l0>生命秘药(HE)</l0><l1>生命秘藥(HE)</l1><l2>Health Elixir</l2></label>',
' <input id="itemOrder_MP" value="MP,11295" type="checkbox"><label for="itemOrder_MP"><l0>魔力药水(MP)</l0><l1>魔力藥水(MP)</l1><l2>Mana Potion</l2></label><br>',
' <input id="itemOrder_ME" value="ME,11299" type="checkbox"><label for="itemOrder_ME"><l0>魔力秘药(ME)</l0><l1>魔力秘藥(ME)</l1><l2>Mana Elixir</l2></label>',
' <input id="itemOrder_SP" value="SP,11395" type="checkbox"><label for="itemOrder_SP"><l0>灵力药水(SP)</l0><l1>靈力藥水(SP)</l1><l2>Spirit Potion</l2></label>',
' <input id="itemOrder_SE" value="SE,11399" type="checkbox"><label for="itemOrder_SE"><l0>灵力秘药(SE)</l0><l1>靈力秘藥(SE)</l1><l2>Spirit Elixir</l2></label><br>',
' <input id="itemOrder_LE" value="LE,11501" type="checkbox"><label for="itemOrder_LE"><l0>最终秘药(LE)</l0><l1>最終秘藥(LE)</l1><l2>Last Elixir</l2></label>',
' <input id="itemOrder_ED" value="ED,11401" type="checkbox"><label for="itemOrder_ED"><l0>能量饮料(ED)</l0><l1>能量飲料(ED)</l1><l2>Energy Drink</l2></label>',
' <input id="itemOrder_CC" value="CC,11402" type="checkbox"><label for="itemOrder_CC"><l0>咖啡因糖果(CC)</l0><l1>咖啡因糖果(CC)</l1><l2>Caffeinated Candy</l2></label></div>',
' <div><input id="item_HG" type="checkbox"><label for="item_HG"><b><l0>生命宝石(HG)</l0><l1>生命寶石(HG)</l1><l2>Health Gem</l2></b></label>: {{itemHGCondition}}</div>',
' <div><input id="item_MG" type="checkbox"><label for="item_MG"><b><l0>魔力宝石(MG)</l0><l1>魔力寶石(MG)</l1><l2>Mana Gem</l2></b></label>: {{itemMGCondition}}</div>',
' <div><input id="item_SG" type="checkbox"><label for="item_SG"><b><l0>灵力宝石(SG)</l0><l1>靈力寶石(SG)</l1><l2>Spirit Gem</l2></b></label>: {{itemSGCondition}}</div>',
' <div><input id="item_Mystic" type="checkbox"><label for="item_Mystic"><b><l0>神秘宝石(Mystic)</l0><l1>神秘寶石(Mystic)</l1><l2>Mystic Gem</l2></b></label>: {{itemMysticCondition}}</div>',
' <div><input id="item_Cure" type="checkbox"><label for="item_Cure"><b><l0>治疗(Cure)</l0><l1>治療(Cure)</l1><l2>Cure</l2></b></label>: {{itemCureCondition}}</div>',
' <div><input id="item_FC" type="checkbox"><label for="item_FC"><b><l0>完全治愈(FC)</l0><l1>完全治愈(FC)</l1><l2>Full-Cure</l2></b></label>: {{itemFCCondition}}</div>',
' <div><input id="item_HP" type="checkbox"><label for="item_HP"><b><l0>生命药水(HP)</l0><l1>生命藥水(HP)</l1><l2>Health Potion</l2></b></label>: {{itemHPCondition}}</div>',
' <div><input id="item_HE" type="checkbox"><label for="item_HE"><b><l0>生命秘药(HE)</l0><l1>生命秘藥(HE)</l1><l2>Health Elixir</l2></b></label>: {{itemHECondition}}</div>',
' <div><input id="item_MP" type="checkbox"><label for="item_MP"><b><l0>魔力药水(MP)</l0><l1>魔力藥水(MP)</l1><l2>Mana Potion</l2></b></label>: {{itemMPCondition}}</div>',
' <div><input id="item_ME" type="checkbox"><label for="item_ME"><b><l0>魔力秘药(ME)</l0><l1>魔力秘藥(ME)</l1><l2>Mana Elixir</l2></b></label>: {{itemMECondition}}</div>',
' <div><input id="item_SP" type="checkbox"><label for="item_SP"><b><l0>灵力药水(SP)</l0><l1>靈力藥水(SP)</l1><l2>Spirit Potion</l2></b></label>: {{itemSPCondition}}</div>',
' <div><input id="item_SE" type="checkbox"><label for="item_SE"><b><l0>灵力秘药(SE)</l0><l1>靈力秘藥(SE)</l1><l2>Spirit Elixir</l2></b></label>: {{itemSECondition}}</div>',
' <div><input id="item_LE" type="checkbox"><label for="item_LE"><b><l0>最终秘药(LE)</l0><l1>最終秘藥(LE)</l1><l2>Last Elixir</l2></b></label>: {{itemLECondition}}</div>',
' <div><input id="item_ED" type="checkbox"><label for="item_ED"><b><l0>能量饮料(ED)</l0><l1>能量飲料(ED)</l1><l2>Energy Drink</l2></b></label>: {{itemEDCondition}}</div>',
' <div><input id="item_CC" type="checkbox"><label for="item_CC"><b><l0>咖啡因糖果(CC)</l0><l1>咖啡因糖果(CC)</l1><l2>Caffeinated Candy</l2></b></label>: {{itemCCCondition}}</div></div>',
'<div class="hvAATab" id="hvAATab-Channel">',
' <l0><b>获得引导时</b>(此时1点MP施法与150%伤害)</l0><l1><b>獲得引導時</b>(此時1點MP施法與150%傷害)</l1><l2><b>During Channeling effect</b> (1 mp spell cost and 150% spell damage)</l2>:',
' <div><b><l0>先施放引导技能</l0><l1>先施放引導技能</l1><l2>First cast</l2></b>: <br>',
' <l0>注意: 此处的施放顺序与</l0><l1>注意: 此處的施放順序与</l1><l2>Note: The cast order here is the same as in</l2><a class="hvAAGoto" name="hvAATab-Buff">BUFF<l01>技能</l01><l2> Spells</l2></a><l0>里的相同</l0><l1>裡的相同</l1><br>',
' <input id="channelSkill_Pr" type="checkbox"><label for="channelSkill_Pr"><l0>守护(Pr)</l0><l1>守護(Pr)</l1><l2>Protection</l2></label>',
' <input id="channelSkill_SL" type="checkbox"><label for="channelSkill_SL"><l0>生命火花(SL)</l0><l1>生命火花(SL)</l1><l2>Spark of Life</l2></label>',
' <input id="channelSkill_SS" type="checkbox"><label for="channelSkill_SS"><l0>灵力盾(SS)</l0><l1>靈力盾(SS)</l1><l2>Spirit Shield</l2></label>',
' <input id="channelSkill_Ha" type="checkbox"><label for="channelSkill_Ha"><l0>疾速(Ha)</l0><l1>疾速(Ha)</l1><l2>Haste</l2></label><br>',
' <input id="channelSkill_AF" type="checkbox"><label for="channelSkill_AF"><l0>奥术集中(AF)</l0><l1>奧術集中(AF)</l1><l2>Arcane Focus</l2></label>',
' <input id="channelSkill_He" type="checkbox"><label for="channelSkill_He"><l0>穿心(He)</l0><l1>穿心(He)</l1><l2>Heartseeker</l2></label>',
' <input id="channelSkill_Re" type="checkbox"><label for="channelSkill_Re"><l0>细胞活化(Re)</l0><l1>細胞活化(Re)</l1><l2>Regen</l2></label>',
' <input id="channelSkill_SV" type="checkbox"><label for="channelSkill_SV"><l0>影纱(SV)</l0><l1>影紗(SV)</l1><l2>Shadow Veil</l2></label>',
' <input id="channelSkill_Ab" type="checkbox"><label for="channelSkill_Ab"><l0>吸收(Ab)</l0><l1>吸收(Ab)</l1><l2>Absorb</l2></label></div>',
' <div><input id="channelSkill2" type="checkbox"><label for="channelSkill2"><b><l0>再使用技能</l0><l1>再使用技能</l1><l2>Then use Skill</l2></b></label>: ',
' <div class="channelSkill2Order"><l0>施放顺序</l0><l1>施放順序</l1><l2>Cast Order</l2>: <input name="channelSkill2OrderName" style="width:80%;" type="text" disabled="true"><input name="channelSkill2OrderValue" style="width:80%;" type="hidden" disabled="true"><br>',
' <input id="channelSkill2Order_Cu" value="Cu,311" type="checkbox"><label for="channelSkill2Order_Cu"><l0>治疗(Cure)</l0><l1>治療(Cure)</l1><l2>Cure</l2></label>',
' <input id="channelSkill2Order_FC" value="FC,313" type="checkbox"><label for="channelSkill2Order_FC"><l0>完全治愈(FC)</l0><l1>完全治愈(FC)</l1><l2>Full-Cure</l2></label>',
' <input id="channelSkill2Order_Pr" value="Pr,411" type="checkbox"><label for="channelSkill2Order_Pr"><l0>守护(Pr)</l0><l1>守護(Pr)</l1><l2>Protection</l2></label>',
' <input id="channelSkill2Order_SL" value="SL,422" type="checkbox"><label for="channelSkill2Order_SL"><l0>生命火花(SL)</l0><l1>生命火花(SL)</l1><l2>Spark of Life</l2></label>',
' <input id="channelSkill2Order_SS" value="SS,423" type="checkbox"><label for="channelSkill2Order_SS"><l0>灵力盾(SS)</l0><l1>靈力盾(SS)</l1><l2>Spirit Shield</l2></label>',
' <input id="channelSkill2Order_Ha" value="Ha,412" type="checkbox"><label for="channelSkill2Order_Ha"><l0>疾速(Ha)</l0><l1>疾速(Ha)</l1><l2>Haste</l2></label><br>',
' <input id="channelSkill2Order_AF" value="AF,432" type="checkbox"><label for="channelSkill2Order_AF"><l0>奥术集中(AF)</l0><l1>奧術集中(AF)</l1><l2>Arcane Focus</l2></label>',
' <input id="channelSkill2Order_He" value="He,431" type="checkbox"><label for="channelSkill2Order_He"><l0>穿心(He)</l0><l1>穿心(He)</l1><l2>Heartseeker</l2></label>',
' <input id="channelSkill2Order_Re" value="Re,312" type="checkbox"><label for="channelSkill2Order_Re"><l0>细胞活化(Re)</l0><l1>細胞活化(Re)</l1><l2>Regen</l2></label>',
' <input id="channelSkill2Order_SV" value="SV,413" type="checkbox"><label for="channelSkill2Order_SV"><l0>影纱(SV)</l0><l1>影紗(SV)</l1><l2>Shadow Veil</l2></label>',
' <input id="channelSkill2Order_Ab" value="Ab,421" type="checkbox"><label for="channelSkill2Order_Ab"><l0>吸收(Ab)</l0><l1>吸收(Ab)</l1><l2>Absorb</l2></label></div></div>',
' <div><l0><b>最后ReBuff</b>: 重新施放最先消失的Buff</l0><l1><b>最後ReBuff</b>: 重新施放最先消失的Buff</l1><l2><b>At last, re-cast the spells which will expire first</b></l2>.</div></div>',
'<div class="hvAATab" id="hvAATab-Buff">',
' <div class="buffSkillOrder"><l0>施放顺序</l0><l1>施放順序</l1><l2>Cast Order</l2>: ',
' <input name="buffSkillOrderValue" style="width:80%;" type="text" disabled="true"><br>',
' <input id="buffSkillOrder_Pr" type="checkbox"><label for="buffSkillOrder_Pr"><l0>守护(Pr)</l0><l1>守護(Pr)</l1><l2>Protection</l2></label>',
' <input id="buffSkillOrder_SL" type="checkbox"><label for="buffSkillOrder_SL"><l0>生命火花(SL)</l0><l1>生命火花(SL)</l1><l2>Spark of Life</l2></label>',
' <input id="buffSkillOrder_SS" type="checkbox"><label for="buffSkillOrder_SS"><l0>灵力盾(SS)</l0><l1>靈力盾(SS)</l1><l2>Spirit Shield</l2></label>',
' <input id="buffSkillOrder_Ha" type="checkbox"><label for="buffSkillOrder_Ha"><l0>疾速(Ha)</l0><l1>疾速(Ha)</l1><l2>Haste</l2></label><br>',
' <input id="buffSkillOrder_AF" type="checkbox"><label for="buffSkillOrder_AF"><l0>奥术集中(AF)</l0><l1>奧術集中(AF)</l1><l2>Arcane Focus</l2></label>',
' <input id="buffSkillOrder_He" type="checkbox"><label for="buffSkillOrder_He"><l0>穿心(He)</l0><l1>穿心(He)</l1><l2>Heartseeker</l2></label>',
' <input id="buffSkillOrder_Re" type="checkbox"><label for="buffSkillOrder_Re"><l0>细胞活化(Re)</l0><l1>細胞活化(Re)</l1><l2>Regen</l2></label>',
' <input id="buffSkillOrder_SV" type="checkbox"><label for="buffSkillOrder_SV"><l0>影纱(SV)</l0><l1>影紗(SV)</l1><l2>Shadow Veil</l2></label>',
' <input id="buffSkillOrder_Ab" type="checkbox"><label for="buffSkillOrder_Ab"><l0>吸收(Ab)</l0><l1>吸收(Ab)</l1><l2>Absorb</l2></label>',
' </div>',
' <div><l0>Buff释放条件</l0><l1>Buff釋放條件</l1><l2>Cast spells Condition</l2>{{buffSkillCondition}}</div>',
' <div><input id="buffSkill_HD" type="checkbox"><label for="buffSkill_HD"><l0>生命长效药(HD)</l0><l1>生命長效藥(HD)</l1><l2>Health Draught</l2></label>{{buffSkillHDCondition}}</div>',
' <div><input id="buffSkill_MD" type="checkbox"><label for="buffSkill_MD"><l0>魔力长效药(MD)</l0><l1>魔力長效藥(MD)</l1><l2>Mana Draught</l2></label>{{buffSkillMDCondition}}</div>',
' <div><input id="buffSkill_SD" type="checkbox"><label for="buffSkill_SD"><l0>灵力长效药(MD)</l0><l1>靈力長效藥(MD)</l1><l2>Spirit Draught</l2></label>{{buffSkillSDCondition}}</div>',
' <div><input id="buffSkill_FV" type="checkbox"><label for="buffSkill_FV"><l0>花瓶(FV)</l0><l1>花瓶(FV)</l1><l2>Flower Vase</l2></label>{{buffSkillFVCondition}}</div>',
' <div><input id="buffSkill_BG" type="checkbox"><label for="buffSkill_BG"><l0>泡泡糖(BG)</l0><l1>泡泡糖(BG)</l1><l2>Bubble-Gum</l2></label>{{buffSkillBGCondition}}</div>',
' <div><input id="buffSkill_Pr" type="checkbox"><label for="buffSkill_Pr"><l0>守护(Pr)</l0><l1>守護(Pr)</l1><l2>Protection</l2></label>{{buffSkillPrCondition}}</div>',
' <div><input id="buffSkill_SL" type="checkbox"><label for="buffSkill_SL"><l0>生命火花(SL)</l0><l1>生命火花(SL)</l1><l2>Spark of Life</l2></label>{{buffSkillSLCondition}}</div>',
' <div><input id="buffSkill_SS" type="checkbox"><label for="buffSkill_SS"><l0>灵力盾(SS)</l0><l1>靈力盾(SS)</l1><l2>Spirit Shield</l2></label>{{buffSkillSSCondition}}</div>',
' <div><input id="buffSkill_Ha" type="checkbox"><label for="buffSkill_Ha"><l0>疾速(Ha)</l0><l1>疾速(Ha)</l1><l2>Haste</l2></label>{{buffSkillHaCondition}}</div>',
' <div><input id="buffSkill_AF" type="checkbox"><label for="buffSkill_AF"><l0>奥术集中(AF)</l0><l1>奧術集中(AF)</l1><l2>Arcane Focus</l2></label>{{buffSkillAFCondition}}</div>',
' <div><input id="buffSkill_He" type="checkbox"><label for="buffSkill_He"><l0>穿心(He)</l0><l1>穿心(He)</l1><l2>Heartseeker</l2></label>{{buffSkillHeCondition}}</div>',
' <div><input id="buffSkill_Re" type="checkbox"><label for="buffSkill_Re"><l0>细胞活化(Re)</l0><l1>細胞活化(Re)</l1><l2>Regen</l2></label>{{buffSkillReCondition}}</div>',
' <div><input id="buffSkill_SV" type="checkbox"><label for="buffSkill_SV"><l0>影纱(SV)</l0><l1>影紗(SV)</l1><l2>Shadow Veil</l2></label>{{buffSkillSVCondition}}</div>',
' <div><input id="buffSkill_Ab" type="checkbox"><label for="buffSkill_Ab"><l0>吸收(Ab)</l0><l1>吸收(Ab)</l1><l2>Absorb</l2></label>{{buffSkillAbCondition}}</div>',
' </div>',
'<div class="hvAATab" id="hvAATab-Debuff">',
' <div><input id="debuffSkillTurnAlert" type="checkbox"><label for="debuffSkillTurnAlert"><l0>剩余Turns低于阈值时警报</l0><l1>剩餘Turns低於閾值時警報</l1><l2>Alert when remain expire turns less than threshold</l2></label><br>',
' <l0>沉眠(Sl)</l0><l1>沉眠(Sl)</l1><l2>Sleep</l2>: <input class="hvAANumber" name="debuffSkillTurn_Sle" type="text">',
' <l0>致盲(Bl)</l0><l1>致盲(Bl)</l1><l2>Blind</l2>: <input class="hvAANumber" name="debuffSkillTurn_Bl" type="text">',
' <l0>缓慢(Slo)</l0><l1>緩慢(Slo)</l1><l2>Slow</l2>: <input class="hvAANumber" name="debuffSkillTurn_Slo" type="text"><br>',
' <l0>陷危(Im)</l0><l1>陷危(Im)</l1><l2>Imperil</l2>: <input class="hvAANumber" name="debuffSkillTurn_Im" type="text">',