using Cal.DataTable; using ET.EventType; using System; using System.Collections.Generic; namespace ET { public class AfterChangeMapEvent: AEvent { public override async ETTask Run(AfterChangeMap args) { Unit unit = args.unit; int mapId = args.mapId; //竞技场 PvpMap.inatance.Remove(unit); try { UnitScene unitScene = unit.GetComponent(); //!发送切换地图 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(); monsterComponent.Clear(); if (unit.IsTeamLeader) { CheckMapCoinMonster(unit, mapId); } 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 { 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.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().configId = configId; UnitScene unitScene = monster.AddComponent(); unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y); MapMonsterComponent monsterComponent = unit.GetComponent(); 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.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().configId = configId; UnitScene unitScene = monster.AddComponent(); unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y); MapMonsterComponent monsterComponent = unit.GetComponent(); 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.DomainScene(), UnitType.Monster); MapMonsterConfig mapMonsterConfig = MapMonsterConfigCategory.Instance.GetStarSoulCopyMapMonster(_unitScene.layerId); Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); var leader = team.GetLeader(); StarSoulCopyConfigComponent soulCopyConfigComponent = leader.GetComponent(); long configId = 0; StarSoulCopyConfig soulCopyConfig = StarSoulCopyConfigCategory.Instance.GetByTypeAndDifficultyAndIndex(soulCopyConfigComponent.type, soulCopyConfigComponent.difficulty, (byte) _unitScene.layerId); if (soulCopyConfig == null) { Log.Error( $"config == null when type = {soulCopyConfigComponent.type} difficult = {soulCopyConfigComponent.difficulty} index = {_unitScene.layerId}"); return; } configId = soulCopyConfig.Id; monster.AddComponent().configId = configId; UnitScene unitScene = monster.AddComponent(); unitScene.Position = new UnityEngine.Vector2(mapMonsterConfig.X, mapMonsterConfig.Y); MapMonsterComponent monsterComponent = unit.GetComponent(); 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 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().Position, configId = (int) monster.GetComponent().configId, monsterType = MapMonsterType.MapCoin }).Coroutine(); } } } }