| | |
| | | |
| | | 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(); |
| | |
| | | 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; |
| | |
| | | |
| | | 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*/) |
| | |
| | | |
| | | 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) |
| | | { |
| | |
| | | // } |
| | | } |
| | | |
| | | public void RefreshProperty(bool isMainServerData, PlayerDataType _type, uint value, uint valueEx) |
| | | public void RefreshProperty(PlayerDataType _type, uint value, uint valueEx) |
| | | { |
| | | switch (_type) |
| | | { |
| | |
| | | break; |
| | | case PlayerDataType.MapID: |
| | | baseData.MapID = (ushort)value; |
| | | if (isMainServerData) |
| | | { |
| | | baseData.mainServerMapIdRecord = baseData.MapID; |
| | | } |
| | | break; |
| | | case PlayerDataType.PosX: |
| | | baseData.PosX = (ushort)value;//角色坐标x |
| | |
| | | // } |
| | | 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; |
| | |
| | | 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; |
| | |
| | | // toLineId = 0, |
| | | // needEmpty = true, |
| | | // needLoadResource = true, |
| | | // serverType = ServerType.CrossSever, |
| | | // isClientLoadMap = true, |
| | | // refreshPlayerDatas = true |
| | | // }); |
| | |
| | | } |
| | | |
| | | 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; |
| | | } |
| | | |
| | | } |