138 lines
5.4 KiB
C#
138 lines
5.4 KiB
C#
|
using System;
|
|||
|
using System.Net;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using Cal.DataTable;
|
|||
|
|
|||
|
namespace ET
|
|||
|
{
|
|||
|
[ActorMessageHandler]
|
|||
|
public class C2M_ClickMapUnitHandler: AMActorLocationRpcHandler<Unit, C2M_ClickMapUnit, M2C_ClickMapUnit>
|
|||
|
{
|
|||
|
protected override async ETTask Run(Unit unit, C2M_ClickMapUnit request, M2C_ClickMapUnit response, Action reply)
|
|||
|
{
|
|||
|
if (!unit.IsTeamLeader)
|
|||
|
{
|
|||
|
response.Message = "你不是队长!";
|
|||
|
reply();
|
|||
|
return;
|
|||
|
}if (unit.teamState == TeamState.Fight)
|
|||
|
{
|
|||
|
response.Message = "战斗中...";
|
|||
|
reply();
|
|||
|
return;
|
|||
|
}
|
|||
|
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
|
|||
|
var type = (MapMonsterType) request.type;
|
|||
|
if (!monsterComponent.TryGet(type, out var monster) || monster.Id != request.Id)
|
|||
|
{
|
|||
|
response.Message = "系统错误,怪消失了";
|
|||
|
reply();
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
string strRet = null;
|
|||
|
switch (type)
|
|||
|
{
|
|||
|
case MapMonsterType.MainStory:
|
|||
|
break;
|
|||
|
case MapMonsterType.Trial:
|
|||
|
break;
|
|||
|
case MapMonsterType.ManulEquip:
|
|||
|
strRet = await StartManulEquipBattle(unit, monster);
|
|||
|
break;
|
|||
|
case MapMonsterType.MapCoin:
|
|||
|
break;
|
|||
|
case MapMonsterType.SpaceTravel:
|
|||
|
strRet = await StartSpaceTravelBattle(unit, monster);
|
|||
|
break;
|
|||
|
default:
|
|||
|
throw new ArgumentOutOfRangeException();
|
|||
|
}
|
|||
|
|
|||
|
if (strRet != null)
|
|||
|
{
|
|||
|
response.Message = strRet;
|
|||
|
reply();
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
monsterComponent.Remove(type);
|
|||
|
reply();
|
|||
|
await ETTask.CompletedTask;
|
|||
|
}
|
|||
|
|
|||
|
private async ETTask<string> StartManulEquipBattle(Unit unit, Unit monster)
|
|||
|
{
|
|||
|
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
|
|||
|
if (team != null)
|
|||
|
{
|
|||
|
if (!AppConfig.inst.isTest)
|
|||
|
if (team.MemberCount < 3)
|
|||
|
{
|
|||
|
return "至少3人才能挑战!";
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (team.TeamState == TeamState.Fight)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】多次进行手工副本战斗");
|
|||
|
return"系统错误";
|
|||
|
}
|
|||
|
|
|||
|
UnitScene unitScene = unit.GetComponent<UnitScene>();
|
|||
|
UnitSceneType unitSceneType = MapHelper.GetMapType(unitScene.MapId / 100);
|
|||
|
if (unitSceneType != UnitSceneType.ManulEquip)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】场景{unitScene.MapId / 100}错误");
|
|||
|
return"系统错误";
|
|||
|
}
|
|||
|
|
|||
|
long configId = monster.GetComponent<ConfigIdComponent>().configId;
|
|||
|
ManulEquipMonsterConfig config = ManulEquipMonsterConfigCategory.Instance.Get(configId);
|
|||
|
if ((unitScene.Position -monster.Position).sqrMagnitude > MoveHelper.AtkDis)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】位置{unitScene.Position}错误");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
|
|||
|
// ManulEquipMap.instance.DestoryUnit(unit);
|
|||
|
CopyBattle battle = BattleMgrCompnent.Instance.CreateBattle(team);
|
|||
|
MonsterFactoryHelper.ManulEquipGenerate(battle, config);
|
|||
|
battle.Init(battle.team, battle.targetTeam, CopyConfigId.ManulEquipBattle, config.Id);
|
|||
|
|
|||
|
return null;
|
|||
|
}
|
|||
|
|
|||
|
private async ETTask<string> StartSpaceTravelBattle(Unit unit, Unit monster)
|
|||
|
{
|
|||
|
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
|
|||
|
|
|||
|
if (team.TeamState == TeamState.Fight)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】多次进行时空旅行战斗");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
|
|||
|
UnitScene unitScene = unit.GetComponent<UnitScene>();
|
|||
|
UnitSceneType unitSceneType = MapHelper.GetMapType(unitScene.sceneId);
|
|||
|
if (unitSceneType != UnitSceneType.SpaceTravel)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】场景{unitScene.MapId / 100}错误");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
|
|||
|
long configId = monster.GetComponent<ConfigIdComponent>().configId;
|
|||
|
SpaceTravelConfig spaceTravelConfig = SpaceTravelConfigCategory.Instance.Get(configId);
|
|||
|
if ((unitScene.Position - monster.Position).sqrMagnitude > MoveHelper.AtkDis)
|
|||
|
{
|
|||
|
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】位置{unitScene.Position}错误");
|
|||
|
return "系统错误";
|
|||
|
}
|
|||
|
|
|||
|
CopyBattle battle = BattleMgrCompnent.Instance.CreateBattle(team);
|
|||
|
MonsterFactoryHelper.SpaceTravelGenerate(battle, spaceTravelConfig);
|
|||
|
battle.Init(team, battle.targetTeam, CopyConfigId.SpaceTravelBattle, spaceTravelConfig.Id);
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|