zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Server/Hotfix/Game/Handler/Battle/Common/C2M_StartBattleIdleFightHan...

68 lines
2.4 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using Cal.DataTable;
using System;
namespace ET
{
[ActorMessageHandler]
public class C2M_StartBattleIdleFightHandler : AMActorLocationRpcHandler<Unit, C2M_StartBattleIdleFight, M2C_StartBattleIdleFight>
{
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<PlayerData>().IsBattleIdle)
{
response.Message = "正在战斗挂机中!";
reply();
return;
}
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
if (team.TeamState == TeamState.Fight)
{
response.Message = "战斗中!";
reply();
return;
}
var teamList = team.GetUnits();
UnitScene unitScene = unit.GetComponent<UnitScene>();
int sceneId = unitScene.MapId / 100;
if (sceneId != Sys_SceneId.Scene_MainCity)
{
response.Message = "在城镇中才能开始战斗挂机!";
reply();
return;
}
int targetSceneId = request.SceneId + 10010;
foreach (var u in teamList)
{
if (!u.GetComponent<PlayerData>().CanEnterMianStory(targetSceneId - 1))
{
response.Message = "队伍中至少有一人没通过这一章节!";
reply();
return;
}
}
await Game.EventSystem.Publish(new EventType.ChangeMap { unit = unit, mapId = Sys_SceneId.Scene_BattleIdle*100+1 });
foreach (var u in teamList)
{
u.GetComponent<PlayerData>().IsBattleIdle = true;
}
//!创建自动战斗组件
BattleIdleMap.Instance.Create(unit.TeamLeaderId,targetSceneId);
reply();
await ETTask.CompletedTask;
}
catch (Exception e)
{
Log.Error(e);
}
}
}
}