From 27567b8a5c9b48259fb990718a0908d36996b239 Mon Sep 17 00:00:00 2001 From: Lost-MSth Date: Sat, 14 Sep 2024 12:11:54 +0800 Subject: [PATCH] [Bug fix] Link Play kicked out & last song scores - Fix a bug that players will be kicked out when they haven't downloaded the chart before. - Fix a bug that the last song's scores will disappear when all players return to room. - For Arcaea 5.10.2 --- latest version/core/constant.py | 4 ++-- latest version/database/init/singles.json | 18 ++++++++++++++++++ latest version/linkplay_server/udp_class.py | 7 +++---- latest version/linkplay_server/udp_parser.py | 17 +++++++++-------- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/latest version/core/constant.py b/latest version/core/constant.py index 69f6620..ef7a39d 100644 --- a/latest version/core/constant.py +++ b/latest version/core/constant.py @@ -1,7 +1,7 @@ from .config_manager import Config -ARCAEA_SERVER_VERSION = 'v2.11.3.17' -ARCAEA_DATABASE_VERSION = 'v2.11.3.17' +ARCAEA_SERVER_VERSION = 'v2.11.3.18' +ARCAEA_DATABASE_VERSION = 'v2.11.3.18' ARCAEA_LOG_DATBASE_VERSION = 'v1.1' diff --git a/latest version/database/init/singles.json b/latest version/database/init/singles.json index 8c1c4eb..9c72f8e 100644 --- a/latest version/database/init/singles.json +++ b/latest version/database/init/singles.json @@ -1882,5 +1882,23 @@ ], "orig_price": 100, "price": 100 + }, + { + "name": "rainofconflict", + "items": [ + { + "type": "single", + "id": "rainofconflict", + "is_available": true + }, + { + "type": "core", + "amount": 1, + "id": "core_generic", + "is_available": true + } + ], + "orig_price": 100, + "price": 100 } ] \ No newline at end of file diff --git a/latest version/linkplay_server/udp_class.py b/latest version/linkplay_server/udp_class.py index 5afe482..c6266d8 100644 --- a/latest version/linkplay_server/udp_class.py +++ b/latest version/linkplay_server/udp_class.py @@ -101,7 +101,7 @@ class Player: self.rating_ptt: int = 0 # 2 bytes self.is_hide_rating: int = 0 # 1 byte - self.switch_4: int = 0 # 1 byte 只能确定有 00 和 01 + self.is_staff: int = 0 # 1 byte @property def name(self) -> str: @@ -162,7 +162,7 @@ class Player: re.append(self.switch_2) re.extend(b(self.rating_ptt, 2)) re.append(self.is_hide_rating) - re.append(self.switch_4) + re.append(self.is_staff) return bytes(re) @@ -356,7 +356,6 @@ class Room: self.song_idx = 0xffff self.voting_clear() - print(self.player_num) if self.state in (1, 2) and self.timed_mode and self.player_num <= 1: self.next_state_timestamp = 0 self.countdown = 0xffffffff @@ -382,7 +381,7 @@ class Room: def is_finish(self): # 是否全部进入结算 - if self.state == 8: + if self.state != 7: return False for i in self.players: diff --git a/latest version/linkplay_server/udp_parser.py b/latest version/linkplay_server/udp_parser.py index 95224b3..8b8e81b 100644 --- a/latest version/linkplay_server/udp_parser.py +++ b/latest version/linkplay_server/udp_parser.py @@ -179,7 +179,7 @@ class CommandParser: flag_12 = True player.online = 1 - if self.room.state in (1, 2) and player.player_state == 8: + if self.room.timed_mode and self.room.state in (1, 2) and player.player_state == 8: # 还在结算给踢了 # 冗余,为了保险 self.room.delete_player(self.player_index) @@ -248,12 +248,13 @@ class CommandParser: logging.info(f'Room `{self.room.room_code}` starts playing') if self.room.state == 4: - if player.download_percent != 0xff: - # 有人没下载完把他踢了! - self.room.delete_player(self.player_index) - self.room.command_queue.append( - self.s.command_12(self.player_index)) - self.room.command_queue.append(self.s.command_14()) + # 这好像会误判 + # if player.download_percent < 99: + # # 有人没下载完把他踢了! + # self.room.delete_player(self.player_index) + # self.room.command_queue.append( + # self.s.command_12(self.player_index)) + # self.room.command_queue.append(self.s.command_14()) if self.room.should_next_state: self.room.state = 5 @@ -296,7 +297,7 @@ class CommandParser: self.room.state = 1 self.room.song_idx = 0xffff - if self.room.state in (1, 2) and player.player_state == 8: + if self.room.timed_mode and self.room.state in (1, 2) and player.player_state == 8: # 还在结算给踢了 self.room.delete_player(self.player_index) self.room.command_queue.append(