Compare commits
1593 Commits
9f3131582f
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7c4c101ef5 | ||
|
|
a3b3a8c746 | ||
|
|
a26500456d | ||
|
|
eb216dd3b8 | ||
|
|
721b259b02 | ||
|
|
4b6285a232 | ||
|
|
b275caf7c8 | ||
|
|
bbb043e7f4 | ||
|
|
9de10157fc | ||
|
|
4fd7090831 | ||
|
|
e14f59918f | ||
|
|
25e651aad8 | ||
|
|
50da8dfd95 | ||
|
|
6d658e5079 | ||
|
|
7eb7b8131f | ||
|
|
96cfb3dd90 | ||
|
|
4a88eaac02 | ||
|
|
af6355963d | ||
|
|
de6e48946b | ||
|
|
439970db04 | ||
|
|
2bd1122df8 | ||
|
|
da329d7353 | ||
|
|
833a6f1290 | ||
|
|
447a72b303 | ||
|
|
68ffddf868 | ||
|
|
9724dfecf8 | ||
|
|
16e191fd05 | ||
|
|
71823d7b84 | ||
|
|
4d9fb412aa | ||
|
|
7647322f5a | ||
|
|
453aadcd87 | ||
|
|
e6fd631fdd | ||
|
|
fd85cc5816 | ||
|
|
b048e7fb23 | ||
|
|
18fe49b8bd | ||
|
|
fbf7fcd245 | ||
|
|
38f662590c | ||
|
|
1ae6e698a1 | ||
|
|
8b97ee6e81 | ||
|
|
38f81ceebb | ||
|
|
106c9dac4d | ||
|
|
7a8c01d348 | ||
|
|
262f229bf9 | ||
|
|
43c5c89794 | ||
|
|
0431d3998a | ||
|
|
8082a7bdb7 | ||
|
|
e5bd270343 | ||
|
|
9fc55c10ca | ||
|
|
0b0188700c | ||
|
|
d90654503f | ||
|
|
224a476f39 | ||
|
|
feb6361c06 | ||
|
|
aa67aaf70c | ||
|
|
184fb98ba9 | ||
|
|
d88ead299a | ||
|
|
07d7f872c4 | ||
|
|
8d10b74d24 | ||
|
|
b4f4c5bd89 | ||
|
|
e50974b746 | ||
|
|
320af9455f | ||
|
|
118709ed63 | ||
|
|
c93cb92c3a | ||
|
|
9135788e86 | ||
|
|
f7b8a35b0a | ||
|
|
7419d81157 | ||
|
|
4bd431bcb8 | ||
|
|
3770f39246 | ||
|
|
01654f0797 | ||
|
|
7aa6ec4306 | ||
|
|
2f25fd3b6a | ||
|
|
cb4a28bb93 | ||
|
|
67f3b5a571 | ||
|
|
62a04b25ff | ||
|
|
fe8e33e72b | ||
|
|
ad7b99e761 | ||
|
|
16b452985f | ||
|
|
9532762baa | ||
|
|
26d378d1cb | ||
|
|
287b72a377 | ||
|
|
d45eef380a | ||
|
|
b67c244132 | ||
|
|
284aff3f19 | ||
|
|
681508624d | ||
|
|
d910e80e20 | ||
|
|
85688a88fe | ||
|
|
740a5cd2fa | ||
|
|
3eadee4932 | ||
|
|
4c6ae94d65 | ||
|
|
28f7f600da | ||
|
|
b53f94aecb | ||
|
|
9176f1564e | ||
|
|
e4f111b1ab | ||
|
|
f4087871b9 | ||
|
|
fbc9e9b71c | ||
|
|
939a96cf48 | ||
|
|
1dc0c910c7 | ||
|
|
d188ac8a41 | ||
|
|
1f1198f712 | ||
|
|
afd8c2fc60 | ||
|
|
6a7298a6d9 | ||
|
|
a47e786567 | ||
|
|
554ca6068d | ||
|
|
b69c88158e | ||
|
|
1087485a6a | ||
|
|
a49c2a01bc | ||
|
|
eb7e5f7492 | ||
|
|
6e72e32000 | ||
|
|
f5d9456fb3 | ||
|
|
c93537f714 | ||
|
|
c305d02c6e | ||
|
|
84070b09a7 | ||
|
|
7fe9a9e173 | ||
|
|
7dc2fa29f1 | ||
|
|
57881d945b | ||
|
|
c3b5280b72 | ||
|
|
4719de53b5 | ||
|
|
7509996b37 | ||
|
|
278b894135 | ||
|
|
d3fa48dda7 | ||
|
|
9a729b5c80 | ||
|
|
4776b045c9 | ||
|
|
553691c92b | ||
|
|
f0aebe1ba0 | ||
|
|
c61d1111f2 | ||
|
|
eeccb07ea1 | ||
|
|
cf21699739 | ||
|
|
6713bfe4c2 | ||
|
|
7c46fe824e | ||
|
|
e09a2ca287 | ||
|
|
c4bdcdb5a9 | ||
|
|
340c68aee0 | ||
|
|
8cabe52bf1 | ||
|
|
15e958c018 | ||
|
|
a08cd67ae7 | ||
|
|
60996576c6 | ||
|
|
d27600a2e0 | ||
|
|
96e7e9b62d | ||
|
|
a068edd135 | ||
|
|
46f613db00 | ||
|
|
8d84529293 | ||
|
|
00f19aae51 | ||
|
|
db492c39ac | ||
|
|
1cefb7163b | ||
|
|
97fdcc5275 | ||
|
|
99ab3801f9 | ||
|
|
99ddb138e5 | ||
|
|
3a696c4f86 | ||
|
|
63f3aae673 | ||
|
|
aa68e2e683 | ||
|
|
eca4312ad4 | ||
|
|
921c8f4a37 | ||
|
|
60872fd13c | ||
|
|
521b79a6f1 | ||
|
|
6eaf7ce057 | ||
|
|
6733c2a178 | ||
|
|
abc2749375 | ||
|
|
49d408b5d3 | ||
|
|
1b58b1df40 | ||
|
|
92d29a8e31 | ||
|
|
8423ec45c9 | ||
|
|
8342c87404 | ||
|
|
b446f0c98c | ||
|
|
c23b44399a | ||
|
|
8820ec19ab | ||
|
|
6ae02e50ff | ||
|
|
6e406649f3 | ||
|
|
809039b2af | ||
|
|
5b240ba7c5 | ||
|
|
cbbf4dca19 | ||
|
|
0a999bc007 | ||
|
|
a98d4d67dc | ||
|
|
4850932db2 | ||
|
|
eac3b770ea | ||
|
|
9cc7c3ff7a | ||
|
|
57104f4c87 | ||
|
|
64e50be6e4 | ||
|
|
42520b3146 | ||
|
|
4a9987e6c0 | ||
|
|
a3750759ad | ||
|
|
da9e685986 | ||
|
|
647949ceb6 | ||
|
|
cdb67ee605 | ||
|
|
88006f3e9a | ||
|
|
0fdf96e6a1 | ||
|
|
e9d9cf63fc | ||
|
|
d1ab0ef1be | ||
|
|
14c1240b84 | ||
|
|
65fcc41e5b | ||
|
|
6261fd4401 | ||
|
|
66b1828ce2 | ||
|
|
ef496734ba | ||
|
|
35b89ef969 | ||
|
|
1079c19a4d | ||
|
|
e32db94f48 | ||
|
|
78c106c824 | ||
|
|
c458a2e5c8 | ||
|
|
4c1e73d07c | ||
|
|
4633130db1 | ||
|
|
e940b3c4cb | ||
|
|
c44cccff4b | ||
|
|
467df2c001 | ||
|
|
7e29302faf | ||
|
|
5136b3e017 | ||
|
|
001a2f4b59 | ||
|
|
925f354bcd | ||
|
|
84c066b273 | ||
|
|
a462d23010 | ||
|
|
ee6090ac12 | ||
|
|
794dfd4482 | ||
|
|
c483c09030 | ||
|
|
ee3db27d52 | ||
|
|
0c7ee70550 | ||
|
|
5913ed7a87 | ||
|
|
f3db91d934 | ||
|
|
22f1f2d096 | ||
|
|
c68d2ef1b2 | ||
|
|
6a194f73d1 | ||
|
|
3cf91c1f2f | ||
|
|
47d5251d50 | ||
|
|
0af0bd6c96 | ||
|
|
4885f8ddf9 | ||
|
|
75ed4e4073 | ||
|
|
2376205c05 | ||
|
|
80244988a9 | ||
|
|
d4c169aa1e | ||
|
|
b7b5bff5de | ||
|
|
2dad50eae1 | ||
|
|
f3d2358282 | ||
|
|
95b4f78699 | ||
|
|
5ec6ec019d | ||
|
|
5288b82eab | ||
|
|
4097308b1f | ||
|
|
0034c2d2a4 | ||
|
|
86ebf44c08 | ||
|
|
9c1807cf13 | ||
|
|
d7e1c1bb48 | ||
|
|
bfaf0ef86b | ||
|
|
2bb51c8b19 | ||
|
|
37a6de176e | ||
|
|
6904fa2098 | ||
|
|
70278f38ee | ||
|
|
5ebc1bc448 | ||
|
|
4ea13a8677 | ||
|
|
1aa42a7bce | ||
|
|
526b39cb0d | ||
|
|
681e00e130 | ||
|
|
45c99a29ef | ||
|
|
f2bbc3d084 | ||
|
|
19c1732058 | ||
|
|
ac0edb84e9 | ||
|
|
49ab7e9734 | ||
|
|
6dbcb5e3ce | ||
|
|
03cdf124ac | ||
|
|
31a09e87ab | ||
|
|
3a1643607c | ||
|
|
40f0ad5cdb | ||
|
|
ed0ecc630f | ||
|
|
d25caaf0cb | ||
|
|
313db90980 | ||
|
|
6f4b3f7c3f | ||
|
|
6cf7a5cd80 | ||
|
|
c753afa95d | ||
|
|
38c4752764 | ||
|
|
0a074a7bcc | ||
|
|
5b631cb332 | ||
|
|
cbc4e149e6 | ||
|
|
a39c66caa2 | ||
|
|
c1c7dd164e | ||
|
|
657684e8ba | ||
|
|
1dda088628 | ||
|
|
3e03806036 | ||
|
|
feaee63012 | ||
|
|
763c18233b | ||
|
|
aca3ded5ec | ||
|
|
b400ab44f6 | ||
|
|
bf711de78f | ||
|
|
bd001fde7f | ||
|
|
a0bfe339ea | ||
|
|
2c65bf97de | ||
|
|
91b1202abd | ||
|
|
301f490a36 | ||
|
|
39baae8149 | ||
|
|
b504c16aa4 | ||
|
|
9c5f435ed5 | ||
|
|
95ce32c850 | ||
|
|
82535c0e1f | ||
|
|
8a96fe6dff | ||
|
|
c0019cffa7 | ||
|
|
f9f94a938c | ||
|
|
41054f2be7 | ||
|
|
d12e581099 | ||
|
|
f7db4635d7 | ||
|
|
ce4dc2835b | ||
|
|
e769482a79 | ||
|
|
72086ca2cd | ||
|
|
0f3da7a6d0 | ||
|
|
6002f6b54c | ||
|
|
3043bac043 | ||
|
|
a0a89f276e | ||
|
|
69a025f73b | ||
|
|
70d9de119a | ||
|
|
e391e8deaa | ||
|
|
448150efa5 | ||
|
|
c36c5e71bb | ||
|
|
4bbe29efa6 | ||
|
|
7f00c7329b | ||
|
|
22e1a760a6 | ||
|
|
516cbe95e2 | ||
|
|
e5b1016d97 | ||
|
|
5a1912c639 | ||
|
|
b6f91008be | ||
|
|
9323fda85b | ||
|
|
7a219dffa9 | ||
|
|
0bb37a28de | ||
|
|
db09b8eafd | ||
|
|
93e24606d8 | ||
|
|
48d3794483 | ||
|
|
92875ef901 | ||
|
|
3463f42ea1 | ||
|
|
8542f737ff | ||
|
|
d3f26de319 | ||
|
|
5f0ec3ad8d | ||
|
|
83700ee65d | ||
|
|
1b8eba7ed0 | ||
|
|
c3117c9e36 | ||
|
|
da936c762a | ||
|
|
cd51e99ad2 | ||
|
|
7bb23ac1ed | ||
|
|
f0201f39e5 | ||
|
|
1351e9dc09 | ||
|
|
40c0fb33fb | ||
|
|
e63f593b94 | ||
|
|
bb30d03d75 | ||
|
|
0686498c66 | ||
|
|
14a07ca525 | ||
|
|
a2470410d1 | ||
|
|
70a56e5eea | ||
|
|
d8234a0292 | ||
|
|
ae383818c8 | ||
|
|
4c8f275941 | ||
|
|
183a81e77a | ||
|
|
afb3a1dc10 | ||
|
|
5e176b3a2b | ||
|
|
526f74a3a2 | ||
|
|
e7a818654b | ||
|
|
a24eb4d2ee | ||
|
|
37b859e26a | ||
|
|
4b14d2a7dd | ||
|
|
8dfae64252 | ||
|
|
0b0a12d45d | ||
|
|
846f609bb4 | ||
|
|
7facb28fee | ||
|
|
d9b92d1f0d | ||
|
|
fe2e37c9e4 | ||
|
|
5f38a7b81e | ||
|
|
c072a898ae | ||
|
|
523fb15b52 | ||
|
|
9d35cebad5 | ||
|
|
8107688714 | ||
|
|
4866d9f2d5 | ||
|
|
6f562a0179 | ||
|
|
44002ebaa9 | ||
|
|
0c5c58b6ae | ||
|
|
25027af868 | ||
|
|
77c23c1caa | ||
|
|
2ad4565d23 | ||
|
|
ed5b616f58 | ||
|
|
f691e7f815 | ||
|
|
b40f415ecb | ||
|
|
41a31ad37e | ||
|
|
26b6885879 | ||
|
|
9855c73793 | ||
|
|
7fdb01ef2c | ||
|
|
1b064ae1db | ||
|
|
b6823e0062 | ||
|
|
dbce1989bc | ||
|
|
c4d2858ad2 | ||
|
|
2330b276c7 | ||
|
|
9286016b37 | ||
|
|
7e4c0a1569 | ||
|
|
f26d7f1526 | ||
|
|
b118297cde | ||
|
|
e9db2bae73 | ||
|
|
2293b5ab56 | ||
|
|
ce220c5d83 | ||
|
|
c959f34248 | ||
|
|
409083bf74 | ||
|
|
77d3bfdc16 | ||
|
|
d8ee8ba9c4 | ||
|
|
a4268cd9c6 | ||
|
|
c576875657 | ||
|
|
a1ba0f1e38 | ||
|
|
0e083ddc0b | ||
|
|
5832352793 | ||
|
|
4ad32c17ed | ||
|
|
cf96aff0c8 | ||
|
|
d3326722c8 | ||
|
|
80d116d3c7 | ||
|
|
e88da01a4f | ||
|
|
b98f425c85 | ||
|
|
a141da4b7a | ||
|
|
63896d489c | ||
|
|
fa138f564d | ||
|
|
347bddd65f | ||
|
|
6404b46776 | ||
|
|
72969ed210 | ||
|
|
a489425a32 | ||
|
|
997c39d75c | ||
|
|
8cd8353410 | ||
|
|
21b94c6d72 | ||
|
|
e388527bd4 | ||
|
|
6463fbb1a6 | ||
|
|
cc55f2e7cf | ||
|
|
bcbcc46f28 | ||
|
|
d42dce91ca | ||
|
|
7d59eae42d | ||
|
|
17d1222053 | ||
|
|
3069ea7e94 | ||
|
|
5c50694e73 | ||
|
|
66cd769a3b | ||
|
|
b79e21d423 | ||
|
|
1ebf51a334 | ||
|
|
9e9bd25edc | ||
|
|
f1a0255dc0 | ||
|
|
2c3fca2050 | ||
|
|
dd8374bc71 | ||
|
|
9a9a09e040 | ||
|
|
e4af979062 | ||
|
|
7bf17193eb | ||
|
|
2cb362fe4c | ||
|
|
d73e03d6fc | ||
|
|
ccc26c2f0d | ||
|
|
1393a53fb1 | ||
|
|
6ee66f66e1 | ||
|
|
c4089849a4 | ||
|
|
ca79fe44b1 | ||
|
|
7750a4cf6e | ||
|
|
58da3b58f8 | ||
|
|
c498f768ff | ||
|
|
14250d2f11 | ||
|
|
2659d86825 | ||
|
|
b694ae0e4f | ||
|
|
adbc647bce | ||
|
|
0428f7d962 | ||
|
|
c1180d8708 | ||
|
|
c84c58a137 | ||
|
|
c56022c38a | ||
|
|
b8a6ff7bd0 | ||
|
|
2677cf1c59 | ||
|
|
3c1df8dbc8 | ||
|
|
514efa5041 | ||
|
|
b7e82972a7 | ||
|
|
a522fc7c0a | ||
|
|
6453625ebb | ||
|
|
928b66d622 | ||
|
|
1f76f4419f | ||
|
|
31535c8bbe | ||
|
|
ca9819299f | ||
|
|
a60bc2717e | ||
|
|
24f70e0fe2 | ||
|
|
91fd9eeb2f | ||
|
|
df0efc06bf | ||
|
|
f5b7bd9040 | ||
|
|
15c8792a07 | ||
|
|
feaae2c31b | ||
|
|
feffbcf43c | ||
|
|
f584138cf5 | ||
|
|
dff4068f3d | ||
|
|
a2cab9b92e | ||
|
|
8dfeb907d8 | ||
|
|
4ceaf59b8a | ||
|
|
8f0a9beca6 | ||
|
|
a1286f00a1 | ||
|
|
726af55700 | ||
|
|
d28ce7fdaf | ||
|
|
ef37c5d4c8 | ||
|
|
0b6625e532 | ||
|
|
29f0b4c882 | ||
|
|
289e27633d | ||
|
|
f84cb0b59a | ||
|
|
d1c3dd3843 | ||
|
|
dfc58bbdf0 | ||
|
|
71db2989a4 | ||
|
|
a49404d1bb | ||
|
|
c9f8e0baab | ||
|
|
598b97bd7e | ||
|
|
ca1deb8a3b | ||
|
|
cad6906ed5 | ||
|
|
8c1ba11f72 | ||
|
|
7f00241914 | ||
|
|
11d8badea7 | ||
|
|
2743a4b6c0 | ||
|
|
ba990cc609 | ||
|
|
60d461f77d | ||
|
|
17ddcb57fd | ||
|
|
297b003356 | ||
|
|
c94975b85e | ||
|
|
0ed00bdf19 | ||
|
|
796fde0d64 | ||
|
|
2ac851c1a8 | ||
|
|
d3edf1a31f | ||
|
|
3af5bbb847 | ||
|
|
a3ee91a077 | ||
|
|
a69b311b5d | ||
|
|
fe0f42b93b | ||
|
|
2260844cbd | ||
|
|
59efa15603 | ||
|
|
97e3095239 | ||
|
|
1489a8283c | ||
|
|
b868978267 | ||
|
|
05d3aae061 | ||
|
|
8c3a75d057 | ||
|
|
282af9d20d | ||
|
|
64d6b2d279 | ||
|
|
bb40ec8f32 | ||
|
|
e57f7771d9 | ||
|
|
01097b83c6 | ||
|
|
8501668ff8 | ||
|
|
70463ed0f5 | ||
|
|
5b6a33a498 | ||
|
|
14af3c8d7d | ||
|
|
5420ad810a | ||
|
|
3ffeb24aa0 | ||
|
|
f89d0eb305 | ||
|
|
f9bf443a3b | ||
|
|
9b7fc9b141 | ||
|
|
1a17792d7f | ||
|
|
6ab2a6a475 | ||
|
|
10d7008f82 | ||
|
|
c267be85ab | ||
|
|
1196c2d333 | ||
|
|
64a23405fb | ||
|
|
c68787bf23 | ||
|
|
a22460f155 | ||
|
|
32dc016909 | ||
|
|
1cd734fc84 | ||
|
|
a1dd2a530b | ||
|
|
6a7b8b2029 | ||
|
|
d82c7eb536 | ||
|
|
447d905c9f | ||
|
|
420001fd0e | ||
|
|
cece2a3660 | ||
|
|
a4352bbf97 | ||
|
|
b1597e8141 | ||
|
|
937d67df09 | ||
|
|
fcba947659 | ||
|
|
96259ec2ce | ||
|
|
c2314e2050 | ||
|
|
83d9d4dba7 | ||
|
|
f5ed631ec1 | ||
|
|
4fcfdee3d9 | ||
|
|
fc9aaa08bb | ||
|
|
03c9022916 | ||
|
|
18eb4c8787 | ||
|
|
0e87ecd23a | ||
|
|
7fdf0387ca | ||
|
|
879d78fe56 | ||
|
|
01e77b65ae | ||
|
|
042942a777 | ||
|
|
6e0a76bdd4 | ||
|
|
482e7e2527 | ||
|
|
3f55bcca72 | ||
|
|
04ce33ab0b | ||
|
|
fe2d342676 | ||
|
|
ef3dd168f7 | ||
|
|
b47dc16937 | ||
|
|
7ac4349d02 | ||
|
|
ffb87974bb | ||
|
|
a18e09c7b4 | ||
|
|
85e6137402 | ||
|
|
0ac5e57c34 | ||
|
|
68687043c2 | ||
|
|
5a2d4c99fb | ||
|
|
b041d9f0cc | ||
|
|
eb8ba0db7a | ||
|
|
aeb7ae7433 | ||
|
|
0dc199d42e | ||
|
|
4f3f4a1b72 | ||
|
|
3656ceaf38 | ||
|
|
12f35060ca | ||
|
|
1e4765a6eb | ||
|
|
08d324cb8b | ||
|
|
66a34eb988 | ||
|
|
58c29c6aa4 | ||
|
|
343b996c20 | ||
|
|
8b730aca68 | ||
|
|
f74a724cca | ||
|
|
be4ec34b04 | ||
|
|
bdcb16cc40 | ||
|
|
c3ad63adf7 | ||
|
|
7869b547b8 | ||
|
|
e48efd7f2e | ||
|
|
f0dbbb82bc | ||
|
|
5f26c72703 | ||
|
|
536c01d9db | ||
|
|
f7b8bb4047 | ||
|
|
f17b58e174 | ||
|
|
a2777cbe26 | ||
|
|
7b74ffa6d3 | ||
|
|
348ff17a84 | ||
|
|
975e3cd953 | ||
|
|
d2c3b4c2dd | ||
|
|
cd6dcc54b9 | ||
|
|
828d8b5f20 | ||
|
|
ccf039d495 | ||
|
|
54a964427c | ||
|
|
0fc0901766 | ||
|
|
ac72daa9e3 | ||
|
|
c4f6b438c2 | ||
|
|
2478e5c122 | ||
|
|
387dc4b34e | ||
|
|
6ca25eaaa2 | ||
|
|
b12263e209 | ||
|
|
0e5f57c534 | ||
|
|
50363333e4 | ||
|
|
a88bbcd43e | ||
|
|
07ac05ecc1 | ||
|
|
e2e6da476a | ||
|
|
87cde0596f | ||
|
|
ef1cbc0aa7 | ||
|
|
e833cd1ce6 | ||
|
|
026c27eeba | ||
|
|
ded9b139bf | ||
|
|
e94a38d0ef | ||
|
|
c10250d6a0 | ||
|
|
3b217634e4 | ||
|
|
901847d02c | ||
|
|
0fbf978242 | ||
|
|
2554a8fbcf | ||
|
|
3ed9b5fc47 | ||
|
|
cd98e4b37b | ||
|
|
312d126432 | ||
|
|
5853008f54 | ||
|
|
71b078cc6c | ||
|
|
827b29c577 | ||
|
|
a6a609773a | ||
|
|
1ff7cc2576 | ||
|
|
6fb7aecefb | ||
|
|
f62166231b | ||
|
|
fa91e0bf73 | ||
|
|
8383fd9ce2 | ||
|
|
17a6935d14 | ||
|
|
87255c3c8c | ||
|
|
252fe68de8 | ||
|
|
3652df2bfa | ||
|
|
b215a1c0d9 | ||
|
|
05fc92f582 | ||
|
|
ffa6eeb3ac | ||
|
|
4dfeec10e4 | ||
|
|
5e73f93fe5 | ||
|
|
7244edd3f5 | ||
|
|
9f33f3e21b | ||
|
|
a438b78593 | ||
|
|
6fe6ecfdd1 | ||
|
|
c7e47c0f73 | ||
|
|
78a879e447 | ||
|
|
f314ec3f2c | ||
|
|
90285642b3 | ||
|
|
2fbf1e6877 | ||
|
|
98714fb355 | ||
|
|
ee297017d8 | ||
|
|
f3647e5260 | ||
|
|
6bfb7912f9 | ||
|
|
9df37f5a2f | ||
|
|
517a9a0d98 | ||
|
|
9b49946d91 | ||
|
|
b4aac7518d | ||
|
|
0cc5e19743 | ||
|
|
d1fc706661 | ||
|
|
622b23e9b5 | ||
|
|
5c6e485c9f | ||
|
|
e0d1de6c11 | ||
|
|
7db12ef71e | ||
|
|
0f67bf585e | ||
|
|
6e15cd97d3 | ||
|
|
3bdc48147b | ||
|
|
7c5a7809a5 | ||
|
|
d79fef4805 | ||
|
|
b44277437a | ||
|
|
fb5899ac1d | ||
|
|
1940bdf0e7 | ||
|
|
367e36f7cd | ||
|
|
b1030f6017 | ||
|
|
ab66dfe55c | ||
|
|
956b591879 | ||
|
|
385c2c9bab | ||
|
|
79300f71bb | ||
|
|
9ca9db30e0 | ||
|
|
d13ef3a8bd | ||
|
|
60b100649e | ||
|
|
ebb6125f36 | ||
|
|
560d4ed168 | ||
|
|
f65ccd82d8 | ||
|
|
bfdd84d8aa | ||
|
|
20487f580a | ||
|
|
ccde9f0a90 | ||
|
|
98b72a4d60 | ||
|
|
a17cbb6657 | ||
|
|
defa4306ed | ||
|
|
d278d39175 | ||
|
|
24321b4889 | ||
|
|
c425857d6a | ||
|
|
ef4bcdf0c2 | ||
|
|
416784fe3f | ||
|
|
e56e0ed3ac | ||
|
|
33c6fe9216 | ||
|
|
19f3e7e3d7 | ||
|
|
c15556263b | ||
|
|
7babff996d | ||
|
|
bc442ecbbd | ||
|
|
6814f8df3e | ||
|
|
4655da941f | ||
|
|
60ed87612d | ||
|
|
3dee06dc02 | ||
|
|
c332409a76 | ||
|
|
ed95022e51 | ||
|
|
ff24091f3f | ||
|
|
20d3658e25 | ||
|
|
863d3c1640 | ||
|
|
7eb92e9f25 | ||
|
|
3fc1d7afbc | ||
|
|
fbe1562237 | ||
|
|
74e7297057 | ||
|
|
b3723ae3e1 | ||
|
|
763b563986 | ||
|
|
96a48745a9 | ||
|
|
4212c843af | ||
|
|
73f3e2436c | ||
|
|
4289e23826 | ||
|
|
3f56a88c1a | ||
|
|
0bee64a014 | ||
|
|
7a529f470e | ||
|
|
9834fbcc82 | ||
|
|
8533e0fbe6 | ||
|
|
a4701ac7f0 | ||
|
|
092e918ccb | ||
|
|
02628d6fe0 | ||
|
|
921f6c9aa4 | ||
|
|
69e37533fa | ||
|
|
d5d54609bc | ||
|
|
b46190eabd | ||
|
|
08c56bf1c8 | ||
|
|
b05f883d9c | ||
|
|
7ec39337e7 | ||
|
|
31d5cb1b3e | ||
|
|
ebb4e676a3 | ||
|
|
f212589d37 | ||
|
|
5f751cc2da | ||
|
|
301822d5bd | ||
|
|
b508452cd9 | ||
|
|
d2512bfa64 | ||
|
|
acb60f7543 | ||
|
|
5ec19ad88d | ||
|
|
b843d1e7bb | ||
|
|
c4b3c10acb | ||
|
|
388d67b57c | ||
|
|
9a938ead94 | ||
|
|
b7f2d07224 | ||
|
|
0a99e73bc6 | ||
|
|
6cf84a6ced | ||
|
|
6d32a67331 | ||
|
|
95699f5bad | ||
|
|
c28754754d | ||
|
|
eca7539c94 | ||
|
|
12a90bc960 | ||
|
|
f8a4479dc9 | ||
|
|
b897d9476e | ||
|
|
3c75282c09 | ||
|
|
e73cd37949 | ||
|
|
1c0d296230 | ||
|
|
90b694dde2 | ||
|
|
3fb55d7960 | ||
|
|
6b17e4f07a | ||
|
|
08d805da59 | ||
|
|
932063a4fc | ||
|
|
0f21fa7360 | ||
|
|
5358901656 | ||
|
|
2a6da71334 | ||
|
|
81ad962625 | ||
|
|
441608dd65 | ||
|
|
4fd68e4a77 | ||
|
|
402ba7c8b0 | ||
|
|
b696957aff | ||
|
|
2b25adeecd | ||
|
|
d40319c18f | ||
|
|
ae92589b35 | ||
|
|
a70275c297 | ||
|
|
535c1e0dce | ||
|
|
889bfec4af | ||
|
|
08d8302e17 | ||
|
|
5c7524b79d | ||
|
|
894c61ed76 | ||
|
|
b3e1affaa6 | ||
|
|
5eb10ad994 | ||
|
|
f16a510d75 | ||
|
|
aa2713294f | ||
|
|
c98915dd77 | ||
|
|
fde16da648 | ||
|
|
2d483da1ae | ||
|
|
cf72f060ad | ||
|
|
ff6c78f3c2 | ||
|
|
009bcfcee3 | ||
|
|
6f3887a325 | ||
|
|
c37f9b8dc1 | ||
|
|
3902415eb5 | ||
|
|
202449adb4 | ||
|
|
d3b709c108 | ||
|
|
3e85d54c95 | ||
|
|
13bd9cb800 | ||
|
|
d45ff0630e | ||
|
|
2e980f4b08 | ||
|
|
83502561af | ||
|
|
c0002460f2 | ||
|
|
a37ef42922 | ||
|
|
6b0af78364 | ||
|
|
60a0801a9c | ||
|
|
15c8789218 | ||
|
|
873e10619e | ||
|
|
c47f29b8b4 | ||
|
|
68b0b9194b | ||
|
|
a4689f2848 | ||
|
|
c4232d8221 | ||
|
|
dac8fa5c71 | ||
|
|
52f9cc4ba7 | ||
|
|
5b3ccd6760 | ||
|
|
3d8a14d2d3 | ||
|
|
bcca7e98e4 | ||
|
|
d27ea20373 | ||
|
|
bcfcd0a451 | ||
|
|
383b88231f | ||
|
|
611574925e | ||
|
|
b494b1ac33 | ||
|
|
2894dd8176 | ||
|
|
7d9e6aeaf8 | ||
|
|
6a1c714031 | ||
|
|
b3cbcf135d | ||
|
|
c60bda46c8 | ||
|
|
a66abd14b6 | ||
|
|
6332afc4dc | ||
|
|
4f89337651 | ||
|
|
2b601ff0f3 | ||
|
|
215c945a4c | ||
|
|
668bbc233e | ||
|
|
5d9acdb8c0 | ||
|
|
1d77da32be | ||
|
|
500e290ff7 | ||
|
|
4d7261fd8c | ||
|
|
7f0a4ceb6c | ||
|
|
42cda278ec | ||
|
|
6e3500779f | ||
|
|
2ba39b9ecc | ||
|
|
605332606e | ||
|
|
29ef9562d9 | ||
|
|
e9c225f733 | ||
|
|
0dde9aef17 | ||
|
|
c0f4279bfb | ||
|
|
3c0d6db842 | ||
|
|
4c2e1157a4 | ||
|
|
6d5825872b | ||
|
|
70e0be32c6 | ||
|
|
62c473c33d | ||
|
|
054cc4b36f | ||
|
|
f52cdf7457 | ||
|
|
327e8e3773 | ||
|
|
8d0e48597b | ||
|
|
32528cc722 | ||
|
|
2cbdb09c65 | ||
|
|
6014def16a | ||
|
|
1f3088e341 | ||
|
|
dee517f65f | ||
|
|
94b1018b2b | ||
|
|
4fe2512d7c | ||
|
|
63807ccfdc | ||
|
|
6d226f5b6b | ||
|
|
77d14d5cd0 | ||
|
|
01a738e83d | ||
|
|
f9484e4b71 | ||
|
|
3e3dd9aad2 | ||
|
|
718f84de4b | ||
|
|
7762aff95a | ||
|
|
e8aeb5e801 | ||
|
|
266e034f86 | ||
|
|
6a93e6f78b | ||
|
|
ccc85a254b | ||
|
|
5752f63db3 | ||
|
|
80d842f01f | ||
|
|
a0f1da98d6 | ||
|
|
d5e2faeafd | ||
|
|
74c0dff187 | ||
|
|
cb91667c68 | ||
|
|
31fec18a5a | ||
|
|
0c589fde35 | ||
|
|
9b1ea7ae9b | ||
|
|
329d3cadba | ||
|
|
391e257820 | ||
|
|
6c832ff0a6 | ||
|
|
5b60cffbe3 | ||
|
|
3e992b7551 | ||
|
|
ed16471ae7 | ||
|
|
38f4e062b1 | ||
|
|
c4109c784c | ||
|
|
b5c34db2e4 | ||
|
|
2e5efb183a | ||
|
|
06700140b9 | ||
|
|
2efbe03a17 | ||
|
|
50374ceb7a | ||
|
|
5418ee1582 | ||
|
|
90992dc524 | ||
|
|
6d66ee0f00 | ||
|
|
ce5b1ca936 | ||
|
|
259f05bf2f | ||
|
|
f8435b1651 | ||
|
|
317201ee9b | ||
|
|
8483113a72 | ||
|
|
f35fa1cf64 | ||
|
|
c13373e0bb | ||
|
|
6468800c0d | ||
|
|
fea6a2332c | ||
|
|
db4613bd74 | ||
|
|
5bda078d42 | ||
|
|
898c0b277a | ||
|
|
f04efe71c0 | ||
|
|
e50265ec4f | ||
|
|
7a78538051 | ||
|
|
c3ceed8a4d | ||
|
|
b11e802e14 | ||
|
|
dbb82b5560 | ||
|
|
b50f8612b2 | ||
|
|
9ebb0084de | ||
|
|
c5a50c34bb | ||
|
|
a76838d6af | ||
|
|
d736cfc52b | ||
|
|
ec763be8a7 | ||
|
|
3a6e3799fd | ||
|
|
c0e8f5ae5e | ||
|
|
3774f43cc8 | ||
|
|
54e0d23599 | ||
|
|
c7c41480d2 | ||
|
|
25d53c5976 | ||
|
|
341aaacd6c | ||
|
|
35d5dac4b2 | ||
|
|
9c8ef7caef | ||
|
|
f74368ee8d | ||
|
|
5908ba69d5 | ||
|
|
148fff6c04 | ||
|
|
f113f5abf9 | ||
|
|
ec558307b8 | ||
|
|
0586349304 | ||
|
|
99cf48b490 | ||
|
|
e92a31f16c | ||
|
|
0eb1f2a3c8 | ||
|
|
d7d69ef83b | ||
|
|
a83468e630 | ||
|
|
c106e80e5f | ||
|
|
81ca73fb15 | ||
|
|
4416ca975d | ||
|
|
def8d00b8d | ||
|
|
b240d31aad | ||
|
|
07fd9d9a23 | ||
|
|
22d130e3c2 | ||
|
|
1daa1b1980 | ||
|
|
e2d0e5b3c1 | ||
|
|
8f22bd7d66 | ||
|
|
bc13dc9958 | ||
|
|
04a7d9cbbc | ||
|
|
693925eba4 | ||
|
|
fab1a3a9d8 | ||
|
|
b017c04c42 | ||
|
|
7da8ef57b1 | ||
|
|
e9590299c4 | ||
|
|
7b85608a33 | ||
|
|
e5a7df20a5 | ||
|
|
46c7c1457a | ||
|
|
de43b8c3a8 | ||
|
|
41628fda31 | ||
|
|
f1ab00d284 | ||
|
|
9a41725a3c | ||
|
|
68e44e2dd5 | ||
|
|
71b94d8fad | ||
|
|
edd6dc38d5 | ||
|
|
e78a49bac8 | ||
|
|
ac1dc3d737 | ||
|
|
82f7b40fa6 | ||
|
|
c845e5746c | ||
|
|
b2a209a586 | ||
|
|
6e699cc283 | ||
|
|
95f9034cfd | ||
|
|
d82eb7e056 | ||
|
|
b714a58d19 | ||
|
|
db5f4e905f | ||
|
|
a39f77d30d | ||
|
|
60aa7b7f62 | ||
|
|
1e6515f2f1 | ||
|
|
50a7fa1239 | ||
|
|
5b3b2480c9 | ||
|
|
7ae0ee9535 | ||
|
|
245ee1c06d | ||
|
|
13c7d366e3 | ||
|
|
93261c55ee | ||
|
|
be7b74d345 | ||
|
|
320c4b0137 | ||
|
|
26bee61243 | ||
|
|
b354c06fc8 | ||
|
|
45e7db406a | ||
|
|
52641eef0c | ||
|
|
5fe435a4d5 | ||
|
|
7c1e1de8b8 | ||
|
|
c3499004e1 | ||
|
|
dec490208d | ||
|
|
0a179e500d | ||
|
|
e0bcaff4c3 | ||
|
|
0bb699dd90 | ||
|
|
2c2d7456e2 | ||
|
|
88078f2d37 | ||
|
|
14573c4bd6 | ||
|
|
d7cb9cc601 | ||
|
|
3b015d11ad | ||
|
|
598d9f9f08 | ||
|
|
dbfe723bc6 | ||
|
|
30579591cb | ||
|
|
7f5a62ffca | ||
|
|
1c43416f07 | ||
|
|
7e400cdbdf | ||
|
|
5683e0902e | ||
|
|
27ee08c820 | ||
|
|
6792685aeb | ||
|
|
8cf4b271bc | ||
|
|
0e955d16c7 | ||
|
|
c553bb64ff | ||
|
|
819f751887 | ||
|
|
1bcc18d5d9 | ||
|
|
5b5011ee11 | ||
|
|
0dc55fe4c4 | ||
|
|
1ccca8fa5c | ||
|
|
f9217f0ebd | ||
|
|
594bdb1b3b | ||
|
|
3202e25f66 | ||
|
|
2f47ec539f | ||
|
|
13dd572405 | ||
|
|
2b818d4551 | ||
|
|
5f0097c6c2 | ||
|
|
a7b6b0cd03 | ||
|
|
44f0d96d2d | ||
|
|
45e655ddfb | ||
|
|
341f520f55 | ||
|
|
d2e65550a4 | ||
|
|
312e97262d | ||
|
|
86c75aac84 | ||
|
|
5f729678b9 | ||
|
|
cd745245c1 | ||
|
|
e2b36b14c5 | ||
|
|
4c58d3daee | ||
|
|
7558a9ac4a | ||
|
|
8b39b06e26 | ||
|
|
1e97a84440 | ||
|
|
3902c5cb47 | ||
|
|
8db443635f | ||
|
|
0544f84297 | ||
|
|
a94f00cc63 | ||
|
|
b2736f2841 | ||
|
|
28e28a299f | ||
|
|
84ac22cead | ||
|
|
63afa8e5f0 | ||
|
|
6abde8aee7 | ||
|
|
f9c68f247f | ||
|
|
6fcda28d1c | ||
|
|
3799617baf | ||
|
|
d12b8d9488 | ||
|
|
0e673710de | ||
|
|
f2768db6fe | ||
|
|
149e936ff3 | ||
|
|
0a5c83091f | ||
|
|
13806a4056 | ||
|
|
29ccf311f1 | ||
|
|
3079f7b87f | ||
|
|
c9b41d9ff0 | ||
|
|
58acd841a6 | ||
|
|
42c1aaee69 | ||
|
|
fd34340f6a | ||
|
|
26252894d8 | ||
|
|
323cdd96ec | ||
|
|
358b6d8d1e | ||
|
|
24154fd13e | ||
|
|
b3ef9f8ba4 | ||
|
|
a065c86672 | ||
|
|
d1c5da173a | ||
|
|
9d8bbabd08 | ||
|
|
8f80071487 | ||
|
|
94e4155dc1 | ||
|
|
2c1b78ae90 | ||
|
|
3ec8d666d2 | ||
|
|
5f44a0a880 | ||
|
|
2d8a689ed2 | ||
|
|
be0cbfcc2d | ||
|
|
247896a930 | ||
|
|
531daddb76 | ||
|
|
44c5fea28b | ||
|
|
83505d4f88 | ||
|
|
7b28c49e30 | ||
|
|
56091bae12 | ||
|
|
cf0fff86aa | ||
|
|
99e40b6e24 | ||
|
|
99579263a0 | ||
|
|
fcb5af9099 | ||
|
|
edda93ec57 | ||
|
|
c58f9ecfe3 | ||
|
|
461472010e | ||
|
|
dd824c6e6b | ||
|
|
03f906f513 | ||
|
|
2e4316c8df | ||
|
|
e320259653 | ||
|
|
313d285b1c | ||
|
|
38de69364b | ||
|
|
f0819e7561 | ||
|
|
dbb6634e95 | ||
|
|
191329441e | ||
|
|
5445b4285c | ||
|
|
76c6ad7793 | ||
|
|
690d604559 | ||
|
|
67f8e4bc2d | ||
|
|
8434b35d88 | ||
|
|
bef0e66b4b | ||
|
|
64e16fb91d | ||
|
|
e97e16133e | ||
|
|
1c6b46a35c | ||
|
|
5f3d297977 | ||
|
|
61069f88aa | ||
|
|
c8e7e9a0cf | ||
|
|
c2ebe29c27 | ||
|
|
45671322bd | ||
|
|
442adac65b | ||
|
|
5f5249b348 | ||
|
|
fb8d637976 | ||
|
|
bb7dc237b1 | ||
|
|
e1bfb67d89 | ||
|
|
4c599e05ff | ||
|
|
a106a4e469 | ||
|
|
036704504c | ||
|
|
24361db4fb | ||
|
|
7efda4878b | ||
|
|
3a57cd6cae | ||
|
|
95c864438b | ||
|
|
26648d881e | ||
|
|
72607ae1b5 | ||
|
|
3f6771939b | ||
|
|
443967ab65 | ||
|
|
0cf3544037 | ||
|
|
93d5eb4d23 | ||
|
|
c776438c88 | ||
|
|
c8a125fe72 | ||
|
|
b53cc882d4 | ||
|
|
3218ee0f89 | ||
|
|
3a551ee51c | ||
|
|
f942fb6fc2 | ||
|
|
fa71714198 | ||
|
|
7de90a3d61 | ||
|
|
512c27fe91 | ||
|
|
891c0c9309 | ||
|
|
450b5e35d9 | ||
|
|
cca1094bcc | ||
|
|
c7e5809ec6 | ||
|
|
2eef19fd7c | ||
|
|
2653efa203 | ||
|
|
f50527652a | ||
|
|
8b52b0342b | ||
|
|
e4dc882833 | ||
|
|
09b1cd6eb6 | ||
|
|
f4d197ef3d | ||
|
|
0688500a57 | ||
|
|
18d5ac9613 | ||
|
|
dbed2372f0 | ||
|
|
49d7c03c91 | ||
|
|
10949c38d9 | ||
|
|
a139f0303c | ||
|
|
e7e4081c68 | ||
|
|
7423dcab54 | ||
|
|
e082502425 | ||
|
|
33d9ec9b16 | ||
|
|
136753eab6 | ||
|
|
17cb8f2db4 | ||
|
|
d40021e240 | ||
|
|
c5fdf369bf | ||
|
|
b919f3caa1 | ||
|
|
6ae595f6d2 | ||
|
|
183ce94bfe | ||
|
|
29b6501857 | ||
|
|
6007d7bbf3 | ||
|
|
b5d237eee5 | ||
|
|
7e8fa8bb07 | ||
|
|
62c5f3a9a5 | ||
|
|
c6ef3b2b89 | ||
|
|
fe5a859761 | ||
|
|
0d478d1ea0 | ||
|
|
c4709357ce | ||
|
|
f1018adcde | ||
|
|
6456c13181 | ||
|
|
26020c78e1 | ||
|
|
21d8e0cf99 | ||
|
|
b228dd6271 | ||
|
|
48ff25ed7c | ||
|
|
3a8d06b91b | ||
|
|
b3f3f46739 | ||
|
|
46b91726f9 | ||
|
|
ee9a98bee7 | ||
|
|
04c16acf56 | ||
|
|
85f22de5d2 | ||
|
|
2ec8361495 | ||
|
|
6a14f2dda9 | ||
|
|
eac3fa5542 | ||
|
|
73dd35ce66 | ||
|
|
32e7af9b83 | ||
|
|
42181b72f9 | ||
|
|
7bca7a3cfc | ||
|
|
d5d46dd559 | ||
|
|
466497846e | ||
|
|
7f7240cea1 | ||
|
|
945afc659a | ||
|
|
3614d7a179 | ||
|
|
b1c1cdf8f0 | ||
|
|
3e0cbca7ca | ||
|
|
3a2db6ee8b | ||
|
|
46fee29a16 | ||
|
|
e9326c26dc | ||
|
|
3aaf1f6cf5 | ||
|
|
d15ff430ac | ||
|
|
008ccd25aa | ||
|
|
c58a1dd088 | ||
|
|
870e692620 | ||
|
|
8f1886f0ab | ||
|
|
b7ffeedde9 | ||
|
|
acd8ca4a36 | ||
|
|
f6d668cd82 | ||
|
|
76c2d432f8 | ||
|
|
4224be82cd | ||
|
|
71ccd7541f | ||
|
|
3644c8362d | ||
|
|
453234d00c | ||
|
|
d08f26a656 | ||
|
|
c71bb6b108 | ||
|
|
2a06cd9e35 | ||
|
|
55c390129c | ||
|
|
e0684ed9d1 | ||
|
|
239486aab0 | ||
|
|
888c110fcb | ||
|
|
ee6e571aa3 | ||
|
|
cca337350f | ||
|
|
d7fd6a5982 | ||
|
|
434114cd9f | ||
|
|
b39e6cca65 | ||
|
|
77e81985a8 | ||
|
|
863bb5cd60 | ||
|
|
9923423376 | ||
|
|
1fc119c350 | ||
|
|
ce64bb8f08 | ||
|
|
ef0a3f3829 | ||
|
|
d1faeacd7f | ||
|
|
5a034d689f | ||
|
|
df9aca4411 | ||
|
|
e240eaf593 | ||
|
|
ed7e10cabd | ||
|
|
c425d99643 | ||
|
|
16b9067d89 | ||
|
|
c88d41c1fa | ||
|
|
8bb4f0a2be | ||
|
|
d41b6f3c8d | ||
|
|
1deee10842 | ||
|
|
0ca7c2b07c | ||
|
|
0d061c26f5 | ||
|
|
38f21942e6 | ||
|
|
14478889ca | ||
|
|
559e58701c | ||
|
|
975066992b | ||
|
|
238c06d968 | ||
|
|
f986a9605c | ||
|
|
7080347b22 | ||
|
|
c930922d1b | ||
|
|
df4183281b | ||
|
|
7be80c8945 | ||
|
|
3387d6aa3c | ||
|
|
e3e1fdba5b | ||
|
|
cda0be8d57 | ||
|
|
34b7574fae | ||
|
|
9ac60c44c6 | ||
|
|
76856522f2 | ||
|
|
48e8f93536 | ||
|
|
b4b4135bbb | ||
|
|
459a932663 | ||
|
|
4917e715f7 | ||
|
|
06f1d20c41 | ||
|
|
deff62335b | ||
|
|
81bf9cd517 | ||
|
|
4e36589dc5 | ||
|
|
5488bad2f7 | ||
|
|
bb39884743 | ||
|
|
866dc23a7e | ||
|
|
7daee72ad7 | ||
|
|
a86cedb6cf | ||
|
|
c285a8c511 | ||
|
|
077befc0cb | ||
|
|
df3d37cab5 | ||
|
|
a04ffa6e00 | ||
|
|
6beeecc0fb | ||
|
|
33dd2c2533 | ||
|
|
83b152df9a | ||
|
|
64753d75aa | ||
|
|
eca2ab1c3c | ||
|
|
56d6350c71 | ||
|
|
a9d6e81ed9 | ||
|
|
f5d8aeb01d | ||
|
|
49e46214e7 | ||
|
|
c17a72bb32 | ||
|
|
5c89a1df51 | ||
|
|
80e42f22d7 | ||
|
|
031a5ffef2 | ||
|
|
5b9d6cb2cc | ||
|
|
153e6b23a3 | ||
|
|
d9c2d72594 | ||
|
|
ad08b58188 | ||
|
|
8c148345aa | ||
|
|
81d0c53e10 | ||
|
|
df81394015 | ||
|
|
15da236bf0 | ||
|
|
91f0735230 | ||
|
|
fe81e960e0 | ||
|
|
6fbb762a99 | ||
|
|
1570933a6c | ||
|
|
161d60e122 | ||
|
|
85d3a67629 | ||
|
|
6368d7d9a8 | ||
|
|
c509f29fd7 | ||
|
|
12f439dab4 | ||
|
|
9707ce8c56 | ||
|
|
d3870a7b66 | ||
|
|
082a69cd9d | ||
|
|
7e66038277 | ||
|
|
6ee6e2b86c | ||
|
|
04bd49d096 | ||
|
|
431927c46f | ||
|
|
6a3485f00e | ||
|
|
163ed20ec1 | ||
|
|
58c73a0258 | ||
|
|
2a9866cdef | ||
|
|
b6b288c72d | ||
|
|
8bb64fd69e | ||
|
|
b679fc3e88 | ||
|
|
666a98bf57 | ||
|
|
9ecadcef67 | ||
|
|
21644e8f0f | ||
|
|
d99c7e56af | ||
|
|
83073b273d | ||
|
|
61484043a3 | ||
|
|
a3cc91f704 | ||
|
|
88186cbe54 | ||
|
|
8c60f69621 | ||
|
|
f2892e5397 | ||
|
|
8d6567e69a | ||
|
|
d5edec1f55 | ||
|
|
ffe28cd7bf | ||
|
|
b4a34c9ae7 | ||
|
|
30d7b41639 | ||
|
|
d4097a8ee4 | ||
|
|
d4d2fb5686 | ||
|
|
aad077588d | ||
|
|
8645b290bc | ||
|
|
b7ae44d4be | ||
|
|
b35c6408cb | ||
|
|
9058376d00 | ||
|
|
55e41764de | ||
|
|
d09a760d24 | ||
|
|
ed1abf48a8 | ||
|
|
4a133553fa | ||
|
|
b4a6bd5efb | ||
|
|
932136466b | ||
|
|
035d202b55 | ||
|
|
9cfd5e5dd7 | ||
|
|
04019c21d6 | ||
|
|
c08078cf51 | ||
|
|
e37e84394e | ||
|
|
3ad8d27563 | ||
|
|
6ff74cf8ac | ||
|
|
1abd8890fb | ||
|
|
e49ce3c96f | ||
|
|
64610ae0eb | ||
|
|
6a5f7b2587 | ||
|
|
f1ba119866 | ||
|
|
24786209d5 | ||
|
|
2d138ec8cc | ||
|
|
b40492d687 | ||
|
|
273be287fe | ||
|
|
6edb284318 | ||
|
|
166a5f7855 | ||
|
|
b16ee3fe00 | ||
|
|
a58b1501e2 | ||
|
|
b2a0e2fc6b | ||
|
|
8adfeea5ce | ||
|
|
f9a681a825 | ||
|
|
c681ce2520 | ||
|
|
b43bb8a46e | ||
|
|
9b9464a337 | ||
|
|
8e17c5c207 | ||
|
|
b0824a4c61 | ||
|
|
d17aff1b64 | ||
|
|
fb165cf67e | ||
|
|
18dee05d48 | ||
|
|
262c25f971 | ||
|
|
b5a0336e37 | ||
|
|
c3d5d245fa | ||
|
|
671a021bb3 | ||
|
|
12e863f0e1 | ||
|
|
e6456f1bac | ||
|
|
4542e60f27 | ||
|
|
e6c684fb3b | ||
|
|
5c74d12899 | ||
|
|
b4a5b4e7de | ||
|
|
bb0c6db679 | ||
|
|
29062f3262 | ||
|
|
3b57abcb5e | ||
|
|
165cf464a0 | ||
|
|
0df5063299 | ||
|
|
c9ffb6e440 | ||
|
|
d036e92991 | ||
|
|
90d2df066d | ||
|
|
e87cbc58d1 | ||
|
|
a3060c66ec | ||
|
|
01c0d6e7f9 | ||
|
|
3c5a630421 | ||
|
|
4b15e89ab1 | ||
|
|
5708dbd01a | ||
|
|
bd0f597e9d | ||
|
|
afc07001b1 | ||
|
|
febd26f406 | ||
|
|
d4ae35ef0c | ||
|
|
51d561394e | ||
|
|
ac2f022821 | ||
|
|
7ae5f5644b | ||
|
|
9f9dceb0f6 | ||
|
|
5a2993d4b1 | ||
|
|
713c5239ef | ||
|
|
ecdbe25a26 | ||
|
|
c3c80f6b1f | ||
|
|
a613fb4eb0 | ||
|
|
cb29db81d0 | ||
|
|
957387ff66 | ||
|
|
2e48f9a0d8 | ||
|
|
183d3738c5 | ||
|
|
19e9dcf8b7 | ||
|
|
57aa26f8e1 | ||
|
|
1fe5f18181 | ||
|
|
2d6b10908a | ||
|
|
4bd9990fa5 | ||
|
|
75fc2bb6fb | ||
|
|
317b151355 | ||
|
|
f3cc0a24c0 | ||
|
|
94e121a974 | ||
|
|
fbe9f988e9 | ||
|
|
bf201a3cae | ||
|
|
9d79401182 | ||
|
|
60a5494408 | ||
|
|
09248e04f6 | ||
|
|
0db2cb8781 | ||
|
|
281cebdd16 | ||
|
|
2a639642de | ||
|
|
c9822c20eb | ||
|
|
bde1a35d03 | ||
|
|
83184af2f1 | ||
|
|
e263e4a959 | ||
|
|
09c2433874 | ||
|
|
9c667b6d64 | ||
|
|
e754b2922b | ||
|
|
dc975d7b46 | ||
|
|
360f5d35ff | ||
|
|
432ce1bb14 | ||
|
|
627336891b | ||
|
|
87beabf167 | ||
|
|
d14aed4c89 | ||
|
|
37bc64a821 | ||
|
|
6d28820c5f | ||
|
|
c48a991b3a | ||
|
|
a4072b9e8b | ||
|
|
1c97f20818 | ||
|
|
d17a9c5d08 | ||
|
|
29dc977f76 | ||
|
|
62e9849e2e | ||
|
|
1107f88814 | ||
|
|
9d9ab3dd81 | ||
|
|
2af425a690 | ||
|
|
c84049f4fa | ||
|
|
bec49a7618 | ||
|
|
1ae3ac6c9a | ||
|
|
cf7792279b | ||
|
|
32baa69075 | ||
|
|
0201c3beeb | ||
|
|
e156fcfdd6 | ||
|
|
5e064ab8f7 | ||
|
|
2adf5c328f | ||
|
|
215b8f1cf4 | ||
|
|
78b350cece | ||
|
|
e24618c1d6 | ||
|
|
c6404b810d | ||
|
|
f195bd70b1 | ||
|
|
c89493e5a6 | ||
|
|
2bc0dcb52a | ||
|
|
def14c4924 | ||
|
|
a4463c33c0 | ||
|
|
1fdda34d9f | ||
|
|
f0d46dec90 | ||
|
|
cf2cd7f5ea | ||
|
|
46c74891ec | ||
|
|
457719e743 | ||
|
|
75ad02c586 | ||
|
|
513dfe695a | ||
|
|
af9854aa6c | ||
|
|
0011420c3f | ||
|
|
fbf74ebd12 | ||
|
|
6ccab4acec | ||
|
|
ab7dbdafea | ||
|
|
c519b52f9e | ||
|
|
3ac4285a51 | ||
|
|
b862760da6 | ||
|
|
7fd9121153 | ||
|
|
bd7cc12a3c | ||
|
|
8f225e8983 | ||
|
|
91b1c14070 | ||
|
|
0630b59c7a | ||
|
|
97839a21c3 | ||
|
|
cbe4983bbc | ||
|
|
1471ca7d3f | ||
|
|
d772bc424d | ||
|
|
babeed12b8 | ||
|
|
ac20d4122b | ||
|
|
f241fb3e02 | ||
|
|
94650509af | ||
|
|
f9d94db46c | ||
|
|
2cfaa62a9c | ||
|
|
576ca9844b | ||
|
|
274c4c4d99 | ||
|
|
4e72bab8ad | ||
|
|
0c72febefe | ||
|
|
fa4fa08694 | ||
|
|
4bd88eff17 | ||
|
|
f3ee69fdd2 | ||
|
|
92ca9ab940 | ||
|
|
f3deaff1df | ||
|
|
362b0b3f03 | ||
|
|
d2e63a8b1e | ||
|
|
661fec118e | ||
|
|
27a429a732 | ||
|
|
d535ca9d17 | ||
|
|
b8bfadc14a | ||
|
|
88593e210b | ||
|
|
b370dc2514 | ||
|
|
1a4381a6cf | ||
|
|
beb7084359 | ||
|
|
96b21a25b3 | ||
|
|
4a8da1d040 | ||
|
|
3c1e21b5ae | ||
|
|
cebd681586 | ||
|
|
4f8ada2e62 | ||
|
|
c39c6061e1 | ||
|
|
471595858b | ||
|
|
ddc962ec6f | ||
|
|
b88f3a8095 | ||
|
|
0ec85d0689 | ||
|
|
395a14c436 | ||
|
|
c002f5fbcd | ||
|
|
94d4b8247c | ||
|
|
5c83560117 | ||
|
|
de692c6d69 | ||
|
|
c37d84bc80 | ||
|
|
fe4834444b | ||
|
|
225c63e1c2 | ||
|
|
d86fbce41b | ||
|
|
8d0f6d0b28 | ||
|
|
b13dfed533 | ||
|
|
9439cd3620 | ||
|
|
408ed6bda7 | ||
|
|
d6d7c3298c | ||
|
|
d136e94e5c | ||
|
|
b135e657d4 | ||
|
|
404a29c056 | ||
|
|
63bb73fcce | ||
|
|
503b2bd134 | ||
|
|
070898a6f5 | ||
|
|
c73f036df6 | ||
|
|
9ae6af0e4f | ||
|
|
e4ee5fed93 | ||
|
|
bf53f63df8 | ||
|
|
21201ac90d | ||
|
|
d9cf6abcb9 | ||
|
|
7814e918c8 | ||
|
|
bc863369ff | ||
|
|
11e6a938bd | ||
|
|
910469d6be |
1024
.github/workflows/jsonDataValidation.yml
vendored
49
.github/workflows/sync_mirrors_git.yml
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
name: Sync to Mirror Repositories
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Build repo.json"]
|
||||
types:
|
||||
- completed # 当第一个工作流完成时触发
|
||||
workflow_dispatch: # 允许手动触发
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
if: github.repository_owner == 'babalae'
|
||||
runs-on: ubuntu-latest
|
||||
environment:
|
||||
name: product
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # 获取完整的git历史记录
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
- name: Sync to GitCode
|
||||
run: |
|
||||
git remote add gitcode https://gitcode.com/huiyadanli/bettergi-scripts-list.git || true
|
||||
git push https://huiyadanli:${{ secrets.GITCODE_TOKEN }}@gitcode.com/huiyadanli/bettergi-scripts-list.git main
|
||||
continue-on-error: true
|
||||
|
||||
- name: Sync to CNB
|
||||
run: |
|
||||
git remote add cnb https://cnb.cool/bettergi/bettergi-scripts-list.git || true
|
||||
git push https://cnb:${{ secrets.CNB_TOKEN }}@cnb.cool/bettergi/bettergi-scripts-list.git main
|
||||
continue-on-error: true
|
||||
|
||||
- name: Sync to Gitee
|
||||
run: |
|
||||
git remote add gitee https://gitee.com/babalae/bettergi-scripts-list.git || true
|
||||
git push https://huiyadanli:${{ secrets.GITEE_TOKEN }}@gitee.com/babalae/bettergi-scripts-list.git main
|
||||
continue-on-error: true
|
||||
|
||||
- name: Report sync status
|
||||
if: always()
|
||||
run: |
|
||||
echo "Sync operation completed. Check individual steps for any errors."
|
||||
2
.gitignore
vendored
@@ -1,6 +1,8 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
repo/js/**/*.txt
|
||||
repo/pathing/**/*.txt
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
176
README.md
@@ -6,7 +6,7 @@
|
||||
|
||||
作者Q群:764972801 (非作者请勿加入)
|
||||
|
||||
[如何提交到本仓库?(谁都能看懂的 GitHub Pull Request 使用指南)](https://bgi.huiyadan.com/dev/pr.html)
|
||||
[如何提交到本仓库?(谁都能看懂的 GitHub Pull Request 使用指南)](https://bettergi.com/dev/pr.html)
|
||||
|
||||
## 脚本提交说明
|
||||
|
||||
@@ -15,65 +15,193 @@
|
||||
- 地图追踪脚本提交到 [repo/pathing](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/pathing) 目录;
|
||||
- 七圣召唤脚本提交到 [repo/tcg](https://github.com/babalae/bettergi-scripts-list/tree/main/repo/tcg) 目录。
|
||||
|
||||
|
||||
## 脚本提交规范
|
||||
|
||||
为了保证脚本的规范性和可读性,方便用户清晰了解脚本的用途,制定以下脚本命名规则和脚本文件夹命名规则。
|
||||
|
||||
### 地图追踪脚本
|
||||
|
||||
#### 文件命名规范
|
||||
|
||||
确保脚本文件在同一目录下按预期顺序排列,并一目了然地传达关键信息。地图追踪脚本命名需包含以下核心信息:
|
||||
|
||||
```
|
||||
编号-材料名称-区域(跨区域材料填写)-二级子区域-数量
|
||||
编号-材料名称-区域(跨区域材料填写)-二级区域(可选)-二级子区域-数量
|
||||
```
|
||||
|
||||
- 编号
|
||||
|
||||
- 两位数,如果单个资源脚本数量超过 `100` 可以考虑使用三位数编号或者使用字母加数字编号,如 A01
|
||||
- 编号的排序应遵循以下两种方式之一:
|
||||
- 按传送点位顺序排序。相邻脚本之间优先保证传送的便捷性,这种编号方式考虑整体采集效率。
|
||||
- 按材料获取效率排序。优先选择资源分布密集或容易采集的点,效率高的路径放在靠前编号,这种编号方式考虑编号靠前脚本的采集效率。
|
||||
|
||||
- 材料名称
|
||||
|
||||
- 采集物(使用游戏内官方名称命名,如 `慕风蘑菇`,`劫波莲`,不应当使用 `绫华突破材料`等不清晰的名称命名)
|
||||
- 掉落物(因掉落物名称与掉落物等级有关,因此不使用掉落物本身命名,而是使用怪物名称命名)
|
||||
- 区域(指 `蒙德` `璃月` `稻妻` `须弥` `枫丹` `纳塔` `至冬`,仅当材料跨区域需标注)
|
||||
|
||||
- 区域(指 `蒙德` `璃月` `稻妻` `须弥` `枫丹` `纳塔` `至冬`,**仅当材料跨区域需标注**)
|
||||
|
||||
- 二级区域(如 `珉林`,根据实际需求标注)
|
||||
|
||||
- 二级子区域(细分地点,如 `绝云间`)
|
||||
|
||||
- 预期采集的数量
|
||||
示例:
|
||||
|
||||
脚本名称**仅限上述**规定的编号、材料名称、区域、二级子区域,原则上不应包含额外的描述或标点符号。
|
||||
|
||||
```
|
||||
01-水晶矿-璃月-绝云间-6个
|
||||
02-水晶矿-璃月-荻花洲-8个
|
||||
✔ 参考示范:
|
||||
01-水晶块-璃月-绝云间-6个
|
||||
02-水晶块-璃月-荻花洲-8个
|
||||
|
||||
❌ 错误示范:
|
||||
01-水晶块-璃月-快速路径-绝云间-6个
|
||||
```
|
||||
脚本名称仅限上述规定的编号、材料名称、区域、二级子区域,不应包含额外的描述或标点符号。如:
|
||||
```
|
||||
01-水晶矿-璃月-快速路径-绝云间-6个
|
||||
```
|
||||
其他注意事项
|
||||
|
||||
**其他注意事项**
|
||||
|
||||
- 部分采集物没有对应的二级子区域,允许名称的区域部分使用**起始传送锚点**右侧展示的二级区域,或**这条路径的大部分采集物点位**所位于的二级区域
|
||||
|
||||
- 相同**二级子区域**有多条路径时,推荐采用 `编号-材料名称-二级区域-二级子区域及方位-数量` 进行命名。
|
||||
|
||||
- 脚本文件名应当和 `json` 文件中的 `name` 字段相同。
|
||||
|
||||
- 说明文件应当命名为README.md以保证仓库能够正确读取。
|
||||
|
||||
#### 文件夹命名规范
|
||||
|
||||
目的:对脚本按材料分类管理,便于版本控制与团队协作。目录结构应当遵循以下原则:
|
||||
|
||||
- 根据脚本种类选择恰当的一级分类,目前共有六个分类 `锄地专区`、`地方特产`、`敌人与魔物`、`矿物`、`其他`。
|
||||
|
||||
- 一级目录:以材料名称命名,须与文件命名中的材料名称一致。
|
||||
|
||||
- 二级子目录(可选):可根据项目或作者划分,如有必要。
|
||||
示例目录结构如下:
|
||||
```
|
||||
repo/pathing/
|
||||
├─ 水晶矿/
|
||||
│ ├─ 01-水晶矿-璃月-绝云间-6个
|
||||
│ └─ 02-水晶矿-璃月-荻花洲-8个
|
||||
└─ 风车菊/
|
||||
└─ 01-风车菊-蒙德-清泉镇-15个
|
||||
```
|
||||
如果脚本和原来的地图追踪脚本存在冲突 按照以下原则处理:
|
||||
|
||||
- 示例目录结构如下:
|
||||
|
||||
```
|
||||
repo/pathing/矿物
|
||||
├─ 水晶块
|
||||
│ ├─ 01-水晶块-璃月-绝云间-6个
|
||||
│ └─ 02-水晶块-璃月-荻花洲-8个
|
||||
└─ 星银矿石
|
||||
└─ 01-星银矿石-覆雪之路-7个
|
||||
```
|
||||
|
||||
如果脚本和原来的地图追踪脚本存在冲突 按照以下原则处理:
|
||||
|
||||
- 修复或补充:直接提交到原材料目录。
|
||||
|
||||
- 路线冲突:新建同名目录并添加作者标识:
|
||||
|
||||
1. 将旧脚本目录重命名为 `AA@旧作者名`
|
||||
2. 新脚本放入 `AA@你的名字`
|
||||
3. 例:原 `repo/pathing/AA` 重命名为 `repo/pathing/AA@oldauthor` 新目录 `repo/pathing/AA@yourname`
|
||||
3. 例:原 `repo/pathing/AA` 重命名为 `AA@oldauthor` 新目录 `AA@yourname`
|
||||
- 示例目录结构如下:
|
||||
|
||||
```
|
||||
repo/pathing/.../
|
||||
└── AA
|
||||
├── AA@旧作者名
|
||||
└── AA@你的名字
|
||||
```
|
||||
|
||||
- 不同采集方式|角色|效率:新建目录添加标识及作者标识:
|
||||
|
||||
1. 判断旧脚本目录的采集方式,将旧脚本目录重命名为 `采集方式@旧作者名`
|
||||
2. 新脚本放入 `采集方式@你的名字`
|
||||
- 示例目录结构如下:
|
||||
|
||||
```
|
||||
repo/pathing
|
||||
├── 地方特产/区域
|
||||
│ ├── A材料
|
||||
│ │ ├── 无草神@作者广告位招租
|
||||
│ │ ├── 有草神效率路线@作者广告位招租
|
||||
│ │ ├── 有草神全收集@作者广告位招租
|
||||
│ │ └── ...
|
||||
│ └── B材料
|
||||
│ ├── 效率路线@作者广告位招租
|
||||
│ ├── 全收集@作者广告位招租
|
||||
│ └── ...
|
||||
├── 矿物
|
||||
│ ├── 水晶矿
|
||||
│ │ ├── 大剑@作者广告位招租
|
||||
│ │ ├── 钟离@作者广告位招租
|
||||
│ │ ├── 诺艾尔@作者广告位招租
|
||||
│ │ └── ...
|
||||
│ └── 萃凝晶
|
||||
│ ├── 大剑效率路线@作者广告位招租
|
||||
│ ├── 大剑无战斗@作者广告位招租
|
||||
│ └── ...
|
||||
└── ...
|
||||
```
|
||||
|
||||
**其他注意事项**
|
||||
|
||||
其他注意事项
|
||||
- 目录名仅限材料官方名称,不添加版本号或其他标识。
|
||||
|
||||
- 作者标识仅在冲突时追加,格式为“@作者名”,紧随原目录名。
|
||||
|
||||
### JS脚本
|
||||
|
||||
创建JS脚本请参考文档[创建脚本](https://bettergi.com/dev/js/create.html)
|
||||
|
||||
#### 文件夹命名规则
|
||||
|
||||
- 脚本的文件夹名称**应体现脚本的用途**,简要用途可在描述文件[manifest.json](https://bettergi.com/dev/js/create.html#manifest-json)中说明,详细用途可在`README.md`中说明
|
||||
|
||||
- 脚本的主体文件夹名称可采用`英文`、`中文`、`英文缩写+中文`等命名方式,名称中不应包含空格,如:
|
||||
|
||||
```
|
||||
repo/js
|
||||
├── OCR购买材料
|
||||
├── AutoLeyLineOutcrop
|
||||
├── 使用历练点完成每日委托
|
||||
└── ...
|
||||
```
|
||||
|
||||
- 常见的脚本结构目录如下:
|
||||
|
||||
```
|
||||
repo/js
|
||||
└── 你的脚本名称
|
||||
├── Assets
|
||||
│ ├── Pathing
|
||||
│ │ └── xxx.json
|
||||
│ └── RecognitionObject
|
||||
│ └── xxx.png
|
||||
├── main.js
|
||||
├── manifest.json
|
||||
├── settings.json
|
||||
└── README.md
|
||||
```
|
||||
|
||||
- `Assets`用于存放脚本使用到的资源文件,其中
|
||||
|
||||
- `Pathing`用于存放[地图追踪](https://bettergi.com/feats/autos/pathing-dev.html)文件
|
||||
- `RecognitionObject`用于存放[模板匹配](https://bettergi.com/dev/js/rec.html#%E6%A8%A1%E6%9D%BF%E5%8C%B9%E9%85%8D)对象
|
||||
|
||||
**其他注意事项**
|
||||
|
||||
- 脚本使用的资源文件应在`README.md`中注明实际用途
|
||||
|
||||
### 其他
|
||||
|
||||
因早期对脚本管理较为宽松,因此仓库有部分脚本并不符合命名规范,欢迎通过 PR 规范这些名称。
|
||||
|
||||
## Contributors
|
||||
|
||||
<a href="https://next.ossinsight.io/widgets/official/compose-recent-active-contributors?repo_id=866958830&limit=30" target="_blank" style="display: block" align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://next.ossinsight.io/widgets/official/compose-recent-active-contributors/thumbnail.png?repo_id=866958830&limit=30&image_size=auto&color_scheme=dark" width="655" height="auto">
|
||||
<img alt="Active Contributors of babalae/bettergi-scripts-list - Last 28 days" src="https://next.ossinsight.io/widgets/official/compose-recent-active-contributors/thumbnail.png?repo_id=866958830&limit=30&image_size=auto&color_scheme=light" width="655" height="auto">
|
||||
</picture>
|
||||
</a>
|
||||
|
||||
## 相关源码
|
||||
|
||||
脚本仓库页面的源码:[bettergi-scripts-web](https://github.com/huiyadanli/bettergi-scripts-web)
|
||||
|
||||
BIN
archive/js/5_7PVP_Auto/assets/buff.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
archive/js/5_7PVP_Auto/assets/button1.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
archive/js/5_7PVP_Auto/assets/button2.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
archive/js/5_7PVP_Auto/assets/button3.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
archive/js/5_7PVP_Auto/assets/finish1.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
archive/js/5_7PVP_Auto/assets/finish2.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
archive/js/5_7PVP_Auto/assets/goal.png
Normal file
|
After Width: | Height: | Size: 876 B |
103
archive/js/5_7PVP_Auto/lib.js
Normal file
@@ -0,0 +1,103 @@
|
||||
//eval(file.readTextSync("lib.js"));
|
||||
|
||||
|
||||
const width = genshin.width;
|
||||
const height = genshin.height;
|
||||
|
||||
function clickf(x, y) {
|
||||
click(Math.round(width * x), Math.round(height * y));
|
||||
}
|
||||
function movetof(x, y) {
|
||||
moveMouseTo(Math.round(width * x), Math.round(height * y));
|
||||
}
|
||||
function get_config(name, defval) {
|
||||
let t = settings[name];
|
||||
return typeof (t) === 'undefined' ? defval : t;
|
||||
}
|
||||
function get_config_int(name, defval) {
|
||||
return parseInt(get_config(name, defval), 10);
|
||||
}
|
||||
|
||||
|
||||
class OCRError extends Error {
|
||||
constructor(message, options) { super(message, options); }
|
||||
}
|
||||
|
||||
|
||||
setGameMetrics(genshin.width, genshin.height, 1); // 设置游戏窗口大小和DPI
|
||||
function test1() {
|
||||
log.info(`窗口大小: ${genshin.width} * ${genshin.height}`);
|
||||
let a = captureGameRegion();
|
||||
log.info(`截图:x=${a.x} y=${a.y} w=${a.width} h=${a.height} l=${a.left} t=${a.top} r=${a.right} b=${a.bottom}`);
|
||||
}
|
||||
const global_region = captureGameRegion();
|
||||
//test1();
|
||||
|
||||
function template(filename, x, y, w, h, center = true) {
|
||||
if (center) { x = x - w / 2; y = y - h / 2; }
|
||||
return RecognitionObject.TemplateMatch(file.ReadImageMatSync(filename), 1920 * x, 1080 * y, 1920 * w, 1080 * h);
|
||||
//return RecognitionObject.TemplateMatch(file.ReadImageMatSync(filename), genshin.width * x, genshin.height * y, genshin.width * w, genshin.height * h);
|
||||
}
|
||||
function template_ocr(x, y, w, h, center = true) {
|
||||
if (center) { x = x - w / 2; y = y - h / 2; }
|
||||
return RecognitionObject.Ocr(1920 * x, 1080 * y, 1920 * w, 1080 * h);
|
||||
}
|
||||
|
||||
function draw_obj(obj, name = "test") {
|
||||
const r = obj.RegionOfInterest;
|
||||
let s = global_region.deriveCrop(r.x, r.y, r.width, r.height);
|
||||
s.DrawSelf(name);
|
||||
}
|
||||
|
||||
async function match_click(obj, desc, click = true, timeout = 15000) {
|
||||
draw_obj(obj, "match");
|
||||
await sleep(1000);
|
||||
const start = Date.now();
|
||||
let x = 1;
|
||||
while (Date.now() - start < timeout) {
|
||||
let result = captureGameRegion().Find(obj);
|
||||
await sleep(800);
|
||||
if (result.isExist()) {
|
||||
result.drawSelf("match_found");
|
||||
if (click) {
|
||||
result.click();
|
||||
log.info(`成功识别并点击 ${desc},耗时${Date.now() - start}ms`);
|
||||
} else {
|
||||
log.info(`成功识别到 ${desc},耗时${Date.now() - start}ms`);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
log.info(`第${x}次识别并点击 ${desc} 失败,耗时${Date.now() - start}ms`);
|
||||
x++;
|
||||
await sleep(1000);
|
||||
}
|
||||
throw new OCRError(`等待超时,未找到目标 ${desc}`);
|
||||
}
|
||||
|
||||
async function ocr_click(obj, desc, click = true, timeout = 15000) {
|
||||
draw_obj(obj, "ocr");
|
||||
await sleep(1000);
|
||||
const start = Date.now();
|
||||
let x = 1;
|
||||
while (Date.now() - start < timeout) {
|
||||
let results = captureGameRegion().findMulti(obj);
|
||||
if (results.Count != 1) {
|
||||
log.warn(`搜索到${results.Count}个结果(预期为1个)`);
|
||||
}
|
||||
await sleep(800);
|
||||
if (results.Count == 1) {
|
||||
results[0].drawSelf("ocr_found");
|
||||
if (click) {
|
||||
results[0].click();
|
||||
log.info(`成功Ocr识别并点击 ${desc}, 耗时${Date.now() - start}ms`);
|
||||
} else {
|
||||
log.info(`成功Ocr识别到 ${desc}, 耗时${Date.now() - start}ms`)
|
||||
}
|
||||
return results[0];
|
||||
}
|
||||
log.info(`第${x}次Ocr识别并点击 ${desc} 失败,耗时${Date.now() - start}ms`);
|
||||
x++;
|
||||
await sleep(1000);
|
||||
}
|
||||
throw new OCRError(`等待超时,未找到Ocr目标 ${desc}`);
|
||||
}
|
||||
257
archive/js/5_7PVP_Auto/main.js
Normal file
@@ -0,0 +1,257 @@
|
||||
eval(file.readTextSync("lib.js"));
|
||||
|
||||
const CHAR_X = get_config_int("char_x", 0);
|
||||
const CHAR_Y = get_config_int("char_y", 0);
|
||||
|
||||
const global_region = captureGameRegion();
|
||||
|
||||
const btn_details = template("assets/button1.png", 0.77, 0.75, 0.04, 0.08, true);
|
||||
const btn_startmatch = template("assets/button2.png", 0.832, 0.95, 0.04, 0.08, true);
|
||||
const btn_acceptmatch = template("assets/button1.png", 0.528, 0.68, 0.04, 0.08, true);
|
||||
const btn_closetip = template("assets/button3.png", 0.978, 0.35, 0.043, 0.075, true);
|
||||
const buff_icon = template("assets/buff.png", 0.068, 0.204, 0.03, 0.05, true);
|
||||
const btn_confirm = template("assets/button1.png", 0.832, 0.95, 0.04, 0.08, true);
|
||||
const goal_icon = template("assets/goal.png", 0.031, 0.3125 + 0.035 * 1, 0.012, 0.018 + 0.035 * 2);
|
||||
const btn_finish1 = template("assets/finish1.png", 0.5, 0.805, 0.042, 0.026, true);
|
||||
const btn_finish2 = template("assets/finish2.png", 0.5, 0.805, 0.029, 0.026, true);
|
||||
|
||||
const score = template_ocr(0.162, 0.415, 0.1, 0.06, false);
|
||||
const matching_tip = template_ocr(0.35, 0.77, 0.12, 0.08, false);
|
||||
|
||||
const ACT_KEYS = ["W", "S", "A", "D"];
|
||||
|
||||
/// Press F5 and click on Details button
|
||||
async function F5_and_click() {
|
||||
await keyPress("F5");
|
||||
await sleep(1000);
|
||||
|
||||
for (let i = 0; i < 3; i++) {
|
||||
clickf(0.182, 0.255);
|
||||
await sleep(500);
|
||||
}
|
||||
|
||||
await match_click(btn_details, "活动详情按钮");
|
||||
await sleep(2000);
|
||||
}
|
||||
|
||||
async function start_minigame() {
|
||||
let should_retry = false;
|
||||
while (true) {
|
||||
// 点击开始匹配按钮
|
||||
try {
|
||||
await match_click(btn_startmatch, "开始匹配", true, 10000);
|
||||
await sleep(2000);
|
||||
} catch (e) {
|
||||
log.warn("点击匹配按钮失败,暂时跳过");
|
||||
}
|
||||
|
||||
// 匹配中,准备点击接受按钮
|
||||
should_retry = false;
|
||||
while (true) {
|
||||
let screen = captureGameRegion();
|
||||
await sleep(800);
|
||||
|
||||
// 确保还在匹配状态
|
||||
let tip = screen.Find(matching_tip);
|
||||
if (tip.isExist() && tip.text.startsWith("匹配中")) {
|
||||
} else {
|
||||
log.warn("匹配状态异常,即将重试");
|
||||
should_retry = true;
|
||||
break;
|
||||
}
|
||||
|
||||
let btn = screen.Find(btn_acceptmatch);
|
||||
if (btn.isExist()) {
|
||||
log.info("匹配成功,接受");
|
||||
await sleep(500);
|
||||
btn.click();
|
||||
break;
|
||||
}
|
||||
|
||||
await sleep(1000);
|
||||
}
|
||||
if (should_retry) {
|
||||
await sleep(5000);
|
||||
continue;
|
||||
}
|
||||
|
||||
await sleep(8000);
|
||||
|
||||
// 可能进入战斗准备界面,或匹配失败退回
|
||||
should_retry = false;
|
||||
log.info("等待进入选择角色界面")
|
||||
while (true) {
|
||||
await sleep(1000);
|
||||
let screen = captureGameRegion();
|
||||
draw_obj(btn_startmatch, "start");
|
||||
draw_obj(btn_closetip, "close");
|
||||
await sleep(800);
|
||||
|
||||
if (screen.Find(btn_startmatch).isExist()) {
|
||||
log.warn("匹配失败,即将重试");
|
||||
await sleep(3000);
|
||||
should_retry = true;
|
||||
break;
|
||||
}
|
||||
|
||||
let close = screen.Find(btn_closetip);
|
||||
if (close.isExist()) {
|
||||
close.drawSelf("close_found");
|
||||
log.info("已经进入选择角色界面");
|
||||
await sleep(500);
|
||||
close.click();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (should_retry) {
|
||||
await sleep(5000);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Error("Unreachable");
|
||||
}
|
||||
|
||||
function click_char(x, y) {
|
||||
movetof(0.057 + x * 0.073, 0.169 + y * 0.157);
|
||||
clickf(0.057 + x * 0.073, 0.169 + y * 0.157);
|
||||
}
|
||||
|
||||
async function play(times) {
|
||||
for (let ii = 0; ii < times; ii++) {
|
||||
keyPress("Q");
|
||||
await sleep(500);
|
||||
keyPress("E");
|
||||
await sleep(500);
|
||||
let act = Math.floor(Math.random() * 8);
|
||||
let act_key = ACT_KEYS[act % 4];
|
||||
switch (act) {
|
||||
case 0: case 1: case 2: case 3:
|
||||
keyDown("SHIFT");
|
||||
keyDown(act_key);
|
||||
await sleep(1000);
|
||||
keyUp(act_key);
|
||||
keyUp("SHIFT");
|
||||
break;
|
||||
case 4:
|
||||
// 空格跳跃1秒
|
||||
keyDown("SPACE");
|
||||
await sleep(1000);
|
||||
keyUp("SPACE");
|
||||
break;
|
||||
case 5: case 6: case 7:
|
||||
// 左键连续普攻
|
||||
for (let i = 0; i < 5; i++) {
|
||||
leftButtonDown();
|
||||
await sleep(100);
|
||||
leftButtonUp();
|
||||
await sleep(100);
|
||||
}
|
||||
middleButtonClick();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
await sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
async function one_shot() {
|
||||
await sleep(1000);
|
||||
log.info("任务开始");
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
|
||||
log.info("进入活动界面");
|
||||
await F5_and_click();
|
||||
|
||||
log.info("读取当前分数");
|
||||
let score_obj = await ocr_click(score, "活动分数", false);
|
||||
let score_re = score_obj.text.match(/(\d+)\s*\/\s*(\d+)/);
|
||||
let cur_score = -1, max_score = -1;
|
||||
if (score_re && score_re.length >= 3) {
|
||||
cur_score = Number(score_re[1]);
|
||||
max_score = Number(score_re[2]);
|
||||
log.info(`当前分数:${cur_score}/${max_score}`);
|
||||
} else {
|
||||
throw new Error(`分数解析失败:${score_obj.text}`);
|
||||
}
|
||||
|
||||
if (cur_score >= max_score) {
|
||||
log.info("活动完成");
|
||||
return false;
|
||||
}
|
||||
|
||||
log.info("尝试匹配并进入小游戏");
|
||||
await start_minigame();
|
||||
await sleep(3000);
|
||||
|
||||
log.info("选择角色");
|
||||
await sleep(500);
|
||||
click_char(CHAR_X, CHAR_Y);
|
||||
await sleep(500);
|
||||
await match_click(btn_confirm, "确认角色选择");
|
||||
await sleep(500);
|
||||
|
||||
log.info("等待buff选择界面");
|
||||
while (true) {
|
||||
if (captureGameRegion().Find(buff_icon).isExist()) {
|
||||
break;
|
||||
}
|
||||
await sleep(5000);
|
||||
}
|
||||
await sleep(1000);
|
||||
|
||||
log.info("选择buff");
|
||||
clickf(0.25, 0.26);
|
||||
await sleep(500);
|
||||
await match_click(btn_confirm, "确认buff选择");
|
||||
await sleep(500);
|
||||
|
||||
log.info("等待游戏开始");
|
||||
await sleep(5000);
|
||||
log.info("等待游戏提示出现");
|
||||
while (true) {
|
||||
draw_obj(goal_icon);
|
||||
let result = captureGameRegion().FindMulti(goal_icon);
|
||||
await sleep(500);
|
||||
if (result.count != 3) { await sleep(5000); continue; }
|
||||
await sleep(1000);
|
||||
break;
|
||||
}
|
||||
|
||||
log.info("随机行动");
|
||||
while (true) {
|
||||
await play(15);
|
||||
let result = captureGameRegion().Find(btn_finish1);
|
||||
if (result.isExist()) {
|
||||
log.info("完成,点击结算按钮1");
|
||||
result.click();
|
||||
break;
|
||||
}
|
||||
await sleep(1000);
|
||||
}
|
||||
await sleep(1000);
|
||||
await match_click(btn_finish2, "退出活动");
|
||||
await sleep(10000);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
(async function () {
|
||||
let count = 0;
|
||||
while (true) {
|
||||
count++;
|
||||
if (!await one_shot()) break;
|
||||
await genshin.returnMainUi();
|
||||
await sleep(2000);
|
||||
await genshin.returnMainUi();
|
||||
await sleep(2000);
|
||||
log.info("第${count}次游戏结束,重新开始");
|
||||
}
|
||||
log.info("结束运行,可能是分数已满");
|
||||
|
||||
return;
|
||||
})();
|
||||
14
archive/js/5_7PVP_Auto/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "PVP活动自动化:5.7",
|
||||
"version": "5.7.0",
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "自动完成5.7版本联机PVP活动。可在脚本设置中自行选择上场角色。如果之前没有玩过这个活动,第一次运行建议人工监视到进入战斗界面,中间弹出的教学界面需要手动关掉,否则会执行失败!作者为:pans82@proton.me",
|
||||
"authors": [
|
||||
{
|
||||
"name": "pans82"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
12
archive/js/5_7PVP_Auto/settings.json
Normal file
@@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"name": "char_x",
|
||||
"type": "input-text",
|
||||
"label": "角色列号,0~3,默认0"
|
||||
},
|
||||
{
|
||||
"name": "char_y",
|
||||
"type": "input-text",
|
||||
"label": "角色行号,0~4,默认0"
|
||||
}
|
||||
]
|
||||
@@ -1 +1 @@
|
||||
{"info":{"name":"","description":"","type":""},"positions":[{"x":3563.2421875,"y":3018.57470703125,"type":"teleport","move_mode":"walk"},{"x":3583.29931640625,"y":3057.534423828125,"type":"path","move_mode":"walk"},{"x":3585.44873046875,"y":3072.050048828125,"type":"path","move_mode":"walk"},{"x":3586.3720703125,"y":3071.326904296875,"type":"path","move_mode":"walk"},{"x":3584.07958984375,"y":3071.462646484375,"type":"path","move_mode":"walk"}]}
|
||||
{"info":{"name":"","description":"","type":""},"positions":[{"x":3563.2421875,"y":3018.57470703125,"type":"teleport","move_mode":"walk"},{"x":3583.29931640625,"y":3057.534423828125,"type":"path","move_mode":"walk"},{"x":3585.44873046875,"y":3072.050048828125,"type":"path","move_mode":"walk"},{"x":3586.3720703125,"y":3071.326904296875,"type":"path","move_mode":"walk"},{"x":3584.07958984375,"y":3071.462646484375,"type":"path","move_mode":"walk"}]}
|
||||
3
archive/js/AutoCode/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
兑换码+截止时间存储地址codes.txt
|
||||
格式 兑换码,xxxx.xx.xx xx:xx:xx
|
||||
仅支持国服
|
||||
BIN
archive/js/AutoCode/assets/account.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
archive/js/AutoCode/assets/clear.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
BIN
archive/js/AutoCode/assets/confirm.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
archive/js/AutoCode/assets/expired.png
Normal file
|
After Width: | Height: | Size: 6.7 KiB |
BIN
archive/js/AutoCode/assets/go_to_redeem.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
archive/js/AutoCode/assets/input_code.png
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
archive/js/AutoCode/assets/invalid.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
archive/js/AutoCode/assets/not_open.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
archive/js/AutoCode/assets/redeem.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
archive/js/AutoCode/assets/settings.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
archive/js/AutoCode/assets/used.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
3
archive/js/AutoCode/codes.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
KG3SZF8EZGQN,2025.7.21 12:00:00
|
||||
DZ2TZX9WHXSS,2025.7.21 12:00:00
|
||||
ZGKBHW9FGXSW,2025.7.21 12:00:00
|
||||
117
archive/js/AutoCode/main.js
Normal file
@@ -0,0 +1,117 @@
|
||||
(async function () {
|
||||
setGameMetrics(1920, 1080, 1);
|
||||
// 1. 返回主界面,等待1秒
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
|
||||
// 2. 通过keyPress点按esc键(VK_ESCAPE),等待2秒。ocr识别设置图片并点击,等待2秒。识别账户图片并点击,等待0.5秒,识别前往兑换图片并点击,等待0.5秒
|
||||
keyPress("ESCAPE");
|
||||
await sleep(2000);
|
||||
|
||||
const settingsRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/settings.png"));
|
||||
const settingsRes = captureGameRegion().find(settingsRo);
|
||||
if (settingsRes.isExist()) {
|
||||
settingsRes.click();
|
||||
}
|
||||
await sleep(2000);
|
||||
|
||||
const accountRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/account.png"));
|
||||
const accountRes = captureGameRegion().find(accountRo);
|
||||
if (accountRes.isExist()) {
|
||||
accountRes.click();
|
||||
}
|
||||
await sleep(500);
|
||||
|
||||
const goToRedeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/go_to_redeem.png"));
|
||||
const goToRedeemRes = captureGameRegion().find(goToRedeemRo);
|
||||
if (goToRedeemRes.isExist()) {
|
||||
goToRedeemRes.click();
|
||||
}
|
||||
await sleep(500);
|
||||
|
||||
// 3. 新建一个txt用于存储兑换码及截止时间,之间换行区分,格式为【兑换码,截止时间】
|
||||
try {
|
||||
const content = file.readTextSync("codes.txt");
|
||||
const codes = content.split('\n');
|
||||
|
||||
for (let i = 0; i < codes.length; i++) {
|
||||
const codeInfo = codes[i].split(',');
|
||||
const code = codeInfo[0];
|
||||
const deadline = codeInfo[1];
|
||||
|
||||
// a. 获取当前时间【xxxx.xx.xx xx:xx:xx】(年月日时分秒),与截止时间进行对比
|
||||
const now = new Date();
|
||||
const currentTime = now.getFullYear() + '.' + String(now.getMonth() + 1).padStart(2, '0') + '.' + String(now.getDate()).padStart(2, '0') + ' ' + String(now.getHours()).padStart(2, '0') + ':' + String(now.getMinutes()).padStart(2, '0') + ':' + String(now.getSeconds()).padStart(2, '0');
|
||||
|
||||
if (currentTime > deadline) {
|
||||
log.info(`兑换码【${code}】已超过截止时间,跳过`);
|
||||
continue;
|
||||
}
|
||||
|
||||
// b. 识别输入兑换码图片并点击
|
||||
const inputCodeRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/input_code.png"));
|
||||
const inputCodeRes = captureGameRegion().find(inputCodeRo);
|
||||
if (inputCodeRes.isExist()) {
|
||||
inputCodeRes.click();
|
||||
}
|
||||
await sleep(300);
|
||||
|
||||
// c. 通过虚拟键代码依次keyPress键入兑换码的每一个字符
|
||||
await inputText(code);
|
||||
await sleep(500);
|
||||
|
||||
// d. 输入完毕后,识别兑换图片并点击,等待1.5秒
|
||||
const redeemRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/redeem.png"));
|
||||
const redeemRes = captureGameRegion().find(redeemRo);
|
||||
if (redeemRes.isExist()) {
|
||||
redeemRes.click();
|
||||
}
|
||||
await sleep(1500);
|
||||
|
||||
// e. 识别无效图片、已使用图片、过期图片、确认图片、未开启图片
|
||||
const invalidRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/invalid.png"));
|
||||
const invalidRes = captureGameRegion().find(invalidRo);
|
||||
if (invalidRes.isExist()) {
|
||||
log.info(`兑换码【${code}】无效`);
|
||||
}
|
||||
|
||||
const usedRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/used.png"));
|
||||
const usedRes = captureGameRegion().find(usedRo);
|
||||
if (usedRes.isExist()) {
|
||||
log.info(`兑换码【${code}】已使用`);
|
||||
}
|
||||
|
||||
const expiredRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/expired.png"));
|
||||
const expiredRes = captureGameRegion().find(expiredRo);
|
||||
if (expiredRes.isExist()) {
|
||||
log.info(`兑换码【${code}】已过期`);
|
||||
}
|
||||
|
||||
const notopenRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/not_open.png"));
|
||||
const notopenRes = captureGameRegion().find(notopenRo);
|
||||
if (notopenRes.isExist()) {
|
||||
log.info(`兑换码【${code}】未开启`);
|
||||
}
|
||||
|
||||
const confirmRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/confirm.png"));
|
||||
const confirmRes = captureGameRegion().find(confirmRo);
|
||||
if (confirmRes.isExist()) {
|
||||
log.info(`兑换码【${code}】成功兑换`);
|
||||
confirmRes.click();
|
||||
}
|
||||
|
||||
// f. 识别清除图片并点击,若未识别到则不做处理
|
||||
const clearRo = RecognitionObject.TemplateMatch(file.readImageMatSync("assets/clear.png"));
|
||||
const clearRes = captureGameRegion().find(clearRo);
|
||||
if (clearRes.isExist()) {
|
||||
clearRes.click();
|
||||
}
|
||||
await sleep(4000);
|
||||
}
|
||||
} catch (error) {
|
||||
log.error(`读取兑换码文件失败: ${error}`);
|
||||
}
|
||||
|
||||
// 4. 所有兑换码兑换完成后返回主界面
|
||||
await genshin.returnMainUi();
|
||||
})();
|
||||
14
archive/js/AutoCode/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动使用兑换码",
|
||||
"version": "5.8.0",
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "仅支持国服",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Tool_tingsu",
|
||||
"links": "https://github.com/Tooltingsu"
|
||||
}
|
||||
],
|
||||
"main": "main.js"
|
||||
}
|
||||
21
archive/js/AutoCommission&Expedition&BattlePass/main.js
Normal file
@@ -0,0 +1,21 @@
|
||||
(async function () {
|
||||
// 自动领取每日委托&探索派遣奖励
|
||||
await genshin.goToAdventurersGuild("枫丹");
|
||||
await sleep(1000);
|
||||
click(960,300);
|
||||
await sleep(1000);
|
||||
click(960,300);
|
||||
await sleep(1000);
|
||||
await genshin.returnMainUi();
|
||||
// Again
|
||||
await genshin.goToAdventurersGuild("枫丹");
|
||||
await sleep(1000);
|
||||
click(960,300);
|
||||
await sleep(1000);
|
||||
click(960,300);
|
||||
await sleep(1000);
|
||||
await genshin.returnMainUi();
|
||||
// 自动领取纪行奖励
|
||||
await genshin.claimBattlePassRewards();
|
||||
await genshin.returnMainUi();
|
||||
})();
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动领取委托、派遣和纪行",
|
||||
"version": "2.0",
|
||||
"description": "自动传送到枫丹并领取每日委托、探索派遣、纪行的奖励",
|
||||
"authors": [
|
||||
{
|
||||
"name": "起个名字好难的喵",
|
||||
"links":"https://github.com/MisakaAldrich"
|
||||
},
|
||||
{
|
||||
"name": "yemaxul",
|
||||
"link": "https://github.com/yemaxul"
|
||||
}
|
||||
],
|
||||
"main": "main.js"
|
||||
}
|
||||
22
archive/js/AutoEatCoinPVPEvent/assets/pathing/continue.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "未命名路径",
|
||||
"type": "collect",
|
||||
"author": "修改我的qq昵称",
|
||||
"version": "1.0",
|
||||
"description": "联机游戏结束返回世界后重新进入游戏",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 7354.68017578125,
|
||||
"y": -1428.5908203125,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
40
archive/js/AutoEatCoinPVPEvent/assets/pathing/start.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "pvp_event",
|
||||
"type": "collect",
|
||||
"author": "修改我的qq昵称",
|
||||
"version": "1.0",
|
||||
"description": "走到5.6联机吃金币pvp活动点.",
|
||||
"map_name": "Teyvat",
|
||||
"bgi_version": "0.45.0"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": 7234.3056640625,
|
||||
"y": -1433.24609375,
|
||||
"type": "teleport",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": 7316.3564453125,
|
||||
"y": -1441.080078125,
|
||||
"type": "path",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"x": 7354.68017578125,
|
||||
"y": -1428.5908203125,
|
||||
"type": "target",
|
||||
"move_mode": "walk",
|
||||
"action": "",
|
||||
"action_params": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
307
archive/js/AutoEatCoinPVPEvent/main.js
Normal file
@@ -0,0 +1,307 @@
|
||||
(async function () {
|
||||
// 脚本配置参数
|
||||
// const ACTIVITY_LOCATION = { x: "1200.0", y: "1500.0" }; // 活动坐标
|
||||
const PATH_FILE_START = "assets/pathing/start.json"; // 地图追踪路径文件
|
||||
const PATH_FILE_CONTINUE = "assets/pathing/continue.json"; // 地图追踪路径文件
|
||||
|
||||
await sleep(1000);
|
||||
|
||||
log.info("自动吃金币活动, 启动!")
|
||||
|
||||
// 1. 脚本开始前确保在主界面
|
||||
log.info("确保游戏在主界面状态");
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
|
||||
// 在循环前添加游戏次数限制
|
||||
// const MAX_GAMES = 2;
|
||||
const MAX_GAMES = typeof (settings.max_games) === 'undefined' ? 20 : parseInt(settings.max_games, 10);
|
||||
let gameCount = 0;
|
||||
|
||||
log.info("最大游戏次数设定: {MAX_GAMES}次", MAX_GAMES)
|
||||
|
||||
|
||||
// 只要积分未满且游戏次数未达上限,就循环进行匹配和游戏
|
||||
while (gameCount < MAX_GAMES) {
|
||||
gameCount++; // 增加游戏计数
|
||||
log.info("开始第{count}场游戏", gameCount);
|
||||
|
||||
// 2. 使用地图追踪走到活动入口
|
||||
log.info("正在使用地图追踪前往活动入口");
|
||||
try {
|
||||
// 运行路径追踪脚本
|
||||
if (gameCount == 1) {
|
||||
await pathingScript.runFile(PATH_FILE_START);
|
||||
} else {
|
||||
await pathingScript.runFile(PATH_FILE_CONTINUE);
|
||||
}
|
||||
|
||||
log.info("已到达活动入口");
|
||||
} catch (error) {
|
||||
log.error("地图追踪失败: {error}", error);
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 检测F键交互窗口 - 使用正确的OCR方法
|
||||
let foundActivity = false;
|
||||
for (let i = 0; i < 10; i++) { // 最多尝试10次
|
||||
// 获取游戏截图
|
||||
const screenshot = captureGameRegion();
|
||||
|
||||
// 对整个区域进行OCR - 使用ocrThis
|
||||
const activityTextRegions = screenshot.findMulti(RecognitionObject.ocrThis);
|
||||
|
||||
// 遍历所有OCR结果
|
||||
for (let j = 0; j < activityTextRegions.count; j++) {
|
||||
const region = activityTextRegions[j];
|
||||
|
||||
if (region.text.includes("跨界挑战")) {
|
||||
log.info("检测到活动入口");
|
||||
foundActivity = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundActivity) break;
|
||||
|
||||
keyPress('W');
|
||||
moveMouseBy(0, 100); // 轻微移动视角帮助识别
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
// 4. 按F进入活动界面
|
||||
log.info("进入活动界面");
|
||||
keyPress("F");
|
||||
await sleep(2000); // 等待界面加载
|
||||
|
||||
// 5. 精确识别积分信息
|
||||
const scoreRegion = captureGameRegion().deriveCrop(
|
||||
1248, // x
|
||||
360, // y
|
||||
150, // width
|
||||
30 // height
|
||||
);
|
||||
|
||||
// 对积分区域进行OCR
|
||||
const scoreResults = scoreRegion.findMulti(RecognitionObject.ocrThis);
|
||||
|
||||
let currentScore = 0;
|
||||
let maxScore = 0;
|
||||
let scoreFound = false;
|
||||
// 遍历所有识别结果
|
||||
for (let i = 0; i < scoreResults.count; i++) {
|
||||
const res = scoreResults[i];
|
||||
|
||||
// 使用正则表达式匹配积分格式
|
||||
const match = res.text.match(/(\d+)\s*\/\s*(\d+)/);
|
||||
if (match && match.length >= 3) {
|
||||
currentScore = parseInt(match[1]);
|
||||
maxScore = parseInt(match[2]);
|
||||
scoreFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!scoreFound) {
|
||||
log.error("未识别到积分信息");
|
||||
// await genshin.returnMainUi();
|
||||
return;
|
||||
}
|
||||
log.info("积分状态: {current}/{max}", currentScore, maxScore);
|
||||
if (currentScore >= maxScore) {
|
||||
log.info("PVP活动已完成");
|
||||
// notification.send("PVP活动已完成");
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 6. 点击开始匹配
|
||||
log.info("匹配挑战");
|
||||
// 假设开始按钮在屏幕中间下方位置
|
||||
click(1560, 1012);
|
||||
await sleep(1000);
|
||||
|
||||
// 7. 等待并确认匹配
|
||||
let matchFound = false,matchFound_1st = false; //matchFound_1st:确认按钮是否点击过
|
||||
let matchTimeout = 0; //联机确认按钮超时等待(单位:秒)
|
||||
let beRefusedCount = 0; //被拒绝次数
|
||||
for (let i = 0; i < 60; i++) { // 最多等待60秒
|
||||
const confirmRegion = captureGameRegion().deriveCrop(
|
||||
1037,
|
||||
706,
|
||||
280,
|
||||
64
|
||||
);
|
||||
|
||||
// 执行OCR识别
|
||||
const confirmResults = confirmRegion.findMulti(RecognitionObject.ocrThis);
|
||||
log.info("匹配确认区域OCR识别结果数量: {count}", confirmResults.count);
|
||||
|
||||
/*处理联机确认按钮
|
||||
执行逻辑:(如有报错,自己改 或者 反馈naralan0502@gmail.com)
|
||||
如果OCR识别结果数量等于0,判断是否已经点击过确认按钮(通过变量matchFound_1st确认)
|
||||
是:超时等待时长matchTimeout++,若超时等待时长==13,设置matchFound为true,跳出循环
|
||||
否:继续循环
|
||||
如果OCR识别结果数量大于0,遍历所有识别结果
|
||||
如果存在确认按钮,设置变量matchFound_1st = true,超时等待t=0
|
||||
*/
|
||||
if(confirmResults.count){
|
||||
// 遍历所有识别结果
|
||||
for (let j = 0; j < confirmResults.count; j++) {
|
||||
const region = confirmResults[j];
|
||||
// log.info("匹配确认区域OCR结果:位置({x},{y},{w},{h}), 文本: {text}",
|
||||
// region.x, region.y, region.width, region.height, region.text);
|
||||
|
||||
if (region.text.includes("接受")) {
|
||||
click(1182, 737); // 点击确认按钮
|
||||
if(matchFound_1st && (++beRefusedCount >= 3)) log.info("兄啊有点点背,被拒绝了{count}次诶", beRefusedCount);
|
||||
matchFound_1st = true;
|
||||
log.info("匹配成功, 点击接受");
|
||||
matchTimeout = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
if(matchFound_1st && (++matchTimeout == 13)) { //超时等待13s(游戏内联机确认超时时长10s+冷却CD3s)
|
||||
matchFound = true;
|
||||
log.info("点击确认成功");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
if (!matchFound) {
|
||||
notification.error("匹配超时");
|
||||
return;
|
||||
}
|
||||
|
||||
// 7 等待进入游戏(直到出现"第1回合"提示)
|
||||
let roundStarted = false;
|
||||
const roundStartTime = Date.now();
|
||||
const ROUND_TIMEOUT = 90 * 1000; // 90秒超时
|
||||
|
||||
while (!roundStarted && Date.now() - roundStartTime < ROUND_TIMEOUT) {
|
||||
const roundRegion = captureGameRegion().deriveCrop(
|
||||
770,
|
||||
246,
|
||||
373,
|
||||
60
|
||||
);
|
||||
|
||||
const roundText = roundRegion.find(RecognitionObject.ocrThis);
|
||||
if (roundText && roundText.text && roundText.text.includes("第1回合")) {
|
||||
log.info("游戏开始");
|
||||
roundStarted = true;
|
||||
break;
|
||||
}
|
||||
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
if (!roundStarted) {
|
||||
log.error("未检测到回合开始提示");
|
||||
notification.error("进入游戏失败");
|
||||
return;
|
||||
}
|
||||
|
||||
// 8. 进入游戏后模拟操作
|
||||
log.info("开始模拟操作");
|
||||
|
||||
// 随机选择操作
|
||||
const actions = [
|
||||
// Shift+W 冲刺前进1秒
|
||||
async () => {
|
||||
keyDown("SHIFT");
|
||||
keyDown("W");
|
||||
await sleep(1000);
|
||||
keyUp("W");
|
||||
keyUp("SHIFT");
|
||||
},
|
||||
// Shift+A 冲刺左移1秒
|
||||
async () => {
|
||||
keyDown("SHIFT");
|
||||
keyDown("A");
|
||||
await sleep(1000);
|
||||
keyUp("A");
|
||||
keyUp("SHIFT");
|
||||
},
|
||||
// Shift+S 冲刺后退1秒
|
||||
async () => {
|
||||
keyDown("SHIFT");
|
||||
keyDown("S");
|
||||
await sleep(1000);
|
||||
keyUp("S");
|
||||
keyUp("SHIFT");
|
||||
},
|
||||
// Shift+D 冲刺右移1秒
|
||||
async () => {
|
||||
keyDown("SHIFT");
|
||||
keyDown("D");
|
||||
await sleep(1000);
|
||||
keyUp("D");
|
||||
keyUp("SHIFT");
|
||||
},
|
||||
// 空格跳跃1秒
|
||||
async () => {
|
||||
keyDown("SPACE");
|
||||
await sleep(1000);
|
||||
keyUp("SPACE");
|
||||
},
|
||||
// 1秒内按两下E(元素战技)
|
||||
async () => {
|
||||
// 第一次按E
|
||||
keyPress("E");
|
||||
await sleep(700); // 短暂间隔
|
||||
|
||||
// 第二次按E
|
||||
keyPress("E");
|
||||
await sleep(300); // 总时间1秒
|
||||
}
|
||||
];
|
||||
|
||||
const startTime = Date.now();
|
||||
const MAX_GAME_DURATION = 300 * 1000;
|
||||
|
||||
while (Date.now() - startTime < MAX_GAME_DURATION) {
|
||||
// 在屏幕顶部中央检测"挑战完成"文本
|
||||
const completionRegion = captureGameRegion().deriveCrop(
|
||||
800, 180, 320, 100
|
||||
);
|
||||
|
||||
const completionResults = completionRegion.findMulti(RecognitionObject.ocrThis);
|
||||
let challengeCompleted = false;
|
||||
|
||||
// 遍历识别结果
|
||||
for (let i = 0; i < completionResults.count; i++) {
|
||||
const region = completionResults[i];
|
||||
if (region.text.includes("挑战完成")) {
|
||||
challengeCompleted = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (challengeCompleted) {
|
||||
log.info("挑战完成");
|
||||
break;
|
||||
}
|
||||
// 随机执行一个操作
|
||||
const action = actions[Math.floor(Math.random() * actions.length)];
|
||||
await action();
|
||||
|
||||
}
|
||||
|
||||
await sleep(20000);
|
||||
await genshin.returnMainUi();
|
||||
await sleep(1000);
|
||||
await genshin.returnMainUi();
|
||||
}
|
||||
|
||||
log.info("已达到最大游戏次数{max}次", MAX_GAMES);
|
||||
return;
|
||||
|
||||
|
||||
})();
|
||||
14
archive/js/AutoEatCoinPVPEvent/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动联机pvp吃金币活动",
|
||||
"version": "5.6.0",
|
||||
"bgi_version": "0.45.0",
|
||||
"description": "自动完成5.6版本联机pvp吃金币「炽烈传说·跨界乱斗」活动",
|
||||
"authors": [
|
||||
{
|
||||
"name": "修改我的qq昵称"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
7
archive/js/AutoEatCoinPVPEvent/settings.json
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"name": "max_games",
|
||||
"type": "input-text",
|
||||
"label": "最大尝试进行游戏次数. 默认: 20"
|
||||
}
|
||||
]
|
||||
14
archive/js/AutoProcess/manifest.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动食材加工",
|
||||
"version": "1.0",
|
||||
"description": "自动食材加工, 可自动获取加工完成食材,可指定制作食材.",
|
||||
"authors": [
|
||||
{
|
||||
"name": "听雨♪",
|
||||
"links": "https://github.com/TingYu-lulumi"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
18
archive/js/AutoSereniteaPot/manifest.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "尘歌壶一条龙-领取洞天宝钱、角色好感和购买物品",
|
||||
"version": "0.0.3",
|
||||
"description": "自动放置并进入尘歌壶,寻找阿圆,领取洞天宝钱和好感(需要配置进入尘歌壶以后的路线),支持自动购买指定物品(更新时间:5.5版本)",
|
||||
"authors": [
|
||||
{
|
||||
"name": "bling-yshs",
|
||||
"links": "https://github.com/bling-yshs"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"尘歌壶",
|
||||
"购买物品"
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
105
archive/js/AutoStygianOnslaught/README.md
Normal file
@@ -0,0 +1,105 @@
|
||||
# 自动幽境危战注意事项
|
||||
|
||||
## 零、前言
|
||||
|
||||
- 当前文档处于测试阶段,注意事项可能尚不完善,敬请谅解。
|
||||
- 如发现BUG,请通过QQ:119996800联系我们,您的反馈将非常受欢迎。
|
||||
- 本脚本基于地脉花和首领一条龙脚本进行改造。
|
||||
- 脚本仅供娱乐使用,请在下载后24小时内删除。
|
||||
|
||||
## 一、省流注意事项
|
||||
|
||||
1. **使用前准备**:
|
||||
- 请在`<<幽境危战>>`中配置好战斗队伍。
|
||||
2. **黑名单建议**:
|
||||
- 根目录下有文件内含建议加入`自动拾取黑名单`的名称,请检查并添加。
|
||||
3. **战斗实力**:
|
||||
- 请确保队伍具备足够的战斗实力,当前版本在战斗失败或执行错误,只会重试`一次`。
|
||||
4. **自动拾取功能**:
|
||||
- 为避免不必要的干扰,建议关闭自动拾取功能。
|
||||
|
||||
## 二、配置简介
|
||||
|
||||
1. **圣遗物奖励**:
|
||||
- 默认设置下,脚本不会修改圣遗物奖励。
|
||||
|
||||
2. **Boss挑战关卡选择**:
|
||||
- 必填项:请从上往下选择第几个Boss挑战关卡`(1至3)`,否则脚本将无法执行。
|
||||
|
||||
3. **挑战次数**:
|
||||
- 默认设置为`15`次,期间若树脂耗尽,脚本将自动结束。
|
||||
|
||||
4. **树脂顺序设定**:
|
||||
- 使用`/`隔开数字来设定树脂使用顺序,如`1/2`表示先使用浓缩树脂,再使用原粹树脂。
|
||||
- 树脂类型对应关系:
|
||||
- 1 = 浓缩树脂
|
||||
- 2 = 原粹树脂
|
||||
- 3 = 脆弱树脂
|
||||
- 4 = 须臾树脂
|
||||
- 默认设置:`1/2`,表示先使用浓缩树脂,再使用原粹树脂,不填的不使用"。
|
||||
|
||||
5. **最长战斗超时时间**:
|
||||
- 默认设置为`240`秒,一般情况下无需修改。
|
||||
|
||||
6. **开始战斗后的移动时间**:
|
||||
- 默认设置为`1`秒(注意单位为`秒`),由于战斗开始位置离Boss较远,请根据实际情况设定,一般情况下默认设置即可。
|
||||
|
||||
## 三、更新说明
|
||||
|
||||
### v.1.0版本(20250627)
|
||||
|
||||
- **功能**:脚本发布。
|
||||
|
||||
### v.1.1版本
|
||||
|
||||
- **备注**:此版本信息被省略。
|
||||
|
||||
### v.1.2版本(20250627)
|
||||
|
||||
- **新增功能**:
|
||||
1. 添加圣遗物`奖励选择`功能。
|
||||
2. 添加自动选择`难度`功能。
|
||||
- **优化**:
|
||||
1. 优化逻辑处理。
|
||||
2. 加大战斗完成识别区域。
|
||||
|
||||
### v.1.3版本(20250628)
|
||||
|
||||
- **新增功能**:
|
||||
1. 添加`自动重试`,战斗失败或执行错误会`重试一次`。
|
||||
- **优化**:
|
||||
2. 优化退出点击时序和逻辑。
|
||||
3. 优化进入秘境后向前走的逻辑。
|
||||
4. 优化LOG输出显示内容。
|
||||
- **修复**
|
||||
1. 修复默认状态下,选择长夜套的BUG。
|
||||
|
||||
### v.1.4版本(20250629)
|
||||
|
||||
- **新增功能**:
|
||||
1. 添加领奖后的树脂识别,不足时退出秘境,防止多打一次。
|
||||
- **优化**:
|
||||
1. 优化`再次挑战`挑战的点击逻辑,添加重试。
|
||||
2. 优化相关自动拾取代码。
|
||||
3. 优化`难度选择`和`圣遗物选择`的识别范围。
|
||||
|
||||
### v.1.5版本(20250630)
|
||||
|
||||
- **新增功能**:
|
||||
1. 自动战斗失败原地`重试2次`,失败后再退出秘境重试。
|
||||
- **优化**:
|
||||
1. 优化`LOG`显示。
|
||||
2. 优化`完全没有树脂`情况弹窗提示处理。
|
||||
3. 优化删除拾取`黑名单`文件(0.47.0后不会乱触发了)。
|
||||
4. 优化各种`异常状态`的退出处理方法。
|
||||
5. 优化当有须臾树脂时,脆弱树脂不显示时的处理。
|
||||
|
||||
### v.1.6版本:20250702
|
||||
|
||||
- **优化**:
|
||||
1. 优化没找到地脉花领奖的超时退出处理。
|
||||
2. 优化树脂识别OCR区域。
|
||||
3. 优化LOG和代码写法和整理。
|
||||
|
||||
|
||||
|
||||
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_1.bmp
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_10.bmp
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_11.bmp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_12.bmp
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_13.bmp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_14.bmp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_15.bmp
Normal file
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_16.bmp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_17.bmp
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_18.bmp
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_2.bmp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_3.bmp
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 9.9 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_4.bmp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_5.bmp
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_6.bmp
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_7.bmp
Normal file
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 10 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_8.bmp
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 11 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/Artifacts/artifact_9.bmp
Normal file
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1018 B After Width: | Height: | Size: 1018 B |
BIN
archive/js/AutoStygianOnslaught/assets/condensed_resin_count.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/fragile_resin_count.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/moment_resin_count.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/one.png
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
BIN
archive/js/AutoStygianOnslaught/assets/original_resin_count.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
26
archive/js/AutoStygianOnslaught/assets/全自动幽境危战.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"info": {
|
||||
"name": "全自动幽境危战",
|
||||
"type": "collect",
|
||||
"author": "LCB-茶包",
|
||||
"version": "1.0",
|
||||
"description": "",
|
||||
"bgi_version": "0.44.8"
|
||||
},
|
||||
"positions": [
|
||||
{
|
||||
"id": 1,
|
||||
"x": -194.198,
|
||||
"y": 984.095,
|
||||
"move_mode": "walk",
|
||||
"type": "teleport"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"x": -194.25293,
|
||||
"y": 980.6616,
|
||||
"move_mode": "walk",
|
||||
"type": "target"
|
||||
}
|
||||
]
|
||||
}
|
||||
815
archive/js/AutoStygianOnslaught/main.js
Normal file
@@ -0,0 +1,815 @@
|
||||
(async function () {
|
||||
|
||||
let challengeNum = settings.challengeNum;//挑战次数
|
||||
if (challengeNum === undefined || challengeNum === ""){challengeNum = 15; }//挑战次数
|
||||
let challengeName = settings.challengeName;//挑战BOSS
|
||||
if (challengeName === undefined || challengeName === ""){throw new Error("挑战Boss未配置,请在JS配置中选择...")}//初始化处理
|
||||
let Startforward = settings.Startforward*1000 ? settings.Startforward*1000 : 1000;//开始战斗的前进时间
|
||||
var Fighttimeout = settings.timeout * 1000 ? settings.timeout * 1000 : 240000;//战斗超时时间,默认为240秒
|
||||
const ocrRegion1 = { x: 643, y: 58, width: 800, height: 800 }; // 上方挑战成功区域
|
||||
const ocrRegion2 = { x: 780, y: 406, width: 370, height: 135 }; // 中间挑战失败区域
|
||||
const ocrRo1 = RecognitionObject.ocr(ocrRegion1.x, ocrRegion1.y, ocrRegion1.width, ocrRegion1.height);//上方挑战成功区域OCR对象
|
||||
const ocrRo2 = RecognitionObject.ocr(ocrRegion2.x, ocrRegion2.y, ocrRegion2.width, ocrRegion2.height);//中间挑战失败区域OCR对象
|
||||
var Rewardsuse = settings.Rewardsuse ? settings.Rewardsuse : "1/2";//树脂使用类型,默认为1/2,即浓缩树脂和原粹树脂
|
||||
var resinTypes = Rewardsuse.split("/");
|
||||
var rewards = [];
|
||||
var onerewards, secendrewards, threendrewards, fourdrewards;
|
||||
for (var i = 0; i < resinTypes.length; i++) {
|
||||
var resinType = parseInt(resinTypes[i]);
|
||||
if (isNaN(resinType) || resinType < 1 || resinType > 4) {
|
||||
throw new Error("设定的树脂类型无效或缺失,请重新配置");
|
||||
}
|
||||
rewards.push(resinType);
|
||||
}
|
||||
const resinTypeMap = ["","使用1个浓缩树脂,获取2倍产出", "使用20个原粹树脂", "使用1个脆弱树脂,获取3倍产出", "使用1个须臾树脂,获取3倍产出"];//识别树脂领奖文字
|
||||
const golbalRewards = ["","浓缩树脂","原粹树脂","脆弱树脂","须臾树脂"]; // 对应四种树脂
|
||||
// 根据 rewards 数组长度,依次赋值给对应的变量
|
||||
if (rewards.length > 0) onerewards = golbalRewards[rewards[0]];
|
||||
if (rewards.length > 1) secendrewards = golbalRewards[rewards[1]];
|
||||
if (rewards.length > 2) threendrewards = golbalRewards[rewards[2]];
|
||||
if (rewards.length > 3) fourdrewards = golbalRewards[rewards[3]];
|
||||
const golbalRewardText = [onerewards, secendrewards, threendrewards, fourdrewards].filter(Boolean);//过滤树脂使用类型
|
||||
|
||||
var advanceNum = 0;//前进寻找地脉之花次数
|
||||
var verticalNum = 0;//重试寻找地脉之花次数
|
||||
var resinAgain = false;//是否重试标志
|
||||
|
||||
var Artifacts = settings.Artifacts ? settings.Artifacts : "保持圣遗物奖励不变";
|
||||
|
||||
//映射所有圣遗物对应需要识别的图片
|
||||
var artifactImageMap = {
|
||||
"长夜之誓 / 深廊终曲": "assets/Artifacts/artifact_1.bmp",
|
||||
"黑曜秘典 / 烬城勇者绘卷": "assets/Artifacts/artifact_2.bmp",
|
||||
"谐律异想断章 / 未竟的遐思": "assets/Artifacts/artifact_3.bmp",
|
||||
"回声之林夜话 / 昔时之歌": "assets/Artifacts/artifact_4.bmp",
|
||||
"逐影猎人 / 黄金剧团": "assets/Artifacts/artifact_5.bmp",
|
||||
"水仙之梦 / 花海甘露之光": "assets/Artifacts/artifact_6.bmp",
|
||||
"乐园遗落之花 / 沙上楼阁史话": "assets/Artifacts/artifact_7.bmp",
|
||||
"深林的记忆 / 饰金之梦": "assets/Artifacts/artifact_8.bmp",
|
||||
"来歆余响 / 辰砂往生录": "assets/Artifacts/artifact_9.bmp",
|
||||
"华馆梦醒形骸记 / 海染砗磲": "assets/Artifacts/artifact_10.bmp",
|
||||
"绝缘之旗印 / 追忆之注连": "assets/Artifacts/artifact_11.bmp",
|
||||
"昔日宗室之仪 / 染血的骑士道": "assets/Artifacts/artifact_12.bmp",
|
||||
"渡过烈火的贤人 / 炽烈的炎之魔女": "assets/Artifacts/artifact_13.bmp",
|
||||
"悠古的磐岩 / 逆飞的流星": "assets/Artifacts/artifact_14.bmp",
|
||||
"千岩牢固 / 苍白之火": "assets/Artifacts/artifact_15.bmp",
|
||||
"冰风迷途的勇士 / 沉沦之心": "assets/Artifacts/artifact_16.bmp",
|
||||
"翠绿之影 / 被怜爱的少女": "assets/Artifacts/artifact_17.bmp",
|
||||
"如雷的盛怒 / 平息鸣雷的尊者": "assets/Artifacts/artifact_18.bmp"
|
||||
};
|
||||
|
||||
//树脂识别图片
|
||||
var condensedResin = "assets/condensed_resin_count.png";
|
||||
var originalResin = "assets/original_resin_count.png";
|
||||
var fragileResin = "assets/fragile_resin_count.png";
|
||||
var momentResin = "assets/moment_resin_count.png";
|
||||
var oneResin = "assets/one.png";
|
||||
|
||||
//文字识别封装函数
|
||||
async function Textocr(wenzi="空参数",chaotime=10,clickocr=0,debugcode=0,x=0,y=0,w=1920,h=1080) {
|
||||
const startTime = new Date();
|
||||
for (let ii = 0; ii < 10; ii++)
|
||||
{
|
||||
// 获取一张截图
|
||||
let captureRegion = captureGameRegion();
|
||||
let res1
|
||||
// 对整个区域进行 OCR
|
||||
let resList = captureRegion.findMulti(RecognitionObject.ocr(x,y,w,h));
|
||||
//log.info("OCR 全区域识别结果数量 {len}", resList.count);
|
||||
for (let i = 0; i < resList.count; i++)
|
||||
{ // 遍历的是 C# 的 List 对象,所以要用 count,而不是 length
|
||||
let res = resList[i];
|
||||
res1=res.text
|
||||
if (res.text===wenzi) {
|
||||
log.info(`识别到 ·${res1}·`);
|
||||
if (debugcode===1){if (x===0 & y===0){log.info("全图代码位置:({x},{y},{h},{w})", res.x-10, res.y-10, res.width+10, res.Height+10);return result = { text: res.text, x: res.x, y: res.y, found: true }}}else{if (x===0 & y===0){log.info("文本OCR完成'{text}'", res.text);}}
|
||||
if (clickocr===1){await sleep(1000);await click(res.x, res.y);}else{}
|
||||
if (clickocr===2){await sleep(100);await keyPress("F");}else{}
|
||||
return result = { text: res.text, x: res.x, y: res.y, found: true }
|
||||
}
|
||||
if (debugcode===2 && !res.isEmpty()){
|
||||
// log.info("({x},{y},{h},{w})", res.x-10, res.y-10, res.width+10, res.Height+10);
|
||||
return result = { text: res.text, x: res.x, y: res.y, found: true }
|
||||
}
|
||||
}
|
||||
const NowTime = new Date();
|
||||
if (Math.abs(NowTime - startTime)>chaotime*1000){if (x===0 & y===0){log.info(`${chaotime}秒超时退出,"${wenzi}"未找到`);}return result = {found: false };}else{ii=8;if (x !== 861){if(debugcode!==3){await keyPress("VK_W");}};}
|
||||
await sleep(100);
|
||||
}
|
||||
}
|
||||
|
||||
// 图片识别封装函数
|
||||
async function imageRecognition(imagefilePath="空参数",timeout=10,afterBehavior=0,debugmodel=0,xa=0,ya=0,wa=1920,ha=1080) {
|
||||
const startTime = new Date();
|
||||
const Imagidentify = RecognitionObject.TemplateMatch(file.ReadImageMatSync(imagefilePath));
|
||||
for (let ii = 0; ii < 10; ii++) {
|
||||
captureRegion = captureGameRegion(); // 获取一张截图
|
||||
res = captureRegion.DeriveCrop(xa, ya, wa, ha).Find(Imagidentify);
|
||||
if (res.isEmpty()) {
|
||||
if (debugmodel===1 & xa===0 & ya===0){log.info("未识别页面元素")};
|
||||
} else {
|
||||
if (afterBehavior===1){if (xa===0 & ya===0){log.info("点击模式:开");}await sleep(1000);click(res.x+xa, res.y+ya);}else{if (debugmodel===1 & xa===0 & ya===0){log.info("点击模式:关")}}
|
||||
if (afterBehavior===2){if (xa===0 & ya===0){log.info("F模式:开");}await sleep(1000);keyPress("F");}else{if (debugmodel===1 & xa===0 & ya===0){log.info("F模式:关")}}
|
||||
if (debugmodel===1 & xa===0 & ya===0){log.info("全图代码位置:({x},{y},{h},{w})", res.x+xa, res.y+ya, res.width, res.Height);}else{ log.info("识别到页面元素");}
|
||||
|
||||
return result = { x: res.x+xa, y: res.y+ya, w:res.width,h:res.Height,found: true }
|
||||
}
|
||||
const NowTime = new Date();
|
||||
if ((NowTime - startTime)>timeout*1000){if (debugmodel===1 & xa===0 & ya===0){log.info(`${timeout}秒超时退出,未找到图片`);}return result = {found: false };}else{ii=8}
|
||||
await sleep(200);
|
||||
}
|
||||
await sleep(1200);
|
||||
}
|
||||
|
||||
//树脂数量获取函数
|
||||
async function getRemainResinStatus() {
|
||||
var condensedResinCount = 0; // 浓缩树脂
|
||||
var originalResinCount = 0; // 原粹树脂
|
||||
var fragileResinCount = 0; // 脆弱树脂
|
||||
var momentResinCount = 0; // 须臾树脂
|
||||
|
||||
var originalResinCountRa = await imageRecognition(originalResin,0.3, 0, 0,1500,0,200,90);
|
||||
if (originalResinCountRa.found) {
|
||||
// await moveMouseTo(originalResinCountRa.x,originalResinCountRa.y);
|
||||
let countArea = await Textocr("",1, 0, 2,originalResinCountRa.x+originalResinCountRa.w,originalResinCountRa.y,originalResinCountRa.w*3,originalResinCountRa.h);//
|
||||
if (countArea.found){
|
||||
log.info("原粹树脂识别数量结果:"+ countArea.text);
|
||||
let match = countArea.text.match(/(\d+)\s*[/1]\s*(2|20|200)/);
|
||||
if (match) {
|
||||
originalResinCount = match[1];
|
||||
// log.info("脆弱树脂识别数量提取:"+ originalResinCount);
|
||||
}
|
||||
else{
|
||||
log.info("原粹树脂识别数量提取失败");
|
||||
}
|
||||
}
|
||||
else{
|
||||
log.info("原粹树脂识别数量结果::无");
|
||||
}
|
||||
|
||||
} else {
|
||||
log.info("未检测到原粹树脂图标");
|
||||
}
|
||||
|
||||
// 浓缩树脂
|
||||
var condensedResinCountRa = await imageRecognition(condensedResin,0.1, 0, 0,960,0,800,100);
|
||||
if (condensedResinCountRa.found) {
|
||||
// await moveMouseTo(condensedResinCountRa.x,condensedResinCountRa.y);
|
||||
let countArea = await Textocr("",0.5, 0, 2,condensedResinCountRa.x+condensedResinCountRa.w,condensedResinCountRa.y,condensedResinCountRa.w,condensedResinCountRa.h);//
|
||||
if (countArea.found){
|
||||
// log.info("浓缩树脂识别数量结果: "+ countArea.text);
|
||||
condensedResinCount = countArea.text
|
||||
}
|
||||
else{
|
||||
condensedResinCount = "1";
|
||||
log.info("浓缩树脂识别数量结果:1");//不知道为什么,1无法识别,0是不显示图标的,所以就当时1了,反正也没啥影响
|
||||
}
|
||||
|
||||
} else {
|
||||
log.info("未检测到浓缩树脂图标");
|
||||
}
|
||||
|
||||
var momentResinCountRa = await imageRecognition(momentResin,0.1, 0, 1,1170,0,300,100);
|
||||
if (momentResinCountRa.found) {
|
||||
// await moveMouseTo(momentResinCountRa.x,momentResinCountRa.y);
|
||||
let countArea = await Textocr("",0.5, 0, 2,momentResinCountRa.x+momentResinCountRa.w+20,momentResinCountRa.y-15,60,40);//
|
||||
if (countArea.found){
|
||||
//log.info("须臾树脂识别数量结果:"+ countArea.text);
|
||||
momentResinCount = countArea.text
|
||||
}
|
||||
else{
|
||||
var oneRa = await imageRecognition(oneResin,0.1, 0, 1,momentResinCountRa.x+momentResinCountRa.w+20,momentResinCountRa.y-15,60,40);
|
||||
if (oneRa.found){
|
||||
momentResinCount = "1";
|
||||
}else{
|
||||
log.info("须臾树脂强制为 1 ");
|
||||
momentResinCount = "1";
|
||||
}
|
||||
}
|
||||
log.info("脆弱树脂强制为 1 ");//须臾树脂出现,脆弱树脂不显示,强制设置为1,情况非常少,大不了打多一次
|
||||
fragileResinCount = "1";
|
||||
}else
|
||||
{
|
||||
var fragileResinCountRa = await imageRecognition(fragileResin,0.1, 0, 1,1170,0,300,100);
|
||||
if (fragileResinCountRa.found) {
|
||||
// await moveMouseTo(fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15);
|
||||
let countArea = await Textocr("",0.5, 0, 2,fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15,60,40);//
|
||||
if (countArea.found){
|
||||
// log.info("脆弱树脂识别数量结果:"+ countArea.text);
|
||||
fragileResinCount = countArea.text
|
||||
}
|
||||
else{
|
||||
var oneRa = await imageRecognition(oneResin,0.1, 0, 1,fragileResinCountRa.x+fragileResinCountRa.w+20,fragileResinCountRa.y-15,60,40);
|
||||
if (oneRa.found){
|
||||
fragileResinCount = "1";
|
||||
}else{
|
||||
fragileResinCount = "1";
|
||||
log.info("脆弱树脂识别强制为 1 ");//有图标说明至少为1
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
log.info("未检测到脆弱树脂图标");
|
||||
}
|
||||
}
|
||||
|
||||
log.info("树脂状态:浓缩{0} 原粹{1} 脆弱{2} 须臾{3}", condensedResinCount, originalResinCount, fragileResinCount,momentResinCount)
|
||||
return {condensedResinCount,originalResinCount,fragileResinCount,momentResinCount}
|
||||
}
|
||||
|
||||
//征讨之花领奖寻找函数
|
||||
const autoNavigateToReward = async () => {
|
||||
// 定义识别对象
|
||||
const boxIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/box.png"));
|
||||
|
||||
advanceNum = 0;//前进次数
|
||||
//调整为俯视视野
|
||||
middleButtonClick();
|
||||
await sleep(800);
|
||||
moveMouseBy(0, 1030);
|
||||
await sleep(400);
|
||||
moveMouseBy(0, 920);
|
||||
await sleep(400);
|
||||
moveMouseBy(0, 710);
|
||||
log.info("开始领奖");
|
||||
|
||||
while (true) {
|
||||
// 1. 优先检查是否已到达领奖点
|
||||
let captureRegion = captureGameRegion();
|
||||
let rewardTextArea = captureRegion.DeriveCrop(1210, 515, 200, 50);
|
||||
let rewardResult = rewardTextArea.find(RecognitionObject.ocrThis);
|
||||
// 检测到特点文字则结束!!!
|
||||
if (rewardResult.text == "激活地脉之花") {
|
||||
log.info("已到达领奖点,检测到文字: " + rewardResult.text);
|
||||
return true;
|
||||
}
|
||||
else if(advanceNum > 40){
|
||||
await getOut();
|
||||
await await genshin.returnMainUi();
|
||||
throw new Error('前进时间超时');
|
||||
}
|
||||
// 2. 未到达领奖点,则调整视野
|
||||
for(let i = 0; i < 100; i++){
|
||||
captureRegion = captureGameRegion();
|
||||
let iconRes = captureRegion.Find(boxIconRo);
|
||||
let climbTextArea = captureRegion.DeriveCrop(1808, 1030, 25, 25);
|
||||
let climbResult = climbTextArea.find(RecognitionObject.ocrThis);
|
||||
// 检查是否处于攀爬状态
|
||||
if (climbResult.isEmpty()){
|
||||
let SHU = Textocr("地脉之花", 0.3, 1, 0, 840,225, 230, 125);
|
||||
if (SHU.found){
|
||||
return true;
|
||||
}
|
||||
log.info("检侧到页面错误,尝试脱离");
|
||||
await keyDown("w");
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(500);
|
||||
await keyDown("w");
|
||||
await sleep(5000);
|
||||
await keyUp("w");
|
||||
}
|
||||
|
||||
if (iconRes.x >= 920 && iconRes.x <= 980 && iconRes.y <= 540) {
|
||||
advanceNum++;
|
||||
log.info(`视野已调正,前进第${advanceNum}次`);
|
||||
break;
|
||||
} else {
|
||||
// 小幅度调整
|
||||
if(iconRes.y >= 520) moveMouseBy(0, 920);
|
||||
let adjustAmount = iconRes.x < 920 ? -20 : 20;
|
||||
let distanceToCenter = Math.abs(iconRes.x - 920); // 计算与920的距离
|
||||
let scaleFactor = Math.max(1, Math.floor(distanceToCenter / 50)); // 根据距离缩放,最小为1
|
||||
let adjustAmount2 = iconRes.y < 540 ? scaleFactor : 10;
|
||||
moveMouseBy(adjustAmount * adjustAmount2, 0);
|
||||
await sleep(100);
|
||||
}
|
||||
|
||||
if(i > 97) {
|
||||
if (verticalNum >= 2) {
|
||||
verticalNum = 0;
|
||||
await getOut();
|
||||
await await genshin.returnMainUi();
|
||||
throw new Error('领取超时');
|
||||
}
|
||||
log.info("领取超时,重新尝试1次");
|
||||
await sleep(1000);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// 3. 前进一小步
|
||||
keyDown("w");
|
||||
await sleep(600);
|
||||
keyUp("w");
|
||||
await sleep(100); // 等待角色移动稳定
|
||||
let earthlyVeins = await Textocr("地脉之花", 0.1, 0, 0, 840,225, 230, 125)
|
||||
if (earthlyVeins.found) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//向前寻找钥匙函数
|
||||
async function readyFightIn(){
|
||||
var startTime = new Date();
|
||||
await sleep(500);
|
||||
var NowTime = new Date();
|
||||
keyDown("w");
|
||||
while ((NowTime - startTime)<15*1000){
|
||||
const result = await Textocr("战斗准备",0,0,3,1198,492,150,80);
|
||||
const result2 = await Textocr("开始挑战",0,0,3,1554,970,360, 105);
|
||||
if (result.found || result2.found) {
|
||||
keyPress("F");keyPress("F");keyPress("F");keyPress("F");
|
||||
keyUp("w");
|
||||
return true;
|
||||
}
|
||||
keyDown("w");
|
||||
keyPress("F");
|
||||
NowTime = new Date();
|
||||
}
|
||||
await keyUp("w");
|
||||
return false
|
||||
}
|
||||
|
||||
//异步检测战斗执行函数,来自D捣蛋&秋云佬的全自动地脉花的代码
|
||||
async function autoFight(timeout) {
|
||||
const cts = new CancellationTokenSource();
|
||||
log.info("开始战斗");
|
||||
dispatcher.RunTask(new SoloTask("AutoFight"), cts);
|
||||
let fightResult = await recognizeTextInRegion(timeout);
|
||||
logFightResult = fightResult ? "成功" : "失败";
|
||||
log.info(`战斗结束,战斗结果:${logFightResult}`);
|
||||
cts.cancel();
|
||||
return fightResult;
|
||||
}
|
||||
|
||||
//异步检测战斗结果函数
|
||||
async function recognizeTextInRegion(timeout) {
|
||||
return new Promise((resolve, reject) => {
|
||||
(async () => {
|
||||
try {
|
||||
let startTime = Date.now();
|
||||
const successKeywords = ["挑战完成","战斗完成"];
|
||||
const failureKeywords = ["战斗失败","挑战失败"];
|
||||
|
||||
// 循环检测直到超时
|
||||
while (Date.now() - startTime < timeout) {
|
||||
try {
|
||||
let captureRegion = captureGameRegion();
|
||||
let result = captureRegion.find(ocrRo1);
|
||||
let result2 = captureRegion.find(ocrRo2);
|
||||
let text = result.text;
|
||||
let text2 = result2.text;
|
||||
|
||||
// 检查成功关键词
|
||||
for (let keyword of successKeywords) {
|
||||
if (text.includes(keyword)) {
|
||||
log.info("检测到战斗成功关键词: {0}", keyword);
|
||||
resolve(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// 检查失败关键词--
|
||||
for (let keyword of failureKeywords) {
|
||||
if (text2.includes(keyword)) {
|
||||
log.warn("检测到战斗失败关键词: {0}", keyword);
|
||||
resolve(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
log.error("OCR过程中出错: {0}", error);
|
||||
}
|
||||
|
||||
await sleep(1000); // 检查间隔
|
||||
}
|
||||
|
||||
log.warn("在超时时间内未检测到战斗结果");
|
||||
resolve(false);
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
|
||||
//圣遗物奖励更换函数
|
||||
async function selectionHolyRelics() {
|
||||
|
||||
let artifactImagePath = artifactImageMap[Artifacts];
|
||||
// 检查artifactImagePath是否存在
|
||||
if (!artifactImagePath) {
|
||||
throw new Error(`未找到与Artifacts值'${Artifacts}'对应的图片路径`);
|
||||
}
|
||||
let modifiedPath = artifactImagePath.slice(0, -4);
|
||||
let newImagePath = modifiedPath + "in.bmp";
|
||||
|
||||
await sleep(500);
|
||||
await click(116,980) // 领取奖励切换按钮
|
||||
await sleep(100);
|
||||
await click(116,980) // 领取奖励切换按钮
|
||||
await sleep(100);
|
||||
|
||||
let rewardSettings = await Textocr("奖励设置",15,0,0,882,34,161,52);//这个时候有人申请进入世界会遮住,真是尴尬啊,不过不影响大局。
|
||||
if (!rewardSettings.found) {await genshin.returnMainUi();return false;}
|
||||
await click(1642,159);
|
||||
await sleep(100);
|
||||
await click(1642,159);
|
||||
await sleep(100);
|
||||
|
||||
let YOffset = 0; // Y轴偏移量,根据需要调整
|
||||
|
||||
//滚轮预操作
|
||||
await moveMouseTo(1642,159);
|
||||
await sleep(100);
|
||||
await leftButtonDown();
|
||||
await sleep(100);
|
||||
await moveMouseTo(1642,155);
|
||||
|
||||
const maxRetries = 9; // 最大重试次数
|
||||
let retries = 0; // 当前重试次数
|
||||
while (retries < maxRetries) {
|
||||
let result1 = await imageRecognition(newImagePath,1, 0, 0,1166,141,210,857);//
|
||||
if (result1.found) {
|
||||
await leftButtonUp();
|
||||
await sleep(500);
|
||||
await click(result.x-500,result.y);
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
return true
|
||||
}
|
||||
retries++; // 重试次数加1
|
||||
//滚轮操作
|
||||
YOffset += 100;
|
||||
if (retries === maxRetries || retries+YOffset > 1080) {
|
||||
await leftButtonUp();
|
||||
await sleep(100);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await genshin.returnMainUi();
|
||||
return false;
|
||||
}
|
||||
await moveMouseTo(1642,155+YOffset);
|
||||
await sleep(500);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 领取奖励函数
|
||||
async function claimRewards() {
|
||||
// log.info(`尝试领取奖励,优先${onerewards}'`);
|
||||
let SHUN01 = await Textocr("激活地脉之花",0.6,2,0,1188,358,200,400);
|
||||
let SHUN02 = await Textocr("地脉之花", 0.2, 1, 0, 840,225, 230, 125);
|
||||
if (SHUN01.found || SHUN02.found) {
|
||||
log.info("找到地脉之花,开始领取奖励...");
|
||||
}
|
||||
else
|
||||
{
|
||||
log.warn("未找到地脉之花,尝试向前寻找...")
|
||||
await keyDown("W");await sleep(300);await keyUp("W");
|
||||
await keyPress("F");
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
await sleep(300);
|
||||
|
||||
for (let j = 0;j < 2;j++) {
|
||||
|
||||
for (let i = 0;i < rewards.length;i++) {
|
||||
let SHU = await Textocr(resinTypeMap[rewards[i]],0.3,0,0,510,380,640,600);
|
||||
if (SHU.found){
|
||||
if (resinTypeMap[rewards[i]] == "使用20个原粹树脂")
|
||||
{
|
||||
let BUC = await Textocr("补充",0.2,0,0,1150,440,210,130);
|
||||
if (BUC.found) {continue;}
|
||||
}
|
||||
await sleep(100);
|
||||
await click(SHU.x+550,SHU.y)
|
||||
await sleep(100);
|
||||
await click(SHU.x+550,SHU.y)
|
||||
await sleep(300);
|
||||
log.info(`${resinTypeMap[rewards[i]]} 获取奖励...`);
|
||||
|
||||
await Textocr("锁定辅助",10,0,0,1768,0,115,90);
|
||||
let { condensedResinCount, originalResinCount, fragileResinCount , momentResinCount} = await getRemainResinStatus();
|
||||
let shouldExit = true;
|
||||
|
||||
if (resinTypes.includes("1"))
|
||||
{
|
||||
shouldExit &= (parseInt(condensedResinCount, 10) == 0);
|
||||
}
|
||||
if (resinTypes.includes("2"))
|
||||
{
|
||||
shouldExit &= (parseInt(originalResinCount, 10) < 20);
|
||||
}
|
||||
if (resinTypes.includes("3"))
|
||||
{
|
||||
shouldExit &= (parseInt(fragileResinCount, 10) == 0);
|
||||
}
|
||||
if (resinTypes.includes("4"))
|
||||
{
|
||||
shouldExit &= (parseInt(momentResinCount, 10) == 0);
|
||||
}
|
||||
|
||||
if (shouldExit)
|
||||
{
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
return false;
|
||||
}
|
||||
log.warn("还有树脂...");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
await sleep(500);
|
||||
}
|
||||
log.warn("未找到树脂,结束领取奖励...");
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 进入秘境入口函数
|
||||
async function VeinEntrance() {
|
||||
for (let i = 0;i < 2;i++) {
|
||||
let JIECHU = await Textocr("F",2,2,0,1098,519,35,32);
|
||||
if (JIECHU.found)
|
||||
{
|
||||
await keyPress("F");
|
||||
await keyPress("F");
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(i == 1){
|
||||
log.warn("没找入口,尝试强制转圈寻找...");
|
||||
await keyDown("W");keyPress("F");await sleep(500);keyPress("F");await keyUp("W");
|
||||
await keyDown("D");keyPress("F");await sleep(500);keyPress("F");await keyUp("D");
|
||||
await keyDown("S");keyPress("F");await sleep(500);keyPress("F");await keyUp("S");
|
||||
await keyDown("A");keyPress("F");await sleep(500);keyPress("F");await keyUp("A");
|
||||
await keyDown("W");keyPress("F");await sleep(500);keyPress("F");await keyUp("W");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//秘境内退出函数
|
||||
async function getOut() {
|
||||
|
||||
for (let i = 0;i < 2;i++){
|
||||
log.info("尝试退出挑战...");
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
let exitChallenge0 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
let exitChallenge1 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
let exitChallenge2 = await Textocr("退出挑战",0.5,1,0,866,719,274,86);
|
||||
if (!exitChallenge2.found){break}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
log.warn("自动幽境危战版本:v1.6");
|
||||
log.warn("请保证队伍战斗实力,战斗失败或执行错误,会重试两次...");
|
||||
log.warn("使用前请在 <<幽境危战>> 中配置好战斗队伍...");
|
||||
log.info("使用树脂类型数量:{0} ", rewards.length)
|
||||
log.info(`使用树脂顺序:${golbalRewardText.join(" ->")}`);
|
||||
log.info("圣遗物奖励选择:{0} ", Artifacts)
|
||||
|
||||
//重试两次
|
||||
for (let j = 0;j < 2;j++) {
|
||||
|
||||
resinAgain = false; //重试标志
|
||||
|
||||
try{
|
||||
//1.导航进入页面
|
||||
await genshin.returnMainUi();
|
||||
await pathingScript.runFile(`assets/全自动幽境危战.json`);
|
||||
await VeinEntrance();
|
||||
|
||||
//2.难度确认和选择
|
||||
let intoAction = await Textocr("单人挑战",10,0,0,1554,970,360, 105);
|
||||
if (!intoAction.found){
|
||||
await genshin.returnMainUi();
|
||||
throw new Error("未进入挑战页面,停止执行...")
|
||||
}
|
||||
let adjustmentType = await Textocr("至危挑战", 1, 0, 0,797,144,223,84);
|
||||
if (adjustmentType.found) {
|
||||
log.warn("找到至危挑战,尝试切换...")
|
||||
await sleep(500);
|
||||
await click(adjustmentType.x,adjustmentType.y)
|
||||
await sleep(500);
|
||||
}
|
||||
let hardMode = await Textocr("困难", 0.3, 0, 0,1049,157,72,47);
|
||||
let hardMode2 = await Textocr("困难", 0.2, 0, 0,805,156,83,47);
|
||||
if (hardMode.found || hardMode2.found) {
|
||||
log.warn("确认困难模式...")
|
||||
}
|
||||
else{
|
||||
log.warn("未找到困难模式,尝试切换...")
|
||||
await sleep(500);
|
||||
await click(1096,186);
|
||||
await sleep(500);
|
||||
await click(1093,399);
|
||||
}
|
||||
|
||||
//3.圣遗物奖励选择
|
||||
if (Artifacts != "保持圣遗物奖励不变"){
|
||||
let artifact = await imageRecognition(artifactImageMap[Artifacts],0.2,0,0,186,972,71,71);
|
||||
if (!artifact.found) {
|
||||
log.warn("圣遗物奖励和设定不一致,尝试切换...")
|
||||
if (!await selectionHolyRelics()){await genshin.returnMainUi();throw new Error("圣遗物奖励设置错误,停止执行...")}
|
||||
}
|
||||
else{
|
||||
log.warn("圣遗物奖励一致,无需切换 {0} ", Artifacts)
|
||||
}
|
||||
}
|
||||
|
||||
//4.进入秘境
|
||||
await sleep(500);
|
||||
await click(intoAction.x,intoAction.y)
|
||||
await sleep(1000);
|
||||
await click(intoAction.x,intoAction.y)
|
||||
let enter = await Textocr("Enter",15,0,0,18,990,156,71,71);
|
||||
if (!enter.found){
|
||||
await genshin.returnMainUi();
|
||||
throw new Error("未进入秘境,停止执行...")
|
||||
}
|
||||
|
||||
//5.向前走进入挑战
|
||||
if (!(await readyFightIn())){
|
||||
await getOut();
|
||||
await genshin.returnMainUi();
|
||||
throw new Error("未进入准备战斗,停止执行...")
|
||||
}
|
||||
await sleep(1000);
|
||||
|
||||
//6.选择挑战boss
|
||||
log.info("选择挑战Boss:'{0}' 挑战次数:'{1}'", challengeName,challengeNum)
|
||||
log.info(`期间树脂耗尽会自动退出秘境...`);
|
||||
const clickCoordinates = [ { x: 207, y: 349 }, { x: 239, y: 531 }, { x: 227, y: 713 } ]; // Boss坐标1~3
|
||||
await click(clickCoordinates[challengeName - 1].x, clickCoordinates[challengeName - 1].y);
|
||||
|
||||
//6.5选择队员-苏婷老师-待写
|
||||
//log.warn("队伍选择功能等伟大的苏苏老师考完试做...")
|
||||
|
||||
//7.开始挑战
|
||||
await Textocr("开始挑战",1,1,0,1554,970,360, 105);
|
||||
var resinexhaustion = false; // 条件1:树脂耗尽
|
||||
|
||||
//8.战斗循环
|
||||
for (let i = 0;i < challengeNum; i++) {
|
||||
|
||||
log.info("进入战斗环境,开始第 {0} 次战斗", i+1)
|
||||
|
||||
//8.1自动战斗
|
||||
for (let fightCount = 0; fightCount < 3; fightCount++) {
|
||||
|
||||
let battleBegins = await Textocr("战斗开始",20,0,0,877,235,164,50);
|
||||
if (!battleBegins.found){
|
||||
await getOut();
|
||||
throw new Error("未进入战斗环境,停止执行...")
|
||||
}
|
||||
|
||||
try {
|
||||
await keyDown("w");
|
||||
await sleep(Startforward);
|
||||
await keyUp("w");
|
||||
|
||||
if(!await autoFight(Fighttimeout)){
|
||||
|
||||
resinAgain = true;
|
||||
|
||||
if (fightCount >= 2){
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
let Again = await Textocr("再次挑战",10,1,0,1059,920,177,65);
|
||||
if (!Again.found)break;
|
||||
await sleep(1000);
|
||||
log.warn("战斗失败,第 {0} 次重试...", fightCount+1)
|
||||
throw new Error(`战斗失败,第 ${fightCount+1} 次重试...`)
|
||||
}
|
||||
|
||||
}else
|
||||
{
|
||||
resinAgain= false;
|
||||
break;
|
||||
}
|
||||
} catch (error) {
|
||||
if (fightCount < 2)continue;
|
||||
else break;
|
||||
}
|
||||
}
|
||||
|
||||
//8.2领取奖励
|
||||
if (resinAgain != true) {
|
||||
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
|
||||
while((await Textocr("Enter",5,0,0,18,990,156,80).found) == false)
|
||||
{
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
log.info("幽境危战:第 {0} 次领奖...", i+1)
|
||||
|
||||
if(!(await autoNavigateToReward())){verticalNum++;continue;}
|
||||
|
||||
await sleep(1000);
|
||||
|
||||
if (!(await claimRewards())) {
|
||||
resinexhaustion = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (challengeNum != i+1)
|
||||
{
|
||||
let challengeAgian = await Textocr("再次挑战",10,0,0,1094,958,200,70);
|
||||
if (!challengeAgian.found){
|
||||
await getOut();
|
||||
throw new Error("未找到·再次挑战·按键,停止执行...")
|
||||
}
|
||||
for (let retry = 0; retry < 5 && challengeAgian.found; retry++) {
|
||||
challengeAgian = await Textocr("再次挑战",0.2,0,0,1094,958,200,70);
|
||||
if (challengeAgian.found){
|
||||
await sleep(500);
|
||||
await click(challengeAgian.x, challengeAgian.y);
|
||||
await sleep(1000);
|
||||
}
|
||||
await sleep(200);
|
||||
}
|
||||
let resinTips = await Textocr("提示",2,0,0,840,225, 230, 125);
|
||||
if (resinTips.found){
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(200);
|
||||
log.info(`树脂提示已耗尽,...`);
|
||||
resinexhaustion = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//8.3判断继续或退出
|
||||
if (challengeNum == i+1 || resinexhaustion == true || resinAgain == true ){
|
||||
log.info(resinAgain ? "累计战斗失败 3 次,退出秘境..."
|
||||
: (challengeNum == i+1) ? `完成 ${i+1}/${challengeNum} 次战斗,退出挑战...`: `树脂耗尽,退出挑战...`);
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
|
||||
var exitTimeout = 0;
|
||||
while(exitTimeout < 20) {
|
||||
let exitChallenge = await Textocr("退出挑战",0.3,0,0,866,719,274,86);
|
||||
if (exitChallenge.found) {
|
||||
await sleep(1000);
|
||||
await click(exitChallenge.x, exitChallenge.y);
|
||||
await sleep(1000);
|
||||
break;
|
||||
}
|
||||
let exitChallenge2 = await Textocr("退出挑战",0.3,1,0,866,719,274,86);
|
||||
log.info("尝试退出挑战...");
|
||||
await sleep(1000);
|
||||
await keyPress("VK_ESCAPE");
|
||||
await sleep(1000);
|
||||
exitTimeout++;
|
||||
}
|
||||
await genshin.returnMainUi();
|
||||
if (resinAgain == true){throw new Error("执行重试错误...")}
|
||||
return true;
|
||||
}
|
||||
|
||||
await sleep(500);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
//9.执行错误,重试处理
|
||||
log.error(`执行过程中发生错误:${error.message}`);
|
||||
resinAgain = true;
|
||||
await genshin.returnMainUi();
|
||||
continue;
|
||||
}finally{
|
||||
//10.结束脚本
|
||||
await genshin.returnMainUi();
|
||||
if (resinAgain == false) log.info(`Auto自动幽境危战结束...`);
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
||||
18
archive/js/AutoStygianOnslaught/manifest.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "自动幽境危战",
|
||||
"version": "1.6",
|
||||
"tags": [
|
||||
"幽境危战"
|
||||
],
|
||||
"bgi_version": "0.44.8",
|
||||
"description": "请先配置好秘境内的队伍,幽境危战战斗失败或执行错误会重试一次,请保证队伍实力",
|
||||
"authors": [
|
||||
{
|
||||
"name": "LCB-茶包",
|
||||
"links": "https://github.com/kaedelcb"
|
||||
}
|
||||
],
|
||||
"settings_ui": "settings.json",
|
||||
"main": "main.js"
|
||||
}
|
||||
58
archive/js/AutoStygianOnslaught/settings.json
Normal file
@@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"name": "Artifacts",
|
||||
"type": "select",
|
||||
"label": "圣遗物奖励,默认不修改圣遗物奖励",
|
||||
"options": [
|
||||
"保持圣遗物奖励不变",
|
||||
"长夜之誓 / 深廊终曲",
|
||||
"黑曜秘典 / 烬城勇者绘卷",
|
||||
"谐律异想断章 / 未竟的遐思" ,
|
||||
"回声之林夜话 / 昔时之歌" ,
|
||||
"逐影猎人 / 黄金剧团" ,
|
||||
"水仙之梦 / 花海甘露之光" ,
|
||||
"乐园遗落之花 / 沙上楼阁史话" ,
|
||||
"深林的记忆 / 饰金之梦" ,
|
||||
"来歆余响 / 辰砂往生录" ,
|
||||
"华馆梦醒形骸记 / 海染砗磲" ,
|
||||
"绝缘之旗印 / 追忆之注连" ,
|
||||
"昔日宗室之仪 / 染血的骑士道" ,
|
||||
"渡过烈火的贤人 / 炽烈的炎之魔女" ,
|
||||
"悠古的磐岩 / 逆飞的流星",
|
||||
"千岩牢固 / 苍白之火" ,
|
||||
"冰风迷途的勇士 / 沉沦之心" ,
|
||||
"翠绿之影 / 被怜爱的少女" ,
|
||||
"如雷的盛怒 / 平息鸣雷的尊者"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "challengeName",
|
||||
"type": "select",
|
||||
"label": "必填:从上往下(1~3),选择第几个Boss挑战关卡",
|
||||
"options": [
|
||||
"1",
|
||||
"2",
|
||||
"3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "challengeNum",
|
||||
"type": "input-text",
|
||||
"label": "挑战次数,默认15次,期间树脂耗尽会自动结束"
|
||||
},
|
||||
{
|
||||
"name": "Rewardsuse",
|
||||
"type": "input-text",
|
||||
"label": "树脂顺序,1=浓缩树脂/2=原粹树脂/3=脆弱树脂/4=须臾树脂\n用`/`隔开,填写对应的树脂数字即可,默认:1/2\n表示先使用浓缩树脂,再使用原粹树脂,不填的不使用"
|
||||
},
|
||||
{
|
||||
"name": "Fighttimeout",
|
||||
"type": "input-text",
|
||||
"label": "最长战斗超时时间,单位秒,默认240秒"
|
||||
},
|
||||
{
|
||||
"name": "Startforward",
|
||||
"type": "input-text",
|
||||
"label": "开始战斗后,向前移动的时间,默认1秒(注意单位:秒)"
|
||||
}
|
||||
]
|
||||