namespace ET.Server { [MessageSessionHandler(SceneType.Gate)] public class C2G_SummonHeroHandler : RpcMessageHandler { protected override async ETTask OnRun(Session session, C2G_SummonHero request, R2C_SummonHero response) { Player player = session.GetComponent()?.Player; if (player == null) { response.Error = ErrorCode.ERR_RpcFail; response.Message = "Player not found"; return; } BagComponent bag = player.GetComponent() ?? player.AddComponent(); var costs = new System.Collections.Generic.List { new() { ItemId = request.configId + 1000, Count = 30 } }; if (!bag.RemoveItems(costs)) { response.Error = ErrorCode.ERR_HERO_FRAGMENT_NOT_ENOUGH; response.Message = "Fragment not enough"; return; } Hero hero = HeroService.SummonHero(player, request.configId); response.hero = HeroMapper.ToProto(hero); HeroNoticeHelper.NotifyHeroUpdate(session, hero); await ETTask.CompletedTask; } } }