import betterproto from game_server.net.session import PlayerSession from rail_proto.lib import ( DressRelicAvatarCsReq, DressRelicAvatarScRsp ) async def handle(session: PlayerSession, msg: DressRelicAvatarCsReq) -> betterproto.Message: target_avatar = session.player.avatar_manager.get(msg.avatar_id) if not target_avatar: return DressRelicAvatarScRsp() for relic_data in msg.switch_list: relic = session.player.inventory_manager.get(relic_data.relic_unique_id) if not relic: continue relic_sub_type = str(relic.sub_type) current_relic_id = target_avatar.relic_ids.get(relic_sub_type, 0) previous_avatar = session.player.avatar_manager.get(relic.equip_avatar) if previous_avatar: previous_relic_id = previous_avatar.relic_ids.get(relic_sub_type, 0) if previous_relic_id > 0 and current_relic_id > 0: current_relic = session.player.inventory_manager.get(current_relic_id) previous_relic = session.player.inventory_manager.get(previous_relic_id) if current_relic and previous_relic: previous_avatar.relic_ids[relic_sub_type] = current_relic.unique_id current_relic.equip_avatar = previous_avatar.avatar_id target_avatar.relic_ids[relic_sub_type] = previous_relic.unique_id previous_relic.equip_avatar = target_avatar.avatar_id elif previous_relic_id > 0: previous_relic = session.player.inventory_manager.get(previous_relic_id) if previous_relic: previous_relic.equip_avatar = 0 previous_avatar.relic_ids[relic_sub_type] = 0 elif current_relic_id > 0: current_relic = session.player.inventory_manager.get(current_relic_id) if current_relic: current_relic.equip_avatar = 0 target_avatar.relic_ids[relic_sub_type] = 0 target_avatar.relic_ids[relic_sub_type] = relic.unique_id relic.equip_avatar = target_avatar.avatar_id else: if current_relic_id > 0: current_relic = session.player.inventory_manager.get(current_relic_id) if current_relic: current_relic.equip_avatar = 0 target_avatar.relic_ids[relic_sub_type] = relic.unique_id relic.equip_avatar = target_avatar.avatar_id session.pending_notify(session.player.PlayerSyncProto()) return DressRelicAvatarScRsp()