/********************************************************************************
 *	文件名:	OtherPlayerData.cs
 *	全路径:	\Script\Player\UserData\OtherPlayerData.cs
 *	创建人:    grx
 *	创建时间:  2013-06-05
 *
 *	功能说明:   其他玩家的数据
 *	修改记录:
*********************************************************************************/

using System;
using System.Collections.Generic;
using Games.GlobeDefine;
using Games.ImpactModle;
using Games.SkillModle;
using UnityEngine;
using System.Collections;
using Games.Item;
using Games.MountModule;
using Games.TitleInvestitive;
using Games.ChatHistory;
using Games.Fellow;
using Games.MoneyTree;
using Games.UserCommonData;
using Games.DailyMissionData;
using Games.DailyLuckyDraw;
using GCGame.Table;

public class OtherPlayerData
{
    public OtherPlayerData()
    {
        

        m_AdvanceData = new AdvanceData();
    }

    public void CleanUpContainers()
    {
        GameItemContainer.InitStaticParams();

        m_oEquipPack = new GameItemContainer(GameItemContainer.SIZE_EQUIPPACK, GameItemContainer.Type.TYPE_EQUIPPACK);
        m_AdvancePack = new GameItemContainer(GameItemContainer.SIZE_ADVANCPACK, GameItemContainer.Type.TYPE_ADVANCEPACK);
    }

    public void CleanUpData()
    {
        CleanUpContainers();
        for (int i = 0; i < GameItemContainer.SIZE_EQUIPPACK; i++)
        {
            GameItem item = m_oEquipPack.GetItem(i);
            if (item != null )
            {
                item.CleanUp();
            }
        }
    }

    private string m_strName = "";
    public string Name
    {
        get { return m_strName; }
        set { m_strName = value; }
    }

    // 战力值
    private int m_nCombatValue = 0;
    public int CombatValue
    {
        get { return m_nCombatValue; }
        set { m_nCombatValue = value; }
    }

    // 修为
    private int m_AbilityLevel = 0;
    public int AbilityLevel
    {
        get { return m_AbilityLevel; }
        set { m_AbilityLevel = value; }
    }

    // 等级
    private int m_nLevel = 0;
    public int Level
    {
        get { return m_nLevel; }
        set { m_nLevel = value; }
    }

    // 职业
    private int m_Profession = -1;
    public int Profession
    {
        get { return m_Profession; }
        set { m_Profession = value; }
    }

    // 技能信息
    private OwnSkillData[] m_OwnSkillInfo;
    public OwnSkillData[] OwnSkillInfo
    {
        get { return m_OwnSkillInfo; }
        set { m_OwnSkillInfo = value; }
    }

    //伙伴数据
    private FellowContainer m_FellowContainer;
    public FellowContainer FellowContainer
    {
        get { return m_FellowContainer; }
        set { m_FellowContainer = value; }
    }

    //法宝
    private GameItemContainer m_oMagicPack;
    public GameItemContainer MagicPack
    {
        get { return m_oMagicPack; }
        set { m_oMagicPack = value; }
    }

    //当前装备的法宝
    private int m_CurDressedMagicWeaponIndex;
    public int CurDressedMagicWeaponIndex
    {
        set { m_CurDressedMagicWeaponIndex = value; }
        get { return m_CurDressedMagicWeaponIndex; }
    }

    //当前激活的法宝
    private int[] m_CurActivedMagicWeaponIndex;
    public int[] CurActivedMagicWeaponIndex
    {
        set { m_CurActivedMagicWeaponIndex = value; }
        get { return m_CurActivedMagicWeaponIndex; }
    }

    private UInt64 m_RoleGUID = 0;
    public System.UInt64 RoleGUID
    {
        get { return m_RoleGUID; }
        set { m_RoleGUID = value; }
    }

    #region 属性

    // 不完全整理基本属性和详细属性
    // 基础属性
    private int m_nCurHp = 0;
    public int CurHp
    {
        get { return m_nCurHp; }
        set { m_nCurHp = value; }
    }

