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

248 lines
11 KiB
C#
Executable File

using Cal.DataTable;
using ET.EventType;
using System;
using System.Collections.Generic;
using Cal;
namespace ET
{
public class AfterChangeMapEvent: AEvent<AfterChangeMap>
{
public override async ETTask Run(AfterChangeMap args)
{
Unit unit = args.unit;
int mapId = args.mapId;
//竞技场
PvpMap.inatance.Remove(unit);
try
{
UnitScene unitScene = unit.GetComponent<UnitScene>();
//!发送切换地图
MessageHelper.SendActor(unit, new M2C_ChangeMap() { X = unitScene.Position.x, Y = unitScene.Position.y, MapId = unitScene.MapId });
UnitSceneType unitSceneType = MapHelper.GetMapType(unitScene.sceneId);
await TimerComponent.Instance.WaitAsync(500);
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Clear();
if (unit.IsTeamLeader)
{
CheckMapCoinMonster(unit, mapId);
}
if (unitScene.sceneId == Sys_SceneId.Scene_MainCity)
{
ModifierContainerComponent modifierContainerComponent = unit.GetComponent<ModifierContainerComponent>();
modifierContainerComponent?.RemoveState(ModifierStateType.);
}
try
{
if (unitSceneType is UnitSceneType.MainStory or UnitSceneType.Beach)
{
MainStoryMap.Instance.Init(unit, unitScene.MapId);
}
else if (unitSceneType == UnitSceneType.Trial)
{
TrialCopyMap.Instance.InitTrailCopyMap(unit, unitScene.MapId);
}
else if (unitSceneType == UnitSceneType.SpaceTravel)
{
GenerateSpaceTravelMapMonster(unit, unitScene);
}
else if (unitSceneType == UnitSceneType.ManulEquip)
{
GenerateManulEquipMapMonster(unit, unitScene);
}
else if (unitSceneType == UnitSceneType.StarSoulCopy)
{
GenerateStarSoulCopyMapMonster(unit, unitScene);
}
else if (unitSceneType == UnitSceneType.JourneyOfDeath)
{
GenerateJourneyOfDeathCopyMapMonster(unit, unitScene);
}
else
{
await TimerComponent.Instance.WaitAsync(500);
StartupTransPoint(unit, unitScene.MapId);
}
}
catch (Exception e)
{
Log.Error(e);
}
}
catch (Exception e)
{
Log.Error(e);
}
static void StartupTransPoint(Unit unit, int mapId)
{
MessageHelper.SendActor(unit, new M2C_StartupTransPoint() { MapId = mapId });
}
await ETTask.CompletedTask;
}
private void GenerateManulEquipMapMonster(Unit unit, UnitScene _unitScene)
{
Unit monster = EntityFactory.CreateWithParent<Unit, UnitType>(unit.DomainScene(), UnitType.Monster);
int layer = _unitScene.layer;
MapMonsterConfig mapMonsterConfig = MapMonsterConfigCategory.Instance.GetManulEquipMapMonster(layer);
long configId = 0;
int difficulty = _unitScene.sceneId - Sys_SceneId.Scene_ManulEquip1 + 1;
if (difficulty <= 0)
{
Log.Error($"scene is error where {unit.Id.GetPlayerFormatName()} id = {_unitScene.MapId}");
return;
}
int id = difficulty * 1000 + layer * 100 + 1;
ManulEquipMonsterConfig manulEquipMonsterConfig = ManulEquipMonsterConfigCategory.Instance.Get(id);
if (manulEquipMonsterConfig == null)
{
Log.Error($"config == null when difficult = {difficulty} index = {layer}");
return;
}
configId = manulEquipMonsterConfig.Id;
monster.AddComponent<ConfigIdComponent>().configId = configId;
UnitScene unitScene = monster.AddComponent<UnitScene>();
unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y);
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Add(MapMonsterType.ManulEquip, monster);
Game.EventSystem.Publish(new ET.EventType.OnCreateUnit
{
actor = unit,
monsterId = monster.Id,
pos = unitScene.Position,
configId = (int) mapMonsterConfig.Id,
monsterType = MapMonsterType.ManulEquip
}).Coroutine();
}
private void GenerateSpaceTravelMapMonster(Unit unit, UnitScene _unitScene)
{
Unit monster = EntityFactory.CreateWithParent<Unit, UnitType>(unit.DomainScene(), UnitType.Monster);
MapMonsterConfig mapMonsterConfig = MapMonsterConfigCategory.Instance.GetSpaceTravelMapMonster(_unitScene.layer);
long configId = 0;
int difficult = _unitScene.sceneId - Sys_SceneId.Scene_SpaceTravel1 + 1;
if (difficult <= 0)
{
Log.Error($"scene is error where {unit.Id.GetPlayerFormatName()} id = {_unitScene.MapId}");
return;
}
SpaceTravelConfig spaceTravelConfig = SpaceTravelConfigCategory.Instance.GetByDifficultAndIndex(difficult, _unitScene.layer);
if (spaceTravelConfig == null)
{
Log.Error($"config == null when difficult = {difficult} index = {_unitScene.layer}");
return;
}
configId = spaceTravelConfig.Id;
monster.AddComponent<ConfigIdComponent>().configId = configId;
UnitScene unitScene = monster.AddComponent<UnitScene>();
unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y);
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Add(MapMonsterType.SpaceTravel, monster);
Game.EventSystem.Publish(new ET.EventType.OnCreateUnit
{
actor = unit,
monsterId = monster.Id,
pos = unitScene.Position,
configId = (int) mapMonsterConfig.Id,
monsterType = MapMonsterType.SpaceTravel
}).Coroutine();
}
private void GenerateStarSoulCopyMapMonster(Unit unit, UnitScene _unitScene)
{
Unit monster = EntityFactory.CreateWithParent<Unit, UnitType>(unit.DomainScene(), UnitType.Monster);
MapMonsterConfig mapMonsterConfig = MapMonsterConfigCategory.Instance.GetStarSoulCopyMapMonster(_unitScene.layer);
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
var leader = team.GetLeader();
StarSoulCopyConfigComponent soulCopyConfigComponent = leader.GetComponent<StarSoulCopyConfigComponent>();
if (soulCopyConfigComponent == null)
return;
long configId = 0;
StarSoulCopyConfig soulCopyConfig = StarSoulCopyConfigCategory.Instance.GetByTypeAndDifficultyAndIndex(soulCopyConfigComponent.type,
soulCopyConfigComponent.difficulty, (byte) _unitScene.layer);
if (soulCopyConfig == null)
{
Log.Error(
$"config == null when type = {soulCopyConfigComponent.type} difficult = {soulCopyConfigComponent.difficulty} index = {_unitScene.layer}");
return;
}
configId = soulCopyConfig.Id;
monster.AddComponent<ConfigIdComponent>().configId = configId;
UnitScene unitScene = monster.AddComponent<UnitScene>();
unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y);
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Add(MapMonsterType.StarSoulCopy, monster);
Game.EventSystem.Publish(new ET.EventType.OnCreateUnit
{
actor = unit,
monsterId = monster.Id,
pos = unitScene.Position,
configId = (int) mapMonsterConfig.Id,
monsterType = MapMonsterType.StarSoulCopy
}).Coroutine();
}
private void GenerateJourneyOfDeathCopyMapMonster(Unit unit, UnitScene _unitScene)
{
Unit monster = EntityFactory.CreateWithParent<Unit, UnitType>(unit.DomainScene(), UnitType.Monster);
MapMonsterConfig mapMonsterConfig = MapMonsterConfigCategory.Instance.GetJourneyOfDeathCopyMapMonster(_unitScene.layer);
Team team = TeamComponent.Instance.Get(unit.TeamLeaderId);
var leader = team.GetLeader();
JourneyOfDeathCopyConfigComponent soulCopyConfigComponent = leader.GetComponent<JourneyOfDeathCopyConfigComponent>();
if (soulCopyConfigComponent == null)
return;
long configId = 0;
JourneyOfDeathCopyConfig soulCopyConfig = JourneyOfDeathCopyConfigCategory.Instance.GetByTypeAndDifficultyAndIndex(
soulCopyConfigComponent.difficulty, (byte) _unitScene.layer);
if (soulCopyConfig == null)
{
Log.Error(
$"config == null when difficult = {soulCopyConfigComponent.difficulty} index = {_unitScene.layer}");
return;
}
configId = soulCopyConfig.Id;
monster.AddComponent<ConfigIdComponent>().configId = configId;
UnitScene unitScene = monster.AddComponent<UnitScene>();
unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y);
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Add(MapMonsterType.JourneyOfDeathCopy, monster);
Game.EventSystem.Publish(new ET.EventType.OnCreateUnit
{
actor = unit,
monsterId = monster.Id,
pos = unitScene.Position,
configId = (int) mapMonsterConfig.Id,
monsterType = MapMonsterType.JourneyOfDeathCopy
}).Coroutine();
}
private void CheckMapCoinMonster(Unit unit, int mapId)
{
Unit monster = MapCoinComponent.instance.GetCoinMonster(mapId);
if (monster)
{
Game.EventSystem.Publish(new ET.EventType.OnCreateUnit
{
actor = unit,
monsterId = monster.Id,
pos = monster.GetComponent<UnitScene>().Position,
configId = (int) monster.GetComponent<ConfigIdComponent>().configId,
monsterType = MapMonsterType.MapCoin
}).Coroutine();
}
}
}
}