少年修仙传客户端代码仓库
client_linchunjie
2019-01-15 5cdc8bb45069b50f1ff8f3abf16f2831622877b3
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -44,6 +44,7 @@
    public uint worldExpRate { get; private set; }
    public List<uint> maliciousAtkPlayer = new List<uint>();// 发动恶意攻击的玩家列表
    private int m_Tick;
    private uint m_CrossServerTick;
    public event Action OnRoleAttrRefresh;
    public event Action<E_AttackMode> OnSwitchAttackMode;
@@ -452,31 +453,10 @@
            case PlayerDataRefresh.BillboardLV:
                break;
            case PlayerDataRefresh.Tick:
                if (GameNetSystem.Instance.crossServerSocketConnected)
                {
                    if (!isMainServerData)
                    {
#if UNITY_EDITOR
                        DebugEx.LogFormat("---- 收到服务端Tick: {0}", value);
                        if (extersion.Tick != 0)
                        {
                            uint _curWorldTick = GetWorldTick();
                            uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                            DebugEx.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                            if (_diffValue > 5000)
                            {
                                DebugEx.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                            }
                        }
#endif
                        extersion.Tick = value;
                        m_Tick = Environment.TickCount;
                    }
                }
                else
                DebugEx.LogFormat("---- 收到服务端Tick: {0}", value);
                if (isMainServerData)
                {
#if UNITY_EDITOR
                    DebugEx.LogFormat("---- 收到服务端Tick: {0}", value);
                    if (extersion.Tick != 0)
                    {
                        uint _curWorldTick = GetWorldTick();
@@ -487,10 +467,31 @@
                            DebugEx.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                        }
                    }
#endif
                    extersion.Tick = value;
                    m_Tick = Environment.TickCount;
                }
                else
                {
                    if (m_CrossServerTick != 0)
                    {
                        uint _curWorldTick = GetWorldTick();
                        uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                        DebugEx.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                        if (_diffValue > 5000)
                        {
                            DebugEx.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                        }
                    }
                }
#endif
                if (isMainServerData)
                {
                    extersion.Tick = value;
                }
                else
                {
                    m_CrossServerTick = value;
                }
                m_Tick = Environment.TickCount;
                break;
            case PlayerDataRefresh.CurrentPlayerType:
                break;
@@ -983,20 +984,38 @@
    public void RequestWorldTick()
    {
        CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();
        if (!GameNetSystem.Instance.crossServerSocketConnected)
        if (CrossServerUtility.IsCrossServer())
        {
            GameNetSystem.Instance.SendInfo(_proto);
            GameNetSystem.Instance.SendToCrossServer(_proto);
        }
        else
        {
            GameNetSystem.Instance.SendToCrossServer(_proto);
            GameNetSystem.Instance.SendInfo(_proto);
        }
    }
    public void ClearTick()
    {
        extersion.Tick = 0;
        m_CrossServerTick = 0;
    }
    public bool IsTickVaild()
    {
        if (CrossServerUtility.IsCrossServer())
        {
            return m_CrossServerTick != 0;
        }
        else
        {
            return extersion.Tick != 0;
        }
    }
    public uint GetWorldTick()
    {
        int _currentTick = Environment.TickCount - m_Tick;
        uint _tick = extersion.Tick + (uint)_currentTick;
        uint _tick = CrossServerUtility.IsCrossServer() ? m_CrossServerTick + (uint)_currentTick : extersion.Tick + (uint)_currentTick;
        return _tick;
    }