    private int m_nMaxHP = 0;
    public int MaxHP
    {
        get { return m_nMaxHP; }
        set { m_nMaxHP = value; }
    }

    private int m_nCurMp = 0;
    public int CurMp
    {
        get { return m_nCurMp; }
        set { m_nCurMp = value; }
    }

    private int m_nMaxMp = 0;
    public int MaxMp
    {
        get { return m_nMaxMp; }
        set { m_nMaxMp = value; }
    }

    private long m_nCurExp = 0;
    public long CurExp
    {
        get { return m_nCurExp; }
        set { m_nCurExp = value; }
    }

    private long m_nMaxExp = 0;
    public long MaxExp
    {
        get { return m_nMaxExp; }
        set { m_nMaxExp = value; }
    }

    private int m_nPAttck = 0;//物攻
    public int PAttck
    {
        get { return m_nPAttck; }
        set { m_nPAttck = value; }
    }
    private int m_nMAttack = 0;//法功
    public int MAttack
    {
        get { return m_nMAttack; }
        set { m_nMAttack = value; }
    }

    // 命中率
    private int m_nHit = 0;
    public int Hit
    {
        get { return m_nHit; }
        set { m_nHit = value; }
    }

    private int m_nCritical = 0;//暴击
    public int Critical
    {
        get { return m_nCritical; }
        set { m_nCritical = value; }
    }

    private int m_nPDefense = 0;//物防
    public int PDefense
    {
        get { return m_nPDefense; }
        set { m_nPDefense = value; }
    }

    private int m_MDefense = 0;//法防
    public int MDefense
    {
        get { return m_MDefense; }
        set { m_MDefense = value; }
    }

    private int m_DeCritical = 0;//暴击抗性
    public int DeCritical
    {
        get { return m_DeCritical; }
        set { m_DeCritical = value; }
    }

    private int m_nDoge = 0;//闪避
    public int Doge
    {
        get { return m_nDoge; }
        set { m_nDoge = value; }
    }

    private int m_nStrike = 0;//穿透
    public int Strike
    {
        get { return m_nStrike; }
        set { m_nStrike = value; }
    }

    private int m_nCriticalAdd = 0;//暴击加成
    public int CriticalAdd
    {
        get { return m_nCriticalAdd; }
        set { m_nCriticalAdd = value; }
    }

    private int m_nDuctical = 0;//韧性
    public int Ductical
    {
        get { return m_nDuctical; }
        set { m_nDuctical = value; }
    }

    private int m_nCriticalMis = 0;//暴击减免
    public int CriticalMis
    {
        get { return m_nCriticalMis; }
        set { m_nCriticalMis = value; }
    }

    private int m_CureMount;  //治疗量
    public int CureMount
    {
        get { return m_CureMount; }
        set { m_CureMount = value; }
    }

    private int m_Constitu;  //体质 
    public int Constitu
    {
        get { return m_Constitu; }
        set { m_Constitu = value; }
    }

    private int m_Morfib;  //精力
    public int Morfib
    {
        get { return m_Morfib; }
        set { m_Morfib = value; }
    }

    private int m_Strength;  //力量 
    public int Strength
    {
        get { return m_Strength; }
        set { m_Strength = value; }
    }

    private int m_Intellenge;  //智力 
    public int Intellenge
    {
        get { return m_Intellenge; }
        set { m_Intellenge = value; }
    }

    private int m_Agile;  //敏捷
    public int Agile
    {
        get { return m_Agile; }
        set { m_Agile = value; }
    }

    // 详细属性
    //////////////////////////////////
    // 重要属性
    //////////////////////////////////
    private int m_ActVal;                       // 活力值
    public int ActVal
    {
        get { return m_ActVal; }
        set { m_ActVal = value; }
    }

    private int m_pkVal;                        // PK值
    public int PkVal
    {
        get { return m_pkVal; }
        set { m_pkVal = value; }
    }

