namespace ET.Server { [MessageSessionHandler(SceneType.Gate)] public class C2G_HeroSkillUpHandler : RpcMessageHandler { protected override async ETTask OnRun(Session session, C2G_HeroSkillUp request, R2C_HeroSkillUp response) { Player player = session.GetComponent()?.Player; HeroComponent heroComp = player?.GetComponent(); Hero hero = heroComp?.GetHero(request.heroId); if (hero == null) { response.Error = ErrorCode.ERR_HERO_NOT_FOUND; response.Message = "Hero not found"; return; } int idx = request.skillIndex; if (!HeroService.TrySkillUp(player, hero, idx, 1, 100, out string reason)) { response.Error = reason switch { "item_not_enough" => ErrorCode.ERR_BAG_ITEM_NOT_ENOUGH, _ => ErrorCode.ERR_HERO_SKILL_MAX }; response.Message = reason; return; } response.hero = HeroMapper.ToProto(hero); HeroNoticeHelper.NotifyHeroUpdate(session, hero); await ETTask.CompletedTask; } } }