diff --git a/README.md b/README.md index 0905cac..ecebeb2 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,21 @@ 一个微型的Arcaea本地服务器 A small local server for Arcaea ## 简介 Introduction -这是基于Python以及Flask的微型本地Arcaea服务器,可以模拟游戏的主要功能,一时兴起在五天之内糊了出来。这可能是我第一次写这种大程序,若有不妥之处,敬请谅解。 -This is a small local Arcaea server based on Python and Flask, which can simulate the main functions of the game. I completed it on the spur of the moment in five days. This may be the first time I have written such a large program. Please understand if there is something wrong with it. +这是基于Python以及Flask的微型本地Arcaea服务器,可以模拟游戏的主要功能。这可能是我第一次写这种大程序,若有不妥之处,敬请谅解。 + +本程序主要用于学习研究,不得用于任何商业行为,否则后果自负,这不是强制要求,只是一个提醒与警告。 + +This is a small local Arcaea server based on Python and Flask, which can simulate the main functions of the game. This may be the first time I have written such a large program. Please understand if there is something wrong with it. + +This procedure is mainly used for study and research, and shall not be used for any commercial activities, otherwise the consequences will be borne by oneself. This is not a mandatory requirement, just a reminder and warning. + > 虽然看起来很蠢,但是可以用! > It looks stupid, but it works! ## 特性 Features 有以下 We have: - 登录、注册 Login and registration +- 多设备登录 Multi device login - 成绩上传 Score upload - PTT - 排名 Rank @@ -37,6 +44,7 @@ This is a small local Arcaea server based on Python and Flask, which can simulat 可能有问题 There may be problems: - Recent 30 - 一些歌曲的解锁 Some songs' unlocking +- 同设备多共存登录 Multiple app logins on the same device ## 说明 Statement 只是很有趣,用处探索中。 @@ -55,13 +63,17 @@ 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. -### Version 2.1 -- 适用于Arcaea 3.5.0版本 For Arcaea 3.5.0 +### Version 2.2 +- 适用于Arcaea 3.5.1版本 For Arcaea 3.5.1 - 更新了歌曲数据库 Update the song database. -- 新搭档**阿莱乌斯**、**希尔**、**伊莎贝尔**已解锁 Unlock the new characters **Areus**, **Seele** and **Isabelle**. -- 源韵强化机制修改,现在源点会正常扣去 The mechanism of Memory Boost has been modified. Now the memories will be decreased normally. +- 新增多设备登录 Add multi device login. +- 修改了配置文件结构 The configuration file structure has been modified. - 优化了代码结构 Optimize the code structure. -- 修复了一些Bug Fix some bugs. +- 修复了一堆Bug Fix many bugs. + +> 提醒:本次更新需重新登录 +> +> Tip: You need to log in Arcaea again in this update. ## 运行环境与依赖 Running environment and requirements diff --git a/latest version/database/arcaea_database.db b/latest version/database/arcaea_database.db index 2c4a22c..b8b1289 100644 Binary files a/latest version/database/arcaea_database.db and b/latest version/database/arcaea_database.db differ diff --git a/latest version/database/arcsong.db b/latest version/database/arcsong.db index 9ad6e72..ca04541 100644 Binary files a/latest version/database/arcsong.db and b/latest version/database/arcsong.db differ diff --git a/latest version/server/arcscore.py b/latest version/server/arcscore.py index 9dcbfaf..2f53e41 100644 --- a/latest version/server/arcscore.py +++ b/latest version/server/arcscore.py @@ -130,8 +130,6 @@ def arc_score_me(user_id, song_id, difficulty, limit=20): x = c.fetchone() myrank = int(x[0]) + 1 if myrank <= 4: # 排名在前4 - conn.commit() - conn.close() return arc_score_top(song_id, difficulty, limit) elif myrank >= 5 and myrank <= 9999 - limit + 4: # 万名内,前面有4个人 c.execute('''select user_id from best_score where song_id = :song_id and difficulty = :difficulty order by score DESC, time_played DESC limit :limit offset :offset''', { diff --git a/latest version/server/auth.py b/latest version/server/auth.py index 80225d9..df1069d 100644 --- a/latest version/server/auth.py +++ b/latest version/server/auth.py @@ -37,14 +37,17 @@ def arc_login(name: str, password: str, device_id: str): # 登录判断 device_list.append(i[0]) else: device_list.append('') - if device_id in device_list: - c.execute('''delete from login where login_device=:a''', { - 'a': device_id}) - should_delete_num = len( - device_list) - Config.LOGIN_DEVICE_NUMBER_LIMIT - else: - should_delete_num = len( - device_list) + 1 - Config.LOGIN_DEVICE_NUMBER_LIMIT + + should_delete_num = len( + device_list) + 1 - Config.LOGIN_DEVICE_NUMBER_LIMIT + + if not Config.ALLOW_LOGIN_SAME_DEVICE: + if device_id in device_list: # 对相同设备进行删除 + c.execute('''delete from login where login_device=:a''', { + 'a': device_id}) + should_delete_num = len( + device_list) + 1 - device_list.count(device_id) - Config.LOGIN_DEVICE_NUMBER_LIMIT + if should_delete_num >= 1: # 删掉多余token c.execute('''delete from login where rowid in (select rowid from login where user_id=:user_id limit :a);''', {'user_id': user_id, 'a': int(should_delete_num)}) diff --git a/latest version/server/info.py b/latest version/server/info.py index 0146319..c459334 100644 --- a/latest version/server/info.py +++ b/latest version/server/info.py @@ -197,7 +197,7 @@ def get_value_0(c, user_id): "max_stamina_ts": 1586274871917, "stamina": 12, "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", "purpleverse", "moonheart3", "glow"], + "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", "moonheart3", "glow", "enchantedlove", "take"], "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), # ["vs", "extend", "dynamix", "prelude", "core", "yugamu", "omatsuri", "zettai", "mirai", "shiawase", "chunithm", "nijuusei", "groovecoaster", "rei", "tonesphere", "lanota"] diff --git a/latest version/setting.py b/latest version/setting.py index 1188931..daed737 100644 --- a/latest version/setting.py +++ b/latest version/setting.py @@ -8,7 +8,7 @@ class Config(): 主机的地址和端口号 Host and port of your server ''' - HOST = '192.168.1.113' + HOST = '192.168.1.101' PORT = '80' ''' -------------------- @@ -58,5 +58,10 @@ class Config(): ''' LOGIN_DEVICE_NUMBER_LIMIT = 1 ''' + 是否允许同设备多应用共存登录 + If multiple applications on the same device to log in is allowed + ''' + ALLOW_LOGIN_SAME_DEVICE = False + ''' -------------------- ''' diff --git a/latest version/web/index.py b/latest version/web/index.py index 9925cca..a49e0b0 100644 --- a/latest version/web/index.py +++ b/latest version/web/index.py @@ -380,7 +380,7 @@ def all_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', - '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', 'frags_ongeki', 'gauge_areus', 'gauge_seele', 'gauge_isabelle'] + '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', 'frags_ongeki', 'gauge_areus', 'gauge_seele', 'gauge_isabelle', 'gauge_exhaustion'] return render_template('web/changechar.html', skill_ids=skill_ids)