mirror of
https://github.com/MikuLeaks/KianaBH3.git
synced 2025-12-13 21:34:43 +01:00
61 lines
2.1 KiB
Python
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)
|