CTT/Server/Hotfix/Game/Event/AfterChangeMapEvent.cs

155 lines
6.4 KiB
C#
Raw Normal View History

2021-04-08 20:09:59 +08:00
using Cal.DataTable;
using ET.EventType;
using System;
using System.Collections.Generic;
namespace ET
{
2021-05-01 11:27:41 +08:00
public class AfterChangeMapEvent: AEvent<AfterChangeMap>
2021-04-08 20:09:59 +08:00
{
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 });
2021-05-01 11:27:41 +08:00
UnitSceneType unitSceneType = MapHelper.GetMapType(unitScene.sceneId);
2021-04-08 20:09:59 +08:00
await TimerComponent.Instance.WaitAsync(500);
2021-05-01 11:27:41 +08:00
MapMonsterComponent monsterComponent = unit.GetComponent<MapMonsterComponent>();
monsterComponent.Clear();
2021-04-08 20:09:59 +08:00
if (unit.IsTeamLeader)
{
2021-05-01 11:27:41 +08:00
CheckMapCoinMonster(unit, mapId);
2021-04-08 20:09:59 +08:00
}
2021-05-01 11:27:41 +08:00
if (unitSceneType is UnitSceneType.MainStory or UnitSceneType.Beach)
2021-04-08 20:09:59 +08:00
{
MainStoryMap.Instance.Init(unit, unitScene.MapId);
}
else if (unitSceneType == UnitSceneType.Trial)
{
2021-05-01 11:27:41 +08:00
TrialCopyMap.Instance.InitTrailCopyMap(unit, unitScene.MapId);
}
else if (unitSceneType == UnitSceneType.SpaceTravel)
{
GenerateSpaceTravelMapMonster(unit, unitScene);
}
else if (unitSceneType == UnitSceneType.ManulEquip)
{
GenerateManulEquipMapMonster(unit, unitScene);
2021-04-08 20:09:59 +08:00
}
else
{
await TimerComponent.Instance.WaitAsync(500);
StartupTransPoint(unit, unitScene.MapId);
}
}
catch (Exception e)
{
Log.Error(e);
}
static void StartupTransPoint(Unit unit, int mapId)
{
MessageHelper.SendActor(unit, new M2C_StartupTransPoint() { MapId = mapId });
}
2021-05-01 11:27:41 +08:00
2021-04-08 20:09:59 +08:00
await ETTask.CompletedTask;
}
2021-05-01 11:27:41 +08:00
private void GenerateManulEquipMapMonster(Unit unit, UnitScene _unitScene)
{
Unit monster = EntityFactory.CreateWithParent<Unit, UnitType>(unit.DomainScene(), UnitType.Monster);
int layer = _unitScene.layerId;
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.layerId);
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.layerId);
if (spaceTravelConfig == null)
{
Log.Error($"config == null when difficult = {difficult} index = {_unitScene.layerId}");
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 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();
}
}
2021-04-08 20:09:59 +08:00
}
2021-05-01 11:27:41 +08:00
}