using UnityEngine; using Snxxz.UI; public class PrepareHandler : Singleton { public struct ClientH0812 { public uint PlayerID; // 玩家id public byte PrepareState; //准备类型, TPreparingState public float MaxTime; //最大时间 public int PrepareID; //准备ID, 如果是技能, 则是技能ID } public ClientH0812 clientPrepareH0812; public H0812_tagBeginPrepare H0812 { get; private set; } public bool isPreparing = false; public enum E_PrepareType { pstDig = 1, // 挖宝 pstHorse,// 上马中 pstSkill,// 开始释放技能 根据字段CastTime pstTruck,// 开始拉镖 pstCollecting, // 访问采集NPC pstCatching,// 捕捉各类东西 pstTownPortal,// 回城 pstMissionCollecting,// 任务采集 pstCatchPet,// 捕捉宠物 pstMax, } public void ServerPrepareStart(H0812_tagBeginPrepare h0812) { // 做一些清理或者重置工作 if (H0812 != null) { Debug.LogWarningFormat("进度条处理: {0} 似乎没有结束.", (E_PrepareType)H0812.PrepareState); } H0812 = h0812; GActorPlayerBase _player = null; GActorFight _fighter = null; switch ((E_PrepareType)H0812.PrepareState) { case E_PrepareType.pstDig: break; case E_PrepareType.pstHorse: break; case E_PrepareType.pstSkill: _fighter = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorFight; if (H0812.PlayerID == PlayerDatas.Instance.PlayerId) { clientPrepareH0812 = new ClientH0812(); clientPrepareH0812.PlayerID = PlayerDatas.Instance.PlayerId; clientPrepareH0812.MaxTime = H0812.MaxTime * Constants.F_GAMMA; clientPrepareH0812.PrepareState = (byte)E_PrepareType.pstSkill; clientPrepareH0812.PrepareID = (int)H0812.PrepareID; WindowCenter.Instance.Open(); } else { Skill _skill = _fighter.SkillMgr.Get((int)H0812.PrepareID); _fighter.SkillMgr.CastSkill(_fighter.ServerInstID, _skill.id); _skill.SkillPreparing = true; _fighter.NextAction = 200; _fighter.SkillMgr.DoingPrepareSkill = true; } if (_fighter != null) { _fighter.SkillMgr.Get((int)H0812.PrepareID).SSkillPrepareStatus = Skill.E_SkillPrepareStatus.Begin; } break; case E_PrepareType.pstTruck: break; case E_PrepareType.pstCollecting: PlayerDatas.Instance.realm.OnRefreshData(H0812); _player = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorPlayerBase; if (_player != null) { _player.Collect(); } break; case E_PrepareType.pstCatching: break; case E_PrepareType.pstTownPortal: break; case E_PrepareType.pstMissionCollecting: PlayerDatas.Instance.realm.OnRefreshData(H0812); _player = GAMgr.Instance.GetBySID(H0812.PlayerID) as GActorPlayerBase; if (_player != null) { _player.Collect(); } break; case E_PrepareType.pstCatchPet: break; } } public UnityEngine.Events.UnityAction OnPrepareEndSuccess; public void ServerPrepareEnd(H0813_tagPrepareEnd h0813) { isPreparing = false; if (H0812 == null) { Debug.Log("服务端拉进度条结束,H0812 是空的"); return; } WindowCenter.Instance.Close(); PlayerDatas.Instance.realm.OnRefreshData(h0813); GActorPlayerBase _player = null; if (h0813.Type == 0) { // 正常结束 switch ((E_PrepareType)H0812.PrepareState) { case E_PrepareType.pstDig: break; case E_PrepareType.pstHorse: break; case E_PrepareType.pstSkill: HandlerSkillPrepareEnd(h0813); break; case E_PrepareType.pstTruck: break; case E_PrepareType.pstCollecting: _player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase; if (_player != null) { if (_player.IsCollect()) { _player.IdleImmediate(); } } break; case E_PrepareType.pstCatching: break; case E_PrepareType.pstTownPortal: break; case E_PrepareType.pstMissionCollecting: _player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase; if (_player != null) { if (_player.IsCollect()) { _player.IdleImmediate(); } } break; case E_PrepareType.pstCatchPet: break; } if (OnPrepareEndSuccess != null) { OnPrepareEndSuccess(); } } else { // 异常结束 switch ((E_PrepareType)h0813.Type) { case E_PrepareType.pstDig: break; case E_PrepareType.pstHorse: break; case E_PrepareType.pstSkill: HandlerSkillPrepareException(h0813); break; case E_PrepareType.pstTruck: break; case E_PrepareType.pstCollecting: _player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase; if (_player != null) { if (_player.IsCollect()) { _player.IdleImmediate(); } } break; case E_PrepareType.pstCatching: break; case E_PrepareType.pstTownPortal: break; case E_PrepareType.pstMissionCollecting: _player = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorPlayerBase; if (_player != null) { if (_player.IsCollect()) { _player.IdleImmediate(); } } break; case E_PrepareType.pstCatchPet: break; } //Debug.LogFormat("收到进度条结束异常情况: {0}", (E_PrepareType)h0813.Type); } H0812 = null; } private void HandlerSkillPrepareEnd(H0813_tagPrepareEnd h0813) { GActorFight _actor = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorFight; if (_actor == null) { Debug.Log("服务端拉进度条结束 => 找不到角色"); return; } if (_actor != null) { Skill _skill = _actor.SkillMgr.Get((int)H0812.PrepareID); if (_skill != null) { _skill.DoPreparingEnd(h0813.PlayerID); } } } private void HandlerSkillPrepareException(H0813_tagPrepareEnd h0813) { GActorFight _actor = GAMgr.Instance.GetBySID(h0813.PlayerID) as GActorFight; if (_actor == null) { Debug.Log("服务端拉进度条异常 => 找不到角色"); return; } if (_actor != null) { Skill _skill = _actor.SkillMgr.Get((int)H0812.PrepareID); if (_skill != null) { _skill.DoPreparingFail(h0813.PlayerID); } } } }