import betterproto from game_server.net.session import PlayerSession from rail_proto.lib import ( DressAvatarCsReq, DressAvatarScRsp ) async def handle(session: PlayerSession, msg: DressAvatarCsReq) -> betterproto.Message: equipment = session.player.inventory_manager.get(msg.equipment_unique_id) target_avatar = session.player.avatar_mananger.get(msg.avatar_id) if not equipment or not target_avatar: return DressAvatarScRsp() previous_avatar = session.player.avatar_mananger.get(equipment.equip_avatar) if previous_avatar: if previous_avatar.lightcone_id > 0 and target_avatar.lightcone_id > 0: target_equipment = session.player.inventory_manager.get(target_avatar.lightcone_id) target_avatar.lightcone_id, previous_avatar.lightcone_id = previous_avatar.lightcone_id, target_avatar.lightcone_id target_equipment.equip_avatar, equipment.equip_avatar = previous_avatar.avatar_id, target_avatar.avatar_id #target_equipment.save_item() else: previous_avatar.lightcone_id = 0 equipment.equip_avatar = target_avatar.avatar_id target_avatar.lightcone_id = equipment.unique_id #previous_avatar.save_avatar() else: if target_avatar.lightcone_id > 0: previous_equipment = session.player.inventory_manager.get(target_avatar.lightcone_id) previous_equipment.equip_avatar = 0 #previous_equipment.save_item() equipment.equip_avatar = target_avatar.avatar_id target_avatar.lightcone_id = equipment.unique_id #equipment.save_item() #target_avatar.save_avatar() await session.notify(session.player.PlayerSyncProto()) return DressAvatarScRsp(retcode=0)