    private int m_LuckyVal;                     // 幸运值
    public int LuckVal
    {
        get { return m_LuckyVal; }
        set { m_LuckyVal = value; }
    }

    // 特殊属性
    private int m_IngDef;                       // 无视防御
    public int IngDef
    {
        get { return m_IngDef; }
        set { m_IngDef = value; }
    }

    private int m_ReduceDam;                    // 伤害减免
    public int ReduceDam
    {
        get { return m_ReduceDam; }
        set { m_ReduceDam = value; }
    }

    //////////////////////////////////
    // 效果属性
    //////////////////////////////////
    private int m_DizzyEnhance;                 // 眩晕增强
    public int DizzyEnhance
    {
        get { return m_DizzyEnhance; }
        set { m_DizzyEnhance = value; }
    }

    private int m_DizzyeDef;                    // 眩晕抗性
    public int DizzyeDef
    {
        get { return m_DizzyeDef; }
        set { m_DizzyeDef = value; }
    }

    private int m_SilentEnhance;                // 沉默增强
    public int SilentEnhance
    {
        get { return m_SilentEnhance; }
        set { m_SilentEnhance = value; }
    }

    private int m_SilentDef;                    // 沉默抗性
    public int SilentDef
    {
        get { return m_SilentDef; }
        set { m_SilentDef = value; }
    }

    private int m_ImmobEnhance;                 // 定身
    public int ImmobEnhance
    {
        get { return m_ImmobEnhance; }
        set { m_ImmobEnhance = value; }
    }

    private int m_ImmobDef;                     // 定身抗性
    public int ImmobDef
    {
        get { return m_ImmobDef; }
        set { m_ImmobDef = value; }
    }

    private int m_RepelEnhance;                 // 击退增强
    public int RepelEnhance
    {
        get { return m_RepelEnhance; }
        set { m_RepelEnhance = value; }
    }

    private int m_RepelDef;                     // 击退抗性
    public int RepelDef
    {
        get { return m_RepelDef; }
        set { m_RepelDef = value; }
    }

    private int m_PolymorphEnhance;             // 变羊增强
    public int PolymorphEnhance
    {
        get { return m_PolymorphEnhance; }
        set { m_PolymorphEnhance = value; }
    }

    private int m_PolymorphDef;                 // 变羊抗性
    public int PolymorphDef
    {
        get { return m_PolymorphDef; }
        set { m_PolymorphDef = value; }
    }

    private int m_HmEnhance;                    // 昏迷增强
    public int HmEnhance
    {
        get { return m_HmEnhance; }
        set { m_HmEnhance = value; }
    }

    private int m_HmDef;                        // 昏迷抗性
    public int HmDef
    {
        get { return m_HmDef; }
        set { m_HmDef = value; }
    }

    private int m_SmEnhance;                    // 失明增强
    public int SmEnhance
    {
        get { return m_SmEnhance; }
        set { m_SmEnhance = value; }
    }

    private int m_SmDef;                        // 失明抗性
    public int SmDef
    {
        get { return m_SmDef; }
        set { m_SmDef = value; }
    }

    private int m_ShEnhance;                    // 石化增强
    public int ShEnhance
    {
        get { return m_ShEnhance; }
        set { m_ShEnhance = value; }
    }

    private int m_ShDef;                        // 石化抗性
    public int ShDef
    {
        get { return m_ShDef; }
        set { m_ShDef = value; }
    }

    //////////////////////////////////
    // 元素属性
    //////////////////////////////////
    private int m_DgDef;                        // 电抗
    public int DgDef
    {
        get { return m_DgDef; }
        set { m_DgDef = value; }
    }

    private int m_DgIgnDef;                     // 忽视电抗
    public int DgIgnDef
    {
        get { return m_DgIgnDef; }
        set { m_DgIgnDef = value; }
    }

    private int m_HuogDef;                      // 火抗
    public int HuogDef
    {
        get { return m_HuogDef; }
        set { m_HuogDef = value; }
    }

