using Cal.DataTable; using System; namespace ET { [ActorMessageHandler] public class C2M_StartTrialCopyFightHandler : AMActorLocationRpcHandler { protected override async ETTask Run(Unit unit, C2M_StartTrialCopyFight request, M2C_StartTrialCopyFight response, Action reply) { try { //!排除队伍 Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team != null) { if (team.MemberCount > 1) { response.Message = "试炼之地只能单人挑战!"; reply(); return; } } if (team.TeamState == TeamState.Fight) { Log.Error($"*【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】多次进行试炼战斗"); response.Message = "系统错误"; reply(); return; } var unitScene = unit.GetComponent(); var mapType= MapSceneComponent.Instance.GetUnitSceneType(unitScene.MapId / 100); if (mapType != UnitSceneType.Trial) { Log.Error($"*【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】场景{unitScene.MapId / 100}错误"); response.Message = "系统错误"; reply(); return; } var trialCopy = TrialCopyMap.Instance.GetTrialCopyInfo(unitScene.MapId); if (trialCopy == null) { Log.Error($"*【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】场景{unitScene.MapId}错误"); response.Message = "系统错误"; reply(); return; } if ((unitScene.Position - new UnityEngine.Vector2(trialCopy.Pos_X, trialCopy.Pos_Y)).sqrMagnitude > MoveHelper.AtkDis) { Log.Error($"*【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】位置{unitScene.Position}错误"); response.Message = "系统错误"; reply(); return; } var battle = BattleMgrCompnent.Instance.CreateBattle(team); battle.Init(trialCopy); response.TrialCopyId = (int)trialCopy.Id; reply(); await ETTask.CompletedTask; } catch (Exception e) { Log.Error(e); } } } }