CTT/Server/Hotfix/Game/Handler/Map/C2M_ClickMapUnitHandler.cs

193 lines
7.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
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;
case MapMonsterType.StarSoulCopy:
strRet = await StartStarSoulCopyBattle(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>();
if (unitScene.layer != 6)
{
LinkedList<Unit> teamList = team.GetUnits();
foreach (Unit u in teamList)
{
PlayerData data = u.GetComponent<PlayerData>();
if (data == null)
{
Log.Error($"data == null where id = {u?.Id}");
continue;
}
if (data.travelVoucher <= 0)
{
return "您的或者队友的次数不够";
}
}
}
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;
}
private async ETTask<string> StartStarSoulCopyBattle(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.StarSoulCopy)
{
Log.Error($"*【{UserComponent.Instance.Get(unit.Id)?.NickName} ({unit.Id})】场景{unitScene.MapId / 100}错误");
return "系统错误";
}
long configId = monster.GetComponent<ConfigIdComponent>().configId;
StarSoulCopyConfig soulCopyConfig = StarSoulCopyConfigCategory.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.StarSoulGenerate(battle, soulCopyConfig);
battle.Init(team, battle.targetTeam, CopyConfigId.StarSoulBattle, soulCopyConfig.Id);
return null;
}
}
}