Files
neonsr/game_server/handlers/DressAvatarCsReq.py
2025-04-17 20:13:39 +08:00

34 lines
1.5 KiB
Python

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_manager.get(msg.avatar_id)
if not equipment or not target_avatar:
return DressAvatarScRsp()
previous_avatar = session.player.avatar_manager.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
else:
previous_avatar.lightcone_id = 0
equipment.equip_avatar = target_avatar.avatar_id
target_avatar.lightcone_id = equipment.unique_id
else:
if target_avatar.lightcone_id > 0:
previous_equipment = session.player.inventory_manager.get(target_avatar.lightcone_id)
previous_equipment.equip_avatar = 0
equipment.equip_avatar = target_avatar.avatar_id
target_avatar.lightcone_id = equipment.unique_id
session.pending_notify(session.player.PlayerSyncProto())
return DressAvatarScRsp()