import betterproto from game_server.net.session import PlayerSession from rail_proto.lib import ( PVEBattleResultCsReq, PVEBattleResultScRsp, BattleEndStatus, SceneGroupRefreshScNotify, GroupRefreshInfo, SceneGroupRefreshType, SceneEntityRefreshInfo ) async def handle(session: PlayerSession, msg: PVEBattleResultCsReq) -> betterproto.Message: if msg.end_status == BattleEndStatus.BATTLE_END_WIN.value: if session.player.battle_manager: await session.notify( SceneGroupRefreshScNotify( group_refresh_list=[ GroupRefreshInfo( refresh_type=SceneGroupRefreshType.SCENE_GROUP_REFRESH_TYPE_LOADED.value, refresh_entity=[ SceneEntityRefreshInfo( delete_entity=monster.entity_id ) ], group_id=monster.group_id ) for monster in session.player.battle_manager.entity_monster ], floor_id=session.player.data.floor_id ) ) for monster in session.player.battle_manager.entity_monster: session.player.scene_manager.entities.pop(monster.entity_id, None) session.player.battle_manager = None return PVEBattleResultScRsp( retcode=0, end_status=msg.end_status, battle_id=msg.battle_id )