    private int m_HuogIgnDef;                   // 忽视火抗
    public int HuogIgnDef
    {
        get { return m_HuogIgnDef; }
        set { m_HuogIgnDef = value; }
    }

    private int m_DugDef;                       // 毒抗
    public int DugDef
    {
        get { return m_DugDef; }
        set { m_DugDef = value; }
    }

    private int m_DugIgnDef;                    // 忽视毒抗
    public int DugIgnDef
    {
        get { return m_DugIgnDef; }
        set { m_DugIgnDef = value; }
    }

    private int m_BgDef;                        // 冰抗
    public int BgDef
    {
        get { return m_BgDef; }
        set { m_BgDef = value; }
    }

    private int m_BgIgnDef;                     // 忽视冰抗
    public int BgIgnDef
    {
        get { return m_BgIgnDef; }
        set { m_BgIgnDef = value; }
    }

    private int m_FgDef;                        // 风抗
    public int FgDef
    {
        get { return m_FgDef; }
        set { m_FgDef = value; }
    }

    private int m_FgIgnDef;                     // 忽视风抗
    public int FgIgnDef
    {
        get { return m_FgIgnDef; }
        set { m_FgIgnDef = value; }
    }

    private int m_GgDef;                        // 光抗
    public int GgDef
    {
        get { return m_GgDef; }
        set { m_GgDef = value; }
    }

    private int m_GgIgnDef;                     // 忽视光抗
    public int GgIgnDef
    {
        get { return m_GgIgnDef; }
        set { m_GgIgnDef = value; }
    }

    private int m_HuangDef;                     // 幻抗
    public int HuangDef
    {
        get { return m_HuangDef; }
        set { m_HuangDef = value; }
    }

    private int m_HuangIgnDef;                  // 忽视幻抗
    public int HuangIgnDef
    {
        get { return m_HuangIgnDef; }
        set { m_HuangIgnDef = value; }
    }

    private int m_HlDef;                        // 混乱抗
    public int HlDef
    {
        get { return m_HlDef; }
        set { m_HlDef = value; }
    }

    private int m_HlIgnDef;                     // 忽视混乱抗
    public int HlIgnDef
    {
        get { return m_HlIgnDef; }
        set { m_HlIgnDef = value; }
    }


    private int m_HLENCHANCE;                     // 混乱增加
    public int HLENCHANCE
    {
        get { return m_HLENCHANCE; }
        set { m_HLENCHANCE = value; }
    }

    // new
    private int m_DuGAttack;                     // 毒攻
    public int DuGAttack
    {
        get { return m_DuGAttack; }
        set { m_DuGAttack = value; }
    }

    private int m_HuoAttack;                     // 火攻
    public int HuoAttack
    {
        get { return m_HuoAttack; }
        set { m_HuoAttack = value; }
    }

    private int m_BGAttack;                     // 冰攻
    public int BGAttack
    {
        get { return m_BGAttack; }
        set { m_BGAttack = value; }
    }

    private int m_DGAttack;                     // 点攻
    public int DGAttack
    {
        get { return m_DGAttack; }
        set { m_DGAttack = value; }
    }

    private int m_FGAttack;                     // 风攻
    public int FGAttack
    {
        get { return m_FGAttack; }
        set { m_FGAttack = value; }
    }

    private int m_GGAttack;                     // 光攻
    public int GGAttack
    {
        get { return m_GGAttack; }
        set { m_GGAttack = value; }
    }

    private int m_HuanGAttack;                  // 幻攻
    public int HuanGAttack
    {
        get { return m_HuanGAttack; }
        set { m_HuanGAttack = value; }
    }



    private int m_VOCDAMAGERATE_TianJi;                 // 对天机伤害提升比
    public int VOCDAMAGERATE_TianJi
    {
        get { return m_VOCDAMAGERATE_TianJi; }
        set { m_VOCDAMAGERATE_TianJi = value; }
    }


    private int m_VOCDAMAGERATE_LiuShan;                 // 对六扇伤害提升比
    public int VOCDAMAGERATE_LiuShan
    {
        get { return m_VOCDAMAGERATE_LiuShan; }
        set { m_VOCDAMAGERATE_LiuShan = value; }
    }


