Compare commits

...

1828 Commits

Author SHA1 Message Date
凌莞~(=^▽^=)
d2608472d8
fix: total_point null (#185) 2025-10-25 03:46:05 +08:00
Menci
34aae0c87a
[F] Player name validation (#186) 2025-10-21 03:46:43 +09:00
Clansty
69bd35a579
[O] Change tip 2025-10-11 04:05:56 +08:00
Menci
3e6c0b4159
feat: user management APIs (#184) 2025-10-07 13:21:01 -07:00
Menci
a33ec8b11c
feat: crop pfp to at most 1024px (#183) 2025-10-07 13:20:49 -07:00
Azalea
dd03ca38a1 [F] Fix memory leak 2025-10-07 03:40:49 +08:00
Menci
1cac5e451a
refactor: user registrar (#182) 2025-10-06 12:32:52 -07:00
Azalea
010d4592e4 hot fix 2025-10-07 00:30:48 +08:00
Menci
b0d0f8ef7d
feat: some data management APIs (#176) 2025-10-06 09:27:39 -07:00
Raymond
967d311ee4
chusan x-v a001 (#180)
Co-authored-by: asterisk727 <59166650+asterisk727@users.noreply.github.com>
2025-10-04 10:59:02 -07:00
crxmsxn
d5b777d720
fix: mobile styling for favorites (#181) 2025-10-04 10:57:31 -07:00
Raymond
2ab2666ad0
Feat: Favorites (for all supported games) (#174) 2025-09-29 22:56:26 -07:00
alexay7
4971f2be78
[+] Add support for geki cm and fix chusan cm implementation (#175) 2025-09-29 22:47:31 -07:00
Menci
b0a49d6626
[+] Add APIs (#177) 2025-09-29 21:54:58 -07:00
凌莞~(=^▽^=)
d830854eaa
fix: X-Verse Username (#179) 2025-09-29 22:35:56 -04:00
凌莞~(=^▽^=)
68820d5a86
chore: Bump versions 2025-09-13 21:49:46 +08:00
Raymond
8b079bc40b
fix: nvm looks like shit 2025-09-12 11:34:25 -04:00
Raymond
b0dd9b845f
chore: bump versions 2025-09-12 11:33:23 -04:00
Azalea
b3d0670e1d [F] FUCK JS 2025-09-11 09:51:14 +09:00
Clansty
e4734924f3
[O] Change Migrated display 2025-08-26 20:08:13 +08:00
Raymond
6ca419dd5b
fix: un-revert prefectures :BocchiSobSmile: (#173)
Co-authored-by: alexay7 <43906716+alexay7@users.noreply.github.com>
2025-08-22 05:24:48 -07:00
Raymond
fc3f2171ee
revert: prefectures (temporary) 2025-08-22 06:02:22 -04:00
alexay7
3d95a84739
feat: Add prefecture modification support (#170) 2025-08-21 16:19:25 -04:00
crxmsxn
15412911a9
fix: batch manual bugfixes (#168) 2025-08-14 12:32:55 -04:00
Raymond
9dc7a790cc
Session Token Revitalization (#167) 2025-08-13 05:15:16 -04:00
Keeboy99
d0b67c37f6
fix: 🚑 fix ongeki re:fresh support by @Keeboy99 2025-08-11 23:51:49 -04:00
Clansty
f6aa7d1fe3
[+] register notice 2025-08-07 17:52:31 +08:00
Clansty
2dc53cfbd7
[+] Migrate button 2025-08-07 17:52:31 +08:00
Raymond
db43e18b16
fix: 🚑 increase expiration time
this is a temporary fix until i implement token revitalization where i might turn it back down to 7 days
2025-08-04 07:03:37 -04:00
1a54527428
[+] Gradle packageThin task for separated jar and libs 2025-08-03 08:22:09 -04:00
Azalea
73026911da [F] Properly fix v41 2025-08-01 15:32:05 +09:00
Azalea
86558cd07e [+] Longer log retention 2025-08-01 00:49:43 +09:00
Azalea
218d2788e8 [F] Fix migration collision 2025-08-01 00:22:21 +09:00
Azalea
0a37c2a854
Delete src/main/resources/db/40/V1000_41__add_aquanet_user_fedy.sql 2025-07-31 11:19:14 -04:00
asterisk727
7eda890473 feat: cn translation for password reset 2025-07-31 17:56:47 +09:00
Raymond
2431bd09af fix: clear code after used 2025-07-31 17:56:47 +09:00
Raymond
7b21a38e17 fix: typo in error 2025-07-31 17:56:47 +09:00
Raymond
bf51f48961 fix: clear sessions upon password reset 2025-07-31 17:56:47 +09:00
Raymond
92868201a3 fix: typos, sql, some strings were odd 2025-07-31 17:56:47 +09:00
asterisk727
c01c40fe45 fix: bug fixes to password reset (INCOMPLETE) 2025-07-31 17:56:47 +09:00
Raymond
39ed8af840 feat: swap auId in JWT for individual token
note: has not been tested to ensure there are no collisions, todo
2025-07-31 17:56:47 +09:00
asterisk727
82adf5c138 feature: password reset 2025-07-31 17:56:47 +09:00
凌莞~(=^▽^=)
e0d12acf61
[+] Chusan event A181 to A191 (#157) 2025-07-31 04:55:15 -04:00
Paiton Bertschy
955743aecd
chore: add a172 event ids (#156)
Co-authored-by: 凌莞~(=^▽^=) <i@gao4.pw>
2025-07-31 04:54:44 -04:00
Raymond
4fb815a184
fix: correct filename 2025-07-26 23:51:00 -04:00
13ffe45dc6
[+] CardMaker maimai event (#159) 2025-07-25 03:29:54 -04:00
crxmsxn
5b699a2c3c
feature: Batch-Manual export for CHUNITHM (#161) 2025-07-24 23:04:16 -04:00
Raymond
bd32677e9e fix: subtrophies on userbox not showing up correctly 2025-07-20 12:03:21 -04:00
Adelyn Flowers
a98db63bec
Add missing chusan opts from bad migration (#155) 2025-07-09 02:56:39 -04:00
Clansty
2430b8c448
[+] Auto redirect when migrated 2025-07-06 16:29:36 +08:00
Menci
e3486042a5
[F] Data import fix (#153) 2025-07-04 12:45:09 -04:00
Menci
d79a4e5499
[+] Data support APIs (#151) 2025-07-04 00:01:32 -04:00
Menci
068b6179e5
fixup (#152) 2025-06-27 02:03:47 -04:00
Menci
3b90ac3c77 add stubs 2025-06-25 19:29:39 +09:00
Menci
42b8eabb3a revert 2025-06-25 19:29:39 +09:00
Menci
11dbe849cf add mai2 fields 2025-06-25 19:29:39 +09:00
Menci
ac6cbb9dd3 add mai2 fields 2025-06-25 19:29:39 +09:00
Menci
5c1f659437 export options 2025-06-25 19:29:39 +09:00
Clansty
155202dab9
chore: hide migrated cards in ranking 2025-06-23 09:41:49 +08:00
Raymond
71512bdad4
fix: typo 2025-06-18 11:43:53 -04:00
Raymond
88d4a3d298 style: move from "confirm" to "verify" by May's request 2025-06-18 13:52:31 +09:00
Raymond
2563a31d15 fix: 🎨 migrate from / to /confirm for email confirmation 2025-06-18 13:52:31 +09:00
Raymond
9c91d730b4
fix: remove unnecessary check 2025-06-01 15:09:29 -04:00
Teud
3aaeebae96 [+] Chusan Verse: Add events from A161 to A171 2025-06-01 02:59:39 +09:00
noarchwastaken
63a5f4441f [+] Chusan Verse: Add events from A152, A153, A161 2025-05-27 23:21:13 +09:00
Paiton Bertschy
47a171b1a4
Raymond was mad 2025-05-19 23:06:52 -05:00
Clansty
a3b3b3dd93
[F] Mai2 unable to register new user 2025-05-03 16:06:27 +08:00
Azalea
98f128ae07 Update src/main/java/icu/samnyan/aqua/net/UserRegistrar.kt
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-02 16:28:09 -04:00
Clansty
7fd20c3d9a [F] Should not display migrated user in ranking 2025-05-02 16:28:09 -04:00
Clansty
d7b45e4ce7 [+] clearMigrateFlag 2025-05-02 16:28:09 -04:00
Clansty
2e1eb2c879 [+] Login Alert for chusan, ongeki and wacca 2025-05-02 16:28:09 -04:00
Clansty
21142a53df [+] Login Alert for net and mai2 2025-05-02 16:28:09 -04:00
Azalea
1f847439a7 [F] Fix ghost card handling 2025-05-02 16:28:09 -04:00
Azalea
236266cd7a [F] Fix migration ID collision 2025-05-02 16:28:09 -04:00
Azalea
611f6dbffc [F] Fix updated usage 2025-05-02 16:28:09 -04:00
Azalea
1d4bb9b534 [+] Minato migration 2025-05-02 16:28:09 -04:00
Azalea
110a2144fa [F] Fix tablename 2025-05-01 21:02:57 -04:00
Azalea
c87889ba41 [+] Music popularity api 2025-05-01 20:54:27 -04:00
Raymond
88ea5c83b5 fix: Harmonization
i hope you're happy sourcery
2025-04-18 23:47:31 -04:00
Raymond
e962ac7ca7 fix: chinese trans 2025-04-18 23:47:31 -04:00
Raymond
7f4ee0784e fix: add options on website 2025-04-18 23:47:31 -04:00
Raymond
f222632dfb feat: symbol chat 2025-04-18 23:47:31 -04:00
Paiton Bertschy
8d65952e40
Verse plus isn't a thing (yet( 2025-04-18 14:53:34 -05:00
Azalea
6b99ab9e43 [+] Blacklist 2025-04-07 23:57:03 -04:00
Azalea
646136e6ea [+] Restore QQ invite 2025-04-02 14:45:38 -04:00
Raymond
3f2a337497
fix: egg not wokring 2025-04-02 12:25:21 -04:00
Azalea
2798e81f49 [-] Remove qq invite for now... 2025-04-02 12:16:56 -04:00
Azalea
d2983253bb [O] Communities 2025-04-02 12:10:58 -04:00
Raymond
fa0ebd20c3 [+] Chusan Userbox Egg 2025-04-02 12:03:19 -04:00
Raymond
dc8482b884 fix: mobile improvements 2025-04-02 12:03:19 -04:00
Raymond
64fe4b682a fuck me 2025-04-02 12:03:19 -04:00
Raymond
636bea080a fix: userbox fix 2025-04-02 12:03:19 -04:00
Raymond
24a6efa2c7 [+] Chusan Userbox Upgrade 3 2025-04-02 12:03:19 -04:00
Azalea
07e5d0e983 [U] Update readme 2025-03-31 12:18:24 -04:00
Azalea
f67879a847 [+] Chusan Verse+: Unlock event 2025-03-31 12:18:24 -04:00
Azalea
ce7f35bada [+] Chusan Verse+: New apis 2025-03-31 12:18:24 -04:00
Azalea
76145bc354 [U] Maimai Prism+: Update readme 2025-03-31 12:18:24 -04:00
Azalea
677b84b13c [+] Maimai Prism+: SQL for new ext field 2025-03-31 12:18:24 -04:00
Azalea
f336408951 [+] Maimai Prism+: New ext field 2025-03-31 12:18:24 -04:00
Azalea
1abd176616 [+] Maimai Prism+: New no-op api 2025-03-31 12:18:24 -04:00
Azalea
18d09f4184 [F] Fix ongeki user music detail 2025-03-29 13:37:58 -04:00
Azalea
756f274155
Ongeki Refactor (#134) 2025-03-29 13:21:09 -04:00
Azalea
25340075d5 [-] Remove temp file 2025-03-29 12:54:19 -04:00
Azalea
a9c0fe5ff8 [F] Ongeki: Field inconsistencies 2025-03-29 12:50:19 -04:00
Azalea
348b2e17f0 [F] Wacca and ongeki lastRomVersion fields 2025-03-29 11:53:34 -04:00
Raymond
a6837f4555
logout button (#137)
* feat: log out button

* fix: use i18n
2025-03-27 16:27:48 -04:00
Azalea
7e4b4991fd [M] Move file to the correct place 2025-03-27 11:08:22 -04:00
Azalea
f774d33966 Merge branch 'v1-dev' into ongeki 2025-03-27 11:04:18 -04:00
f61ca2d647
[+] Ongeki Re:Fresh A016 (#135) 2025-03-27 10:57:24 -04:00
Azalea
3c1d3013ce [-] Ongeki: Remove unused models 2025-03-27 05:22:35 -04:00
Azalea
685129fede [O] Optimize logging 2025-03-27 05:16:24 -04:00
Azalea
c32d334aab [M] Move sql 2025-03-27 05:01:42 -04:00
Azalea
577b758c99 [F] Ongeki: Fix path vars 2025-03-27 05:00:47 -04:00
Azalea
8b9797595a [O] Better logging 2025-03-27 04:58:43 -04:00
Azalea
0e6c55c56e [F] Ongeki: Fix key mismatch 2025-03-27 03:20:31 -04:00
Azalea
e65269ad29 [F] Ongeki: Fix unique constraints 2025-03-27 00:37:27 -04:00
Azalea
e00bbeadde [O] Ongeki: Upsert user all 2025-03-27 00:17:02 -04:00
Azalea
1193192e81 [O] Ongeki: Refactor other endpoints 2025-03-27 00:16:25 -04:00
Azalea
95286bae1c [O] Ongeki: Transform user list endpoints 2025-03-26 22:19:49 -04:00
Azalea
654cda736d [O] Ongeki: User unpaged apis 2025-03-26 21:45:13 -04:00
Azalea
a2b27090db [+] Ongeki: Solve Re:Fresh conflicts 2025-03-26 20:56:21 -04:00
Azalea
278b0205fc Merge branch 'v1-dev' into ongeki 2025-03-26 20:24:23 -04:00
Azalea
90f8cd8c65 [O] Ongeki: Static and game handlers 2025-03-26 20:23:24 -04:00
Azalea
05b8eda84a
[U] Update readme 2025-03-26 20:00:45 -04:00
忍野ペンギン
2ea3a2a8e4
[+] Support for Ongeki Re:Fresh (#133)
* [+] Minimum working support for Ongeki Re:Fresh

* [+] Re:Fresh: Add user event map and missing fields

* [+] Re:Fresh: Extract user skin
2025-03-26 19:54:46 -04:00
Azalea
e58e84da35 [O] Ongeki: Response models 2025-03-26 19:23:30 -04:00
Azalea
8a35cf002f [F] Ongeki: AllArgsConstructor 2025-03-26 19:10:30 -04:00
Azalea
c98e73883b [O] Ongeki: Make game entities constructor consistent 2025-03-26 19:06:53 -04:00
Azalea
f3e83193d6 [O] Ongeki: Merge game entities 2025-03-26 19:02:45 -04:00
Azalea
c0604bc989 [M] Ongeki: Move model 2025-03-26 18:56:33 -04:00
Azalea
9af383af88 [O] Ongeki: Merge response pojo 2025-03-26 18:51:58 -04:00
Azalea
9c295f6012 [-] Ongeki: Remove unnecessary JsonProperty 2025-03-26 18:48:25 -04:00
Azalea
57d83439f3 [F] Ongeki: Fix constructor inconsistencies 2025-03-26 18:36:30 -04:00
Azalea
7320a982f6 [O] Ongeki: Generalize user entity 2025-03-26 18:25:25 -04:00
Azalea
42ffea41ab [F] Ongeki: Fix field names 2025-03-26 18:15:15 -04:00
Azalea
1c1350d84b [O] Ongeki: Transform user entities 2025-03-26 18:09:54 -04:00
Azalea
8be5dc20a9 [+] Ongeki: Serialization consistency test 2025-03-26 18:09:11 -04:00
Azalea
0429cb060c [+] Ongeki: All repos component 2025-03-26 17:49:22 -04:00
Azalea
13aabda72a [O] Ongeki: Rename repos 2025-03-26 17:45:52 -04:00
Azalea
73281d1316 [O] Ongeki: Generalize user repos 2025-03-26 17:40:36 -04:00
Azalea
fdfdf66fa3 [O] Ongeki: Remove unused repo functions 2025-03-26 17:33:46 -04:00
Azalea
d43a0dd862 [O] Ongeki: Merge repos file 2025-03-26 17:32:25 -04:00
Azalea
cbf1e2709a [F] Fix namespace 2025-03-26 17:29:46 -04:00
Azalea
fb75cd1add [O] Ongeki: Refactor User repos 2025-03-26 17:28:59 -04:00
Azalea
d34b34b5bd [F] Fix export 2025-03-26 17:20:50 -04:00
Azalea
1df5b4e8ba [-] Remove old aqua apis 2025-03-26 17:18:08 -04:00
Azalea
ff9ee24894 [O] Ongeki: Refactor Game repos 2025-03-26 17:16:34 -04:00
Azalea
b4b70f7efe [+] Expose sdk to window 2025-03-26 16:40:45 -04:00
Azalea
20ca84e5ab [+] Add country override field 2025-03-26 16:23:49 -04:00
Azalea
90b259b609 [+] Add endpoint to change rom version 2025-03-26 16:23:30 -04:00
Azalea
f463aea3ef
[+] discord LLM prompt 2025-03-25 18:39:03 -04:00
Raymond
064f674b14
userbox import improvements (#132)
* fix: scan for option data correctly

* fix: i18n update for aquabox

i used google translate

* fix: remove log

* [F] fix chinese

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-03-25 12:46:18 -04:00
Azalea
d94a011413 [F] Fix ip 2025-03-23 18:26:53 -04:00
Raymond
8549a5caae
docs: remove ARRR 2025-03-22 02:17:38 -04:00
Azalea
3ea63a5ccf [-] Omit stack trace for decompress failure 2025-03-21 21:04:40 -04:00
Azalea
23ddb2c6e1 [F] Fix ongeki rating 2025-03-21 21:01:19 -04:00
Azalea
c524950e35 [O] Longer timeout 2025-03-21 20:57:05 -04:00
Azalea
4434b6ca2a [-] Omit stack trace for session last use time error 2025-03-21 20:56:34 -04:00
Azalea
e29a0eff17 [F] Fix missless export 2025-03-21 20:39:47 -04:00
Azalea
bac33c66d9 [F] Fix merge conflict 2025-03-21 19:53:39 -04:00
Azalea
3c790134ee Merge branch 'broker' into v1-dev 2025-03-21 19:47:35 -04:00
Azalea
c1196042bf [F] Fix sql 2025-03-21 19:08:04 -04:00
Azalea
8649a74612 [F] 不太聪明喵 2025-03-21 18:47:34 -04:00
Kanon
7ab58c6495
Modify the Chu3 rating return accuracy (#127)
* Modify the Chu3 rating return accuracy

* [F] Fix aquabox-url doc
2025-03-21 18:35:41 -04:00
Azalea
7fb46441f4
AquaTrans and stuff (#131) 2025-03-21 18:35:01 -04:00
Azalea Gui
f72ee54ff4 Merge branch 'v1-dev' into verse 2025-03-21 18:32:37 -04:00
Azalea
8578f6e048 [+] i18n 2025-03-21 18:30:18 -04:00
Azalea
bfdcdc30d6 [F] Fix dns 2025-03-21 16:58:00 -04:00
Azalea
2def7a8861
Update src/main/java/icu/samnyan/aqua/net/transfer/AllNetClient.kt
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2025-03-21 16:53:35 -04:00
Azalea
166fd9e6b7
Update src/main/java/ext/Http.kt
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2025-03-21 16:52:54 -04:00
Azalea
8efb3d7554 Merge branch 'v1-dev' into broker 2025-03-21 16:48:58 -04:00
Azalea
02b4a70dd2 [+] HTTP timeout 2025-03-21 16:47:43 -04:00
Azalea
cb039df33e [+] Devnotes 2025-03-21 16:47:19 -04:00
Azalea
da648190db [F] Fix error display 2025-03-21 16:46:35 -04:00
Azalea
2b26304d92 [+] More events 2025-03-21 16:41:33 -04:00
Azalea
33f97fe21f [M] Move sql migrations 2025-03-21 16:41:26 -04:00
Azalea
5fe20906d9 [F] Fix artemis response reading 2025-03-21 07:59:31 -04:00
Azalea
2f319e661b [F] Fix artemis "Store ID cannot be 0!" 2025-03-20 11:07:47 -04:00
Azalea
35e7d796ab [F] Fix port with aimedb 2025-03-20 10:33:27 -04:00
Azalea
3d93cc300a [O] Read everything from aimedb 2025-03-20 10:33:13 -04:00
Azalea
e7085f7602 [F] Fix DFI response compat 2025-03-20 09:50:23 -04:00
Azalea
4f3a6cba45 [F] Fix regex 2025-03-20 07:10:17 -04:00
Azalea
05dea088df [O] Replace alert with confirm window 2025-03-20 06:29:59 -04:00
Azalea
edf5dd133b [O] Make confirm callback nullable 2025-03-20 06:28:28 -04:00
Azalea
917f8476b9 [F] Fix promise 2025-03-20 06:26:02 -04:00
Azalea
b2f10e31f7 [F] Fix confirm overlay bind 2025-03-20 06:24:41 -04:00
Azalea
22fffcc422 [O] Replace confirm alert with ui 2025-03-20 06:13:27 -04:00
Azalea
c93f47744b [+] Complete transfer logic 2025-03-20 06:06:35 -04:00
Azalea
c6af5b7d87 [O] Disable on tested 2025-03-20 06:05:46 -04:00
Azalea
182c3ba393 [+] selectJsonFile 2025-03-20 06:05:03 -04:00
Azalea
4e249601fe [M] Move download function to libs/ui 2025-03-20 06:04:35 -04:00
Azalea
2f966d4fa9 [+] Add expected error type 2025-03-20 06:04:03 -04:00
Azalea
2ef950ae26 [+] Streaming post in frontend 2025-03-19 04:59:18 -04:00
Azalea
219705d2f3 [F] Fix error messages 2025-03-19 04:58:42 -04:00
Azalea
aa6730b9da [F] Fix apis 2025-03-19 04:58:32 -04:00
Azalea
b519537b69 [O] Proper null handling for http 2025-03-19 04:58:22 -04:00
Azalea
1a0e70636a [O] Proper null handling for json 2025-03-19 04:57:44 -04:00
Azalea
da8337a681 [F] Fix wording 2025-03-19 04:57:10 -04:00
Azalea
ac8e2981a9 [+] SQLite sucks 2025-03-19 04:42:29 -04:00
Azalea
444595406b
Update application.properties 2025-03-18 09:03:27 -04:00
Azalea
b31e450c4b
Update docker-compose.yml 2025-03-18 09:02:54 -04:00
Azalea
77e94595d8
Fix default port binding 2025-03-17 19:49:18 -04:00
Azalea
7fd02976cb [F] Fix PowerOn header 2025-03-17 14:04:51 -04:00
Azalea
8d3613201e [F] Fix toString calling lazy implicitly 2025-03-17 14:04:44 -04:00
Azalea
7320f0ca7f [F] Fix types 2025-03-17 14:02:50 -04:00
MoeGrid
f57f2dd585 修复开启allnet.server.check-keychip时SDED检查游戏网络BAD的问题 2025-03-17 12:49:21 -04:00
MoeGrid
3ac6d79644 将config.ts中的部分配置移动到.env中,方便私有部署。
将public中的psd文件移出,防止被打包到dist。
判断TURNSTILE_SITE_KEY为空时不开启此功能。
2025-03-17 01:28:02 -04:00
Azalea
a076d50cb3
Update gradle.yml 2025-03-15 20:40:10 -04:00
Azalea
072e3519bb [+] Allow overriding PowerOn addr 2025-03-15 19:18:25 -04:00
Raymond
6fe9fbb6cc feat: add sub trophies for VERSE!!!!! 2025-03-15 02:58:22 -04:00
Azalea
f7e5cd1a05 [-] Remove unused sdk 2025-03-12 01:44:11 -04:00
Azalea
519f4fc74c [+] Types 2025-03-12 01:43:56 -04:00
Azalea
66e5395a60 [O] no 200 error :((((( 2025-03-12 01:36:25 -04:00
Azalea
e54619da46
[U] Update doc 2025-03-12 01:32:38 -04:00
Azalea
9b8a76349f
[U] Update FAQ 2025-03-12 01:29:01 -04:00
Azalea
5bf017395c [+] Return the trophy sub 1 2 for userbox 2025-03-11 23:33:23 -04:00
Azalea
eb45075414 [+] Input validation 2025-03-11 18:32:00 -04:00
Azalea
c4e0717317 [+] Skeleton ui for transfer 2025-03-11 18:20:49 -04:00
Azalea
67d2e52fbc [+] Ongeki export 2025-03-11 16:51:46 -04:00
Azalea
d5b4e1ca14 [+] Push and pull apis 2025-03-11 10:22:28 -04:00
Azalea
72181e7ef7 [+] AimeDB register when not found 2025-03-11 09:53:22 -04:00
Azalea
d4d3a2b36c [O] Better encapsulation 2025-03-11 09:04:39 -04:00
Azalea
1dcaddb4c4 [+] New20 2025-03-11 08:15:19 -04:00
Azalea
0c891218b2 [+] new rating list 2025-03-11 08:03:10 -04:00
Azalea
8fd378852f [+] Mai2 broker 2025-03-11 05:11:10 -04:00
Azalea
aecb5572cd [O] Finish mai2 refactor 2025-03-11 03:45:54 -04:00
Azalea
6ffee3466f [U] Add comment 2025-03-11 02:49:35 -04:00
Azalea
9b7f50aebb [+] Maimai data broker 2025-03-11 02:48:56 -04:00
Azalea
5375c3c1fa [F] Fix json 2025-03-11 02:48:31 -04:00
Azalea
c2cd281efe
[U] Automatic deploy docker every week 2025-03-11 01:51:22 -04:00
Azalea
6252cbbefe [+] Data broker api 2025-03-10 18:11:47 -04:00
Azalea
3b2199127b [+] Http extensions 2025-03-10 16:46:39 -04:00
Azalea
d903a2bc69 [F] Fix convert 2025-03-10 16:44:29 -04:00
Azalea
c53b3967cd [+] Chusan export tool 2025-03-10 16:41:33 -04:00
Azalea
b811432e7e [+] Different commands 2025-03-10 16:41:05 -04:00
Azalea
23c83fed8b [+] Application entry 2025-03-10 16:40:50 -04:00
Azalea
fe6d95786b [U] Upgrade kt 2025-03-10 16:40:31 -04:00
Azalea
c3963e7fe2 [+] AimeDB client 2025-03-10 12:57:23 -04:00
Azalea
9d8a3c5132
Update README.md 2025-03-10 02:41:30 -04:00
Azalea
af734b7814 [+] Send AllNet and obtain poweron url 2025-03-10 01:46:33 -04:00
Azalea
4be340c723 [+] HTTP extensions 2025-03-10 01:45:47 -04:00
Azalea
5816f5dffb [-] Verse: Give up on rec rating 2025-03-09 11:42:51 -04:00
Azalea
44f62e8f54 [F] Verse: Fix list empty case 2025-03-09 11:42:51 -04:00
Azalea
6bdfab6cba [F] Verse: FIx recommendation return format 2025-03-09 11:42:51 -04:00
Azalea
e1d33691b4 [+] Verse: Model inference progress bar 2025-03-09 11:42:51 -04:00
Azalea
47a508e8a9 [F] Verse: Fix id mismatch in recommend music 2025-03-09 11:42:51 -04:00
Azalea
d983d7a5f5 [+] Verse: Return recommended music 2025-03-09 11:42:51 -04:00
Azalea
226ba475aa [+] Verse: Generalize AI recommender 2025-03-09 11:42:51 -04:00
Azalea
8bbde9e7e3 [F] Verse: Fix userid null 2025-03-09 11:42:51 -04:00
Azalea
9ac4b56ef7 [+] Verse: Return user challenge 2025-03-09 11:42:51 -04:00
Azalea
cc5ffdf644 [+] Verse: Add user data fields 2025-03-09 11:42:51 -04:00
Azalea
6d02c53eb3 [+] Verse: Save unlock challenge 2025-03-09 11:42:51 -04:00
Azalea
6e6adb8caa [+] Verse: Save rating 2025-03-09 11:42:51 -04:00
Azalea
b0392cd3e6 [+] Unlock challenge? 2025-03-09 11:42:51 -04:00
Azalea
43a54be20e [-] Verse: Give up on rec rating 2025-03-09 11:37:14 -04:00
Azalea
dc7f8e990b [F] Verse: Fix list empty case 2025-03-09 11:36:37 -04:00
Azalea
ff3d6da461 [F] Verse: FIx recommendation return format 2025-03-09 11:25:24 -04:00
Azalea
30600a5b9c [+] Verse: Model inference progress bar 2025-03-09 10:57:49 -04:00
Azalea
54eada1a66 [F] Verse: Fix id mismatch in recommend music 2025-03-09 10:54:46 -04:00
Azalea
c74c0456de [+] Verse: Return recommended music 2025-03-09 10:27:15 -04:00
Azalea
e3db8a1fdf [+] Verse: Generalize AI recommender 2025-03-09 10:19:39 -04:00
Azalea
b40dcf85bd [F] Verse: Fix userid null 2025-03-09 10:07:00 -04:00
Azalea
9c76286660 [+] Verse: Return user challenge 2025-03-09 10:00:37 -04:00
Azalea
a099d8bdf3 [+] Verse: Add user data fields 2025-03-09 09:58:42 -04:00
Azalea
b2f680da4e [+] Verse: Save unlock challenge 2025-03-09 09:57:46 -04:00
Azalea
18ecbe0f44 [+] Verse: Save rating 2025-03-09 09:57:09 -04:00
Azalea
bef38ce45f [+] Unlock challenge? 2025-03-09 07:10:15 -04:00
Azalea
70a90d9a92 [O] 0-index page 2025-03-05 00:51:49 -05:00
Azalea
7ce4b0058e [+] Paged ranking 2025-03-05 00:48:08 -05:00
Azalea
a105871a98 [+] User info endpoint 2025-03-03 18:08:21 -05:00
Azalea
d5be354a84 [+] KanadeDX card number notice 2025-03-01 23:26:20 -05:00
凌莞~(=^▽^=)
3da92de951
[F] Card access time is not correctly set (#120) 2025-03-01 16:31:39 -05:00
Azalea Gui
5caeaccec8 [M] Merge local branch bun.lockb 2025-03-01 01:39:28 -05:00
alix
eef40e39d1
implement memorial photo viewer (#119)
* commit current progress\

will prob work on my mac ltr

* more transferring to different device

* grammar

* [F] Fix warning inconsistency

* [O] Split status overlays

* [S] Better styling

* [+] i18n

* [+] Display photos tab conditionally

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-03-01 01:35:49 -05:00
Azalea
6c21afaa57 [F] Fix settings colliding with userbox? 2025-02-28 23:51:00 -05:00
Raymond
ca09e0e3f7 fix: formatting of bio 2025-02-28 23:51:00 -05:00
Raymond
fb9ef65346 fix: error in notice text 2025-02-28 23:51:00 -05:00
Raymond
344f62c275 refactor: don't add unnecessary game types 2025-02-28 23:51:00 -05:00
Raymond
d28b9bf5a8 feat: preferred game
this needs more testing
2025-02-28 23:51:00 -05:00
Raymond
b23385ba28 fix: add navigation to i18n, tooltip for profile 2025-02-28 23:51:00 -05:00
Raymond
586d108d32 feat: add announcement 2025-02-28 23:51:00 -05:00
Raymond
df395a613f fix: use rating numbers from dds, swap userplate font again
changed font to Gothic A1, added new DDS to userbox (all users wishing to benefit MUST update aquabox), added rating numbers
2025-02-28 23:51:00 -05:00
Raymond
45e3f23dc9 fix: change font on userplate from Arial to Choco Cooky
i lied about cfvhoco cooky but it's so funny we really needt o do that at some point
2025-02-28 23:51:00 -05:00
Raymond
113769643a feat: add additional information on user home
adds display name (if available), moves game name (if display name is visible) and shows username (if available)
2025-02-28 23:51:00 -05:00
Raymond
ecf12175f4 fix: remove unnecessary check 2025-02-28 23:51:00 -05:00
Raymond
0a0f350a1d fix: textarea instead of input for bio 2025-02-28 23:51:00 -05:00
Raymond
ff7abf4c41 fix: remove div around box 2025-02-28 23:51:00 -05:00
Raymond
7fc328b60a feat: add bio to profile 2025-02-28 23:51:00 -05:00
Azalea
5adbcc0aff [O] Protect against path traversal 2025-02-26 21:20:54 -05:00
Azalea
6bdfc69668 [+] Net photo APIs 2025-02-26 19:42:39 -05:00
Azalea
547ad4d0f8 [+] Second kaleidx area 2025-02-25 19:35:34 -05:00
Clansty
122a6776a2
[O] Mai2 set isCurrent = false for userLoginBonus on saving to enable select login bonus every time 2025-02-26 04:08:48 +08:00
Azalea
b840f6709b Merge branch 'v1-dev' of https://github.com/MewoLab/AquaDX into v1-dev 2025-02-24 18:15:55 -05:00
Azalea
ab6f6cd990 [U] Update readme 2025-02-24 18:15:53 -05:00
Azalea
97a56bbbfd [F] Fix rival 2025-02-24 03:40:47 -05:00
Azalea
a2b127cf4f [F] Fix duplicate 2025-02-23 19:03:46 -05:00
Azalea
a4524a7182 [+] Verse events 2025-02-23 18:56:36 -05:00
Azalea
0133f85800 [+] Ongeki settings on Web UI 2025-02-23 06:12:15 -05:00
Azalea
9745e65eed [+] Ongeki infinite kaika 2025-02-23 05:58:03 -05:00
Azalea
43e5f93a37
Update self-hosting.md 2025-02-22 22:53:23 -05:00
Azalea
07607a489c
Update self-hosting.md 2025-02-22 22:52:47 -05:00
Azalea
46e82eae3c
[U] Add note about verse 2025-02-22 19:19:13 -05:00
Azalea
3f0d1e345b
[U] Verse is supported 2025-02-22 19:12:33 -05:00
Clansty
d2a2bad111
[+] Mai2 add query for owned items 2025-02-18 12:22:19 +08:00
Clansty
7427609bee
[+] Mai2 add endpoints to get and set login bonus 2025-02-16 22:37:04 +08:00
Clansty
7431e58f70
[+] Mai2 add nameplate fields to settableFields 2025-02-13 13:43:41 +08:00
Clansty
519f67071d
[+] Add lookup by net username for debug-user-profile 2025-02-12 00:39:54 +08:00
Porta
56fe553870 [+] Add Dockerfile and devcontainer configuration for AquaDX development environment 2025-02-09 10:15:28 -05:00
Porta
c69570147a BUG: Fix gradlew not being executable during docker build. 2025-02-09 06:38:05 -05:00
Azalea
d031602789 [+] Display country 2025-02-09 00:22:17 -05:00
Azalea
b26a5a566b [+] Country code to emoji 2025-02-09 00:22:00 -05:00
Azalea
93d28db11a [+] Twemoji country flag font 2025-02-09 00:21:39 -05:00
Azalea
5a06ae52a9 [+] Country code names 2025-02-08 23:43:03 -05:00
Menci
81743b22e9 [+] Know game version from user-name-plate query 2025-02-03 06:42:56 -05:00
Menci
2ef4b7241d [+] MaiMile and UserIntimate (partner closeness) 2025-02-01 05:28:25 -05:00
Menci
9d19c99abe [F] "Felica" -> "FeliCa" 2025-01-28 05:00:54 +08:00
Menci
db7be134c7 [O] LinkCard UX improvements and i18n fixes 2025-01-28 04:57:58 +08:00
Azalea
99e1d130f0 [F] Fix infinite loop 2025-01-19 13:34:42 -05:00
Azalea
f33e1a0ae0 [F] Fix dates and timezones 2025-01-18 22:03:28 -05:00
split / May
5fb5e52e54 fix: 🐛 use accept= property correctly, use exclusively the correct mimetype for jpeg 2025-01-18 21:53:28 -05:00
Raymond
16112d4f1d feat: pfp cropper + enhancements 2025-01-18 21:53:28 -05:00
Raymond
7d214ba214 feat: add export to chu3 2025-01-18 21:53:28 -05:00
Raymond
2a6f3745c3 feat: add warning to general settings 2025-01-18 21:53:28 -05:00
凌莞~(=^▽^=)
151535139f
[+] Allow disable music rank for own machine (#110)
* [+] Allow disable music rank for own machine

* fix
2025-01-19 01:43:58 +08:00
Azalea
dfee2cd71f [+] Better kaleidx 2025-01-18 00:28:32 -05:00
Azalea
b178d7fd8d [O] Let's assume everyone found their keys 2025-01-17 20:44:51 -05:00
Azalea
43582f0528 [F] Fix kaleidx parsing 2025-01-17 18:48:47 -05:00
Azalea
202df27f88 [F] Fix server return type 2025-01-17 13:02:55 -05:00
Azalea
93518aa1f4 [+] Log on dup 2025-01-17 10:40:45 -05:00
Azalea
1421d55a56 [F] Fix duplicate uploads 2025-01-17 10:25:04 -05:00
Azalea
762f0ef445 [O] Limit activity count 2025-01-17 10:18:22 -05:00
Azalea
deb923fcfd [-] User activity should not be unique 2025-01-17 10:16:31 -05:00
Azalea
9210582a4b Revert "[-] Remove unique update for now"
This reverts commit df2f05a9140604edbe68dbe698dedcb9b2a7da14.
2025-01-17 10:15:37 -05:00
Azalea
24c83f9596 [F] Fix unique in upsert 2025-01-17 10:10:41 -05:00
Azalea
7a18b4499d [F] Fix userid 2025-01-17 10:06:17 -05:00
Azalea
c6bd6e862d [+] 150 2025-01-17 09:58:14 -05:00
Azalea
df2f05a914 [-] Remove unique update for now 2025-01-17 09:45:21 -05:00
Azalea
d79af91a8d [F] Fix 2025-01-17 09:40:56 -05:00
Azalea
f43eaa4577 [F] Fix key conflicts 2025-01-17 09:32:31 -05:00
Azalea
f6cd0edbc2 [F] Fix mai unique 2025-01-17 09:27:52 -05:00
Azalea
709419bc2d [U] Bump readme 2025-01-17 09:22:22 -05:00
Azalea
95460ca98f [U] Bump readme 2025-01-17 08:29:43 -05:00
Azalea
277f103535 [F] Fix primary key 2025-01-17 08:27:15 -05:00
Azalea
34ed1af242 [+] Implement GetUserKaleidxScope 2025-01-17 08:20:36 -05:00
Azalea
4328ca3280 [+] Insert Kaleidx on upsert 2025-01-17 08:19:04 -05:00
Azalea
1075256f21 [+] disableArea for events 2025-01-17 08:07:39 -05:00
Azalea
69ec608212 [+] db model for kaleidx 2025-01-17 08:07:24 -05:00
Azalea
3a4651adcd [+] ExtBool2 2025-01-17 08:06:48 -05:00
Azalea
1801c25fdc [+] New upsert field 2025-01-17 07:54:19 -05:00
Azalea
dc7e7b2c20 [F] Use datetime 2025-01-17 07:54:09 -05:00
Azalea
f654e12546 [+] Mai2UserKaleidx 2025-01-17 07:48:28 -05:00
Azalea
3c1dbeab15 [+] UploadUserPlaylogListApi 2025-01-17 07:41:23 -05:00
Azalea
f6f17dd328 [+] New item types 2025-01-17 07:39:56 -05:00
Azalea
2b6c283cd1 [-] Revert aeab453e 2025-01-17 06:17:32 -05:00
Azalea
a374f7a44b [O] Security: keychip check on remove 2025-01-16 19:01:51 -05:00
Azalea
10933046d6 [O] Reduce recruit TTL 2025-01-16 18:55:22 -05:00
Azalea
d7abb343a7 [F] Remove TCP Ack of ack 2025-01-16 17:50:59 -05:00
Azalea
aeab453e8b [-] Remove broadcast to reduce abuse 2025-01-16 17:47:55 -05:00
Azalea
c5dbe778ea [M] FutariServer > FutariRelay 2025-01-16 17:04:36 -05:00
Azalea
b17d784d80 [O] Hash user ids 2025-01-16 15:49:16 -05:00
Azalea
146e4bac0f [+] Recruit lobby 2025-01-16 15:19:50 -05:00
Clansty
8f7f422b28
[+] AquaMai GetServerAnnouncementApi placeholder 2025-01-16 15:50:53 +08:00
Azalea
2d35d41779 [F] Thread close 2025-01-15 19:27:34 -05:00
Azalea
3114a9b8c6 [O] No leaks 2025-01-15 19:27:20 -05:00
Azalea
830b10878e [F] Fix other people disconnecting causing broadcast to crash 2025-01-15 12:57:04 -05:00
Azalea
7363bb307d [F] Fix destination processing order 2025-01-15 10:56:37 -05:00
Azalea
2e0c567158 [F] Fix broadcast fail 2025-01-14 10:11:49 -05:00
Azalea
1a82fa27a9 [U] Update usages 2025-01-13 21:17:14 -05:00
Azalea
146f171cbc [+] Str.some 2025-01-13 21:16:30 -05:00
Azalea
8a04bb014a [M] Split code 2025-01-13 21:16:19 -05:00
Azalea
5290597b2b [O] Futari serailization 2025-01-13 21:14:44 -05:00
Azalea
661af76ed6 [+] TCP 2025-01-13 05:21:23 -05:00
Azalea
18d95a1ccd [F] Fix udp sendclass and recv 2025-01-12 22:27:01 -05:00
Azalea
0f87ed82e3 [F] Fix ranking type 2025-01-12 06:56:18 -05:00
Azalea
bb9bce67d8 [F] Fix recommend select music 2025-01-12 06:47:26 -05:00
Azalea
208fb8cf73 [+] Game music popularity for chusan 2025-01-12 05:54:15 -05:00
Azalea
ef8cb7e0ee [+] Game music popularity handler 2025-01-12 05:54:07 -05:00
Azalea
52ef582be6 [+] Implement GetUserRecommendSelectMusic 2025-01-12 05:52:53 -05:00
Azalea Gui
5dd06ba501 [+] requirements.txt 2025-01-12 04:40:08 -05:00
Azalea Gui
f6a5a03346 [+] Log recommendations 2025-01-12 04:38:43 -05:00
Azalea Gui
767d396171 [U] Update application properties 2025-01-12 04:29:20 -05:00
Azalea
da159b715c [+] Recommender ALS model 2025-01-12 04:28:36 -05:00
Azalea
79fa5448a0 [+] Recommender integration 2025-01-12 04:22:07 -05:00
Azalea Gui
b5f41cdab9 [M] Reorganize migrations 2025-01-12 02:41:15 -05:00
Menci
99507c7c6d
[F] Mai2 music ranking fix (#108)
* Revert "[O] No blocking tasks on startup"

This reverts commit 9d05ef6808264a97c2f34cf3252b3201ad59bd93.

* Revert "[O] Let json lib do its magic"

This reverts commit 5923987c7f5fbbf70ee2c56b986535b4f882c323.

* Reapply "[O] No blocking tasks on startup"

This reverts commit e06e8b4cf00e1fc2f032a5a8aae490687f826a91.

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2025-01-12 15:19:43 +08:00
Azalea
d7db45d700 [F] Fix list 2025-01-11 21:26:39 -05:00
Azalea
111304481f [F] Fix key mismatch 2025-01-11 21:23:12 -05:00
Azalea
64827ec0fc [O] Merge more apis 2025-01-11 21:15:16 -05:00
Azalea
c5b40f64e4 [O] Mai2 migrate 2025-01-11 20:53:59 -05:00
Azalea
401d182fc6 [O] Use logger alias 2025-01-11 19:16:46 -05:00
Azalea
3878103eaa [+] Todo notice 2025-01-11 19:12:11 -05:00
Azalea
5f6cd43b35 [+] Show More option 2025-01-11 19:06:28 -05:00
Menci
03b452e426 [+] Mai2 music ranking 2025-01-11 18:50:01 -05:00
Azalea
528960940c [U] Update ktor 2025-01-11 18:52:29 -05:00
Azalea
9063fbc13d [O] Return more ratings from backend 2025-01-11 12:52:50 -05:00
Azalea
d14998565b [O] Correctly compute rating change 2025-01-11 12:39:14 -05:00
Azalea
4a71e15fd5 [O] Split chuni userbox display
Co-Authored-By: Raymond <101374892+raymonable@users.noreply.github.com>
2025-01-11 12:35:17 -05:00
Azalea
94a0086fdd [O] Reformat GetUserMusic 2025-01-11 02:19:45 -05:00
Azalea
65cc3095e2 [F] Fix no image icon on missing texture 2025-01-08 01:27:00 -05:00
Azalea
cd90f2745a [F] Fix chusan cascade 2025-01-08 01:08:05 -05:00
Azalea
69a0e60fee [+] 20101 server 2025-01-07 12:04:32 -05:00
Azalea
aad43c9f9c [F] Fix matching start & end time? 2025-01-07 10:59:03 -05:00
Azalea
f033496d20 Merge branch 'v1-dev' of https://github.com/MewoLab/AquaDX into v1-dev 2025-01-07 10:38:36 -05:00
Azalea
b6757434b7 [+] Note about duolinguo 2025-01-07 10:38:29 -05:00
Azalea
3e9abda042
Update chu3-national-matching.md (#104) 2025-01-06 20:08:38 -05:00
Clansty
cf1e745c14
[O] Support option folder in root 2025-01-07 06:08:25 +08:00
Paiton Bertschy
eb1745d179
Update chu3-national-matching.md
Correct my shitty spelling
2025-01-06 07:16:32 -06:00
Paiton Bertschy
2b88713315
Update chu3-national-matching.md 2025-01-06 07:10:55 -06:00
Azalea
ef435130ee
fix: penguin appearance fixes (#103) 2025-01-06 04:43:50 -05:00
Azalea
17df365b2c [+] more docs 2025-01-05 23:32:40 -05:00
Azalea
852617975b [+] More docs 2025-01-05 23:31:16 -05:00
Raymond
90bed4413e fix: penguin appearance fixes 2025-01-05 23:04:06 -05:00
Azalea
ba59649946 [U] docs formatting 2025-01-05 21:21:39 -05:00
Azalea
e90e79ebf4 [M] docs move self hosting to separate document 2025-01-05 21:17:56 -05:00
Azalea
18c84ae310 [U] docs update game notes 2025-01-05 21:15:28 -05:00
Azalea
f06031f753 [U] docs update faq 2025-01-05 21:15:16 -05:00
Azalea
1d605ebb94 [-] Remove outdated changelog 2025-01-05 20:46:39 -05:00
Azalea
e3145bbdd6 [+] Scam notice 2025-01-05 20:41:45 -05:00
Azalea
130129c9bd [U] Docs formatting 2025-01-05 20:27:14 -05:00
Azalea
6d5a61fe04 [U] Docs formatting 2025-01-05 20:22:18 -05:00
Azalea
ee4f923a2d [U] docs 2025-01-05 20:19:02 -05:00
Azalea
500e469ee0 [F] Fix cmission 2025-01-05 19:34:11 -05:00
Azalea
cf7af0ff34 Merge branch 'v1-dev' of https://github.com/MewoLab/AquaDX into v1-dev 2025-01-05 07:57:42 -05:00
Azalea
e92c962c14 [+] Allow set username 2025-01-05 07:57:31 -05:00
Azalea
e37ca4a18e [O] Split input field 2025-01-05 07:57:19 -05:00
Clansty
8efc1a96ea
[+] userRating api for chu3 2025-01-05 20:49:01 +08:00
Azalea
16de6ec208 [+] i18n 2025-01-05 07:48:46 -05:00
Azalea
7824ab907b
[RF] move userMusicFromList to GameApiController and add GenericUserM… (#102) 2025-01-05 07:26:31 -05:00
Azalea
574e885da3
aquabox improvements (#99) 2025-01-05 07:23:16 -05:00
Clansty
ccd88a10ab
[RF] move userMusicFromList to GameApiController and add GenericUserMusicRepo 2025-01-05 19:54:15 +08:00
Azalea
3a69717a9d Merge branch 'v1-dev' into pr/99 2025-01-05 06:54:15 -05:00
Azalea
8b1fe940d2
Update README.md 2025-01-05 19:32:59 +08:00
Azalea
7083e1a117 [F] Fix duolinguo integration 2025-01-05 05:59:54 -05:00
Azalea
51af357c5a [F] Fix username check 2025-01-05 05:21:47 -05:00
Azalea
7ad4bc2ba5 [F] Fix favorite 2025-01-05 05:02:25 -05:00
Azalea
6cfd0a91fc [F] Fix username mismatch 2025-01-05 04:39:11 -05:00
Azalea
a70e9130f5 [F] Fix duplicate key 2025-01-05 04:25:11 -05:00
Azalea
01cb0c4b90 [+] Add playlog info to battle log when upsert 2025-01-05 04:23:41 -05:00
Azalea
4c3ed1d0da [F] Fix recentNBMusicList return 2025-01-05 04:13:38 -05:00
Azalea
250d92d225 [+] toDict 2025-01-05 04:13:27 -05:00
Azalea
e16bb5a34f [+] Add playlog fields to net battle log table 2025-01-05 04:13:20 -05:00
Azalea
9ff07f9f2b [F] Fix fav item list/ 2025-01-05 03:29:42 -05:00
Azalea
7e2cc100e6 [+] More docs 2025-01-05 03:17:42 -05:00
Azalea
4820c38bce [+] Implement GetUserNetBattleData 2025-01-05 02:20:15 -05:00
Azalea
89e682df3d [+] Store userMisc at upsert 2025-01-05 02:14:30 -05:00
Azalea
d25678d7b4 [+] UserMisc 2025-01-05 02:14:16 -05:00
Azalea
56e424c29b [+] Mut 2025-01-05 02:13:55 -05:00
Azalea
96fb815bd8 [F] Fix username encoding in net battle log 2025-01-05 01:20:09 -05:00
Azalea
41636b09db [+] ARRR 2025-01-05 01:14:50 -05:00
Azalea
8b2518a25d [+] More docs on matching 2025-01-05 00:38:54 -05:00
Raymond
9db091a2d2 fix: fix typo 2025-01-04 22:31:26 -05:00
Raymond
d220f369e9 fix: 🐛 aquabox 2025-01-04 22:30:40 -05:00
Azalea
73792e4294 [+] Store net battle log at upsert 2025-01-04 22:12:41 -05:00
Raymond
8b9236ae43 feat: 🎨 finalize server url mode 2025-01-04 22:04:09 -05:00
Azalea
877c23b9d7 [+] Fav music fix 2025-01-04 21:55:13 -05:00
Azalea
aed5c20700 [F] Fix event return data type mismatch 2025-01-04 21:48:11 -05:00
Raymond
f6efd392b9 refactor: fix merge conflicts #1 2025-01-04 20:17:33 -05:00
Azalea
9197b3ca93 [O] Todo :( 2025-01-04 20:14:38 -05:00
Azalea
01a064f1ab [O] Game entities 2025-01-04 20:07:16 -05:00
Azalea
af9cd81220 [O] Complete kt rewrite 2025-01-04 19:59:46 -05:00
Azalea
8203a70b60 [O] Rewrite CM chusan apis 2025-01-04 19:49:36 -05:00
Azalea
f290e6e576 [+] Auto redirect to /home when already logged in 2025-01-04 19:32:02 -05:00
Raymond
dbe3f3393c style: 🎨 small sass change 2025-01-04 19:22:22 -05:00
Raymond
a87dec0d64 fix: 🐛 disable click cursor on userplates that aren't yorus 2025-01-04 19:21:02 -05:00
Raymond
14bca470bb fix: 🐛 fix items not appearing as intended 2025-01-04 19:14:36 -05:00
Azalea
df3deee316 [-] Remove unused services 2025-01-04 18:53:36 -05:00
Azalea
62a55a40c2 [O] Rewrite the rest of chusan in kotlin 2025-01-04 18:47:23 -05:00
Raymond
42a4a11c49 fix: fixes / extra documentation texts 2025-01-04 18:18:37 -05:00
Azalea
3ef7f40e37 [-] Chusan drops database 2025-01-04 18:05:44 -05:00
Raymond
82a0473287 feat: add url support (wip) 2025-01-04 18:00:08 -05:00
Azalea
41e746a70e [-] Remove user-box-all-items api 2025-01-04 17:54:40 -05:00
Azalea
e2d6e29d7b [+] Add net battle log sql table 2025-01-04 17:52:46 -05:00
Azalea
5445fbed6c Merge branch 'v1-dev' of https://github.com/MewoLab/AquaDX into v1-dev 2025-01-04 17:13:44 -05:00
Azalea
e9e9e0a621 [F] Fix types 2025-01-04 17:13:41 -05:00
Azalea
891dffce8d
Update chu3-national-matching.md (#101) 2025-01-04 16:49:38 -05:00
Paiton Bertschy
4ad66fa4dc
Update chu3-national-matching.md
Fix spelling mistake lol
2025-01-04 14:58:46 -06:00
Azalea
5570aa79f7 [+] NAT and firewall 2025-01-04 12:09:32 -05:00
Azalea
288d336fb6 Merge branch 'v1-dev' of https://github.com/MewoLab/AquaDX into v1-dev 2025-01-04 08:49:13 -05:00
Azalea
d7b7d617bd [F] Fix user activity saving 2025-01-04 08:48:56 -05:00
Azalea
c0f7d11828 [+] Net battle log class 2025-01-04 08:48:48 -05:00
Azalea
1bd4f4f423 [-] Remove unused user id 2025-01-04 08:48:29 -05:00
Azalea
ce130c1e15 [+] More chusan upsert data types 2025-01-04 08:48:21 -05:00
Clansty
e69a201e97
[+] Drag and drop to link card 2025-01-04 21:17:30 +08:00
Clansty
143b36ab66
[O] Card binding optimize 2025-01-04 20:40:35 +08:00
Azalea
90900446ee
Update README.md (#100) 2025-01-03 19:07:58 -05:00
Azalea
29d34fb52c
Update README.md
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
2025-01-04 08:07:50 +08:00
Paiton Bertschy
241dbc8238
Update README.md
Update Readme to reflect that the Japan version of buddies plus is supported
2025-01-03 17:42:21 -06:00
Azalea
aea202bcf2 [+] More collab servers 2025-01-03 18:10:28 -05:00
Azalea
0bc4f14845 [S] fit color scheme 2025-01-03 17:29:29 -05:00
Azalea
7539d75ddb [+] i18n for matching 2025-01-03 17:24:40 -05:00
Azalea
9ea0dcb5a7 [U] Docs 2025-01-03 17:19:09 -05:00
Azalea
40707b7d23 [U] Docs indentation 2025-01-03 17:16:29 -05:00
Azalea
d146ed9a7d [U] Docs 2025-01-03 17:13:37 -05:00
Azalea
a09329eb82 [+] Docs 2025-01-03 17:12:52 -05:00
Azalea
0bda8406c3 [+] Submit matching settings 2025-01-03 16:51:03 -05:00
Azalea
9489151bc1 [+] UI Matching settings 2025-01-03 16:33:38 -05:00
Azalea
80fc8417dc [-] Remove proxied matching prop 2025-01-03 16:33:03 -05:00
Azalea
cb0f46c5db [F] Fix logging? 2025-01-03 16:32:26 -05:00
Azalea
85b5910ea9 [-] Remove proxied matching, not very useful 2025-01-03 16:32:13 -05:00
Azalea
d5a1a26091 [+] Return matching api 2025-01-03 16:31:58 -05:00
Azalea
256b48a0ad [+] Matching server in game option table 2025-01-03 16:31:42 -05:00
Azalea
bfb269b378 [+] option i18n 2025-01-03 16:31:25 -05:00
Azalea
54bed879a5 [+] Matching server options 2025-01-03 16:30:06 -05:00
Azalea
4ded3d9752 [+] TODO 2025-01-03 16:10:01 -05:00
Raymond
f68bd54ccd fix: add tooltip to trophy
(helpful for when it's longer than the box has)
2025-01-03 14:07:59 -05:00
Azalea
2edad4efdb [F] Fix rank 2025-01-03 10:17:21 -05:00
Raymond
08af00da29 feat: 💄 aquabox on profiles + avatar fixes 2025-01-03 09:21:43 -05:00
Azalea
21e023e609 Revert "[U] Upgrade dependencies"
This reverts commit 332eacd2cc25be927ceccef9dac45295a9e762c3.
2025-01-03 03:09:53 -05:00
Azalea
f6489d5ac0 [+] Add token to logging 2025-01-03 02:19:11 -05:00
Azalea
256aac8faf [+] Add error logging 2025-01-03 01:45:42 -05:00
Azalea
a1be699ec5 [+] characterId 2025-01-02 10:51:45 -05:00
Azalea
d71af941b0 [+] Add some get-only fields 2025-01-02 10:44:06 -05:00
Azalea
a1b56f6e0b [O] Do not log GetUserPortraitApi 2025-01-02 07:13:06 -05:00
Azalea
d8022cc1a4 [F] Fix userbox file logic #97 2025-01-02 07:12:46 -05:00
Azalea
9ba7f5022e [+] Add userbox.new chinese i18n #97 2025-01-01 19:05:45 -05:00
Azalea
437ed2ee60
[+] Chuni Userbox with Assets (#97) 2025-01-01 18:59:55 -05:00
Raymond
4d4335004f refactor: move DDS cache
moved the DDS cache from dds.ts to ddsCache.ts and added caching for scaled images

Co-authored-by: split / May <split@split.pet>
2025-01-01 16:30:48 -05:00
Raymond
ce95f2165d style: make nameplates fit better 2025-01-01 15:06:52 -05:00
split / May
931e611cf7
revert: Reverse decision to remove the classic UserBox preview
Adds back the classic UserBox preview when AquaBox is disabled / unavailable
2025-01-01 06:21:12 -08:00
split / May
81ef029bf6
docs: 📝 add TSDoc comments to functions in the DDS class 2025-01-01 05:21:29 -08:00
split / May
223de57b65
style: linebreaks 2025-01-01 05:13:13 -08:00
split / May
f1d1b81456
refactor: ♻️ replace "CHUNITHM" string with "AquaDX"
recommendation from @raymonable
2025-01-01 04:23:04 -08:00
Raymond
8aa829ab02 [+] Chuni Userbox with Assets
Co-authored-by: split / May  <split@split.pet>
2025-01-01 06:27:38 -05:00
Azalea
8fb443d41d
Update docker-image.yml 2024-12-31 05:25:01 +08:00
Azalea
edc62b3cfc
Update docker-image.yml 2024-12-31 04:27:25 +08:00
Azalea
644cdef95f
Update docker-image.yml 2024-12-31 04:19:50 +08:00
Azalea
dc54473669 [U] Upgrade gradle 2024-12-29 20:31:16 -05:00
Azalea
332eacd2cc [U] Upgrade dependencies 2024-12-29 20:23:21 -05:00
Azalea
c26a670b05 [U] Upgrade kt only 2024-12-29 09:36:30 -05:00
Azalea
1ccb8694d8 Revert "[U] Upgrade deps"
This reverts commit d3c25e6b123756450334158266bffc4414eb0928.
2024-12-29 09:24:15 -05:00
Azalea
91db21067c [+] Use options in GetGameSettings 2024-12-29 07:16:19 -05:00
Azalea
834546e3ba [+] TODO: Proxy matching 2024-12-29 07:16:00 -05:00
Azalea
6518fe6946 [+] Proxied matching option 2024-12-29 07:10:32 -05:00
Azalea
9b21193be2 [+] Props for matching 2024-12-29 07:07:47 -05:00
Azalea
99983b1eb1 [+] Repo 2024-12-29 07:02:00 -05:00
Azalea
712e2c9d02 [M] Combine other pojos 2024-12-29 07:01:47 -05:00
Azalea
f963e6aa03 [O] Turn MatchingMember into db table 2024-12-29 06:58:01 -05:00
Azalea
d3c25e6b12 [U] Upgrade deps 2024-12-29 06:57:42 -05:00
Azalea
667abf2131 [O] Split matching apis 2024-12-29 05:16:09 -05:00
Azalea
8a1e17ecd3 Merge branch 'v1-dev' into matching 2024-12-29 05:11:58 -05:00
Azalea
809004e16b [O] Rewrite BooleanIntDeserializer 2024-12-29 05:11:51 -05:00
Azalea
e35df8a029 [U] Update userbox apis 2024-12-29 04:50:03 -05:00
Azalea
d9081563c2 [U] Update userbox SDK 2024-12-29 04:49:43 -05:00
Azalea
29e757ba75 [U] Update i18n for userbox 2024-12-29 04:49:31 -05:00
Azalea
48724bae8b [-] Remove unused types 2024-12-29 04:49:15 -05:00
Azalea
b1de430f0b [O] Rewrite userbox 2024-12-29 04:48:36 -05:00
Azalea
6cd18ba7f7 [M] Move settings components 2024-12-29 04:48:24 -05:00
Azalea
07d167d961 [F] Put chusan settings in chusan tab 2024-12-29 02:31:48 -05:00
Azalea
dadedbe129 [+] i18n for game option 2024-12-29 02:31:33 -05:00
Azalea
6d8948cdf1 [+] Implement infinite penguins 2024-12-29 01:42:00 -05:00
Azalea
27ca67b6f9 [+] Infinite penguins option 2024-12-29 01:41:44 -05:00
Azalea
7e27bf0785 [+] Card.sensitiveInfo 2024-12-29 00:44:04 -05:00
Azalea
a4e8cbe9e1 [+] debug-user-profile 2024-12-29 00:41:08 -05:00
Azalea
3d58a15b10 [+] Implement matching? 2024-12-28 08:49:29 -05:00
Azalea
5c80aec50b [F] Fix timezones 2024-12-28 07:30:49 -05:00
Azalea
b52916e62c [F] Fix chusan user creation 2024-12-28 03:11:23 -05:00
Azalea
91ea0c9c8e [O] Better logging 2024-12-28 02:36:17 -05:00
Azalea
2a80a10eec [+] Add worlds end 2024-12-28 01:55:01 -05:00
Azalea
7b8fb02398 [+] Add chusan unique constraints 2024-12-28 01:06:25 -05:00
Azalea
74aa319f41 [F] Fix nextIndex -1 2024-12-28 01:06:00 -05:00
Azalea
0de4856247 [F] Fix item 2024-12-28 00:19:51 -05:00
Azalea
da61b1a3e7 [+] Paged post process 2024-12-28 00:18:15 -05:00
Azalea
0632213c8b [F] Fix cache key 2024-12-27 23:52:49 -05:00
Azalea
daa8de203b [-] Remove unnecessary assignment 2024-12-27 23:34:52 -05:00
Azalea
537558e3d5 [+] Rewrite using paging 2024-12-27 23:31:58 -05:00
Azalea
8d23b262c7 [O] Better pagination 2024-12-27 23:31:22 -05:00
Azalea
04a178eda6 [+] Free paging 2024-12-27 22:05:46 -05:00
Azalea
977f353f9c [O] Replace CM 2024-12-27 22:04:20 -05:00
Azalea
ae6ff97b62 [O] Make handlers abstract 2024-12-27 16:03:02 -05:00
Azalea
fa45891af4 [F] Fix paging 2024-12-27 06:10:12 -05:00
Azalea
159b36607a [F] Fix corner case when only one song is pressent 2024-12-27 03:26:09 -05:00
Azalea
a731687607 [F] Fix favorite saving 2024-12-27 03:24:20 -05:00
Azalea
a77a74ba61 [+] Save favorite music 2024-12-27 02:15:05 -05:00
Azalea
fc35381e1b [F] oops 2024-12-27 01:13:55 -05:00
Azalea
6f837830ab [+] SEO meta 2024-12-27 01:13:15 -05:00
Azalea
8197361fb0 [F] Fix 2024-12-27 00:36:16 -05:00
Azalea
c7d12fbdf8 [F] Fix user recent rating 2024-12-27 00:19:40 -05:00
Azalea
0cb3fd3134 [O] Better diffing 2024-12-27 00:19:16 -05:00
Azalea
77a791e5da [+] Top 10 out of recent 40 2024-12-26 23:15:14 -05:00
Azalea
42d94b43b1 [F] Fix score display 2024-12-26 23:08:12 -05:00
Azalea
cb6bf00236 [+] Allow saving chuni team name 2024-12-26 22:52:16 -05:00
Azalea
4f6bd11a70 [O] Rewrite login handler 2024-12-26 22:11:14 -05:00
Azalea
0f14326449 [F] Fix CM 2024-12-26 21:50:07 -05:00
Azalea
b421b4476b [+] Abstract mapper 2024-12-26 21:49:51 -05:00
Azalea
18554ec439 [-] Remove unused 2024-12-26 21:36:39 -05:00
Azalea
806e24b9f1 [O] Rewrite GetUserMusic 2024-12-26 21:30:34 -05:00
Azalea
fa1d69f1f9 [O] Rewrite GetUserRecentRating 2024-12-26 20:58:18 -05:00
Azalea
33aebc42b3 [O] Rewrite GetUserLoginBonus 2024-12-26 20:52:36 -05:00
Azalea
ffcb94674e [+] Rewrite More CM 2024-12-26 20:47:46 -05:00
Azalea
c1323a6ba1 [-] Remove duplicates 2024-12-26 20:38:49 -05:00
Azalea
ea70da8fbf [O] Split 2024-12-26 20:26:22 -05:00
Azalea
1bdb17f073 [F] Fix team name encoding 2024-12-26 20:24:50 -05:00
Azalea
506031b5cb [F] Fix team name null 2024-12-26 20:15:41 -05:00
Azalea
4a981900aa [O] Rewrite CM user data 2024-12-26 20:11:39 -05:00
Azalea
6fa052bfcf [+] Team name 2024-12-26 20:09:35 -05:00
Azalea
19ac32d328 [+] Add chusan team name option 2024-12-26 20:08:17 -05:00
Azalea
44eab78935 [+] Add todo 2024-12-26 19:51:18 -05:00
Azalea
a2413f3635 [F] Fix item kind 2024-12-26 19:46:20 -05:00
Azalea
13b1d8fc34 [F] Fix 2024-12-26 19:38:06 -05:00
Azalea
8b90449970 [+] Chusan rating calculation 2024-12-26 19:37:55 -05:00
Azalea
038e76ed94 [-] Remove comment 2024-12-26 19:24:26 -05:00
Azalea
390c80c46c [F] Fix StringMapper 2024-12-26 19:24:05 -05:00
Azalea
dffae008cd [F] Fix dates 2024-12-26 19:06:18 -05:00
Azalea
bcf9af71e2 [O] Rewrite roll gacha 2024-12-26 18:53:08 -05:00
Azalea
5787d32c1a [O] Rewrite user preview 2024-12-26 18:52:49 -05:00
Azalea
39b5032303 [O] Rewrite list getters 2024-12-26 18:52:16 -05:00
Azalea
5f871b1945 [O] Rewrite map area condition 2024-12-26 18:51:26 -05:00
Azalea
346f1c991a [O] Rewrite upsert chargelog 2024-12-26 18:51:07 -05:00
Azalea
b14a56bb6c [O] Rewrite Begin matching 2024-12-26 18:50:20 -05:00
Azalea
f75d0acb1c [-] Remove more unused 2024-12-26 17:41:54 -05:00
Azalea
b2d1fd916d [+] Add lazy uid to context 2024-12-26 17:41:33 -05:00
Azalea
b7f1e30708 [-] Remove unused 2024-12-26 17:41:26 -05:00
Azalea
88863d8d01 [O] Everything can be special 2024-12-26 17:41:05 -05:00
Azalea
c275c54fca [O] Rename composition 2024-12-26 12:25:23 -05:00
Azalea
b97ace2c6e [+] Chusan b40? 2024-12-26 12:22:43 -05:00
Azalea
c78c4689f1 [F] Fix sql syntax error 2024-12-26 12:19:19 -05:00
Azalea
f39ccf7629 [O] Better logging in json 2024-12-26 11:57:40 -05:00
Azalea
885dfb5bea [+] Repo query 2024-12-26 11:57:31 -05:00
Azalea
8037273672 [+] Update data version in upsert all 2024-12-26 11:57:19 -05:00
Azalea
2e9c0656de [+] Return correct data version in get game settings 2024-12-26 11:57:02 -05:00
Azalea
e85d294d12 [+] Version cache 2024-12-26 11:56:23 -05:00
Azalea
24bf6cffc3 [M] Rename 2024-12-26 11:55:31 -05:00
Azalea
16762d1a46 [F] Fix url passing 2024-12-26 08:30:21 -05:00
Azalea
6a54005472 [F] Fix matching url 2024-12-26 08:08:22 -05:00
Azalea
812d910212 [F] Fix safety :( 2024-12-26 07:55:54 -05:00
Azalea
b7c8fba464 [F] Fix safety 2024-12-26 07:53:36 -05:00
Azalea
89424f6466 [O] remove unnecessary toString 2024-12-26 07:24:52 -05:00
Azalea
0411505341 [O] riik GetGameSetting 2024-12-26 07:24:32 -05:00
Azalea
6938083463 [+] Special handler 2024-12-26 07:16:29 -05:00
Azalea
054b286388 [F] Fix build 2024-12-26 06:45:27 -05:00
Azalea
add1e02d2f [O] riik Chuni upsert all 2024-12-26 06:44:27 -05:00
Azalea
fd44744029 [O] riik Get cmission handler 2024-12-26 06:43:41 -05:00
Azalea
6844e1b435 [O] riik UpsertUserAll model 2024-12-26 06:42:27 -05:00
Azalea
8140380673 [O] riik 2024-12-26 06:41:58 -05:00
Azalea
66ad9e8856 [O] Remove coderesp 2024-12-26 06:41:28 -05:00
Azalea
da467ec8ee [M] riik CMission repos 2024-12-26 06:38:45 -05:00
Azalea
f0923c51e6 [F] Fix trailing } 2024-12-26 02:43:25 -05:00
Azalea
d1953e792a [+] Show fc, ap 2024-12-26 02:42:19 -05:00
Azalea
b3294eed68 [+] Recreated assets 2024-12-26 02:30:51 -05:00
Azalea
37946c5aba [+] Helpful message for unsupported games 2024-12-25 16:31:01 -05:00
Azalea
ce80f65e9f [F] Fix avatar saving 2024-12-23 20:16:59 -05:00
Azalea
4dce42b85f [M] Migrate to svelte 5 routing 2024-12-23 19:51:34 -05:00
Azalea
88702085bb [-] Remove unnecessary showOpenFilePicker library 2024-12-23 19:49:31 -05:00
Azalea
2719522e07 [-] Remove unused rating page 2024-12-23 19:23:47 -05:00
Azalea
dd573945ed [F] Fix build warnings 2024-12-23 18:56:44 -05:00
Azalea
9cffb19332 [M] Migrate usage 2024-12-23 18:32:20 -05:00
Azalea
6631bb593c [U] Migrate to svelte 5, switch to bun 2024-12-23 18:32:02 -05:00
Azalea
f5959925aa [O] Handle ranking with binary search 2024-12-23 18:00:06 -05:00
Azalea
5b20cb316b [O] Pre-compute ranking cache 2024-12-23 15:58:02 -05:00
Azalea
8cb7ff8ed4 [+] Diff tool 2024-12-23 15:57:06 -05:00
Azalea
4bcf1f2d9e [F] Fix inconsistencies 2024-12-20 11:18:03 -05:00
Azalea
452b077822 [F] Fix nullable 2024-12-20 10:04:48 -05:00
Azalea
f37a32ceab [-] Remove unused functions 2024-12-20 09:32:16 -05:00
Azalea
7182514a64 [M] Rename var 2024-12-20 09:29:48 -05:00
Azalea
da60131051 [O] Refactor 2024-12-20 09:27:50 -05:00
Azalea
aa9804d2df [+] User data handlers 2024-12-20 09:00:13 -05:00
Azalea
10c1b9bc29 [M] Static endpoints 2024-12-20 08:42:43 -05:00
Azalea
698422a41e [-] Collapse more 2024-12-20 07:29:39 -05:00
Azalea
ac16f40303 [O] Collapse boring handlers 2024-12-20 07:14:14 -05:00
Azalea
e41bdecd5b [O] Better chusan handling 2024-12-20 07:01:19 -05:00
Azalea
c9a0a8d2b5 [F] Fix matching bad for real for real 2024-12-20 07:00:32 -05:00
Azalea
c308940c4b [F] Fix matching bad for real 2024-12-20 06:57:48 -05:00
Azalea
99770ccd2f [F] Fix matching bad??? 2024-12-20 06:54:40 -05:00
Azalea
2d4bb90acc [F] Fix chusan duplicate key 2024-12-20 06:25:41 -05:00
Azalea
e78d80b99d [-] Remove json property order? 2024-12-20 05:21:08 -05:00
Azalea
9f5cd6dc88 [M] Migrate chusan user data (NEED TESTING) 2024-12-20 05:12:44 -05:00
Azalea
85c0b670da [F] Fix lastClientId null 2024-12-20 04:53:48 -05:00
Azalea
813ec7d294 [O] Migrate sass import 2024-12-20 04:37:51 -05:00
Azalea
d66eb239fa [F] Fix table 2024-12-20 04:25:39 -05:00
Azalea
9fcc46b5d5 [O] Common superclass for chusan user entities
Co-Authored-By: 凌莞~(=^▽^=) <opensource@c5y.moe>
2024-12-20 03:34:04 -05:00
Azalea
3ebf8a2061 [F] 263 should be 264
Co-Authored-By: 云 <i@muir.fun>

#96
2024-12-20 01:29:01 -05:00
Azalea
de98085e84
[U] Update readme 2024-12-20 14:07:45 +08:00
2557b55817
[+] Chusan Luminous Plus A072-A112 (#96) 2024-12-20 14:03:21 +08:00
Azalea
128706e8a1 [O] Switch to bun 2024-12-17 21:46:34 -05:00
Azalea
d854d8ae0b [F] Fix userbox 2024-12-17 20:36:01 -05:00
Azalea
637191836a [F} Fix dropdown white on white 2024-12-17 20:35:44 -05:00
Azalea
69ab9d96f7 [F] Fix userbox 2024-12-17 20:09:48 -05:00
Azalea
073febe24a [+] Remove classes, migration guide 2024-12-17 20:09:26 -05:00
Azalea
f01a4fcfac [+] UserBox endpoints 2024-12-17 15:28:28 -05:00
Azalea
4f81a4e9b4 Merge branch 'metrics' into v1-dev 2024-12-12 17:07:55 -05:00
Azalea
1a06033964 [+] Hide allnet port 2024-12-12 17:06:32 -05:00
Menci
c5dad11e5e
[+] Metrics (#95)
* Add actuator and micrometer

* update

* [-] Remove unused import

* [O] Make code less verbose

* format

* refactor

---------

Co-authored-by: Azalea <22280294+hykilpikonna@users.noreply.github.com>
2024-12-13 05:47:31 +08:00
Menci
5ed89754b3 refactor 2024-12-12 02:33:14 +08:00
Menci
ee88be613c format 2024-12-11 11:11:17 +08:00
Azalea
ebafb4c05e [O] Make code less verbose 2024-12-10 21:56:15 -05:00
Azalea
70466d0c94 [-] Remove unused import 2024-12-10 19:13:40 -05:00
Menci
340003c568 update 2024-12-10 23:30:30 +08:00
Menci
db5343fba3 Add actuator and micrometer 2024-12-07 02:32:48 +08:00
akatki
8434842c65
[F] AimeDB Felica Lookup v2 rename package parameter (#94)
* [F] AimeDB Felica Lookup v2 rename package parameter

* [F] AimeDB Felica Lookup v2 rename package parameter
2024-12-01 11:39:51 +08:00
Clansty
2482881117
[RF] AquaMai moved to new repo 2024-11-30 15:18:08 +08:00
Clansty
4afe2160e1
[F] CI after moving assets 2024-11-30 14:45:47 +08:00
Menci
6225390b7f
[F] Set ForceAsSserver to default ON (#92)
* Set ForceAsSserver to default ON

* work as origin

---------

Co-authored-by: Clansty <i@gao4.pw>
2024-11-30 14:43:25 +08:00
凌莞~(=^▽^=)
d5a9c98ff9
[O] ResetTouchAfterTrack -> ResetTouch, add press key to reset (#93)
* [O] ResetTouchAfterTrack -> ResetTouch, add press key to reset

* fix

* update

* fix: Remove not work

---------

Co-authored-by: Menci <mencici@msn.com>
2024-11-30 05:29:30 +08:00
Clansty
bed1b85319
[+] LogUnity 2024-11-29 11:58:50 +08:00
Clansty
8a728ad28a
[F] JudgeAccuracyInfo crashes demo 2024-11-29 05:43:41 +08:00
Clansty
c42f17c96e
[+] Bump version 2024-11-27 03:49:27 +08:00
Clansty
054352356b
[O] Locale 2024-11-27 03:35:01 +08:00
Menci
2646f642b5
[+] AquaMai.Config.ApiVersion (#91)
* Add ApiVersion

* Fix SectionNameOrder
2024-11-27 00:19:37 +08:00
Clansty
436bdde60a
[O] Do not reset touch panel when quick retry 2024-11-26 21:22:18 +08:00
Clansty
07210a23b7
[F] unused lockCredits 2024-11-26 05:53:20 +08:00
Clansty
da36ef4002
[O] enforce type for SetEntryValue and some comment and type chore 2024-11-26 05:14:58 +08:00
Menci
e3b06b110f
[+] LogNetworkRequests (#90)
* It doesn't work...

* Implement

* rename
2024-11-26 00:03:50 +08:00
Clansty
792dce6843
[+] Add some interfaces for attributes 2024-11-26 00:03:35 +08:00
Clansty
0ec048ceba
[F] LoadFromPacked Occupying file 2024-11-25 22:32:50 +08:00
Menci
07631e9b02
[F] AquaMai upload task shouldn't run on PR builds 2024-11-25 18:32:48 +08:00
Clansty
4834363fb5
[+] Add LatestVersion to interface 2024-11-25 04:04:04 +08:00
Menci
734dbfb761
[F] Fix AquaMai CI after config refactor (#89)
Message from previous commit:

[RF] AquaMai configuration refactor (#82)

更新了配置文件格式,原有的配置文件将被自动无缝迁移,详情请见新的配置文件中的注释(例外:`SlideJudgeTweak` 不再默认启用)
旧配置文件将被重命名备份,如果更新到此版本遇到 Bug 请联系我们

Updated configuration file schema. The old config file will be migrated automatically and seamlessly. See the comments in the new configuration file for details. (Except for `SlideJudgeTweak` is no longer enabled by default)
Your old configuration file will be renamed as a backup. If you encounter any bug with this version, please contact us.
2024-11-25 02:15:04 +08:00
Menci
37044dae01
[RF] AquaMai configuration refactor (#82)
更新了配置文件格式,原有的配置文件将被自动无缝迁移,详情请见新的配置文件中的注释(例外:`SlideJudgeTweak` 不再默认启用)
旧配置文件将被重命名备份,如果更新到此版本遇到 Bug 请联系我们

Updated configuration file schema. The old config file will be migrated automatically and seamlessly. See the comments in the new configuration file for details. (Except for `SlideJudgeTweak` is no longer enabled by default)
Your old configuration file will be renamed as a backup. If you encounter any bug with this version, please contact us.
2024-11-25 01:25:19 +08:00
Clansty
e9ee31b22a
[F] 0.10000000149011612 2024-11-22 18:18:48 +08:00
Azalea
cf0e3ce989 [F] Should be card id, not game user id 2024-11-21 12:41:24 -05:00
Azalea
27664164fa [F] Fix ranking reindex 2024-11-21 12:34:59 -05:00
Azalea
b7360c426b [F] Fix encountMapNpcList runtime error 2024-11-21 12:28:09 -05:00
Azalea
0e176d5608 [F] Fix warnings 2024-11-21 12:26:36 -05:00
Azalea
a947a81772 [F] oops forgor 2024-11-21 12:16:17 -05:00
Azalea
bbb4185fac Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-11-21 12:12:09 -05:00
Azalea
e34f0587fe [O] Optimize ranking 2024-11-21 12:10:44 -05:00
Clansty
0e02dd660c
[F] IconLoader 2024-11-22 00:59:25 +08:00
Azalea
2376e511ac [+] DB migration for ranking optimization 2024-11-21 11:39:36 -05:00
Azalea
56bf447cdb [M] Move opt out leaderboard to correct place 2024-11-21 11:39:23 -05:00
Azalea
5ebb1718d6 [-] Remove SQLite migrations 2024-11-21 10:49:21 -05:00
Clansty
9143b92932
[F] BasicFix 2024-11-21 18:47:56 +08:00
Azalea
fbff4a8cb1 [O] Optimize chu3 user data 2024-11-21 01:51:29 -05:00
Azalea
b02371e4c3 [O] Optimize auto-ban 2024-11-21 01:49:45 -05:00
Azalea
e32a2bbe81 [F] Fix hibernate enhance compilation 2024-11-20 22:29:45 -05:00
Azalea
10ebd61519 [+] Kotlin Hibernate enhance 2024-11-20 22:25:48 -05:00
Clansty
7ac90891ca
[F] should hook getter 2024-11-21 01:53:12 +08:00
Clansty
711c18a7f1
[+] ForceIgnoreError 2024-11-20 04:06:15 +08:00
Clansty
b3cb08316a
[+] ForceNonTarget 2024-11-20 02:46:41 +08:00
Clansty
42b8b9ce4a
[O] RemoveEncryption should default true 2024-11-20 02:25:16 +08:00
村場 榞彦
fc4834ebd6
[+] Support More Custom Png Assets (#85)
素材放置于AssetBundleImages,支持姓名框背景板旅行伙伴,Icon仍在修,navichara和PartnerResult在写
2024-11-20 02:16:22 +08:00
Clansty
24ab79a09a
[O] Comments 2024-11-20 02:08:47 +08:00
Clansty
786a8832d3
[+] Make it configurable 2024-11-19 01:38:29 +08:00
Minepig
4d25b6a43c
Accuracy info and other features (#84)
* tweaks slide fade in

* judge accuracy info

* Update SlideArrowAnimation.cs
2024-11-19 01:32:18 +08:00
Clansty
29bb54d2cc
[O] Show quick skip after 1sec 2024-11-16 18:42:10 +08:00
Clansty
cd075a3559
[F] RatingUpWhenSSSp Algo 2024-11-16 01:47:07 +08:00
Clansty
0455a83ef1
[+] Play Count in SelectionDetail 2024-11-16 00:53:22 +08:00
Clansty
6c5791b1fe
[F] UpsertUserAll Crash with usernames longer than 8 chars 2024-11-14 22:58:20 +08:00
Clansty
705b6cc03d
[F] Maybe fixed some PractiseMode problems 2024-11-14 22:52:40 +08:00
Clansty
b190e54285
[+] TouchResetAfterTrack 2024-11-14 22:52:21 +08:00
Clansty
478db15211
[F] Practice mode crash on AdvDemoProcess 2024-11-06 13:58:07 +08:00
Clansty
1542f3811d
[F] Skip button background 2024-11-06 12:10:20 +08:00
Minepig
85dd8029af
[+] Slide related visual feature (#81)
New Features:
1. Invert the Slide hierarchy
2. Slide Track shrinking animation

Changes:
1. Improve the visual effect of Break-Slide judge blink
2. `DisableTrackStartTabs` now also hide user's best achievement
2024-11-06 11:54:53 +08:00
Clansty
11beb6676e
[+] Show alert in CI builds 2024-11-06 11:40:20 +08:00
Clansty
99d7fe5ca2
[F] SQL 2024-11-04 20:42:37 +08:00
Clansty
248c1ce189
[+] optOutOfLeaderboard 2024-11-04 20:32:50 +08:00
bf972681d5
[+] CardMaker 1.39 support (#79) 2024-11-04 19:18:56 +08:00
Clansty
996632ac73
[O] Allow change maimai name to chinese characters in settings 2024-11-04 19:09:48 +08:00
Clansty
b28a1986c9
[O] Disallow using card/summary to query others' card 2024-11-04 19:00:44 +08:00
Clansty
fb96e93184
[+] Configurable mod key map manager 2024-11-01 17:03:57 +08:00
Clansty
ac4db91df4
[F] userActivityList not unique error 2024-10-31 01:30:18 +08:00
Clansty
408845878b
[+] Increase version code 2024-10-30 07:27:54 +08:00
Clansty
7933d49bb2
[RF] Move some patches to visual 2024-10-28 06:09:42 +08:00
Clansty
6945032077
[RF] Move sub-config classes to their own directory 2024-10-28 05:56:54 +08:00
Clansty
0af137ba8c
[+] Add config entries for new patches (#77) 2024-10-28 05:43:55 +08:00
Clansty
de3d376063
[F] SinglePlayer compatibility with 1.09.00 2024-10-28 00:04:43 +08:00
Clansty
36da872932
[O] Locale 2024-10-27 23:56:26 +08:00
Clansty
ff2ed50dea
[+] Mark supported game versions with attributes 2024-10-27 23:34:41 +08:00
Clansty
6bb2685e03
[+] Generate example config via attributes 2024-10-27 22:44:12 +08:00
Clansty
5eb0424ee7
[F] Bot renderer crash when b35 or b15 is empty 2024-10-27 04:32:02 +08:00
Menci
80536ef4fb [+] New APIs 2024-10-26 02:24:42 +08:00
Clansty
f3bebc6fa2
[F] Fody should merge System.Numerics 2024-10-25 22:16:08 +08:00
Minepig
d0bb3cc75c
[+] Slide code support & split multiple patches (#77)
* 功能拆分

将不同的功能分拆到不同文件

* Slide code notation support

This is part of Maimai DX 2077 patch set.
New MA2 commands: NMSSS, BRSSS, EXSSS, BXSSS, CNSSS
2024-10-25 20:42:08 +08:00
WYH2004
98213cff67
[+] ShowErrorLog (#74)
* [+] ShowErrorLog

* [O] Fixed spelling errors in method names
2024-10-25 20:20:26 +08:00
Clansty
c074de5876
[+] SinglePlayer support legacy game versions 2024-10-25 00:45:12 +08:00
Clansty
906bdfa15e
[+] GUI style 2024-10-24 02:12:36 +08:00
Clansty
e844164cf6
[+] Splash+ support 2024-10-24 01:15:55 +08:00
Clansty
1b47bfa2f1
[F] Unable to save in lower versions 2024-10-24 00:27:04 +08:00
Azalea
33997c9a82
Merge pull request #69 from Becods/v1-dev
[+] Maimai DX Buddies Plus I011
2024-10-22 06:21:55 -07:00
Azalea
4713a44573 [F] Fix #68 2024-10-22 09:20:33 -04:00
Clansty
be7b0945e9
[+] Increase version code 2024-10-22 00:19:43 +08:00
Clansty
0f1bfc5a17
[+] TouchPanelBaudRate 2024-10-22 00:19:12 +08:00
Clansty
3bc9f1382c
[O] Hide skip button after click 2024-10-19 19:56:47 +08:00
Menci
a08e93d975
[F] Refactor CustomCameraId and remove hard-coded enums / IDs (#71)
* refactor

* Add PrintCameraList check

* Separate PrintCameraList to a class

* cleanup
2024-10-19 01:34:53 +08:00
Clansty
91a120599f
[F] Repeat resets speed 2024-10-17 16:52:46 +08:00
Becods
5d399b2497 [+] Maimai DX Buddies Plus I011 2024-10-17 11:11:27 +08:00
WYH2004
0cab18b9b5
[+] CustomCameraId (#66)
* [+] CustomCameraId

* [F] Map CameraType to the correct Camera IDs using enum

* [+] GameInfo Utils

* [+] CustomCameraId Add ChimeCamera Support

* [+] Decide whether to print a CameraList based on the Config
2024-10-17 02:26:44 +08:00
Clansty
903da8732d
[+] keep note speed when changed speed 2024-10-16 19:23:32 +08:00
Clansty
6857ae5182
[F] CurrentPlayMsec conflict with speed settings 2024-10-16 18:59:31 +08:00
Clansty
5bcbffcdf0
[F] Notes shift after set speed 2024-10-16 18:41:07 +08:00
Clansty
953083a0bf
[F] Seek resets speed 2024-10-16 18:11:17 +08:00
Clansty
1810bbe2d5
[+] QuickEndPlay button when notes play end 2024-10-16 01:05:04 +08:00
Azalea
f716ab0c1b
Merge pull request #67 from Becods/v1-dev
[+] Chusan Luminous Plus Events
2024-10-15 06:05:39 -04:00
Clansty
e04e5596a3
[+] IgnoreAimeServerError 2024-10-15 17:05:55 +08:00
Becods
f239d498ad [+] Chusan Luminous Plus A071 2024-10-15 10:35:05 +08:00
Becods
7b768b5b5b [+] Chusan Luminous Plus A000 to A001 2024-10-15 10:06:45 +08:00
Azalea
60813274dc
[F] Forgor to login :( 2024-10-14 15:27:01 +08:00
Azalea
ad5bc4fc0d
[+] Add ghcr.io repo as well 2024-10-14 15:26:02 +08:00
Azalea
c1c6949175
[+] ARM support? 2024-10-14 15:20:02 +08:00
Azalea
26840700ee
[-] Revert docker-compose to using pre-built image 2024-10-14 15:11:52 +08:00
Azalea
ec610de266
[PR] #52 from istareatscreens/add-arm-support
Change docker-compose to support ARM
2024-10-14 03:10:49 -04:00
Azalea
f4129ff5c2
[+] Docker image action 2024-10-14 15:08:48 +08:00
Menci
b8cc6d9809
CI (#62) 2024-10-14 02:05:23 +08:00
Menci
9384d1d96f
[+] Bypass Cake.dll hash check and SSL pinning (#63)
* Bypass Cake.dll hash check and SSL pinning

* Move to BasicFix
2024-10-14 02:04:26 +08:00
Menci
854b6b76a0
Fix headphone volume not set with SkipToMusicSelection (#65) 2024-10-14 02:02:58 +08:00
Menci
bc836e973c
[F] Fix reflect invoking arguments in Shim (#64) 2024-10-14 01:06:15 +08:00
Clansty
bf9855abd1
[O] better _isPlaying detection 2024-10-13 23:54:53 +08:00
WYH2004
4006438d93
[+] TouchToButtonInput On Aquamai (#58)
Co-authored-by: Clansty <i@gao4.pw>
2024-10-13 23:36:28 +08:00
Menci
cdfb86e021
[+] Support official quick retry (3456) in UX/QuickSkip
Merge pull request #60

* Official quick retry
2024-10-13 21:45:14 +08:00
Menci
81e0232712
[O] Support SDGA and other game version in one binary
Merge pull request #61

* Merge targets

* Merge branch 'v1-dev' into fork/Menci/merge-targets

* [O] Move Shim to AquaMai.Helpers

---------

Co-authored-by: Clansty <i@gao4.pw>
2024-10-13 21:38:28 +08:00
Menci
e67b68aa20
[O] Refactor AquaMai.csproj to SDK style (#59)
* SDK style

* Update CI

* remove extra code

* [F] CI build and add CI for PR

* [F] Assembly version info

* [F] Do not generate satellite assembly for locale

---------

Co-authored-by: Clansty <i@gao4.pw>
2024-10-13 20:25:25 +08:00
Clansty
a075de4711
[+] Increase version code 2024-10-08 17:02:25 +08:00
Clansty
6d782352f7
[F] Compatibility for modified package 2024-10-07 23:29:59 +08:00
凌莞~(=^▽^=)
587993c957
Merge pull request #56 from shirokosunaookami/patch-1
Fix QuickRetry when use io4 firmware
2024-10-06 20:59:54 +08:00
shirokosunaookami
aaca3e65ce
Fix QuickRetry when use io4 firmware 2024-10-06 20:57:49 +08:00
Azalea
ce53acdacf [F] Fix bound must be greater than origin 2024-10-05 05:51:55 -04:00
Azalea
a449bac130 [U] Update usage 2024-10-05 05:36:53 -04:00
Azalea
060bd32417 [F] Fix docstring 2024-10-05 05:36:28 -04:00
Azalea
08a1595d3e Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-10-05 05:35:53 -04:00
Azalea
b88c56b67a [F] Fix migrate card setting null for non-null field 2024-10-05 05:35:48 -04:00
Clansty
7deb395fd9
[+] Fix level display everywhere 2024-10-05 00:20:07 +08:00
Clansty
2ef104224b
[O] make image same in two monitors 2024-10-04 23:07:44 +08:00
Clansty
d84b2f3870
[+] CustomLogo 2024-10-04 22:45:48 +08:00
Clansty
7e5467935b
[+] HanabiFix + HideHanabi 2024-10-04 20:48:06 +08:00
Clansty
f7c1714cb8
[+] config file entry 2024-10-04 20:19:51 +08:00
Clansty
12724cea56
[+] Add options 2024-10-04 19:38:02 +08:00
凌莞~(=^▽^=)
2cea66cba5
Merge pull request #55
Customize note skin (just like MajdataView) &  several patches
2024-10-04 19:23:55 +08:00
凌莞~(=^▽^=)
ac01469eac
Merge branch 'v1-dev' into v1-dev 2024-10-04 19:23:16 +08:00
Clansty
cb4cc4e7d9
[F] PractiseMode 2024-10-04 16:12:14 +08:00
Minepig
c648493a9e 自定义皮肤功能 2024-10-04 13:47:07 +08:00
Minepig
a36da6ebde 修复了闲置播放紫谱忘记改touch速度的问题 2024-10-04 13:45:50 +08:00
Minepig
4fd2fc7e00 个人录制谱面确认时用得到的patch 2024-10-04 13:44:51 +08:00
Minepig
39646732b6 增加了BreakSlide判定闪烁、圆弧Slide判定对齐、Wifi判定区分上下 2024-10-04 13:44:20 +08:00
Minepig
8791507aca 修正了Slide在AutoPlay时的轨迹箭头显示 2024-10-04 13:42:53 +08:00
Minepig
c173b2a230 修复连锁Slide的读取逻辑(刹那旅程爆机bug) 2024-10-04 13:41:48 +08:00
Clansty
05d2df623e
[O] update config example 2024-10-04 00:26:54 +08:00
Clansty
e75a1fcd12
[+] PracticeMode config entry 2024-10-03 20:51:42 +08:00
Clansty
529165f2b5
[F] Fix text shadow a little bit 2024-10-03 20:02:10 +08:00
Clansty
9a5743a27e
[+] Show play time on PractiseModeUI 2024-10-03 17:05:00 +08:00
Clansty
271ef9bf00
[F] SinglePlayer without remove mask 2024-10-03 16:40:51 +08:00
Clansty
3a97f7645e
[O] Check object with maybeUserMusicList 2024-10-03 16:06:32 +08:00
Clansty
a84bf9efef
[+] Import from a userMusicDetailList Json 2024-10-03 15:51:18 +08:00
Azalea
daa5129f65 [O] Make a non-callback version of cardByName 2024-10-03 02:47:20 -04:00
Clansty
ac375abf5e
[+] Some font features 2024-10-02 23:28:33 +08:00
Clansty
bae5a7c838
[O] Make HideMask separate component 2024-10-02 19:03:30 +08:00
Clansty
1bcb7210c6
[+] Custom Keymap 2024-10-02 14:41:20 +08:00
Clansty
c15dcf6b98
[+] FrameRate lock + display 2024-10-02 00:52:37 +08:00
Clansty
9ead7a413e
[+] able to switch off WindowState 2024-10-01 15:50:00 +08:00
Clansty
07817b04fb
[F] SelectionDetail window size 2024-10-01 01:10:16 +08:00
Clansty
e65d67f12e
[+] Network error reason 2024-10-01 01:00:32 +08:00
Clansty
e39f013808
[+] Show tip when saving is done 2024-10-01 00:15:55 +08:00
Clansty
c34affc215
[F] Maybe fix practise mode 2024-09-30 14:21:10 +08:00
Clansty
07b8cc04be
[+] i18n 2024-09-30 01:26:54 +08:00
Clansty
78a396ce4b
[F] SelectionDetail Font size
[RF] Move SelectionDetail to Utils
[RF] Remove UrGui
[RF] Refactor SelectionDetail
2024-09-29 23:12:22 +08:00
Clansty
43997f2215
[+] Increase version code 2024-09-29 13:05:51 +08:00
Clansty
e9bac0a737
[O] Disable MipMap 2024-09-29 13:03:54 +08:00
Clansty
e7c69d2a6b
[+] PractiseModeUI 2024-09-28 23:06:06 +08:00
Clansty
8c3400ee41
[O] better get player 2024-09-28 19:42:42 +08:00
Clansty
3d79c939e9
[+] Speed change 2024-09-28 17:35:59 +08:00
Clansty
27b8e6bd21
[+] PractiseMode Debugging 2024-09-28 16:30:19 +08:00
Clansty
24ecaab570
[O] better polyfill load 2024-09-28 15:31:58 +08:00
Clansty
74e39c437d
[+] Window Magic! 2024-09-27 21:50:27 +08:00
Clansty
c1c7788cd3
[O] Auto detect if DebugFeature is need to be patched 2024-09-27 20:18:53 +08:00
Clansty
a2db465825
[+] Skip track start screen 2024-09-27 19:33:37 +08:00
Clansty
9605264b9a
[RF] Move some settings to TimeSavingConfig 2024-09-27 19:19:42 +08:00
Clansty
24e6808984
[+] seeking in DebugFeature 2024-09-27 18:59:27 +08:00
Clansty
0d9c7a4cc2
[F] Default string value 2024-09-24 20:18:10 +08:00
Azalea
3c6ecf1563 [+] Add cat 🐱 2024-09-23 15:57:55 -04:00
Clansty
5c634d6ff9
[+] Telegram and QQ join link 2024-09-22 19:41:47 +08:00
Clansty
6b51155bac
[F] Remove debug log 2024-09-20 02:36:48 +08:00
Clansty
1873ad8355
[+] Increase version code 2024-09-17 11:21:11 +08:00
Clansty
8087396188
[+] TouchSensitivity 2024-09-17 06:25:52 +08:00
Clansty
5128db9f6c
[+] Global judge adjust 2024-09-17 04:13:51 +08:00
Clansty
ef832461c0
[O] Change target name 2024-09-17 03:26:33 +08:00
Clansty
85493cdfd8
[+] Write example config when config not found 2024-09-17 03:24:35 +08:00
Clansty
e557f1361d
[+] Error notice 2024-09-17 02:58:37 +08:00
Clansty
9598ac5a50
[F] Crash with the new modified SDEZ145 DLL with deleted methods 2024-09-17 02:48:07 +08:00
Clansty
5ee7add355
[+] Force Paid play 2024-09-17 02:34:38 +08:00
Clansty
81c1e6e887
[+] Increase version code 2024-09-12 21:56:23 +08:00
Clansty
b7004b3866
[+] Extend notes pool to support some odd charts 2024-09-12 21:54:37 +08:00
Clansty
5341326811
[O] Coming soon! -> Coming soon™ 2024-09-11 01:57:17 +08:00
Clansty
776c08e605
[F] RemoveEncryption error with SDEZ 2024-09-11 01:35:17 +08:00
Clansty
b7c5d18df1
[+] Log user ID on login 2024-09-11 00:56:15 +08:00
Clansty
39dc6c576a
[F] Nested types patches without enable 2024-09-11 00:38:13 +08:00
Clansty
d9fc262003
[F] Nested types patches without enable 2024-09-11 00:26:45 +08:00
Clansty
9b7f2b3a79
fix: Level display shift when level number not match display level 2024-09-08 17:09:38 +08:00
Clansty
1ad4ac2d63
[+] SelfMadeChartsWhiteListUsers 2024-09-07 22:17:01 +08:00
Clansty
9ca7949bf0
[+] Globally disable self made charts 2024-09-07 22:11:01 +08:00
Clansty
d2174364b2
[F] reset HideSelfMadeCharts when enter login screen 2024-09-07 21:27:48 +08:00
Clansty
91238c3a9c
[+] Increase version code 2024-09-07 00:22:43 +08:00
Clansty
d32c8c999b
[O] more accurate genreName and versionName for SelectionDetail 2024-09-06 23:24:44 +08:00
Clansty
6580b78485
[+] Load png TabTitle 2024-09-06 23:15:53 +08:00
Clansty
0eec8dea05
[+] Support 2p SelectionDetail 2024-09-06 17:34:43 +08:00
Clansty
8fa356242e
[+] Port SelectionDetail 2024-09-06 16:41:29 +08:00
istareatscreens
a13611f601 Change docker-compose to support ARM 2024-09-05 08:33:38 -04:00
Clansty
e8307cdcd9
[+] toggle the display of self-made charts 2024-09-05 02:31:07 +08:00
Clansty
ca425cf949
[+] Increase version code 2024-09-04 18:54:27 +08:00
Clansty
9f57d393bf
[F] LoadJacketPng and RandomBgm crash when LocalAssets not exists 2024-09-04 15:32:11 +08:00
Clansty
84c59e2c8b
[+] Support all Melonloader versions 2024-09-04 15:12:32 +08:00
Clansty
212f60db60
[+] Increase version code 2024-09-03 01:11:01 +08:00
Clansty
fbbdb056d7
[O] Retry attempts of action 2024-09-02 23:50:05 +08:00
Clansty
e3c0fe5e78
[+] Also enable shop name display in SDGA when CustomPlaceName is set 2024-09-02 23:15:25 +08:00
Clansty
a3afb1a2b8
[+] Custom shop name in photo 2024-09-02 23:02:47 +08:00
Clansty
ac94b6d917
[F] Uppercase extension 2024-09-02 21:45:47 +08:00
Clansty
8db9580ff5
[+] Restore AutoPlay(Home) and Pause(Enter) for SDGA 2024-09-02 17:35:31 +08:00
Clansty
489c00ebb0
[+] Load Jacket from A???\AssetBundleImages\jacket\*.png 2024-09-02 17:06:34 +08:00
Clansty
d58fe84439
[+] Make ForceAsServer and ForceFreePlay individual components 2024-08-22 20:17:26 +08:00
Clansty
ffe3843747
[i18n] Add zh version of config toml 2024-08-22 02:16:38 +08:00
Clansty
b370af3c19
[F] Remove debug logs 2024-08-22 01:49:41 +08:00
Clansty
cdd3c81bdc
[+] Prevent accidental touch of the Test button 2024-08-20 00:36:41 +08:00
Clansty
eb72839e2b
[+] trigger QuickSkip with service key 2024-08-20 00:00:00 +08:00
Clansty
6457cedd9b
[+] CI build for AquaMai 2024-08-16 19:23:12 +08:00
凌莞~(=^▽^=)
be72ea0c98
Merge pull request #50 from Becods/v1-dev
The play count should be the PC count not the TRACK count.
2024-08-12 14:50:43 +08:00
bf5691bdb6
[F] The play count should be the PC count not the TRACK count. 2024-08-12 12:45:20 +08:00
Clansty
a6a8734599
[+] Setting of score rounding and fix bugs 2024-08-08 14:49:20 +08:00
Clansty
d0aecc76ed
[O] Move general game settings to general tab 2024-08-08 13:50:14 +08:00
Azalea
3b80b8d7f1 [F] Fix wrong implementation in GetUserMapAreaApi
Thanks rinsama for the patch
2024-08-08 00:31:18 -04:00
Clansty
c11bb3be59
[F] Rival may lead to unable to login the game 2024-08-07 19:46:35 +08:00
Clansty
7ee4c14fae
[+] API for bot to ban user from ranking board 2024-08-06 15:13:54 +08:00
Clansty
17a0209c8c
[F] Chuni rating display 2024-08-05 23:34:02 +08:00
Clansty
fc10c05731
[F] export api and game api leaking lastClientId 2024-08-05 21:36:20 +08:00
Clansty
9ef0d0edfb
[F] mai2: Error when rival list empty 2024-08-05 21:15:32 +08:00
Clansty
473f4a4295
[+] mai2: support adding rival 2024-08-05 20:37:18 +08:00
Clansty
94ba1f0b09
[+] AquaMai: Add CalcSpecialNum 2024-08-05 20:37:07 +08:00
Clansty
8903fa268a
[+] CheckServerHash 2024-08-04 12:27:19 +08:00
Clansty
6ad980d471
[F] Encrypt and Decrypt hook run without enabled in config 2024-08-04 12:26:48 +08:00
Clansty
9a6e9c4660
[+] Some API endpoints for bot query 2024-08-02 08:51:24 +08:00
Clansty
f7c842774b
[+] Return AquaNet profile photo as maimai userPortrait 2024-08-01 13:34:54 +08:00
Clansty
fde952fcd9
[+] Add option to disable the legacy aquaviewer api 2024-08-01 09:38:36 +08:00
Clansty
a71c2bd8ec
[+] Import player data, tested with maimai 2024-08-01 08:41:11 +08:00
Clansty
7c4f887ef4
[+] Export maimai userdata 2024-08-01 06:56:31 +08:00
Clansty
b32b0e970c
[+] Add change name for maimai and refactor settings page 2024-07-31 09:03:26 +08:00
Clansty
836f789fc9
[+] Only show UserBox if user played chuni 2024-07-31 07:06:16 +08:00
凌莞~(=^▽^=)
6b71e2f22a
Merge pull request #42 from alexay7/usebox
Added UserBox page (Chunithm)
2024-07-31 05:20:43 +08:00
凌莞~(=^▽^=)
1fa83d3f8f
[+] Add SDGA 1.45 support in README 2024-07-30 01:00:33 +08:00
Clansty
247f8f132b
[F] Some compatability for 2p mode 2024-07-30 00:39:58 +08:00
Clansty
3fcdf38d4a
[F] Game crash on ResultProcess when login as guest 2024-07-29 23:59:30 +08:00
Clansty
0626d1c466
[F] Crash when playing tutorial 2024-07-29 23:38:47 +08:00
Clansty
f0da7c6300
[F] Wrong SQL syntax 2024-07-29 23:08:10 +08:00
Azalea
2554478a38
Merge pull request #47 from Becods/v1-dev
[+] Chusan Luminous A151 to A181
2024-07-29 07:22:28 -07:00
Clansty
d7f24759d8
[+] Allow use any characters in maimai name 2024-07-29 10:25:15 +08:00
Clansty
df3bd6fbec
[+] Allow register-card via http 2024-07-29 06:18:53 +08:00
Clansty
11ab81a484
[F] Upsert error when isNewFavoritemusicList is Null 2024-07-29 06:15:55 +08:00
Becods
91e7a092c4 [+] Chusan Luminous A151 to A181 2024-07-29 05:07:23 +08:00
alexay7
bca5130020 Modify way to get user luid 2024-07-28 03:45:22 +02:00
Clansty
153029abdd
[+] Add Character all unlock 2024-07-28 06:02:19 +08:00
Clansty
03ed3f13f4
[+] Support setting favourite music 2024-07-28 00:56:18 +08:00
Clansty
8c7fd78bd4
[+] Support setting favourite items 2024-07-27 23:58:12 +08:00
Clansty
a813535e3f
[+] Fix DebugInput (MouseTouchPanel) 2024-07-27 05:47:45 +08:00
Clansty
7cae5f8f10
[+] Add 6 new APIs 2024-07-27 00:37:47 +08:00
Clansty
070c19d784
[+] GetGameWeeklyDataApi 2024-07-26 23:59:01 +08:00
Clansty
0833cd8a9b
[+] Basic fix 2024-07-26 23:24:42 +08:00
Clansty
64f3a2db58
[F] Build for SDGA1.45 2024-07-26 22:55:53 +08:00
Azalea
ad8a425d30
Merge pull request #46 from Becods/v1-dev
Player names should allow the use of hiragana and katakana.
2024-07-20 17:29:30 +08:00
40d5c8d79f [F] Player names should allow the use of hiragana and katakana 2024-07-18 20:16:03 +08:00
Clansty
c6e471323f [+] Fixes required to run SDGA 2024-07-09 18:11:06 +08:00
Clansty
60a0c8726e [O] Move SkipVersionCheck to Fix 2024-07-09 16:30:30 +08:00
Clansty
5772ff78e6 [+] Allow login with higher data version 2024-07-09 16:18:54 +08:00
Clansty
222ed29b6c [F] SDGA Support 2024-07-09 16:18:22 +08:00
Azalea
23870523fb
Merge pull request #45 from yuuz233/patch-1
Update game_specific_notes.md
2024-06-27 16:02:08 +08:00
yuzusoft
b1a1d36b66
Update game_specific_notes.md
Latest doc for latest tested working support of game
2024-06-27 10:24:02 +08:00
Clansty
2946c51774 [+] Use the png jacket as bga 2024-06-26 03:11:56 +08:00
Clansty
8b72214780 [+] Load jacket with higher resolution 2024-06-19 21:12:29 +08:00
Clansty
0f701ad2d3 [+] Unlock Utage 2024-06-19 20:57:32 +08:00
Clansty
d686c48a0b [+] Save immediate after playing a song 2024-06-16 17:58:20 +08:00
Clansty
80555f9c96 [F] B50 algorithm 2024-06-15 01:47:18 +08:00
alexay7
ec1155b1ba
Merge branch 'hykilpikonna:v1-dev' into usebox 2024-06-06 23:54:35 +02:00
alexay7
7377386ee2 Fix layout breaks when options are large 2024-06-05 19:43:40 +02:00
alexay7
f4bb1101bf Added UserBox page 2024-06-05 18:57:48 +02:00
Azalea
e44188b830
Merge pull request #40 from alexay7/v1-dev
Filter days with no plays from heatmap
2024-06-05 12:28:00 +08:00
alexay7
c5d81afdf6 Filter days with no plays from heatmap 2024-06-05 02:46:29 +02:00
Clansty
f6d55fec35 [+] Skip "Discovered new area" 2024-05-26 13:36:56 +08:00
Clansty
2ef8219f15 [F] Skip Event Info 2024-05-26 13:21:03 +08:00
Clansty
bf9197b3e4 [F] Game crash after one track with new AIME with SkipToMusicSelection 2024-05-26 12:59:16 +08:00
Clansty
27b1a31436 [+] Quick end game with "select" key 2024-05-26 11:58:04 +08:00
Clansty
9b51c8cab4 [+] Totally disable and hide timer + fix side effects when ExtendTimer is on 2024-05-26 11:28:06 +08:00
Clansty
114a452609 [+] Skip "Dont tap or slide vigorously" and "Bye" when QuickSkip is on 2024-05-26 10:33:29 +08:00
Clansty
ef85156bae [F] Need to press skip multiple time to exit photo edit while ExtendTimer is on 2024-05-26 10:11:29 +08:00
Clansty
e55d17fd08 [+] Skip the wait progress after one player login in 1p mode 2024-05-26 09:40:24 +08:00
Clansty
8b83205b0a [F] Mouse input with 1P mode 2024-05-22 12:04:36 +08:00
Clansty
2251350a4e [+] Change every timer to 200 seconds 2024-05-21 21:17:30 +08:00
Clansty
f106a31990 [+] Unlock maps that are not in this version 2024-05-21 03:49:19 +08:00
Clansty
c9f222583a [+] Play "Master" difficulty on Demo screen 2024-05-20 23:36:52 +08:00
Clansty
13fc51a8a5 [F] May fix sometime custom command not triggered 2024-05-20 22:40:02 +08:00
Clansty
21309cddf0 [+] Execute some command on game idle or on game start 2024-05-20 22:31:27 +08:00
Azalea
86164ba518 [F] Fix link card null 2024-05-17 21:22:13 +08:00
Azalea
8173003144 [F] Fix rating composition null elements, generalize
#35
2024-05-16 11:25:22 +08:00
Azalea
f9c8b00587
[PR] #35 from Becods: i18n and rating page fixes
I18n update and rating page fixes
2024-05-16 11:04:15 +08:00
Becods
b77da0f143 [+] More i18n 2024-05-16 10:48:48 +08:00
Becods
ed955150df [F] If id is 0, skip 2024-05-16 10:43:02 +08:00
Azalea
f282197611
Merge pull request #34 from Becods/v1-dev
[+] Add ongeki b55
2024-05-16 01:53:20 +08:00
Clansty
93ce932d28 [F] Unable to load music Acb 2024-05-15 23:57:55 +08:00
Clansty
29505fa4a3 [F] Disable 2P music 2024-05-15 23:29:42 +08:00
Clansty
991442d5c0 [+] Random old version maimai BGM 2024-05-15 21:01:19 +08:00
Becods
e7b5991dbf [+] Add ongeki b55 2024-05-13 10:13:17 +08:00
Azalea
fb72317c6f [+] AquaMai: Skip event and info screen for new users 2024-05-08 21:47:36 +08:00
Azalea
7992568c0f Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-05-08 21:43:40 +08:00
Azalea
38666b7c99 [O] Try to fix reboot (again) 2024-05-08 21:43:19 +08:00
Azalea
1f3f143ffb
Merge pull request #32 from Becods/v1-dev
[+] Add ongeki 1.45 and supplement missing events
2024-05-06 11:31:52 +08:00
Becods
156ece4bb5 [+] Add ongeki 1.45 and supplement missing events 2024-05-06 11:29:25 +08:00
Clansty
770d1ae689 [F] Modify ImproveLoadSpeed to only skip delays to reduce bugs 2024-05-05 19:54:50 +08:00
Azalea
d7287c48cf
Merge pull request #30 from Becods/v1-dev
[+] Add nginx configuration template
2024-05-01 07:35:10 -04:00
Azalea
b4c329f2f9 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-05-01 19:23:40 +08:00
Azalea
cb2219e2cd [O] Clarify something in the readme 2024-05-01 19:23:36 +08:00
65f0bfa8a4
[+] Add nginx configuration template 2024-05-01 01:26:08 +08:00
Clansty
7090e0a47b [F] Play Activity maybe missing last several days of current month 2024-04-30 23:43:04 +08:00
Azalea
fbb4d61194 [U] Update readme features 2024-04-28 09:38:17 -04:00
Azalea
634b0b50ff [F] Fix disable reboot patch 2024-04-28 09:13:22 -04:00
Azalea
7ff66e9277 [+] AquaMai: Disable reboot 2024-04-28 09:04:46 -04:00
Azalea
b93cc3ab20 [F] Fix migration 2024-04-28 08:17:59 -04:00
Azalea
55e7052189 [+] Migrate: Remove signed IDs 2024-04-28 08:15:13 -04:00
Azalea
5a9808de59 [F] Narrow id range to avoid the signed bit in uint32 2024-04-28 07:48:44 -04:00
Azalea
a30b34df70 [F] Fix mai reboot? 2024-04-26 11:19:45 -04:00
Azalea
482b19dd5a [F] Fix mai reboot? 2024-04-26 11:15:07 -04:00
Azalea
7895ed89f1 [+] Add SDGA and SDGB to AllNet 2024-04-26 00:13:24 -04:00
Azalea
8449853076 [F] Fix maimai reboot time setting 2024-04-26 00:11:50 -04:00
Azalea
affec8d3c1 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-04-25 17:38:43 -04:00
Azalea
362b69d921 [F] Fix maimai2 reboot window? 2024-04-25 17:38:36 -04:00
Azalea
9d463c7b4a
[U] Updating instructions 2024-04-25 14:35:49 -07:00
Azalea
cd7da64794 [O] Pre-build docker image 2024-04-25 17:25:14 -04:00
Azalea
5c95f2971f [F] Fix CRLF 2024-04-25 17:16:20 -04:00
Azalea
ab3f3f0633 [F] Fix windows WSL2 volume bug 2024-04-25 16:57:12 -04:00
Azalea
ba61ac46d1 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-04-25 16:48:45 -04:00
Azalea
48205d8a6c [U] Update running instructions 2024-04-25 16:48:43 -04:00
Clansty
b4cbb1fd14 [+] Load AssetBundle without manifest 2024-04-23 18:51:49 +08:00
Clansty
c8db3ec762 [+] Skip to next step or restart current song 2024-04-23 17:34:50 +08:00
Azalea
f6cf157930 [+] Last played host 2024-04-22 11:17:16 -04:00
Azalea
4a84a9ed8e [F] Fix tooltip pos 2024-04-22 10:57:51 -04:00
Azalea
dbb41ba249 [O] Hide loading 2024-04-22 10:43:55 -04:00
Azalea
d3adec5a23 [+] Leaderboard hover 2024-04-22 10:30:34 -04:00
Azalea
1fd030f909 [+] User card 2024-04-22 10:29:55 -04:00
Azalea
b6dfeb475d [+] Slot tooltip 2024-04-22 10:29:45 -04:00
Azalea
39050c6de6 [-] Remove logging 2024-04-22 09:17:30 -04:00
Azalea
c36926c915 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-04-22 09:16:04 -04:00
Azalea
3bf3241bd7 [O] Advanced achievement rounding 2024-04-22 09:15:57 -04:00
Clansty
df863e879f [+] Feature for load self-made charts jacket from file 2024-04-22 20:59:08 +08:00
Azalea
b13af00061 [O] B50 tooltip & hide unknown song level 2024-04-22 08:58:47 -04:00
Azalea
1c2215a8a2 [O] Reduce displayed digits 2024-04-22 08:48:32 -04:00
Azalea
555ae35bb9 [F] Fix mai2 rating calculation 2024-04-22 08:46:22 -04:00
Azalea
8337a1698e [U] Upgrade yarn 1 -> 4, update dependencies 2024-04-21 22:40:36 -04:00
Azalea
f0bfa96937 [F] Fix AquaNet ghost card detection 2024-04-21 14:53:50 -04:00
Azalea
7b143dd38f [+] More logging 2024-04-21 14:45:56 -04:00
Clansty
5201c5933c [+] B15 in user detail 2024-04-22 01:55:15 +08:00
Azalea
4c1d501856 [F] Fix b50 NPE 2024-04-21 13:43:44 -04:00
Azalea
e001533f33 [F] Fix diva migration sql 2024-04-20 14:20:09 +09:00
Azalea
c854dd9a45 [F] Fix ranking username conflict 2024-04-20 11:25:37 +09:00
Azalea
4215b39539 [F] Try to fix wacca uint overflow 2024-04-20 09:37:34 +09:00
Azalea
8e882aafa1 [F] Fix register error not displaying 2024-04-19 16:05:57 +09:00
Azalea
25edbf06c7 [F] Fix account card linking 2024-04-18 21:47:13 +09:00
Azalea
4f05365da3 [F] Fix results not saved 2024-04-18 12:30:36 +09:00
Azalea
bf7de99524 [+] NFKC Normalization before processing 2024-04-18 11:37:40 +09:00
Azalea
08c27b6c58 [+] Automatically ban people with unacceptable names 2024-04-18 11:30:18 +09:00
Azalea
60661757c6 [+] Safety moderation 2024-04-18 11:29:02 +09:00
Azalea
5ba64483fb [+] OpenAI Settings in application properties 2024-04-18 09:12:34 +09:00
Azalea
a30c9391eb [F] Fix null pointer 2024-04-17 00:06:32 +09:00
Azalea
7023e726bd Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-04-17 00:03:47 +09:00
Azalea
c616ea81c6 [S] Make b35 look better 2024-04-17 00:03:35 +09:00
Azalea
65f8b587af [S] Fix tooltip startup glitch 2024-04-16 23:48:41 +09:00
Azalea
14f6b9c759 Merge branch 'b50-dev' of https://github.com/colasama/AquaDX into v1-dev 2024-04-16 23:44:30 +09:00
Clansty
c83e0f8cff [F] Fix Chime scanning and (maybe) DX Pass crash 2024-04-12 00:40:29 +08:00
Azalea
2bf86423c9
[PR] #28 from clansty: CustomVersionString
Feature: Custom version display string
2024-04-10 15:36:51 -04:00
凌莞~(=^▽^=)
8dc3035b66
Merge branch 'v1-dev' into feat/CustomVersionString 2024-04-11 03:20:12 +08:00
Azalea
0aff0330e7
[U] Update config description 2024-04-10 07:13:54 -07:00
Azalea
41852f2467
[PR] #29 from clansty: ImproveLoadSpeed
Feature: Option to disable some useless checks and delays to speedup the game boot process
2024-04-10 02:10:35 -04:00
Clansty
442ec76828 [+] Option to disable some useless checks and delays to speedup the game boot process 2024-04-08 17:02:14 +08:00
Clansty
d8fc14e71b [+] Custom version string feature 2024-04-08 15:03:43 +08:00
Azalea
2630d32764 [F] Fix card controller after pdid change 2024-04-07 04:06:17 -04:00
Azalea
74d7eff577 [F] Fix DIVA pd_id overflow 2024-04-06 23:36:00 -04:00
Azalea
355c9e2a3d [+] Counter measure 2024-04-03 08:08:02 -04:00
Azalea
501bf06ada [S] Better mobile alignment 2024-04-02 20:34:20 -04:00
Azalea
4574bc0b2f [F] Fix responsive 2024-04-02 20:25:23 -04:00
Azalea
c6c91b84fe [F] Fix wacca rating calculation 2024-04-02 06:26:18 -04:00
Azalea
066b33e3e8 [F] Fix wacca invalid music 2024-04-02 02:33:32 -04:00
Azalea
15002c45d6 [O] Rewrite chusan item handler 2024-04-02 02:13:20 -04:00
Azalea
b41f3b9370 [F] Fix jvm name clash 2024-04-02 02:07:39 -04:00
Azalea
02e2700e96 [O] Make always vip configurable 2024-04-02 02:04:42 -04:00
Azalea
6441dfd219 [+] Wacca item unlocks 2024-04-02 01:56:42 -04:00
Azalea
1e229c12cc [+] Wacca cheat options 2024-04-02 01:56:31 -04:00
Azalea
4219f2db5b [+] Wacca items 2024-04-02 01:44:12 -04:00
Azalea
36ce636093 [-] Don't display AAA 2024-04-02 01:27:07 -04:00
Azalea
47f09f81ff [U] Correct wacca scoring 2024-04-02 01:26:24 -04:00
Azalea
bfa6df904d [O] Proper ticket unlock for wacca 2024-04-02 00:56:59 -04:00
Azalea
99d4f55c50 [+] Chinese i18n for user settings 2024-04-02 00:28:35 -04:00
Azalea
7728b4b1ab [M] Move setting descriptions to i18n 2024-04-02 00:16:34 -04:00
Azalea
6a475434ad [F] Fix typo 2024-04-02 00:09:14 -04:00
Azalea
876a0bd108 [+] Implement game options 2024-04-02 00:07:50 -04:00
Azalea
ba13bfd9ad [+] SDK for settings/get settings/set 2024-04-01 23:51:13 -04:00
Azalea
44bab8c0c7 [+] Add "type" field to settings/get 2024-04-01 23:51:00 -04:00
Azalea
2d229b82c3 [+] Game settings tab 2024-04-01 23:38:15 -04:00
Azalea
c6cce7aa9a [S] Fix css label box overflow 2024-04-01 23:37:45 -04:00
Azalea
5cbf09f24e [F] Fix splash 2024-04-01 23:27:19 -04:00
Azalea
3ca7d3d615 [U] Update i18n interface 2024-04-01 23:18:50 -04:00
Azalea
25840be694
[U] Update readme jdk version 2024-04-01 19:58:15 -07:00
Azalea
34ab608425
[U] Readme: Add license details 2024-04-01 19:49:50 -07:00
Azalea
b498160b3a
[+] CC BY-NC-SA License 2024-04-01 19:37:18 -07:00
Azalea
23aae3b5b9 [F] Fix test build 2024-04-01 22:30:49 -04:00
Azalea
97fdd096a8 [F] Fix music info parsing 2024-04-01 22:19:29 -04:00
Azalea
0d21a02da9 [F] Fix wacca music unlock 2024-04-01 22:17:11 -04:00
Azalea
ab94250b05 [+] Wacca: Unlock all music 2024-04-01 22:12:14 -04:00
Azalea
42ca6f79dc [F] Force color output 2024-04-01 21:59:47 -04:00
Azalea
646795b753 [+] Wacca username character constraint 2024-04-01 21:54:54 -04:00
Azalea
de649915e2 [U] Upgrade to JDK 21 2024-04-01 21:48:08 -04:00
Azalea
0093f5a0de Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-04-01 21:05:04 -04:00
Azalea
686b50eeda [F] Fix chusan export 2024-04-01 21:04:49 -04:00
Azalea
0c93b85024 [F] Fix docker build
Closes #24
2024-04-01 14:04:19 -04:00
Azalea
49d4e88022 [F] Fix chusan import reflection 2024-03-31 11:53:36 -04:00
Azalea
3a8616e225 [+] Generalize data import for chusan 2024-03-30 23:52:29 -04:00
Azalea
d4178c85a9 [F] Fix wacca song unlock (!) 2024-03-30 20:49:40 -04:00
Azalea
de46790bdf [F] Fix wacca song unlock (?) 2024-03-30 20:31:56 -04:00
Azalea
c27070ae28 [F] Fix ongeki userId overflow 2024-03-30 19:40:47 -04:00
Azalea
bb4c9477da [F] Fix wacca logging 2024-03-29 21:11:28 -04:00
Colanns
95e78e4f93 [+] Add a B50 / rating page to frontend 2024-03-29 23:49:08 +08:00
Azalea
d3d7b5a5c7 [O] Don't translate game name 2024-03-29 09:15:48 -04:00
Azalea
45a3d74284 [F] Fix wacca query 2024-03-29 09:02:30 -04:00
Azalea
cd972b5c61 [+] Add wacca to frontend 2024-03-29 08:20:37 -04:00
Azalea
341be8bdc1 [+] Add wacca to card controller 2024-03-29 08:20:21 -04:00
Azalea
101c24edc5 [+] Add wacca support to readme 2024-03-29 05:58:27 -04:00
Azalea
be34915cdf [+] Wacca: Calculate player rating server side 2024-03-29 05:53:00 -04:00
Azalea
70aed1d5db [+] Wacca endpoints 2024-03-29 05:45:41 -04:00
Azalea
d8c1144881 [-] Remove spring devtools 2024-03-29 05:13:43 -04:00
Azalea
68ec7f504a [+] Wacca NET controller (incomplete) 2024-03-29 05:13:22 -04:00
Azalea
3ab2b16042 [+] Chusan 216 events 2024-03-29 05:12:54 -04:00
Azalea
d7fc6f9f49 [F] Fix music difficulty unlock conflict 2024-03-29 02:58:25 -04:00
Azalea
26a72244c0 [M] Rename database fields 2024-03-29 00:47:54 -04:00
Azalea
abc21badb1 [+] Wacca: More database fields 2024-03-29 00:24:02 -04:00
Azalea
aa1caacfd6 [F] Fix AllNet Wacca path 2024-03-29 00:09:40 -04:00
Azalea
3663eb63e7 [F] Fix maimai2 UpsertUserChargelogApi (TODO) 2024-03-29 00:09:27 -04:00
Azalea
e885700680 [+] wacca user/goods/purchase 2024-03-28 23:34:38 -04:00
Azalea
d6170d602a [+] wacca user/trial/update 2024-03-28 23:34:26 -04:00
Azalea
4dbb287e11 [-] Remove version 2024-03-28 23:34:05 -04:00
Azalea
e537e0f115 [U] Update migration 2024-03-28 23:19:51 -04:00
Azalea
3613d7a37b [+] user/trial/get, user/vip/get, user/vip/start 2024-03-28 23:19:05 -04:00
Azalea
b5e98f505f [O] Code cleanup 2024-03-28 22:45:34 -04:00
Azalea
3dc9ca6822 [+] Wacca api progress 2024-03-28 22:36:50 -04:00
Azalea
e13ddeaaad [+] user/music/unlock 2024-03-28 22:07:03 -04:00
Azalea
56ce7f9696 [F] Wacca fix impl details 2024-03-28 20:17:33 -04:00
Azalea
4ebddf78ed [F] Wacca: Fix handle 2024-03-28 19:08:59 -04:00
Azalea
2682165da8 [+] Wacca: user/info/update 2024-03-28 19:05:54 -04:00
Azalea
373e7dc8ad [+] Wacca: user/status/update 2024-03-28 19:05:46 -04:00
Azalea
0551f8bff1 [+] Wacca: user/rating/update 2024-03-28 19:05:35 -04:00
Azalea
b4454cc812 [+] Wacca: Fix test inconsistency, error handling 2024-03-28 19:05:19 -04:00
Azalea
40fb1c8868 [O] Wacca: Simplify data storage, re-init database 2024-03-28 19:04:16 -04:00
Azalea
f97cb4a1bb [F] Fix integer list converter behavior on empty lists 2024-03-28 19:02:21 -04:00
Azalea
56d0786702 [+] Wacca more tests 2024-03-28 11:09:29 -04:00
Azalea
d880ecd709 [+] Wacca user/music/update 2024-03-28 11:09:12 -04:00
Azalea
1bee9e19e6 [+] Wacca user/mission/update 2024-03-28 11:09:01 -04:00
Azalea
c5879ae5a7 [+] Wacca user/sugoroku/update 2024-03-28 11:08:48 -04:00
Azalea
64f458e15a [F] Fix consecutive login 2024-03-28 11:08:33 -04:00
Azalea
2fa5d09fc9 [O] Redesign wacca score model 2024-03-28 11:08:09 -04:00
Azalea
d6fc60e02b [F] Wacca user/status/getDetail 2024-03-28 07:05:32 -04:00
Azalea
bb9bfd6396 [+] Wacca user/status/GetDetail 2024-03-28 05:57:07 -04:00
Azalea
0fbe139e8d [F] Fix wacca db constraints 2024-03-28 05:56:52 -04:00
Azalea
571591f021 [O] Unify item interface 2024-03-28 05:24:05 -04:00
Azalea
8a1d2383b8 [+] Wacca user/status/login tests 2024-03-28 03:37:26 -04:00
Azalea
00c5edcea7 [+] Wacca user/status/login 2024-03-28 03:37:14 -04:00
Azalea
39d62099df [F] Fix status return 2024-03-28 02:51:41 -04:00
Azalea
c5d6f6f5b9 [+] Wacca user/status/create 2024-03-28 02:50:44 -04:00
Azalea
13f3cf1e90 [+] Test constants 2024-03-28 02:10:39 -04:00
Azalea
93f6bf8ba3 [+] Wacca user/status/get 2024-03-28 02:10:25 -04:00
Azalea
1cdbed51cd [F] Fix long casting 2024-03-28 01:56:23 -04:00
Azalea
50ae04bb4e [+] Wacca test (incomplete) 2024-03-28 01:22:16 -04:00
Azalea
a55d503faa [F] Fix allnet compression 2024-03-28 01:14:29 -04:00
Azalea
7fc4f83eb5 [F] Fix test build 2024-03-28 01:05:13 -04:00
Azalea
bc831b4d30 [F] Fix filter 2024-03-28 01:00:59 -04:00
Azalea
c6190146aa [F] Fix zlib compression happening after response commit 2024-03-28 00:58:55 -04:00
Azalea
3f01152a4a [+] More extensions 2024-03-27 23:11:05 -04:00
Azalea
ad5c652a8f [+] Return wacca url for AllNet 2024-03-27 23:10:52 -04:00
Azalea
9609db941b [+] Wacca server handler (incomplete) 2024-03-27 23:10:41 -04:00
Azalea
bbb8447f5c [+] Wacca constants & repos 2024-03-27 23:09:13 -04:00
Azalea
22ca06af3e [+] Wacca request model 2024-03-27 23:08:58 -04:00
Azalea
af11758190 [+] Exclude wacca in compression filter 2024-03-27 23:08:22 -04:00
Azalea
32fcc25ea4 [F] mai2 error response 2024-03-27 23:07:27 -04:00
Azalea
b3fcf8dd5e [F] Fix mai2 error response 2024-03-27 23:05:46 -04:00
Azalea
b7d2a97f05 [O] Separate register function 2024-03-27 22:42:05 -04:00
Azalea
ad13875137 [O] Separate common functions for tests 2024-03-27 22:39:27 -04:00
Azalea
e14a131480 [F] Fix wacca db migration for MariaDB 11.3.2 2024-03-27 04:48:04 -04:00
Azalea
64ba0db228 [F] Fix memory leak 2024-03-27 00:52:21 -04:00
Azalea
c99d8e7e75 [O] More cleanup, return 400 for bad requests 2024-03-26 23:03:40 -04:00
Azalea
305d1cea94 [O] Disable integration tests on build 2024-03-26 22:31:49 -04:00
Azalea
f314b3982e [F] Fix mai event id 2024-03-26 22:27:12 -04:00
Azalea
5ea2615b93 [O] Collapse basic handlers 2024-03-26 22:26:29 -04:00
Azalea
17123fec35 [F] Remove redundant fields in GetUserMap, LoginBonus, UserExtend, UserData 2024-03-26 20:52:40 -04:00
Azalea
73d05e7cbf [F] Fix bearer discrepency 2024-03-26 20:51:10 -04:00
Azalea
3380ea3609 [F] Fix mai2 username encoding check 2024-03-26 20:50:57 -04:00
Azalea
101527d3e1 [U] Update testing properties 2024-03-26 20:50:30 -04:00
Azalea
df9ab3250c [+] Maimai2 play simulation testing 2024-03-26 20:49:40 -04:00
Azalea
d533df52de [F] Fix maimai2 user item 2024-03-26 20:22:38 -04:00
Azalea
d2cf16d046 [F] Fix username decoding 2024-03-26 18:51:17 -04:00
Azalea
40a65b5e13 [+] gzip & deflate 2024-03-26 18:09:27 -04:00
Azalea
fa33cb680e
[PR] #23 from Teud/v1-dev
Add maimai 1.40 H061 events
2024-03-25 22:50:48 -04:00
Teud
2757eb91ce fix 2024-03-25 23:12:00 +01:00
Teud
2842429ced Add maimai 1.40 H061 events 2024-03-25 23:04:16 +01:00
Azalea
fb2a26c5b7 [F] Fix dependencies 2024-03-25 14:21:14 -04:00
Azalea
cab1dc8838 [O] Set all items to valid 2024-03-25 14:18:04 -04:00
Azalea
0ec76dcde3 [F] JsonIgnore ID 2024-03-25 14:15:49 -04:00
Azalea
c41046953e [F] Fix user item isValid field 2024-03-25 14:15:03 -04:00
Azalea
30f740a430 [-] Remove old code 2024-03-25 13:56:49 -04:00
Azalea
1e8c0ce99b [O] Optimize mai2 GetUserMusic 2024-03-25 13:56:30 -04:00
Azalea
aa3a3d9181 [F] Fix chusan playlog integer overflow 2024-03-25 13:40:41 -04:00
Azalea
6d0f528201 [F] Fix ongeki upsert all: UserData might be empty list 2024-03-25 13:39:00 -04:00
Azalea
131cd5915c [F] Fix chusan user cmission saving bug 2024-03-25 13:29:49 -04:00
Azalea
f5512fa162 [F] Fix db: Make user_id non-null 2024-03-25 03:07:28 -04:00
Azalea
484bb758ae [+] Wacca database models 2024-03-25 03:06:28 -04:00
Azalea
89461893a4 [+] Allow ftk as an auth token 2024-03-23 12:22:32 -04:00
Azalea
54e865feb2 [O] Optimize GetUserItemApi loading speed 2024-03-23 07:19:58 -04:00
Azalea
015fa3dc9f [F] Fix maimai2 events 2024-03-23 07:01:00 -04:00
Azalea
cf015be49f [F] Fix maimai get rating crash for some users 2024-03-23 05:53:56 -04:00
Azalea
b6c8993f7e [F] Fix total achievement overflowing int32 max 2024-03-23 02:24:10 -04:00
Azalea
1ef37d91e8 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-03-22 16:59:47 -04:00
Azalea
7fc81cf363 [+] Add chusan 220 events 2024-03-22 16:59:42 -04:00
Azalea
123bf9de34
[U] Update README.md 2024-03-22 13:11:06 -07:00
Azalea
d3f6b75d34 [F] Fix reflection 2024-03-22 15:17:27 -04:00
Azalea
a5fe5f53e2 [+] chusan: Luminous 2024-03-22 15:09:29 -04:00
Azalea
e91029f66e [F] Fix merge conflicts 2024-03-22 15:06:31 -04:00
Azalea
2a7ce54c28 Merge dev.s-ul.net:rinsama/aqua into v1-dev 2024-03-22 14:58:41 -04:00
HoshimiRIN
f3b2d4dc57 [chusan]fix build issue 2024-03-22 14:51:52 +08:00
HoshimiRIN
95b9871f7f [chusan]add support for luminous 2024-03-22 14:29:43 +08:00
Azalea
533af83749 [O] Don't jsonignore id 2024-03-21 22:28:42 -04:00
Azalea
e4330fee92 [F] Fix artemis conversion 2024-03-21 04:09:48 -04:00
Azalea
5fec57e8e3 [+] Add artemis import endpoint 2024-03-21 04:04:23 -04:00
Azalea
95a06d572b [F] Fix mai2 import 2024-03-21 03:59:35 -04:00
Azalea
cc8c125934 [F] Fix deleting data on import 2024-03-21 01:07:25 -04:00
Azalea
91c605ee4b [F] Fix unique constraints on user detail 2024-03-21 01:00:52 -04:00
Azalea
f44fe4def1 [+] Mai2 Import feature done! 2024-03-21 00:36:23 -04:00
Azalea
7c0a1ea089 [F] Fix mai2 entity nullability 2024-03-21 00:36:00 -04:00
Azalea
ce5c4d1111 [F] Fix userid nullability 2024-03-21 00:35:57 -04:00
Azalea
98952972a0 [+] Add cascade relationship to user-mapped fks 2024-03-21 00:05:58 -04:00
Azalea
f728b6ab1b [O] Check username 2024-03-20 22:43:03 -04:00
Azalea
e799b48877 [O] Huge refactor 2024-03-20 21:27:29 -04:00
Azalea
fc8ecb7470 [+] More work on import feature (TODO) 2024-03-20 18:52:11 -04:00
Azalea
ac18234e29 [+] Spring devtools dependency 2024-03-20 17:57:34 -04:00
Azalea
59b17aa47e [+] Check sqlite before application start 2024-03-20 17:54:16 -04:00
Azalea
9155bfb886 [+] SDGS support 2024-03-20 13:01:57 -04:00
Azalea
cbe683d25e [F] Fix matching server 2024-03-20 12:57:01 -04:00
Azalea
64f057a415 [F] Fix build 2024-03-20 12:46:08 -04:00
Azalea
3da308346e [O] Unify even more BaseHandlers 2024-03-20 12:45:46 -04:00
Azalea
313dd681de [+] Import (TODO) 2024-03-20 12:33:33 -04:00
Azalea
aaf7e1e3e5 [+] Chusan export version support 2024-03-20 12:32:34 -04:00
Azalea
9f831fd8b5 [O] Refactor chusan controller 2024-03-20 12:32:14 -04:00
Azalea
450397481e [M] Unify BaseHandler 2024-03-20 12:24:31 -04:00
Azalea
6fb8978f48 [+] Chusan playlog sunplus fields 2024-03-20 05:13:47 -04:00
Azalea
4a7bf4b31e [+] Chusan artemis import 2024-03-20 05:09:42 -04:00
Azalea
38e94210e4 [+] Jackson datetime parsing 2024-03-20 05:08:57 -04:00
Azalea
d338809750 [M] Generalize artemis import code 2024-03-20 04:17:35 -04:00
Azalea
7fd7e17d1d [+] mai2 artemis import script 2024-03-20 02:00:28 -04:00
Azalea
a5a5bd80c4 [+] Helper to read sql file 2024-03-20 01:59:21 -04:00
Azalea
d264ca1ed4 [+] Custom json deserializers 2024-03-20 01:59:08 -04:00
Azalea
85dd19509c [M] Move class 2024-03-19 21:04:07 -04:00
Azalea
faf1945933 [M] Move packages 2024-03-19 21:02:24 -04:00
Azalea
3c6d6ff702 [-] Ignore log files 2024-03-19 20:52:20 -04:00
Azalea
c6ecc89ad3 [+] user-detail endpoint 2024-03-19 20:52:04 -04:00
Azalea
abed79441d [U] Upgrade to kotlin 2.0.0-Beta4 2024-03-19 20:22:28 -04:00
Azalea
906199a517 [+] Change in-game settings 2024-03-19 19:58:00 -04:00
Azalea
6f34c21d94 [O] Optimize startup speed 2024-03-18 18:56:44 -04:00
Azalea
9ba1a68b51 [F] Fix setting api 2024-03-18 18:56:16 -04:00
Azalea
073c72fd63 [F] Fix error response 2024-03-18 09:34:37 -04:00
Azalea
3ac4af1558 [F] Fix typo 2024-03-18 09:33:33 -04:00
Azalea
5057f6848f [+] Settings api 2024-03-18 09:32:14 -04:00
Azalea
b3955731c2 [+] Maimai item unlock 2024-03-18 05:31:55 -04:00
Azalea
af83cf552e [S] Coming soon message 2024-03-18 04:03:26 -04:00
Azalea
a0426044e8 [+] i18n for home page 2024-03-18 03:57:58 -04:00
Azalea
432635d567 [F] Fix entrypoint 2024-03-18 03:06:27 -04:00
Azalea
02b78320ec [+] Better logging 2024-03-18 03:06:05 -04:00
Azalea
f1461f905d [+] i18n for status messages 2024-03-18 01:55:22 -04:00
Azalea
e1cdb3ab65 [F] More detailed error handling 2024-03-18 01:37:57 -04:00
Azalea
6218424be3 [O] Better error handling 2024-03-18 01:32:57 -04:00
Azalea
5a9b7e296f [O] Reduce loc 2024-03-18 01:32:38 -04:00
Azalea
f4cc9c7734 [F] Fix maimai music unlock 2024-03-18 01:32:00 -04:00
Azalea
e0c7998448 [+] DB cleanup 2024-03-18 01:31:39 -04:00
Azalea
752d65557f [+] Unlock option database model 2024-03-18 01:31:28 -04:00
Azalea
a952674df7 [+] Maimai music unlock 2024-03-17 02:03:58 -04:00
Azalea
25f5f6e1f7 [+] Maimai export 2024-03-17 00:12:02 -04:00
Azalea
0f1d6c0984 [O] Remove unnecessarily long constructors 2024-03-16 22:50:08 -04:00
Azalea
8dd4bb9d61 [M] Rename 2024-03-16 22:14:18 -04:00
Azalea
98275ade59 [O] Refactor chusan repos 2024-03-16 22:09:21 -04:00
Azalea
95cc9f0e21 [M] Rename 2024-03-16 21:41:17 -04:00
Azalea
742ea50c2c [O] More simplification 2024-03-16 21:35:17 -04:00
Azalea
54b1174e1b [O] Refactor maimai2 repositories 2024-03-16 19:50:05 -04:00
Azalea
e07de72fa4 [O] Generalize ranking and find by card 2024-03-16 19:22:08 -04:00
Azalea
13b4af3734 [M] Move files 2024-03-16 19:10:22 -04:00
Azalea
29566a6c93 [O] Make unclickable when no data is available 2024-03-15 01:33:07 -04:00
Azalea
7669f7d9a0 [O] Refactor 2024-03-15 01:26:52 -04:00
Azalea
5913d5b585 [F] Fix script 2024-03-15 01:13:18 -04:00
Azalea
d9a332de44 [+] Display rating details 2024-03-15 01:10:15 -04:00
Azalea
e85533686e [F] Fix detailed ranks 2024-03-15 00:37:30 -04:00
Azalea
0100140dc0 Revert "[+] Detailed ranks"
This reverts commit a9893379f4421eb08f2834ff8aaf70257811c65b.
2024-03-14 23:21:30 -04:00
Azalea
8def9e8931 [F] Fix link 2024-03-14 22:59:26 -04:00
Azalea
6fc2f26983 [O] Optimize fonts 2024-03-14 22:55:11 -04:00
Azalea
ed1ed6cbe9 [+] Leaderboard i18n 2024-03-14 22:41:23 -04:00
Azalea
10d19a5392 [+] Switching games in leaderboard 2024-03-14 22:35:36 -04:00
Azalea
7bbd90ab91 [+] Emphasize registered users 2024-03-14 22:23:48 -04:00
Azalea
9565d48b04 [F] Fix "no-data" 2024-03-14 22:15:19 -04:00
Azalea
284d366b44 [+] Ranking for different games 2024-03-14 22:15:10 -04:00
Azalea
a9893379f4 [+] Detailed ranks 2024-03-14 22:11:04 -04:00
Azalea
50677ad81d [F] Fix no data when a user hasn't played maimai 2024-03-14 21:47:39 -04:00
Azalea
71d7fcbe65 [+] Get user games endpoint 2024-03-14 21:47:14 -04:00
Azalea
8342acbd49 [F] Fix heatmap displaying even when plays is 0 2024-03-06 17:04:51 -05:00
Azalea
d5296763ad [O] Do not overwrite println in gendocs 2024-03-06 10:49:02 -05:00
Azalea
73efa4fe91 [U] Update docs 2024-03-06 10:46:11 -05:00
Azalea
82f573e1a1 [O] More information to frontier endpoint 2024-03-06 10:42:31 -05:00
Azalea
4ef0ac3fee [F] Fix typo 2024-03-06 10:37:06 -05:00
Azalea
bc246f39d2 [+] Frontier endpoint 2024-03-06 10:34:12 -05:00
Azalea
f9af23dbca [+] More i18n 2024-03-06 10:33:31 -05:00
Azalea
68f8ef0b24 [O] More i18n 2024-03-06 10:17:04 -05:00
Azalea
16f6acf8fc [+] More i18n 2024-03-06 10:13:08 -05:00
Azalea
3faa5b2f52 [F] Fix typo 2024-03-06 09:57:05 -05:00
Azalea
04a7c068f4 [M] Fix typos 2024-03-06 09:52:37 -05:00
Azalea
92dee27634 [F] Fix i18n typing 2024-03-06 09:51:03 -05:00
Azalea
7dda25f96b
Merge pull request #22 from chiba233/v1-dev
[U] update i18n.ts type and more intuitive
2024-03-06 09:32:49 -05:00
chiba
40f700910a Update UseHome.svelte I18n support 2024-03-06 21:18:27 +08:00
chiba
aa90b34511 [F] FIX i18n.ts type 2024-03-06 17:19:51 +08:00
chiba
45cf082bb9 [F] FIX i18n.ts type 2024-03-06 16:23:45 +08:00
chiba
0ab78983d4 [U] update i18n.ts type and more intuitive 2024-03-06 16:17:06 +08:00
Azalea
e137210cbc [S] Better title 2024-03-06 01:33:47 -05:00
Azalea
3093755c9e [S] Better heading style 2024-03-06 01:31:16 -05:00
Azalea
94c4950d23 [O] i18n placeholders 2024-03-06 01:25:08 -05:00
Azalea
fa0a624b7c [O] Infer language 2024-03-06 01:21:11 -05:00
Azalea
f3fabe1708 [+] i18n 2024-03-06 01:20:28 -05:00
Azalea
52ec890e2c [+] Show aqua net pfp instead of in-game pfp 2024-03-06 00:37:35 -05:00
Azalea
2a10471e0b [O] Don't expose all fields 2024-03-06 00:35:44 -05:00
Azalea
94c1974d2f [O] Just pass through aquanetuser instead. 2024-03-06 00:26:34 -05:00
Azalea
f0a8014efb [+] Add profile picture in game summary 2024-03-06 00:25:02 -05:00
Azalea
96cac6ca68 [O] Optimize imports 2024-03-06 00:21:27 -05:00
Azalea
0da50bc693 [F] Fix profile path 2024-03-06 00:20:04 -05:00
Azalea
1169ac44b4 [-] Remove path concat 2024-03-06 00:18:28 -05:00
Azalea
38367279ff [F] Fix upload paths 2024-03-06 00:16:53 -05:00
Azalea
ef00cfbddd [+] Serve uploads directory 2024-03-06 00:07:57 -05:00
Azalea
e514e4b64e [+] Wrapper for pfp path 2024-03-05 23:35:49 -05:00
Azalea
f1af07e921 [+] UI for uploading profile picture 2024-03-05 23:27:08 -05:00
Azalea
44cf022e70 [F] Fix profile file name extension 2024-03-05 23:26:11 -05:00
Azalea
7e68de5a17 [F] Fix profile picture upload api 2024-03-05 23:24:41 -05:00
Azalea
51f73d77bf [F] Fix felica lookup v2 2024-03-05 22:34:53 -05:00
Azalea
fa4ccf07b8 [+] Implement user settings 2024-03-05 22:18:38 -05:00
Azalea
49da7aafd0 [O] Show edit profile button only if it's me 2024-03-05 19:36:23 -05:00
Azalea
58ca71baaa [+] Tooltip 2024-03-05 19:32:36 -05:00
Azalea
2c550a0874 [S] Unify border radius 2024-03-05 19:19:05 -05:00
Azalea
dcb671acd8 [+] Profile setting button in home 2024-03-05 19:09:43 -05:00
Azalea
56600d3f27 [O] Change default hosts 2024-03-05 18:22:20 -05:00
Azalea
6913f7bdf5 [F] Fix types
#21
2024-03-05 18:21:32 -05:00
Azalea
bcc2d286ed [+] Display profile picture
#21
2024-03-05 18:21:05 -05:00
Azalea
aed6c2123f [F] Fix type nullability 2024-03-05 18:20:03 -05:00
Azalea
68626fecd7 [+] Add profile picture field to aqua net user 2024-03-05 17:59:44 -05:00
Azalea
441d7376cb [+] Upload pfp endpoint 2024-03-05 17:56:33 -05:00
Azalea
c9ac38de01 [+] Optimize upload photo 2024-03-05 17:56:16 -05:00
Azalea
b9c063c41e [O] Reject unauthenticated aimedb requests 2024-03-05 14:47:02 -05:00
Azalea
55804be70e [F] Fix code suggestions
Closes #20
2024-03-05 14:25:11 -05:00
Azalea
2b749af917 [+] Filter dates on frontend 2024-03-05 03:44:16 -05:00
Azalea
9378dfdd04 [F] Fix graph logic 2024-03-05 03:41:23 -05:00
Azalea
46768c77b7 [S] Hide heatmap scrollbar and automatically scroll to right 2024-03-05 03:32:55 -05:00
Azalea
ff9358b986 [F] Fix index out of bounds 2024-03-05 03:22:53 -05:00
Azalea
f3090870be [O] Don't filter on backend 2024-03-05 03:22:07 -05:00
Azalea
666fbe8ce7 [+] Display no data 2024-03-05 03:21:49 -05:00
Azalea
67b29851ea [F] Fix utage song info 2024-03-05 02:53:04 -05:00
Azalea
1a2cd201a7
Merge pull request #18 from chiba233/v1-dev
improve UserHome.svelte song level and music name
2024-03-05 02:51:40 -05:00
Azalea
5041bf67a5
Merge branch 'v1-dev' into v1-dev 2024-03-05 02:51:33 -05:00
Azalea
1a2f3bf80e [F] Fix user page css text overflow 2024-03-05 02:50:00 -05:00
chiba
d7a231eb18 improve UserHome.svelte song level and music name 2024-03-05 15:41:01 +08:00
Azalea
21c9c190aa Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-03-04 21:18:26 -05:00
Azalea
a781c2d665 [-] Delete unused files 2024-03-04 21:18:17 -05:00
Azalea
09c3ce3164
[PR] #17 from chiba233/v1-dev
improve LinkCard.svelte more intuitive
2024-03-04 21:08:16 -05:00
Azalea
a7888a63fa [F] Fix typing 2024-03-04 21:05:32 -05:00
chiba
79dd56d017 improve LinkCard.svelte when click button clean input 2024-03-04 23:37:56 +08:00
chiba
882d04f50c add .editorconfig to improve multiple developers working 2024-03-04 23:30:47 +08:00
chiba
a7fd414ce6 improve LinkCard.svelte more intuitive 2024-03-04 22:26:48 +08:00
Azalea
eb30451cfa [O] Aimedb: ignore invalid requests 2024-03-03 18:01:27 -05:00
Azalea
a48f2b1f17 [-] Remove jsonignore for playlog id 2024-03-03 17:48:13 -05:00
Azalea
d3665d64a6 [+] Default game endpoint 2024-03-03 17:46:40 -05:00
Azalea
a4bbc9c3c6 [+] Recent endpoint 2024-03-03 17:46:22 -05:00
Azalea
b0ffda42bc [+] User profile game switching 2024-03-03 17:10:13 -05:00
Azalea
b333045d41 [F] Fix out of bounds 2024-03-03 17:09:55 -05:00
Azalea
ef5d0a81eb [O] Display relative time in rating chart 2024-03-03 15:31:59 -05:00
Azalea
48819c10a9 [O] Better trend graph 2024-03-03 14:53:18 -05:00
Azalea
9ae23e4395 [F] Fix import 2024-03-03 14:46:55 -05:00
Azalea
4d36efebb7 [U] Update app version 2024-03-03 14:45:24 -05:00
Azalea
e842a37654 [+] Display splash and app version in frontend 2024-03-03 14:45:15 -05:00
Azalea
c821626dc1 [+] Remake self test 2024-03-03 14:32:21 -05:00
Azalea
16aba9ff96 [O] Render gradient splash text using HyLogger 2024-03-03 14:26:27 -05:00
Azalea
a11bfdb13b [F] Reset turnstile after login error 2024-03-03 12:30:52 -05:00
Azalea
c0437e55eb [F] Fix token invalidation 2024-03-03 12:24:20 -05:00
Azalea
279bcbfeab [+] More instructions 2024-03-03 02:00:32 -05:00
Azalea
6555263496 [F] Fix discord page link 2024-03-03 01:05:23 -05:00
Azalea
8db4e17a8a [F] Fix login redirect logic 2024-03-03 01:00:36 -05:00
Azalea
4a5bd3135f [O] More logging 2024-03-03 00:47:57 -05:00
Azalea
32eb98361a [+] Redirect option 2024-03-03 00:29:48 -05:00
Azalea
2ba5073d55 [M] Rename project & prepare for 1.0.0 2024-03-03 00:00:33 -05:00
Azalea
9ea5e2cd90 [-] Disable plain jar 2024-03-02 23:59:03 -05:00
Azalea
284a1f0b57 [S] Better hover transition 2024-03-02 23:32:32 -05:00
Azalea
7b97f3d535 [S] Blur for loading 2024-03-02 23:19:25 -05:00
Azalea
fb431fcc7b [+] Add discord link in setup instructions 2024-03-02 23:15:28 -05:00
Azalea
b16100e627 [S] Minor text inconsistency 2024-03-02 23:08:50 -05:00
Azalea
fde6b5df9b [S] Minor adjustments 2024-03-02 23:07:01 -05:00
Azalea
dc1ac106c0 [-] Remove unused code 2024-03-02 23:04:29 -05:00
Azalea
0d4a26c05e [+] Action card 2024-03-02 23:03:55 -05:00
Azalea
ffe7a9294b [+] Home action cards 2024-03-02 23:03:46 -05:00
Azalea
15004b6ba2 [S] Better home page tab styling 2024-03-02 20:22:11 -05:00
Azalea
dfd8d1b0c9 [-] Remove the unnecessary clz shorthand 2024-03-02 19:55:52 -05:00
Azalea
c2fef3fa25 [+] Home page tabs 2024-03-02 19:48:29 -05:00
Azalea
d33c892303 [+] Better fading 2024-03-02 19:47:45 -05:00
Azalea
e4ce97cf5d [+] Add UI constants 2024-03-02 19:45:08 -05:00
Azalea
f331916bd5 [O] Use better error and loading 2024-03-02 19:32:16 -05:00
Azalea
5d3194dd41 [O] Better loading and error display 2024-03-02 19:29:35 -05:00
Azalea
f2574b516e [F] Fix: Automatically redirect users if not logged in 2024-03-02 19:27:13 -05:00
Azalea
9ee3e973c1 [+] Add discord invite url 2024-03-02 19:26:55 -05:00
Azalea
eb9e797017 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-03-02 11:53:21 -05:00
Azalea
d0c305b3eb [+] Playlog api 2024-03-02 11:53:19 -05:00
Galexion
db2a7208da AquaNet: got typescript to stop yelling at me, it was driving me up a wall 2024-03-01 23:16:14 -05:00
Galexion
e8958f5e53 AquaNet: Added Loading Circle 2024-03-01 01:37:59 -05:00
Azalea
8acee1251f [+] Return card id in ranking 2024-03-01 00:45:57 -05:00
Azalea
acf117e43b [O] Use user{id} instead 2024-03-01 00:42:39 -05:00
Azalea
ed1b7f477b [F] Not extId 2024-03-01 00:40:57 -05:00
Azalea
63cf1f5fa1 [+] Allow querying card user ids 2024-03-01 00:38:33 -05:00
Azalea
fa9b738cba Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-03-01 00:30:38 -05:00
Azalea
3efbefe4c5 [+] Limit user creation 2024-03-01 00:30:37 -05:00
Galexion
dcb797db38 AquaNet: Make Registered users on Ranking Page link back to their user profile 2024-03-01 00:16:58 -05:00
Azalea
8f9f9e9e82 [F] Fix code overflow on mobile 2024-02-29 23:59:49 -05:00
Azalea
642754a46b Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-02-29 23:57:52 -05:00
Galexion
a5578335d3 AquaNet: Append to make Error Message h2 not use margin-top 2024-02-29 22:50:58 -05:00
Galexion
c4309aa14c AquaNet: Added an Error Message trigger to pages that didn't telegraph to the user that there was an error before. 2024-02-29 22:48:41 -05:00
Azalea
af3eb10034 [+] Cache ranking 2024-02-29 19:31:38 -05:00
Azalea
88b7804123 [O] Simplify userlogin 2024-02-29 18:31:05 -05:00
Azalea
4a383521d7 [+] Properly update last access time for card 2024-02-29 18:30:20 -05:00
Azalea
279b65cfa0 [+] Return username in ranking 2024-02-29 18:29:37 -05:00
Azalea
6ce644ea18 [F] Fix NPE when no play data is found 2024-02-29 16:57:23 -05:00
Azalea
9ef5e8d037 [F] Fix user id being null 2024-02-29 16:53:02 -05:00
Azalea
a9e14a93dd [F] Fix mai2 playlog by introducing a backlog 2024-02-29 16:24:56 -05:00
Azalea
8e2c0d8653 [F] Fix transition 2024-02-29 11:21:29 -05:00
Azalea
39a19fd9e6 [F] Fix accuracy calculation 2024-02-29 11:14:13 -05:00
Azalea
68e1a0489f [S] Style ranking 2024-02-29 11:07:44 -05:00
Azalea
ece64c3f4a [F] Fix ranking typing 2024-02-29 10:42:22 -05:00
Azalea
37f67469a6 [F] Fix keychip flow
q
2024-02-29 10:38:12 -05:00
Azalea
a1b546152b [-] Remove unnecessary tests 2024-02-29 10:30:48 -05:00
Azalea
3ae1f6c556 Merge branch 'v1-dev' of https://github.com/hykilpikonna/AquaDX into v1-dev 2024-02-29 10:30:00 -05:00
Azalea
14757e2a35 [F] Fix gradle build 2024-02-29 10:29:55 -05:00
Galexion
d20a762dd8 AquaNet Ranking Page: Dived and classed instead 2024-02-29 01:05:07 -05:00
Galexion
5ff79f5ee1 Leaderboard Rough Draft 2024-02-29 00:59:05 -05:00
Azalea
afe28733db [+] Setup instructions: Segatools configruation 2024-02-29 00:50:29 -05:00
Azalea
5e5fe6013d [+] Install shiki dependnecy 2024-02-29 00:49:53 -05:00
Azalea
3f0196c8f8 [+] Keychip sdk 2024-02-29 00:49:24 -05:00
Azalea
4e38cf9d40 [+] Keychip endpoint 2024-02-29 00:48:55 -05:00
Azalea
6026f6aebd [+] Export aqua connection host 2024-02-29 00:25:57 -05:00
Azalea
856bcf1647 [+] Aqua connection host in config 2024-02-29 00:25:06 -05:00
Azalea
8e7196181c [F] Fix accuracy 2024-02-29 00:08:48 -05:00
Azalea
beb6697507 [F] Fix all perfect count 2024-02-28 23:37:27 -05:00
Azalea
fd482d32a7 [+] Ranking endpoint 2024-02-28 22:09:53 -05:00
Azalea
10169b03ce [+] API Doc generator 2024-02-28 20:52:23 -05:00
Azalea
5f4a7cd7c9 [+] API documentation 2024-02-28 20:45:38 -05:00
Azalea
59b52b8a47 [F] Fix delete transaction 2024-02-28 20:08:45 -05:00
Azalea
02bffab38f [F] Fix #16 2024-02-28 20:07:31 -05:00
Azalea
256f08396f [+] Setup instrcutions page 2024-02-28 17:55:52 -05:00
Azalea
988a280111 [S] Blockquote styling 2024-02-28 17:55:44 -05:00
Azalea
7a44a457d5 [F] Fix another DIVA endpoint 2024-02-28 17:21:08 -05:00
Azalea
2fa153e569 [F] Fix diva request mapping 2024-02-27 23:47:05 -05:00
Azalea
b589c78cfc [+] More logging for Diva compression 2024-02-27 23:16:45 -05:00
Azalea
293acbcc03 [O] Hide unnecessarily long EOF error for Diva compression 2024-02-27 22:55:43 -05:00
Azalea
be0a841926 [F] Fix downloadOrder typo 2024-02-27 22:52:31 -05:00
Azalea
763cbfa656 [F] Fix full combo count 2024-02-27 22:46:49 -05:00
Azalea
d149b02c06
Merge pull request #14 from Sensokaku/patch-1
Fix playtime
2024-02-27 19:38:21 -05:00
Sensokaku
b83773dfa6
Fix playtime
Playtime wasn't being showing up correctly till I removed one of the 60's
2024-02-28 05:36:39 +08:00
Azalea
c992701387 [S] Fix level color 2024-02-27 13:34:06 -05:00
Azalea
bf43944c27 [S] Fix level color 2024-02-27 13:33:41 -05:00
Azalea
6dbed875e1 [F] Fix interface treated as repository 2024-02-27 13:21:16 -05:00
Azalea
5166387f34 [O] Generalize card migration 2024-02-27 13:17:27 -05:00
Azalea
b44121597f [F] Fix apis 2024-02-26 23:19:10 -05:00
Azalea
f086b8abe9 [+] Image on error 2024-02-26 23:18:03 -05:00
Azalea
795da9557b [O] Better url scheme 2024-02-26 20:17:39 -05:00
Azalea
76249cb8f7 [+] Chunithm adaptation 2024-02-26 20:17:30 -05:00
Azalea
f4c4162e4b [+] Add game api in sdk 2024-02-26 20:17:06 -05:00
Azalea
902cc9009e [M] Move scoring to separate file 2024-02-26 20:16:49 -05:00
Azalea
d93c2ee267 [+] More types 2024-02-26 20:16:31 -05:00
Azalea
e5b864f07e [+] No profile profile image 2024-02-26 20:16:17 -05:00
Azalea
8df4cd3dd6 [+] No cover cover image 2024-02-26 20:16:10 -05:00
Azalea
2fdb6f15cb Merge branch 'master' into v1-dev 2024-02-26 17:06:35 -05:00
Azalea
c7e493d7f5 [F] Fix null 2024-02-26 17:05:32 -05:00
Azalea
043537a7b4 [F] Fix null 2024-02-26 16:38:54 -05:00
Azalea
e7643f3894 [F] Fix beans 2024-02-26 15:14:11 -05:00
Azalea
bb2c8ae8e5 [+] Ongeki adaptor 2024-02-26 15:08:45 -05:00
Azalea
1c8860c596 [F] fix shown ranks 2024-02-26 15:08:22 -05:00
Azalea
66e65fcd14 [+] chu3 rating composition 2024-02-26 12:09:17 -05:00
Azalea
7cef8f24db [-] Remove mysql 2024-02-26 11:59:53 -05:00
Azalea
a82f3a7b07 [U] Add maimai 140 fields 2024-02-26 11:59:30 -05:00
Azalea
4f41068c99 Merge branch 'master' into v1-dev 2024-02-26 11:58:49 -05:00
Azalea
50dfb95c48 [+] Chusan user summary 2024-02-26 11:55:43 -05:00
Azalea
0b29ac00a7 [+] Generalize game trend & summary apis 2024-02-26 11:54:31 -05:00
Azalea
759519d374
[PR] #13 from Becods: Extra fields from bud
[+] Extra fields from bud
2024-02-26 10:40:14 -05:00
Becod
3d713b13da [+] Extra fields from bud 2024-02-26 21:42:00 +08:00
Azalea
fcbe52539a [F] Fix extra slash in url 2024-02-26 00:42:29 -05:00
Azalea
bcd64286cd [U] Update migration 2024-02-26 00:38:14 -05:00
Azalea
b89147120c [+] Find session when validating request 2024-02-26 00:32:38 -05:00
Azalea
c9ffd3cd11 [F] Fix overlapping filter 2024-02-26 00:29:15 -05:00
Azalea
cd62f31c17 [+] Add authentication token at poweron 2024-02-26 00:29:00 -05:00
Azalea
98d63b880b [U] Update default config 2024-02-26 00:28:30 -05:00
Azalea
04e11b0fea [+] Keychip session 2024-02-26 00:23:51 -05:00
Azalea
a873b28d9b [O] Reject unauthenticated requests 2024-02-25 23:21:34 -05:00
Azalea
b1b2ff6b8c [+] Securing allnet requests 2024-02-25 23:09:56 -05:00
Azalea
cb96b5fa8f [M] Move game URLs 2024-02-25 21:42:58 -05:00
Azalea
eb960209bf [+] Rewrite billing 2024-02-25 21:11:52 -05:00
Azalea
51a0e46f8c [+] Rewrite allnet 2024-02-25 20:23:06 -05:00
Azalea
1251205fdd [+] Map extensions 2024-02-25 20:22:09 -05:00
Azalea
9a05629144 [O] Reduce duplicate code 2024-02-25 17:58:04 -05:00
Azalea
e0c71006d5 [O] Remake maimai2 user summary api 2024-02-25 17:22:12 -05:00
Azalea
3d716a516a [M] Rename field 2024-02-25 17:21:50 -05:00
Azalea
096648b2d7 [O] Simplify class name for logging 2024-02-23 02:14:33 -05:00
Azalea
02e57707de Merge branch 'master' into v1-dev 2024-02-23 00:12:08 -05:00
Azalea
20468e612d Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-23 00:11:05 -05:00
Azalea
af3aa497d1 [O] Better understanding of the data type of different games 2024-02-22 23:51:22 -05:00
Azalea
bb53d1448b [O] Better logging 2024-02-22 23:50:58 -05:00
Azalea
eccdd73908 [+] Backend card linking 2024-02-22 22:45:24 -05:00
Azalea
1d4e1a8be2 [O] Better logging 2024-02-22 22:45:08 -05:00
Azalea
8dc0f299a9 [-] Remove global logger field 2024-02-22 22:38:21 -05:00
Azalea
db1ffd5091 [-] Remove unnecessary beans 2024-02-22 22:37:07 -05:00
Azalea
64a27e5708 [O] Speed up bootup by making email init async 2024-02-22 22:36:48 -05:00
Azalea
214a356135 [O] Better logging 2024-02-22 22:19:21 -05:00
Azalea
84f7953f21 [F] Fix encryption 2024-02-22 22:19:12 -05:00
Azalea
a9a947203d [O] Reduce code 2024-02-22 21:22:08 -05:00
Azalea
8f250e755e [O] Refactor AimeDB 2024-02-22 20:55:13 -05:00
Azalea
30a7fa7ead [O] Convert more stuff to kotlin 2024-02-22 19:47:35 -05:00
Azalea
4324d655d2 [M] Refactor relevant stuff to kotlin 2024-02-22 19:33:51 -05:00
Azalea
da1be9226a [S] Bottom padding 2024-02-22 19:11:25 -05:00
Azalea
5597bf5d1e [O] Show confirm dialog when unlinking a card 2024-02-22 19:06:18 -05:00
Azalea
50029fbb24 [F] Fix TS errors 2024-02-22 19:00:14 -05:00
Azalea
f5c2dc747d [+] Unlink frontend 2024-02-22 18:31:59 -05:00
Azalea
dd55e336e4 [+] API for unlinking 2024-02-22 18:20:54 -05:00
Azalea
a001a45cc4 [M] Rename: Bind -> Link 2024-02-22 18:19:55 -05:00
Azalea
49320ff623 [M] Move LinkCard component 2024-02-22 18:17:23 -05:00
Azalea
8e898c50b4 [O] Ghost cards should not be guessed 2024-02-22 18:14:58 -05:00
Azalea
5fa93e2a2a [F] Fix lateinit issue 2024-02-22 18:11:22 -05:00
Azalea
178cca1611 [O] Reduce bits for DIVA 2024-02-22 17:31:10 -05:00
Azalea
9e543e2c5a [+] Add isGhost to card 2024-02-22 17:29:28 -05:00
Azalea
6a16e5534d [+] Sanitize card id when creating card 2024-02-22 17:29:13 -05:00
Azalea
2d1cad870b [S] Always put ghost card at the top 2024-02-22 17:07:01 -05:00
Azalea
3fdf255ca5 [F] Use bigint 2024-02-22 17:06:50 -05:00
Azalea
ec9225dbf2 [+] Iconify tools 2024-02-22 17:06:40 -05:00
Azalea
b469fe92dd [+] Link card when not found 2024-02-22 16:39:00 -05:00
Azalea
dbc54b016c [O] Check if already linked 2024-02-22 12:30:28 -05:00
Azalea
2cbad36f80 [+] Check card is linked 2024-02-22 12:26:27 -05:00
Azalea
8b21f33eb6 [-] Remove sensitive info 2024-02-22 10:52:09 -05:00
Azalea
1e8ff7dbc0 [+] Create new card if not exists 2024-02-22 10:51:49 -05:00
Azalea
0937915839 [+] Link card limit on the backend 2024-02-22 10:51:22 -05:00
Azalea
a128546954 [+] Add field isBound to Card 2024-02-22 10:31:13 -05:00
Azalea
806953d107 [S] Unify transition style 2024-02-22 10:30:43 -05:00
Azalea
afa39b29ed [+] Implement link conflict resolution 2024-02-22 10:30:28 -05:00
Azalea
4c899555dd [S] Style overlay 2024-02-22 10:00:28 -05:00
Azalea
3e8395b0c6 [+] Show card conflicts 2024-02-22 10:00:18 -05:00
Azalea
a620f02d57 [-] Remove test dialect 2024-02-21 17:43:03 -05:00
Azalea
79a078fb70 [+] Automatically invalidate token on expiry 2024-02-21 17:42:42 -05:00
Azalea
cac2f49b06 [+] Card summary sdk 2024-02-21 17:42:15 -05:00
Azalea
06993b9d66 [S] Style existing cards, display card type 2024-02-21 15:03:49 -05:00
Azalea
fce5ca592a [S] Style existing cards 2024-02-21 14:26:12 -05:00
Azalea
e7058cf3c8 [+] Show existing cards 2024-02-21 14:14:38 -05:00
Azalea
a2eeac786e [+] /user/me sdk 2024-02-21 14:14:28 -05:00
Azalea
ff7873313b [+] Check while typing 2024-02-21 13:59:40 -05:00
Azalea
f3b06ac0a6 [+] Input validation for card SN 2024-02-21 13:47:58 -05:00
Azalea
00e57fc17d [+] Bind card element 2024-02-21 13:37:13 -05:00
Azalea
c8cc59aaca [S] Adjust input visibility 2024-02-21 13:37:01 -05:00
Azalea
54057922f6 [O] Better clazz 2024-02-21 13:36:21 -05:00
Azalea
c175173821
Merge pull request #12 from Zaphkito/master
Add maimai 140 h041 event data
2024-02-21 05:46:55 -05:00
zaphkito
52e9285551 Add maimai 140 h041 event data 2024-02-21 18:39:39 +08:00
Azalea
823eea1f0a [F] Fix card detection 2024-02-21 04:28:38 -05:00
Azalea
ae03a700de [S} Fix mobile view 2024-02-21 01:23:44 -05:00
Azalea
a089eade6e [S] Make letter spacing reponsive to font size 2024-02-21 01:15:52 -05:00
Azalea
f8fb3d8a70 [+] Router logo 2024-02-21 01:15:30 -05:00
Azalea
00a75f154e [F] Fix asking for email confirmation when email feature is disabled 2024-02-21 01:14:58 -05:00
Azalea
8d2313d799 [-] Remove comments in build.gradle 2024-02-21 00:44:44 -05:00
Azalea
0b8384fc3b [+] Home page 2024-02-21 00:42:04 -05:00
Azalea
73ab9efdb4 [S] Globalize content css 2024-02-21 00:15:31 -05:00
Azalea
705f69510b [F] Fix import, clear query param 2024-02-21 00:15:17 -05:00
Azalea
f7e0a33935 [+] Verify email workflow 2024-02-21 00:11:45 -05:00
Azalea
729015d719 [+] SDK confirmEmail 2024-02-21 00:11:31 -05:00
Azalea
d83127a265 [+] Check email confirmation on login 2024-02-21 00:02:58 -05:00
Azalea
6e8f7ae698 [F] Fix one-to-one relationship in email confirmation 2024-02-21 00:02:04 -05:00
Azalea
17ee24286c [+] Add a verify email state, state switching animation 2024-02-20 23:19:17 -05:00
Azalea
133140bf71 [O] Rename home to welcome 2024-02-20 18:46:15 -05:00
Azalea
5fafbf9ee8 [+] Login form 2024-02-20 18:44:15 -05:00
Azalea
6085da15a4 [S] Style input 2024-02-20 18:43:56 -05:00
Azalea
b93caf1839 [U] yarn upgrade 2024-02-20 18:43:42 -05:00
Azalea
c9787a521b [+] SDK 2024-02-20 18:41:59 -05:00
Azalea
26cabef74c [F] Export turnstile site key 2024-02-20 18:32:42 -05:00
Azalea
8d2474768b [S] More color variables 2024-02-20 18:32:25 -05:00
Azalea
a87146a401 [+] Svelte turnstile 2024-02-20 18:29:59 -05:00
Azalea
bbf5ee5395 [+] Add mariadb migration 2024-02-20 17:43:35 -05:00
Azalea
103ae607be [F] Forgot to save ;-; 2024-02-20 16:26:10 -05:00
Azalea
6f63998000 [O] Ignore serial id 2024-02-20 16:19:06 -05:00
Azalea
a94952babc [O] Reduce code 2024-02-20 16:18:43 -05:00
Azalea
4b8385419e [O] Limit exposure of fields 2024-02-20 16:16:11 -05:00
Azalea
878a543818 [F] Fix infinite recursion on serializing user card 2024-02-20 16:12:08 -05:00
Azalea
e7337777cd [F] Set last login time in login 2024-02-20 16:11:50 -05:00
Azalea
fa1ed52c32 [+] Bind card 2024-02-20 16:06:46 -05:00
Azalea
eda3fccb51 [F] Fix RNG 2024-02-20 16:01:07 -05:00
Azalea
ec55fae1ec [+] Settings API 2024-02-20 15:47:25 -05:00
Azalea
c88a98e355 [+] Separate user validator 2024-02-20 15:47:17 -05:00
Azalea
0567e0f251 [+] Add @ API macro 2024-02-20 15:46:48 -05:00
Azalea
befa7d0e8e [+] Extend jwt auth block 2024-02-20 15:45:25 -05:00
Azalea
91913da205 [+] Card summary 2024-02-20 02:01:15 -05:00
Azalea
cd8677a26d [+] Try lookup id function 2024-02-19 21:49:55 -05:00
Azalea
adf091e300 [O] Use randExtId 2024-02-19 21:49:09 -05:00
Azalea
aa3b831a68 [O] Separate randExtId 2024-02-19 21:48:42 -05:00
Azalea
ab075c0554 [F] Fix ghost card column 2024-02-19 21:46:43 -05:00
Azalea
4202012bbd [+] Confirm email 2024-02-19 21:05:24 -05:00
Azalea
739854935d [+] Create ghost card on registration 2024-02-19 21:05:17 -05:00
Azalea
3d88e734df [+] Add ghostCard for user 2024-02-19 21:04:57 -05:00
Azalea
a716a69b8b [F] Fix tests 2024-02-19 21:03:38 -05:00
Azalea
7ac7aacb6c [O] Refactor code 2024-02-19 20:58:16 -05:00
Azalea
7368001e3b [+] Send confirmation email on register 2024-02-19 06:59:32 -05:00
Azalea
574e0b4074 [+] Generate email 2024-02-19 06:59:13 -05:00
Azalea
5d258eb8e1 [+] Computed name for user 2024-02-19 06:59:00 -05:00
Azalea
5715fa97f7 [+] Email confirmation table 2024-02-19 06:58:51 -05:00
Azalea
7fe869b98b [+] Email template 2024-02-19 06:58:40 -05:00
Azalea
37aaa30387 [+] Add email web host option 2024-02-19 06:58:26 -05:00
Azalea
c3b2d7653f [+] Add email border 2024-02-19 06:34:59 -05:00
Azalea
cb22161156 [+] Add email confirmation field 2024-02-19 05:09:36 -05:00
Azalea
6ad06c2d75 [F] Fix json parsing 2024-02-19 05:09:23 -05:00
Azalea
b291dd0ad7 [-] Remove dialect 2024-02-19 04:54:44 -05:00
Azalea
3039a32f29 [F] Fix CORS 2024-02-19 04:51:01 -05:00
Azalea
a8f5380070 [-] Remove unnecessary mariadb dialect 2024-02-19 04:48:14 -05:00
Azalea
e37867b9db [O] Disable whitelabel error page 2024-02-19 04:43:09 -05:00
Azalea
110d6c81ee [+] Add /me endpoint 2024-02-19 04:42:50 -05:00
Azalea
3da44ce604 [-] Remove duplicate email self test 2024-02-19 04:42:11 -05:00
Azalea
9770c15188 [+] JWT.auth 2024-02-19 04:39:40 -05:00
Azalea
cc568d9569 [F] Fix token too short 2024-02-19 04:39:28 -05:00
Azalea
500a4b0b7e [M] Move security config 2024-02-19 04:35:08 -05:00
Azalea
55cfb7b358 [+] Login 2024-02-19 03:21:49 -05:00
Azalea
77b2f90259 [F] Fix response syntax limitation 2024-02-19 03:16:35 -05:00
Azalea
e962baaf48 [M] Move services to components package 2024-02-19 03:07:32 -05:00
Azalea
2cb5b18975 [+] JWT class 2024-02-19 03:06:42 -05:00
Azalea
32084eb1e7 [F] Fix: Email and username should ignore case 2024-02-19 03:06:30 -05:00
Azalea
2815d76b1d [+] JWT authentication settings 2024-02-19 02:40:00 -05:00
Azalea
9c4f146778 [O] More checks 2024-02-19 02:29:45 -05:00
Azalea
7b89016359 [F] Fix runtime dependency issue 2024-02-19 02:26:20 -05:00
Azalea
c7a4902af0 [F] Ignore geoip not found error 2024-02-19 02:26:01 -05:00
Azalea
6f9b686317 [F] Fix error reporting 2024-02-19 02:25:50 -05:00
Azalea
16550e7a83 [O] Better error messages 2024-02-19 02:25:41 -05:00
Azalea
a9aa47e390 [U] Update config 2024-02-19 01:57:56 -05:00
Azalea
0846fb94db [F] Fix null case 2024-02-19 01:57:42 -05:00
Azalea
4c3aafd266 [O] Unwrap spaghetti code 2024-02-19 01:49:29 -05:00
Azalea
1e606f8b85 [+] Add username check 2024-02-19 01:38:42 -05:00
Azalea
58596377b1 [+] Add username field 2024-02-19 01:38:30 -05:00
Azalea
94a3234874 [O] CORS allow all 2024-02-19 01:37:50 -05:00
Azalea
7e9db5b52d [+] GeoIP service 2024-02-19 01:36:53 -05:00
Azalea
dc098d1ec7 [O] Make data dir if not exist 2024-02-19 01:36:39 -05:00
Azalea
195a8b4315 [+] GeoLite settings 2024-02-19 01:36:18 -05:00
Azalea
7df80bc56a [+] GeoIP library 2024-02-19 01:35:34 -05:00
Azalea
1c541a4adf [F] Fix rating calculation 2024-02-19 00:39:43 -05:00
Azalea
f29f563e50 [F] Fix null pointer 2024-02-19 00:39:27 -05:00
Azalea
f4280c0768
Merge pull request #11 from Zaphkito/master
Maimai 140 h031 event data and charge data
2024-02-18 15:57:25 -05:00
zaphkito
295ae14658 Add maimai2 charge 2024-02-19 04:40:48 +08:00
zaphkito
ccc2bcffce Maimai 140 h031 event data 2024-02-19 04:12:53 +08:00
Azalea
3a94ef57e3 [+] Email service 2024-02-17 04:16:16 -05:00
Azalea
db8d8db280 [+] Email settings 2024-02-17 04:04:39 -05:00
Azalea
fdcef95d07 [+] Simple java mail 2024-02-17 04:04:14 -05:00
Azalea
7b1d9a777d [+] Email settings 2024-02-17 03:45:49 -05:00
Azalea
3cd8764dbf [+] Turnstile site key 2024-02-17 03:30:05 -05:00
Azalea
32826440cb [F] Fix spring autowire for AquaNetUser 2024-02-17 01:43:52 -05:00
Azalea
a65fa8cf10 [U] Finalize mysql migration guide 2024-02-17 01:33:34 -05:00
Azalea
0ae29b1920 [+] Write mysql migration guide 2024-02-17 01:07:23 -05:00
Azalea
5748a11788 [-] Completely drop mysql support 2024-02-17 01:07:09 -05:00
Azalea
7d3579af4f [-] Drop mysql support 2024-02-17 00:37:06 -05:00
Azalea
e0dc3bd1f4 [+] Validate captcha 2024-02-17 00:31:40 -05:00
Azalea
6200c56144 [+] User registration endpoint 2024-02-17 00:25:40 -05:00
Azalea
0b4a0eeb55 [+] AquaNetUser JPA entity 2024-02-17 00:25:19 -05:00
Azalea
467f5bd2eb [U] Update config 2024-02-17 00:25:04 -05:00
Azalea
322d90adfa [+] Automatic obtain request ip 2024-02-17 00:24:35 -05:00
Azalea
11eb7c058f [U] Update gitignore 2024-02-17 00:22:48 -05:00
Azalea
361b251952 [+] More extensions 2024-02-16 23:57:31 -05:00
Azalea
3d503971ae [+] Turnstile utility class 2024-02-16 23:56:12 -05:00
Azalea
9faabba361 [+] Turnstile settings 2024-02-16 23:55:44 -05:00
Azalea
f33629aba1 [+] Ktor dependency 2024-02-16 23:55:30 -05:00
Azalea
a47ed71799
[F] Fix typos in readme 2024-02-16 20:49:44 -08:00
Azalea
4a9b9d57e4 [O] Optimize imports 2024-02-16 17:51:36 -05:00
Azalea
98c3f0ce5b [F] Fix SNI 2024-02-16 17:45:41 -05:00
Azalea
78a3082bcb [U] Use kotlin entrypoint 2024-02-16 17:07:58 -05:00
Azalea
b64af43a7e [F] Fix security config 2024-02-16 17:07:45 -05:00
Azalea
1bcacbfebe [U] Update default config 2024-02-16 17:06:53 -05:00
Azalea
f32db6c83b [U] Update config 2024-02-16 17:06:39 -05:00
Azalea
437b638973 [M] javax -> jakarta 2024-02-16 17:05:43 -05:00
Azalea
670918efd3 [+] Migrate dependencies to Spring 3 2024-02-16 17:03:52 -05:00
Azalea
006a49cfdb [F] Fix dependency CVE 2024-02-16 15:54:09 -05:00
Azalea
9794ee259a [U] Upgrade gradle wrapper 2024-02-16 15:52:05 -05:00
Azalea
643e0e0c1f [O] Lint 2024-02-16 01:46:11 -05:00
Azalea
6afcb364d1 [+] Add eslint 2024-02-16 01:43:32 -05:00
Azalea
6d4a38404c [O] Sort recent by date, display level 2024-02-16 01:04:29 -05:00
Azalea
b925c2ef20 [U] Update readme 2024-02-12 11:26:37 -05:00
Azalea
e3f931d4f5
[PR] #10 from afonsopbarros: Update readme
Update AquaiMai README
2024-02-12 09:45:24 -05:00
Afonso
01b5d63972
Update AquaiMai README 2024-02-12 12:50:01 +01:00
Azalea
97794ce7c5 [S] Responsive chart 2024-02-12 04:49:02 -05:00
Azalea
ac4c66a1f7 [S] Fix home page 2024-02-12 04:48:51 -05:00
Azalea
9750e26d4b [F] Fix height 2024-02-12 04:35:02 -05:00
Azalea
4b14412190 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-12 04:33:39 -05:00
Azalea
207c2e10e3 [F] Fix height 2024-02-12 04:33:35 -05:00
Azalea
7c73515427
[U] Add related projects 2024-02-12 00:49:07 -08:00
Azalea
aea7108940 [U] Yarn upgrade 2024-02-12 03:38:34 -05:00
Azalea
2bdd97d889 [O] Center page 2024-02-12 03:38:25 -05:00
Azalea
93b6dd3374 [S] Fix song name overflow 2024-02-12 03:20:09 -05:00
Azalea
bf3c123658 [S] Mobile 2024-02-12 03:03:07 -05:00
Azalea
06c0a361fd [S] Good color 2024-02-12 03:00:24 -05:00
Azalea
92510845d6 [S] Style recent 2024-02-12 03:00:16 -05:00
Azalea
8ab57859f6 [S] mobile 2024-02-12 03:00:07 -05:00
Azalea
0608b50193 [+] Display recent scores 2024-02-12 02:59:46 -05:00
Azalea
e14ff26915 [+] UI helper for class 2024-02-12 02:59:33 -05:00
Azalea
8932a16468 [O] Encapsulate all music 2024-02-12 02:59:25 -05:00
Azalea
3804db142f [S] Style UserHome 2024-02-12 02:04:25 -05:00
Azalea
7e198bd7a1 [+] Display more info on user page 2024-02-12 01:48:28 -05:00
Azalea
85301c92ec [O] Import font 2024-02-12 01:48:08 -05:00
Azalea
2ca6be77ed [+] Add summary to SDK 2024-02-12 01:23:32 -05:00
Azalea
48558bec0f [+] Even more info 2024-02-12 01:11:20 -05:00
Azalea
31af8669b5 [O] More info 2024-02-12 01:05:15 -05:00
Azalea
d716ee5d26 [O] Optimize query 2024-02-12 01:02:02 -05:00
Azalea
8e1c07d530 [+] maimai user summary 2024-02-12 00:53:20 -05:00
Azalea
0d7b52aadc [+] Sinmai dev notes 2024-02-11 23:30:15 -05:00
Azalea
25eb99f014 [O] Hide chartjs lables 2024-02-11 22:53:31 -05:00
Azalea
ab8276df2f [S] Style chartjs 2024-02-11 22:40:12 -05:00
Azalea
68569ad875 [O] Externalize cal heatmap 2024-02-11 22:40:04 -05:00
Azalea
c0e77d9eec [O] Switch to cal-heatmap 2024-02-11 22:32:10 -05:00
Azalea
27297c5d24 [O] Write readme 2024-02-10 06:43:01 -05:00
Azalea
b6a7a02b23 [+] Home view 2024-02-10 06:31:11 -05:00
Azalea
534e20a072 [+] Helper to register chartjs 2024-02-10 06:30:50 -05:00
Azalea
9478da81a9 [+] Maimai api endpoints 2024-02-10 06:30:22 -05:00
Azalea
ee958f20d2 [+] Declare user preview data type 2024-02-10 06:30:15 -05:00
Azalea
00edf44828 [+] Type declaration 2024-02-10 06:27:58 -05:00
Azalea
f3a49533fd [+] Add ChartJS, heatmap dependencies 2024-02-10 06:27:49 -05:00
Azalea
3b6517090c [+] Add play count to trend 2024-02-10 05:50:28 -05:00
Azalea
5b2687ae83 [+] New maimai api 2024-02-10 05:30:06 -05:00
Azalea
c3402e8d44 [O] Ignore errors on EOF 2024-02-10 05:29:53 -05:00
Azalea
a9625dfecd [F] Fix kotlin build 2024-02-10 05:29:31 -05:00
Azalea
d6c8464e97 [+] Favicon 2024-02-10 03:52:27 -05:00
Azalea
1b557d5f8c [S] Fix page height overflow 2024-02-10 03:10:21 -05:00
Azalea
e1cf944db7 [S] Fix layout 2024-02-10 03:06:18 -05:00
Azalea
cb873efd38 [S] Minor style issue 2024-02-10 02:59:54 -05:00
Azalea
ee5acfa35f [+] Navbar 2024-02-10 02:56:29 -05:00
Azalea
2904c55f84 [S] Optimize styling 2024-02-10 01:30:19 -05:00
Azalea
4667e9652f Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-10 01:24:05 -05:00
Azalea
905b4fe92e [S] Mobile friendly :3 2024-02-10 01:24:03 -05:00
Azalea
85ccc78f8f [S] Style home page 2024-02-10 01:20:10 -05:00
Azalea
ad3bb89dc9 [+] Home site 2024-02-10 00:40:56 -05:00
Azalea
106bded9b6
[F] Fix test failure 2024-02-09 19:39:09 -08:00
Azalea Gui
f46c8a03d9 [+] Character convert 2024-02-09 22:36:26 -05:00
Azalea Gui
5d9693c419 [U] Combine music jsons 2024-02-09 22:35:13 -05:00
Azalea Gui
126546a938 [O] Fix crash due to duplicate keys in maimai2_user_item 2024-02-09 22:34:16 -05:00
Azalea
bb3902730b [U] Update url 2024-02-09 21:55:08 -05:00
Azalea
1b9e25e81c [U] Update url 2024-02-09 21:43:53 -05:00
Azalea
b11439ca87 [U] Update url 2024-02-09 21:23:03 -05:00
Azalea
66034ea407 [O] Get userid dynamically 2024-02-09 21:05:53 -05:00
Azalea
6690c665dd [+] Actually query for data 2024-02-09 20:32:13 -05:00
Azalea
4b71cd9940 [O] Responsive 2024-02-08 03:32:33 -05:00
Azalea
8b5ef24681 [+] Show rating 2024-02-08 03:18:55 -05:00
Azalea
e161890eaa Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-08 02:53:58 -05:00
Azalea
348f27237b [+] Rating screen 2024-02-08 02:53:45 -05:00
Azalea
c19164269a [+] Add nginx configuration 2024-02-08 02:52:47 -05:00
Azalea
071491b459 [M] Rename 2024-02-08 02:51:31 -05:00
Azalea
e1180a9a14
Merge pull request #9 from hykilpikonna/tc21/fix-crash-slot-data-not-found
Fix crash during call to CommonMonitor.SetCharacterSlot
2024-02-07 23:19:28 -05:00
Tianyi Cao
f76a027b32 add a few more comments 2024-02-07 20:08:33 -08:00
Tianyi Cao
cc1a91e5cd Update and restore unintentionally-changed formatting 2024-02-07 20:04:15 -08:00
Tianyi Cao
fcee4d13da Fix crash during call to CommonMonitor.SetCharacterSlot 2024-02-07 20:02:39 -08:00
Azalea
fa567ce0e2 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 22:59:58 -05:00
Azalea Gui
c10085b65a [+] Maimai data format convert 2024-02-07 22:22:58 -05:00
Azalea
a8465408cf [+] AquaTop: Create project 2024-02-07 20:13:53 -05:00
Azalea
d123a50054 [U] Detailed instructions
Closes #8
2024-02-07 16:39:46 -05:00
Azalea
bd09e4017a [F] Fix build 2024-02-07 16:36:18 -05:00
Azalea
8b5e29d29e
Update nightly.yml 2024-02-07 13:35:12 -08:00
Azalea
6e427b060a [O] Better build script 2024-02-07 16:26:59 -05:00
Azalea
7d0f70f1c0 [U] Update documentation 2024-02-07 05:42:40 -05:00
Azalea
5f1ca64d65 [O] Apply patches using reflection 2024-02-07 05:40:13 -05:00
Azalea
fb58f08e44
[PR] #7 from tc21: skip-to-music
Add ability to skip a bunch of stuff directly to music selection
2024-02-07 05:26:17 -05:00
Tianyi Cao
017d00371d formatting 2024-02-07 02:22:45 -08:00
Tianyi Cao
abe1d3ad29 Merge branch 'master' into tc21/skip-to-music 2024-02-07 02:20:39 -08:00
Azalea
fc48ba1994 [U] Update readme 2024-02-07 05:18:47 -05:00
Tianyi Cao
279fe5dcb8 Add ability to skip a bunch of stuff directly to music selection 2024-02-07 02:17:00 -08:00
Azalea
ccb3f7ef34 [+] Add cheat config 2024-02-07 05:16:07 -05:00
Azalea
de12ec6548 [+] Ticket unlock patch 2024-02-07 05:15:48 -05:00
Azalea
14bd2480ce [+] Fix character selection crash 2024-02-07 05:15:18 -05:00
Azalea
8152b9ab0d [M] Migrate to tomlet 2024-02-07 04:06:58 -05:00
Azalea
e6e4782d51 [O] Wording consistency 2024-02-07 03:56:07 -05:00
Azalea
aa5f4fb986 [+] Add option 2024-02-07 03:53:13 -05:00
Azalea
aa4fe50eeb Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 03:50:19 -05:00
Azalea
df072f1c40 [F] Use yaml instead 2024-02-07 03:49:14 -05:00
Azalea
9b3e202eb8
[PR] Merge #6: Add single player mode
Add single player mode
2024-02-07 02:40:18 -05:00
Azalea
b403189afb [+] Config 2024-02-07 02:38:36 -05:00
Tianyi Cao
82d076b87d Add single player mode, enabled by default 2024-02-06 23:38:36 -08:00
Azalea
dcdf951ebc [+] Add Tomlyn dependency 2024-02-07 02:37:28 -05:00
Azalea
4c1f8e4005 [F] Fix actions 2024-02-07 02:00:14 -05:00
Azalea
672ecc7f0a [+] More libs 2024-02-07 01:59:12 -05:00
Azalea
81f05528d8 [F] Fix actions 2024-02-07 01:46:45 -05:00
Azalea
57214aadfc [F] Fix actions 2024-02-07 01:45:15 -05:00
Azalea
6209a0120b [F] Fix actions 2024-02-07 01:44:06 -05:00
Azalea
98dcb3fbcb [+] Encrypted DLL 2024-02-07 01:36:06 -05:00
Azalea
2211e1c816 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 01:29:36 -05:00
Azalea
36bf37da8d
[F] Fix actions 2024-02-06 22:17:54 -08:00
Azalea
21be74fb05
[M] Rename dotnet-desktop.yml to aquamai.yml 2024-02-06 22:17:21 -08:00
Azalea
870ca6cd7f
Create dotnet-desktop.yml 2024-02-06 22:17:02 -08:00
Azalea
4e832a5eb2 Merge branch 'master' of https://github.com/hykilpikonna/AquaDX 2024-02-07 00:48:55 -05:00
Azalea
7b9c23c203
[O] Build nightly only when src change 2024-02-06 21:48:32 -08:00
Azalea
fc91807e07 [M] Move data to docs 2024-02-07 00:47:17 -05:00
Azalea
8aab359b0b [+] AquaMai: Init project 2024-02-07 00:45:47 -05:00
Azalea Gui
363c9ff028 [+] maimai DX Tickets 2024-02-06 06:13:08 -05:00
Azalea Gui
2a800a825b [U] Update readme 2024-02-06 05:52:51 -05:00
Azalea Gui
36c1b1e0dd [U] openai migrate 2024-02-06 05:26:45 -05:00
Azalea Gui
01d7cdc7de [F] Fix conflict 2024-02-06 05:26:32 -05:00
Azalea Gui
6f25cb9017 Merge Gamer2097/AquaDX : Updated game notes and added ongeki A084 to 108
99a66858 - Update game_specific_notes.md
10bf6012 - add ongeki A084 to 108

Co-authored-by: Gamer2097 <antoniomarco200564@gmail.com>
Co-authored-by: Gamer2097 <63710393+Gamer2097@users.noreply.github.com>
2024-02-06 05:25:38 -05:00
Azalea Gui
c4ff479af4 [+] Maimai 140 event data 2024-02-06 05:17:15 -05:00
Azalea Gui
cc8406cd79 [+] Maimai extract script 2024-02-06 05:16:56 -05:00
Azalea Gui
b94c1915a8 [+] Add kotlin 2024-02-06 05:16:41 -05:00
Gamer2097
99a6685845
Update game_specific_notes.md 2024-01-10 14:31:25 +01:00
Gamer2097
10bf60126e add ongeki A084 to 108 2024-01-08 15:24:34 +01:00
Azalea
14d8f0730f
[U] Update readme 2023-12-28 14:20:01 -08:00
Azalea
618503ccf2 [O] Ignore non-existent release 2023-12-22 19:10:28 -05:00
Azalea
f64a837172 [O] Optimize gh actions 2023-12-22 19:06:01 -05:00
Azalea
41d4de6150 [F] Fix github actions 2023-12-22 19:01:28 -05:00
Azalea
bcf3333dd2
[F] Fix github actions 2023-12-22 15:37:55 -08:00
Azalea
47fda64c90 [U] Update chusan notes 2023-12-22 16:47:04 -05:00
Azalea
4fce05b7d1 [F] Fix github actions 2023-12-21 02:13:36 -05:00
Azalea
363bcc6060 [F] Fix github actions 2023-12-21 02:10:55 -05:00
Azalea
bc734a5d25 [+] Nightly build action 2023-12-21 02:10:08 -05:00
Azalea
3f95678098 [+] Example systemd service 2023-12-21 01:52:11 -05:00
Azalea
e52c971aed [+] Build action 2023-12-21 01:47:48 -05:00
Azalea
1f82067752 [F] Resolve name conflict 2023-12-21 01:39:50 -05:00
Azalea
0ac1a4c088 [-] Remove deploy script 2023-12-21 01:28:46 -05:00
Azalea Gui
0fda25b482 [+] Docker 2023-12-21 01:27:18 -05:00
Azalea
dd70265cb6 [U] Update readme 2023-12-21 01:24:18 -05:00
Azalea
62e7d48f3c Merge rinsama/aqua : Ensure Chusan compatibility and add support for SunPlus
7a7076b1 - [chusan]Attempting to ensure compatibility with all known versions of Chusan, both before and after SunPlus
c8e1c5fb - fix BooleanStringIntDeserializer always returns false
50ceaf60 - Add Support for sunplus

Co-authored-by: Sanheiii <35133371+Sanheiii@users.noreply.github.com>
Co-authored-by: HoshimiRIN <admin@sakuramoe.dev>
2023-12-21 01:05:06 -05:00
Azalea
4905106953 [O] Optimize merge script 2023-12-21 01:04:55 -05:00
Azalea
48edab452d [+] Merge script 2023-12-21 00:44:36 -05:00
HoshimiRIN
7a7076b174 [chusan]Attempting to ensure compatibility with all known versions of Chusan, both before and after SunPlus 2023-12-17 21:50:09 +08:00
Sanheiii
c8e1c5fbb7 fix BooleanStringIntDeserializer always returns false 2023-12-16 15:39:49 +08:00
HoshimiRIN
50ceaf6097 Add Support for sunplus 2023-12-16 15:39:49 +08:00
Azalea
722d415e75
Merge pull request #4 from FeiZhaixiage/master
[API] Add a feature to get user photos.
2023-12-08 05:12:09 +09:00
肥宅虾哥
0d4221203b
[API] Add a feature to retrieve user photos. 2023-12-08 02:49:19 +08:00
肥宅虾哥
4a64895e81
[api] Add maimai2 userPhoto API 2023-12-08 02:45:24 +08:00
肥宅虾哥
e271cb4555
[API] Add a feature to retrieve user photos.
Add:
Add a feature to retrieve user photos.
Fix bug:
Missing dependency: ObjectMapper
2023-12-08 02:21:49 +08:00
肥宅虾哥
0bf54e666b
[API] Let web music list read from database
Add a feature to retrieve user photos.
2023-12-08 02:18:35 +08:00
肥宅虾哥
0913ef2060
[api] Add maimai2 userPhoto API 2023-12-08 02:14:20 +08:00
肥宅虾哥
7cc9fb11b6 Revert "New API to return user photos."
This reverts commit ba1f458907e5038c2cd5b6f806bc7c41f1d20c29.
2023-12-08 02:10:49 +08:00
肥宅虾哥
9c51b1e0ee Revert "Add API - Get user photos (mai)"
This reverts commit e7848cb9657a796c5df8fee70aac8bffa6ce12fb.
2023-12-08 02:07:18 +08:00
肥宅虾哥
ba1f458907
New API to return user photos.
New API to return user photos.
2023-12-08 02:02:19 +08:00
肥宅虾哥
e7848cb965
Add API - Get user photos (mai)
Add:
New API to return  user photos.
Fix bug:
Missing dependency: ObjectMapper
2023-12-07 19:13:13 +08:00
Azalea
564ada10f5
Merge pull request #2 from FeiZhaixiage/patch-1 2023-12-06 03:07:40 +09:00
肥宅虾哥
48721ef7a9
Update Api - Add item list output by ItemKind.
Add item list output by ItemKind.
2023-12-05 23:56:32 +08:00
Azalea
bae06e2187
Merge pull request #1 from FeiZhaixiage/master 2023-12-05 09:53:08 +09:00
肥宅虾哥
8b8e6cb422
Update ApiMaimai2PlayerDataController.java
Add API to save options settings.
2023-12-05 06:24:46 +08:00
Azalea Gui
2ecc990aae [F] Fix Found more than one migration with version 241 2023-11-15 00:35:20 -05:00
Azalea
b47a841207 [F] chmod +x 2023-11-15 00:25:33 -05:00
1544 changed files with 112381 additions and 140004 deletions

20
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,20 @@
FROM gradle:8.8.0-jdk21
ENV NODE_VERSION=22
RUN apt-get update && \
apt-get install -y curl && \
curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - && \
apt-get install -y nodejs && \
npm install -g npm@latest
RUN npm install -g bun
RUN apt-get install -y maven
RUN gradle --version && \
node --version && \
npm --version && \
bun --version
WORKDIR /workspace

View File

@ -0,0 +1,17 @@
{
"name": "AquaDX Dev Container",
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": [
"vscjava.vscode-gradle",
"vscjava.vscode-java-pack",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"fwcd.kotlin"
]
}
}
}

63
.github/workflows/docker-image.yml vendored Normal file
View File

@ -0,0 +1,63 @@
name: Build and Publish Docker Image
# Trigger the workflow on push to the main branch or on manual dispatch
on:
push:
branches:
- main
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # Runs at midnight UTC every Sunday
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
# 1. Checkout the repository
- name: Checkout repository
uses: actions/checkout@v3
# 2. Set up QEMU and Docker Buildx (for multi-platform builds, optional)
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# 3. Log in to Docker Hub
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: hykilpikonna
password: ${{ secrets.DOCKERHUB_TOKEN }}
# 3. Log in to GitHub Container Registry (ghcr.io)
- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
# Use GITHUB_TOKEN for authentication
password: ${{ secrets.GITHUB_TOKEN }}
# 4. Cache Docker layers to speed up builds (optional but recommended)
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# 5. Build and push the Docker image
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: |
hykilpikonna/aquadx:latest
platforms: linux/amd64,linux/arm64
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache

25
.github/workflows/gradle.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Gradle Build
on:
pull_request:
branches: [ master ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
- name: Build with Gradle
run: |
mkdir data
bash ./src/main/resources/meta/update.sh
chmod +x gradlew
./gradlew build

51
.github/workflows/nightly.yml vendored Normal file
View File

@ -0,0 +1,51 @@
# Build script credit to https://github.com/OpenIntelWireless/itlwm/blob/master/.github/workflows/main.yml
name: Nightly Build
on:
push:
branches: [master]
paths: ['src/**']
workflow_dispatch:
jobs:
build:
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: '10'
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
server-id: github
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: Build Artifact
run: bash ./tools/build.sh
- name: Delete previous nightly release
run: |
gh release delete --cleanup-tag --yes --repo $GITHUB_REPOSITORY nightly || true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish GitHub Release
uses: ncipollo/release-action@v1
with:
bodyFile: "build/release/ReleaseNotes.md"
artifacts: "build/libs/aqua-nightly.jar,build/aqua-nightly.zip"
tag: "nightly"
token: ${{ secrets.GITHUB_TOKEN }}
draft: false
- name: Mark release undraft
run: |
gh release edit nightly --draft=false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

10
.gitignore vendored
View File

@ -1,3 +1,4 @@
db/
web/
bin/
@ -75,4 +76,11 @@ gradle-app.setting
### Gradle Patch ###
# Java heap dump
*.hprof
*.hprof
.jpb
src/main/resources/meta/*/*.json
*.log.*.gz
*.salive
test-diff
htmlReport
docs/logs

20
AquaNet/.editorconfig Normal file
View File

@ -0,0 +1,20 @@
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
# Matches multiple files: .ts, .json, .svelte .sass
[*.{json,svelte,ts,sass}]
indent_style = space
indent_size = 2
# Markdown files (e.g., README.md) often use a line length of 80 characters
[*.md]
max_line_length = 80
trim_trailing_whitespace = false

9
AquaNet/.env Normal file
View File

@ -0,0 +1,9 @@
VITE_AQUA_HOST=https://aquadx.net/aqua
VITE_DATA_HOST=https://aquadx.net
VITE_AQUA_CONNECTION=aquadx.hydev.org
VITE_TURNSTILE_SITE_KEY=0x4AAAAAAASGA2KQEIelo9P9
VITE_DISCORD_INVITE=https://discord.gg/FNgveqFF7s
VITE_TELEGRAM_INVITE=https://t.me/+zBL4RZdyfvUzZGU1
VITE_QQ_INVITE=https://qm.qq.com/q/dpYmGoVHnG

41
AquaNet/.eslintrc.cjs Normal file
View File

@ -0,0 +1,41 @@
// ..eslintrc.cjs example
module.exports = {
root: true,
env: {
browser: true,
es2023: true
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:svelte/recommended',
],
ignorePatterns: ['dist', '..eslintrc.cjs'],
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module'
},
rules: {
// Custom styling rules
'comma-dangle': ['warn', 'only-multiline'],
'indent': ['warn', 2],
'semi': ['warn', 'never'],
'quotes': ['warn', 'single'],
'arrow-parens': ['warn', 'as-needed'],
'linebreak-style': ['warn', 'unix'],
'object-curly-spacing': ['warn', 'always'],
'array-bracket-spacing': ["error", "always", {
"singleValue": false,
"objectsInArrays": false,
"arraysInArrays": false
}],
// Disabled rules
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'no-constant-condition': 'off',
'@typescript-eslint/no-explicit-any': 'off',
},
}

38
AquaNet/.gitignore vendored Normal file
View File

@ -0,0 +1,38 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Yarn 3 files
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
public/chu3
# local env file
*.local

893
AquaNet/.yarn/releases/yarn-4.1.1.cjs vendored Normal file

File diff suppressed because one or more lines are too long

20
AquaNet/README.md Normal file
View File

@ -0,0 +1,20 @@
# AquaNet
This is the codebase for the new frontend of AquaDX.
This project is also heavily WIP, so more details will be added later on.
## Development
This project uses Svelte (NOT SvelteKit) + TypeScript + Sass, built using Vite. The preferred editor is VSCode.
### Running locally
First, you would need to install Node.js and bun.
Then, you would need to start your testing AquaDX server and configure the `aqua_host` in `src/libs/config.ts` to use your URL.
Please leave `data_host` unchanged if you're not sure what it is.
Finally, run:
```shell
bun install
bun run dev
```

BIN
AquaNet/bun.lockb Executable file

Binary file not shown.

45
AquaNet/index.html Normal file
View File

@ -0,0 +1,45 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AquaDX.net</title>
<link rel="apple-touch-icon" sizes="180x180" href="/assets/icons/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/icons/favicon-16x16.png">
<link rel="manifest" href="/assets/icons/site.webmanifest">
<link rel="mask-icon" href="/assets/icons/safari-pinned-tab.svg" color="#b3c6ff">
<link rel="shortcut icon" href="/assets/icons/favicon.ico">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-config" content="/assets/icons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<!-- Font CSS -->
<link rel="stylesheet" href="/assets/fonts/Quicksand.400.css" />
<link rel="stylesheet" href="/assets/fonts/Quicksand.500.css" />
<!-- Primary Meta Tags -->
<meta name="title" content="AquaDX.net" />
<meta name="description" content="A certain magical arcade server 🪄" />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content="https://aquadx.net/" />
<meta property="og:title" content="AquaDX.net" />
<meta property="og:description" content="A certain magical arcade server 🪄" />
<meta property="og:image" content="https://aquadx.net/assets/meta/meta.png" />
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content="https://aquadx.net/" />
<meta property="twitter:title" content="AquaDX.net" />
<meta property="twitter:description" content="A certain magical arcade server 🪄" />
<meta property="twitter:image" content="https://aquadx.net/assets/meta/meta.png" />
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

View File

@ -0,0 +1,38 @@
server {
listen 443 ssl;
server_name aqua.example.com;
ssl_certificate /etc/nginx/certs/aqua.example.com.crt;
ssl_certificate_key /etc/nginx/certs/aqua.example.com.key;
# Absolute path to store the compiled AquaNet,
# there should be index.html in the directory.
location / {
root /var/www/html/AquaNet/;
try_files $uri $uri/ @router;
index index.html;
}
# Route for redirection to index.html
location @router{
rewrite ^.*$ /index.html last;
}
# If you have modified DATA_HOST,
# you will need to prepare your own resources.
# location /d/ {
# root /var/www/html/GameData/;
# }
# Reverse Proxy to your AquaDX.
location /aqua/ {
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1/;
proxy_buffering off;
}
}

46
AquaNet/package.json Normal file
View File

@ -0,0 +1,46 @@
{
"name": "aqua-net",
"private": true,
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-check --tsconfig ./tsconfig.json",
"lint": "eslint . --ext ts,tsx,svelte --max-warnings 0 --fix"
},
"devDependencies": {
"@iconify/svelte": "^4.1.0",
"@iconify/tools": "^4.1.1",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tsconfig/svelte": "^5.0.4",
"@types/d3": "^7.4.3",
"@types/wicg-file-system-access": "^2023.10.5",
"@unocss/svelte-scoped": "^0.65.2",
"chartjs-adapter-moment": "^1.0.1",
"eslint": "^9.17.0",
"eslint-plugin-svelte": "^2.46.1",
"sass": "^1.83.0",
"shiki": "^1.24.4",
"svelte": "^5",
"svelte-check": "^4",
"svelte-turnstile": "^0.9.0",
"tslib": "^2.8.1",
"typescript": "^5.7.2",
"typescript-eslint": "^8.18.2",
"unocss": "^0.65.2",
"vite": "^6.0.5"
},
"dependencies": {
"cal-heatmap": "^4.2.4",
"chart.js": "^4.4.7",
"d3": "^7.9.0",
"lxgw-wenkai-lite-webfont": "^1.7.0",
"modern-normalize": "^3.0.1",
"moment": "^2.30.1",
"svelte-easy-crop": "^4.0.0",
"svelte5-router": "^3.0.1"
},
"packageManager": "pnpm@9.7.0+sha512.dc09430156b427f5ecfc79888899e1c39d2d690f004be70e05230b72cb173d96839587545d09429b55ac3c429c801b4dc3c0e002f653830a420fa2dd4e3cf9cf"
}

4780
AquaNet/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

BIN
AquaNet/psd/icons/Icon.psd Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

View File

@ -0,0 +1,27 @@
/* vietnamese */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(Quicksand.400.vietnamese.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(Quicksand.400.latin-ext.woff2) format('woff2');
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(Quicksand.400.latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

Binary file not shown.

View File

@ -0,0 +1,27 @@
/* vietnamese */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(Quicksand.500.vietnamese.woff2) format('woff2');
unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;
}
/* latin-ext */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(Quicksand.500.latin-ext.woff2) format('woff2');
unicode-range: U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Quicksand';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url(Quicksand.400.latin.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/assets/icons/mstile-150x150.png"/>
<TileColor>#ffffff</TileColor>
</tile>
</msapplication>
</browserconfig>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 4.6 MiB

View File

@ -0,0 +1,19 @@
{
"name": "",
"short_name": "",
"icons": [
{
"src": "/assets/icons/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/assets/icons/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,163 @@
/*
Happy April Fools!
This theme will stay here.
Note that I made it with Stylish in mind, it's quite jank.
*/
* {
font-family: "ヒラギノ角ゴ Pro W3", "メイリオ", Meiryo, " Pゴシック",
"MS P Gothic", sans-serif;
}
nav > a,
nav > *.active,
.setting-icon path {
color: unset !important;
}
.aqua-tooltip {
background: black;
}
.fw-block {
background: none !important;
box-shadow: none !important;
}
#app {
background: url(/assets/theme/cn/logo.bin),
#f9f9db;
background-repeat: no-repeat;
background-position: 50% 4px;
max-width: 528px !important;
margin: 0 auto;
padding: 100px 0 0 0 !important;
height: unset !important;
box-shadow: -8px 0 0 0 #fdd500, -12px 0 0 0 #f9f9db, 8px 0 0 0 #fdd500,
12px 0 0 0 #f9f9db;
}
nav:has(.logo) {
position: absolute !important;
top: 0;
left: 0;
width: calc(100% - 96px);
}
nav {
color: black;
}
.user-pfp {
margin-top: -56px !important;
}
.outer-title-options,
.outer-title-options *,
nav.tabs {
color: white !important;
}
.outer-title-options {
margin-top: 0 !important;
display: unset !important;
}
.outer-title-options h2 {
width: 460px;
position: relative;
right: 20px;
display: flex;
justify-content: center;
margin: 0 0 10px 0 !important;
background: url(/assets/theme/cn/header.bin);
}
.chuni-userbox-row {
flex-wrap: wrap;
}
.chuni-userbox button {
width: calc(100% / 4) !important;
font-size: 0px;
}
.chuni-userbox-row button {
width: unset !important;
flex: 0 1 calc(100% / 3) !important;
}
.chuni-userbox-row button img {
overflow: hidden;
font-size: 10px;
}
.chuni-nameplate {
background: none !important;
position: relative !important;
left: 20px;
}
.chuni-userbox {
background: none !important;
}
main {
max-width: calc(460px - 40px) !important;
margin: 16px auto 0 auto !important;
background: #2c4056 !important;
border-radius: unset !important;
padding: 10px 20px !important;
}
main:has(.user-pfp) {
margin: 64px auto 0 auto !important;
}
.rating-composition {
display: flex !important;
flex-wrap: wrap;
gap: 0 !important;
}
.rating-composition > div {
width: 47.5%;
margin: 1.25%;
}
.map-detail-container {
background: none !important;
border-radius: 0 !important;
}
.lv {
border-radius: 0 !important;
display: flex;
align-items: center;
justify-content: center;
padding: 0 !important;
width: 50px !important;
}
.rank-text {
min-width: 20px !important;
}
.chuni-userbox-container {
flex-wrap: wrap;
}
.profile-bio-text {
white-space: unset !important;
}
.chuni-penguin-container {
padding: 64px 0;
width: 100%;
background: linear-gradient(
180deg,
rgba(249, 249, 219, 1) 0%,
rgba(249, 249, 219, 1) 69%,
rgba(231, 231, 202, 1) 70%,
rgba(231, 231, 202, 1) 100%
);
}
body {
background: #fdd500 !important;
color: white;
}
@media (max-width: 1200px) {
#app {
background-position: 50% 60px !important;
padding-top: 150px !important;
}
}
@media (max-width: 1028px) {
#app {
background-size: 90%;
}
.user-pfp {
margin-top: -36px !important;
}
.user-pfp nav {
top: -10px !important;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

151
AquaNet/src/App.svelte Normal file
View File

@ -0,0 +1,151 @@
<script lang="ts">
import { Route, Router } from "svelte5-router";
import Welcome from "./pages/Welcome.svelte";
import UserHome from "./pages/UserHome.svelte";
import Home from "./pages/Home.svelte";
import Ranking from "./pages/Ranking.svelte";
import { CARD, USER } from "./libs/sdk";
import type { AquaNetUser } from "./libs/generalTypes";
import Settings from "./pages/User/Settings.svelte";
import MaiPhoto from "./pages/MaiPhoto.svelte";
import { pfp, tooltip } from "./libs/ui"
import { ANNOUNCEMENT } from "./libs/config";
import { t } from "./libs/i18n";
import Transfer from "./pages/Transfer/Transfer.svelte";
import { link } from "d3";
console.log(`%c
┏━┓ ┳━┓━┓┏━
┣━┫┏━┓┓ ┏┏━┓┃ ┃ ┣┫
┛ ┗┗━┫┗━┻┗━┻┻━┛━┛┗━
┗ v${APP_VERSION}`, `
background: linear-gradient(-45deg, rgba(18,194,233,1) 0%, rgba(196,113,237,1) 50%, rgba(246,79,89,1) 100%);
font-size: 2em;
font-family: Monospace;
unicode-bidi: isolate;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;`)
export let url = "";
let me: AquaNetUser
let playedMai = false
if (USER.isLoggedIn())
{
USER.me().then(m => {
me = m
CARD.userGames(me.username).then(game => {
playedMai = !!game.mai2
})
}).catch(e => console.error(e))
const themeStyle = document.createElement("link");
themeStyle.rel = "stylesheet";
switch (localStorage.getItem("theme")) {
case "cn":
themeStyle.href = "/assets/theme/cn.css";
};
if (themeStyle.href)
document.head.appendChild(themeStyle);
}
let path = window.location.pathname;
</script>
<nav>
{#if path !== "/"}
<a class="logo" href={USER.isLoggedIn() ? "/home" : "/"}>
<img src="/assets/icons/android-chrome-192x192.png" alt="AquaDX"/>
<span>AquaNet</span>
</a>
{/if}
{#if ANNOUNCEMENT}
<div class="announcement">
<strong>{t('navigation.notice')}</strong>: {ANNOUNCEMENT}
</div>
{/if}
<a href="/home">{t('navigation.home').toLowerCase()}</a>
<!-- <div on:click={() => alert("Coming soon™")} on:keydown={e => e.key === "Enter" && alert("Coming soon™")}
role="button" tabindex="0">{t('navigation.maps').toLowerCase()}</div> -->
<a href="/ranking">{t('navigation.rankings').toLowerCase()}</a>
{#if playedMai}
<a href="/pictures">photo</a>
{/if}
{#if me}
<a href="/u/{me.username}" use:tooltip={t('navigation.profile')}>
<img alt="profile" class="pfp" use:pfp={me}/>
</a>
{/if}
</nav>
<Router {url}>
<Route path="/" component={Welcome} />
<Route path="/verify" component={Welcome} /> <!-- For email verification only, backwards compatibility with AquaNet2 in the future -->
<Route path="/reset-password" component={Welcome} />
<Route path="/home" component={Home} />
<Route path="/ranking" component={Ranking} />
<Route path="/ranking/:game" component={Ranking} />
<Route path="/u/:username" component={UserHome} />
<Route path="/u/:username/:game" component={UserHome} />
<Route path="/settings" component={Settings} />
<Route path="/pictures" component={MaiPhoto} />
<Route path="/transfer" component={Transfer} />
</Router>
<style lang="sass">
@use "vars"
nav
display: flex
justify-content: flex-end
align-items: center
gap: 32px
height: vars.$nav-height
padding: 0 48px
z-index: 10
position: relative
img
width: 1.5rem
height: 1.5rem
border-radius: vars.$border-radius
object-fit: cover
.announcement
position: absolute
left: 50%
transform: translate(-50%, 0)
top: 0
width: 50%
height: 100%
display: flex
justify-content: center
align-content: center
z-index: -1
background: linear-gradient(90deg, #6f0f0f00 0%, vars.$c-shadow 50%, #6f0f0f00 100%)
font-size: 1.125em
text-decoration: none !important
color: inherit !important
.pfp
width: 2rem
height: 2rem
.logo
display: flex
align-items: center
gap: 8px
font-weight: bold
color: vars.$c-main
letter-spacing: 0.2em
flex: 1
@media (max-width: vars.$w-mobile)
> span
display: none
@media (max-width: vars.$w-mobile)
justify-content: center
</style>

363
AquaNet/src/app.sass Normal file
View File

@ -0,0 +1,363 @@
@use "sass:color"
@use "vars"
@import 'components/font/twemoji-flags.css'
@import 'lxgw-wenkai-lite-webfont/style.css'
html
height: 100%
body
font-family: vars.$font
line-height: 1.5
font-weight: 400
width: 100%
height: 100%
margin: 0
overflow-x: hidden
color-scheme: dark
color: rgba(255, 255, 255, 0.87)
background-color: vars.$c-bg
font-synthesis: none
text-rendering: optimizeLegibility
-webkit-font-smoothing: antialiased
-moz-osx-font-smoothing: grayscale
a
font-weight: 500
color: vars.$c-main
text-decoration: inherit
a:hover
color: vars.$c-main
h1
font-size: 3.2em
line-height: 1.1
.card
display: flex
flex-direction: column
border-radius: vars.$border-radius
padding: 12px 16px
background: vars.$ov-light
blockquote
$c1: rgba(255, 149, 149, 0.05)
$c2: rgba(255, 152, 152, 0.12)
background: repeating-linear-gradient(45deg, $c1, $c1 10px, $c2 10px, $c2 20px)
padding: 10px 20px 10px 20px
margin: 16px 0
border-left: solid #ff7c7c 3px
border-radius: vars.$border-radius
#app
width: 100%
height: 100%
main:not(.no-margin)
max-width: 1280px
margin: 0 auto
padding-bottom: 100px
button
border-radius: vars.$border-radius
border: 1px solid transparent
padding: 0.6em 1.2em
font-size: 1em
font-weight: 500
font-family: inherit
background-color: vars.$ov-lighter
opacity: 0.9
cursor: pointer
transition: vars.$transition
white-space: nowrap
button:hover
border-color: vars.$c-main
button:focus, button:focus-visible
color: vars.$c-main
outline: none
button.error
color: unset
&:hover
border-color: vars.$c-error
color: vars.$c-error
//background: $c-error
//border-color: transparent
button.icon
padding: 0.6em
font-size: 1.2em
border-radius: 50px
@extend .flex-center
.level-0
//--lv-color: #6ED43E
--lv-color: 110, 212, 62
.level-1
//--lv-color: #F7B807
--lv-color: 247, 184, 7
.level-2
//--lv-color: #FF828D
--lv-color: 255, 130, 141
.level-3
//--lv-color: #A051DC
--lv-color: 160, 81, 220
.level-4
//--lv-color: #c299e7
--lv-color: 194, 153, 231
.level-5
// World's End for chunithm, or Utage for maimai
// --lv-color: #eff2e1
// --lv-color: 239, 242, 225
--lv-text-clip: linear-gradient(110deg, #5ac42c, #5ccc22, #959f26, #cc7c23, #c93143, #8f4876, #4c3eb1, #3c3397)
.warning
color: vars.$c-warning
.error
color: vars.$c-error
input, textarea
border-radius: vars.$border-radius
border: 1px solid transparent
padding: 0.6em 1.2em
font-size: 1em
font-weight: 500
font-family: inherit
background-color: vars.$ov-lighter
transition: vars.$transition
box-sizing: border-box
resize: none
textarea
height: 5em
// Dropdown
select
border-radius: vars.$border-radius
border: 1px solid transparent
padding: 0.6em 1.2em
font-size: 1em
font-weight: 500
font-family: inherit
background-color: vars.$ov-lighter
transition: vars.$transition
box-sizing: border-box
option
background-color: #333
color: #fff
option:hover
background-color: #555
input[type="checkbox"]
width: 1.2em
height: 1.2em
margin: 0
padding: 0
border: 1px solid vars.$c-main
background-color: vars.$ov-lighter
appearance: none
cursor: pointer
flex-shrink: 0
&:checked
background-color: vars.$c-main
border-color: vars.$c-main
label
cursor: pointer
input:focus, input:focus-visible
border: 1px solid vars.$c-main
outline: none
input.warning
border: 1px solid vars.$c-warning
input.error
border: 1px solid vars.$c-error
.flex-center
display: flex
justify-content: center
align-items: center
.inline-flex-center
display: inline-flex
justify-content: center
align-items: center
.clickable
cursor: pointer
user-select: none
// Content containers
.content-main
display: flex
flex-direction: column
gap: 20px
margin: 100px auto 0
padding: 32px 32px 128px
min-height: 100%
max-width: vars.$w-max
background-color: color.adjust(vars.$c-bg, $lightness: -3%)
border-radius: 16px 16px 0 0
@media (max-width: #{vars.$w-max + (64px) * 2})
margin: 100px 32px 0
@media (max-width: vars.$w-mobile)
margin: 100px 0 0
.fw-block
margin-left: -32px
margin-right: -32px
padding: 12px 32px
background-color: vars.$ov-darker
// Inner shadow
box-shadow: inset 0 10px 10px -2px vars.$c-shadow, inset 0 -10px 10px -2px vars.$c-shadow
> h2.outer-title, > .outer-title-options
margin-top: -5rem
margin-bottom: 1rem
@media (max-width: vars.$w-mobile)
text-align: center
> .outer-title-options
display: flex
justify-content: space-between
align-items: center
nav
display: flex
flex-direction: row
gap: 10px
top: 4px
@media (max-width: vars.$w-mobile)
flex-direction: column
> h2, > .outer-title-options > h2
margin: 0
main.content
@extend .content-main
// Not used. still need a lot of work
.content-popup
position: absolute
inset: 0
> div
@extend .content-main
position: absolute
inset: 0
top: 100px
background: rgba(color.adjust(vars.$c-bg, $lightness: -3%), 0.9)
backdrop-filter: blur(5px)
box-shadow: 0 0 10px 6px rgba(black, 0.4)
max-width: calc(vars.$w-max + 20px)
@media (max-width: #{vars.$w-max + (64px) * 2})
margin: 100px 22px 0
@media (max-width: vars.$w-mobile)
margin: 100px 0 0
// Overlay
.overlay
position: fixed
inset: 0
background-color: rgba(0, 0, 0, 0.5)
display: flex
justify-content: center
align-items: center
z-index: 1000
backdrop-filter: blur(5px)
h2, p
user-select: none
margin: 0
> div
background-color: vars.$c-bg
padding: 2rem
border-radius: vars.$border-radius
display: flex
flex-direction: column
gap: 1rem
max-width: 400px
.aqua-tooltip
z-index: 900
.no-margin
margin: 0
nav
> div, > a
cursor: pointer
transition: vars.$transition
text-decoration: underline 1px solid transparent
text-underline-offset: 0.1em
display: flex
align-items: center
color: unset
font-weight: unset
&:hover
color: vars.$c-main
text-decoration-color: vars.$c-main
text-underline-offset: 0.5em
&.active
color: vars.$c-main
.hide-scrollbar
&::-webkit-scrollbar
display: none
-ms-overflow-style: none
scrollbar-width: none
.aqua-tooltip
box-shadow: 0 0 5px 0 vars.$c-shadow
border-radius: vars.$border-radius
position: absolute
padding: 4px 8px
background: vars.$ov-lighter
backdrop-filter: blur(5px)

View File

@ -0,0 +1,76 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import Icon from "@iconify/svelte";
export let color: string = '179, 198, 255'
export let icon: string
// Manually positioned icons
const iconPos = [
[1, 0.5, 2],
[6, 2, 1.5],
[-0.5, 4.5, 1.3],
[5, -0.5],
[3.5, 4.5],
[9.5, 0.3, 1.2],
[12.5, 2.5, 0.8],
[10, 4.4, 0.8],
]
</script>
<div class="action-card" style="--card-color: {color}" on:click role="button" tabindex="0" on:keydown>
<slot/>
<div class="icons">
{#each iconPos as [x, y, size], i}
<Icon icon={icon} style={`top: ${y}rem; right: ${x}rem; font-size: ${size || 1}em`} />
{/each}
</div>
</div>
<style lang="sass">
@use '../vars'
.action-card
overflow: hidden
padding: 1rem
border-radius: vars.$border-radius
box-shadow: 0 5px 5px 1px vars.$c-shadow
transition: all 0.2s ease
cursor: pointer
position: relative
background: linear-gradient(45deg, transparent 20%, rgba(var(--card-color), 0.5) 100%)
outline: 1px solid transparent
filter: drop-shadow(0 0 12px rgba(var(--card-color), 0))
&:hover
box-shadow: 0 0 0.5rem 0.2rem vars.$c-shadow
transform: translateY(-3px)
// Drop shadow glow
filter: drop-shadow(0 0 12px rgba(var(--card-color), 0.5))
outline-color: rgba(var(--card-color), 0.5)
:global(span)
font-size: 1.2rem
display: block
margin-bottom: 0.5rem
.icons
position: absolute
inset: 0
color: rgba(var(--card-color), 0.5)
font-size: 2rem
transition: all 0.2s ease
z-index: -1
mask-image: linear-gradient(45deg, transparent 30%, rgba(255,255,255,0.5) 70%, white 100%)
opacity: 0.8
@media (max-width: vars.$w-mobile)
opacity: 0.6
:global(> svg)
position: absolute
rotate: 20deg
</style>

View File

@ -0,0 +1,62 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import Icon from "@iconify/svelte";
export let color: string = '179, 198, 255'
export let icon: string
</script>
<div class="action-card" style="--card-color: {color}" on:click role="button" tabindex="0" on:keydown>
<slot/>
<div class="icon">
<Icon icon={icon} />
</div>
</div>
<style lang="sass">
@use '../vars'
.action-card
overflow: hidden
padding: 1rem
border-radius: vars.$border-radius
box-shadow: 0 5px 5px 1px vars.$c-shadow
transition: all 0.2s ease
cursor: pointer
position: relative
background: linear-gradient(45deg, transparent 20%, rgba(var(--card-color), 0.5) 100%)
outline: 1px solid transparent
filter: drop-shadow(0 0 12px rgba(var(--card-color), 0))
&:hover
box-shadow: 0 0 0.5rem 0.2rem vars.$c-shadow
transform: translateY(-3px)
// Drop shadow glow
filter: drop-shadow(0 0 12px rgba(var(--card-color), 0.5))
outline-color: rgba(var(--card-color), 0.5)
:global(span)
font-size: 1.2rem
display: block
margin-bottom: 0.5rem
.icon
position: absolute
display: flex
color: rgba(var(--card-color), 0.5)
font-size: 4rem
right: 0
bottom: 0
padding: .5rem
transition: all 0.2s ease
z-index: -1
mask-image: linear-gradient(45deg, transparent 30%, rgba(255,255,255,0.5) 70%, white 100%)
opacity: 0.8
@media (max-width: vars.$w-mobile)
opacity: 0.6
</style>

View File

@ -0,0 +1,32 @@
<script lang="ts">
export let username: string;
export let email: string;
let shouldShow = navigator.language.startsWith('zh');
// 会导致瞬间出现,但是不知道为什么 svelte 的 transition 动画不工作
// if (!shouldShow) {
// fetch('https://47.122.72.135/ip/isChina')
// .then(it => it.json())
// .then(it => shouldShow = it)
// .catch(() => shouldShow = false);
// }
const jump = () => {
const params = new URLSearchParams();
if (username) params.set('username', username);
if (email) params.set('email', email);
location.href = `https://portal.mumur.net/register?${params.toString()}`;
}
</script>
{#if shouldShow}
<div class="cursor-pointer" on:click={jump}>
<h2>MuNET 了解一下!</h2>
<div>
<p>MuNET 是 AquaDX 的继任者,提供更适合中国用户的服务器和更好的游戏体验。</p>
<p>如果你还没有游戏数据,建议在 MuNET 上创建账号并开始游戏。点击立即前往</p>
</div>
</div>
{/if}

View File

@ -0,0 +1,64 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import { slide } from "svelte/transition";
import { t } from "../libs/i18n";
import type { GenericGameSummary } from "../libs/generalTypes";
export let g: GenericGameSummary
const detail = Object.entries(g.detailedRanks).toSorted((a, b) => +b[0] - +a[0])
</script>
<div class="rank-detail-container fw-block" transition:slide>
<div>
<h2>{t("UserHome.RankDetail.Title")}</h2>
<table><tbody>
<!-- rankDetails: { Level : { Rank : Count } } -->
<!-- Rows are levels, columns are ranks -->
<!-- Headers -->
<tr>
<th>{t("UserHome.RankDetail.Level")}</th>
{#each Object.values(g.ranks) as rankMap}<th>{rankMap.name}</th>{/each}
</tr>
<!-- Data -->
{#each detail as [level, rankMap]}
<tr>
<td>{level}</td>
{#each Object.values(rankMap) as count}<td>{count}</td>{/each}
</tr>
{/each}
</tbody></table>
</div>
</div>
<style lang="sass">
@use "../vars"
.rank-detail-container
> div
margin: 1em auto
max-width: 500px
table
width: 100%
border-collapse: collapse
table-layout: fixed
th:not(:first-child)
background: vars.$grad-special
-webkit-background-clip: text
-webkit-text-fill-color: transparent
background-clip: text
color: vars.$c-main
padding: 0.5em
th, td
padding: 0.5em
text-align: center
&:first-child
color: vars.$c-main
</style>

View File

@ -0,0 +1,143 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import { slide } from "svelte/transition";
import { t } from "../libs/i18n";
import { type GameName, type ParsedComposition, roundFloor } from "../libs/scoring";
import { coverNotFound } from "../libs/ui";
import { tooltip } from "../libs/ui";
import useLocalStorage from "../libs/hooks/useLocalStorage.svelte";
export let game: GameName
export let p: ParsedComposition
const rounding = useLocalStorage("rounding", true)
</script>
<div class="map-detail-container" transition:slide>
<div class="scores">
<div>
<img src={p.img} alt="" on:error={coverNotFound} />
<div class="info">
<div class="first-line">
<div class="song-title">{p.name ?? t("UserHome.UnknownSong")}</div>
<span class={`lv level-${p.diffId === 10 ? 3 : p.diffId}`}>
{ p.difficulty ?? '-' }
</span>
</div>
<div class="second-line">
<span class={`rank-${p.rank[0]}`}>
<span class="rank-text">{p.rank.replace("p", "+")}</span>
<span class="rank-num" use:tooltip={(p.score / 10000).toFixed(4)}>
{rounding.value ? roundFloor(p.score, game, 1) : (p.score / 10000).toFixed(4)}%
</span>
</span>
{#if p.ratingChange !== undefined}
<span class="dx-change">{ p.ratingChange }</span>
{/if}
</div>
</div>
</div>
</div>
</div>
<style lang="sass">
@use "../vars"
vars.$gap: 20px
.map-detail-container
background-color: rgb(35,35,35)
border-radius: vars.$border-radius
overflow: hidden
.scores
display: flex
flex-direction: column
flex-wrap: wrap
gap: vars.$gap
// Image and song info
> div
display: flex
align-items: center
gap: 12px
max-width: 100%
box-sizing: border-box
img
width: 50px
height: 50px
border-radius: vars.$border-radius
object-fit: cover
// Song info and score
> div.info
flex: 1
display: flex
justify-content: space-between
overflow: hidden
flex-direction: column
.first-line
display: flex
flex-direction: row
// Limit song name to one line
.song-title
flex: 1
min-width: 0
overflow: hidden
text-overflow: ellipsis
white-space: nowrap
// Make song score and rank not wrap
> div:last-child
white-space: nowrap
@media (max-width: vars.$w-mobile)
flex-direction: column
gap: 0
.rank-text
text-align: left
.rank-S
// Gold green gradient on text
background: vars.$grad-special
-webkit-background-clip: text
color: transparent
.rank-A
color: #ff8a8a
.rank-B
color: #6ba6ff
.lv
width: 30px
text-align: center
background: rgba(var(--lv-color), 0.6)
padding: 0 6px
border-radius: 0 vars.$border-radius 0 vars.$border-radius
// Inset shadow, like it's a paper below this card with a cut
box-shadow: inset 0 0 10px rgba(0,0,0,0.5)
span
display: inline-block
text-align: left
.second-line
display: flex
justify-content: space-between
align-items: center
// Vertical table-like alignment
span.rank-text
min-width: 40px
span.rank-num
min-width: 60px
span.dx-change
margin-right: 0.5rem
color: vars.$c-good
</style>

View File

@ -0,0 +1,42 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import RatingCompSong from "./RatingCompSong.svelte";
import { parseComposition, type GameName } from "../libs/scoring";
import { type MusicMeta } from "../libs/generalTypes";
export let title: string;
export let comp: string | undefined;
export let allMusics: Record<string, MusicMeta>;
export let game: GameName;
export let top: number | undefined = undefined;
let split = comp?.split(",")?.filter(it => it.split(":")[0] !== '0')
?.map(it => parseComposition(it, allMusics, game))
if (top) split = split?.toSorted((a, b) => b.score - a.score).slice(0, top)
if (split) console.log("Split", split)
</script>
{#if split && comp}
<div>
<h2>{title}</h2>
<div class="rating-composition">
{#each split as p}
<div>
<RatingCompSong {p} {game}/>
</div>
{/each}
</div>
</div>
{/if}
<style lang="sass">
@use "../vars"
.rating-composition
display: grid
// 3 columns
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr))
gap: vars.$gap
</style>

View File

@ -0,0 +1,52 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import { fade } from 'svelte/transition'
import type { ConfirmProps } from "../libs/generalTypes";
import { t } from "../libs/i18n"
import Loading from './ui/Loading.svelte';
import Error from './ui/Error.svelte';
// Props
export let confirm: ConfirmProps | null = null
export let error: string | null = null
export let loading: boolean = false
function doConfirm(fn?: () => void) {
confirm = null
fn && fn()
}
</script>
{#if confirm}
<div class="overlay" transition:fade>
<div>
<h2>{confirm.title}</h2>
<span>{confirm.message}</span>
<div class="actions">
{#if confirm.cancel}
<button on:click={() => doConfirm(confirm?.cancel)}>{t('action.cancel')}</button>
{/if}
<button on:click={() => doConfirm(confirm?.confirm)} class:error={confirm.dangerous}>{t('action.confirm')}</button>
</div>
</div>
</div>
{/if}
{#if error}
<Error {error}/>
{/if}
{#if loading && !error}
<Loading/>
{/if}
<style lang="sass">
.actions
display: flex
gap: 16px
button
width: 100%
</style>

View File

@ -0,0 +1,76 @@
<script lang="ts">
import { onMount, onDestroy } from 'svelte'
export let triggeredBy: string
export let loading: boolean = false
let isHovered = false
let x: number, y: number
let targets: Element[] = []
onMount(() => {
targets = [...document.querySelectorAll(triggeredBy)]
targets.forEach((el) => {
el.addEventListener('mouseover', mouseOver)
el.addEventListener('mousemove', mouseMove)
el.addEventListener('mouseleave', mouseLeave)
})
if (targets.length === 0) {
console.warn(`No elements found with selector "${triggeredBy}"`)
}
})
onDestroy(() => {
targets.forEach((el) => {
el.removeEventListener('mouseover', mouseOver)
el.removeEventListener('mousemove', mouseMove)
el.removeEventListener('mouseleave', mouseLeave)
})
})
function mouseOver(event: MouseEvent) {
console.log('over')
isHovered = true
updatePosition(event)
}
function mouseMove(event: MouseEvent) {
console.log('move')
updatePosition(event)
}
function updatePosition(event: MouseEvent) {
x = event.pageX + 5
y = event.pageY + 20
}
function mouseLeave() {
console.log('leave')
isHovered = false
}
</script>
{#if isHovered}
<div style="top: {y}px; left: {x}px" class="tooltip" class:loading>
<slot />
</div>
{/if}
<style lang="sass">
@use "../vars"
.tooltip
position: absolute
z-index: 900
background: white
padding: 10px 16px
border-radius: vars.$border-radius
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1)
pointer-events: none
white-space: nowrap
color: #242424
transform: translate(-50%, 0)
transition: opacity 0.2s
&.loading
opacity: 0
</style>

View File

@ -0,0 +1,56 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import type { GenericGameSummary } from "../libs/generalTypes";
import { GAME } from "../libs/sdk";
import type { GameName } from "../libs/scoring";
import { pfp, pfpNotFound } from "../libs/ui";
export let username: string
export let game: GameName
export let setLoading: (loading: boolean) => void = () => {}
let data: GenericGameSummary
let error = ""
setLoading(true)
GAME.userSummary(username, game).then(d => data = d).catch(e => error = e).finally(_ => setLoading(false))
</script>
{#if !data}
<div>Loading...</div>
{:else if error}
<div>Error: {error}</div>
{:else}
<div class="user-card">
<img use:pfp={data.aquaUser} alt="Profile" />
<div class="details">
<span class="in-game-name">{data.name}</span>
<span class="username">@{username}</span>
</div>
</div>
{/if}
<style lang="sass">
@use "../vars"
.user-card
display: flex
align-items: center
gap: vars.$gap
.details
display: flex
flex-direction: column
justify-content: center
.username
font-size: 0.8em
img
width: 50px
height: 50px
border-radius: 50%
object-fit: cover
object-position: center
</style>

View File

@ -0,0 +1,29 @@
<script lang="ts">
import { Chart, Tooltip, type ChartData, type ChartOptions } from 'chart.js';
import type { HTMLCanvasAttributes } from 'svelte/elements';
import 'chart.js/auto';
interface Props extends HTMLCanvasAttributes {
data: ChartData<'line', any, string>
options: ChartOptions<'line'>
}
const { data, options, ...rest }: Props = $props()
Chart.register(Tooltip)
let canvasElem: HTMLCanvasElement
let chart: Chart
$effect(() => {
chart = new Chart(canvasElem, { type: 'line', data, options })
return () => chart.destroy()
})
$effect(() => {
if (!chart) return
chart.data = data
chart.update()
})
</script>
<canvas bind:this={canvasElem} {...rest}></canvas>

Binary file not shown.

View File

@ -0,0 +1,11 @@
@font-face {
font-family: 'TwemojiCountryFlags';
src: url('./TwemojiCountryFlags.woff2') format('woff2');
font-weight: normal;
font-style: normal;
}
.country {
font-family: TwemojiCountryFlags,"Twemoji Mozilla","Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji","EmojiOne Color","Android Emoji",sans-serif;
font-size: 2em;
}

View File

@ -0,0 +1,211 @@
<script lang="ts">
import { fade, slide } from "svelte/transition";
import { CHU3_MATCHINGS } from "../../libs/config.js";
import type { ChusanMatchingOption, GameOption } from "../../libs/generalTypes.js";
import { t, ts } from "../../libs/i18n.js";
import { DATA, SETTING } from "../../libs/sdk.js";
import StatusOverlays from "../StatusOverlays.svelte";
import GameSettingFields from "./GameSettingFields.svelte";
let custom = false
let overlay = false
let loading = false
let error = ""
let changed: string[] = [];
let symbols: Record<number, number> = {};
let allItems: Record<string, Record<string, { name: string }>> = {}
let submitting: string | undefined | null;
let existingUrl = "";
SETTING.get().then(s => {
existingUrl = s.filter(it => it.key === 'chusanMatchingServer')[0]?.value
if (existingUrl && !CHU3_MATCHINGS.some(it => it.matching === existingUrl)) {
custom = true
}
const symbolKey = "chusanSymbolChat"
s.forEach(opt => {
if (opt.key.substring(0, symbolKey.length) == symbolKey && opt.value)
symbols[parseInt(opt.key.substring(symbolKey.length))] = opt.value;
})
})
async function fetchSymbolData() {
allItems = await DATA.allItems('chu3').catch(_ => {
loading = false
error = t("userbox.error.nodata")
}) as typeof allItems
}
async function submitSymbol(id: number) {
if (submitting) return false
const field = `chusanSymbolChat${id + 1}`;
submitting = field
await SETTING.set(field, symbols[id + 1]).catch(e => error = e.message).finally(() => submitting = null);
changed = changed.filter(v => v != `chusanSymbolChat${id}`)
return true
}
// Click on "Custom" option"
function clickCustom() {
custom = true
overlay = false
}
// Click on a matching option, set the reflector and matching server
function clickOption(opt: ChusanMatchingOption) {
Promise.all([
SETTING.set('chusanMatchingReflector', opt.reflector),
SETTING.set('chusanMatchingServer', opt.matching),
]).then(() => {
overlay = false
custom = false
existingUrl = opt.matching
}).catch(e => error = e.message)
}
</script>
<StatusOverlays {error} {loading}/>
<div class="matching">
<h2>{t("userbox.header.matching")}</h2>
<p class="notice">{t("settings.cabNotice")}</p>
<div class="matching-selector">
<button on:click={_ => overlay = true}>{t('userbox.matching.select')}</button>
</div>
{#if custom}
<GameSettingFields game="chu3-matching"/>
{/if}
<h2>{t("userbox.header.matching.symbolChat")}</h2>
{#await fetchSymbolData() then}
{#each {length: 4}, i}
<div class="field">
<label for={`chusanSymbolChat${i}`}>{ts(`userbox.matching.symbolChat`) + ` #${i + 1}`}</label>
<div>
<select bind:value={symbols[i + 1]} id={`chusanSymbolChat${i}`} on:change={() => {changed = [...changed, `chusanSymbolChat${i}`];}}>
<option value={null}>{ts(`userbox.matching.symbolChat.default`)}</option>
{#each Object.entries(allItems.symbolChat).filter((f) => parseInt(f[0]) !== 0) as [id, option]}
<option value={parseInt(id)}>{option?.name || `(unknown ${id})`}</option>
{/each}
</select>
{#if changed.includes(`chusanSymbolChat${i}`)}
<button transition:slide={{axis: "x"}} disabled={!!submitting} on:click={() => submitSymbol(i)}>
{t("settings.profile.save")}
</button>
{/if}
</div>
</div>
{/each}
{/await}
</div>
{#if overlay}
<div class="overlay" transition:fade>
<div>
<div>
<h2>{t('userbox.header.matching')}</h2>
<p>{t('userbox.matching.select.sub')}</p>
</div>
<div class="options">
<!-- Selectable options -->
{#each CHU3_MATCHINGS as option}
<div class="clickable option" on:click={() => clickOption(option)}
role="button" tabindex="0" on:keypress={e => e.key === 'Enter' && clickOption(option)}
class:selected={!custom && existingUrl === option.matching}>
<span class="name">{option.name}</span>
<div class="links">
<a href={option.ui} target="_blank" rel="noopener">{t('userbox.matching.option.ui')}</a> /
<a href={option.guide} target="_blank" rel="noopener">{t('userbox.matching.option.guide')}</a>
</div>
<div class="divider"></div>
<div class="coop">
<span>{t('userbox.matching.option.collab')}</span>
<div>
{#each option.coop as coop}
<span>{coop}</span>
{/each}
</div>
</div>
</div>
{/each}
<!-- Placeholder option for "Custom" -->
<div class="clickable option" on:click={clickCustom}
role="button" tabindex="0" on:keypress={e => e.key === 'Enter' && clickCustom()}
class:selected={custom}>
<span class="name">{t('userbox.matching.custom.name')}</span>
<p class="notice custom">{t('userbox.matching.custom.sub')}</p>
</div>
</div>
</div>
</div>
{/if}
<style lang="sass">
@use "../../vars"
.matching
display: flex
flex-direction: column
gap: 12px
h2
margin-bottom: 0
p.notice
opacity: 0.6
margin: 0
&.custom
font-size: 0.9rem
.options
display: flex
flex-wrap: wrap
gap: 1rem
.option
flex: 1
display: flex
flex-direction: column
align-items: center
border-radius: vars.$border-radius
background: vars.$ov-light
padding: 1rem
min-width: 150px
&.selected
border: 1px solid vars.$c-main
.divider
width: 100%
height: 0.5px
background: white
opacity: 0.2
margin: 0.8rem 0
.name
font-size: 1.1rem
font-weight: bold
.coop
text-align: center
div
display: flex
flex-direction: column
font-size: 0.9rem
opacity: 0.6
</style>

View File

@ -0,0 +1,667 @@
<!-- Svelte 4.2.11 -->
<script lang="ts">
import {
type AquaNetUser,
type UserBox,
type UserItem,
} from "../../libs/generalTypes";
import { DATA, USER, USERBOX, GAME } from "../../libs/sdk";
import { t, ts } from "../../libs/i18n";
import { FADE_IN, FADE_OUT, USERBOX_DEFAULT_URL } from "../../libs/config";
import { fade, slide } from "svelte/transition";
import StatusOverlays from "../StatusOverlays.svelte";
import Icon from "@iconify/svelte";
import GameSettingFields from "./GameSettingFields.svelte";
import { userboxFileProcess, ddsDB, initializeDb } from "../../libs/userbox/userbox"
import ChuniPenguinComponent from "./userbox/ChuniPenguin.svelte"
import ChuniUserplateComponent from "./userbox/ChuniUserplate.svelte";
import useLocalStorage from "../../libs/hooks/useLocalStorage.svelte";
import { DDS } from "../../libs/userbox/dds";
import ChuniMatchingSettings from "./ChuniMatchingSettings.svelte";
import InputField from "../ui/InputField.svelte";
let user: AquaNetUser
let [loading, error, submitting, preview] = [true, "", "", ""]
let changed: string[] = [];
// Available (unlocked) options for each kind of item
// In allItems: 'namePlate', 'frame', 'trophy', 'mapIcon', 'systemVoice', 'avatarAccessory'
let allItems: Record<string, Record<string, { name: string }>> = {}
let iKinds = { namePlate: 1, frame: 2, trophy: 3, trophySub1: 4, trophySub2: 5, mapIcon: 8, systemVoice: 9, avatarAccessory: 11 }
// In userbox: 'nameplateId', 'frameId', 'trophyId', 'mapIconId', 'voiceId', 'avatar{Wear/Head/Face/Skin/Item/Front/Back}'
let userbox: UserBox
let avatarKinds = ['Wear', 'Head', 'Face', 'Skin', 'Item', 'Front', 'Back'] as const
// iKey should match allItems keys, and ubKey should match userbox keys
let userItems: { iKey: string, ubKey: keyof UserBox, items: UserItem[] }[] = []
let userNameField: any
// Submit changes
function submit(field: keyof UserBox) {
let obj = { field, value: userbox[field] }
if (submitting) return
submitting = obj.field
USERBOX.setUserBox(obj)
.then(() => changed = changed.filter((c) => c !== obj.field))
.catch(e => error = e.message)
.finally(() => submitting = "")
}
// Fetch data from the server
async function fetchData() {
const profile = await USERBOX.getProfile().catch(_ => {
loading = false
error = t("userbox.error.nodata")
})
if (!profile) return
userbox = profile.user
userNameField = {key: "gameUsername", value: userbox.userName, type: "String"}
userItems = Object.entries(iKinds).flatMap(([iKey, iKind]) => {
if (iKey != 'avatarAccessory') {
let ubKey = `${iKey}Id`
if (iKey.slice('trophy'.length, 'trophy'.length + 3) == "Sub") {
ubKey = `trophyIdSub${iKey.slice('trophySub'.length, 'trophySub'.length + 1)}`;
iKey = `trophy`;
}
if (ubKey == 'namePlateId') ubKey = 'nameplateId'
if (ubKey == 'systemVoiceId') ubKey = 'voiceId'
return [{ iKey, ubKey: ubKey as keyof UserBox,
items: profile.items.filter(x => x.itemKind === iKind || (iKey == "trophy" && x.itemKind == 3))
}]
}
return avatarKinds.map((aKind, i) => {
let items = profile.items.filter(x => x.itemKind === iKind && Math.floor(x.itemId / 100000) % 10 === i + 1)
return { iKey, ubKey: `avatar${aKind}` as keyof UserBox, items }
})
})
allItems = await DATA.allItems('chu3').catch(_ => {
loading = false
error = t("userbox.error.nodata")
}) as typeof allItems
console.log("User Items", userItems)
console.log("All items", allItems)
console.log("Userbox", userbox)
loading = false
}
USER.me().then(u => {
if (!u) throw new Error(t("userbox.error.nodata"))
user = u
return fetchData()
}).catch((e) => { loading = false; error = e.message });
function exportData() {
submitting = "export"
GAME.export('chu3')
.then(data => download(JSON.stringify(data), `AquaDX_chu3_export_${userbox.userName}.json`))
.catch(e => error = e.message)
.finally(() => submitting = "")
}
async function exportBatchManual() {
submitting = "batchExport"
const DIFFICULTY_MAP: Record<number, string> = {
0: "BASIC",
1: "ADVANCED",
2: "EXPERT",
3: "MASTER",
4: "ULTIMA"
} as const // WORLD'S END scores not supported by Tachi
const DAN_MAP: Record<number, string> = {
1: "DAN_I",
2: "DAN_II",
3: "DAN_III",
4: "DAN_IV",
5: "DAN_V",
6: "DAN_INFINITE"
} as const
const SKILL_IDS: Record<number, string> = {
100009: 'CATASTROPHY',
102009: 'CATASTROPHY',
103007: 'CATASTROPHY',
100008: 'ABSOLUTE',
101008: 'ABSOLUTE',
102008: 'ABSOLUTE',
103006: 'ABSOLUTE',
100007: 'BRAVE',
101007: 'BRAVE',
102007: 'BRAVE',
103005: 'BRAVE',
100005: 'HARD',
100006: 'HARD',
101004: 'HARD',
101005: 'HARD',
101006: 'HARD',
102004: 'HARD',
102005: 'HARD',
102006: 'HARD',
103002: 'HARD',
103003: 'HARD',
103004: 'HARD'
} as const
// Shamelessly stolen from https://github.com/beer-psi/saekawa/commit/b3bee13e126df2f4e2a449bdf971debb8c95ba40, needs to be updated every major version :(
let data: any
let output: any = {
"meta": {
"game": "chunithm",
"playtype": "Single",
"service": "AquaDX-Manual"
},
"scores": [],
"classes": {}
}
try {
data = await GAME.export('chu3')
}
catch (e) {
error = e.message
submitting = ""
return
}
if (data && "userPlaylogList" in data) {
for (let score of data.userPlaylogList) {
let clearLamp = null
let noteLamp = null
if (score.level in DIFFICULTY_MAP) {
if (score.isClear) {
clearLamp = score.skillId in SKILL_IDS ? SKILL_IDS[score.skillId] : "CLEAR"
}
else {
clearLamp = "FAILED"
}
if (score.score === 1010000) {
noteLamp = "ALL JUSTICE CRITICAL"
}
else if (score.isAllJustice) {
noteLamp = "ALL JUSTICE"
}
else if (score.isFullCombo) {
noteLamp = "FULL COMBO"
}
else {
noteLamp = "NONE"
}
output.scores.push({
"score": score.score,
"clearLamp": clearLamp,
"noteLamp": noteLamp,
"judgements": {
"jcrit": score.judgeHeaven + score.judgeCritical,
"justice": score.judgeJustice,
"attack": score.judgeAttack,
"miss": score.judgeGuilty
},
"matchType": "inGameID",
"identifier": score.musicId.toString(),
"difficulty": DIFFICULTY_MAP[score.level],
"timeAchieved": score.sortNumber * 1000,
"optional": {
"maxCombo": score.maxCombo
}
})
}
}
}
if (data.userData.classEmblemMedal in DAN_MAP) {
output.classes["dan"] = DAN_MAP[data.userData.classEmblemMedal]
}
if (data.userData.classEmblemBase in DAN_MAP) {
output.classes["emblem"] = DAN_MAP[data.userData.classEmblemBase]
}
download(JSON.stringify(output), `AquaDX_chu3_BatchManualExport_${userbox.userName}.json`)
submitting = ""
}
function download(data: string, filename: string) {
const blob = new Blob([data]);
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = filename;
link.click();
}
function g(v: string) {
if (v != ("\x63\x68\x75\x6E\x69\x74\x68\x6D ").repeat(3).trim()) return;
const t = v.substring(5, 6) + v.substring(1, 2) + "eme";
if (!localStorage.getItem(t)) {
localStorage.setItem(t, v.substring(0, 1) + "\x6E");
} else
localStorage.removeItem(t);
setTimeout(location.reload, 1000); // ?
}
let DDSreader: DDS | undefined;
let USERBOX_PROGRESS = 0;
let USERBOX_SETUP_RUN = false;
let USERBOX_SETUP_MODE = false;
let USERBOX_SETUP_TEXT = t("userbox.new.setup");
let USERBOX_ENABLED = useLocalStorage("userboxNew", false);
let USERBOX_PROFILE_ENABLED = useLocalStorage("userboxNewProfile", false);
let USERBOX_INSTALLED = false;
let USERBOX_SUPPORT = "webkitGetAsEntry" in DataTransferItem.prototype;
type OnlyNumberPropsOf<T extends Record<string, any>> = {[Prop in keyof T as (T[Prop] extends number ? Prop : never)]: T[Prop]}
let userboxSelected: keyof OnlyNumberPropsOf<UserBox> = "avatarWear";
const userboxNewOptions = ["systemVoice", "frame", "trophy", "mapIcon"]
async function userboxSafeDrop(event: Event & { currentTarget: EventTarget & HTMLInputElement; }) {
if (!event.target) return null;
let input = event.target as HTMLInputElement;
let folder = input.webkitEntries[0];
error = await userboxFileProcess(folder, (progress: number, progressString: string) => {
USERBOX_SETUP_TEXT = progressString;
USERBOX_PROGRESS = progress;
}) ?? "";
}
let USERBOX_URL_STATE = useLocalStorage("userboxURL", USERBOX_DEFAULT_URL);
function userboxHandleInput(baseURL: string, isSetByServer: boolean = false) {
if (baseURL != "")
try {
// validate url
new URL(baseURL, location.href);
} catch(err) {
if (isSetByServer)
return;
return error = t("userbox.new.error.invalidUrl")
}
USERBOX_URL_STATE.value = baseURL;
USERBOX_ENABLED.value = true;
USERBOX_PROFILE_ENABLED.value = true;
location.reload();
}
if (USERBOX_DEFAULT_URL && !USERBOX_URL_STATE.value)
userboxHandleInput(USERBOX_DEFAULT_URL, true);
indexedDB.databases().then(async (dbi) => {
let databaseExists = dbi.some(db => db.name == "userboxChusanDDS");
if (USERBOX_URL_STATE.value && databaseExists) {
indexedDB.deleteDatabase("userboxChusanDDS")
}
if (databaseExists) {
await initializeDb();
}
if (databaseExists || USERBOX_URL_STATE.value) {
DDSreader = new DDS(ddsDB);
USERBOX_INSTALLED = databaseExists || USERBOX_URL_STATE.value != "";
}
})
</script>
<StatusOverlays {error} loading={loading || !!submitting} />
{#if !loading && !error}
<div out:fade={FADE_OUT} in:fade={FADE_IN}>
<h2>{t("userbox.header.general")}</h2>
<div class="general-options">
<GameSettingFields game="chu3"/>
<InputField bind:field={userNameField}
callback={() => USERBOX.setUserBox({ field: "userName", value: userNameField.value })}/>
</div>
<h2>{t("userbox.header.userbox")}</h2>
{#if !USERBOX_ENABLED.value || !USERBOX_INSTALLED}
<div class="fields">
{#each userItems as { iKey, ubKey, items }, i}
<div class="field">
<label for={ubKey}>{ts(`userbox.${ubKey}`)}</label>
<div>
<select bind:value={userbox[ubKey]} id={ubKey} on:change={() => changed = [...changed, ubKey]}>
{#each items as option}
<option value={option.itemId}>{allItems[iKey][option.itemId]?.name || `(unknown ${option.itemId})`}</option>
{/each}
</select>
{#if changed.includes(ubKey)}
<button transition:slide={{axis: "x"}} on:click={() => submit(ubKey)} disabled={!!submitting}>
{t("settings.profile.save")}
</button>
{/if}
</div>
</div>
{/each}
</div>
{:else}
<div class="chuni-userbox-container">
<ChuniUserplateComponent chuniIsUserbox={true} on:click={() => userboxSelected = "nameplateId"} chuniCharacter={userbox.characterId} chuniLevel={userbox.level.toString()} chuniRating={userbox.playerRating / 100}
chuniNameplate={userbox.nameplateId} chuniName={userbox.userName} chuniTrophyName={allItems.trophy[userbox.trophyId].name}></ChuniUserplateComponent>
<ChuniPenguinComponent chuniWear={userbox.avatarWear} chuniHead={userbox.avatarHead} chuniBack={userbox.avatarBack}
chuniFront={userbox.avatarFront} chuniFace={userbox.avatarFace} chuniItem={userbox.avatarItem}
chuniSkin={userbox.avatarSkin}></ChuniPenguinComponent>
</div>
<div class="chuni-userbox-row">
{#each avatarKinds as avatarKind}
{#await DDSreader?.getFile(`avatarAccessoryThumbnail:${userbox[`avatar${avatarKind}`].toString().padStart(8, "0")}`) then imageURL}
<button on:click={() => userboxSelected = `avatar${avatarKind}`}>
<img src={imageURL} class={userboxSelected == `avatar${avatarKind}` ? "focused" : ""} alt={allItems.avatarAccessory[userbox[`avatar${avatarKind}`]].name} title={allItems.avatarAccessory[userbox[`avatar${avatarKind}`]].name}>
</button>
{/await}
{/each}
</div>
<div class="chuni-userbox">
{#if userboxSelected == "nameplateId"}
{#each userItems.find(f => f.ubKey == "nameplateId")?.items ?? [] as item}
{#await DDSreader?.getFile(`nameplate:${item.itemId.toString().padStart(8, "0")}`) then imageURL}
<button class="nameplate" on:click={() => {userbox[userboxSelected] = item.itemId; submit(userboxSelected)}}>
<img src={imageURL} alt={allItems.namePlate[item.itemId].name} title={allItems.namePlate[item.itemId].name}>
</button>
{/await}
{/each}
{:else}
{#each userItems.find(f => f.ubKey == userboxSelected)?.items ?? [] as item}
{#await DDSreader?.getFile(`avatarAccessoryThumbnail:${item.itemId.toString().padStart(8, "0")}`) then imageURL}
<button on:click={() => {userbox[userboxSelected] = item.itemId; submit(userboxSelected)}}>
<img src={imageURL} alt={allItems.avatarAccessory[item.itemId].name} title={allItems.avatarAccessory[item.itemId].name}>
</button>
{/await}
{/each}
{/if}
</div>
<div class="fields">
{#each userItems.filter(i => userboxNewOptions.includes(i.iKey)) as { iKey, ubKey, items }, i}
<div class="field">
<label for={ubKey}>{ts(`userbox.${ubKey}`)}</label>
<div>
<select bind:value={userbox[ubKey]} id={ubKey} on:change={() => changed = [...changed, ubKey]}>
{#each items as option}
<option value={option.itemId}>{allItems[iKey][option.itemId]?.name || `(unknown ${option.itemId})`}</option>
{/each}
</select>
{#if changed.includes(ubKey)}
<button transition:slide={{axis: "x"}} on:click={() => submit(ubKey)} disabled={!!submitting}>
{t("settings.profile.save")}
</button>
{/if}
</div>
</div>
{/each}
</div>
{/if}
{#if USERBOX_INSTALLED}
<!-- god this is a mess but idgaf atp -->
<div class="field boolean" style:margin-top="1em">
<input type="checkbox" bind:checked={USERBOX_ENABLED.value} id="newUserbox">
<label for="newUserbox">
<span class="name">{t("userbox.new.activate")}</span>
<span class="desc">{t(`userbox.new.activate_desc`)}</span>
</label>
</div>
<div class="field boolean" style:margin-top="1em">
<input type="checkbox" bind:checked={USERBOX_PROFILE_ENABLED.value} id="newUserboxProfile">
<label for="newUserboxProfile">
<span class="name">{t("userbox.new.activate_profile")}</span>
<span class="desc">{t(`userbox.new.activate_profile_desc`)}</span>
</label>
</div>
{/if}
{#if USERBOX_SUPPORT && !USERBOX_DEFAULT_URL}
<p>
<button on:click={() => USERBOX_SETUP_RUN = !USERBOX_SETUP_RUN}>{t(!USERBOX_INSTALLED ? `userbox.new.activate_first` : `userbox.new.activate_update`)}</button>
</p>
{/if}
<ChuniMatchingSettings/><br>
<button class="exportButton" on:click={exportData}>
<Icon icon="bxs:file-export"/>
{t('settings.export')}
</button>
<button class="exportBatchManualButton" on:click={exportBatchManual}>
<Icon icon="bxs:file-export"/>
{t('settings.batchManualExport')}
</button>
</div>
{/if}
{#if USERBOX_SETUP_RUN && !error}
<div class="overlay" transition:fade>
<div>
<h2>{t('userbox.new.name')}</h2>
<span>{USERBOX_SETUP_MODE ? t('userbox.new.url_warning') : USERBOX_SETUP_TEXT}</span>
<div class="actions">
{#if USERBOX_SETUP_MODE}
<input type="text" on:keyup={e => {if (e.key == "Enter") { userboxHandleInput((e.target as HTMLInputElement).value) } else g(e.currentTarget.value)}} class="add-margin" placeholder="Base URL">
{:else}
{#if USERBOX_PROGRESS != 0}
<div class="progress">
<div class="progress-bar" style="width: {USERBOX_PROGRESS}%"></div>
</div>
{:else}
<p class="notice add-margin">
{t('userbox.new.setup.notice')}
</p>
<button class="drop-btn">
<input type="file" on:input={userboxSafeDrop} on:click={e => e.preventDefault()}>
{t('userbox.new.drop')}
</button>
{/if}
{/if}
{#if USERBOX_PROGRESS == 0}
<button on:click={() => USERBOX_SETUP_RUN = false}>
{t('back')}
</button>
<button on:click={() => USERBOX_SETUP_MODE = !USERBOX_SETUP_MODE}>
{t(USERBOX_SETUP_MODE ? 'userbox.new.switch.to_drop' : 'userbox.new.switch.to_url')}
</button>
{/if}
</div>
</div>
</div>
{/if}
<style lang="sass">
@use "../../vars"
input
width: 100%
h2
margin-bottom: 0.5rem
.general-options
display: flex
flex-direction: column
flex-wrap: wrap
gap: 12px
p.notice
opacity: 0.6
margin-top: 0
.progress
width: 100%
height: 10px
box-shadow: 0 0 1px 1px vars.$ov-lighter
border-radius: 25px
margin-bottom: 15px
overflow: hidden
.progress-bar
background: #b3c6ff
height: 100%
border-radius: 25px
.add-margin, .drop-btn
margin-bottom: 1em
.drop-btn
position: relative
width: 100%
aspect-ratio: 3
background: transparent
box-shadow: 0 0 1px 1px vars.$ov-lighter
> input
position: absolute
top: 0
left: 0
width: 100%
height: 100%
opacity: 0
.preview
margin-top: 32px
display: flex
flex-wrap: wrap
justify-content: space-between
gap: 32px
> div
position: relative
width: 100px
height: 100px
overflow: hidden
background: vars.$ov-lighter
border-radius: vars.$border-radius
span
position: absolute
bottom: 0
width: 100%
text-align: center
z-index: 10
background: rgba(0, 0, 0, 0.2)
backdrop-filter: blur(2px)
img
position: absolute
inset: 0
width: 100%
height: 100%
object-fit: contain
.fields
display: flex
flex-direction: column
gap: 12px
width: 100%
flex-grow: 0
label
display: flex
flex-direction: column
select
width: 100%
.field
display: flex
flex-direction: column
width: 100%
label
max-width: max-content
> div:not(.bool)
display: flex
align-items: center
gap: 1rem
margin-top: 0.5rem
> select
flex: 1
.field.boolean
display: flex
flex-direction: row
align-items: center
gap: 1rem
width: auto
input
width: auto
aspect-ratio: 1 / 1
label
display: flex
flex-direction: column
max-width: max-content
.desc
opacity: 0.6
/* AquaBox */
.chuni-userbox-row
width: 100%
display: flex
button
padding: 0
margin: 0
width: 100%
flex: 0 1 100%
background: none
aspect-ratio: 1
img
width: 100%
filter: brightness(50%)
&.focused
filter: brightness(75%)
.chuni-userbox
width: calc(100% - 20px)
height: 350px
display: flex
flex-direction: row
flex-wrap: wrap
padding: 10px
background: vars.$c-bg
border-radius: 16px
overflow-y: auto
margin-bottom: 15px
justify-content: center
button
padding: 0
margin: 0
width: 20%
align-self: flex-start
background: none
aspect-ratio: 1
img
width: 100%
&.nameplate
width: 50%
aspect-ratio: unset
border: none
.chuni-userbox-container
display: flex
align-items: center
justify-content: center
@media (max-width: 1000px)
.chuni-userbox-container
flex-wrap: wrap
</style>

View File

@ -0,0 +1,41 @@
<script lang="ts">
import { slide } from "svelte/transition";
import { SETTING } from "../../libs/sdk";
import type { GameOption } from "../../libs/generalTypes";
import { ts } from "../../libs/i18n";
import StatusOverlays from "../StatusOverlays.svelte";
import InputWithButton from "../ui/InputWithButton.svelte";
import InputField from "../ui/InputField.svelte";
export let game: string;
let gameFields: GameOption[] = []
let submitting = ""
let error: string;
SETTING.get().then(s => {
gameFields = s.filter(it => it.game === game)
})
async function submitGameOption(field: string, value: any) {
if (submitting) return false
submitting = field
await SETTING.set(field, value).catch(e => error = e.message).finally(() => submitting = "")
return true
}
</script>
<div class="fields">
{#each gameFields as field}
<InputField field={field} callback={() => submitGameOption(field.key, field.value)}/>
{/each}
</div>
<StatusOverlays {error} loading={!gameFields.length || !!submitting}/>
<style lang="sass">
.fields
display: flex
flex-direction: column
gap: 12px
</style>

View File

@ -0,0 +1,59 @@
<script>
import { fade } from "svelte/transition";
import { FADE_IN, FADE_OUT } from "../../libs/config";
import GameSettingFields from "./GameSettingFields.svelte";
import { t, ts } from "../../libs/i18n";
import useLocalStorage from "../../libs/hooks/useLocalStorage.svelte";
import RegionSelector from "./RegionSelector.svelte";
const rounding = useLocalStorage("rounding", true);
</script>
<div out:fade={FADE_OUT} in:fade={FADE_IN} class="fields">
<blockquote>
{ts("settings.gameNotice")}
</blockquote>
<GameSettingFields game="general"/>
<div class="field">
<div class="bool">
<input id="rounding" type="checkbox" bind:checked={rounding.value}/>
<label for="rounding">
<span class="name">{ts(`settings.fields.rounding.name`)}</span>
<span class="desc">{ts(`settings.fields.rounding.desc`)}</span>
</label>
</div>
</div>
<div class="divider"></div>
<blockquote>
{ts("settings.regionNotice")}
</blockquote>
<RegionSelector/>
</div>
<style lang="sass">
@use "../../vars"
.fields
display: flex
flex-direction: column
gap: 12px
.bool
display: flex
align-items: center
gap: 1rem
label
display: flex
flex-direction: column
.desc
opacity: 0.6
.divider
width: 100%
height: 0.5px
background: white
opacity: 0.2
margin: 0.4rem 0
</style>

View File

@ -0,0 +1,104 @@
<script lang="ts">
import { slide, fade } from "svelte/transition";
import { FADE_IN, FADE_OUT } from "../../libs/config";
import { t } from "../../libs/i18n.js";
import Icon from "@iconify/svelte";
import StatusOverlays from "../StatusOverlays.svelte";
import { GAME } from "../../libs/sdk";
import GameSettingFields from "./GameSettingFields.svelte";
import { download } from "../../libs/ui";
const profileFields = [
['name', t('settings.mai2.name')],
]
export let username: string;
let error: string
let submitting = ""
let values = Array(profileFields.length).fill('')
let changed: string[] = []
GAME.userSummary(username, 'mai2').then(({name}) => {
values = [name]
}).catch(e => error = e.message)
function submit(field: string, value: string) {
if (submitting) return
submitting = field
switch (field) {
case 'name':
GAME.changeName('mai2', value).then(({newName}) => {
changed = changed.filter(c => c !== field)
values = [newName]
}).catch(e => error = e.message).finally(() => submitting = "")
break
}
}
function exportData() {
submitting = "export"
GAME.export('mai2')
.then(data => download(JSON.stringify(data), `AquaDX_maimai2_export_${values[0]}.json`))
.catch(e => error = e.message)
.finally(() => submitting = "")
}
</script>
<div class="fields" out:fade={FADE_OUT} in:fade={FADE_IN}>
{#each profileFields as [field, name], i (field)}
<div class="field">
<label for={field}>{name}</label>
<div>
<input id={field} type="text"
bind:value={values[i]} on:input={() => changed = [...changed, field]}
placeholder={field === 'password' ? t('settings.profile.unchanged') : t('settings.profile.unset')}/>
{#if changed.includes(field) && values[i]}
<button transition:slide={{axis: 'x'}} on:click={() => submit(field, values[i])}>
{#if submitting === field}
<Icon icon="line-md:loading-twotone-loop"/>
{:else}
{t('settings.profile.save')}
{/if}
</button>
{/if}
</div>
</div>
{/each}
<GameSettingFields game="mai2"/>
<button class="exportButton" on:click={exportData}>
<Icon icon="bxs:file-export"/>
{t('settings.export')}
</button>
</div>
<StatusOverlays {error} loading={!values[0] || !!submitting}/>
<style lang="sass">
.fields
display: flex
flex-direction: column
gap: 12px
.field
display: flex
flex-direction: column
label
max-width: max-content
> div:not(.bool)
display: flex
align-items: center
gap: 1rem
margin-top: 0.5rem
> input
flex: 1
.exportButton
display: flex
justify-content: center
align-items: center
gap: 5px
</style>

View File

@ -0,0 +1,9 @@
<script>
import { fade } from "svelte/transition";
import { FADE_IN, FADE_OUT } from "../../libs/config";
import GameSettingFields from "./GameSettingFields.svelte";
</script>
<div out:fade={FADE_OUT} in:fade={FADE_IN}>
<GameSettingFields game="ongeki"/>
</div>

View File

@ -0,0 +1,59 @@
<script lang="ts">
import { USER} from "../../libs/sdk";
import { ts } from "../../libs/i18n";
import StatusOverlays from "../StatusOverlays.svelte";
let regionId = $state(0);
let submitting = ""
let error: string;
const prefectures = ["None","Aichi","Aomori","Akita","Ishikawa","Ibaraki","Iwate","Ehime","Oita","Osaka","Okayama","Okinawa","Kagawa","Kagoshima","Kanagawa","Gifu","Kyoto","Kumamoto","Gunma","Kochi","Saitama","Saga","Shiga","Shizuoka","Shimane","Chiba","Tokyo","Tokushima","Tochigi","Tottori","Toyama","Nagasaki","Nagano","Nara","Niigata","Hyogo","Hiroshima","Fukui","Fukuoka","Fukushima","Hokkaido","Mie","Miyagi","Miyazaki","Yamagata","Yamaguchi","Yamanashi","Wakayama"]
USER.me().then(user => {
const parsedRegion = parseInt(user.region);
if (!isNaN(parsedRegion) && parsedRegion > 0) {
regionId = parsedRegion - 1;
} else {
regionId = 0;
}
})
async function saveNewRegion() {
if (submitting) return false
submitting = "region"
await USER.changeRegion(regionId+1).catch(e => error = e.message).finally(() => submitting = "")
return true
}
</script>
<div class="fields">
<label for="rounding">
<span class="name">{ts(`settings.regionSelector.title`)}</span>
<span class="desc">{ts(`settings.regionSelector.desc`)}</span>
</label>
<select bind:value={regionId} on:change={saveNewRegion}>
<option value={0} disabled selected>{ts("settings.regionSelector.select")}</option>
{#each prefectures.slice(1) as prefecture, index}
<option value={index}>{prefecture}</option>
{/each}
</select>
</div>
<StatusOverlays {error} loading={!!submitting}/>
<style lang="sass">
@use "../../vars"
.fields
display: flex
flex-direction: column
gap: 12px
label
display: flex
flex-direction: column
.desc
opacity: 0.6
</style>

View File

@ -0,0 +1,9 @@
<script>
import { fade } from "svelte/transition";
import { FADE_IN, FADE_OUT } from "../../libs/config";
import GameSettingFields from "./GameSettingFields.svelte";
</script>
<div out:fade={FADE_OUT} in:fade={FADE_IN}>
<GameSettingFields game="wacca"/>
</div>

View File

@ -0,0 +1,227 @@
<script lang="ts">
import { removeImg } from "../../../libs/ui";
import { DDS } from "../../../libs/userbox/dds"
import { ddsDB } from "../../../libs/userbox/userbox"
const DDSreader = new DDS(ddsDB);
export var chuniWear = 1100001;
export var chuniHead = 1200001;
export var chuniFace = 1300001;
export var chuniSkin = 1400001;
export var chuniItem = 1500001;
export var chuniFront = 1600001;
export var chuniBack = 1700001;
export var classPassthrough: string = ``;
</script>
<div class="chuni-penguin {classPassthrough}">
<div class="chuni-penguin-body">
<!-- Body -->
{#await DDSreader.getFileFromSheet(`avatarAccessory:${chuniSkin.toString().padStart(8, "0")}`, 0, 0, 256, 400, 0.75) then imageURL}
<img class="chuni-penguin-skin" src={imageURL} alt="Body" on:error={removeImg}>
{/await}
<!-- Face -->
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_face_00.dds", 0, 0, 225, 150, 0.75) then imageURL}
<img class="chuni-penguin-eyes chuni-penguin-accessory" src={imageURL} alt="Eyes" on:error={removeImg}>
{/await}
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 86, 103, 96, 43, 0.75) then imageURL}
<img class="chuni-penguin-beak chuni-penguin-accessory" src={imageURL} alt="Beak" on:error={removeImg}>
{/await}
{#if chuniItem != 1500001}
<!-- Arms (straight) -->
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 0, 0, 85, 160, 0.75) then imageURL}
<img class="chuni-penguin-arm-left chuni-penguin-arm" src={imageURL} alt="Left Arm" on:error={removeImg}/>
<div class="chuni-penguin-arm-left chuni-penguin-arm-type-1 chuni-penguin-arm">
{#await DDSreader.getFileFromSheet(`avatarAccessory:${chuniItem.toString().padStart(8, "0")}`, 0, 0, 200, 544, 0.75) then imageURL}
<img class="chuni-penguin-item chuni-penguin-accessory chuni-penguin-item-left" src={imageURL} alt="Item" on:error={removeImg}>
{/await}
</div>
{/await}
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 0, 0, 85, 160, 0.75) then imageURL}
<img class="chuni-penguin-arm-right chuni-penguin-arm" src={imageURL} alt="Right Arm" on:error={removeImg}>
<div class="chuni-penguin-arm-right chuni-penguin-arm-type-1 chuni-penguin-arm">
{#await DDSreader.getFileFromSheet(`avatarAccessory:${chuniItem.toString().padStart(8, "0")}`, 200, 0, 200, 544, 0.75) then imageURL}
<img class="chuni-penguin-item chuni-penguin-accessory chuni-penguin-item-right" src={imageURL} alt="Item" on:error={removeImg}>
{/await}
</div>
{/await}
{:else}
<!-- Arms (bent) -->
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 80, 0, 110, 100, 0.75) then imageURL}
<img class="chuni-penguin-arm-left chuni-penguin-arm chuni-penguin-arm-type-2" src={imageURL} alt="Left Arm" on:error={removeImg}>
{/await}
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 80, 0, 110, 100, 0.75) then imageURL}
<img class="chuni-penguin-arm-right chuni-penguin-arm chuni-penguin-arm-type-2" src={imageURL} alt="Right Arm" on:error={removeImg}>
{/await}
{/if}
<!-- Wear -->
{#await DDSreader.getFileScaled(`avatarAccessory:${chuniWear.toString().padStart(8, "0")}`, 0.75, `avatarAccessory:01100001`) then imageURL}
<img class="chuni-penguin-wear chuni-penguin-accessory" src={imageURL} alt="Wear" on:error={removeImg}>
{/await}
<!-- Head -->
{#await DDSreader.getFileScaled(`avatarAccessory:${chuniHead.toString().padStart(8, "0")}`, 0.75, `avatarAccessory:01200001`) then imageURL}
<img class="chuni-penguin-head chuni-penguin-accessory" src={imageURL} alt="Head" on:error={removeImg}>
{/await}
{#if chuniHead == 1200001}
<!-- If wearing original hat, add the feather -->
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 5, 160, 100, 150, 0.75) then imageURL}
<img class="chuni-penguin-head-3 chuni-penguin-accessory" src={imageURL} alt="Head3" on:error={removeImg}>
{/await}
{/if}
<!-- Oops, I realized just now that the thing on it's forehead applies to all hats. My mistake! -->
{#await DDSreader.getFileFromSheet("surfboard:CHU_UI_Common_Avatar_body_00.dds", 105, 153, 56, 58, 0.75) then imageURL}
<img class="chuni-penguin-head-2 chuni-penguin-accessory" src={imageURL} alt="Head2" on:error={removeImg}>
{/await}
<!-- Face (Accessory) -->
{#await DDSreader.getFileScaled(`avatarAccessory:${chuniFace.toString().padStart(8, "0")}`, 0.75, `avatarAccessory:01300001`) then imageURL}
<img class="chuni-penguin-face-accessory chuni-penguin-accessory" src={imageURL} alt="Face (Accessory)" on:error={removeImg}>
{/await}
<!-- Front -->
{#await DDSreader.getFileScaled(`avatarAccessory:${chuniFront.toString().padStart(8, "0")}`, 0.75) then imageURL}
<img class="chuni-penguin-front chuni-penguin-accessory" src={imageURL} alt="Front" on:error={removeImg}>
{/await}
<!-- Back -->
{#await DDSreader.getFileScaled(`avatarAccessory:${chuniBack.toString().padStart(8, "0")}`, 0.75) then imageURL}
<img class="chuni-penguin-back chuni-penguin-accessory" src={imageURL} alt="Back" on:error={removeImg}>
{/await}
</div>
<div class="chuni-penguin-feet">
<!-- Feet -->
{#await DDSreader.getFileFromSheet(`avatarAccessory:${chuniSkin.toString().padStart(8, "0")}`, 0, 410, 85, 80, 0.75) then imageURL}
<img src={imageURL} alt="Foot" on:error={removeImg}>
{/await}
{#await DDSreader.getFileFromSheet(`avatarAccessory:${chuniSkin.toString().padStart(8, "0")}`, 85, 410, 85, 80, 0.75) then imageURL}
<img src={imageURL} alt="Foot" on:error={removeImg}>
{/await}
</div>
</div>
<!-- Truly sorry for the horrors below -->
<style lang="sass">
@keyframes chuniPenguinBodyBob
0%
transform: translate(-50%, 5px) translate(0%, -50%)
50%
transform: translate(-50%, 0%) translate(0%, -50%)
100%
transform: translate(-50%, 5px) translate(0%, -50%)
@keyframes chuniPenguinArmLeft
0%
transform: translate(-50%, 0) rotate(-2deg)
50%
transform: translate(-50%, 0) rotate(2deg)
100%
transform: translate(-50%, 0) rotate(-2deg)
@keyframes chuniPenguinArmRight
0%
transform: translate(-50%, 0) scaleX(-1) rotate(-2deg)
50%
transform: translate(-50%, 0) scaleX(-1) rotate(2deg)
100%
transform: translate(-50%, 0) scaleX(-1) rotate(-2deg)
img
-webkit-user-drag: none
user-select: none
.chuni-penguin
height: 512px
aspect-ratio: 1/2
position: relative
pointer-events: none
z-index: 1
&.chuni-penguin-float
position: absolute
top: 50%
left: 50%
transform: translate(-50%, -50%)
.chuni-penguin-body, .chuni-penguin-feet
transform: translate(-50%, -50%)
position: absolute
left: 50%
.chuni-penguin-body
top: 50%
z-index: 1
animation: chuniPenguinBodyBob 1s infinite cubic-bezier(0.45, 0, 0.55, 1)
.chuni-penguin-feet
top: 80%
z-index: 0
width: 175px
display: flex
justify-content: center
img
margin-left: auto
margin-right: auto
.chuni-penguin-arm
transform-origin: 90% 10%
position: absolute
top: 40%
z-index: 0
&.chuni-penguin-arm-type-1
width: calc(85px * 0.75)
height: calc(160px * 0.75)
z-index: 2
&.chuni-penguin-arm-type-2
transform-origin: 40% 10%
z-index: 2
&.chuni-penguin-arm-left
left: 0%
transform: translate(-50%, 0)
animation: chuniPenguinArmLeft 1s infinite cubic-bezier(0.45, 0, 0.55, 1)
&.chuni-penguin-arm-type-2
left: 15%
&.chuni-penguin-arm-right
left: 72.5%
transform: translate(-50%, 0) scaleX(-1)
animation: chuniPenguinArmRight 1s infinite cubic-bezier(0.45, 0, 0.55, 1)
&.chuni-penguin-arm-type-2
left: 95%
.chuni-penguin-accessory
transform: translate(-50%, -50%)
position: absolute
top: 50%
left: 50%
.chuni-penguin-item
z-index: 1
top: 25%
left: 0
&.chuni-penguin-item-left
transform: translate(-50%, -50%) rotate(-15deg)
&.chuni-penguin-item-right
transform: translate(-50%, -50%) scaleX(-1) rotate(15deg)
.chuni-penguin-eyes
top: 22.5%
.chuni-penguin-beak
top: 29.5%
.chuni-penguin-wear
top: 60%
.chuni-penguin-head
top: 7.5%
z-index: 10
.chuni-penguin-head-2
top: 13.5%
.chuni-penguin-head-3
top: -12.5%
.chuni-penguin-face-accessory
top: 27.5%
.chuni-penguin-back
z-index: -1
</style>

View File

@ -0,0 +1,70 @@
<script lang="ts">
import { initializeDb } from "../../../libs/userbox/userbox"
import ChuniPenguinComponent from "./ChuniPenguin.svelte"
import ChuniUserplateComponent from "./ChuniUserplate.svelte"
import { type UserBox } from "../../../libs/generalTypes"
import { DATA, USERBOX } from "../../../libs/sdk"
import useLocalStorage from "../../../libs/hooks/useLocalStorage.svelte"
import { t } from "../../../libs/i18n"
/**
* This is a UserBox viewer on the Profile page (UserHome), added by raymond
* to view other user's penguins on their profile.
*/
export let game: string
export let username: string
export let error: string = ""
let USERBOX_ACTIVE = useLocalStorage("userboxNewProfile", false)
let USERBOX_INSTALLED = false
let userbox: UserBox
let allItems: Record<string, Record<string, { name: string }>> = {}
if (game == "chu3" && USERBOX_ACTIVE.value) {
indexedDB.databases().then(async (dbi) => {
let databaseExists = dbi.some(db => db.name == "userboxChusanDDS")
if (databaseExists) {
await initializeDb()
const profile = await USERBOX.getUserProfile(username).catch(_ => null)
if (!profile) return
userbox = profile
console.log(userbox)
allItems = await DATA.allItems('chu3').catch(_ => {
error = t("userbox.error.nodata")
}) as typeof allItems
USERBOX_INSTALLED = databaseExists
}
})
}
</script>
{#if USERBOX_ACTIVE.value && USERBOX_INSTALLED && game == "chu3"}
<div class="chuni-userbox-container">
<ChuniUserplateComponent chuniCharacter={userbox.characterId} chuniRating={userbox.playerRating / 100} chuniLevel={userbox.level.toString()}
chuniNameplate={userbox.nameplateId} chuniName={userbox.userName} chuniTrophyName={allItems.trophy[userbox.trophyId].name}></ChuniUserplateComponent>
<div class="chuni-penguin-container">
<ChuniPenguinComponent classPassthrough="chuni-penguin-float" chuniWear={userbox.avatarWear} chuniHead={userbox.avatarHead} chuniBack={userbox.avatarBack}
chuniFront={userbox.avatarFront} chuniFace={userbox.avatarFace} chuniItem={userbox.avatarItem}
chuniSkin={userbox.avatarSkin}></ChuniPenguinComponent>
</div>
</div>
{/if}
<style lang="sass">
.chuni-userbox-container
display: flex
align-items: center
justify-content: center
.chuni-penguin-container
height: 256px
aspect-ratio: 1
position: relative
@media (max-width: 1000px)
.chuni-userbox-container
flex-wrap: wrap
</style>

View File

@ -0,0 +1,192 @@
<script lang="ts">
import { DDS, type RGB } from "../../../libs/userbox/dds"
import { ddsDB } from "../../../libs/userbox/userbox"
const DDSreader = new DDS(ddsDB);
export var chuniLevel: string = ""
export var chuniName: string = "AquaDX"
export var chuniRating: number = 1.23
export var chuniNameplate: number = 1
export var chuniCharacter: number = 0
export var chuniTrophyName: string = "NEWCOMER"
export var chuniIsUserbox: boolean = false;
let ratingToString = (rating: number) => {
return rating.toFixed(2)
}
interface RatingRange {
min: number,
offset: number,
color?: RGB
};
// https://en.wikipedia.org/wiki/Chunithm#Rating
const ratingColors: RatingRange[] = ([
{min: 0.00, offset: 4, color: {r: 0, g: 191, b: 64}},
{min: 4.00, offset: 4, color: {r: 255, g: 111, b: 0}},
{min: 7.00, offset: 4, color: {r: 255, g: 64, b: 64}},
{min: 10.00, offset: 4, color: {r: 147, g: 38, b: 255}},
{min: 12.00, offset: 3},
{min: 13.25, offset: 2},
{min: 14.50, offset: 1},
{min: 15.25, offset: 0},
{min: 16.00, offset: 5}
]).filter(f => f.min <= chuniRating);
const ratingDigitOrder = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "."]
const ratingColorData = (ratingColors[ratingColors.length - 1] ?? ratingColors[0]);
</script>
{#await DDSreader?.getFile(`nameplate:${chuniNameplate.toString().padStart(8, "0")}`, `nameplate:00000001`) then nameplateURL}
<!-- svelte-ignore a11y_click_events_have_key_events -->
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div on:click class="chuni-nameplate" class:chuni-nameplate-clickable={chuniIsUserbox} style:background={`url(${nameplateURL})`}>
{#await DDSreader?.getFile(`characterThumbnail:${chuniCharacter.toString().padStart(6, "0")}`, `characterThumbnail:000000`) then characterThumbnailURL}
<img class="chuni-character" src={characterThumbnailURL} alt="Character">
{/await}
{#await DDSreader?.getFileFromSheet("surfboard:CHU_UI_title_rank_00_v10.dds", 5, 5 + (75 * 2), 595, 64) then trophyURL}
<div class="chuni-trophy" title={chuniTrophyName}>
{chuniTrophyName}
</div>
<img src={trophyURL} class="chuni-trophy-bg" alt="Trophy" title={chuniTrophyName}>
{/await}
<div class="chuni-user-info">
<div class="chuni-user-name">
<span>
Lv.
<span class="chuni-user-level">
{chuniLevel}
</span>
</span>
<span class="chuni-user-name-text">
{chuniName}
</span>
</div>
<div class={`chuni-user-rating color-${ratingColorData.color}`}>
{#await DDSreader?.getFileFromSheet("surfboard:CHU_UI_Common_01_v11.dds", 485, 5 + (28 * ratingColorData.offset), 62, 15, undefined, ratingColorData.color) then url}
{#if url}
<img src={url} alt="Rating">
<span class="chuni-user-rating-number">
{#each ratingToString(chuniRating).split("") as digit}
{#await DDSreader?.getFileFromSheet("surfboard:CHU_UI_Common_01_v11.dds", 552 + (24 * (ratingDigitOrder.indexOf(digit) ?? 0)), 1 + (28 * ratingColorData.offset), 16, 20, undefined, ratingColorData.color) then url}
<img src={url} alt="Rating Digit">
{/await}
{/each}
</span>
{:else}
RATING
<span class="chuni-user-rating-number">
{ratingToString(chuniRating)}
</span>
{/if}
{/await}
</div>
</div>
</div>
{/await}
<style lang="sass">
@use "../../../vars"
@font-face
font-family: "Gothic A1"
src: url("/assets/fonts/GothicA1.woff2")
.chuni-nameplate
width: 576px
height: 228px
position: relative
font-size: 16px
/* Overlap penguin avatar when put side to side */
z-index: 1
&.chuni-nameplate-clickable
cursor: pointer
.chuni-trophy
width: 390px
height: 45px
background-position: center
background-size: cover
color: black
display: flex
justify-content: center
align-items: center
position: absolute
right: 25px
top: 40px
font-size: 1.15em
font-family: "Gothic A1", sans-serif
font-weight: bold
overflow-x: hidden
white-space: nowrap
text-overflow: ellipsis
z-index: 1
text-shadow: 0 1px white
margin: 0 10px
img.chuni-trophy-bg
width: 410px
height: 45px
position: absolute
top: 40px
right: 25px
z-index: -1
.chuni-character
position: absolute
top: 87px
right: 25px
width: 82px
aspect-ratio: 1
box-shadow: 0 0 1px 1px white
background: #efefef
.chuni-user-info
height: 82px
width: 320px
position: absolute
top: 87px
right: 110px
background: #fff9
border-radius: 1px
box-shadow: 0 0 1px 1px #ccc
display: flex
flex-direction: column
.chuni-user-name, .chuni-user-rating
margin: 0 4px
display: flex
align-items: center
color: black
font-family: "Gothic A1", sans-serif
font-weight: bold
.chuni-user-name
flex: 1 0 65%
box-shadow: 0 1px 0 #ccc
white-space: nowrap
text-overflow: ellipsis
.chuni-user-level
font-size: 1.5em
margin-left: 10px
.chuni-user-name-text
margin-left: auto
font-size: 2em
.chuni-user-rating
flex: 1 0 35%
font-size: 0.875em
text-shadow: #333 1px 1px, #333 1px -1px, #333 -1px 1px, #333 -1px -1px
color: #fff
.chuni-user-rating-number
font-size: 1.5em
margin-left: 10px
</style>

View File

@ -0,0 +1,39 @@
<script lang="ts">
import { fade } from "svelte/transition";
import { t } from "../../libs/i18n";
import { DISCORD_INVITE } from "../../libs/config";
export let error: string;
export let expected: boolean = false;
</script>
<div class="overlay" transition:fade>
<div>
<h2 class="error">{t('status.error')}</h2>
{#if !expected}
<span>{t('status.error.hint')}<a href={DISCORD_INVITE}>{t('status.error.hint.link')}</a></span>
{/if}
<span class="detail">{error}</span>
<div class="actions">
<button on:click={() => location.reload()} class="error">
{t('action.refresh')}
</button>
</div>
</div>
</div>
<style lang="sass">
.actions
display: flex
gap: 16px
button
width: 100%
.detail
white-space: pre-line
font-size: 0.9em
line-height: 1.2
opacity: 0.8
</style>

View File

@ -0,0 +1,47 @@
<script lang="ts">
import { slide } from "svelte/transition";
import { ts } from "../../libs/i18n";
import InputWithButton from "./InputWithButton.svelte";
export let field: {key: string, value: any, type: string, changed?: boolean};
export let callback: () => Promise<boolean>;
</script>
<div class="field {field.type.toLowerCase()}">
{#if field.type.toLowerCase() === "boolean"}
<input id={field.key} type="checkbox" bind:checked={field.value} on:change={callback}/>
<label for={field.key}>
<span class="name">{ts(`settings.fields.${field.key}.name`)}</span>
<span class="desc">{ts(`settings.fields.${field.key}.desc`)}</span>
</label>
{/if}
{#if field.type.toLowerCase() === "string"}
<label for={field.key}>
<span class="name">{ts(`settings.fields.${field.key}.name`)}</span>
<span class="desc">{ts(`settings.fields.${field.key}.desc`)}</span>
</label>
<InputWithButton bind:field={field} callback={callback}/>
{/if}
</div>
<style lang="sass">
.field.string
flex-direction: column
align-items: flex-start
gap: 0.5rem
.field.boolean
align-items: center
gap: 1rem
.field
display: flex
label
display: flex
flex-direction: column
max-width: max-content
.desc
opacity: 0.6
</style>

View File

@ -0,0 +1,29 @@
<script lang="ts">
import { slide } from "svelte/transition";
import { ts } from "../../libs/i18n";
export let field: {key: string, value: string, changed?: boolean};
export let callback: () => Promise<boolean>;
</script>
<div class="field">
<input id={field.key} type="text" bind:value={field.value}
on:input={() => field.changed = true}/>
{#if field.changed}
<button on:click={async () => { if (await callback()) field.changed = false } }
transition:slide={{axis: 'x'}}>
{ts('settings.profile.save')}
</button>
{/if}
</div>
<style lang="sass">
.field
display: flex
align-items: center
gap: 1rem
width: 100%
input
flex: 1
</style>

View File

@ -0,0 +1,30 @@
<script lang="ts">
import Icon from '@iconify/svelte';
import { fade } from 'svelte/transition'
</script>
<div class="overlay loading" transition:fade>
<Icon class="icon" icon="svg-spinners:pulse-2"/>
<span><span>LOADING</span></span>
</div>
<style lang="sass">
.loading.overlay
font-size: 28rem
:global(.icon)
opacity: 0.5
> span
position: absolute
inset: 0
display: flex
justify-content: center
align-items: center
background: transparent
letter-spacing: 20px
margin-left: 20px
font-size: 1.5rem
</style>

View File

@ -0,0 +1,47 @@
import type { ChusanMatchingOption } from "./generalTypes"
export const AQUA_HOST = import.meta.env.VITE_AQUA_HOST
export const DATA_HOST = import.meta.env.VITE_DATA_HOST
// This will be displayed for users to connect from the client
export const AQUA_CONNECTION = import.meta.env.VITE_AQUA_CONNECTION
export const TURNSTILE_SITE_KEY = import.meta.env.VITE_TURNSTILE_SITE_KEY
export const DISCORD_INVITE = import.meta.env.VITE_DISCORD_INVITE
export const TELEGRAM_INVITE = import.meta.env.VITE_TELEGRAM_INVITE
export const QQ_INVITE = import.meta.env.VITE_QQ_INVITE
// UI
export const FADE_OUT = { duration: 200 }
export const FADE_IN = { delay: 400 }
export const DEFAULT_PFP = '/assets/imgs/no_profile.png'
export const ANNOUNCEMENT = '' // If set, will add an announcement to the top bar. Keep it short.
// Documentation for Userbox mode can be found in `docs/aquabox-url-mode.md`
// Please note that if this is set, it must be manually unset by users in Chuni Settings -> Update Userbox -> Switch to URL mode -> (empty value) -> Enter key
export const USERBOX_DEFAULT_URL = ""
export const HAS_USERBOX_ASSETS = true
// Meow meow meow
// Matching servers
export const CHU3_MATCHINGS: ChusanMatchingOption[] = [
{
name: "林国对战",
ui: "https://chu3-match.sega.ink/rooms",
guide: "https://performai.evilleaker.com/manual/games/chunithm/national_battle/",
matching: "https://chu3-match.sega.ink/",
reflector: "http://reflector.naominet.live:18080/",
coop: ["RinNET", "MysteriaNET"],
},
{
name: "Yukiotoko",
ui: "https://yukiotoko.metatable.sh/",
guide: "https://github.com/MewoLab/AquaDX/blob/v1-dev/docs/chu3-national-matching.md",
matching: "http://yukiotoko.chara.lol:9004/",
reflector: "http://yukiotoko.chara.lol:50201/",
coop: ["Missless", "CozyNet", "GMG"]
}
]

View File

@ -0,0 +1,170 @@
export type Dict = Record<string, any>
export interface TrendEntry {
date: string
rating: number
plays: number
}
export interface Card {
luid: string
registerTime: string
accessTime: string
linked: boolean
isGhost: boolean
}
export interface AquaNetUser {
username: string
email: string
displayName: string
country: string
region:string
lastLogin: number
regTime: number
profileLocation: string
profileBio: string
profilePicture: string
emailConfirmed: boolean
ghostCard: Card
cards: Card[]
computedName: string,
password: string,
optOutOfLeaderboard: boolean,
}
export interface CardSummaryGame {
name: string
rating: number
lastLogin: string
}
export interface CardSummary {
mai2: CardSummaryGame | null
chu3: CardSummaryGame | null
ongeki: CardSummaryGame | null
diva: CardSummaryGame | null
wacca: CardSummaryGame | null
}
export interface ConfirmProps {
title: string
message: string
confirm?: () => void
cancel?: () => void
dangerous?: boolean
}
export interface GenericGamePlaylog {
musicId: number
level: number
playDate: string
achievement: number
maxCombo: number
totalCombo: number
afterRating: number
beforeRating: number
isFullCombo?: boolean
isAllPerfect?: boolean
isAllJustice?: boolean
}
export interface GenericRanking {
name: string
username: string
rank: number
accuracy: number
rating: number
fullCombo: number
allPerfect: number
lastSeen: string
}
export interface RankCount {
name: string
count: number
}
export interface GenericGameSummary {
name: string
iconId: number
aquaUser?: AquaNetUser
serverRank: number
accuracy: number
rating: number
ratingHighest: number
ranks: RankCount[]
detailedRanks: { [key: number]: { [key: string]: number } }
maxCombo: number
fullCombo: number
allPerfect: number
totalScore: number
plays: number
totalPlayTime: number
joined: string
lastSeen: string
lastVersion: string
ratingComposition: { [key: string]: any }
recent: GenericGamePlaylog[]
rival?: boolean,
favorites?: number[]
}
export interface MusicMeta {
name: string,
composer: string,
bpm: number,
ver: number,
notes: {
lv: number
designer: string
lv_id: number
notes: number
}[],
worldsEndTag?: string
worldsEndStars?: number
}
export type AllMusic = { [key: string]: MusicMeta }
export interface GameOption {
key: string
value: any
type: 'Boolean' | 'String'
game: string
changed?: boolean
}
export interface UserItem { itemKind: number, itemId: number, stock: number }
export interface UserBox {
userName: string,
nameplateId: number,
frameId: number,
characterId: number,
trophyId: number,
trophyIdSub1: number,
trophyIdSub2: number,
mapIconId: number,
voiceId: number,
avatarWear: number,
avatarHead: number,
avatarFace: number,
avatarSkin: number,
avatarItem: number,
avatarFront: number,
avatarBack: number,
level: number
playerRating: number
}
export interface ChusanMatchingOption {
name: string
ui: string
guide: string
matching: string
reflector: string
coop: string[]
}

View File

@ -0,0 +1,24 @@
import { onMount } from 'svelte';
const useLocalStorage = <T>(key: string, initialValue: T) => {
let value = initialValue;
const currentValue = localStorage.getItem(key);
if (currentValue) value = JSON.parse(currentValue);
const save = () => {
localStorage.setItem(key, JSON.stringify(value));
};
return {
get value() {
return value;
},
set value(v: T) {
value = v;
save();
},
};
};
export default useLocalStorage;

93
AquaNet/src/libs/i18n.ts Normal file
View File

@ -0,0 +1,93 @@
import { EN_REF, type LocalizedMessages } from "./i18n/en_ref";
import { ZH } from "./i18n/zh";
import type { GameName } from "./scoring";
import zhCountires from "./i18n/zh_countries.json"
import enCountires from "./i18n/en_countries.json"
type Lang = 'en' | 'zh'
const msgs: Record<Lang, LocalizedMessages> = {
en: EN_REF,
zh: ZH
}
const countries: Record<Lang, typeof enCountires> = {
en: enCountires,
zh: zhCountires
}
let lang: Lang = 'en'
// Infer language from browser
if (navigator.language.startsWith('zh')) {
lang = 'zh'
}
export function ts(key: string, variables?: { [index: string]: any }) {
return t(key as keyof LocalizedMessages, variables)
}
/**
* Load the translation for the given key
*
* TODO: Check for translation completion on build
*
* @param key
* @param variables
*/
export function t(key: keyof LocalizedMessages, variables?: { [index: string]: any }) {
// Check if the key exists
let msg = msgs[lang][key]
if (!msg) {
// Check if the key exists in English
if (!(msg = msgs.en[key])) {
msg = key
console.error(`ERROR!! Missing translation reference entry (English) for ${key}`)
}
else console.warn(`Missing translation for ${key} in ${lang}`)
}
// Replace variables
if (variables) {
return msg.replace(/\${(.*?)}/g, (_: string, v: string | number) => variables[v] + "")
}
return msg
}
Object.assign(window, { t })
export function getCountryName(code: keyof typeof enCountires) {
return countries[lang][code]
}
export const GAME_TITLE: { [key in GameName]: string } =
{chu3: t("game.chu3"), mai2: t("game.mai2"), ongeki: t("game.ongeki"), wacca: t("game.wacca")}
/**
* Converts a two-letter country code to its corresponding flag emoji.
*
* The Unicode flag emoji is represented by two Regional Indicator Symbols.
* Each letter in the country code is transformed into a Regional Indicator Symbol
* by adding its alphabetical position (A = 0, B = 1, etc.) to the base code point U+1F1E6.
*
* @param countryCode - A two-letter ISO country code (e.g., "US", "GB").
* @returns The corresponding flag emoji if the country code is valid; otherwise, an empty string.
*/
export function countryCodeToEmoji(countryCode: string): string {
if (!countryCode) return ""
if (countryCode.length !== 2) return ""
// Convert the country code to uppercase to standardize it
const code = countryCode.toUpperCase();
// The base code point for Regional Indicator Symbol Letter A is 0x1F1E6.
const OFFSET = 0x1F1E6;
const firstCharCode = code.charCodeAt(0);
const secondCharCode = code.charCodeAt(1);
// 'A' has a char code of 65.
const firstIndicator = OFFSET + (firstCharCode - 65);
const secondIndicator = OFFSET + (secondCharCode - 65);
// Create and return the flag emoji string
return String.fromCodePoint(firstIndicator, secondIndicator);
}

View File

@ -0,0 +1,248 @@
{
"AF": "Afghanistan",
"AX": "Aland Islands",
"AL": "Albania",
"DZ": "Algeria",
"AS": "American Samoa",
"AD": "Andorra",
"AO": "Angola",
"AI": "Anguilla",
"AQ": "Antarctica",
"AG": "Antigua And Barbuda",
"AR": "Argentina",
"AM": "Armenia",
"AW": "Aruba",
"AU": "Australia",
"AT": "Austria",
"AZ": "Azerbaijan",
"BS": "Bahamas",
"BH": "Bahrain",
"BD": "Bangladesh",
"BB": "Barbados",
"BY": "Belarus",
"BE": "Belgium",
"BZ": "Belize",
"BJ": "Benin",
"BM": "Bermuda",
"BT": "Bhutan",
"BO": "Bolivia",
"BA": "Bosnia And Herzegovina",
"BW": "Botswana",
"BV": "Bouvet Island",
"BR": "Brazil",
"IO": "British Indian Ocean Territory",
"BN": "Brunei Darussalam",
"BG": "Bulgaria",
"BF": "Burkina Faso",
"BI": "Burundi",
"KH": "Cambodia",
"CM": "Cameroon",
"CA": "Canada",
"CV": "Cape Verde",
"KY": "Cayman Islands",
"CF": "Central African Republic",
"TD": "Chad",
"CL": "Chile",
"CN": "China",
"CX": "Christmas Island",
"CC": "Cocos (Keeling) Islands",
"CO": "Colombia",
"KM": "Comoros",
"CG": "Congo",
"CD": "Congo, Democratic Republic",
"CK": "Cook Islands",
"CR": "Costa Rica",
"CI": "Cote D\"Ivoire",
"HR": "Croatia",
"CU": "Cuba",
"CY": "Cyprus",
"CZ": "Czech Republic",
"DK": "Denmark",
"DJ": "Djibouti",
"DM": "Dominica",
"DO": "Dominican Republic",
"EC": "Ecuador",
"EG": "Egypt",
"SV": "El Salvador",
"GQ": "Equatorial Guinea",
"ER": "Eritrea",
"EE": "Estonia",
"ET": "Ethiopia",
"FK": "Falkland Islands (Malvinas)",
"FO": "Faroe Islands",
"FJ": "Fiji",
"FI": "Finland",
"FR": "France",
"GF": "French Guiana",
"PF": "French Polynesia",
"TF": "French Southern Territories",
"GA": "Gabon",
"GM": "Gambia",
"GE": "Georgia",
"DE": "Germany",
"GH": "Ghana",
"GI": "Gibraltar",
"GR": "Greece",
"GL": "Greenland",
"GD": "Grenada",
"GP": "Guadeloupe",
"GU": "Guam",
"GT": "Guatemala",
"GG": "Guernsey",
"GN": "Guinea",
"GW": "Guinea-Bissau",
"GY": "Guyana",
"HT": "Haiti",
"HM": "Heard Island & Mcdonald Islands",
"VA": "Holy See (Vatican City State)",
"HN": "Honduras",
"HK": "Hong Kong",
"HU": "Hungary",
"IS": "Iceland",
"IN": "India",
"ID": "Indonesia",
"IR": "Iran, Islamic Republic Of",
"IQ": "Iraq",
"IE": "Ireland",
"IM": "Isle Of Man",
"IL": "Israel",
"IT": "Italy",
"JM": "Jamaica",
"JP": "Japan",
"JE": "Jersey",
"JO": "Jordan",
"KZ": "Kazakhstan",
"KE": "Kenya",
"KI": "Kiribati",
"KR": "Korea",
"KP": "North Korea",
"KW": "Kuwait",
"KG": "Kyrgyzstan",
"LA": "Lao People\"s Democratic Republic",
"LV": "Latvia",
"LB": "Lebanon",
"LS": "Lesotho",
"LR": "Liberia",
"LY": "Libyan Arab Jamahiriya",
"LI": "Liechtenstein",
"LT": "Lithuania",
"LU": "Luxembourg",
"MO": "Macao",
"MK": "Macedonia",
"MG": "Madagascar",
"MW": "Malawi",
"MY": "Malaysia",
"MV": "Maldives",
"ML": "Mali",
"MT": "Malta",
"MH": "Marshall Islands",
"MQ": "Martinique",
"MR": "Mauritania",
"MU": "Mauritius",
"YT": "Mayotte",
"MX": "Mexico",
"FM": "Micronesia, Federated States Of",
"MD": "Moldova",
"MC": "Monaco",
"MN": "Mongolia",
"ME": "Montenegro",
"MS": "Montserrat",
"MA": "Morocco",
"MZ": "Mozambique",
"MM": "Myanmar",
"NA": "Namibia",
"NR": "Nauru",
"NP": "Nepal",
"NL": "Netherlands",
"AN": "Netherlands Antilles",
"NC": "New Caledonia",
"NZ": "New Zealand",
"NI": "Nicaragua",
"NE": "Niger",
"NG": "Nigeria",
"NU": "Niue",
"NF": "Norfolk Island",
"MP": "Northern Mariana Islands",
"NO": "Norway",
"OM": "Oman",
"PK": "Pakistan",
"PW": "Palau",
"PS": "Palestinian Territory, Occupied",
"PA": "Panama",
"PG": "Papua New Guinea",
"PY": "Paraguay",
"PE": "Peru",
"PH": "Philippines",
"PN": "Pitcairn",
"PL": "Poland",
"PT": "Portugal",
"PR": "Puerto Rico",
"QA": "Qatar",
"RE": "Reunion",
"RO": "Romania",
"RU": "Russian Federation",
"RW": "Rwanda",
"BL": "Saint Barthelemy",
"SH": "Saint Helena",
"KN": "Saint Kitts And Nevis",
"LC": "Saint Lucia",
"MF": "Saint Martin",
"PM": "Saint Pierre And Miquelon",
"VC": "Saint Vincent And Grenadines",
"WS": "Samoa",
"SM": "San Marino",
"ST": "Sao Tome And Principe",
"SA": "Saudi Arabia",
"SN": "Senegal",
"RS": "Serbia",
"SC": "Seychelles",
"SL": "Sierra Leone",
"SG": "Singapore",
"SK": "Slovakia",
"SI": "Slovenia",
"SB": "Solomon Islands",
"SO": "Somalia",
"ZA": "South Africa",
"GS": "South Georgia And Sandwich Isl.",
"ES": "Spain",
"LK": "Sri Lanka",
"SD": "Sudan",
"SR": "Suriname",
"SJ": "Svalbard And Jan Mayen",
"SZ": "Swaziland",
"SE": "Sweden",
"CH": "Switzerland",
"SY": "Syrian Arab Republic",
"TW": "Taiwan",
"TJ": "Tajikistan",
"TZ": "Tanzania",
"TH": "Thailand",
"TL": "Timor-Leste",
"TG": "Togo",
"TK": "Tokelau",
"TO": "Tonga",
"TT": "Trinidad And Tobago",
"TN": "Tunisia",
"TR": "Turkey",
"TM": "Turkmenistan",
"TC": "Turks And Caicos Islands",
"TV": "Tuvalu",
"UG": "Uganda",
"UA": "Ukraine",
"AE": "United Arab Emirates",
"GB": "United Kingdom",
"US": "United States",
"UM": "United States Outlying Islands",
"UY": "Uruguay",
"UZ": "Uzbekistan",
"VU": "Vanuatu",
"VE": "Venezuela",
"VN": "Vietnam",
"VG": "Virgin Islands, British",
"VI": "Virgin Islands, U.S.",
"WF": "Wallis And Futuna",
"EH": "Western Sahara",
"YE": "Yemen",
"ZM": "Zambia",
"ZW": "Zimbabwe"
}

View File

@ -0,0 +1,300 @@
export const EN_REF_USER = {
'UserHome.ServerRank': 'Server Rank',
'UserHome.DXRating': 'DX Rating',
'UserHome.Rating': 'Rating',
'UserHome.Statistics': 'Statistics',
'UserHome.Accuracy': 'Accuracy',
'UserHome.MaxCombo': 'Max Combo',
'UserHome.FullCombo': 'Full Combo',
'UserHome.AllPerfect': 'All Perfect',
'UserHome.DXScore': 'DX Score',
'UserHome.Score': 'Score',
'UserHome.PlayActivity': ' Play Activity',
'UserHome.Plays': 'Plays',
'UserHome.PlayTime': 'Play Time',
'UserHome.FirstSeen': 'First Seen',
'UserHome.LastSeen': 'Last Seen',
'UserHome.Version': 'Last Version',
'UserHome.RecentScores': 'Recent Scores',
'UserHome.NoData': 'No data in the past ${days} days',
'UserHome.UnknownSong': '(unknown song)',
'UserHome.Settings': 'Settings',
'UserHome.NoValidGame': 'The user hasn\'t played any game yet.',
'UserHome.ShowRanksDetails': 'Click to show details',
'UserHome.RankDetail.Title': 'Achievement Details',
'UserHome.RankDetail.Level': 'Level',
'UserHome.B50': 'B50',
'UserHome.AddRival': "Add to Rival",
'UserHome.RemoveRival': "Remove from Rival",
'UserHome.InvalidGame': "Game ${game} is not supported on the web UI yet. We only support maimai, chunithm, wacca, and ongeki for now.",
'UserHome.ShowMoreRecent': 'Show more',
'UserHome.FavoriteSongs': 'Favorite Songs'
}
export const EN_REF_Welcome = {
'back': 'Back',
'email': 'Email',
'password': 'Password',
'new-password': 'New password',
'username': 'Username',
'welcome.btn-login': 'Log in',
'welcome.btn-signup': 'Sign up',
'welcome.btn-reset-password': 'Forgot password?',
'welcome.btn-submit-reset-password': 'Send reset link',
'welcome.btn-submit-new-password': 'Change password',
'welcome.email-missing': 'Email is required',
'welcome.password-missing': 'Password is required',
'welcome.username-missing': 'Username/email is required',
'welcome.email-password-missing': 'Email and password are required',
'welcome.waiting-turnstile': 'Waiting for Turnstile to verify your network environment...',
'welcome.turnstile-error': 'Error verifying your network environment. Please turn off your VPN and try again.',
'welcome.turnstile-timeout': 'Network verification timed out. Please try again.',
'welcome.verification-sent': 'A verification email has been sent to ${email}. Please check your inbox!',
'welcome.reset-password-sent': 'A password reset email has been sent to ${email}. Please check your inbox!',
'welcome.verify-state-0': 'You haven\'t verified your email. A verification email has been sent to your inbox just now. Please check your inbox!',
'welcome.verify-state-1': 'You haven\'t verified your email. You have requested too many emails, please try again later.',
'welcome.verify-state-2': 'You haven\'t verified your email. We just sent you another verification email. Please check your inbox!',
'welcome.reset-state-0': 'A reset email has been sent to your inbox just now. Please check your inbox!',
'welcome.reset-state-1': 'Too many emails have been sent. Another will not be sent.',
'welcome.verifying': 'Verifying your email... please wait.',
'welcome.verified': 'Your email has been verified! You can now log in now.',
'welcome.verification-failed': 'Verification failed: ${message}. Please try again.',
'welcome.password-reset-done': 'Your password has been updated! Please log back in.',
}
export const EN_REF_LEADERBOARD = {
'Leaderboard.Title': 'Server Leaderboard',
'Leaderboard.Rank': 'Rank',
'Leaderboard.Rating': 'Rating',
'Leaderboard.Accuracy': 'Accuracy',
'Leaderboard.FC': 'FC',
'Leaderboard.AP': 'AP',
}
export const EN_REF_GENERAL = {
'game.mai2': 'Mai',
'game.chu3': 'Chuni',
'game.ongeki': 'Ongeki',
'game.wacca': 'Wacca',
'status.error': 'Error',
'status.error.hint': 'Something went wrong, please try again later or ',
'status.error.hint.link': 'join our discord for support.',
'status.detail': 'Detail: ${detail}',
'action.refresh': 'Refresh',
'action.cancel': 'Cancel',
'action.confirm': 'Confirm',
'navigation.profile': 'Profile',
'navigation.maps': 'Maps',
'navigation.home': 'Home',
'navigation.rankings': 'Rankings',
'navigation.notice': 'Notice'
}
export const EN_REF_HOME = {
'home.nav.portal': 'Portal',
'home.nav.link-card': 'Link Card',
'home.nav.game-setup': 'Game Setup',
'home.manage-cards': 'Manage Cards',
'home.manage-cards-description': 'Link, unlink, and manage your cards.',
'home.link-card': 'Link Card',
'home.link-cards-description': 'Link your Amusement IC / Aime card to play games.',
'home.join-community': 'Join Community',
'home.join-community-description': 'Join our community to chat with other players and get help.',
'home.setup': 'Setup Connection',
'home.setup-description': 'If you own a cab or arcade setup, begin setting up the connection.',
'home.import': 'Import Player Data',
'home.import-description': 'If you are from another server, you can import your data here.',
'home.linkcard.cards': 'Your Cards',
'home.linkcard.description': 'Here are the cards you have linked to your account',
'home.linkcard.account-card': 'Account Card',
'home.linkcard.registered': 'Registered',
'home.linkcard.lastused': 'Last used',
'home.linkcard.enter-info': 'Please enter the following information, or drag and drop your aime.txt / felica.txt file here',
'home.linkcard.access-code': 'The 20-digit access code on the back of your card. (If it doesn\'t work, please try scanning your card in game and enter the access code shown on screen)',
'home.linkcard.enter-sn1': 'Download the NFC Tools app on your phone',
'home.linkcard.enter-sn2': 'and scan your card. Then, enter the Serial Number.',
'home.linkcard.kdx-notice': "If you're using KanadeDX, please enter the simulated card number (you can find it in settings > card).",
'home.linkcard.link': 'Link',
'home.linkcard.data-conflict': 'Data Conflict',
'home.linkcard.name': 'Name',
'home.linkcard.rating': 'Rating',
'home.linkcard.last-login': 'Last Login',
'home.linkcard.linked-own': 'This card is already linked to your account',
'home.linkcard.linked-another': 'This card is already linked to another account',
'home.linkcard.notfound': 'Card not found',
'home.linkcard.unlink': 'Unlink Card',
'home.linkcard.unlink-notice': 'Are you sure you want to unlink this card?',
'home.linkcard.felica-ac-warning': 'This Access Code is of a FeliCa AIC card.\nIf you are logging in with a physical card (not aime.txt emulation), unlike the official server, you need to bind the FeliCa SN of the card (or the 00-prefixed card number shown in the game) instead of this code.\nIf you are logging in with aime.txt emulation, please ignore this warning and proceed.',
'home.setup.welcome': 'Welcome! If you own an arcade cabinet or game setup, please follow the instructions below to set up the connection with AquaDX.',
'home.setup.blockquote': 'We assume that you already have the required files and can run the game (e.g. ROM and segatools) that come with the cabinet or game setup. If not, please contact the seller of your device for the required files, as we will not provide them for copyright reasons.',
'home.setup.get': 'Get started',
'home.setup.edit': 'Please edit your segatools.ini file and modify the following lines',
'home.setup.test': 'Then, after you restart the game, you should be able to connect to AquaDX. Please verify that the network tests are all GOOD in the test menu.',
'home.setup.ask': 'If you have any questions, please ask in our',
'home.setup.support': 'server',
'home.setup.keychip-tips': 'This is your unique keychip, do not share it with anyone',
'home.community.discord': 'Discord',
'home.community.telegram': 'Telegram (Chinese)',
'home.community.qq': 'QQ (Chinese)',
'home.import.unknown-game': 'Unknown game type. Currently only maimai and chunithm are supported for importing.',
'home.import.new-data': 'Data to import',
'home.import.data-conflict': 'Proceed will override your current data',
}
export const EN_REF_SETTINGS = {
'settings.title': 'Settings',
'settings.tabs.profile': 'Profile',
'settings.tabs.game': 'Game',
'settings.tabs.chu3': 'Chuni',
'settings.tabs.mai2': 'Mai',
'settings.tabs.ongeki': 'Ongeki',
'settings.tabs.wacca': 'Wacca',
'settings.fields.unlockMusic.name': 'Unlock All Music',
'settings.fields.unlockMusic.desc': 'Unlock all music and master difficulty in game.',
'settings.fields.unlockChara.name': 'Unlock All Characters',
'settings.fields.unlockChara.desc': 'Unlock all characters, voices, and partners in game.',
'settings.fields.unlockCollectables.name': 'Unlock All Collectables',
'settings.fields.unlockCollectables.desc': 'Unlock all collectables (nameplate, title, icon, frame) in game.',
'settings.fields.unlockTickets.name': 'Unlock All Tickets',
'settings.fields.unlockTickets.desc': 'Infinite map/ex tickets (Note: maimai still limits which tickets can be used).',
'settings.fields.waccaInfiniteWp.name': 'Wacca: Infinite WP',
'settings.fields.waccaInfiniteWp.desc': 'Set WP to 999999',
'settings.fields.waccaAlwaysVip.name': 'Wacca: Always VIP',
'settings.fields.waccaAlwaysVip.desc': 'Set VIP expiration date to 2077-01-01',
'settings.fields.chusanTeamName.name': 'Team Name',
'settings.fields.chusanTeamName.desc': 'Customize the text displayed on the top of your profile.',
'settings.fields.chusanInfinitePenguins.name': 'Infinite Penguins',
'settings.fields.chusanInfinitePenguins.desc': 'Set penguin statues for character level prompting to 999.',
'settings.fields.chusanMatchingReflector.name': 'Matching Server Reflector',
'settings.fields.chusanMatchingReflector.desc': 'URL of the national matching server\'s UDP reflector.',
'settings.fields.chusanMatchingServer.name': 'Matching Server',
'settings.fields.chusanMatchingServer.desc': 'URL of the national matching server.',
'settings.fields.ongekiInfiniteKaika.name': 'Infinite Kaika',
'settings.fields.ongekiInfiniteKaika.desc': 'Set Kaika to 999',
'settings.fields.rounding.name': 'Score Rounding',
'settings.fields.rounding.desc': 'Round the score to one decimal place',
'settings.fields.gameUsername.name': 'In-Game Username',
'settings.fields.gameUsername.desc': 'Your name shown in game',
'settings.fields.optOutOfLeaderboard.name': 'Opt Out of Leaderboard',
'settings.fields.optOutOfLeaderboard.desc': 'You will still be able to see yourself on the leaderboard after logging in',
'settings.fields.enableMusicRank.name': 'Enable Recommended Music Rank on Your Machine',
'settings.fields.enableMusicRank.desc': 'If you have your own ranking, you can turn this off. It only affects your own machine',
'settings.mai2.name': 'Player Name',
'settings.profile.picture': 'Profile Picture',
'settings.profile.upload-new': 'Upload New',
'settings.profile.bad-format': 'Invalid image format. Supported types are PNG, JPG, JPEG, WEBP & GIF.',
'settings.profile.save': 'Save',
'settings.profile.name': 'Display Name',
'settings.profile.username': 'Username',
'settings.profile.password': 'Password',
'settings.profile.country': 'Country',
'settings.profile.location': 'Location',
'settings.profile.bio': 'Bio',
'settings.profile.unset': 'Unset',
'settings.profile.logout': 'Log out',
'settings.profile.unchanged': 'Unchanged',
'settings.export': 'Export Player Data',
'settings.batchManualExport': "Export in Batch Manual (for Tachi)",
'settings.cabNotice': "Note: These settings will only affect your own cab/setup. If you're playing on someone else's setup, please contact them to change these settings.",
'settings.gameNotice': "These only apply to Mai and Wacca.",
'settings.regionNotice': "These only apply to Mai, Ongeki and Chuni.",
'settings.regionSelector.title': "Prefecture Selector",
'settings.regionSelector.desc': "Select the region where you want the game to think you are playing",
'settings.regionSelector.select': "Select Prefecture",
}
export const EN_REF_USERBOX = {
'userbox.header.general': 'General Settings',
'userbox.header.matching': 'National Matching',
'userbox.header.matching.symbolChat': 'Chat Symbols (Matching)',
'userbox.header.userbox': 'UserBox Settings',
'userbox.header.preview': 'UserBox Preview',
'userbox.nameplateId': 'Nameplate',
'userbox.frameId': 'Frame',
'userbox.trophyId': 'Trophy (Title)',
'userbox.trophyIdSub1': 'Trophy Sub #1 (Title)',
'userbox.trophyIdSub2': 'Trophy Sub #2 (Title)',
'userbox.mapIconId': 'Map Icon',
'userbox.voiceId': 'System Voice',
'userbox.avatarWear': 'Avatar Wear',
'userbox.avatarHead': 'Avatar Head',
'userbox.avatarFace': 'Avatar Face',
'userbox.avatarSkin': 'Avatar Skin',
'userbox.avatarItem': 'Avatar Item',
'userbox.avatarFront': 'Avatar Front',
'userbox.avatarBack': 'Avatar Back',
'userbox.preview.url': 'Image URL',
'userbox.error.nodata': 'Chuni data not found',
'userbox.matching.select': 'Select Matching Server',
'userbox.matching.select.sub': 'Choose the matching server you want to use.',
'userbox.matching.option.ui': 'Rooms',
'userbox.matching.option.guide': 'Guide',
'userbox.matching.option.collab': 'Collaborators',
'userbox.matching.custom.name': 'Custom',
'userbox.matching.custom.sub': 'Enter your own URL',
'userbox.matching.symbolChat': 'Message Choice',
'userbox.matching.symbolChat.default': 'Default',
'userbox.new.name': 'AquaBox',
'userbox.new.setup': 'Drag and drop your Chuni game folder (Lumi or newer) into the box below to display UserBoxes with their nameplate & avatar. All files are handled in-browser.',
'userbox.new.setup.notice': 'Select the highest folder containing your game data.',
'userbox.new.setup.processing_file': 'Processing',
'userbox.new.setup.finalizing': 'Saving to internal storage',
'userbox.new.drop': 'Drop game folder here',
'userbox.new.switch.to_url': 'Switch to URL mode',
'userbox.new.switch.to_drop': 'Switch to drop mode',
'userbox.new.url_warning': 'Enter in the path to access Userbox assets. You are responsible for any results in this state. Please read the documentation. Don\'t expect support for this mode.',
'userbox.new.activate_first': 'Enable AquaBox (game files required)',
'userbox.new.activate_update': 'Update AquaBox (game files required)',
'userbox.new.activate': 'Use AquaBox',
'userbox.new.activate_desc': 'Enable displaying UserBoxes with their nameplate & avatar',
'userbox.new.activate_profile': 'Use AquaBox on profiles',
'userbox.new.activate_profile_desc': 'Enable displaying UserBoxes with their nameplate & avatar on profile pages',
'userbox.new.error.invalidFolder': 'The folder you selected is invalid. Ensure that your game\'s version is Lumi or newer and that the "A000" option pack is present.',
'userbox.new.error.invalidUrl': 'The URL you inputted is invalid.'
}
export const EN_REF_MAI_PHOTO = {
'maiphoto.title': 'Mai Memorial Photo Gallery',
'maiphoto.url_warning': 'Note: If you want to share a photo with your friend, please save the photo. Do not copy image URL because the URL contains sensitive information.',
'maiphoto.none': 'No photo found. You can upload photo by clicking upload at the end of each game session.',
}
export const EN_REF_AQUATRANS = {
'trans.title': '🏳️‍⚧️ AquaTrans™ Data Transfer',
'trans.confirm.unbackuped.title': 'Confirm transfer',
'trans.confirm.unbackuped.msg': "It seems like you haven't backed up your destination data. Are you sure you want to proceed? (This will overwrite your destination server's data)",
'trans.confirm.untested.title': 'Error',
'trans.confirm.untested.msg': "It seems like you haven't tested both connections yet. Please test the connections first.",
'trans.confirm.done.title': 'Done!',
'trans.confirm.done.msg': 'Transfer completed successfully! Your data on ${dst} is overwritten with your data from ${src}.',
'trans.alert.in-progress': "Transfer already in progress!",
'trans.prompt-html': `
<p>👋 Welcome to the AquaTrans server data transfer tool!</p>
<p>You can use this to export data from any server, and input data into any server using the connection credentials (card number, server address, and keychip id).</p>
<p>This tool will simulate a game client and pull your data from the source server, and push your data to the destination server.</p>
<p>Please fill out the info below to get started!</p>
`,
'trans.error.empty': 'Please fill out all fields.',
'trans.error.untested': 'Please test the connections first.',
'trans.success.import': 'Data imported successfully!',
'trans.source.title': 'Source Server',
'trans.target.title': 'Destination Server',
'trans.field.addr': 'Server Address',
'trans.field.keychip': 'Keychip ID',
'trans.field.game': 'Game',
'trans.field.version': 'Version',
'trans.field.card': 'Card Number',
'trans.btn.test': 'Test Connection',
'trans.btn.export': 'Export Data',
'trans.btn.import': 'Import Data',
'trans.blacklist': "Your server's rules doesn't allow using this tool. You might get banned if you try (idk, ask them if you want to know why)",
}
export const EN_REF = { ...EN_REF_USER, ...EN_REF_Welcome, ...EN_REF_GENERAL,
...EN_REF_LEADERBOARD, ...EN_REF_HOME, ...EN_REF_SETTINGS, ...EN_REF_USERBOX,
...EN_REF_MAI_PHOTO, ...EN_REF_AQUATRANS
}
export type LocalizedMessages = typeof EN_REF

315
AquaNet/src/libs/i18n/zh.ts Normal file
View File

@ -0,0 +1,315 @@
import {
EN_REF_AQUATRANS,
EN_REF_GENERAL,
EN_REF_HOME,
EN_REF_LEADERBOARD,
EN_REF_MAI_PHOTO,
EN_REF_SETTINGS,
EN_REF_USER,
EN_REF_USERBOX,
type EN_REF_Welcome
} from "./en_ref";
const zhUser: typeof EN_REF_USER = {
'UserHome.ServerRank': '服务器排名',
'UserHome.DXRating': 'DX B50',
'UserHome.Rating': '评分',
'UserHome.Statistics': '统计数据',
'UserHome.Accuracy': '准确率',
'UserHome.MaxCombo': '最大连击',
'UserHome.FullCombo': '全连曲目',
'UserHome.AllPerfect': '完美曲目',
'UserHome.DXScore': 'DX 总分',
'UserHome.Score': '总分',
'UserHome.PlayActivity': '游戏活动',
'UserHome.Plays': '出勤次数',
'UserHome.PlayTime': '游玩时间',
'UserHome.FirstSeen': '发现新大陆',
'UserHome.LastSeen': '上次出勤',
'UserHome.Version': '游戏版本',
'UserHome.RecentScores': '成绩',
'UserHome.NoData': '过去 ${days} 天内没有玩过',
'UserHome.UnknownSong': "(未知曲目)",
'UserHome.Settings': '设置',
'UserHome.NoValidGame': "用户还没有玩过游戏",
'UserHome.ShowRanksDetails': "点击显示评分详细",
'UserHome.RankDetail.Title': '评分详细',
'UserHome.RankDetail.Level': "等级",
'UserHome.B50': "B50",
'UserHome.AddRival': "添加劲敌",
'UserHome.RemoveRival': "移除劲敌",
'UserHome.InvalidGame': "游戏 ${game} 还不支持网页端查看。我们目前只支持舞萌、中二、华卡和音击。",
'UserHome.ShowMoreRecent': "显示更多",
'UserHome.FavoriteSongs': "收藏歌曲"
}
const zhWelcome: typeof EN_REF_Welcome = {
'back': '返回',
'email': '邮箱',
'password': '密码',
'new-password': '新密码',
'username': '用户名',
'welcome.btn-login': '登录',
'welcome.btn-signup': '注册',
'welcome.btn-reset-password': '忘记密码?',
'welcome.btn-submit-reset-password': '发送重置链接',
'welcome.btn-submit-new-password': '修改密码',
'welcome.email-missing': '邮箱必须填哦',
'welcome.password-missing': '密码必须填哦',
'welcome.username-missing': '用户名/邮箱必须填哦',
'welcome.email-password-missing': '邮箱和密码必须填哦',
'welcome.waiting-turnstile': '正在验证网络环境…',
'welcome.turnstile-error': '验证网络环境出错了,请关闭 VPN 后重试',
'welcome.turnstile-timeout': '验证网络环境超时了,请重试',
'welcome.verification-sent': '验证邮件已发送至 ${email},请翻翻收件箱',
'welcome.reset-password-sent': '重置邮件已发送至 ${email},请翻翻收件箱',
'welcome.verify-state-0': '您还没有验证邮箱哦!验证邮件一分钟内刚刚发到您的邮箱,请翻翻收件箱',
'welcome.verify-state-1': '您还没有验证邮箱哦!我们在过去的 24 小时内已经发送了 3 封验证邮件,所以我们不会再发送了,请翻翻收件箱',
'welcome.verify-state-2': '您还没有验证邮箱哦!我们刚刚又发送了一封验证邮件,请翻翻收件箱',
'welcome.reset-state-0': '重置邮件刚刚发送到你的邮箱啦,请翻翻收件箱!',
'welcome.reset-state-1': '邮件发送次数过多,暂时不会再发送新的重置邮件了',
'welcome.verifying': '正在验证邮箱…请稍等',
'welcome.verified': '您的邮箱已经验证成功!您现在可以登录了',
'welcome.verification-failed': '验证失败:${message}。请重试',
'welcome.password-reset-done': '您的密码已更新!请重新登录',
}
const zhLeaderboard: typeof EN_REF_LEADERBOARD = {
'Leaderboard.Title': '排行榜',
'Leaderboard.Rank': '排名',
'Leaderboard.Rating': '评分',
'Leaderboard.Accuracy': '准确率',
'Leaderboard.FC': 'FC',
'Leaderboard.AP': 'AP',
}
const zhGeneral: typeof EN_REF_GENERAL = {
'game.mai2': "舞萌",
'game.chu3': "中二",
'game.ongeki': "音击",
'game.wacca': "华卡",
"status.error": "发生错误",
"status.error.hint": "出了一些问题,请稍后刷新重试或者",
"status.error.hint.link": "加我们的 Discord 群问一问",
"status.detail": "详细信息:${detail}",
"action.refresh": "刷新",
"action.cancel": "取消",
"action.confirm": "确认",
'navigation.profile': '个人资料',
'navigation.maps': '地图',
'navigation.home': '首页',
'navigation.rankings': '排行榜',
'navigation.notice': '公告'
}
const zhHome: typeof EN_REF_HOME = {
'home.nav.portal': "主页",
'home.nav.link-card': "绑卡",
'home.nav.game-setup': "连接设置",
'home.manage-cards': '管理游戏卡',
'home.manage-cards-description': '绑定、解绑、管理游戏数据卡',
'home.link-card': '绑定游戏卡',
'home.link-cards-description':'绑定游戏数据卡Amusement IC 或 Aime 卡)后才可以访问游戏存档哦',
'home.join-community': '加入群组',
'home.join-community-description': '加入我们的聊天群组,与其他玩家聊天、获取帮助',
'home.setup': '连接到 AquaDX',
'home.setup-description': '如果您有街机框体或者手台,点击这里设置服务器的连接',
'home.import': '导入玩家数据',
'home.import-description': '如果你来自其他在线服,可以点击这里导入从其他服务器导出的数据',
'home.linkcard.cards': "已绑卡片",
'home.linkcard.description': "这些是您绑定到帐户的卡",
'home.linkcard.account-card': "账户卡",
'home.linkcard.registered': "注册于",
'home.linkcard.lastused': "上次使用",
'home.linkcard.enter-info': "请输入以下信息,或将 aime.txt / felica.txt 文件拖放到此区域",
'home.linkcard.access-code': "卡背面的 20 位卡号(如果提示找不到卡,请尝试使用游戏内置的显示卡号功能,输入游戏读取到的卡号)",
'home.linkcard.enter-sn1': "在您的手机",
'home.linkcard.enter-sn2': "上下载 NFC Tools 并扫描您的卡。然后输入显示的 SN 号。",
'home.linkcard.kdx-notice': "如果你在玩 KanadeDX请在这里输入虚拟卡号可以在设置 > 卡号中找到卡号)",
'home.linkcard.link': "绑定",
'home.linkcard.data-conflict': "卡号冲突",
'home.linkcard.name': "名称",
'home.linkcard.rating': "Rating",
'home.linkcard.last-login': "上次登录",
'home.linkcard.linked-own': "此卡已链接到您的帐户",
'home.linkcard.linked-another': "此卡已链接到其他用户",
'home.linkcard.notfound': "找不到卡",
'home.linkcard.unlink': "取消链接",
'home.linkcard.unlink-notice': "你确定要取消此卡的链接吗?",
'home.linkcard.felica-ac-warning': "该 Access Code 是一张 FeliCa AIC 卡。\n如果你使用实体卡而非 aime.txt 模拟)刷卡登录游戏,与官方服务器不同,你需要绑定该卡的 FeliCa SN或与之对应的游戏界面中查看得到的 00 开头的卡号)而非此号码。\n如果你使用 aime.txt 模拟登录,请忽略本警告继续绑定。",
'home.setup.welcome': "欢迎! 如果您有街机框体或者手台,请按照以下说明设置以连接到 AquaDX。",
'home.setup.blockquote': "我们假设您已经拥有所需的文件,并且可以启动机台或手台附带的游戏(例如 ROM 和 segatools。如果没有请联系您设备的卖家以获取所需的文件因为出于版权原因我们不会提供这些文件。",
'home.setup.get': "开始",
'home.setup.edit': "请打开您的 segatools.ini 文件并修改以下行",
'home.setup.test': "在您重新启动游戏后,应该能够连接到 AquaDX。可以验证测试菜单中的网络测试测试连接是否全部良好。",
'home.setup.ask': "如果您有任何问题,请加入我们的",
'home.setup.support': "以获取支持",
'home.setup.keychip-tips': "这是你的狗号,不要与任何人分享",
'home.community.discord': 'Discord',
'home.community.telegram': 'Telegram (中文)',
'home.community.qq': 'QQ (中文)',
'home.import.unknown-game': '未知游戏类型 (目前导入只支持舞萌和中二)',
'home.import.new-data': '要导入的数据',
'home.import.data-conflict': '继续导入将覆盖现有数据',
}
const zhSettings: typeof EN_REF_SETTINGS = {
'settings.title': '用户设置',
'settings.tabs.profile': '个人资料',
'settings.tabs.game': '游戏设置',
'settings.tabs.chu3': '中二',
'settings.tabs.mai2': '舞萌',
'settings.tabs.ongeki': '音击',
'settings.tabs.wacca': '华卡',
'settings.fields.unlockMusic.name': '解锁谱面',
'settings.fields.unlockMusic.desc': '在游戏中解锁所有曲目和大师难度谱面。',
'settings.fields.unlockChara.name': '解锁角色',
'settings.fields.unlockChara.desc': '在游戏中解锁所有角色、语音和伙伴。',
'settings.fields.unlockCollectables.name': '解锁收藏品',
'settings.fields.unlockCollectables.desc': '在游戏中解锁所有收藏品(名牌、称号、图标、背景图)。',
'settings.fields.unlockTickets.name': '解锁游戏券',
'settings.fields.unlockTickets.desc': '无限跑图券/解锁券maimai 客户端仍限制一些券不能使用)。',
'settings.fields.waccaInfiniteWp.name': '华卡:无限 WP',
'settings.fields.waccaInfiniteWp.desc': '将 WP 设置为 999999',
'settings.fields.waccaAlwaysVip.name': '华卡:永久会员',
'settings.fields.waccaAlwaysVip.desc': '将 VIP 到期时间设置为 2077-01-01',
'settings.fields.chusanTeamName.name': '队伍名称',
'settings.fields.chusanTeamName.desc': '自定义显示在个人资料顶部的文本。',
'settings.fields.chusanInfinitePenguins.name': '我是桐谷遥',
'settings.fields.chusanInfinitePenguins.desc': '将角色界限突破的企鹅雕像数量设置为 999。',
'settings.fields.chusanMatchingReflector.name': '全国对战 Reflector',
'settings.fields.chusanMatchingReflector.desc': '全国对战服务器的 UDP 反射服务器的 URL',
'settings.fields.chusanMatchingServer.name': '全国对战服务器',
'settings.fields.chusanMatchingServer.desc': '全国对战服务器的 URL',
'settings.fields.ongekiInfiniteKaika.name': '无限解花',
'settings.fields.ongekiInfiniteKaika.desc': '将解花数量设置为 999。',
'settings.fields.rounding.name': '分数舍入',
'settings.fields.rounding.desc': '把分数四舍五入到一位小数',
'settings.fields.gameUsername.name': '游戏用户名',
'settings.fields.gameUsername.desc': '在游戏中显示的用户名',
'settings.fields.optOutOfLeaderboard.name': '不参与排行榜',
'settings.fields.optOutOfLeaderboard.desc': '登录之后还是可以在排行榜上看到自己',
'settings.fields.enableMusicRank.name': '在你的机台上启用「推荐乐曲排行榜」',
'settings.fields.enableMusicRank.desc': '如果你自己设计了排行榜的话,可以关闭这个(会影响你自己的机器)。',
'settings.mai2.name': '玩家名字',
'settings.profile.picture': '头像',
'settings.profile.upload-new': '上传',
'settings.profile.bad-format': '无效的图片格式,支持的格式有 PNG、JPG、JPEG、WEBP 和 GIF。',
'settings.profile.save': '保存',
'settings.profile.name': '昵称',
'settings.profile.username': '用户名',
'settings.profile.password': '密码',
'settings.profile.country': '国家',
'settings.profile.location': '位置',
'settings.profile.bio': '简介',
'settings.profile.unset': '未设置',
'settings.profile.logout': '登出',
'settings.profile.unchanged': '未更改',
'settings.export': '导出玩家数据',
'settings.batchManualExport': "导出 Batch Manual 格式(用于 Tachi",
'settings.cabNotice': '注意:下面这些设置只会影响你自己的机器,如果你是在其他人的机器上玩的话,请联系机主来改设置',
'settings.gameNotice': "这些设置仅对舞萌和华卡生效。",
// AI
'settings.regionNotice': "这些设置仅适用于舞萌、音击和中二。",
// AI
'settings.regionSelector.title': "地区选择器",
// AI
'settings.regionSelector.desc': "选择游戏中显示的地区",
// AI
'settings.regionSelector.select': "选择地区",
}
export const zhUserbox: typeof EN_REF_USERBOX = {
'userbox.header.general': '游戏设置',
'userbox.header.matching': '全国对战',
'userbox.header.matching.symbolChat': '全国对战聊天表情',
'userbox.header.userbox': 'UserBox 设置',
'userbox.header.preview': 'UserBox 预览',
'userbox.nameplateId': '名牌',
'userbox.frameId': '边框',
'userbox.trophyId': '称号',
'userbox.trophyIdSub1': '称号2',
'userbox.trophyIdSub2': '称号3',
'userbox.mapIconId': '地图图标',
'userbox.voiceId': '系统语音',
'userbox.avatarWear': '企鹅服饰',
'userbox.avatarHead': '企鹅头饰',
'userbox.avatarFace': '企鹅面部',
'userbox.avatarSkin': '企鹅皮肤',
'userbox.avatarItem': '企鹅物品',
'userbox.avatarFront': '企鹅前景',
'userbox.avatarBack': '企鹅背景',
'userbox.preview.url': '图床 URL',
'userbox.error.nodata': '未找到中二数据',
'userbox.matching.select': '选择对战服务器',
'userbox.matching.select.sub': '选择你想加入的跨服全国对战服务器',
'userbox.matching.option.ui': '房间列表',
'userbox.matching.option.guide': '教程',
'userbox.matching.option.collab': '合作伙伴',
'userbox.matching.custom.name': '自定义',
'userbox.matching.custom.sub': '输入其他的匹配 URL',
'userbox.matching.symbolChat': '表情选择',
'userbox.matching.symbolChat.default': '默认',
'userbox.new.name': 'AquaBox',
'userbox.new.setup': '将中二Lumi 或更高版本)的游戏文件夹拖放到下方区域,以显示带有名牌和头像的 UserBox。所有文件都在浏览器中处理。',
'userbox.new.setup.notice': '选择包含游戏数据的最外层文件夹。',
'userbox.new.setup.processing_file': '正在处理文件',
'userbox.new.setup.finalizing': '正在保存到内部存储',
'userbox.new.drop': '将游戏文件夹拖到此处',
'userbox.new.switch.to_url': '切换到 URL 模式',
'userbox.new.switch.to_drop': '切换到游戏目录模式',
'userbox.new.url_warning': '请输入访问 UserBox 资源的 URL请参阅文档',
'userbox.new.activate_first': '启用 AquaBox需要游戏文件',
'userbox.new.activate_update': '更新 AquaBox需要游戏文件',
'userbox.new.activate': '使用 AquaBox',
'userbox.new.activate_desc': '启用后可显示带有名牌和头像的 UserBox',
'userbox.new.activate_profile': '在用户页面启用 AquaBox',
'userbox.new.activate_profile_desc': '启用后可在个人页面显示带有名牌和头像的 UserBox',
'userbox.new.error.invalidFolder': '所选文件夹无效。请确认游戏版本为 Lumi 或更新,并且包含 “A000” 选项包。',
'userbox.new.error.invalidUrl': '输入的 URL 无效。'
};
export const zhMaiPhoto: typeof EN_REF_MAI_PHOTO = {
'maiphoto.title': 'Mai 纪念照片库',
'maiphoto.url_warning': '注意:如果想与朋友分享图片的话,请先保存照片再发出去。不要复制图片 URL因为 URL 中包含 AquaDX 账号信息。',
'maiphoto.none': '还没有图片哦~ 可以在每次游戏结束的时候点击上传来上传照片。',
}
export const zhAquaTrans: typeof EN_REF_AQUATRANS = {
'trans.title': '🏳️‍⚧️ AquaTrans™ 数据迁移工具',
'trans.confirm.unbackuped.title': '确认迁移',
'trans.confirm.unbackuped.msg': '似乎还没有备份目标服务器的数据,真的要继续吗?(推荐先备份一下,因为迁移的时候会覆盖数据)',
'trans.confirm.untested.title': '不太聪明喵',
'trans.confirm.untested.msg': '在两个服务器上都测试完连接之后才能进行数据迁移哦!',
'trans.confirm.done.title': '完成!',
'trans.confirm.done.msg': '数据迁移成功!在 ${dst} 上的数据已被来自 ${src} 的数据覆盖。',
'trans.alert.in-progress': '在迁移了在迁移了',
'trans.prompt-html': `
<p>👋 使 AquaTrans </p>
<p>使 Keychip ID</p>
<p></p>
<p></p>
`,
'trans.error.empty': '请填写所有字段。',
'trans.error.untested': '请先进行连接测试。',
'trans.success.import': '数据导入成功!',
'trans.source.title': '源服务器',
'trans.target.title': '目标服务器',
'trans.field.addr': '服务器地址',
'trans.field.keychip': '狗号',
'trans.field.game': '游戏',
'trans.field.version': '版本',
'trans.field.card': '卡号',
'trans.btn.test': '测试连接',
'trans.btn.export': '导出数据',
'trans.btn.import': '导入数据',
'trans.blacklist': "这个服务器的服主把这个导出工具 ban 了,所以不能从这里导出",
}
export const ZH = { ...zhUser, ...zhWelcome, ...zhGeneral,
...zhLeaderboard, ...zhHome, ...zhSettings, ...zhUserbox, ...zhMaiPhoto,
...zhAquaTrans
}

View File

@ -0,0 +1,248 @@
{
"AF": "阿富汗",
"AX": "奥兰群岛",
"AL": "阿尔巴尼亚",
"DZ": "阿尔及利亚",
"AS": "美属萨摩亚",
"AD": "安道尔",
"AO": "安哥拉",
"AI": "安圭拉",
"AQ": "南极洲",
"AG": "安提瓜和巴布达",
"AR": "阿根廷",
"AM": "亚美尼亚",
"AW": "阿鲁巴",
"AU": "澳大利亚",
"AT": "奥地利",
"AZ": "阿塞拜疆",
"BS": "巴哈马",
"BH": "巴林",
"BD": "孟加拉国",
"BB": "巴巴多斯",
"BY": "白俄罗斯",
"BE": "比利时",
"BZ": "伯利兹",
"BJ": "贝宁",
"BM": "百慕大",
"BT": "不丹",
"BO": "玻利维亚",
"BA": "波斯尼亚和黑塞哥维那",
"BW": "博茨瓦纳",
"BV": "布维岛",
"BR": "巴西",
"IO": "英属印度洋领地",
"BN": "文莱达鲁萨兰国",
"BG": "保加利亚",
"BF": "布基纳法索",
"BI": "布隆迪",
"KH": "柬埔寨",
"CM": "喀麦隆",
"CA": "加拿大",
"CV": "佛得角",
"KY": "开曼群岛",
"CF": "中非共和国",
"TD": "乍得",
"CL": "智利",
"CN": "中国",
"CX": "圣诞岛",
"CC": "科科斯(基林)群岛",
"CO": "哥伦比亚",
"KM": "科摩罗",
"CG": "刚果",
"CD": "刚果民主共和国",
"CK": "库克群岛",
"CR": "哥斯达黎加",
"CI": "科特迪瓦",
"HR": "克罗地亚",
"CU": "古巴",
"CY": "塞浦路斯",
"CZ": "捷克共和国",
"DK": "丹麦",
"DJ": "吉布提",
"DM": "多米尼加",
"DO": "多米尼加共和国",
"EC": "厄瓜多尔",
"EG": "埃及",
"SV": "萨尔瓦多",
"GQ": "赤道几内亚",
"ER": "厄立特里亚",
"EE": "爱沙尼亚",
"ET": "埃塞俄比亚",
"FK": "福克兰群岛(马尔维纳斯群岛)",
"FO": "法罗群岛",
"FJ": "斐济",
"FI": "芬兰",
"FR": "法国",
"GF": "法属圭亚那",
"PF": "法属波利尼西亚",
"TF": "法属南部领土",
"GA": "加蓬",
"GM": "冈比亚",
"GE": "格鲁吉亚",
"DE": "德国",
"GH": "加纳",
"GI": "直布罗陀",
"GR": "希腊",
"GL": "格陵兰",
"GD": "格林纳达",
"GP": "瓜德罗普",
"GU": "关岛",
"GT": "危地马拉",
"GG": "根西岛",
"GN": "几内亚",
"GW": "几内亚比绍",
"GY": "圭亚那",
"HT": "海地",
"HM": "赫德岛和麦克唐纳群岛",
"VA": "梵蒂冈(教廷)",
"HN": "洪都拉斯",
"HK": "香港",
"HU": "匈牙利",
"IS": "冰岛",
"IN": "印度",
"ID": "印度尼西亚",
"IR": "伊朗(伊斯兰共和国)",
"IQ": "伊拉克",
"IE": "爱尔兰",
"IM": "马恩岛",
"IL": "以色列",
"IT": "意大利",
"JM": "牙买加",
"JP": "日本",
"JE": "泽西岛",
"JO": "约旦",
"KZ": "哈萨克斯坦",
"KE": "肯尼亚",
"KI": "基里巴斯",
"KR": "韩国",
"KP": "朝鲜",
"KW": "科威特",
"KG": "吉尔吉斯斯坦",
"LA": "老挝人民民主共和国",
"LV": "拉脱维亚",
"LB": "黎巴嫩",
"LS": "莱索托",
"LR": "利比里亚",
"LY": "利比亚阿拉伯民众国",
"LI": "列支敦士登",
"LT": "立陶宛",
"LU": "卢森堡",
"MO": "澳门",
"MK": "马其顿",
"MG": "马达加斯加",
"MW": "马拉维",
"MY": "马来西亚",
"MV": "马尔代夫",
"ML": "马里",
"MT": "马耳他",
"MH": "马绍尔群岛",
"MQ": "马提尼克",
"MR": "毛里塔尼亚",
"MU": "毛里求斯",
"YT": "马约特",
"MX": "墨西哥",
"FM": "密克罗尼西亚联邦",
"MD": "摩尔多瓦",
"MC": "摩纳哥",
"MN": "蒙古",
"ME": "黑山",
"MS": "蒙特塞拉特",
"MA": "摩洛哥",
"MZ": "莫桑比克",
"MM": "缅甸",
"NA": "纳米比亚",
"NR": "瑙鲁",
"NP": "尼泊尔",
"NL": "荷兰",
"AN": "荷属安的列斯",
"NC": "新喀里多尼亚",
"NZ": "新西兰",
"NI": "尼加拉瓜",
"NE": "尼日尔",
"NG": "尼日利亚",
"NU": "纽埃",
"NF": "诺福克岛",
"MP": "北马里亚纳群岛",
"NO": "挪威",
"OM": "阿曼",
"PK": "巴基斯坦",
"PW": "帕劳",
"PS": "被占领的巴勒斯坦领土",
"PA": "巴拿马",
"PG": "巴布亚新几内亚",
"PY": "巴拉圭",
"PE": "秘鲁",
"PH": "菲律宾",
"PN": "皮特凯恩",
"PL": "波兰",
"PT": "葡萄牙",
"PR": "波多黎各",
"QA": "卡塔尔",
"RE": "留尼汪",
"RO": "罗马尼亚",
"RU": "俄罗斯联邦",
"RW": "卢旺达",
"BL": "圣巴泰勒米",
"SH": "圣赫勒拿",
"KN": "圣基茨和尼维斯",
"LC": "圣卢西亚",
"MF": "圣马丁",
"PM": "圣皮埃尔和密克隆",
"VC": "圣文森特和格林纳丁斯",
"WS": "萨摩亚",
"SM": "圣马力诺",
"ST": "圣多美和普林西比",
"SA": "沙特阿拉伯",
"SN": "塞内加尔",
"RS": "塞尔维亚",
"SC": "塞舌尔",
"SL": "塞拉利昂",
"SG": "新加坡",
"SK": "斯洛伐克",
"SI": "斯洛文尼亚",
"SB": "所罗门群岛",
"SO": "索马里",
"ZA": "南非",
"GS": "南乔治亚和南桑威奇群岛",
"ES": "西班牙",
"LK": "斯里兰卡",
"SD": "苏丹",
"SR": "苏里南",
"SJ": "斯瓦尔巴和扬马延",
"SZ": "斯威士兰",
"SE": "瑞典",
"CH": "瑞士",
"SY": "叙利亚",
"TW": "台湾",
"TJ": "塔吉克斯坦",
"TZ": "坦桑尼亚",
"TH": "泰国",
"TL": "东帝汶",
"TG": "多哥",
"TK": "托克劳",
"TO": "汤加",
"TT": "特立尼达和多巴哥",
"TN": "突尼斯",
"TR": "土耳其",
"TM": "土库曼斯坦",
"TC": "特克斯和凯科斯群岛",
"TV": "图瓦卢",
"UG": "乌干达",
"UA": "乌克兰",
"AE": "阿拉伯联合酋长国",
"GB": "英国",
"US": "美国",
"UM": "美国本土外岛",
"UY": "乌拉圭",
"UZ": "乌兹别克斯坦",
"VU": "瓦努阿图",
"VE": "委内瑞拉",
"VN": "越南",
"VG": "英属维京群岛",
"VI": "美属维京群岛",
"WF": "瓦利斯和富图纳",
"EH": "西撒哈拉",
"YE": "也门",
"ZM": "赞比亚",
"ZW": "津巴布韦"
}

View File

@ -0,0 +1,13 @@
import { AQUA_HOST, DATA_HOST } from './config'
export async function getMaimai(endpoint: string, params: any) {
return await fetch(`${AQUA_HOST}/Maimai2Servlet/${endpoint}`, {
method: 'POST',
body: JSON.stringify(params)
}).then(res => res.json())
}
export async function getMaimaiAllMusic(): Promise<{ [key: string]: any }> {
return fetch(`${DATA_HOST}/maimai/meta/00/all-music.json`).then(it => it.json())
}

View File

@ -0,0 +1,107 @@
import type { MusicMeta } from "./generalTypes";
export interface Rating {
musicId: number
level: number
achievement: number
}
export interface ParsedRating extends Rating {
music: MusicMeta,
calc: number,
rank: string
}
export interface MaimaiUserSummaryEntry {
name: string
iconId: number
serverRank: number
accuracy: number
rating: number
ratingHighest: number
ranks: { name: string, count: number }[]
maxCombo: number
fullCombo: number
allPerfect: number
totalDxScore: number
plays: number
totalPlayTime: number
joined: string
lastSeen: string
lastVersion: string
best35: string
best15: string
recent: MaimaiUserPlaylog[]
}
export interface MaimaiUserPlaylog {
id: number;
musicId: number;
level: number;
userPlayDate: string;
trackNo: number;
vsRank: number;
achievement: number;
deluxscore: number;
scoreRank: number;
maxCombo: number;
totalCombo: number;
maxSync: number;
totalSync: number;
tapCriticalPerfect: number;
tapPerfect: number;
tapGreat: number;
tapGood: number;
tapMiss: number;
holdCriticalPerfect: number;
holdPerfect: number;
holdGreat: number;
holdGood: number;
holdMiss: number;
slideCriticalPerfect: number;
slidePerfect: number;
slideGreat: number;
slideGood: number;
slideMiss: number;
touchCriticalPerfect: number;
touchPerfect: number;
touchGreat: number;
touchGood: number;
touchMiss: number;
breakCriticalPerfect: number;
breakPerfect: number;
breakGreat: number;
breakGood: number;
breakMiss: number;
isTap: boolean;
isHold: boolean;
isSlide: boolean;
isTouch: boolean;
isBreak: boolean;
isCriticalDisp: boolean;
isFastLateDisp: boolean;
fastCount: number;
lateCount: number;
isAchieveNewRecord: boolean;
isDeluxscoreNewRecord: boolean;
comboStatus: number;
syncStatus: number;
isClear: boolean;
beforeRating: number;
afterRating: number;
beforeGrade: number;
afterGrade: number;
afterGradeRank: number;
beforeDeluxRating: number;
afterDeluxRating: number;
isPlayTutorial: boolean;
isEventMode: boolean;
isFreedomMode: boolean;
playMode: number;
isNewFree: boolean;
trialPlayAchievement: number;
extNum1: number;
extNum2: number;
extNum4: number;
extBool1: boolean;
}

View File

@ -0,0 +1,24 @@
import type { GenericGamePlaylog } from "./generalTypes";
export interface OngekiUserSummaryEntry {
name: string
iconId: number
serverRank: number
accuracy: number
rating: number
ratingHighest: number
ranks: { name: string, count: number }[]
maxCombo: number
fullCombo: number
allPerfect: number
totalDxScore: number
plays: number
totalPlayTime: number
joined: string
lastSeen: string
lastVersion: string
best30: string
best15: string
recent10: string
recent: GenericGamePlaylog[]
}

153
AquaNet/src/libs/scoring.ts Normal file
View File

@ -0,0 +1,153 @@
import { DATA_HOST } from "./config"
import type { MusicMeta } from "./generalTypes"
export type GameName = 'mai2' | 'chu3' | 'ongeki' | 'wacca'
const multTable = {
'mai2': [
[ 100.5, 22.4, 'SSSp' ],
[ 100.0, 21.6, 'SSS' ],
[ 99.5, 21.1, 'SSp' ],
[ 99, 20.8, 'SS' ],
[ 98, 20.3, 'Sp' ],
[ 97, 20, 'S' ],
[ 94, 16.8, 'AAA' ],
[ 90, 15.2, 'AA' ],
[ 80, 13.6, 'A' ],
[ 75, 12, 'BBB' ],
[ 70, 11.2, 'BB' ],
[ 60, 9.6, 'B' ],
[ 50, 8, 'C' ],
[ 40, 6.4, 'D' ],
[ 30, 4.8, 'D' ],
[ 20, 3.2, 'D' ],
[ 10, 1.6, 'D' ],
[ 0, 0, 'D' ]
],
// TODO: Fill in multipliers for Chunithm and Ongeki
'chu3': [
[ 100.9, 215, 'SSS+' ],
[ 100.75, 200, 'SSS' ],
[ 100.0, 0, 'SS' ],
[ 97.5, 0, 'S' ],
[ 95.0, 0, 'AAA' ],
[ 92.5, 0, 'AA' ],
[ 90.0, 0, 'A' ],
[ 80.0, 0, 'BBB' ],
[ 70.0, 0, 'BB' ],
[ 60.0, 0, 'B' ],
[ 50.0, 0, 'C' ],
[ 0.0, 0, 'D' ]
],
'ongeki': [
[ 100.75, 0, 'SSS+' ],
[ 100.0, 0, 'SSS' ],
[ 99.0, 0, 'SS' ],
[ 97.0, 0, 'S' ],
[ 94.0, 0, 'AAA' ],
[ 90.0, 0, 'AA' ],
[ 85.0, 0, 'A' ],
[ 80.0, 0, 'BBB' ],
[ 75.0, 0, 'BB' ],
[ 70.0, 0, 'B' ],
[ 50.0, 0, 'C' ],
[ 0.0, 0, 'D' ]
],
'wacca': [
[ 100.0, 0, 'AP' ],
[ 98.0, 0, 'SSS' ],
[ 95.0, 0, 'SS' ],
[ 90.0, 0, 'S' ],
[ 85.0, 0, 'AAA' ],
[ 80.0, 0, 'AA' ],
[ 70.0, 0, 'A' ],
[ 60.0, 0, 'B' ],
[ 1.0, 0, 'C' ],
[ 0.0, 0, 'D' ]
],
}
export function getMult(achievement: number, game: GameName) {
achievement /= 10000
const mt = multTable[game]
for (let i = 0; i < mt.length; i++) {
if (achievement >= (mt[i][0] as number)) return mt[i]
}
return [ 0, 0, 0 ]
}
export function roundFloor(achievement: number, game: GameName, digits = 2) {
// Round, but if the rounded number reaches the next rank, use floor instead
const mult = getMult(achievement, game);
achievement /= 10000
const rounded = achievement.toFixed(digits);
if (getMult(+rounded * 10000, game)[2] === mult[2] && rounded !== '101.0') return rounded;
return (+rounded - Math.pow(10, -digits)).toFixed(digits);
}
export function chusanRating(lv: number, score: number) {
lv = lv * 100
if (score >= 1009000) return lv + 215; // SSS+
if (score >= 1007500) return lv + 200 + (score - 1007500) / 100; // SSS
if (score >= 1005000) return lv + 150 + (score - 1005000) / 50; // SS+
if (score >= 1000000) return lv + 100 + (score - 1000000) / 100; // SS
if (score >= 975000) return lv + (score - 975000) / 250; // S+, S
if (score >= 925000) return lv - 300 + (score - 925000) * 3 / 500; // AA
if (score >= 900000) return lv - 500 + (score - 900000) * 4 / 500; // A
if (score >= 800000) return ((lv - 500) / 2 + (score - 800000) * ((lv - 500) / 2) / (100000)); // BBB
return 0; // C
}
export interface ParsedComposition {
name?: string
musicId: number
diffId: number // ID of the difficulty
score: number
cutoff: number
mult: number
rank: string // e.g. 'SSS+'
difficulty?: number // Actual difficulty of the map
img: string
ratingChange?: string // Rating change after playing this map
}
export function parseComposition(item: string, allMusics: Record<string, MusicMeta>, game: GameName): ParsedComposition {
// Chuni & ongeki: musicId, difficultId, score
// Mai: musicId, level (difficultyId), romVersion, achievement (score)
const mapData = item.split(':').map(Number)
if (game === 'mai2') mapData.splice(2, 1)
const [ musicId, diffId, score ] = mapData
const meta = allMusics[musicId]
// Get score multiplier
const tup = getMult(score, game)
const [ cutoff, mult ] = [ +tup[0], +tup[1] ]
const rank = "" + tup[2]
let diff = meta?.notes?.[diffId === 10 ? 0 : diffId]?.lv
function calcDxChange() {
if (!diff) return
if (game === 'mai2')
return Math.floor(diff * mult * (Math.min(100.5, score / 10000) / 100)).toFixed(0)
if (game === 'chu3' || game === 'ongeki')
return (Math.floor(chusanRating(diff, score)) / 100).toFixed(2)
}
return {
name: meta?.name,
musicId,
diffId,
score,
cutoff,
mult,
rank,
difficulty: diff,
img: `${DATA_HOST}/d/${game}/music/00${mapData[0].toString().padStart(6, '0').substring(2)}.png`,
ratingChange: calcDxChange()
}
}

Some files were not shown because too many files have changed in this diff Show More