using Cal.DataTable; using System; using System.Collections.Generic; namespace ET { [ActorMessageHandler] public class C2M_StartBattleIdleFightHandler : AMActorLocationRpcHandler { protected override async ETTask Run(Unit unit, C2M_StartBattleIdleFight request, M2C_StartBattleIdleFight response, Action reply) { try { if (!unit.IsTeamLeader) { response.Message = "您不是队长!"; reply(); return; } if (unit.GetComponent().IsBattleIdle) { response.Message = "正在战斗挂机中!"; reply(); return; } Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team.TeamState == TeamState.Fight) { response.Message = "战斗中!"; reply(); return; } LinkedList teamList = team.GetUnits(); UnitScene unitScene = unit.GetComponent(); int sceneId = unitScene.MapId / 100; if (sceneId != Sys_SceneId.Scene_MainCity) { response.Message = "在城镇中才能开始战斗挂机!"; reply(); return; } int targetSceneId = request.SceneId + 10010; foreach (Unit u in teamList) { if (!u.GetComponent().CanEnterMianStory(targetSceneId - 1)) { response.Message = "队伍中至少有一人没通过这一章节!"; reply(); return; } } await Game.EventSystem.Publish(new EventType.ChangeMap { unit = unit, mapId = Sys_SceneId.Scene_BattleIdle*100+1 }); foreach (Unit u in teamList) { u.GetComponent().IsBattleIdle = true; } //!创建自动战斗组件 BattleIdleMap.Instance.Create(unit.TeamLeaderId,targetSceneId); reply(); await ETTask.CompletedTask; } catch (Exception e) { Log.Error(e); } } } }