    private int m_VOCDAMAGERATE_ShuShan;                 // 对蜀山伤害提升比
    public int VOCDAMAGERATE_ShuShan
    {
        get { return m_VOCDAMAGERATE_ShuShan; }
        set { m_VOCDAMAGERATE_ShuShan = value; }
    }


    private int m_VOCDAMAGERATE_XuanNv;                 // 对玄女伤害提升比
    public int VOCDAMAGERATE_XuanNv
    {
        get { return m_VOCDAMAGERATE_XuanNv; }
        set { m_VOCDAMAGERATE_XuanNv = value; }
    }

    #endregion


    private int m_nModuleVisualID = 0;//模型ID
    public int ModuleVisualID
    {
        get { return m_nModuleVisualID; }
        set { m_nModuleVisualID = value; }
    }

    private int m_CurWeaponDataID = 0;
    public int CurWeaponDataID
    {
        get { return m_CurWeaponDataID; }
        set { m_CurWeaponDataID = value; }
    }

    private int m_WeaponEffectId = 0;
    public int WeaponEffectId
    {
        get { return m_WeaponEffectId; }
        set { m_WeaponEffectId = value; }
    }

    private int m_WingAuraId = -1;
    public int WingAuraId
    {
        set { m_WingAuraId = value; }
        get { return m_WingAuraId; }
    }

    private int m_EffectAuraId = -1;
    public int EffectAuraId
    {
        set { m_EffectAuraId = value; }
        get { return m_EffectAuraId; }
    }

    //////////////////////////////////////////////////////////////////////////
    //装备槽位
    //////////////////////////////////////////////////////////////////////////
    private GameItemContainer m_oEquipPack;
    public GameItemContainer EquipPack
    {
        get
        {
            if (m_oEquipPack == null)
            {
                CleanUpContainers();
            }
            return m_oEquipPack;
        }
        set { m_oEquipPack = value; }
    }

    // 装备槽位的强化等级和完美度
    private StrengthData[] m_oEquipSlotStrength;
    public StrengthData[] EquipSlotStrength
    {
        get { return m_oEquipSlotStrength; }
        set { m_oEquipSlotStrength = value; }
    }

    private GameItemContainer m_AdvancePack;
    public GameItemContainer AdvancePack
    {
        get
        {
            if (m_AdvancePack == null)
            {
                CleanUpContainers();
            }
            return m_AdvancePack;
        }
        set { m_AdvancePack = value; }
    }

    //宝石信息
    private GemData m_GemData;
    public GemData GemData
    {
        get { return m_GemData; }
        set { m_GemData = value; }
    }

    // 帮会名称
    private string m_strGuildName = "";
    public string GuildName
    {
        get { return m_strGuildName; }
        set { m_strGuildName = value; }
    }

    // Vip等级
    private int m_nVipLvl = 0;
    public int VipLvl
    {
        get { return m_nVipLvl; }
        set { m_nVipLvl = value; }
    }

    private int m_privilegeviplvl = 0;
    public int Privilegeviplvl
    {
        get { return m_privilegeviplvl; }
        set { m_privilegeviplvl = value; }
    }

    // 检测该法宝是否已经被激活
    public bool IsMagicModelActive(int modelId)
    {
        if(m_CurActivedMagicWeaponIndex == null)
        {
            return false;
        }
        for(int index = 0; index < m_CurActivedMagicWeaponIndex.Length; index++)
        {
            Tab_MagicWeaponActiveModel magicModel = TableManager.GetMagicWeaponActiveModelByID(GameManager.gameManager.OtherPlayerData.m_CurActivedMagicWeaponIndex[index], 0);
            if(magicModel.Model == modelId)
            {
                return true;
            }
        }
        return false;
    }

    // 进阶数据
    private AdvanceData m_AdvanceData;
    public AdvanceData AdvData
    {
        get{ return m_AdvanceData; }
    }
}