using UnityEngine; using System.Collections.Generic; using System; using vnxbqy.UI; using LitJson; public class PlayerDatas : Singleton { 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(); PlayerSkillDatas m_Skill = new PlayerSkillDatas(); public PlayerSkillDatas skill { get { return m_Skill; } } PlayerMethodData method { get { return ModelCenter.Instance.GetModel(); } } StoreModel StoreModel { get { return ModelCenter.Instance.GetModel(); } } DungeonAssistModel assistModel { get { return ModelCenter.Instance.GetModel(); } } public int totalExpRate { get; set; } public uint worldLv { get; private set; } public uint worldExpRate { get; private set; } public List maliciousAtkPlayer = new List();// 发动恶意攻击的玩家列表 private int m_Tick; public uint crossServerTick; public uint changeLV = 0; //当前升x级 public event Action worldLevelUpdateEvent; public event Action OnSwitchAttackMode; public event Action playerDataUpdateEvent; // 无区别更新,慎用 public event Action playerDataRefreshEvent; public event Action attributePromoteEvent; public event Action spNewGetEvent; private Dictionary PlayerDataDict = new Dictionary(); 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(false, 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(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(bool isMainServerData, 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) { 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) { ynmbxxjUtil.Instance.RoleLevelUp(); } break; case PlayerDataType.LV2: baseData.IsActive90Off = value > 0; break; case PlayerDataType.TotalExp: baseData.TotalExp = value; break; case PlayerDataType.Family: baseData.FamilyId = value; if (LocalSave.GetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID) == 0) { ynmbxxjUtil.Instance.TraceEvent("joinalliance", "", false); LocalSave.SetInt("FimilyReport" + PlayerDatas.Instance.baseData.PlayerID, 1); } 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; if (isMainServerData) { baseData.mainServerMapIdRecord = baseData.MapID; } 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; if (hero != null) { hero.ActorInfo.ResetHp(-1, (long)extersion.MaxHP); } break; case PlayerDataType.HP: if (CrossServerUtility.IsCrossServer()) { if (!isMainServerData) { baseData.HP = value + valueEx * Constants.ExpPointValue; } } else { 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: if (hero != null) { hero.ActorInfo.teamID = value; ReCheckAttackTarget(); } break; case PlayerDataType.TeamLV: break; case PlayerDataType.FightPower: baseData.FightPoint = value + valueEx * Constants.ExpPointValue; ModelCenter.Instance.GetModel().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 DebugEx.LogFormat("---- 收到服务端Tick: {0}", value); if (isMainServerData) { 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(" |-------- 收到服务端WorldTick与当前的客户端Tick差异超过5秒"); } } } else { if (crossServerTick != 0) { uint _curWorldTick = GetWorldTick(); uint _diffValue = value > _curWorldTick ? value - _curWorldTick : _curWorldTick - value; DebugEx.LogFormat(" |-------- 当前客户端Tick: {0}, 差异: {1}", _curWorldTick, _diffValue); if (_diffValue > 5000) { DebugEx.LogFormat(" |-------- 收到服务端WorldTick与当前的客户端Tick差异超过5秒"); } } } #endif if (isMainServerData) { extersion.Tick = value; } else { crossServerTick = 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; 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: if (hero != null && !hero.ActorInfo.serverDie) { if (hero.aiHandler.IsAuto()) { hero.Behaviour.StopHandupAI(true); } } baseData.ExAttr1 = value; 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; if (oldExAttr5 > 2 && value <= 2) { if (GameNetSystem.Instance.crossServerConnected_Loigc) { GameNetSystem.Instance.crossServerConnected_Loigc = false; GameNetSystem.Instance.DisconnectCrossServer(); if (hero != null) { StatusMgr.Instance.ReleaseActor(hero.ServerInstID); } extersion.pkState = 0; baseData.MapID = baseData.mainServerMapIdRecord; baseData.dungeonLineId = 0; baseData.dungeonMapId = 0; ModelCenter.Instance.GetModel().ResetBufData(); StageLoad.Instance.PushSceneLoadCommand(new StageLoad.StageLoadCommand() { toMapId = baseData.MapID, toLineId = 0, needEmpty = true, needLoadResource = true, serverType = ServerType.CrossSever, isClientLoadMap = true, refreshPlayerDatas = true }); } } break; case PlayerDataType.Faction: baseData.faction = value; 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: if (baseData.VIPLv <= 0 && value > 0) { ModelCenter.Instance.GetModel().SetVipPushNotify((int)value); } else if (value <= 0) { ModelCenter.Instance.GetModel().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: baseData.modelMark = (int)value; break; case PlayerDataType.Face: baseData.face = (int)value; 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; 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: 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; 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; 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; 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().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(); } /// /// 是否是装备, 这里的装备指的是: 武器, 帽子, 衣服, 下装, 鞋子, 腰带 /// /// public bool IsEquip(ItemType itemType) { return itemType >= ItemType.Equip_Weapon && itemType <= ItemType.Equip_Shoes; } public void RequestWorldTick() { CA102_tagCMWorldTick _proto = new CA102_tagCMWorldTick(); if (CrossServerUtility.IsCrossServer()) { GameNetSystem.Instance.SendToCrossServer(_proto); } else { GameNetSystem.Instance.SendInfo(_proto); } } public void ClearTick() { extersion.Tick = 0; crossServerTick = 0; } public bool IsTickVaild() { if (CrossServerUtility.IsCrossServer()) { return crossServerTick != 0; } else { return extersion.Tick != 0; } } public uint GetWorldTick() { int _currentTick = Environment.TickCount - m_Tick; uint _tick = CrossServerUtility.IsCrossServer() ? crossServerTick + (uint)_currentTick : extersion.Tick + (uint)_currentTick; return _tick; } }