Files
KianaBH3/game_server/packet/handlers/AvatarSubSkillLevelUpReq.py
2024-11-07 23:25:15 +08:00

61 lines
2.1 KiB
Python

import betterproto
from game_server.net.session import Session
from game_server.game.enum.data_type import DataType
from game_server.resource import ResourceManager
from game_server.resource.configdb.avatar_sub_skill_data import AvatarSubSkillData
from database import mongo
from lib.proto import (
AvatarSubSkillLevelUpReq,
AvatarSubSkillLevelUpRsp,
AvatarSubSkill,
GetAvatarDataReq,
GetEquipmentDataRsp,
Material
)
async def handle(session: Session, msg: AvatarSubSkillLevelUpReq) -> betterproto.Message:
avatar_data = session.player.avatars.get(msg.avatar_id)
if not avatar_data:
return AvatarSubSkillLevelUpRsp(retcode=2)
skill_data = avatar_data.skill_lists.get(msg.skill_id)
if not skill_data:
return AvatarSubSkillLevelUpRsp(retcode=3)
sub_skill_data = ResourceManager.instance().find_by_index(AvatarSubSkillData, msg.sub_skill_id)
if not sub_skill_data:
return AvatarSubSkillLevelUpRsp(retcode=4)
sub_skill = skill_data.sub_skill_lists.get(msg.sub_skill_id)
if not sub_skill:
skill_data.sub_skill_lists[msg.sub_skill_id] = AvatarSubSkill(
sub_skill_id=msg.sub_skill_id,
level=0
)
current_level = skill_data.sub_skill_lists[msg.sub_skill_id].level
new_level = sub_skill_data.maxLv if msg.is_level_up_all else current_level + 1
if new_level > sub_skill_data.maxLv:
return AvatarSubSkillLevelUpRsp(retcode=10)
skill_data.sub_skill_lists[msg.sub_skill_id] = AvatarSubSkill(
sub_skill_id=msg.sub_skill_id,
level=new_level
)
avatar_data.skill_lists[msg.skill_id] = skill_data
await session.process_packet(session.create_packet(GetAvatarDataReq(avatar_id_list=[msg.avatar_id])))
coin = session.player.inventory.material_items.get(100)
if coin:
session.pending_notify(
GetEquipmentDataRsp(
material_list=[Material(id=coin.item_id, num=coin.num)]
)
)
mongo.save(session, DataType.AVATAR, [msg.avatar_id])
return AvatarSubSkillLevelUpRsp(retcode=0)