hch
2025-06-05 07aee5604f365541c165f02bfe5437f1ed296fb5
Main/Core/GameEngine/Player/PlayerDatas.cs
@@ -6,9 +6,6 @@
public class PlayerDatas : Singleton<PlayerDatas>
{
    // public GA_Hero hero = null;
    // public H0309_tagPlayerLoginInfo loginInfo;
    public uint PlayerId { get { return baseData.PlayerID; } }
    PlayerBaseData m_Base = new PlayerBaseData();
@@ -30,11 +27,9 @@
    public uint worldExpRate { get; private set; }
    public List<uint> maliciousAtkPlayer = new List<uint>();// 发动恶意攻击的玩家列表
    private int m_Tick;
    public uint crossServerTick;
    public uint changeLV = 0; //当前升x级
    public event Action worldLevelUpdateEvent;
    public event Action<E_AttackMode> OnSwitchAttackMode;
    public event Action playerDataUpdateEvent;    // 无区别更新,慎用
    public event Action<PlayerDataType> playerDataRefreshEvent;
@@ -44,13 +39,13 @@
    private Dictionary<PlayerDataType, ulong> PlayerDataDict = new Dictionary<PlayerDataType, ulong>();
    public void InitPlayerData(/*H0102_tagCDBPlayer data*/)
    {
        // baseData.UpdateData(data);
        // if (playerDataUpdateEvent != null)
        // {
        //     playerDataUpdateEvent();
        // }
    public void InitPlayerData(H0102_tagCDBPlayer data)
    {
        baseData.UpdateData(data);
        if (playerDataUpdateEvent != null)
        {
            playerDataUpdateEvent();
        }
    }
    public void UpdatePlayerData(/*HA112_tagMCDBPlayer data*/)
@@ -70,7 +65,7 @@
    public void FightRefreshPlayerHp(ulong hp)
    {
        RefreshProperty(false, PlayerDataType.HP, (uint)(hp % Constants.ExpPointValue), (uint)(hp/Constants.ExpPointValue));
        RefreshProperty(PlayerDataType.HP, (uint)(hp % Constants.ExpPointValue), (uint)(hp/Constants.ExpPointValue));
        if (playerDataUpdateEvent != null)
        {
@@ -153,7 +148,7 @@
        // }
    }
    public void RefreshProperty(bool isMainServerData, PlayerDataType _type, uint value, uint valueEx)
    public void RefreshProperty(PlayerDataType _type, uint value, uint valueEx)
    {
        switch (_type)
        {
@@ -240,10 +235,6 @@
                break;
            case PlayerDataType.MapID:
                baseData.MapID = (ushort)value;
                if (isMainServerData)
                {
                    baseData.mainServerMapIdRecord = baseData.MapID;
                }
                break;
            case PlayerDataType.PosX:
                baseData.PosX = (ushort)value;//角色坐标x
@@ -262,17 +253,7 @@
                // }
                break;
            case PlayerDataType.HP:
                if (CrossServerUtility.IsCrossServer())
                {
                    if (!isMainServerData)
                    {
                        baseData.HP = value + valueEx * Constants.ExpPointValue;
                    }
                }
                else
                {
                    baseData.HP = value + valueEx * Constants.ExpPointValue;
                }
                baseData.HP = value + valueEx * Constants.ExpPointValue;
                break;
            case PlayerDataType.MaxMP:
                extersion.MaxMP = (int)value;
@@ -420,42 +401,19 @@
                break;
            case PlayerDataType.Tick:
#if UNITY_EDITOR
                Debug.LogFormat("---- 收到服务端Tick: {0}", value);
                if (isMainServerData)
                {
                    if (extersion.Tick != 0)
                    {
                        uint _curWorldTick = GetWorldTick();
                        uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                        Debug.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                        if (_diffValue > 5000)
                        {
                            Debug.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                        }
                    }
                }
                else
                {
                    if (crossServerTick != 0)
                    {
                        uint _curWorldTick = GetWorldTick();
                        uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                        Debug.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                        if (_diffValue > 5000)
                        {
                            Debug.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                        }
                    }
                Debug.LogFormat("---- 收到服务端Tick: {0}", value);
                if (extersion.Tick != 0)
                {
                    uint _curWorldTick = GetWorldTick();
                    uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                    Debug.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                    if (_diffValue > 5000)
                    {
                        Debug.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                    }
                }
#endif
                if (isMainServerData)
                {
                    extersion.Tick = value;
                }
                else
                {
                    crossServerTick = value;
                }
                extersion.Tick = value;
                m_Tick = Environment.TickCount;
                break;
@@ -552,7 +510,6 @@
                //             toLineId = 0,
                //             needEmpty = true,
                //             needLoadResource = true,
                //             serverType = ServerType.CrossSever,
                //             isClientLoadMap = true,
                //             refreshPlayerDatas = true
                //         });
@@ -1023,42 +980,25 @@
    }
    public void RequestWorldTick()
    {
        // TODO YYL
        // CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();
        // if (CrossServerUtility.IsCrossServer())
        // {
        //     GameNetSystem.Instance.SendToCrossServer(_proto);
        // }
        // else
        // {
        //     GameNetSystem.Instance.SendInfo(_proto);
        // }
    {
        CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();
        GameNetSystem.Instance.SendInfo(_proto);
    }
    public void ClearTick()
    {
        extersion.Tick = 0;
        crossServerTick = 0;
    }
    public bool IsTickVaild()
    {
        if (CrossServerUtility.IsCrossServer())
        {
            return crossServerTick != 0;
        }
        else
        {
            return extersion.Tick != 0;
        }
        return extersion.Tick != 0;
    }
    public uint GetWorldTick()
    {
        int _currentTick = Environment.TickCount - m_Tick;
        uint _tick = CrossServerUtility.IsCrossServer() ? crossServerTick + (uint)_currentTick : extersion.Tick + (uint)_currentTick;
        return _tick;
        return extersion.Tick + (uint)_currentTick;
    }
}