using Cal.DataTable; using System; using System.Collections.Generic; using System.Text; namespace ET { public class BackHomeEvent : AEvent { public override async ETTask Run(EventType.BackMainCity args) { var unit = args.unit; if (!unit.IsTeamLeader) { MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "您不是队长,无法回城" }); return; } bool isInCity = false; if (unit.GetComponent().MapId / 100 == Sys_SceneId.Scene_MainCity) isInCity = true; var targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(Sys_SceneId.Scene_MainCity); var position = targetSceneInfo.PlayerPosArr[0]; Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team == null) { Log.Error(" team == null"); return; } if (!args.isForce ) { var data = unit.GetComponent(); if(team.TeamState == TeamState.Fight || data.IsBattleIdle) { MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "战斗中,无法回城" }); return; } } team.ChangeState(TeamState.Transfer); using var listComponent = ListComponent.Create(); var teamList = team.GetUnits(); foreach (var item in teamList) { listComponent.List.Add(Transfer(item, new UnityEngine.Vector2(position.PlayerPos_x, position.PlayerPos_y), Sys_SceneId.Scene_MainCity * 100 + 1,isInCity)); } static async ETTask Transfer(Unit item, UnityEngine.Vector2 pos, int mapId,bool isInCity) { try { item.IsTransfer = true; //!停止移动 item.Stop(); await TimerComponent.Instance.WaitAsync(100); UnitScene unitScene = item.GetComponent(); unitScene.Position = pos; if (isInCity) return; await MapSceneComponent.Instance.ChangeMap(unitScene, mapId); } catch (Exception e) { Log.Error(e); } } await ETTaskHelper.WaitAll(listComponent.List); await TimerComponent.Instance.WaitAsync(1000); team.ChangeState(TeamState.None); foreach (var u in teamList) { u.IsTransfer = false; } TeamHelper.SendTeamMember(team); } } }