| Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0405_tagPlayerDisappear.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GAMgr.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GA_Player.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GA_PlayerOffLine.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Fight/GameActor/GA_PlayerOffLine.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0405_tagPlayerDisappear.cs
@@ -30,6 +30,9 @@ { GAMgr.Instance.ServerDie(vNetData.Players[i]); GAMgr.Instance.Release(_actor); // 离线玩家 GAMgr.Instance.RemoveOffLinePlayer(vNetData.Players[i]); } else { Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0434_tagAreaPlayerAppearEx.cs
@@ -1,8 +1,10 @@ using UnityEngine; using System.Collections; //04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx //04 34 周围玩家出现合并封包#tagAreaPlayerAppearEx public class DTC0434_tagAreaPlayerAppearEx : DtcBasic { public override void Done(GameNetPackBasic vNetPack) @@ -21,6 +23,12 @@ if (_player != null) { // 异常 } // 离线玩家 if (vNetData.State == 1) { GAMgr.Instance.AddOffLinePlayer(vNetData.PlayerID); } _player = GAMgr.Instance.RequestPlayer<GA_Player>(vNetData.PlayerID, E_ActorGroup.Player, vNetData); @@ -70,5 +78,7 @@ StatusMgr.Instance.Request(_h0605); } } } } Fight/GameActor/GAMgr.cs
@@ -63,6 +63,8 @@ // 客户端id对应相应角色 private Dictionary<uint, GActor> m_Cid2GA; private List<uint> m_OffLineList; // 服务端通知的死亡目标对应的客户端id, // 这里为了处理可能出现的无法死亡现象,对每一只目标进行计时,强制其死亡 private List<uint> serverDeadList = new List<uint>(); @@ -85,10 +87,91 @@ m_AllList = new List<GActor>(); m_Sid2Cid = new Dictionary<uint, uint>(); m_Cid2GA = new Dictionary<uint, GActor>(); m_OffLineList = new List<uint>(); m_Inited = true; SystemSetting.Instance.playerSyncCountChangeEvent += OnPlayerSyncCountChange; SystemSetting.Instance.OnSettingChanged += OnSettingChanged; } } public void AddOffLinePlayer(uint sid) { if (m_OffLineList.Contains(sid)) { return; } m_OffLineList.Add(sid); } public void RemoveOffLinePlayer(uint sid) { if (m_OffLineList.Contains(sid)) { m_OffLineList.Remove(sid); } } public void ClearOffLinePlayer() { m_OffLineList.Clear(); } private float m_UpdateOffLineInterval; private List<uint> m_CacheList = new List<uint>(); private List<uint> m_ContaintList = new List<uint>(); private void UpdateOffLinePlayer() { if (m_OffLineList == null || m_OffLineList.Count == 0) { return; } if (Time.realtimeSinceStartup - m_UpdateOffLineInterval > 2) { m_CacheList.Clear(); m_ContaintList.Clear(); int _count = Mathf.Min(m_OffLineList.Count, 4); //Debug.LogFormat("此次将会有: {0} 个挂机者释放技能", _count); for (int i = 0; i < m_OffLineList.Count; ++i) { m_CacheList.Add(m_OffLineList[i]); } int _time = 0; while (m_ContaintList.Count < _count) { int _index = UnityEngine.Random.Range(0, m_CacheList.Count); m_ContaintList.Add(m_CacheList[_index]); //Debug.LogFormat("添加对象: {0}, 已添加: {1} 个", m_CacheList[_index], m_ContaintList.Count); m_CacheList.RemoveAt(_index); if (_time > _count) { //Debug.LogFormat("共添加了: {0} 个玩家", m_ContaintList.Count); break; } _time++; } GA_Player _player = null; for (int i = 0; i < m_ContaintList.Count; ++i) { _player = GAMgr.Instance.GetBySID(m_ContaintList[i]) as GA_Player; if (_player == null) { continue; } _player.UpdateOffLineAction(); } m_UpdateOffLineInterval = Time.realtimeSinceStartup; } } @@ -838,6 +921,8 @@ { m_AllList[i].Update(); } UpdateOffLinePlayer(); } public void DoLateUpdate() Fight/GameActor/GA_Player.cs
@@ -16,6 +16,8 @@ private CmdManager m_CmdManager; private int m_ComAtkIndex;// 普攻索引 protected override void OnInit(GameNetPackBasic package) { m_H0434 = package as H0434_tagAreaPlayerAppearEx; @@ -542,4 +544,112 @@ { m_CmdManager.Clear(); } public void UpdateOffLineAction() { if (!IsIdle()) { return; } if (SelectTarget == null) { SelectTarget = GAMgr.Instance.GetCloserFightNpc(Pos); } if (SelectTarget != null) { destForward = Forward = MathUtility.ForwardXZ(SelectTarget.Pos, Pos); } Skill _castSkill = null; int _skillIndex = UnityEngine.Random.Range(0, JobSetup.HangupSkillList.Length); if (SkillMgr.Get(JobSetup.HangupSkillList[_skillIndex]).IsValid()) { _castSkill = SkillMgr.Get(JobSetup.HangupSkillList[_skillIndex]); } if (_castSkill == null) { if (m_ComAtkIndex > JobSetup.ComAtkIdList.Length - 1) { m_ComAtkIndex = 0; } int _comSkillId = JobSetup.ComAtkIdList[m_ComAtkIndex]; _castSkill = SkillMgr.Get(_comSkillId); m_ComAtkIndex += 1; } if (_castSkill != null) { SkillMgr.CastSkill(ServerInstID, _castSkill.id, true); Vector3 _targetPosition = Pos + Forward * (_castSkill.skillInfo.config.AtkDist * .5f); _targetPosition.y = 0; UnityEngine.AI.NavMeshHit _navMeshHit; if (UnityEngine.AI.NavMesh.Raycast(Pos, _targetPosition, out _navMeshHit, -1)) { _targetPosition = _navMeshHit.position; } _targetPosition.y = Pos.y; _castSkill.targetPosition = _targetPosition; if (_castSkill.skillInfo.config.Skillactmark > 0 && _castSkill.skillInfo.config.Skillactmark < 20) { switch (_castSkill.skillInfo.config.Skillactmark) { case 10: Play(GAStaticDefine.State_Attack1Hash, 0); break; case 11: Play(GAStaticDefine.State_Attack2Hash, 0); break; case 12: Play(GAStaticDefine.State_Attack3Hash, 0); break; case 13: Play(GAStaticDefine.State_Attack4Hash, 0); break; } } else { switch (_castSkill.skillInfo.config.Skillactmark) { case 21: Play(GAStaticDefine.State_Skill21, 0); break; case 22: Play(GAStaticDefine.State_Skill22, 0); break; case 23: Play(GAStaticDefine.State_Skill23, 0); break; case 24: Play(GAStaticDefine.State_Skill24, 0); break; case 25: Play(GAStaticDefine.State_Skill25, 0); break; case 26: Play(GAStaticDefine.State_Skill26, 0); break; case 27: Play(GAStaticDefine.State_Skill27, 0); break; case 28: Play(GAStaticDefine.State_Skill28, 0); break; case 29: Play(GAStaticDefine.State_Skill29, 0); break; case 99: Play(GAStaticDefine.State_RollHash, 0); break; } } } } } Fight/GameActor/GA_PlayerOffLine.cs
File was deleted Fight/GameActor/GA_PlayerOffLine.cs.meta
File was deleted