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 RefreshPlayerData(H0418_tagObjInfoRefresh vNetData)
|
{
|
UpdatePlayerData(vNetData);
|
//StoreModel.RefreshTCBPlayerData(vNetData);
|
|
}
|
|
|
private void UpdatePlayerData(H0418_tagObjInfoRefresh vNetData)
|
{
|
if (baseData != null && vNetData.ObjID == baseData.PlayerID)
|
{
|
RefreshProperty((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.Job:
|
baseData.Job = (byte)value;
|
break;
|
case PlayerDataType.LV:
|
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);
|
}
|
break;
|
case PlayerDataType.Gold:
|
baseData.diamond = value;
|
break;
|
case PlayerDataType.GoldPaper:
|
baseData.bindDiamond = value;
|
break;
|
case PlayerDataType.Silver:
|
baseData.copper = value;
|
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.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.HIT:
|
extersion.HIT = (int)value;
|
break;
|
case PlayerDataType.REALATK:
|
extersion.realATK = (int)value;
|
break;
|
case PlayerDataType.REALDEF:
|
extersion.realDEF = (int)value;
|
break;
|
case PlayerDataType.Miss:
|
extersion.Miss = (int)value;
|
break;
|
case PlayerDataType.SuperHit:
|
extersion.SuperHit = (int)value;
|
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.FBID:
|
baseData.FBID = (byte)value;
|
break;
|
case PlayerDataType.RealMapID:
|
extersion.RealMapID = (int)value;
|
break;
|
case PlayerDataType.GMLevel:
|
baseData.GMLevel = (byte)value;
|
break;
|
case PlayerDataType.TeamID:
|
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.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.EquipShowSwitch:
|
baseData.equipShowSwitch = value;
|
|
break;
|
case PlayerDataType.LuckValue:
|
extersion.luckValue = (int)value;
|
break;
|
case PlayerDataType.ExAttr1:
|
baseData.ExAttr1 = value;
|
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.Faction:
|
baseData.faction = value;
|
break;
|
case PlayerDataType.RealmLevel:
|
baseData.realmLevel = (byte)value;
|
break;
|
case PlayerDataType.ChangeCoinPointTotal:
|
baseData.coinPointTotal = value;
|
break;
|
case PlayerDataType.VIPLv:
|
baseData.VIPLv = (byte)value;
|
break;
|
case PlayerDataType.ExAttr6:
|
baseData.copperExtend = value;
|
break;
|
case PlayerDataType.ExAttr10:
|
baseData.bubbleId = value;
|
break;
|
case PlayerDataType.ExAttr11:
|
baseData.ExAttr11 = value;
|
break;
|
case PlayerDataType.ExAttr13:
|
baseData.ServerGroupId = value;
|
break;
|
case PlayerDataType.BattleValEx1:
|
extersion.battleValEx1 = (int)value;
|
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.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;
|
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;
|
break;
|
case PlayerDataType.IsAttackBossState:
|
extersion.bossState = (int)value;
|
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_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_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;
|
case PlayerDataType.Face:
|
baseData.face = (int)value;
|
break;
|
case PlayerDataType.FacePic:
|
baseData.facePic = (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;
|
}
|
|
}
|