少年修仙传客户端代码仓库
client_Wu Xijin
2018-08-20 ddcba938b4b7cb150170a07d59b480d0748a476c
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -1,819 +1,826 @@
using UnityEngine;
using System.Collections.Generic;
using System;
using Snxxz.UI;
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 PlayerBaseData baseData { get { return m_Base; } }
    PlayerExtersionData m_Extersion = new PlayerExtersionData();
    public PlayerExtersionData extersion { get { return m_Extersion; } }
    public PlayerFairyData fairyData = new PlayerFairyData();
    public PlayerMarketData market = new PlayerMarketData();
    public PlayerRealmData realm = new PlayerRealmData();
    PlayerSkillDatas m_Skill = new PlayerSkillDatas();
    public PlayerSkillDatas skill { get { return m_Skill; } }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    PlayerMethodData M_Method;
    PlayerMethodData method { get { return M_Method ?? (M_Method = ModelCenter.Instance.GetModel<PlayerMethodData>()); } }
    PlayerRankData m_Rank = new PlayerRankData();
    public PlayerRankData rank { get { return m_Rank; } }
    StoreModel m_StoreModel;
    StoreModel StoreModel
    {
        get { return m_StoreModel ?? (m_StoreModel = ModelCenter.Instance.GetModel<StoreModel>()); }
    }
    public int totalExpRate { get; set; }
    public uint worldLv { get; private set; }
    public uint worldExpRate { get; private set; }
    public List<uint> maliciousAtkPlayer = new List<uint>();// 发动恶意攻击的玩家列表
    private int m_Tick;
    public event Action OnRoleAttrRefresh;
    public event Action<E_AttackMode> OnSwitchAttackMode;
    public event Action InitPlayerInfoEvent;
    public event Action RefreshPlayerInfoEvent;
    public event Action<PlayerDataRefresh> PlayerDataRefreshInfoEvent;
    public event Action<PlayerDataRefresh, int> attributePromoteEvent;
    public event Action<PlayerDataRefresh, int> PlayerDataRefreshEvent;
    public event Action<long> spNewGetEvent;
    private Dictionary<PlayerDataRefresh, int> PlayerDataDict = new Dictionary<PlayerDataRefresh, int>();
    public void InitPlayerData(H0102_tagCDBPlayer data)
    {
        baseData.UpdateData(data);
        HangUpSetModel.Instance.SetOfflinePluginTime((int)baseData.HappyPoint);
        if (InitPlayerInfoEvent != null)
        {
            InitPlayerInfoEvent();
        }
    }
    public void FightRefreshPlayerHp(uint hp)
    {
        RefreshProperty(PlayerDataRefresh.HP, hp);
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
        if (PlayerDataRefreshInfoEvent != null)
        {
            PlayerDataRefreshInfoEvent(PlayerDataRefresh.HP);
        }
    }
    public void RefreshPlayerData(H0418_tagObjInfoRefresh vNetData)
    {
        UpdatePlayerData(vNetData);
        StoreModel.RefreshTCBPlayerData(vNetData);
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
    }
    public void RefreshPlayerData(HA709_tagObjInfoListRefresh vNetData)
    {
        if (baseData == null || vNetData.ObjID != PlayerId)
        {
            return;
        }
        for (int i = 0; i < vNetData.Count; i++)
        {
            var data = new H0418_tagObjInfoRefresh();
            data.ObjID = vNetData.ObjID;
            data.ObjType = vNetData.ObjType;
            data.RefreshType = vNetData.RefreshType[i].RefreshType;
            data.Value = vNetData.RefreshType[i].Value;
            StoreModel.RefreshTCBPlayerData(data);
            UpdatePlayerData(data);
        }
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
    }
    private void UpdatePlayerData(H0418_tagObjInfoRefresh vNetData)
    {
        if (baseData != null && vNetData.ObjID == baseData.PlayerID)
        {
            var deltaValue = -1;
            switch ((PlayerDataRefresh)vNetData.RefreshType)
            {
                case PlayerDataRefresh.MaxHP:
                    deltaValue = (int)(vNetData.Value - extersion.MaxHP);
                    break;
                case PlayerDataRefresh.MAXATK:
                    deltaValue = (int)(vNetData.Value - extersion.MAXATK);
                    break;
                case PlayerDataRefresh.MINATK:
                    deltaValue = (int)(vNetData.Value - extersion.MINATK);
                    break;
                case PlayerDataRefresh.DEF:
                    deltaValue = (int)(vNetData.Value - extersion.DEF);
                    break;
                case PlayerDataRefresh.HIT:
                    deltaValue = (int)(vNetData.Value - extersion.HIT);
                    break;
                case PlayerDataRefresh.Miss:
                    deltaValue = (int)(vNetData.Value - extersion.Miss);
                    break;
                case PlayerDataRefresh.BattleValEx1:
                    deltaValue = (int)(vNetData.Value - extersion.battleValEx1);
                    break;
                case PlayerDataRefresh.SpeedValue:
                    deltaValue = (int)(vNetData.Value - extersion.SpeedValue);
                    break;
                default:
                    deltaValue = -1;
                    break;
            }
            if (deltaValue > 0 && attributePromoteEvent != null)
            {
                attributePromoteEvent((PlayerDataRefresh)vNetData.RefreshType, deltaValue);
            }
            var recordSp = -1L;
            if ((PlayerDataRefresh)vNetData.RefreshType == PlayerDataRefresh.ExAttr7 || (PlayerDataRefresh)vNetData.RefreshType == PlayerDataRefresh.ExAttr8)
            {
                recordSp = baseData.treasurePotentialSp;
            }
            RefreshProperty((PlayerDataRefresh)vNetData.RefreshType, vNetData.Value);
            if (recordSp > 0 && spNewGetEvent != null)
            {
                var deltaSp = baseData.treasurePotentialSp - recordSp;
                if (deltaSp > 0)
                {
                    spNewGetEvent(deltaSp);
                }
            }
            if (PlayerDataDict.ContainsKey((PlayerDataRefresh)vNetData.RefreshType))
            {
                PlayerDataDict[(PlayerDataRefresh)vNetData.RefreshType] = (int)vNetData.Value;
            }
            else
            {
                PlayerDataDict.Add((PlayerDataRefresh)vNetData.RefreshType, (int)vNetData.Value);
            }
            if (PlayerDataRefreshInfoEvent != null)
            {
                PlayerDataRefreshInfoEvent((PlayerDataRefresh)vNetData.RefreshType);
            }
            if (PlayerDataRefreshEvent != null)
            {
                PlayerDataRefreshEvent((PlayerDataRefresh)vNetData.RefreshType, (int)vNetData.Value);
            }
        }
    }
    public void RefreshProperty(PlayerDataRefresh _type, uint value)
    {
        switch (_type)
        {
            case PlayerDataRefresh.AccountID:
                baseData.AccID = value.ToString();
                break;
            case PlayerDataRefresh.PlayerID:
                baseData.PlayerID = value;
                break;
            case PlayerDataRefresh.PlayerName:
                break;
            case PlayerDataRefresh.Sex:
                baseData.Sex = (byte)value;
                break;
            case PlayerDataRefresh.Job:
                baseData.Job = (byte)value;
                break;
            case PlayerDataRefresh.LV:
                if (baseData.LV != 0 && value > baseData.LV)
                {
                    if (hero != null)
                    {
                        if (PlayerDatas.Instance.baseData.MapID == 31080)
                        {
                            SFXPlayUtility.Instance.PlayBattleEffect(1156, hero);
                        }
                        else
                        {
                            SFXPlayUtility.Instance.PlayBattleEffect(1039, hero);
                        }
                    }
                }
                baseData.LV = (ushort)value;
                break;
            case PlayerDataRefresh.TotalExp:
                baseData.TotalExp = value;
                break;
            case PlayerDataRefresh.Family:
                baseData.Family = value;
                if (hero != null)
                {
                    hero.ActorInfo.familyID = value;
                    ReCheckAttackTarget();
                }
                break;
            case PlayerDataRefresh.TeamHornor:
                break;
            case PlayerDataRefresh.PKValue:
                break;
            case PlayerDataRefresh.FamilyHornor:
                break;
            case PlayerDataRefresh.FamilyActiveValue:
                break;
            case PlayerDataRefresh.CountryHornor:
                break;
            case PlayerDataRefresh.Mate:
                break;
            case PlayerDataRefresh.Gold:
                baseData.Gold = value;
                break;
            case PlayerDataRefresh.GoldPaper:
                baseData.GoldPaper = value;
                break;
            case PlayerDataRefresh.Silver:
                baseData.Silver = value;
                strengthengmodel.MoneyData();
                break;
            case PlayerDataRefresh.SilverPaper:
                baseData.SilverPaper = value;
                break;
            case PlayerDataRefresh.FightPoint:
                baseData.FightPoint = value;
                ModelCenter.Instance.GetModel<PlayerMainDate>().PowerAdd((int)value);
                break;
            case PlayerDataRefresh.HappyPoint:
                baseData.HappyPoint = value;
                DesignDebug.LogError("脱机挂时间" + (int)value);
                break;
            case PlayerDataRefresh.MapID:
                baseData.MapID = (ushort)value;
                break;
            case PlayerDataRefresh.PosX:
                baseData.PosX = (ushort)value;//角色坐标x
                break;
            case PlayerDataRefresh.PosY:
                baseData.PosY = (ushort)value;//角色坐标y
                break;
            case PlayerDataRefresh.State:
                baseData.State = (byte)value;
                break;
            case PlayerDataRefresh.MaxHP:
                extersion.MaxHP = (int)value;
                if (hero != null)
                {
                    hero.ActorInfo.ResetHp(-1, -1, (int)value);
                }
                break;
            case PlayerDataRefresh.HP:
                baseData.HP = value;
                if (hero != null)
                {
                    hero.ActorInfo.ResetHp((int)value);
                }
                break;
            case PlayerDataRefresh.MaxMP:
                extersion.MaxMP = (int)value;
                break;
            case PlayerDataRefresh.XP:
                baseData.XP = value;
                break;
            case PlayerDataRefresh.HPRestoreSetting:
                break;
            case PlayerDataRefresh.MPRestoreSetting:
                break;
            case PlayerDataRefresh.ExpRate:
                extersion.ExpRate = (int)value;
                break;
            case PlayerDataRefresh.DEF:
                extersion.DEF = (int)value;
                break;
            case PlayerDataRefresh.FreePoint:
                baseData.FreePoint = value;
                ModelCenter.Instance.GetModel<RolePointModel>().UpdateRedPoint();
                break;
            case PlayerDataRefresh.FreeSkillPoint:
                baseData.FreeSkillPoint = value;
                break;
            case PlayerDataRefresh.STR:
                baseData.STR = (int)value;
                break;
            case PlayerDataRefresh.PNE:
                baseData.PNE = (int)value;
                break;
            case PlayerDataRefresh.PHY:
                baseData.PHY = (int)value;
                break;
            case PlayerDataRefresh.CON:
                baseData.CON = (int)value;
                break;
            case PlayerDataRefresh.MINATK:
                extersion.MINATK = (int)value;
                break;
            case PlayerDataRefresh.MAXATK:
                extersion.MAXATK = (int)value;
                break;
            case PlayerDataRefresh.MAtkMin:
                break;
            case PlayerDataRefresh.MAtkMax:
                break;
            case PlayerDataRefresh.MDef:
                break;
            case PlayerDataRefresh.HIT:
                extersion.HIT = (int)value;
                break;
            case PlayerDataRefresh.POISIONATK:
                break;
            case PlayerDataRefresh.FIREATK:
                break;
            case PlayerDataRefresh.REALATK:
                extersion.realATK = (int)value;
                break;
            case PlayerDataRefresh.THUNDERATK:
                break;
            case PlayerDataRefresh.WINDATK:
                break;
            case PlayerDataRefresh.POISIONDEF:
                break;
            case PlayerDataRefresh.FIREDEF:
                break;
            case PlayerDataRefresh.REALDEF:
                extersion.realDEF = (int)value;
                break;
            case PlayerDataRefresh.THUNDERDEF:
                break;
            case PlayerDataRefresh.WINDDEF:
                break;
            case PlayerDataRefresh.Miss:
                extersion.Miss = (int)value;
                break;
            case PlayerDataRefresh.SuperHit:
                extersion.SuperHit = (int)value;
                break;
            case PlayerDataRefresh.Buff:
                break;
            case PlayerDataRefresh.Skill:
                break;
            case PlayerDataRefresh.Mark:
                break;
            case PlayerDataRefresh.SettingH:
                break;
            case PlayerDataRefresh.SettingV:
                break;
            case PlayerDataRefresh.FightPK:
                break;
            case PlayerDataRefresh.ActiveValue:
                break;
            case PlayerDataRefresh.NameColor:
            case PlayerDataRefresh.AtkInterval:
                extersion.AtkInterval = (int)value;
                break;
            case PlayerDataRefresh.Speed:
                extersion.Speed = (int)value;
                break;
            case PlayerDataRefresh.SuperHitRate:
                extersion.SuperHitRate = (int)value;
                break;
            case PlayerDataRefresh.PickupDist:
                extersion.PickupDist = (int)value;
                break;
            case PlayerDataRefresh.CountryLastWeekHornor:
                break;
            case PlayerDataRefresh.LastWeekOnlineTime:
                break;
            case PlayerDataRefresh.LastWeekFamilyActiveValue:
                break;
            case PlayerDataRefresh.FBID:
                baseData.FBID = (byte)value;
                break;
            case PlayerDataRefresh.FamilyLV:
                break;
            case PlayerDataRefresh.RealMapID:
                extersion.RealMapID = (int)value;
                break;
            case PlayerDataRefresh.GMLevel:
                baseData.GMLevel = (byte)value;
                break;
            case PlayerDataRefresh.TeamID:
                if (hero != null)
                {
                    hero.ActorInfo.teamID = value;
                    ReCheckAttackTarget();
                }
                break;
            case PlayerDataRefresh.TeamLV:
                break;
            case PlayerDataRefresh.FightPower:
                baseData.FightPoint = value;
                ModelCenter.Instance.GetModel<PlayerMainDate>().PowerAdd((int)value);
                break;
            case PlayerDataRefresh.RebornMapID:
                break;
            case PlayerDataRefresh.RebornPosX:
                break;
            case PlayerDataRefresh.RebornPosY:
                break;
            case PlayerDataRefresh.Coin:
                break;
            case PlayerDataRefresh.BillboardLV:
                break;
            case PlayerDataRefresh.Tick:
#if UNITY_EDITOR
                DesignDebug.LogFormat("---- 收到服务端Tick: {0}", value);
                if (extersion.Tick != 0)
                {
                    uint _curWorldTick = GetWorldTick();
                    uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value;
                    DesignDebug.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue);
                    if (_diffValue > 5000)
                    {
                        DesignDebug.LogFormat(" |-------- <color=red>收到服务端WorldTick与当前的客户端Tick差异超过5秒</color>");
                    }
                }
#endif
                extersion.Tick = value;
                m_Tick = Environment.TickCount;
                break;
            case PlayerDataRefresh.CurrentPlayerType:
                break;
            case PlayerDataRefresh.FriendFavor:
                break;
            case PlayerDataRefresh.BackpackLV:
                break;
            case PlayerDataRefresh.ReincarnationLV:
                break;
            case PlayerDataRefresh.BaseSTR:
                break;
            case PlayerDataRefresh.BasePNE:
                break;
            case PlayerDataRefresh.BasePHY:
                break;
            case PlayerDataRefresh.BaseCON:
                break;
            case PlayerDataRefresh.ReceivedSalary:
                break;
            case PlayerDataRefresh.WarehouseLV:
                break;
            case PlayerDataRefresh.EquipShowSwitch:
                break;
            case PlayerDataRefresh.LuckValue:
                break;
            case PlayerDataRefresh.ExAttr1:
                baseData.ExAttr1 = value;
                break;
            case PlayerDataRefresh.ExAttr2:
                baseData.ExAttr2 = value;
                break;
            case PlayerDataRefresh.ExAttr3:
                baseData.dungeonLineId = (int)value;
                break;
            case PlayerDataRefresh.ExAttr4:
                baseData.ExAttr4 = value;
                break;
            case PlayerDataRefresh.ExAttr5:
                baseData.ExAttr5 = value;
                break;
            case PlayerDataRefresh.Faction:
                baseData.faction = value;
                if (hero != null)
                {
                    hero.ActorInfo.faction = (int)value;
                    ReCheckAttackTarget();
                    hero.SetFairyLeagueHeadUp(baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON);
                }
                break;
            case PlayerDataRefresh.InfamyValue:
                break;
            case PlayerDataRefresh.OfficialRank:
                baseData.realmLevel = (byte)value;
                break;
            case PlayerDataRefresh.IsFindByLabel:
                break;
            case PlayerDataRefresh.IsCloseFriendLabel:
                break;
            case PlayerDataRefresh.ChangeCoinPointTotal:
                baseData.coinPointTotal = value;
                break;
            case PlayerDataRefresh.VIPLv:
                if (baseData.VIPLv <= 0 && value > 0)
                {
                    ModelCenter.Instance.GetModel<SetPrivateModel>().SetVipPushNotify((int)value);
                }
                else if (value <= 0)
                {
                    ModelCenter.Instance.GetModel<SetPrivateModel>().SetVipPushNotify(0);
                }
                baseData.VIPLv = (byte)value;
                break;
            case PlayerDataRefresh.ExAttr6:
                baseData.ExAttr6 = value;
                strengthengmodel.MoneyData();
                break;
            case PlayerDataRefresh.ExAttr7:
                baseData.ExAttr7 = value;
                break;
            case PlayerDataRefresh.ExAttr8:
                baseData.ExAttr8 = value;
                break;
            case PlayerDataRefresh.ExAttr9:
                baseData.ExAttr9 = value;
                break;
            case PlayerDataRefresh.ExAttr10:
                baseData.ExAttr10 = value;
                break;
            case PlayerDataRefresh.ModelMark:
                break;
            case PlayerDataRefresh.PrizeCoin:
                break;
            case PlayerDataRefresh.ExAttr11:
                baseData.ExAttr11 = value;
                break;
            case PlayerDataRefresh.ExAttr12:
                baseData.ExAttr12 = value;
                break;
            case PlayerDataRefresh.ExAttr13:
                baseData.ExAttr13 = value;
                break;
            case PlayerDataRefresh.ExAttr14:
                baseData.ExAttr14 = value;
                break;
            case PlayerDataRefresh.BattleValEx1:
                extersion.battleValEx1 = (int)value;
                if (hero != null)
                {
                    hero.CalculateAtkSpeed((ushort)extersion.battleValEx1);
                }
                break;
            case PlayerDataRefresh.BattleValEx3:
                extersion.battleValEx3 = (int)value;
                break;
            case PlayerDataRefresh.DamageReduceRate:
                extersion.damageReduceRate = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitRate:
                extersion.luckHitRate = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitVal:
                extersion.luckHitVal = (int)value;
                break;
            case PlayerDataRefresh.ExpPoint:
                baseData.ExpPoint = (ushort)value;
                break;
            case PlayerDataRefresh.Rune:
                ModelCenter.Instance.GetModel<RuneModel>().SetRuneChip((int)value);
                break;
            case PlayerDataRefresh.RuneSplinters:
                ModelCenter.Instance.GetModel<RuneModel>().SetRuneSplinters((int)value);
                break;
            case PlayerDataRefresh.FamilyContribution:
                method.CepaContribution((int)value);
                break;
            case PlayerDataRefresh.FamilyStoreScore:
                ModelCenter.Instance.GetModel<PlayerFairyAuTreasureData>().FairyAuIntegral((int)value);
                break;
            case PlayerDataRefresh.SuperHitReduce:
                extersion.SuperHitReduce = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitRateReduce:
                extersion.LuckyHitRateReduce = (int)value;
                break;
            case PlayerDataRefresh.SkillAtkRateReduce:
                extersion.skillAtkRateReduce = (int)value;
                break;
            case PlayerDataRefresh.SkillAtkRate:
                extersion.SkillAtkRate = (int)value;
                break;
            case PlayerDataRefresh.Damageper:
                extersion.DamagePer = (int)value;
                break;
            case PlayerDataRefresh.HPRestorePer:
                extersion.HPRestorePer = (int)value;
                break;
            case PlayerDataRefresh.DamageBackRate:
                extersion.DamageBackRate = (int)value;
                break;
            case PlayerDataRefresh.SpeedValue:
                extersion.SpeedValue = (int)value;
                if (hero != null)
                {
                    hero.CalculateMoveSpeed((ushort)extersion.SpeedValue);
                }
                break;
            case PlayerDataRefresh.DungeonLineId:
                break;
            case PlayerDataRefresh.PetDamPer:
                extersion.PetDamPer = (int)value;
                break;
            case PlayerDataRefresh.IgnoreDefRate:
                extersion.IgnoreDefRate = (int)value;
                break;
            case PlayerDataRefresh.IgnoreDefRateReduce:
                extersion.IgnoreDefRateReduce = (int)value;
                break;
            case PlayerDataRefresh.DamChanceDef:
                extersion.DamChanceDef = (int)value;
                break;
            case PlayerDataRefresh.BleedDamage:
                extersion.BleedDamage = (int)value;
                break;
            case PlayerDataRefresh.BattleValEx2:
                extersion.BattleValEx2 = (int)value;
                break;
            case PlayerDataRefresh.FaintRate:
                extersion.FaintRate = (int)value;
                break;
            case PlayerDataRefresh.FaintDefRate:
                extersion.FaintDefRate = (int)value;
                break;
            case PlayerDataRefresh.FinalHurt:
                extersion.FinalHurt = (int)value;
                break;
            case PlayerDataRefresh.FinalHurtReduce:
                extersion.FinalHurtReduce = (int)value;
                break;
            case PlayerDataRefresh.DamagePerPVP:
                extersion.DamagePerPVP = (int)value;
                break;
            case PlayerDataRefresh.DamagePerPVPReduce:
                extersion.DamagePerPVPReduce = (int)value;
                break;
            case PlayerDataRefresh.ComboDamPer:
                extersion.ComboDamPer = (int)value;
                break;
            case PlayerDataRefresh.ComboDamRate:
                extersion.ComboDamPerRate = (int)value;
                break;
            case PlayerDataRefresh.RealmPoint:
                extersion.realmPoint = (int)value;
                break;
            case PlayerDataRefresh.MagicEssence:
                extersion.magicEssence = (int)value;
                break;
            case PlayerDataRefresh.PlayerPKState:
                extersion.pkState = (int)value;
                if (hero != null)
                {
                    if (value == 1)
                    {
                        if (MapArea.IsOutMapArea(hero.CurMapArea, MapArea.E_Type.Neutral))
                        {
                            hero.SwitchGrayName(true);
                        }
                    }
                    else if (value == 0)
                    {
                        hero.SwitchGrayName(false);
                        if (StatusMgr.Instance.IsExist(PlayerId, StatusMgr.Instance.redNameBuffID))
                        {
                            hero.SwitchRedName(true);
                        }
                    }
                }
                break;
            case PlayerDataRefresh.IsAttackBossState:
                extersion.bossState = (int)value;
                break;
            case PlayerDataRefresh.BasicsMinimum:
                baseData.BasicsMinimum = (int)value;
                break;
            case PlayerDataRefresh.BasicsMaxAttack:
                baseData.BasicsMaxAttack = (int)value;
                break;
            case PlayerDataRefresh.BasicsLife:
                baseData.BasicsLife = (int)value;
                break;
            case PlayerDataRefresh.BasicsDefense:
                baseData.BasicsDefense = (int)value;
                break;
            case PlayerDataRefresh.BasicsScoreAHit:
                baseData.BasicsScoreAHit = (int)value;
                break;
            case PlayerDataRefresh.BasicsDodge:
                baseData.BasicsDodge = (int)value;
                break;
            case PlayerDataRefresh.OnlyFinalHurt:
                extersion.OnlyFinalHurt = (int)value;
                break;
        }
    }
    public int GetPlayerDataByType(PlayerDataRefresh type)
    {
        int value = 0;
        PlayerDataDict.TryGetValue(type, out value);
        return value;
    }
    public void OnRefreshWorldLV(uint worldLv, uint worldExpRate)
    {
        this.worldLv = worldLv;
        this.worldExpRate = worldExpRate;
        if (OnRoleAttrRefresh != null)
        {
            OnRoleAttrRefresh();
        }
    }
    public void OnRecv_SwitchAttackMode(byte attackMode)
    {
        baseData.AttackMode = attackMode;
        if (OnSwitchAttackMode != null)
        {
            OnSwitchAttackMode((E_AttackMode)attackMode);
        }
        if (hero == null)
        {
            return;
        }
        ReCheckAttackTarget();
    }
    public void ReCheckAttackTarget(GA_Player _player = null)
    {
        if (hero == null)
        {
            return;
        }
        if (_player == null)
        {
            _player = hero.SelectTarget as GA_Player;
        }
        if (_player != null)
        {
            if (_player.CanAtked())
            {
                SelectionManager.Request(SelectionManager.E_Type.Red, _player);
            }
            else
            {
                SelectionManager.Request(SelectionManager.E_Type.Green, _player);
                if (hero.aiHandler.IsAuto())
                {
                    hero.LockTarget = null;
                }
                else if (hero.aiHandler.currentType == E_HeroAIType.KillUntilDie)
                {
                    hero.Behaviour.StopKillUntilDieAI();
                }
            }
        }
        hero.SwitchTarget();
    }
    /// <summary>
    /// 是否是装备, 这里的装备指的是: 武器, 帽子, 衣服, 下装, 鞋子, 腰带
    /// </summary>
    /// <returns></returns>
    public bool IsEquip(E_ItemType itemType)
    {
        return itemType >= E_ItemType.Equip_Weapon && itemType <= E_ItemType.Equip_Shoes;
    }
    public void RequestWorldTick()
    {
        CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();
        GameNetSystem.Instance.SendInfo(_proto);
    }
    public uint GetWorldTick()
    {
        int _currentTick = Environment.TickCount - m_Tick;
        uint _tick = extersion.Tick + (uint)_currentTick;
        return _tick;
    }
}
using UnityEngine;
using System.Collections.Generic;
using System;
using Snxxz.UI;
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 PlayerBaseData baseData { get { return m_Base; } }
    PlayerExtersionData m_Extersion = new PlayerExtersionData();
    public PlayerExtersionData extersion { get { return m_Extersion; } }
    public PlayerFairyData fairyData = new PlayerFairyData();
    public PlayerMarketData market = new PlayerMarketData();
    public PlayerRealmData realm = new PlayerRealmData();
    PlayerSkillDatas m_Skill = new PlayerSkillDatas();
    public PlayerSkillDatas skill { get { return m_Skill; } }
    PlayerStrengthengDatas m_StrengthengModel;
    PlayerStrengthengDatas strengthengmodel { get { return m_StrengthengModel ?? (m_StrengthengModel = ModelCenter.Instance.GetModel<PlayerStrengthengDatas>()); } }
    PlayerMethodData M_Method;
    PlayerMethodData method { get { return M_Method ?? (M_Method = ModelCenter.Instance.GetModel<PlayerMethodData>()); } }
    PlayerRankData m_Rank = new PlayerRankData();
    public PlayerRankData rank { get { return m_Rank; } }
    StoreModel m_StoreModel;
    StoreModel StoreModel
    {
        get { return m_StoreModel ?? (m_StoreModel = ModelCenter.Instance.GetModel<StoreModel>()); }
    }
    public int totalExpRate { get; set; }
    public uint worldLv { get; private set; }
    public uint worldExpRate { get; private set; }
    public List<uint> maliciousAtkPlayer = new List<uint>();// 发动恶意攻击的玩家列表
    private int m_Tick;
    public event Action OnRoleAttrRefresh;
    public event Action<E_AttackMode> OnSwitchAttackMode;
    public event Action InitPlayerInfoEvent;
    public event Action RefreshPlayerInfoEvent;
    public event Action<PlayerDataRefresh> PlayerDataRefreshInfoEvent;
    public event Action<PlayerDataRefresh, int> attributePromoteEvent;
    public event Action<PlayerDataRefresh, int> PlayerDataRefreshEvent;
    public event Action<long> spNewGetEvent;
    private Dictionary<PlayerDataRefresh, int> PlayerDataDict = new Dictionary<PlayerDataRefresh, int>();
    public void InitPlayerData(H0102_tagCDBPlayer data)
    {
        baseData.UpdateData(data);
        HangUpSetModel.Instance.SetOfflinePluginTime((int)baseData.HappyPoint);
        if (InitPlayerInfoEvent != null)
        {
            InitPlayerInfoEvent();
        }
    }
    public void FightRefreshPlayerHp(uint hp)
    {
        RefreshProperty(PlayerDataRefresh.HP, hp);
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
        if (PlayerDataRefreshInfoEvent != null)
        {
            PlayerDataRefreshInfoEvent(PlayerDataRefresh.HP);
        }
    }
    public void RefreshPlayerData(H0418_tagObjInfoRefresh vNetData)
    {
        UpdatePlayerData(vNetData);
        StoreModel.RefreshTCBPlayerData(vNetData);
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
    }
    public void RefreshPlayerData(HA709_tagObjInfoListRefresh vNetData)
    {
        if (baseData == null || vNetData.ObjID != PlayerId)
        {
            return;
        }
        for (int i = 0; i < vNetData.Count; i++)
        {
            var data = new H0418_tagObjInfoRefresh();
            data.ObjID = vNetData.ObjID;
            data.ObjType = vNetData.ObjType;
            data.RefreshType = vNetData.RefreshType[i].RefreshType;
            data.Value = vNetData.RefreshType[i].Value;
            StoreModel.RefreshTCBPlayerData(data);
            UpdatePlayerData(data);
        }
        if (RefreshPlayerInfoEvent != null)
        {
            RefreshPlayerInfoEvent();
        }
    }
    private void UpdatePlayerData(H0418_tagObjInfoRefresh vNetData)
    {
        if (baseData != null && vNetData.ObjID == baseData.PlayerID)
        {
            var deltaValue = -1;
            switch ((PlayerDataRefresh)vNetData.RefreshType)
            {
                case PlayerDataRefresh.MaxHP:
                    deltaValue = (int)(vNetData.Value - extersion.MaxHP);
                    break;
                case PlayerDataRefresh.MAXATK:
                    deltaValue = (int)(vNetData.Value - extersion.MAXATK);
                    break;
                case PlayerDataRefresh.MINATK:
                    deltaValue = (int)(vNetData.Value - extersion.MINATK);
                    break;
                case PlayerDataRefresh.DEF:
                    deltaValue = (int)(vNetData.Value - extersion.DEF);
                    break;
                case PlayerDataRefresh.HIT:
                    deltaValue = (int)(vNetData.Value - extersion.HIT);
                    break;
                case PlayerDataRefresh.Miss:
                    deltaValue = (int)(vNetData.Value - extersion.Miss);
                    break;
                case PlayerDataRefresh.BattleValEx1:
                    deltaValue = (int)(vNetData.Value - extersion.battleValEx1);
                    break;
                case PlayerDataRefresh.SpeedValue:
                    deltaValue = (int)(vNetData.Value - extersion.SpeedValue);
                    break;
                default:
                    deltaValue = -1;
                    break;
            }
            if (deltaValue > 0 && attributePromoteEvent != null)
            {
                attributePromoteEvent((PlayerDataRefresh)vNetData.RefreshType, deltaValue);
            }
            var recordSp = -1L;
            if ((PlayerDataRefresh)vNetData.RefreshType == PlayerDataRefresh.ExAttr7 || (PlayerDataRefresh)vNetData.RefreshType == PlayerDataRefresh.ExAttr8)
            {
                recordSp = baseData.treasurePotentialSp;
            }
            RefreshProperty((PlayerDataRefresh)vNetData.RefreshType, vNetData.Value);
            if (recordSp > 0 && spNewGetEvent != null)
            {
                var deltaSp = baseData.treasurePotentialSp - recordSp;
                if (deltaSp > 0)
                {
                    spNewGetEvent(deltaSp);
                }
            }
            if (PlayerDataDict.ContainsKey((PlayerDataRefresh)vNetData.RefreshType))
            {
                PlayerDataDict[(PlayerDataRefresh)vNetData.RefreshType] = (int)vNetData.Value;
            }
            else
            {
                PlayerDataDict.Add((PlayerDataRefresh)vNetData.RefreshType, (int)vNetData.Value);
            }
            if (PlayerDataRefreshInfoEvent != null)
            {
                PlayerDataRefreshInfoEvent((PlayerDataRefresh)vNetData.RefreshType);
            }
            if (PlayerDataRefreshEvent != null)
            {
                PlayerDataRefreshEvent((PlayerDataRefresh)vNetData.RefreshType, (int)vNetData.Value);
            }
        }
    }
    public void RefreshProperty(PlayerDataRefresh _type, uint value)
    {
        switch (_type)
        {
            case PlayerDataRefresh.AccountID:
                baseData.AccID = value.ToString();
                break;
            case PlayerDataRefresh.PlayerID:
                baseData.PlayerID = value;
                break;
            case PlayerDataRefresh.PlayerName:
                break;
            case PlayerDataRefresh.Sex:
                baseData.Sex = (byte)value;
                break;
            case PlayerDataRefresh.Job:
                baseData.Job = (byte)value;
                break;
            case PlayerDataRefresh.LV:
                if (baseData.LV != 0 && value > baseData.LV)
                {
                    if (hero != null)
                    {
                        if (PlayerDatas.Instance.baseData.MapID == 31080)
                        {
                            SFXPlayUtility.Instance.PlayBattleEffect(1156, hero);
                        }
                        else
                        {
                            SFXPlayUtility.Instance.PlayBattleEffect(1039, hero);
                        }
                    }
                }
                baseData.LV = (ushort)value;
                break;
            case PlayerDataRefresh.TotalExp:
                baseData.TotalExp = value;
                break;
            case PlayerDataRefresh.Family:
                baseData.Family = value;
                if (hero != null)
                {
                    hero.ActorInfo.familyID = value;
                    ReCheckAttackTarget();
                }
                break;
            case PlayerDataRefresh.TeamHornor:
                break;
            case PlayerDataRefresh.PKValue:
                break;
            case PlayerDataRefresh.FamilyHornor:
                break;
            case PlayerDataRefresh.FamilyActiveValue:
                break;
            case PlayerDataRefresh.CountryHornor:
                break;
            case PlayerDataRefresh.Mate:
                break;
            case PlayerDataRefresh.Gold:
                baseData.Gold = value;
                break;
            case PlayerDataRefresh.GoldPaper:
                baseData.GoldPaper = value;
                break;
            case PlayerDataRefresh.Silver:
                baseData.Silver = value;
                strengthengmodel.MoneyData();
                break;
            case PlayerDataRefresh.SilverPaper:
                baseData.SilverPaper = value;
                break;
            case PlayerDataRefresh.FightPoint:
                baseData.FightPoint = value;
                ModelCenter.Instance.GetModel<PlayerMainDate>().PowerAdd((int)value);
                break;
            case PlayerDataRefresh.HappyPoint:
                baseData.HappyPoint = value;
                DebugEx.LogError("脱机挂时间" + (int)value);
                break;
            case PlayerDataRefresh.MapID:
                baseData.MapID = (ushort)value;
                break;
            case PlayerDataRefresh.PosX:
                baseData.PosX = (ushort)value;//角色坐标x
                break;
            case PlayerDataRefresh.PosY:
                baseData.PosY = (ushort)value;//角色坐标y
                break;
            case PlayerDataRefresh.State:
                baseData.State = (byte)value;
                break;
            case PlayerDataRefresh.MaxHP:
                extersion.MaxHP = (int)value;
                if (hero != null)
                {
                    hero.ActorInfo.ResetHp(-1, -1, (int)value);
                }
                break;
            case PlayerDataRefresh.HP:
                baseData.HP = value;
                if (hero != null)
                {
                    hero.ActorInfo.ResetHp((int)value);
                }
                break;
            case PlayerDataRefresh.MaxMP:
                extersion.MaxMP = (int)value;
                break;
            case PlayerDataRefresh.XP:
                baseData.XP = value;
                break;
            case PlayerDataRefresh.HPRestoreSetting:
                break;
            case PlayerDataRefresh.MPRestoreSetting:
                break;
            case PlayerDataRefresh.ExpRate:
                extersion.ExpRate = (int)value;
                break;
            case PlayerDataRefresh.DEF:
                extersion.DEF = (int)value;
                break;
            case PlayerDataRefresh.FreePoint:
                baseData.FreePoint = value;
                ModelCenter.Instance.GetModel<RolePointModel>().UpdateRedPoint();
                break;
            case PlayerDataRefresh.FreeSkillPoint:
                baseData.FreeSkillPoint = value;
                break;
            case PlayerDataRefresh.STR:
                baseData.STR = (int)value;
                break;
            case PlayerDataRefresh.PNE:
                baseData.PNE = (int)value;
                break;
            case PlayerDataRefresh.PHY:
                baseData.PHY = (int)value;
                break;
            case PlayerDataRefresh.CON:
                baseData.CON = (int)value;
                break;
            case PlayerDataRefresh.MINATK:
                extersion.MINATK = (int)value;
                break;
            case PlayerDataRefresh.MAXATK:
                extersion.MAXATK = (int)value;
                break;
            case PlayerDataRefresh.MAtkMin:
                break;
            case PlayerDataRefresh.MAtkMax:
                break;
            case PlayerDataRefresh.MDef:
                break;
            case PlayerDataRefresh.HIT:
                extersion.HIT = (int)value;
                break;
            case PlayerDataRefresh.POISIONATK:
                break;
            case PlayerDataRefresh.FIREATK:
                break;
            case PlayerDataRefresh.REALATK:
                extersion.realATK = (int)value;
                break;
            case PlayerDataRefresh.THUNDERATK:
                break;
            case PlayerDataRefresh.WINDATK:
                break;
            case PlayerDataRefresh.POISIONDEF:
                break;
            case PlayerDataRefresh.FIREDEF:
                break;
            case PlayerDataRefresh.REALDEF:
                extersion.realDEF = (int)value;
                break;
            case PlayerDataRefresh.THUNDERDEF:
                break;
            case PlayerDataRefresh.WINDDEF:
                break;
            case PlayerDataRefresh.Miss:
                extersion.Miss = (int)value;
                break;
            case PlayerDataRefresh.SuperHit:
                extersion.SuperHit = (int)value;
                break;
            case PlayerDataRefresh.Buff:
                break;
            case PlayerDataRefresh.Skill:
                break;
            case PlayerDataRefresh.Mark:
                break;
            case PlayerDataRefresh.SettingH:
                break;
            case PlayerDataRefresh.SettingV:
                break;
            case PlayerDataRefresh.FightPK:
                break;
            case PlayerDataRefresh.ActiveValue:
                break;
            case PlayerDataRefresh.NameColor:
            case PlayerDataRefresh.AtkInterval:
                extersion.AtkInterval = (int)value;
                break;
            case PlayerDataRefresh.Speed:
                extersion.Speed = (int)value;
                break;
            case PlayerDataRefresh.SuperHitRate:
                extersion.SuperHitRate = (int)value;
                break;
            case PlayerDataRefresh.PickupDist:
                extersion.PickupDist = (int)value;
                break;
            case PlayerDataRefresh.CountryLastWeekHornor:
                break;
            case PlayerDataRefresh.LastWeekOnlineTime:
                break;
            case PlayerDataRefresh.LastWeekFamilyActiveValue:
                break;
            case PlayerDataRefresh.FBID:
                baseData.FBID = (byte)value;
                break;
            case PlayerDataRefresh.FamilyLV:
                break;
            case PlayerDataRefresh.RealMapID:
                extersion.RealMapID = (int)value;
                break;
            case PlayerDataRefresh.GMLevel:
                baseData.GMLevel = (byte)value;
                break;
            case PlayerDataRefresh.TeamID:
                if (hero != null)
                {
                    hero.ActorInfo.teamID = value;
                    ReCheckAttackTarget();
                }
                break;
            case PlayerDataRefresh.TeamLV:
                break;
            case PlayerDataRefresh.FightPower:
                baseData.FightPoint = value;
                ModelCenter.Instance.GetModel<PlayerMainDate>().PowerAdd((int)value);
                break;
            case PlayerDataRefresh.RebornMapID:
                break;
            case PlayerDataRefresh.RebornPosX:
                break;
            case PlayerDataRefresh.RebornPosY:
                break;
            case PlayerDataRefresh.Coin:
                break;
            case PlayerDataRefresh.BillboardLV:
                break;
            case PlayerDataRefresh.Tick:
#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;
                break;
            case PlayerDataRefresh.CurrentPlayerType:
                break;
            case PlayerDataRefresh.FriendFavor:
                break;
            case PlayerDataRefresh.BackpackLV:
                break;
            case PlayerDataRefresh.ReincarnationLV:
                break;
            case PlayerDataRefresh.BaseSTR:
                break;
            case PlayerDataRefresh.BasePNE:
                break;
            case PlayerDataRefresh.BasePHY:
                break;
            case PlayerDataRefresh.BaseCON:
                break;
            case PlayerDataRefresh.ReceivedSalary:
                break;
            case PlayerDataRefresh.WarehouseLV:
                break;
            case PlayerDataRefresh.EquipShowSwitch:
                break;
            case PlayerDataRefresh.LuckValue:
                break;
            case PlayerDataRefresh.ExAttr1:
                baseData.ExAttr1 = value;
                break;
            case PlayerDataRefresh.ExAttr2:
                baseData.ExAttr2 = value;
                break;
            case PlayerDataRefresh.ExAttr3:
                baseData.dungeonLineId = (int)value;
                break;
            case PlayerDataRefresh.ExAttr4:
                baseData.ExAttr4 = value;
                break;
            case PlayerDataRefresh.ExAttr5:
                baseData.ExAttr5 = value;
                break;
            case PlayerDataRefresh.Faction:
                baseData.faction = value;
                if (hero != null)
                {
                    hero.ActorInfo.faction = (int)value;
                    ReCheckAttackTarget();
                    hero.SetFairyLeagueHeadUp(baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON);
                }
                break;
            case PlayerDataRefresh.InfamyValue:
                break;
            case PlayerDataRefresh.OfficialRank:
                baseData.realmLevel = (byte)value;
                break;
            case PlayerDataRefresh.IsFindByLabel:
                break;
            case PlayerDataRefresh.IsCloseFriendLabel:
                break;
            case PlayerDataRefresh.ChangeCoinPointTotal:
                baseData.coinPointTotal = value;
                break;
            case PlayerDataRefresh.VIPLv:
                if (baseData.VIPLv <= 0 && value > 0)
                {
                    ModelCenter.Instance.GetModel<SetPrivateModel>().SetVipPushNotify((int)value);
                }
                else if (value <= 0)
                {
                    ModelCenter.Instance.GetModel<SetPrivateModel>().SetVipPushNotify(0);
                }
                baseData.VIPLv = (byte)value;
                break;
            case PlayerDataRefresh.ExAttr6:
                baseData.ExAttr6 = value;
                strengthengmodel.MoneyData();
                break;
            case PlayerDataRefresh.ExAttr7:
                baseData.ExAttr7 = value;
                break;
            case PlayerDataRefresh.ExAttr8:
                baseData.ExAttr8 = value;
                break;
            case PlayerDataRefresh.ExAttr9:
                baseData.ExAttr9 = value;
                break;
            case PlayerDataRefresh.ExAttr10:
                baseData.ExAttr10 = value;
                break;
            case PlayerDataRefresh.ModelMark:
                break;
            case PlayerDataRefresh.PrizeCoin:
                break;
            case PlayerDataRefresh.ExAttr11:
                baseData.ExAttr11 = value;
                break;
            case PlayerDataRefresh.ExAttr12:
                baseData.ExAttr12 = value;
                break;
            case PlayerDataRefresh.ExAttr13:
                baseData.ExAttr13 = value;
                break;
            case PlayerDataRefresh.ExAttr14:
                baseData.ExAttr14 = value;
                break;
            case PlayerDataRefresh.BattleValEx1:
                extersion.battleValEx1 = (int)value;
                if (hero != null)
                {
                    hero.CalculateAtkSpeed((ushort)extersion.battleValEx1);
                }
                break;
            case PlayerDataRefresh.BattleValEx3:
                extersion.battleValEx3 = (int)value;
                break;
            case PlayerDataRefresh.DamageReduceRate:
                extersion.damageReduceRate = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitRate:
                extersion.luckHitRate = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitVal:
                extersion.luckHitVal = (int)value;
                break;
            case PlayerDataRefresh.ExpPoint:
                baseData.ExpPoint = (ushort)value;
                break;
            case PlayerDataRefresh.Rune:
                ModelCenter.Instance.GetModel<RuneModel>().SetRuneChip((int)value);
                break;
            case PlayerDataRefresh.RuneSplinters:
                ModelCenter.Instance.GetModel<RuneModel>().SetRuneSplinters((int)value);
                break;
            case PlayerDataRefresh.FamilyContribution:
                method.CepaContribution((int)value);
                break;
            case PlayerDataRefresh.FamilyStoreScore:
                ModelCenter.Instance.GetModel<PlayerFairyAuTreasureData>().FairyAuIntegral((int)value);
                break;
            case PlayerDataRefresh.SuperHitReduce:
                extersion.SuperHitReduce = (int)value;
                break;
            case PlayerDataRefresh.LuckyHitRateReduce:
                extersion.LuckyHitRateReduce = (int)value;
                break;
            case PlayerDataRefresh.SkillAtkRateReduce:
                extersion.skillAtkRateReduce = (int)value;
                break;
            case PlayerDataRefresh.SkillAtkRate:
                extersion.SkillAtkRate = (int)value;
                break;
            case PlayerDataRefresh.Damageper:
                extersion.DamagePer = (int)value;
                break;
            case PlayerDataRefresh.HPRestorePer:
                extersion.HPRestorePer = (int)value;
                break;
            case PlayerDataRefresh.DamageBackRate:
                extersion.DamageBackRate = (int)value;
                break;
            case PlayerDataRefresh.SpeedValue:
                extersion.SpeedValue = (int)value;
                if (hero != null)
                {
                    hero.CalculateMoveSpeed((ushort)extersion.SpeedValue);
                }
                break;
            case PlayerDataRefresh.DungeonLineId:
                break;
            case PlayerDataRefresh.PetDamPer:
                extersion.PetDamPer = (int)value;
                break;
            case PlayerDataRefresh.IgnoreDefRate:
                extersion.IgnoreDefRate = (int)value;
                break;
            case PlayerDataRefresh.IgnoreDefRateReduce:
                extersion.IgnoreDefRateReduce = (int)value;
                break;
            case PlayerDataRefresh.DamChanceDef:
                extersion.DamChanceDef = (int)value;
                break;
            case PlayerDataRefresh.BleedDamage:
                extersion.BleedDamage = (int)value;
                break;
            case PlayerDataRefresh.BattleValEx2:
                extersion.BattleValEx2 = (int)value;
                break;
            case PlayerDataRefresh.FaintRate:
                extersion.FaintRate = (int)value;
                break;
            case PlayerDataRefresh.FaintDefRate:
                extersion.FaintDefRate = (int)value;
                break;
            case PlayerDataRefresh.FinalHurt:
                extersion.FinalHurt = (int)value;
                break;
            case PlayerDataRefresh.FinalHurtReduce:
                extersion.FinalHurtReduce = (int)value;
                break;
            case PlayerDataRefresh.DamagePerPVP:
                extersion.DamagePerPVP = (int)value;
                break;
            case PlayerDataRefresh.DamagePerPVPReduce:
                extersion.DamagePerPVPReduce = (int)value;
                break;
            case PlayerDataRefresh.ComboDamPer:
                extersion.ComboDamPer = (int)value;
                break;
            case PlayerDataRefresh.ComboDamRate:
                extersion.ComboDamPerRate = (int)value;
                break;
            case PlayerDataRefresh.RealmPoint:
                extersion.realmPoint = (int)value;
                break;
            case PlayerDataRefresh.MagicEssence:
                extersion.magicEssence = (int)value;
                break;
            case PlayerDataRefresh.PlayerPKState:
                extersion.pkState = (int)value;
                if (hero != null)
                {
                    if (value == 1)
                    {
                        if (MapArea.IsOutMapArea(hero.CurMapArea, MapArea.E_Type.Neutral))
                        {
                            hero.SwitchGrayName(true);
                        }
                    }
                    else if (value == 0)
                    {
                        hero.SwitchGrayName(false);
                        if (StatusMgr.Instance.IsExist(PlayerId, StatusMgr.Instance.redNameBuffID))
                        {
                            hero.SwitchRedName(true);
                        }
                    }
                }
                break;
            case PlayerDataRefresh.IsAttackBossState:
                extersion.bossState = (int)value;
                if (hero != null)
                {
                    if (extersion.bossState == 0)
                    {
                        hero.atkBossID = 0;
                    }
                }
                break;
            case PlayerDataRefresh.BasicsMinimum:
                baseData.BasicsMinimum = (int)value;
                break;
            case PlayerDataRefresh.BasicsMaxAttack:
                baseData.BasicsMaxAttack = (int)value;
                break;
            case PlayerDataRefresh.BasicsLife:
                baseData.BasicsLife = (int)value;
                break;
            case PlayerDataRefresh.BasicsDefense:
                baseData.BasicsDefense = (int)value;
                break;
            case PlayerDataRefresh.BasicsScoreAHit:
                baseData.BasicsScoreAHit = (int)value;
                break;
            case PlayerDataRefresh.BasicsDodge:
                baseData.BasicsDodge = (int)value;
                break;
            case PlayerDataRefresh.OnlyFinalHurt:
                extersion.OnlyFinalHurt = (int)value;
                break;
        }
    }
    public int GetPlayerDataByType(PlayerDataRefresh type)
    {
        int value = 0;
        PlayerDataDict.TryGetValue(type, out value);
        return value;
    }
    public void OnRefreshWorldLV(uint worldLv, uint worldExpRate)
    {
        this.worldLv = worldLv;
        this.worldExpRate = worldExpRate;
        if (OnRoleAttrRefresh != null)
        {
            OnRoleAttrRefresh();
        }
    }
    public void OnRecv_SwitchAttackMode(byte attackMode)
    {
        baseData.AttackMode = attackMode;
        if (OnSwitchAttackMode != null)
        {
            OnSwitchAttackMode((E_AttackMode)attackMode);
        }
        if (hero == null)
        {
            return;
        }
        ReCheckAttackTarget();
    }
    public void ReCheckAttackTarget(GA_Player _player = null)
    {
        if (hero == null)
        {
            return;
        }
        if (_player == null)
        {
            _player = hero.SelectTarget as GA_Player;
        }
        if (_player != null)
        {
            if (_player.CanAtked())
            {
                SelectionManager.Request(SelectionManager.E_Type.Red, _player);
            }
            else
            {
                SelectionManager.Request(SelectionManager.E_Type.Green, _player);
                if (hero.aiHandler.IsAuto())
                {
                    hero.LockTarget = null;
                }
                else if (hero.aiHandler.currentType == E_HeroAIType.KillUntilDie)
                {
                    hero.Behaviour.StopKillUntilDieAI();
                }
            }
        }
        hero.SwitchTarget();
    }
    /// <summary>
    /// 是否是装备, 这里的装备指的是: 武器, 帽子, 衣服, 下装, 鞋子, 腰带
    /// </summary>
    /// <returns></returns>
    public bool IsEquip(E_ItemType itemType)
    {
        return itemType >= E_ItemType.Equip_Weapon && itemType <= E_ItemType.Equip_Shoes;
    }
    public void RequestWorldTick()
    {
        CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();
        GameNetSystem.Instance.SendInfo(_proto);
    }
    public uint GetWorldTick()
    {
        int _currentTick = Environment.TickCount - m_Tick;
        uint _tick = extersion.Tick + (uint)_currentTick;
        return _tick;
    }
}