zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Hotfix/Game/Event/BackHomeEvent.cs

76 lines
2.8 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using Cal.DataTable;
using System;
using System.Collections.Generic;
using System.Text;
namespace ET
{
public class BackHomeEvent : AEvent<EventType.BackMainCity>
{
public override async ETTask Run(EventType.BackMainCity args)
{
2021-04-11 19:50:39 +08:00
Unit unit = args.unit;
2021-04-08 20:09:59 +08:00
if (!unit.IsTeamLeader)
{
MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "您不是队长,无法回城" });
return;
}
bool isInCity = false;
if (unit.GetComponent<UnitScene>().MapId / 100 == Sys_SceneId.Scene_MainCity) isInCity = true;
2021-04-11 19:50:39 +08:00
Sys_Scene targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(Sys_SceneId.Scene_MainCity);
Sys_Scene.PlayerPos position = targetSceneInfo.PlayerPosArr[0];
2021-04-08 20:09:59 +08:00
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
if (team == null)
{
Log.Error(" team == null");
return;
}
if (!args.isForce )
{
2021-04-11 19:50:39 +08:00
PlayerData data = unit.GetComponent<PlayerData>();
2021-04-08 20:09:59 +08:00
if(team.TeamState == TeamState.Fight || data.IsBattleIdle)
{
MessageHelper.SendActor(unit, new M2C_SendTip() { Message = "战斗中,无法回城" });
return;
}
}
team.ChangeState(TeamState.Transfer);
2021-04-11 19:50:39 +08:00
using ListComponent<ETTask> listComponent = ListComponent<ETTask>.Create();
LinkedList<Unit> teamList = team.GetUnits();
foreach (Unit item in teamList)
2021-04-08 20:09:59 +08:00
{
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>();
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);
2021-04-11 19:50:39 +08:00
foreach (Unit u in teamList)
2021-04-08 20:09:59 +08:00
{
u.IsTransfer = false;
}
TeamHelper.SendTeamMember(team);
}
}
}