| using UnityEngine; | 
| using System.Collections.Generic; | 
| using System; | 
| using LitJson; | 
|   | 
|   | 
| public class PlayerDatas : Singleton<PlayerDatas> | 
| { | 
|     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(); | 
|   | 
|     // PlayerSkillDatas m_Skill = new PlayerSkillDatas(); | 
|     // public PlayerSkillDatas skill { get { return m_Skill; } } | 
|     // PlayerMethodData method { get { return ModelCenter.Instance.GetModel<PlayerMethodData>(); } } | 
|     // StoreModel StoreModel { get { return ModelCenter.Instance.GetModel<StoreModel>(); } } | 
|     // DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel<DungeonAssistModel>(); } } | 
|   | 
|     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 uint changeLV = 0; //当前升x级 | 
|   | 
|     public event Action worldLevelUpdateEvent; | 
|   | 
|     public event Action playerDataUpdateEvent;    // 无区别更新,慎用 | 
|     public event Action<PlayerDataType> playerDataRefreshEvent; | 
|     public event Action<PlayerDataType, int> attributePromoteEvent; | 
|     public event Action<long> spNewGetEvent; | 
|   | 
|   | 
|     private Dictionary<PlayerDataType, ulong> PlayerDataDict = new Dictionary<PlayerDataType, ulong>(); | 
|   | 
|     public void InitPlayerData(H0102_tagCDBPlayer data) | 
|     {  | 
|         baseData.UpdateData(data);  | 
|         if (playerDataUpdateEvent != null)  | 
|         {  | 
|             playerDataUpdateEvent();  | 
|         } | 
|     } | 
|   | 
|     public void UpdatePlayerData(/*HA112_tagMCDBPlayer data*/) | 
|     { | 
|         // baseData.UpdateData(data); | 
|         // if (hero != null) | 
|         // { | 
|         //     hero.InitBornPos(baseData.PosX, baseData.PosY); | 
|         //     CameraController.Instance.Apply(); | 
|         // } | 
|   | 
|         // if (playerDataUpdateEvent != null) | 
|         // { | 
|         //     playerDataUpdateEvent(); | 
|         // } | 
|     } | 
|   | 
|     public void FightRefreshPlayerHp(ulong hp) | 
|     { | 
|         RefreshProperty(PlayerDataType.HP, (uint)(hp % Constants.ExpPointValue), (uint)(hp/Constants.ExpPointValue)); | 
|   | 
|         if (playerDataUpdateEvent != null) | 
|         { | 
|             playerDataUpdateEvent(); | 
|         } | 
|   | 
|         if (playerDataRefreshEvent != null) | 
|         { | 
|             playerDataRefreshEvent(PlayerDataType.HP); | 
|         } | 
|     } | 
|   | 
|     public void RefreshPlayerData(/*H0418_tagObjInfoRefresh vNetData*/) | 
|     { | 
|         // UpdatePlayerData(vNetData); | 
|         // //StoreModel.RefreshTCBPlayerData(vNetData); | 
|         // if (playerDataUpdateEvent != null) | 
|         // { | 
|         //     playerDataUpdateEvent(); | 
|         // } | 
|     } | 
|   | 
|   | 
|     private void UpdatePlayerData(int temp/*H0418_tagObjInfoRefresh vNetData*/) | 
|     { | 
|         // if (baseData != null && vNetData.ObjID == baseData.PlayerID) | 
|         // { | 
|         //     var deltaValue = -1; //变化值用于处理表现 | 
|         //     switch ((PlayerDataType)vNetData.RefreshType) | 
|         //     { | 
|         //         case PlayerDataType.MaxHP: | 
|         //             deltaValue = (int)(vNetData.Value + vNetData.ValueEx * Constants.ExpPointValue - extersion.MaxHP); | 
|         //             break; | 
|         //         case PlayerDataType.MAXATK: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.MAXATK); | 
|         //             break; | 
|         //         case PlayerDataType.MINATK: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.MINATK); | 
|         //             break; | 
|         //         case PlayerDataType.DEF: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.DEF); | 
|         //             break; | 
|         //         case PlayerDataType.HIT: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.HIT); | 
|         //             break; | 
|         //         case PlayerDataType.Miss: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.Miss); | 
|         //             break; | 
|         //         case PlayerDataType.BattleValEx1: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.battleValEx1); | 
|         //             break; | 
|         //         case PlayerDataType.SpeedValue: | 
|         //             deltaValue = (int)(vNetData.Value - extersion.SpeedValue); | 
|         //             break; | 
|         //         default: | 
|         //             deltaValue = -1; | 
|         //             break; | 
|         //     } | 
|   | 
|         //     if (deltaValue > 0 && attributePromoteEvent != null) | 
|         //     { | 
|         //         attributePromoteEvent((PlayerDataType)vNetData.RefreshType, deltaValue); | 
|         //     } | 
|   | 
|         //     RefreshProperty(vNetData.socketType == ServerType.Main, (PlayerDataType)vNetData.RefreshType, vNetData.Value, vNetData.ValueEx); | 
|   | 
|         //     if (PlayerDataDict.ContainsKey((PlayerDataType)vNetData.RefreshType)) | 
|         //     { | 
|         //         PlayerDataDict[(PlayerDataType)vNetData.RefreshType] = vNetData.Value + vNetData.ValueEx * Constants.ExpPointValue; | 
|         //     } | 
|         //     else | 
|         //     { | 
|         //         PlayerDataDict.Add((PlayerDataType)vNetData.RefreshType, vNetData.Value + vNetData.ValueEx * Constants.ExpPointValue); | 
|         //     } | 
|   | 
|         //     if (playerDataRefreshEvent != null) | 
|         //     { | 
|         //         playerDataRefreshEvent((PlayerDataType)vNetData.RefreshType); | 
|         //     } | 
|         // } | 
|     } | 
|   | 
|     public void RefreshProperty(PlayerDataType _type, uint value, uint valueEx) | 
|     { | 
|         switch (_type) | 
|         { | 
|             case PlayerDataType.AccountID: | 
|                 baseData.AccID = value.ToString(); | 
|                 break; | 
|             case PlayerDataType.PlayerID: | 
|                 baseData.PlayerID = value; | 
|                 break; | 
|             case PlayerDataType.PlayerName: | 
|                 break; | 
|             case PlayerDataType.Sex: | 
|                 break; | 
|             case PlayerDataType.Job: | 
|                 baseData.Job = (byte)value; | 
|                 break; | 
|             case PlayerDataType.LV: | 
|                 if (baseData.LV != 0 && value > baseData.LV) | 
|                 { | 
|                     //  TODO YYL 升级特效 | 
|                     // if (hero != null) | 
|                     // { | 
|                     //     if (PlayerDatas.Instance.baseData.MapID == 31080) | 
|                     //     { | 
|                     //         SFXPlayUtility.Instance.PlayBattleEffect(1156, hero); | 
|                     //     } | 
|                     //     else | 
|                     //     { | 
|                     //         SFXPlayUtility.Instance.PlayBattleEffect(1039, hero); | 
|                     //     } | 
|   | 
|                     // } | 
|                 } | 
|                 changeLV = value - baseData.LV; | 
|                 baseData.LV = (ushort)value; | 
|                 if (changeLV > 0) | 
|                 { | 
|                     SDKUtils.Instance.RoleLevelUp(); | 
|                 } | 
|                 break; | 
|             case PlayerDataType.TotalExp: | 
|                 baseData.TotalExp = value; | 
|                 break; | 
|             case PlayerDataType.Family: | 
|                 baseData.FamilyId = value; | 
|                 if (LocalSave.GetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID) == 0) | 
|                 {  | 
|                     SDKUtils.Instance.TraceEvent("joinalliance", "", false); | 
|                     LocalSave.SetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID, 1); | 
|                 } | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.ActorInfo.familyID = value; | 
|                 //     ReCheckAttackTarget(); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.TeamHornor: | 
|                 break; | 
|             case PlayerDataType.PKValue: | 
|                 break; | 
|             case PlayerDataType.FamilyHornor: | 
|                 break; | 
|             case PlayerDataType.FamilyActiveValue: | 
|                 break; | 
|             case PlayerDataType.CountryHornor: | 
|                 break; | 
|             case PlayerDataType.Mate: | 
|                 break; | 
|             case PlayerDataType.Gold: | 
|                 baseData.diamond = value; | 
|                 break; | 
|             case PlayerDataType.GoldPaper: | 
|                 baseData.bindDiamond = value; | 
|                 break; | 
|             case PlayerDataType.Silver: | 
|                 baseData.copper = value; | 
|                 break; | 
|             case PlayerDataType.SilverPaper: | 
|                 break; | 
|             case PlayerDataType.FightPoint: | 
|                 break; | 
|             case PlayerDataType.HappyPoint: | 
|                 break; | 
|             case PlayerDataType.MapID: | 
|                 baseData.MapID = (ushort)value; | 
|                 break; | 
|             case PlayerDataType.PosX: | 
|                 baseData.PosX = (ushort)value;//角色坐标x | 
|                 break; | 
|             case PlayerDataType.PosY: | 
|                 baseData.PosY = (ushort)value;//角色坐标y | 
|                 break; | 
|             case PlayerDataType.State: | 
|                 break; | 
|             case PlayerDataType.MaxHP: | 
|                 extersion.MaxHP = value + valueEx * Constants.ExpPointValue; | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.ActorInfo.ResetHp(-1, (long)extersion.MaxHP); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.HP: | 
|                 baseData.HP = value + valueEx * Constants.ExpPointValue; | 
|                 break; | 
|             case PlayerDataType.MaxMP: | 
|                 extersion.MaxMP = (int)value; | 
|                 break; | 
|   | 
|             case PlayerDataType.HPRestoreSetting: | 
|                 break; | 
|             case PlayerDataType.MPRestoreSetting: | 
|                 break; | 
|             case PlayerDataType.ExpRate: | 
|                 extersion.ExpRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.DEF: | 
|                 extersion.DEF = (int)value; | 
|                 break; | 
|             case PlayerDataType.FreePoint: | 
|                 baseData.FreePoint = value; | 
|                 break; | 
|             case PlayerDataType.FreeSkillPoint: | 
|                 baseData.FreeSkillPoint = value; | 
|                 break; | 
|             case PlayerDataType.STR: | 
|                 baseData.STR = (int)value; | 
|                 break; | 
|             case PlayerDataType.PNE: | 
|                 baseData.PNE = (int)value; | 
|                 break; | 
|             case PlayerDataType.PHY: | 
|                 baseData.PHY = (int)value; | 
|                 break; | 
|             case PlayerDataType.CON: | 
|                 baseData.CON = (int)value; | 
|                 break; | 
|             case PlayerDataType.MINATK: | 
|                 extersion.MINATK = (int)value; | 
|                 break; | 
|             case PlayerDataType.MAXATK: | 
|                 extersion.MAXATK = (int)value; | 
|                 break; | 
|             case PlayerDataType.MAtkMin: | 
|                 break; | 
|             case PlayerDataType.MAtkMax: | 
|                 break; | 
|             case PlayerDataType.MDef: | 
|                 break; | 
|             case PlayerDataType.HIT: | 
|                 extersion.HIT = (int)value; | 
|                 break; | 
|             case PlayerDataType.POISIONATK: | 
|                 break; | 
|             case PlayerDataType.FIREATK: | 
|                 break; | 
|             case PlayerDataType.REALATK: | 
|                 extersion.realATK = (int)value; | 
|                 break; | 
|             case PlayerDataType.THUNDERATK: | 
|                 break; | 
|             case PlayerDataType.WINDATK: | 
|                 break; | 
|             case PlayerDataType.POISIONDEF: | 
|                 break; | 
|             case PlayerDataType.FIREDEF: | 
|                 break; | 
|             case PlayerDataType.REALDEF: | 
|                 extersion.realDEF = (int)value; | 
|                 break; | 
|             case PlayerDataType.THUNDERDEF: | 
|                 break; | 
|             case PlayerDataType.WINDDEF: | 
|                 break; | 
|             case PlayerDataType.Miss: | 
|                 extersion.Miss = (int)value; | 
|                 break; | 
|             case PlayerDataType.SuperHit: | 
|                 extersion.SuperHit = (int)value; | 
|                 break; | 
|             case PlayerDataType.Buff: | 
|                 break; | 
|             case PlayerDataType.Skill: | 
|                 break; | 
|             case PlayerDataType.Mark: | 
|                 break; | 
|             case PlayerDataType.SettingH: | 
|                 break; | 
|             case PlayerDataType.SettingV: | 
|                 break; | 
|             case PlayerDataType.FightPK: | 
|                 break; | 
|             case PlayerDataType.ActiveValue: | 
|                 break; | 
|             case PlayerDataType.NameColor: | 
|             case PlayerDataType.AtkInterval: | 
|                 extersion.AtkInterval = (int)value; | 
|                 break; | 
|             case PlayerDataType.Speed: | 
|                 extersion.Speed = (int)value; | 
|                 break; | 
|             case PlayerDataType.SuperHitRate: | 
|                 extersion.SuperHitRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.PickupDist: | 
|                 extersion.PickupDist = (int)value; | 
|                 break; | 
|             case PlayerDataType.CountryLastWeekHornor: | 
|                 break; | 
|             case PlayerDataType.LastWeekOnlineTime: | 
|                 break; | 
|             case PlayerDataType.LastWeekFamilyActiveValue: | 
|                 break; | 
|             case PlayerDataType.FBID: | 
|                 baseData.FBID = (byte)value; | 
|                 break; | 
|             case PlayerDataType.FamilyLV: | 
|                 break; | 
|             case PlayerDataType.RealMapID: | 
|                 extersion.RealMapID = (int)value; | 
|                 break; | 
|             case PlayerDataType.GMLevel: | 
|                 baseData.GMLevel = (byte)value; | 
|                 break; | 
|             case PlayerDataType.TeamID: | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.ActorInfo.teamID = value; | 
|                 //     ReCheckAttackTarget(); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.TeamLV: | 
|                 break; | 
|             case PlayerDataType.FightPower: | 
|                 baseData.FightPoint = value + valueEx * Constants.ExpPointValue; | 
|                 // TODO YYL | 
|                 // ModelCenter.Instance.GetModel<PlayerMainDate>().PowerAdd(baseData.FightPoint); | 
|                 break; | 
|             case PlayerDataType.RebornMapID: | 
|                 break; | 
|             case PlayerDataType.RebornPosX: | 
|                 break; | 
|             case PlayerDataType.RebornPosY: | 
|                 break; | 
|             case PlayerDataType.Coin: | 
|                 break; | 
|             case PlayerDataType.BillboardLV: | 
|                 break; | 
|             case PlayerDataType.Tick: | 
| #if UNITY_EDITOR | 
|                 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 | 
|                 extersion.Tick = value; | 
|                 m_Tick = Environment.TickCount; | 
|   | 
|                 break; | 
|             case PlayerDataType.CurrentPlayerType: | 
|                 break; | 
|             case PlayerDataType.FriendFavor: | 
|                 break; | 
|             case PlayerDataType.BackpackLV: | 
|                 break; | 
|             case PlayerDataType.ReincarnationLV: | 
|                 break; | 
|             case PlayerDataType.BaseSTR: | 
|                 break; | 
|             case PlayerDataType.BasePNE: | 
|                 break; | 
|             case PlayerDataType.BasePHY: | 
|                 break; | 
|             case PlayerDataType.BaseCON: | 
|                 break; | 
|             case PlayerDataType.ReceivedSalary: | 
|                 break; | 
|             case PlayerDataType.WarehouseLV: | 
|                 break; | 
|             case PlayerDataType.EquipShowSwitch: | 
|                 baseData.equipShowSwitch = value; | 
|                 // TODO YYL | 
| //                 if (hero != null) | 
| //                 { | 
| //                     hero.SwitchSuit(); | 
| //                     hero.ReqLingGenEffect((int)(baseData.equipShowSwitch / 10 % 100), (int)(baseData.equipShowSwitch / 1000 % 1000)); | 
| //                     hero.horseAwakeId = (int)(value / 1000000); | 
| // #if UNITY_EDITOR | 
| //                     if (hero.horseAwakeId != 0) | 
| //                     { | 
| //                         Debug.LogFormat("玩家骑宠觉醒ID改变: {0}", hero.horseAwakeId); | 
| //                     } | 
| // #endif | 
| //                 } | 
|                 break; | 
|             case PlayerDataType.LuckValue: | 
|                 extersion.luckValue = (int)value; | 
|                 break; | 
|             case PlayerDataType.ExAttr1: | 
|                 // TODO YYL | 
|                 // if (hero != null && !hero.ActorInfo.serverDie) | 
|                 // { | 
|                 //     if (hero.aiHandler.IsAuto()) | 
|                 //     { | 
|                 //         hero.Behaviour.StopHandupAI(true); | 
|                 //     } | 
|                 // } | 
|                 baseData.ExAttr1 = value; | 
|                 // TODO YYL | 
|                 // if (baseData.ExAttr1 == 0) | 
|                 //     assistModel.assistGUID = string.Empty; | 
|                 break; | 
|             case PlayerDataType.ExAttr2: | 
|                 baseData.teamAutoOperateFlag = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr3: | 
|                 baseData.dungeonLineId = (int)value % 1000; | 
|                 baseData.dungeonMapId = (int)value / 1000; | 
|                 break; | 
|             case PlayerDataType.ExAttr4: | 
|                 baseData.shield = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr5: | 
|                 var oldExAttr5 = baseData.CrossServerFlag; | 
|                 baseData.CrossServerFlag = value; | 
|   | 
|                 // TODO YYL | 
|                 // if (oldExAttr5 > 2 && value <= 2) | 
|                 // { | 
|                 //     if (GameNetSystem.Instance.crossServerConnected_Loigc) | 
|                 //     { | 
|                 //         GameNetSystem.Instance.crossServerConnected_Loigc = false; | 
|                 //         GameNetSystem.Instance.DisconnectCrossServer(); | 
|   | 
|                 //         // TODO YYL | 
|                 //         // if (hero != null) | 
|                 //         // { | 
|                 //         //     StatusMgr.Instance.ReleaseActor(hero.ServerInstID); | 
|                 //         // } | 
|   | 
|                 //         extersion.pkState = 0; | 
|                 //         baseData.MapID = baseData.mainServerMapIdRecord; | 
|                 //         baseData.dungeonLineId = 0; | 
|                 //         baseData.dungeonMapId = 0; | 
|                 //         ModelCenter.Instance.GetModel<DungeonModel>().ResetBufData(); | 
|   | 
|                 //         StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() | 
|                 //         { | 
|                 //             toMapId = baseData.MapID, | 
|                 //             toLineId = 0, | 
|                 //             needEmpty = true, | 
|                 //             needLoadResource = true, | 
|                 //             isClientLoadMap = true, | 
|                 //             refreshPlayerDatas = true | 
|                 //         }); | 
|                 //     } | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.Faction: | 
|                 baseData.faction = value; | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.ActorInfo.faction = (int)value; | 
|                 //     ReCheckAttackTarget(); | 
|                 //     hero.SetFairyLeagueHeadUp(baseData.MapID == FairyLeagueModel.FAIRY_LEAGUE_DUNGEON); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.InfamyValue: | 
|                 break; | 
|             case PlayerDataType.RealmLevel: | 
|                 baseData.realmLevel = (byte)value; | 
|                 break; | 
|             case PlayerDataType.IsFindByLabel: | 
|                 break; | 
|             case PlayerDataType.IsCloseFriendLabel: | 
|                 break; | 
|             case PlayerDataType.ChangeCoinPointTotal: | 
|                 baseData.coinPointTotal = value; | 
|                 break; | 
|             case PlayerDataType.VIPLv: | 
|                 // TODO YYL | 
|                 // 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 PlayerDataType.ExAttr6: | 
|                 baseData.copperExtend = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr7: | 
|                 baseData.sp = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr8: | 
|                 baseData.spExtend = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr9: | 
|                 break; | 
|             case PlayerDataType.ExAttr10: | 
|                 baseData.bubbleId = value; | 
|                 break; | 
|             case PlayerDataType.ModelMark: | 
|                 break; | 
|             case PlayerDataType.PrizeCoin: | 
|                 break; | 
|             case PlayerDataType.ExAttr11: | 
|                 baseData.ExAttr11 = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr12: | 
|                 break; | 
|             case PlayerDataType.ExAttr13: | 
|                 baseData.ServerGroupId = value; | 
|                 break; | 
|             case PlayerDataType.ExAttr14: | 
|                 break; | 
|             case PlayerDataType.BattleValEx1: | 
|                 extersion.battleValEx1 = (int)value; | 
|                 //  TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.CalculateAtkSpeed((ushort)extersion.battleValEx1); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.BattleValEx3: | 
|                 extersion.battleValEx3 = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamageReduceRate: | 
|                 extersion.damageReduceRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.LuckyHitRate: | 
|                 extersion.luckHitRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.LuckyHitVal: | 
|                 extersion.luckHitVal = (int)value; | 
|                 break; | 
|             case PlayerDataType.ExpPoint: | 
|                 baseData.ExpPoint = value; | 
|                 break; | 
|             case PlayerDataType.Rune: | 
|                 extersion.runeChip = (int)value; | 
|                 break; | 
|             case PlayerDataType.RuneSplinters: | 
|                 extersion.runeEssence = (int)value; | 
|                 break; | 
|             case PlayerDataType.FamilyContribution: | 
|                 // TODO YYL | 
|                 // method.CepaContribution((int)value); | 
|                 break; | 
|             case PlayerDataType.FamilyStoreScore: | 
|                 break; | 
|             case PlayerDataType.SuperHitReduce: | 
|                 extersion.SuperHitReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.LuckyHitRateReduce: | 
|                 extersion.LuckyHitRateReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.SkillAtkRateReduce: | 
|                 extersion.skillAtkRateReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.SkillAtkRate: | 
|                 extersion.SkillAtkRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamagePVP: | 
|                 extersion.DamagePVP = (int)value; | 
|                 break; | 
|             case PlayerDataType.HPRestorePer: | 
|                 extersion.HPRestorePer = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamageBackRate: | 
|                 extersion.DamageBackRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.SpeedValue: | 
|                 extersion.SpeedValue = (int)value; | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     hero.CalculateMoveSpeed((ushort)extersion.SpeedValue); | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.DamagePVE: | 
|                 break; | 
|             case PlayerDataType.PetDamPer: | 
|                 extersion.PetDamPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.IgnoreDefRate: | 
|                 extersion.IgnoreDefRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.IgnoreDefRateReduce: | 
|                 extersion.IgnoreDefRateReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamChanceDef: | 
|                 extersion.DamChanceDef = (int)value; | 
|                 break; | 
|             case PlayerDataType.BleedDamage: | 
|                 extersion.BleedDamage = (int)value; | 
|                 break; | 
|             case PlayerDataType.BattleValEx2: | 
|                 extersion.BattleValEx2 = (int)value; | 
|                 break; | 
|             case PlayerDataType.FaintRate: | 
|                 extersion.FaintRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.FaintDefRate: | 
|                 extersion.FaintDefRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.FinalHurt: | 
|                 extersion.FinalHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.FinalHurtReduce: | 
|                 extersion.FinalHurtReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamagePerPVP: | 
|                 extersion.DamagePerPVP = (int)value; | 
|                 break; | 
|             case PlayerDataType.DamagePerPVPReduce: | 
|                 extersion.DamagePerPVPReduce = (int)value; | 
|                 break; | 
|             case PlayerDataType.ComboDamPer: | 
|                 extersion.ComboDamPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.MaxProDef: | 
|                 extersion.MaxProDef = (int)value; | 
|                 break; | 
|             case PlayerDataType.ComboDamRate: | 
|                 extersion.ComboDamPerRate = (int)value; | 
|                 break; | 
|             case PlayerDataType.RealmPoint: | 
|                 extersion.realmPoint = (int)value; | 
|                 break; | 
|             case PlayerDataType.MagicEssence: | 
|                 extersion.magicEssence = (int)value; | 
|                 break; | 
|             case PlayerDataType.PlayerPKState: | 
|                 extersion.pkState = (int)value; | 
|                 // TODO YYL | 
|   | 
|                 // if (baseData.MapID != 31220 | 
|                 //  && baseData.MapID != 32030 | 
|                 //  && baseData.MapID != 22030) | 
|                 // { | 
|                 //     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 PlayerDataType.IsAttackBossState: | 
|                 extersion.bossState = (int)value; | 
|                 // TODO YYL | 
|                 // if (hero != null) | 
|                 // { | 
|                 //     if (extersion.bossState == 0) | 
|                 //     { | 
|                 //         hero.atkBossID = 0; | 
|                 //     } | 
|                 // } | 
|                 break; | 
|             case PlayerDataType.BasicsMinimum: | 
|                 baseData.BasicsMinimum = (int)value; | 
|                 break; | 
|             case PlayerDataType.BasicsMaxAttack: | 
|                 baseData.BasicsMaxAttack = (int)value; | 
|                 break; | 
|             case PlayerDataType.BasicsLife: | 
|                 baseData.BasicsLife = (int)value; | 
|                 break; | 
|             case PlayerDataType.BasicsDefense: | 
|                 baseData.BasicsDefense = (int)value; | 
|                 break; | 
|             case PlayerDataType.BasicsScoreAHit: | 
|                 baseData.BasicsScoreAHit = (int)value; | 
|                 break; | 
|             case PlayerDataType.BasicsDodge: | 
|                 baseData.BasicsDodge = (int)value; | 
|                 break; | 
|             case PlayerDataType.OnlyFinalHurt: | 
|                 extersion.OnlyFinalHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_NPCHurtAddPer: | 
|                 extersion.NpcHurtAddPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.FunalHurtPer: | 
|                 extersion.FunalHurtPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_ForbidenTalk: | 
|                 extersion.forbidenTalk = (int)value; | 
|                 //与服务端约定 0 单角色解封 1 单角色禁言,2设备禁言,3设备解封 | 
|                 if (value == 2) | 
|                 { | 
|                     LocalSave.SetBool("ServerForbidenChatDevice1", true); | 
|                 } | 
|                 else if (value == 3) | 
|                 { | 
|                     //任意账号解封 | 
|                     LocalSave.SetBool("ServerForbidenChatDevice1", false); | 
|                 } | 
|                 //ModelCenter.Instance.GetModel<ChatCenter>().ServerForbidenChat(extersion.forbidenTalk == 1); | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_TalentPoint: | 
|                 extersion.talentPoint = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_GodWeaponLV_1: | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_GodWeaponLV_2: | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_GodWeaponLV_3: | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_GodWeaponLV_4: | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SoulDust: | 
|                 extersion.soulDust = value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SoulSplinters: | 
|                 extersion.soulSplinters = value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SoulCore: | 
|                 extersion.soulCore = value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Honor: | 
|                 extersion.honorValue = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_ZhuxianRate: | 
|                 baseData.ExAttr16 = value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Mater: | 
|                 baseData.mater = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Wood: | 
|                 baseData.wood = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Water: | 
|                 baseData.water = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Fire: | 
|                 baseData.fire = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_Earth: | 
|                 baseData.earth = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_NormalHurt: | 
|                 baseData.NormalHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_NormalHurtPer: | 
|                 baseData.NormalHurtPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_FabaoHurt: | 
|                 baseData.FabaoHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_FabaoHurtPer: | 
|                 baseData.FabaoHurtPer = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SuperHitRateReduce: | 
|                 baseData.reduceCrit = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_LuckyHitReduce: | 
|                 baseData.reduceHeartHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_FinalHurtReducePer: | 
|                 baseData.reduceFinalHurt = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_YinjiTime: | 
|                 baseData.yinjiTime = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_YinjiCount: | 
|                 baseData.yinjiCount = (int)value; | 
|                 break; | 
|   | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerA: | 
|                 baseData.skillAddPerA = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerB: | 
|                 baseData.skillAddPerB = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerC: | 
|                 baseData.skillAddPerC = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerD: | 
|                 baseData.skillAddPerD = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerE: | 
|                 baseData.skillAddPerE = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerF: | 
|                 baseData.skillAddPerF = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillAddPerG: | 
|                 baseData.skillAddPerG = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerA: | 
|                 baseData.skillReducePerA = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerB: | 
|                 baseData.skillReducePerB = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerC: | 
|                 baseData.skillReducePerC = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerD: | 
|                 baseData.skillReducePerD = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerE: | 
|                 baseData.skillReducePerE = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerF: | 
|                 baseData.skillReducePerF = (int)value; | 
|                 break; | 
|             case PlayerDataType.CDBPlayerRefresh_SkillReducePerG: | 
|                 baseData.skillReducePerG = (int)value; | 
|                 break; | 
|             case PlayerDataType.default9: | 
|                 baseData.mapRealmSelect = (int)value; | 
|                 break; | 
|             case PlayerDataType.default10: | 
|                 baseData.leaveFamilyTime = (int)value; | 
|                 break; | 
|   | 
|         } | 
|     } | 
|   | 
|     public ulong GetPlayerDataByType(PlayerDataType type) | 
|     { | 
|         ulong value = 0; | 
|         PlayerDataDict.TryGetValue(type, out value); | 
|         return value; | 
|     } | 
|   | 
|     public void ClearPlayerData() | 
|     { | 
|         PlayerDataDict.Clear(); | 
|     } | 
|   | 
|     public void OnRefreshWorldLV(uint worldLv, uint worldExpRate) | 
|     { | 
|         this.worldLv = worldLv; | 
|         this.worldExpRate = worldExpRate; | 
|         if (worldLevelUpdateEvent != null) | 
|         { | 
|             worldLevelUpdateEvent(); | 
|         } | 
|     } | 
|   | 
|     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(ItemType itemType) | 
|     { | 
|         return itemType >= ItemType.Equip_Weapon && itemType <= ItemType.Equip_Shoes; | 
|     } | 
|   | 
|     public void RequestWorldTick() | 
|     {  | 
|         CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick();  | 
|         GameNetSystem.Instance.SendInfo(_proto); | 
|     } | 
|   | 
|     public void ClearTick() | 
|     { | 
|         extersion.Tick = 0; | 
|     } | 
|   | 
|     public bool IsTickVaild() | 
|     { | 
|         return extersion.Tick != 0; | 
|     } | 
|   | 
|     public uint GetWorldTick() | 
|     { | 
|         int _currentTick = Environment.TickCount - m_Tick; | 
|         return extersion.Tick + (uint)_currentTick; | 
|     } | 
|   | 
| } |