fix(spectator): fix replay cannot play in stable & cannot spectate others when they are in gameplay
This commit is contained in:
@@ -102,15 +102,15 @@ async def save_replay(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# write frames
|
# write frames
|
||||||
# FIXME: cannot play in stable
|
|
||||||
frame_strs = []
|
frame_strs = []
|
||||||
last_time = 0
|
last_time = 0
|
||||||
for frame in frames:
|
for frame in frames:
|
||||||
|
time = round(frame.time)
|
||||||
frame_strs.append(
|
frame_strs.append(
|
||||||
f"{frame.time - last_time}|{frame.mouse_x or 0.0}"
|
f"{time - last_time}|{frame.mouse_x or 0.0}"
|
||||||
f"|{frame.mouse_y or 0.0}|{frame.button_state}"
|
f"|{frame.mouse_y or 0.0}|{frame.button_state}"
|
||||||
)
|
)
|
||||||
last_time = frame.time
|
last_time = time
|
||||||
frame_strs.append("-12345|0|0|0")
|
frame_strs.append("-12345|0|0|0")
|
||||||
|
|
||||||
compressed = lzma.compress(
|
compressed = lzma.compress(
|
||||||
@@ -324,8 +324,8 @@ class SpectatorHub(Hub[StoreClientState]):
|
|||||||
|
|
||||||
async def StartWatchingUser(self, client: Client, target_id: int) -> None:
|
async def StartWatchingUser(self, client: Client, target_id: int) -> None:
|
||||||
user_id = int(client.connection_id)
|
user_id = int(client.connection_id)
|
||||||
target_store = self.get_or_create_state(client)
|
target_store = self.state.get(target_id)
|
||||||
if target_store.state:
|
if target_store and target_store.state:
|
||||||
await self.call_noblock(
|
await self.call_noblock(
|
||||||
client,
|
client,
|
||||||
"UserBeganPlaying",
|
"UserBeganPlaying",
|
||||||
@@ -352,8 +352,7 @@ class SpectatorHub(Hub[StoreClientState]):
|
|||||||
async def EndWatchingUser(self, client: Client, target_id: int) -> None:
|
async def EndWatchingUser(self, client: Client, target_id: int) -> None:
|
||||||
user_id = int(client.connection_id)
|
user_id = int(client.connection_id)
|
||||||
self.remove_from_group(client, self.group_id(target_id))
|
self.remove_from_group(client, self.group_id(target_id))
|
||||||
store = self.state.get(user_id)
|
store = self.get_or_create_state(client)
|
||||||
if store:
|
store.watched_user.discard(target_id)
|
||||||
store.watched_user.discard(target_id)
|
|
||||||
if (target_client := self.get_client_by_id(str(target_id))) is not None:
|
if (target_client := self.get_client_by_id(str(target_id))) is not None:
|
||||||
await self.call_noblock(target_client, "UserEndedWatching", user_id)
|
await self.call_noblock(target_client, "UserEndedWatching", user_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user