mirror of
https://github.com/Lost-MSth/Arcaea-server.git
synced 2026-02-09 17:27:27 +08:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
80122d749e | ||
|
|
5c02ecdf37 |
21
README.md
21
README.md
@@ -30,8 +30,9 @@ This is a small local Arcaea server based on Python and Flask, which can simulat
|
|||||||
|
|
||||||
没有以下 We don't have:
|
没有以下 We don't have:
|
||||||
- 角色数值 Character characteristic value
|
- 角色数值 Character characteristic value
|
||||||
- 数据同步的时间和设备记录 The record of time and device for data synchronization
|
- 数据同步的时间记录 The record of time for data synchronization
|
||||||
- 服务器安全性保证 Server security assurance
|
- 服务器安全性保证 Server security assurance
|
||||||
|
- 登录奖励 Login present
|
||||||
|
|
||||||
可能有问题 There may be problems:
|
可能有问题 There may be problems:
|
||||||
- Recent 30
|
- Recent 30
|
||||||
@@ -54,17 +55,19 @@ It is just so interesting. What it can do is under exploration.
|
|||||||
>
|
>
|
||||||
> Tips: When updating, please keep the original database in case of data loss.
|
> Tips: When updating, please keep the original database in case of data loss.
|
||||||
|
|
||||||
### Version 1.7
|
### Version 1.8.1
|
||||||
- 仍然适用于Arcaea 3.2.3版本 Still for Arcaea 3.2.3
|
- 适用于Arcaea 3.3.1版本 For Arcaea 3.3.1
|
||||||
- 更新了歌曲数据库 Update the song database.
|
- 更新了歌曲数据库 Update the song database.
|
||||||
- 新增了购买系统,包括单曲购买和曲包购买 Add purchase system, including single purchase and pack purchase.
|
|
||||||
- 后台查询与修改项目增多 Increase background query and modification items.
|
|
||||||
- 新增用户下载量限制和下载校验 Add user download limit and download verification.
|
|
||||||
- 新增了**梦**的语音 Add the voice of **Yume**.
|
|
||||||
- 新增了网站图标 Add a favicon.
|
|
||||||
- 尝试解锁了所有的场景 Try to unlock all the scenes.
|
|
||||||
- 修复了一些Bug Fix some bugs.
|
- 修复了一些Bug Fix some bugs.
|
||||||
|
|
||||||
|
> 提醒:只是一次小更新,本次更新前后登录信息无法同步,需重新登录(我忘记给login表加主键了同步不了哈哈哈)
|
||||||
|
> 已发现的问题:设置Favorite角色可能并不有效
|
||||||
|
> 预告:登录奖励系统
|
||||||
|
>
|
||||||
|
> Tips: It is only a small update. The login information before and after this update can't be synchronized, so you need to log in again. (I forgot to add a primary key to the login table, so it can't be synchronized. lol)
|
||||||
|
> Problem found: Setting the favorite character may be useless.
|
||||||
|
> Preview: Login present system
|
||||||
|
|
||||||
## 运行环境与依赖 Running environment and requirements
|
## 运行环境与依赖 Running environment and requirements
|
||||||
- Windows操作系统 Windows operating system
|
- Windows操作系统 Windows operating system
|
||||||
- Python 3
|
- Python 3
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -199,17 +199,36 @@ item_id text,
|
|||||||
type text,
|
type text,
|
||||||
primary key(user_id, item_id, type)
|
primary key(user_id, item_id, type)
|
||||||
);''')
|
);''')
|
||||||
|
c.execute('''create table if not exists user_save(user_id int primary key,
|
||||||
|
scores_data text,
|
||||||
|
clearlamps_data text,
|
||||||
|
clearedsongs_data text,
|
||||||
|
unlocklist_data text,
|
||||||
|
installid_data text,
|
||||||
|
devicemodelname_data text,
|
||||||
|
story_data text
|
||||||
|
);''')
|
||||||
|
c.execute('''create table if not exists present(present_id text primary key,
|
||||||
|
expire_ts int,
|
||||||
|
items text,
|
||||||
|
description text
|
||||||
|
);''')
|
||||||
|
c.execute('''create table if not exists user_present(user_id int,
|
||||||
|
present_id text,
|
||||||
|
primary key(user_id, present_id)
|
||||||
|
);''')
|
||||||
|
|
||||||
|
|
||||||
char = ['Hikari', 'Tairitsu', 'Kou', 'Sapphire', 'Lethe', '', 'Tairitsu(Axium)', 'Tairitsu(Grievous Lady)', 'Stella', 'Hikari & Fisica', 'Ilith', 'Eto', 'Luna', 'Shirabe', 'Hikari(Zero)', 'Hikari(Fracture)', 'Hikari(Summer)', 'Tairitsu(Summer)', 'Tairitsu & Trin',
|
char = ['Hikari', 'Tairitsu', 'Kou', 'Sapphire', 'Lethe', '', 'Tairitsu(Axium)', 'Tairitsu(Grievous Lady)', 'Stella', 'Hikari & Fisica', 'Ilith', 'Eto', 'Luna', 'Shirabe', 'Hikari(Zero)', 'Hikari(Fracture)', 'Hikari(Summer)', 'Tairitsu(Summer)', 'Tairitsu & Trin',
|
||||||
'Ayu', 'Eto&Luna', 'Yume', 'Seine & Hikari', 'Saya', 'Tairitsu & Chuni Penguin', 'Chuni Penguin', 'Haruna', 'Nono', 'MTA-XXX', 'MDA-21', 'Kanae', 'Hikari(Fantasia)', 'Tairitsu(Sonata)', 'Sia', 'DORO*C', 'Tairitsu(Tempest)', 'Brillante', 'Ilith(Summer)', 'Etude']
|
'Ayu', 'Eto & Luna', 'Yume', 'Seine & Hikari', 'Saya', 'Tairitsu & Chuni Penguin', 'Chuni Penguin', 'Haruna', 'Nono', 'MTA-XXX', 'MDA-21', 'Kanae', 'Hikari(Fantasia)', 'Tairitsu(Sonata)', 'Sia', 'DORO*C', 'Tairitsu(Tempest)', 'Brillante', 'Ilith(Summer)', 'Etude', 'Alice & Tenniel']
|
||||||
|
|
||||||
skill_id = ['gauge_easy', '', '', '', 'note_mirror', '', '', 'gauge_hard', 'frag_plus_10_pack_stellights', 'gauge_easy|frag_plus_15_pst&prs', 'gauge_hard|fail_frag_minus_100', 'frag_plus_5_side_light', 'visual_hide_hp', 'frag_plus_5_side_conflict', 'challenge_fullcombo_0gauge', 'gauge_overflow', 'gauge_easy|note_mirror', 'note_mirror', 'visual_tomato_pack_tonesphere',
|
skill_id = ['gauge_easy', '', '', '', 'note_mirror', '', '', 'gauge_hard', 'frag_plus_10_pack_stellights', 'gauge_easy|frag_plus_15_pst&prs', 'gauge_hard|fail_frag_minus_100', 'frag_plus_5_side_light', 'visual_hide_hp', 'frag_plus_5_side_conflict', 'challenge_fullcombo_0gauge', 'gauge_overflow', 'gauge_easy|note_mirror', 'note_mirror', 'visual_tomato_pack_tonesphere',
|
||||||
'frag_rng_ayu', 'gaugestart_30|gaugegain_70', 'combo_100-frag_1', 'audio_gcemptyhit_pack_groovecoaster', 'gauge_saya', 'gauge_chuni', 'kantandeshou', 'gauge_haruna', 'frags_nono', 'gauge_pandora', 'gauge_regulus', 'omatsuri_daynight', '', '', 'sometimes(note_mirror|frag_plus_5)', 'scoreclear_aa|visual_scoregauge', 'gauge_tempest', 'gauge_hard', 'gauge_ilith_summer', '']
|
'frag_rng_ayu', 'gaugestart_30|gaugegain_70', 'combo_100-frag_1', 'audio_gcemptyhit_pack_groovecoaster', 'gauge_saya', 'gauge_chuni', 'kantandeshou', 'gauge_haruna', 'frags_nono', 'gauge_pandora', 'gauge_regulus', 'omatsuri_daynight', '', '', 'sometimes(note_mirror|frag_plus_5)', 'scoreclear_aa|visual_scoregauge', 'gauge_tempest', 'gauge_hard', 'gauge_ilith_summer', '', 'note_mirror|visual_hide_far']
|
||||||
|
|
||||||
skill_id_uncap = ['', '', 'frags_kou', '', 'visual_ink', '', '', '', '', '', '', '', '', 'shirabe_entry_fee',
|
skill_id_uncap = ['', '', 'frags_kou', '', 'visual_ink', '', '', '', '', '', '', '', '', 'shirabe_entry_fee',
|
||||||
'', '', '', '', '', '', '', 'frags_yume', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
|
'', '', '', '', '', '', '', 'frags_yume', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
|
||||||
|
|
||||||
for i in range(0, 39):
|
for i in range(0, 40):
|
||||||
if i in [0, 1, 2, 4, 13, 26, 27, 28, 29, 36, 21]:
|
if i in [0, 1, 2, 4, 13, 26, 27, 28, 29, 36, 21]:
|
||||||
sql = 'insert into character values('+str(
|
sql = 'insert into character values('+str(
|
||||||
i)+',"'+char[i]+'''",30,25000,25000,90,90,90,"'''+skill_id[i]+'''",0,0,"'''+skill_id_uncap[i]+'''",0,'',1,1)'''
|
i)+',"'+char[i]+'''",30,25000,25000,90,90,90,"'''+skill_id[i]+'''",0,0,"'''+skill_id_uncap[i]+'''",0,'',1,1)'''
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "core",
|
"id": "core",
|
||||||
"_id": "5fb5b68a68273a03de60f205",
|
"_id": "5fd01460a6e343038b057d28",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -15,12 +15,12 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "shiawase",
|
"id": "shiawase",
|
||||||
"_id": "5fb5b68a68273a03de60f234",
|
"_id": "5fd01461a6e343038b057d65",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}, {
|
}, {
|
||||||
"type": "character",
|
"type": "character",
|
||||||
"id": "kou",
|
"id": "kou",
|
||||||
"_id": "5fb5b68a68273a03de60f233",
|
"_id": "5fd01461a6e343038b057d64",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -32,12 +32,12 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "dynamix",
|
"id": "dynamix",
|
||||||
"_id": "5fb5b68a68273a03de60f238",
|
"_id": "5fd01461a6e343038b057d6f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}, {
|
}, {
|
||||||
"type": "character",
|
"type": "character",
|
||||||
"id": "sapphire",
|
"id": "sapphire",
|
||||||
"_id": "5fb5b68a68273a03de60f237",
|
"_id": "5fd01461a6e343038b057d6e",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -49,12 +49,12 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "mirai",
|
"id": "mirai",
|
||||||
"_id": "5fb5b68a68273a03de60f23e",
|
"_id": "5fd01461a6e343038b057d69",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}, {
|
}, {
|
||||||
"type": "character",
|
"type": "character",
|
||||||
"id": "lethe",
|
"id": "lethe",
|
||||||
"_id": "5fb5b68a68273a03de60f23d",
|
"_id": "5fd01461a6e343038b057d68",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "yugamu",
|
"id": "yugamu",
|
||||||
"_id": "5fb5b68a68273a03de60f206",
|
"_id": "5fd01460a6e343038b057d29",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "lanota",
|
"id": "lanota",
|
||||||
"_id": "5fb5b68a68273a03de60f211",
|
"_id": "5fd01460a6e343038b057d40",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "nijuusei",
|
"id": "nijuusei",
|
||||||
"_id": "5fb5b68a68273a03de60f207",
|
"_id": "5fd01460a6e343038b057d2a",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "rei",
|
"id": "rei",
|
||||||
"_id": "5fb5b68a68273a03de60f1fd",
|
"_id": "5fd01460a6e343038b057d4d",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "tonesphere",
|
"id": "tonesphere",
|
||||||
"_id": "5fb5b68a68273a03de60f213",
|
"_id": "5fd01460a6e343038b057d42",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "groovecoaster",
|
"id": "groovecoaster",
|
||||||
"_id": "5fb5b68a68273a03de60f22c",
|
"_id": "5fd01460a6e343038b057d5b",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "zettai",
|
"id": "zettai",
|
||||||
"_id": "5fb5b68a68273a03de60f1ff",
|
"_id": "5fd01460a6e343038b057d4f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -150,7 +150,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "chunithm",
|
"id": "chunithm",
|
||||||
"_id": "5fb5b68a68273a03de60f221",
|
"_id": "5fd01460a6e343038b057d39",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 300,
|
"price": 300,
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "prelude",
|
"id": "prelude",
|
||||||
"_id": "5fb5b68a68273a03de60f22d",
|
"_id": "5fd01460a6e343038b057d5c",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 400,
|
"price": 400,
|
||||||
@@ -170,7 +170,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "omatsuri",
|
"id": "omatsuri",
|
||||||
"_id": "5fb5b68a68273a03de60f200",
|
"_id": "5fd01460a6e343038b057d50",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -180,7 +180,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "vs",
|
"id": "vs",
|
||||||
"_id": "5fb5b68a68273a03de60f224",
|
"_id": "5fd01460a6e343038b057d3c",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 500,
|
"price": 500,
|
||||||
@@ -190,9 +190,29 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "pack",
|
"type": "pack",
|
||||||
"id": "extend",
|
"id": "extend",
|
||||||
"_id": "5fb5b68a68273a03de60f230",
|
"_id": "5fd01460a6e343038b057d5f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 700,
|
"price": 700,
|
||||||
"orig_price": 700
|
"orig_price": 700
|
||||||
|
}, {
|
||||||
|
"name": "alice",
|
||||||
|
"items": [{
|
||||||
|
"type": "pack",
|
||||||
|
"id": "alice",
|
||||||
|
"_id": "5fd01460a6e343038b057d55",
|
||||||
|
"is_available": true
|
||||||
|
}],
|
||||||
|
"orig_price": 500,
|
||||||
|
"price": 500
|
||||||
|
}, {
|
||||||
|
"name": "alice_append_1",
|
||||||
|
"items": [{
|
||||||
|
"type": "pack",
|
||||||
|
"id": "alice_append_1",
|
||||||
|
"_id": "5fd01460a6e343038b057d33",
|
||||||
|
"is_available": true
|
||||||
|
}],
|
||||||
|
"orig_price": 300,
|
||||||
|
"price": 300
|
||||||
}]
|
}]
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"id": "dataerror",
|
"id": "dataerror",
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"_id": "5fb5b68a68273a03de60f210",
|
"_id": "5fc8306209787401bb857d0f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"id": "yourvoiceso",
|
"id": "yourvoiceso",
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"_id": "5fb5b68a68273a03de60f227",
|
"_id": "5fc8306209787401bb857cf7",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"id": "crosssoul",
|
"id": "crosssoul",
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"_id": "5fb5b68a68273a03de60f21b",
|
"_id": "5fc8306209787401bb857d03",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "impurebird",
|
"id": "impurebird",
|
||||||
"_id": "5fb5b68a68273a03de60f21c",
|
"_id": "5fc8306209787401bb857d04",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "auxesia",
|
"id": "auxesia",
|
||||||
"_id": "5fb5b68a68273a03de60f228",
|
"_id": "5fc8306209787401bb857d10",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "modelista",
|
"id": "modelista",
|
||||||
"_id": "5fb5b68a68273a03de60f1fb",
|
"_id": "5fc8306209787401bb857cf8",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "yozakurafubuki",
|
"id": "yozakurafubuki",
|
||||||
"_id": "5fb5b68a68273a03de60f21d",
|
"_id": "5fc8306209787401bb857d05",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "surrender",
|
"id": "surrender",
|
||||||
"_id": "5fb5b68a68273a03de60f229",
|
"_id": "5fc8306209787401bb857d11",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "metallicpunisher",
|
"id": "metallicpunisher",
|
||||||
"_id": "5fb5b68a68273a03de60f1fc",
|
"_id": "5fc8306209787401bb857cf9",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -118,7 +118,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "carminescythe",
|
"id": "carminescythe",
|
||||||
"_id": "5fb5b68a68273a03de60f21e",
|
"_id": "5fc8306209787401bb857d06",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "bethere",
|
"id": "bethere",
|
||||||
"_id": "5fb5b68a68273a03de60f22a",
|
"_id": "5fc8306209787401bb857d12",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "callmyname",
|
"id": "callmyname",
|
||||||
"_id": "5fb5b68a68273a03de60f212",
|
"_id": "5fc8306209787401bb857d27",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "fallensquare",
|
"id": "fallensquare",
|
||||||
"_id": "5fb5b68a68273a03de60f208",
|
"_id": "5fc8306209787401bb857d1e",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -164,7 +164,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "dropdead",
|
"id": "dropdead",
|
||||||
"_id": "5fb5b68a68273a03de60f21f",
|
"_id": "5fc8306209787401bb857d07",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "alexandrite",
|
"id": "alexandrite",
|
||||||
"_id": "5fb5b68a68273a03de60f22b",
|
"_id": "5fc8306209787401bb857d13",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -188,7 +188,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "astraltale",
|
"id": "astraltale",
|
||||||
"_id": "5fb5b68a68273a03de60f1fe",
|
"_id": "5fc8306209787401bb857cfb",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -200,7 +200,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "phantasia",
|
"id": "phantasia",
|
||||||
"_id": "5fb5b68a68273a03de60f209",
|
"_id": "5fc8306209787401bb857d1f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "empireofwinter",
|
"id": "empireofwinter",
|
||||||
"_id": "5fb5b68a68273a03de60f220",
|
"_id": "5fc8306209787401bb857d08",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "libertas",
|
"id": "libertas",
|
||||||
"_id": "5fb5b68a68273a03de60f214",
|
"_id": "5fc8306209787401bb857d29",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -232,7 +232,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "dottodot",
|
"id": "dottodot",
|
||||||
"_id": "5fb5b68a68273a03de60f20a",
|
"_id": "5fc8306209787401bb857d20",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -244,7 +244,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "dreadnought",
|
"id": "dreadnought",
|
||||||
"_id": "5fb5b68a68273a03de60f215",
|
"_id": "5fc8306209787401bb857d2a",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -256,7 +256,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "mirzam",
|
"id": "mirzam",
|
||||||
"_id": "5fb5b68a68273a03de60f20b",
|
"_id": "5fc8306209787401bb857d21",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -268,7 +268,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "heavenlycaress",
|
"id": "heavenlycaress",
|
||||||
"_id": "5fb5b68a68273a03de60f222",
|
"_id": "5fc8306209787401bb857d0a",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -278,7 +278,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "filament",
|
"id": "filament",
|
||||||
"_id": "5fb5b68a68273a03de60f22e",
|
"_id": "5fc8306209787401bb857d16",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "avantraze",
|
"id": "avantraze",
|
||||||
"_id": "5fb5b68a68273a03de60f216",
|
"_id": "5fc8306209787401bb857d2b",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -298,7 +298,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "battlenoone",
|
"id": "battlenoone",
|
||||||
"_id": "5fb5b68a68273a03de60f201",
|
"_id": "5fc8306209787401bb857cfe",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "saikyostronger",
|
"id": "saikyostronger",
|
||||||
"_id": "5fb5b68a68273a03de60f20c",
|
"_id": "5fc8306209787401bb857d22",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -318,7 +318,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "izana",
|
"id": "izana",
|
||||||
"_id": "5fb5b68a68273a03de60f223",
|
"_id": "5fc8306209787401bb857d0b",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -328,7 +328,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "einherjar",
|
"id": "einherjar",
|
||||||
"_id": "5fb5b68a68273a03de60f22f",
|
"_id": "5fc8306209787401bb857d17",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -338,7 +338,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "laqryma",
|
"id": "laqryma",
|
||||||
"_id": "5fb5b68a68273a03de60f217",
|
"_id": "5fc8306209787401bb857d2c",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -348,7 +348,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "amygdata",
|
"id": "amygdata",
|
||||||
"_id": "5fb5b68a68273a03de60f202",
|
"_id": "5fc8306209787401bb857cff",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -358,7 +358,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "altale",
|
"id": "altale",
|
||||||
"_id": "5fb5b68a68273a03de60f20d",
|
"_id": "5fc8306209787401bb857d23",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -368,7 +368,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "feelssoright",
|
"id": "feelssoright",
|
||||||
"_id": "5fb5b68a68273a03de60f218",
|
"_id": "5fc8306209787401bb857d2d",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "scarletcage",
|
"id": "scarletcage",
|
||||||
"_id": "5fb5b68a68273a03de60f203",
|
"_id": "5fc8306209787401bb857d00",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "teriqma",
|
"id": "teriqma",
|
||||||
"_id": "5fb5b68a68273a03de60f20e",
|
"_id": "5fc8306209787401bb857d24",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -398,7 +398,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "mahoroba",
|
"id": "mahoroba",
|
||||||
"_id": "5fb5b68a68273a03de60f225",
|
"_id": "5fc8306209787401bb857d0d",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -408,7 +408,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "badtek",
|
"id": "badtek",
|
||||||
"_id": "5fb5b68a68273a03de60f219",
|
"_id": "5fc8306209787401bb857d2e",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -418,7 +418,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "maliciousmischance",
|
"id": "maliciousmischance",
|
||||||
"_id": "5fb5b68a68273a03de60f231",
|
"_id": "5fc8306209787401bb857d19",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -428,7 +428,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "buchigireberserker",
|
"id": "buchigireberserker",
|
||||||
"_id": "5fb5b68a68273a03de60f20f",
|
"_id": "5fc8306209787401bb857d25",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -438,7 +438,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "galaxyfriends",
|
"id": "galaxyfriends",
|
||||||
"_id": "5fb5b68a68273a03de60f226",
|
"_id": "5fc8306209787401bb857d0e",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
@@ -448,7 +448,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "xeraphinite",
|
"id": "xeraphinite",
|
||||||
"_id": "5fb5b68a68273a03de60f232",
|
"_id": "5fc8306209787401bb857d1a",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"orig_price": 100,
|
"orig_price": 100,
|
||||||
@@ -458,7 +458,7 @@
|
|||||||
"items": [{
|
"items": [{
|
||||||
"type": "single",
|
"type": "single",
|
||||||
"id": "xanatos",
|
"id": "xanatos",
|
||||||
"_id": "5fb5b68a68273a03de60f21a",
|
"_id": "5fc8306209787401bb857d2f",
|
||||||
"is_available": true
|
"is_available": true
|
||||||
}],
|
}],
|
||||||
"price": 100,
|
"price": 100,
|
||||||
|
|||||||
@@ -440,10 +440,16 @@ def cloud_post():
|
|||||||
token = token[7:]
|
token = token[7:]
|
||||||
scores_data = request.form['scores_data']
|
scores_data = request.form['scores_data']
|
||||||
clearlamps_data = request.form['clearlamps_data']
|
clearlamps_data = request.form['clearlamps_data']
|
||||||
|
clearedsongs_data = request.form['clearedsongs_data']
|
||||||
|
unlocklist_data = request.form['unlocklist_data']
|
||||||
|
installid_data = request.form['installid_data']
|
||||||
|
devicemodelname_data = request.form['devicemodelname_data']
|
||||||
|
story_data = request.form['story_data']
|
||||||
try:
|
try:
|
||||||
user_id = server.auth.token_get_id(token)
|
user_id = server.auth.token_get_id(token)
|
||||||
if user_id is not None:
|
if user_id is not None:
|
||||||
server.arcscore.arc_all_post(user_id, scores_data, clearlamps_data)
|
server.arcscore.arc_all_post(user_id, scores_data, clearlamps_data, clearedsongs_data,
|
||||||
|
unlocklist_data, installid_data, devicemodelname_data, story_data)
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True,
|
"success": True,
|
||||||
"value": {
|
"value": {
|
||||||
@@ -464,9 +470,23 @@ def redeem():
|
|||||||
# 礼物确认
|
# 礼物确认
|
||||||
@app.route('/coffee/12/present/me/claim/<present_id>', methods=['POST'])
|
@app.route('/coffee/12/present/me/claim/<present_id>', methods=['POST'])
|
||||||
def claim_present(present_id):
|
def claim_present(present_id):
|
||||||
|
headers = request.headers
|
||||||
|
token = headers['Authorization']
|
||||||
|
token = token[7:]
|
||||||
|
try:
|
||||||
|
user_id = server.auth.token_get_id(token)
|
||||||
|
if user_id is not None:
|
||||||
|
flag = server.arcpurchase.claim_user_present(user_id, present_id)
|
||||||
|
if flag:
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"success": True
|
"success": True
|
||||||
})
|
})
|
||||||
|
else:
|
||||||
|
return error_return(108)
|
||||||
|
else:
|
||||||
|
return error_return(108)
|
||||||
|
except:
|
||||||
|
return error_return(108)
|
||||||
|
|
||||||
|
|
||||||
# 购买,为了world模式boost一下
|
# 购买,为了world模式boost一下
|
||||||
|
|||||||
@@ -120,3 +120,38 @@ def buy_single(user_id, single_id):
|
|||||||
return {
|
return {
|
||||||
"success": True
|
"success": True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_present(c, user_id):
|
||||||
|
# 获取用户奖励,返回字典列表
|
||||||
|
c.execute(
|
||||||
|
'''select * from present where present_id in (select present_id from user_present where user_id=:a)''', {'a': user_id})
|
||||||
|
x = c.fetchall()
|
||||||
|
re = []
|
||||||
|
if x:
|
||||||
|
for i in x:
|
||||||
|
re.append({'expire_ts': i[1],
|
||||||
|
'description': i[3],
|
||||||
|
'present_id': i[0],
|
||||||
|
'items': i[2]
|
||||||
|
})
|
||||||
|
|
||||||
|
return re
|
||||||
|
|
||||||
|
|
||||||
|
def claim_user_present(user_id, present_id):
|
||||||
|
# 确认并删除用户奖励,返回成功与否的布尔值
|
||||||
|
flag = False
|
||||||
|
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||||
|
c = conn.cursor()
|
||||||
|
|
||||||
|
c.execute('''select exists(select * from user_present where user_id=:a and present_id=:b)''',
|
||||||
|
{'a': user_id, 'b': present_id})
|
||||||
|
if c.fetchone() == (1,):
|
||||||
|
flag = True
|
||||||
|
c.execute('''delete from user_present where user_id=:a and present_id=:b''',
|
||||||
|
{'a': user_id, 'b': present_id})
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
return flag
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -82,7 +82,7 @@ def arc_register(name: str, password: str): # 注册
|
|||||||
now = int(time.time() * 1000)
|
now = int(time.time() * 1000)
|
||||||
c.execute('''insert into user(user_id, name, password, join_date, user_code, rating_ptt,
|
c.execute('''insert into user(user_id, name, password, join_date, user_code, rating_ptt,
|
||||||
character_id, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, is_hide_rating, favorite_character, max_stamina_notification_enabled, current_map, ticket)
|
character_id, is_skill_sealed, is_char_uncapped, is_char_uncapped_override, is_hide_rating, favorite_character, max_stamina_notification_enabled, current_map, ticket)
|
||||||
values(:user_id, :name, :password, :join_date, :user_code, 0, 0, 0, 0, 0, 0, -1, 0, '', 114514)
|
values(:user_id, :name, :password, :join_date, :user_code, 0, 0, 0, 0, 0, 0, -1, 0, '', 0)
|
||||||
''', {'user_code': user_code, 'user_id': user_id, 'join_date': now, 'name': name, 'password': hash_pwd})
|
''', {'user_code': user_code, 'user_id': user_id, 'join_date': now, 'name': name, 'password': hash_pwd})
|
||||||
c.execute('''insert into recent30(user_id) values(:user_id)''', {
|
c.execute('''insert into recent30(user_id) values(:user_id)''', {
|
||||||
'user_id': user_id})
|
'user_id': user_id})
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ def get_value_0(c, user_id):
|
|||||||
"max_stamina_ts": 1586274871917,
|
"max_stamina_ts": 1586274871917,
|
||||||
"stamina": 12,
|
"stamina": 12,
|
||||||
"world_unlocks": ["scenery_chap1", "scenery_chap2", "scenery_chap3", "scenery_chap4", "scenery_chap5"],
|
"world_unlocks": ["scenery_chap1", "scenery_chap2", "scenery_chap3", "scenery_chap4", "scenery_chap5"],
|
||||||
"world_songs": ["babaroque", "shadesoflight", "kanagawa", "lucifer", "anokumene", "ignotus", "rabbitintheblackroom", "qualia", "redandblue", "bookmaker", "darakunosono", "espebranch", "blacklotus", "givemeanightmare", "vividtheory", "onefr", "gekka", "vexaria3", "infinityheaven3", "fairytale3", "goodtek3", "suomi", "rugie", "faintlight", "harutopia", "goodtek", "dreaminattraction", "syro", "diode", "freefall", "grimheart", "blaster", "cyberneciacatharsis", "monochromeprincess", "revixy", "vector", "supernova", "nhelv", "purgatorium3", "dement3", "crossover", "guardina", "axiumcrisis", "worldvanquisher", "sheriruth", "pragmatism", "gloryroad", "etherstrike", "corpssansorganes", "lostdesire", "blrink", "essenceoftwilight", "lapis", "solitarydream", "lumia3"],
|
"world_songs": ["babaroque", "shadesoflight", "kanagawa", "lucifer", "anokumene", "ignotus", "rabbitintheblackroom", "qualia", "redandblue", "bookmaker", "darakunosono", "espebranch", "blacklotus", "givemeanightmare", "vividtheory", "onefr", "gekka", "vexaria3", "infinityheaven3", "fairytale3", "goodtek3", "suomi", "rugie", "faintlight", "harutopia", "goodtek", "dreaminattraction", "syro", "diode", "freefall", "grimheart", "blaster", "cyberneciacatharsis", "monochromeprincess", "revixy", "vector", "supernova", "nhelv", "purgatorium3", "dement3", "crossover", "guardina", "axiumcrisis", "worldvanquisher", "sheriruth", "pragmatism", "gloryroad", "etherstrike", "corpssansorganes", "lostdesire", "blrink", "essenceoftwilight", "lapis", "solitarydream", "lumia3", "purpleverse"],
|
||||||
"singles": get_user_singles(c, user_id), # ["dataerror", "yourvoiceso", "crosssoul", "impurebird", "auxesia", "modelista", "yozakurafubuki", "surrender", "metallicpunisher", "carminescythe", "bethere", "callmyname", "fallensquare", "dropdead", "alexandrite", "astraltale", "phantasia", "empireofwinter", "libertas", "dottodot", "dreadnought", "mirzam", "heavenlycaress", "filament", "avantraze", "battlenoone", "saikyostronger", "izana", "einherjar", "laqryma", "amygdata", "altale", "feelssoright", "scarletcage", "teriqma", "mahoroba", "badtek", "maliciousmischance", "buchigireberserker", "galaxyfriends", "xeraphinite", "xanatos"]
|
"singles": get_user_singles(c, user_id), # ["dataerror", "yourvoiceso", "crosssoul", "impurebird", "auxesia", "modelista", "yozakurafubuki", "surrender", "metallicpunisher", "carminescythe", "bethere", "callmyname", "fallensquare", "dropdead", "alexandrite", "astraltale", "phantasia", "empireofwinter", "libertas", "dottodot", "dreadnought", "mirzam", "heavenlycaress", "filament", "avantraze", "battlenoone", "saikyostronger", "izana", "einherjar", "laqryma", "amygdata", "altale", "feelssoright", "scarletcage", "teriqma", "mahoroba", "badtek", "maliciousmischance", "buchigireberserker", "galaxyfriends", "xeraphinite", "xanatos"]
|
||||||
"packs": get_user_packs(c, user_id),
|
"packs": get_user_packs(c, user_id),
|
||||||
# ["vs", "extend", "dynamix", "prelude", "core", "yugamu", "omatsuri", "zettai", "mirai", "shiawase", "chunithm", "nijuusei", "groovecoaster", "rei", "tonesphere", "lanota"]
|
# ["vs", "extend", "dynamix", "prelude", "core", "yugamu", "omatsuri", "zettai", "mirai", "shiawase", "chunithm", "nijuusei", "groovecoaster", "rei", "tonesphere", "lanota"]
|
||||||
@@ -330,7 +330,7 @@ def arc_aggregate_big(user_id):
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"value": []
|
"value": server.arcpurchase.get_user_present(c, user_id)
|
||||||
}, {
|
}, {
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"value": {
|
"value": {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
</form>
|
</form>
|
||||||
<br />
|
<br />
|
||||||
<hr />
|
<hr />
|
||||||
<form action="/web/changeuserpurchase/" method="post">
|
<form action="/web/changeuserpurchase/edituser" method="post">
|
||||||
<div class="title">Edit all the users</div>
|
<div class="title">Edit all the users</div>
|
||||||
<br />
|
<br />
|
||||||
<div>对所有单曲和曲包的操作 Operation to all singles and packs:
|
<div>对所有单曲和曲包的操作 Operation to all singles and packs:
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<h1>系统方面 System</h1>
|
<h1>系统方面 System</h1>
|
||||||
<a href="{{ url_for('index.update_database') }}">数据库更新 Update databases</a></br></br>
|
<a href="{{ url_for('index.update_database') }}">数据库更新 Update databases</a></br></br>
|
||||||
|
<a href="{{ url_for('index.update_user_save') }}">用户存档更新 Update user saves</a></br></br>
|
||||||
<a href="{{ url_for('index.change_song') }}">歌曲修改 Change the songs</a></br></br>
|
<a href="{{ url_for('index.change_song') }}">歌曲修改 Change the songs</a></br></br>
|
||||||
<a href="{{ url_for('index.change_character') }}">角色修改 Change the characters</a></br></br>
|
<a href="{{ url_for('index.change_character') }}">角色修改 Change the characters</a></br></br>
|
||||||
<a href="{{ url_for('index.change_item') }}">购买信息修改 Change the items</a></br></br>
|
<a href="{{ url_for('index.change_item') }}">购买信息修改 Change the items</a></br></br>
|
||||||
|
|||||||
30
latest version/templates/web/updateusersave.html
Normal file
30
latest version/templates/web/updateusersave.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{% extends 'base.html' %}
|
||||||
|
{% block header %}
|
||||||
|
<h1>{% block title %}Update users' saves{% endblock %}</h1>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form action="/web/updateusersave" method="post">
|
||||||
|
<div class="title">Update one user's saves to the database</div>
|
||||||
|
<label for="name">Arcaea Username</label>
|
||||||
|
<input name="name" id="name">
|
||||||
|
or<br />
|
||||||
|
<label for="user_code">Arcaea User Code</label>
|
||||||
|
<input name="user_code" id="user_code">
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<input type="submit" value="Update">
|
||||||
|
</form>
|
||||||
|
<br />
|
||||||
|
<hr />
|
||||||
|
<form action="/web/updateusersave" method="post">
|
||||||
|
<div class="title">Update all users' saves to the database</div>
|
||||||
|
<br />
|
||||||
|
<input type="submit" value="Update all">
|
||||||
|
|
||||||
|
<div class="content">这里会将用户上传的存档覆盖到best_score表中,请注意是覆盖,不会进行分数比较。</div>
|
||||||
|
<div class="content">Here you can overlay the saves uploaded by users to best_score table. Please remember that it
|
||||||
|
is an overlay action, so scores will not be compared.</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
@@ -402,7 +402,7 @@ def all_character():
|
|||||||
def change_character():
|
def change_character():
|
||||||
# 修改角色数据
|
# 修改角色数据
|
||||||
skill_ids = ['No_skill', 'gauge_easy', 'note_mirror', 'gauge_hard', 'frag_plus_10_pack_stellights', 'gauge_easy|frag_plus_15_pst&prs', 'gauge_hard|fail_frag_minus_100', 'frag_plus_5_side_light', 'visual_hide_hp', 'frag_plus_5_side_conflict', 'challenge_fullcombo_0gauge', 'gauge_overflow', 'gauge_easy|note_mirror', 'note_mirror', 'visual_tomato_pack_tonesphere',
|
skill_ids = ['No_skill', 'gauge_easy', 'note_mirror', 'gauge_hard', 'frag_plus_10_pack_stellights', 'gauge_easy|frag_plus_15_pst&prs', 'gauge_hard|fail_frag_minus_100', 'frag_plus_5_side_light', 'visual_hide_hp', 'frag_plus_5_side_conflict', 'challenge_fullcombo_0gauge', 'gauge_overflow', 'gauge_easy|note_mirror', 'note_mirror', 'visual_tomato_pack_tonesphere',
|
||||||
'frag_rng_ayu', 'gaugestart_30|gaugegain_70', 'combo_100-frag_1', 'audio_gcemptyhit_pack_groovecoaster', 'gauge_saya', 'gauge_chuni', 'kantandeshou', 'gauge_haruna', 'frags_nono', 'gauge_pandora', 'gauge_regulus', 'omatsuri_daynight', 'sometimes(note_mirror|frag_plus_5)', 'scoreclear_aa|visual_scoregauge', 'gauge_tempest', 'gauge_hard', 'gauge_ilith_summer', 'frags_kou', 'visual_ink', 'shirabe_entry_fee', 'frags_yume']
|
'frag_rng_ayu', 'gaugestart_30|gaugegain_70', 'combo_100-frag_1', 'audio_gcemptyhit_pack_groovecoaster', 'gauge_saya', 'gauge_chuni', 'kantandeshou', 'gauge_haruna', 'frags_nono', 'gauge_pandora', 'gauge_regulus', 'omatsuri_daynight', 'sometimes(note_mirror|frag_plus_5)', 'scoreclear_aa|visual_scoregauge', 'gauge_tempest', 'gauge_hard', 'gauge_ilith_summer', 'frags_kou', 'visual_ink', 'shirabe_entry_fee', 'frags_yume', 'note_mirror|visual_hide_far']
|
||||||
return render_template('web/changechar.html', skill_ids=skill_ids)
|
return render_template('web/changechar.html', skill_ids=skill_ids)
|
||||||
|
|
||||||
|
|
||||||
@@ -564,7 +564,6 @@ def edit_user():
|
|||||||
'''select user_id from user where name=:a''', {'a': name})
|
'''select user_id from user where name=:a''', {'a': name})
|
||||||
|
|
||||||
user_id = c.fetchone()
|
user_id = c.fetchone()
|
||||||
posts = []
|
|
||||||
if user_id:
|
if user_id:
|
||||||
user_id = user_id[0]
|
user_id = user_id[0]
|
||||||
|
|
||||||
@@ -642,7 +641,6 @@ def edit_user_purchase():
|
|||||||
'''select user_id from user where name=:a''', {'a': name})
|
'''select user_id from user where name=:a''', {'a': name})
|
||||||
|
|
||||||
user_id = c.fetchone()
|
user_id = c.fetchone()
|
||||||
posts = []
|
|
||||||
if user_id:
|
if user_id:
|
||||||
user_id = user_id[0]
|
user_id = user_id[0]
|
||||||
|
|
||||||
@@ -717,11 +715,13 @@ def change_item():
|
|||||||
else:
|
else:
|
||||||
orig_price = None
|
orig_price = None
|
||||||
if discount_from:
|
if discount_from:
|
||||||
discount_from = int(time.mktime(time.strptime(discount_from, "%Y-%m-%dT%H:%M"))) * 1000
|
discount_from = int(time.mktime(time.strptime(
|
||||||
|
discount_from, "%Y-%m-%dT%H:%M"))) * 1000
|
||||||
else:
|
else:
|
||||||
discount_from = None
|
discount_from = None
|
||||||
if discount_to:
|
if discount_to:
|
||||||
discount_to = int(time.mktime(time.strptime(discount_to, "%Y-%m-%dT%H:%M"))) * 1000
|
discount_to = int(time.mktime(time.strptime(
|
||||||
|
discount_to, "%Y-%m-%dT%H:%M"))) * 1000
|
||||||
else:
|
else:
|
||||||
discount_to = None
|
discount_to = None
|
||||||
except:
|
except:
|
||||||
@@ -767,3 +767,60 @@ def change_item():
|
|||||||
flash(error)
|
flash(error)
|
||||||
|
|
||||||
return render_template('web/changeitem.html')
|
return render_template('web/changeitem.html')
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route('/updateusersave', methods=['POST', 'GET'])
|
||||||
|
@login_required
|
||||||
|
def update_user_save():
|
||||||
|
# 将用户存档覆盖到分数表中
|
||||||
|
|
||||||
|
if request.method == 'GET':
|
||||||
|
return render_template('web/updateusersave.html')
|
||||||
|
|
||||||
|
error = None
|
||||||
|
flag = True
|
||||||
|
name = None
|
||||||
|
user_code = None
|
||||||
|
|
||||||
|
conn = sqlite3.connect('./database/arcaea_database.db')
|
||||||
|
c = conn.cursor()
|
||||||
|
|
||||||
|
# 全修改
|
||||||
|
if 'name' not in request.form and 'user_code' not in request.form:
|
||||||
|
flag = False
|
||||||
|
web.system.update_all_save(c)
|
||||||
|
flash("全部用户存档同步成功 Successfully update all users' saves.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
name = request.form['name']
|
||||||
|
user_code = request.form['user_code']
|
||||||
|
|
||||||
|
# 指定修改
|
||||||
|
if name or user_code:
|
||||||
|
|
||||||
|
if user_code:
|
||||||
|
c.execute('''select user_id from user where user_code=:a''', {
|
||||||
|
'a': user_code})
|
||||||
|
else:
|
||||||
|
c.execute(
|
||||||
|
'''select user_id from user where name=:a''', {'a': name})
|
||||||
|
|
||||||
|
user_id = c.fetchone()
|
||||||
|
if user_id:
|
||||||
|
user_id = user_id[0]
|
||||||
|
web.system.update_one_save(c, user_id)
|
||||||
|
flash("用户存档同步成功 Successfully update the user's saves.")
|
||||||
|
|
||||||
|
else:
|
||||||
|
error = '玩家不存在 The player does not exist.'
|
||||||
|
|
||||||
|
else:
|
||||||
|
if flag:
|
||||||
|
error = '输入为空 Null Input.'
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
conn.close()
|
||||||
|
if error:
|
||||||
|
flash(error)
|
||||||
|
|
||||||
|
return render_template('web/updateusersave.html')
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import time
|
import time
|
||||||
|
import json
|
||||||
|
import server.arcscore
|
||||||
|
|
||||||
|
|
||||||
def int2b(x):
|
def int2b(x):
|
||||||
@@ -140,7 +142,7 @@ def update_user_char(c):
|
|||||||
|
|
||||||
def update_database():
|
def update_database():
|
||||||
# 将old数据库不存在数据加入到新数据库上,并删除old数据库
|
# 将old数据库不存在数据加入到新数据库上,并删除old数据库
|
||||||
# 对于arcaea_datebase.db,更新best_score,friend,recent30,user,user_world, user_item并用character数据更新user_char
|
# 对于arcaea_datebase.db,更新best_score,friend,recent30,user,user_world, user_item, user_save, login, present, user_present并用character数据更新user_char
|
||||||
# 对于arcsong.db,更新songs
|
# 对于arcsong.db,更新songs
|
||||||
if os.path.isfile("database/old_arcaea_database.db") and os.path.isfile("database/arcaea_database.db"):
|
if os.path.isfile("database/old_arcaea_database.db") and os.path.isfile("database/arcaea_database.db"):
|
||||||
conn1 = sqlite3.connect('./database/old_arcaea_database.db')
|
conn1 = sqlite3.connect('./database/old_arcaea_database.db')
|
||||||
@@ -154,6 +156,10 @@ def update_database():
|
|||||||
update_one_table(c1, c2, 'recent30')
|
update_one_table(c1, c2, 'recent30')
|
||||||
update_one_table(c1, c2, 'user_world')
|
update_one_table(c1, c2, 'user_world')
|
||||||
update_one_table(c1, c2, 'user_item')
|
update_one_table(c1, c2, 'user_item')
|
||||||
|
update_one_table(c1, c2, 'user_save')
|
||||||
|
update_one_table(c1, c2, 'login')
|
||||||
|
update_one_table(c1, c2, 'present')
|
||||||
|
update_one_table(c1, c2, 'user_present')
|
||||||
|
|
||||||
update_user_char(c2)
|
update_user_char(c2)
|
||||||
|
|
||||||
@@ -243,3 +249,55 @@ def get_all_item():
|
|||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
return re
|
return re
|
||||||
|
|
||||||
|
|
||||||
|
def update_one_save(c, user_id):
|
||||||
|
# 同步指定用户存档
|
||||||
|
# 注意,best_score表不比较,直接覆盖
|
||||||
|
|
||||||
|
c.execute('''select scores_data, clearlamps_data from user_save where user_id=:a''', {
|
||||||
|
'a': user_id})
|
||||||
|
x = c.fetchone()
|
||||||
|
if x:
|
||||||
|
scores = json.loads(x[0])[""]
|
||||||
|
clearlamps = json.loads(x[1])[""]
|
||||||
|
clear_song_id_difficulty = []
|
||||||
|
clear_state = []
|
||||||
|
for i in clearlamps:
|
||||||
|
clear_song_id_difficulty.append(i['song_id']+str(i['difficulty']))
|
||||||
|
clear_state.append(i['clear_type'])
|
||||||
|
|
||||||
|
for i in scores:
|
||||||
|
rating = server.arcscore.get_one_ptt(
|
||||||
|
i['song_id'], i['difficulty'], i['score'])
|
||||||
|
try:
|
||||||
|
index = clear_song_id_difficulty.index(
|
||||||
|
i['song_id'] + str(i['difficulty']))
|
||||||
|
except:
|
||||||
|
index = -1
|
||||||
|
if index != -1:
|
||||||
|
clear_type = clear_state[index]
|
||||||
|
else:
|
||||||
|
clear_type = 0
|
||||||
|
c.execute('''delete from best_score where user_id=:a and song_id=:b and difficulty=:c''', {
|
||||||
|
'a': user_id, 'b': i['song_id'], 'c': i['difficulty']})
|
||||||
|
c.execute('''insert into best_score values(:a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l, :m, :n)''', {
|
||||||
|
'a': user_id, 'b': i['song_id'], 'c': i['difficulty'], 'd': i['score'], 'e': i['shiny_perfect_count'], 'f': i['perfect_count'], 'g': i['near_count'], 'h': i['miss_count'], 'i': i['health'], 'j': i['modifier'], 'k': i['time_played'], 'l': clear_type, 'm': clear_type, 'n': rating})
|
||||||
|
|
||||||
|
ptt = server.arcscore.get_user_ptt(c, user_id) # 更新PTT
|
||||||
|
c.execute('''update user set rating_ptt=:a where user_id=:b''', {
|
||||||
|
'a': ptt, 'b': user_id})
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def update_all_save(c):
|
||||||
|
# 同步所有用户存档
|
||||||
|
|
||||||
|
c.execute('''select user_id from user_save''')
|
||||||
|
x = c.fetchall()
|
||||||
|
if x:
|
||||||
|
for i in x:
|
||||||
|
update_one_save(c, i[0])
|
||||||
|
|
||||||
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user