using Cal.DataTable; using System; using System.Collections.Generic; using UnityEngine; namespace ET { [ActorMessageHandler] public class C2M_GetStateRebackHandler : AMActorLocationHandler { protected override async ETTask Run(Unit unit, C2M_GetStateReback message) { try { Log.Debug($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】已经进入游戏"); PlayerData data = unit.GetComponent(); //!测试结束 Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); //!+发送玩家基础性息 UnitCharacter unitCharacter =await CharacterHelper.GetUnitCharacter(unit); MessageHelper.SendActor(unit, new M2C_SendUnitInfo { UnitCharacter = unitCharacter }); CharacterHelper.SyncAttribute(unit); TeamHelper.SendTeamMember(team); //!场景信息 UnitScene unitScene = unit.GetComponent(); if (team == null) { Log.Error($"team==null where {unit}"); } else if (team.TeamState == TeamState.Fight) { //!地图切换 await ChangeMap(unit, unitScene, false); //!战斗状态 BattleBase battleBase = BattleMgrCompnent.Instance.GetBattle(unit); switch (battleBase) { default: break; case MainStoryBattle battle: battle.ReSendMonsterInfo(unit); break; case IdleBattle battle: battle.ReSendMonsterInfo(unit); break; case TrialCopyBattle battle: battle.ReSendMonsterInfo(unit); break; case BossBattle battle: battle.ReSendMonsterInfo(unit); break; case PKBattle battle: battle.ReSendMonsterInfo(unit); break; case ManulEquipBattle battle: battle.ReSendMonsterInfo(unit); break; } } else { data.IsBattleIdle = false; //!地图切换 await ChangeMap(unit, unitScene, true); //!任务相关 UnitTask unitTask = unit.GetComponent(); if (unitTask != null && unitTask.RunningTaskList.Count == 0 && unitTask.CompleteTaskIdList.Count == 0 && unitTask.FinishTaskIdList.Count == 0 ) { //!发送新任务 M2C_OpenTaskUI ret = new M2C_OpenTaskUI(); ret.TaskList.Add(new NPCTask() { Id = (int)TaskComponent.Instance.TaskBaseNpcIdDic[0][0].Id, TaskState = TaskState.TaskWaiting }); MessageHelper.SendActor(unit, ret); } } //!+重新添加 BuffLib lib = await BuffLibComponent.Instance.Query(unit.Id); //!重新添加GoodsBuff foreach (KeyValuePair kp in lib.goodsEffectBuffDic) { GoodsBase goodsBase = DataTableHelper.Get(kp.Key); if (goodsBase == null) { Log.Error($"goodsBase == null where id = {kp.Key}"); } else GoodsEffectComponent.Instance.ReAcquireGoodsEffect(unit, goodsBase, kp.Value); } BuffLibComponent.Instance.Remove(unit.Id, lib).Coroutine(); //!+发送Boss消息 SendBossInfo(unit); await ETTask.CompletedTask; } catch (System.Exception e) { Log.Error(e); } } private async ETTask ChangeMap(Unit unit, UnitScene unitScene, bool initMap) { try { int mapId = unitScene.MapId; UnitSceneType unitSceneType = MapSceneComponent.Instance.GetUnitSceneType(mapId / 100); if (unitSceneType == UnitSceneType.Boss) { int layer = unitScene.MapId % 100; BossComponent.BossState state = BossComponent.Instance.GetState(layer); if (state == BossComponent.BossState.Idle) { SendBossRefresh(unit, layer).Coroutine(); } } Sys_Scene targetSceneInfo = MapSceneComponent.Instance.GetMapInfo(mapId / 100); Sys_Scene.PlayerPos position = targetSceneInfo.PlayerPosArr[0]; Team team = TeamComponent.Instance.Get(unit.TeamLeaderId); if (team == null) { Log.Error(" team == null"); return; } unit.IsTransfer = true; unitScene.enterTime = TimeHelper.ClientNow(); //!停止移动 unit.Stop(); await TimerComponent.Instance.WaitAsync(100); unitScene.Position = new Vector2(position.PlayerPos_x, position.PlayerPos_y); await unit.GetMapByUnitScene().Enter(unit); //!发送切换地图 MessageHelper.SendActor(unit, new M2C_ChangeMap() { X = unitScene.Position.x, Y = unitScene.Position.y, MapId = unitScene.MapId }); await TimerComponent.Instance.WaitAsync(500); if (initMap) { if (unitSceneType == UnitSceneType.MainStory || unitSceneType == UnitSceneType.Beach) { MainStoryMap.Instance.Init(unit, unitScene.MapId); } else if (unitSceneType == UnitSceneType.Trial) { TrialCopyMap.Instance.InitTrailCopyMap(unit, mapId); } else { await TimerComponent.Instance.WaitAsync(500); StartupTransPoint(unit, unitScene.MapId); } } void StartupTransPoint(Unit unit, int mapId) { MessageHelper.SendActor(unit, new M2C_StartupTransPoint() { MapId = mapId }); } unit.IsTransfer = false; } catch (Exception e) { Log.Error(e); } } private void SendBossInfo(Unit unit) { Log.Debug($"【{ UserComponent.Instance.Get(unit.Id)?.NickName} ({ unit.Id})】发送Boss消息"); BossComponent boss = BossComponent.Instance; List arr = new List(); foreach (KeyValuePair item in boss.bossStateDic) { if (item.Value == BossComponent.BossState.Idle) { arr.Add($"[color=#00cc00]【{boss.GetBossBossName(item.Key)}】[/color]刷新了,大家赶紧去击杀吧,奖励多多!"); } } Chat.Instance.SendSystemCaht(unit, arr); } private async ETVoid SendBossRefresh(Unit unit, int targetMapLayer) { await TimerComponent.Instance.WaitAsync(1000); MessageHelper.SendActor(unit, new M2C_BossRefresh { BossId = BossComponent.Instance.GetBossId(targetMapLayer) }); } } }