using Cal.DataTable; using System; using System.Collections.Generic; using System.Text; namespace ET { public class ChangeMapEvent : AEvent { public override async ETTask Run(EventType.ChangeMap args) { try { Unit unit = args.unit; int mapId = args.mapId; if (!unit.IsTeamLeader) { MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "您不是队长,无法传送" }); return; } UnitScene _unitScene = unit.GetComponent(); Sys_Scene targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(mapId / 100); Sys_Scene.PlayerPos position = targetSceneInfo.PlayerPosArr[0]; Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team == null) { Log.Error(" team == null"); return; } team.ChangeState(TeamState.Transfer); using ListComponent listComponent = ListComponent.Create(); LinkedList teamList = team.GetUnits(); foreach (Unit item in teamList) { listComponent.List.Add( Transfer(item,new UnityEngine.Vector2(position.PlayerPos_x, position.PlayerPos_y),mapId)); } static async ETTask Transfer(Unit item,UnityEngine.Vector2 pos,int mapId) { try { item.IsTransfer = true; UnitScene unitScene = item.GetComponent(); unitScene.enterTime = TimeHelper.ClientNow(); //!停止移动 item.Stop(); await TimerComponent.Instance.WaitAsync(500); unitScene.Position = pos; 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 (Unit u in teamList) { u.IsTransfer = false; } TeamHelper.SendTeamMember(team); } catch (Exception e) { Log.Error(e); } } } }