public ChangeLifeDataInfo GetChangeLifeDataInfo(GameClient Client, int nChangeLife = 0)
        {
            if (nChangeLife == 0)
            {
                nChangeLife = Client.ClientData.ChangeLifeCount;
            }
            Dictionary <int, ChangeLifeDataInfo> dicTmp = new Dictionary <int, ChangeLifeDataInfo>();
            ChangeLifeDataInfo result;

            if (!GameManager.ChangeLifeMgr.m_ChangeLifeInfoList.TryGetValue(Client.ClientData.Occupation, out dicTmp))
            {
                result = null;
            }
            else
            {
                ChangeLifeDataInfo infoTmp = new ChangeLifeDataInfo();
                if (!dicTmp.TryGetValue(nChangeLife, out infoTmp))
                {
                    result = null;
                }
                else
                {
                    result = infoTmp;
                }
            }
            return(result);
        }
        /// <summary>
        /// 初始化玩家的转生加成属性
        /// </summary>
        public void InitPlayerChangeLifePorperty(GameClient client)
        {
            if (client.ClientData.ChangeLifeCount > 0)
            {
                int nOccupation = client.ClientData.Occupation;

                Dictionary <int, ChangeLifeDataInfo> dicTmp = null;

                if (!m_ChangeLifeInfoList.TryGetValue(nOccupation, out dicTmp) || dicTmp == null)
                {
                    return;
                }

                ChangeLifeDataInfo dataTmp = new ChangeLifeDataInfo();

                if (!dicTmp.TryGetValue(client.ClientData.ChangeLifeCount, out dataTmp) || dataTmp == null)
                {
                    return;
                }

                ChangeLifePropertyInfo tmpProp = null;
                tmpProp = dataTmp.Propertyinfo;

                if (tmpProp == null)
                {
                    return;
                }

                ActivationChangeLifeProp(client, tmpProp);
            }
        }
 public void LoadRoleZhuanShengInfo()
 {
     for (int i = 0; i < 6; i++)
     {
         if (i != 4)
         {
             XElement xmlFile = null;
             try
             {
                 xmlFile = Global.GetGameResXml(string.Format("Config/Roles/ZhuanSheng_{0}.xml", i));
             }
             catch (Exception ex)
             {
                 throw new Exception(string.Format("启动时加载xml文件: {0} 失败", string.Format("Config/Roles/ZhuanSheng_{0}.xml", i)));
             }
             IEnumerable <XElement> ChgOccpXEle          = xmlFile.Elements("ZhuanShengs").Elements <XElement>();
             Dictionary <int, ChangeLifeDataInfo> tmpDic = new Dictionary <int, ChangeLifeDataInfo>();
             foreach (XElement xmlItem in ChgOccpXEle)
             {
                 ChangeLifeDataInfo tmpChgLifeInfo = new ChangeLifeDataInfo();
                 int nLifeID = 0;
                 if (null != xmlItem)
                 {
                     nLifeID = (int)Global.GetSafeAttributeLong(xmlItem, "ChangeLifeID");
                     tmpChgLifeInfo.ChangeLifeID  = (int)Global.GetSafeAttributeLong(xmlItem, "ChangeLifeID");
                     tmpChgLifeInfo.NeedLevel     = (int)Global.GetSafeAttributeLong(xmlItem, "Level");
                     tmpChgLifeInfo.NeedMoney     = (int)Global.GetSafeAttributeLong(xmlItem, "NeedJinBi");
                     tmpChgLifeInfo.NeedMoJing    = (int)Global.GetSafeAttributeLong(xmlItem, "NeedMoJing");
                     tmpChgLifeInfo.ExpProportion = Global.GetSafeAttributeLong(xmlItem, "ExpProportion");
                     string sGoodsID = Global.GetSafeAttributeStr(xmlItem, "NeedGoods");
                     if (string.IsNullOrEmpty(sGoodsID))
                     {
                         LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空", new object[0]), null, true);
                     }
                     else
                     {
                         string[] fields = sGoodsID.Split(new char[]
                         {
                             '|'
                         });
                         if (fields.Length <= 0)
                         {
                             LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空", new object[0]), null, true);
                         }
                         else
                         {
                             tmpChgLifeInfo.NeedGoodsDataList = Global.LoadChangeOccupationNeedGoodsInfo(sGoodsID, "转生文件");
                         }
                     }
                     string   strShuXingInfos = Global.GetSafeAttributeStr(xmlItem, "AwardShuXing");
                     string[] sArrayPropInfo  = strShuXingInfos.Split(new char[]
                     {
                         '|'
                     });
                     if (sArrayPropInfo != null)
                     {
                         tmpChgLifeInfo.Propertyinfo = new ChangeLifePropertyInfo();
                         for (int j = 0; j < sArrayPropInfo.Length; j++)
                         {
                             string[] sArryInfo = sArrayPropInfo[j].Split(new char[]
                             {
                                 ','
                             });
                             string   strPorpName       = sArryInfo[0];
                             string   strPorpValue      = sArryInfo[1];
                             string[] strArrayPorpValue = strPorpValue.Split(new char[]
                             {
                                 '-'
                             });
                             if (strPorpName == "Defense")
                             {
                                 tmpChgLifeInfo.Propertyinfo.PhyDefenseMin         = 3;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyDefenseMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.PhyDefenseMax         = 4;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyDefenseMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                             }
                             else if (strPorpName == "Mdefense")
                             {
                                 tmpChgLifeInfo.Propertyinfo.MagDefenseMin         = 5;
                                 tmpChgLifeInfo.Propertyinfo.AddMagDefenseMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.MagDefenseMax         = 6;
                                 tmpChgLifeInfo.Propertyinfo.AddMagDefenseMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                             }
                             else if (strPorpName == "Attack")
                             {
                                 tmpChgLifeInfo.Propertyinfo.PhyAttackMin         = 7;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.PhyAttackMax         = 8;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                             }
                             else if (strPorpName == "Mattack")
                             {
                                 tmpChgLifeInfo.Propertyinfo.MagAttackMin         = 9;
                                 tmpChgLifeInfo.Propertyinfo.AddMagAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.MagAttackMax         = 10;
                                 tmpChgLifeInfo.Propertyinfo.AddMagAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                             }
                             else if (strPorpName == "HitV")
                             {
                                 tmpChgLifeInfo.Propertyinfo.HitProp         = 18;
                                 tmpChgLifeInfo.Propertyinfo.AddHitPropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                             }
                             else if (strPorpName == "Dodge")
                             {
                                 tmpChgLifeInfo.Propertyinfo.DodgeProp         = 19;
                                 tmpChgLifeInfo.Propertyinfo.AddDodgePropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                             }
                             else if (strPorpName == "MaxLifeV")
                             {
                                 tmpChgLifeInfo.Propertyinfo.MaxLifeProp         = 13;
                                 tmpChgLifeInfo.Propertyinfo.AddMaxLifePropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                             }
                             else if (strPorpName == "AddAttack")
                             {
                                 tmpChgLifeInfo.Propertyinfo.PhyAttackMin         = 7;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.PhyAttackMax         = 8;
                                 tmpChgLifeInfo.Propertyinfo.AddPhyAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                                 tmpChgLifeInfo.Propertyinfo.MagAttackMin         = 9;
                                 tmpChgLifeInfo.Propertyinfo.AddMagAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                 tmpChgLifeInfo.Propertyinfo.MagAttackMax         = 10;
                                 tmpChgLifeInfo.Propertyinfo.AddMagAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                             }
                         }
                     }
                     string sGoodsID2 = Global.GetSafeAttributeStr(xmlItem, "AwardGoods");
                     if (string.IsNullOrEmpty(sGoodsID2))
                     {
                         LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空", new object[0]), null, true);
                     }
                     else
                     {
                         string[] fields2 = sGoodsID2.Split(new char[]
                         {
                             '|'
                         });
                         if (fields2.Length <= 0)
                         {
                             LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空", new object[0]), null, true);
                         }
                         else
                         {
                             tmpChgLifeInfo.AwardGoodsDataList = Global.LoadChangeOccupationNeedGoodsInfo(sGoodsID2, "转生文件");
                         }
                     }
                 }
                 if (nLifeID > this.m_MaxChangeLifeCount)
                 {
                     this.m_MaxChangeLifeCount = nLifeID;
                 }
                 if (nLifeID > 1)
                 {
                     tmpChgLifeInfo.Propertyinfo.AddFrom(tmpDic[nLifeID - 1].Propertyinfo);
                 }
                 tmpDic.Add(nLifeID, tmpChgLifeInfo);
             }
             this.m_ChangeLifeInfoList.Add(i, tmpDic);
         }
     }
 }
        /// <summary>
        /// 转生信息表
        /// </summary>
        public void LoadRoleZhuanShengInfo()
        {
            for (int i = 0; i < 3; i++)
            {
                XElement xmlFile = null;
                try
                {
                    xmlFile = Global.GetGameResXml(string.Format("Config/Roles/ZhuanSheng_{0}.xml", i));
                }
                catch (Exception)
                {
                    throw new Exception(string.Format("启动时加载xml文件: {0} 失败", string.Format("Config/Roles/ZhuanSheng_{0}.xml", i)));
                }

                IEnumerable <XElement> ChgOccpXEle          = xmlFile.Elements("ZhuanShengs").Elements();
                Dictionary <int, ChangeLifeDataInfo> tmpDic = new Dictionary <int, ChangeLifeDataInfo>();

                foreach (var xmlItem in ChgOccpXEle)
                {
                    ChangeLifeDataInfo tmpChgLifeInfo = new ChangeLifeDataInfo();

                    int nLifeID = 0;

                    if (null != xmlItem)
                    {
                        nLifeID = (int)Global.GetSafeAttributeLong(xmlItem, "ChangeLifeID");

                        tmpChgLifeInfo.ChangeLifeID  = (int)Global.GetSafeAttributeLong(xmlItem, "ChangeLifeID");
                        tmpChgLifeInfo.NeedLevel     = (int)Global.GetSafeAttributeLong(xmlItem, "Level");
                        tmpChgLifeInfo.NeedMoney     = (int)Global.GetSafeAttributeLong(xmlItem, "NeedJinBi");
                        tmpChgLifeInfo.NeedMoJing    = (int)Global.GetSafeAttributeLong(xmlItem, "NeedMoJing");
                        tmpChgLifeInfo.ExpProportion = Global.GetSafeAttributeLong(xmlItem, "ExpProportion");

                        string sGoodsID = Global.GetSafeAttributeStr(xmlItem, "NeedGoods");
                        if (string.IsNullOrEmpty(sGoodsID))
                        {
                            LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空"));
                        }
                        else
                        {
                            string[] fields = sGoodsID.Split('|');
                            if (fields.Length <= 0)
                            {
                                LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空"));
                            }
                            else
                            {
                                tmpChgLifeInfo.NeedGoodsDataList = Global.LoadChangeOccupationNeedGoodsInfo(sGoodsID, "转生文件"); //将物品字符串列表解析成物品数据列表
                            }
                        }

                        string strShuXingInfos = null;
                        strShuXingInfos = Global.GetSafeAttributeStr(xmlItem, "AwardShuXing");

                        string[] sArrayPropInfo = null;
                        sArrayPropInfo = strShuXingInfos.Split('|');

                        string[] sArryInfo = null;

                        if (sArrayPropInfo != null)
                        {
                            tmpChgLifeInfo.Propertyinfo = new ChangeLifePropertyInfo();
                            for (int n = 0; n < sArrayPropInfo.Length; ++n)
                            {
                                sArryInfo = null;
                                sArryInfo = sArrayPropInfo[n].Split(',');

                                string strPorpName = null;
                                strPorpName = sArryInfo[0];

                                string strPorpValue = null;
                                strPorpValue = sArryInfo[1];

                                string[] strArrayPorpValue = null;
                                strArrayPorpValue = strPorpValue.Split('-');

                                if (strPorpName == "Defense")
                                {
                                    tmpChgLifeInfo.Propertyinfo.PhyDefenseMin         = (int)ExtPropIndexes.MinDefense;
                                    tmpChgLifeInfo.Propertyinfo.AddPhyDefenseMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);

                                    tmpChgLifeInfo.Propertyinfo.PhyDefenseMax         = (int)ExtPropIndexes.MaxDefense;
                                    tmpChgLifeInfo.Propertyinfo.AddPhyDefenseMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                                }
                                else if (strPorpName == "Mdefense")
                                {
                                    tmpChgLifeInfo.Propertyinfo.MagDefenseMin         = (int)ExtPropIndexes.MinMDefense;
                                    tmpChgLifeInfo.Propertyinfo.AddMagDefenseMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);

                                    tmpChgLifeInfo.Propertyinfo.MagDefenseMax         = (int)ExtPropIndexes.MaxMDefense;
                                    tmpChgLifeInfo.Propertyinfo.AddMagDefenseMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                                }
                                else if (strPorpName == "Attack")
                                {
                                    tmpChgLifeInfo.Propertyinfo.PhyAttackMin         = (int)ExtPropIndexes.MinAttack;
                                    tmpChgLifeInfo.Propertyinfo.AddPhyAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);

                                    tmpChgLifeInfo.Propertyinfo.PhyAttackMax         = (int)ExtPropIndexes.MaxAttack;
                                    tmpChgLifeInfo.Propertyinfo.AddPhyAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                                }
                                else if (strPorpName == "Mattack")
                                {
                                    tmpChgLifeInfo.Propertyinfo.MagAttackMin         = (int)ExtPropIndexes.MinMAttack;
                                    tmpChgLifeInfo.Propertyinfo.AddMagAttackMinValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);

                                    tmpChgLifeInfo.Propertyinfo.MagAttackMax         = (int)ExtPropIndexes.MaxMAttack;
                                    tmpChgLifeInfo.Propertyinfo.AddMagAttackMaxValue = Global.SafeConvertToInt32(strArrayPorpValue[1]);
                                }
                                else if (strPorpName == "HitV")
                                {
                                    tmpChgLifeInfo.Propertyinfo.HitProp         = (int)ExtPropIndexes.HitV;
                                    tmpChgLifeInfo.Propertyinfo.AddHitPropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                }
                                else if (strPorpName == "Dodge")
                                {
                                    tmpChgLifeInfo.Propertyinfo.DodgeProp         = (int)ExtPropIndexes.Dodge;
                                    tmpChgLifeInfo.Propertyinfo.AddDodgePropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                }
                                else if (strPorpName == "MaxLifeV")
                                {
                                    tmpChgLifeInfo.Propertyinfo.MaxLifeProp         = (int)ExtPropIndexes.MaxLifeV;
                                    tmpChgLifeInfo.Propertyinfo.AddMaxLifePropValue = Global.SafeConvertToInt32(strArrayPorpValue[0]);
                                }
                            }
                        }

                        string sGoodsID1 = Global.GetSafeAttributeStr(xmlItem, "AwardGoods");
                        if (string.IsNullOrEmpty(sGoodsID1))
                        {
                            LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空"));
                        }
                        else
                        {
                            string[] fields1 = sGoodsID1.Split('|');
                            if (fields1.Length <= 0)
                            {
                                LogManager.WriteLog(LogTypes.Warning, string.Format("转生文件NeedGoods为空"));
                            }
                            else
                            {
                                tmpChgLifeInfo.AwardGoodsDataList = Global.LoadChangeOccupationNeedGoodsInfo(sGoodsID1, "转生文件"); //将物品字符串列表解析成物品数据列表
                            }
                        }
                    }

                    if (nLifeID > m_MaxChangeLifeCount)
                    {
                        m_MaxChangeLifeCount = nLifeID;
                    }
                    if (nLifeID > 1)
                    {
                        tmpChgLifeInfo.Propertyinfo.AddFrom(tmpDic[nLifeID - 1].Propertyinfo);
                    }
                    tmpDic.Add(nLifeID, tmpChgLifeInfo);
                }

                m_ChangeLifeInfoList.Add(i, tmpDic);
            }
        }