Exemplo n.º 1
0
        /// <summary>
        /// 神器——套装属性设置
        /// </summary>
        /// <param name="client"></param>
        public static void SetArtifactProp(GameClient client)
        {
            Dictionary <int, List <int> > suitTypeList = new Dictionary <int, List <int> >();

            int addAttack   = 0;
            int addDefense  = 0;
            int attackMin   = 0;
            int attackMax   = 0;
            int defenseMin  = 0;
            int defenseMax  = 0;
            int mAttackMin  = 0;
            int mAttackMax  = 0;
            int mDefenseMin = 0;
            int mDefenseMax = 0;
            int lifeMax     = 0;
            int lifeSteal   = 0;

            if (client.ClientData.GoodsDataList == null)
            {
                return;
            }

            lock (client.ClientData.GoodsDataList)
            {
                for (int i = 0; i < client.ClientData.GoodsDataList.Count; i++)
                {
                    GoodsData goodsData = client.ClientData.GoodsDataList[i];

                    #region 验证
                    if (goodsData.Using <= 0)
                    {
                        continue;
                    }

                    SystemXmlItem systemGoods = null;
                    if (!GameManager.SystemGoods.SystemXmlItemDict.TryGetValue(goodsData.GoodsID, out systemGoods))
                    {
                        continue;
                    }

                    //int nSuitID = systemGoods.GetIntValue("SuitID");
                    //if (nSuitID <= ARTIFACT_SUIT)
                    //  continue;

                    //不是装备,是元素之心
                    int  categoriy    = systemGoods.GetIntValue("Categoriy");
                    bool isElementHrt = ElementhrtsManager.IsElementHrt(categoriy);
                    if (categoriy >= (int)ItemCategories.EquipMax && !isElementHrt)
                    {
                        continue;
                    }

                    #endregion

                    #region 添加装备
                    ArtifactSuitData suitData = GetArtifactSuitDataByEquipID(goodsData.GoodsID);
                    if (suitData == null)
                    {
                        continue;
                    }

                    if (suitTypeList.ContainsKey(suitData.SuitID))
                    {
                        bool       isAdd = true;
                        List <int> value = suitTypeList[suitData.SuitID];

                        if (!suitData.IsMulti)
                        {
                            foreach (int id in value)
                            {
                                if (id == goodsData.GoodsID)
                                {
                                    isAdd = false;
                                    break;
                                }
                            }
                        }

                        if (!isAdd)
                        {
                            continue;
                        }

                        value.Add(goodsData.GoodsID);
                    }
                    else
                    {
                        List <int> value = new List <int>();
                        value.Add(goodsData.GoodsID);

                        suitTypeList.Add(suitData.SuitID, value);
                    }

                    #endregion
                }

                #region 加属性
                foreach (var type in suitTypeList)
                {
                    int count = type.Value.Count;
                    if (count < 2)
                    {
                        continue;
                    }

                    ArtifactSuitData suitData = GetArtifactSuitDataBySuitID(type.Key);
                    foreach (var attrs in suitData.SuitAttr)
                    {
                        if (count < attrs.Key)
                        {
                            continue;
                        }

                        foreach (var attr in attrs.Value)
                        {
                            string[] values = attr.Value.Split('-');

                            switch (attr.Key)
                            {
                            case "AddAttack":    //攻击力(物理,魔法)、、
                                addAttack += int.Parse(attr.Value);
                                break;

                            case "AddDefense":    //防御(物理,魔法)、、
                                addDefense += int.Parse(attr.Value);
                                break;

                            case "Attack":    //物理攻击
                                attackMin += int.Parse(values[0]);
                                attackMax += int.Parse(values[1]);
                                break;

                            case "Defense":    //物理防御
                                defenseMin += int.Parse(values[0]);
                                defenseMax += int.Parse(values[1]);
                                break;

                            case "Mattack":    //魔法攻击
                                mAttackMin += int.Parse(values[0]);
                                mAttackMax += int.Parse(values[1]);
                                break;

                            case "Mdefense":    //魔法防御
                                mDefenseMin += int.Parse(values[0]);
                                mDefenseMax += int.Parse(values[1]);
                                break;

                            case "MaxLifeV":    //生命上限
                                lifeMax += int.Parse(attr.Value);
                                break;

                            case "LifeSteal":    //击中恢复
                                lifeSteal += int.Parse(attr.Value);
                                break;
                            }
                        }
                    }
                }

                #endregion
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.AddAttack, addAttack);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.AddDefense, addDefense);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MinAttack, attackMin);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MaxAttack, attackMax);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MinDefense, defenseMin);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MaxDefense, defenseMax);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MinMAttack, mAttackMin);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MaxMAttack, mAttackMax);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MinMDefense, mDefenseMin);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MaxMDefense, mDefenseMax);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.MaxLifeV, lifeMax);
                client.ClientData.PropsCacheManager.SetExtPropsSingle((int)PropsSystemTypes.Artifact, (int)ExtPropIndexes.LifeSteal, lifeSteal);
            }//end lock
        }
Exemplo n.º 2
0
        /// <summary>
        /// 加载神器套装信息
        /// </summary>
        public static void LoadArtifactSuitData()
        {
            string fileName = "Config/TaoZhuangProps.xml";

            GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath(fileName));

            XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath(fileName));

            if (null == xml)
            {
                LogManager.WriteLog(LogTypes.Fatal, "加载Config/TaoZhuangProps.xml时出错!!!文件不存在");
                return;
            }

            try
            {
                _artifactSuitList.Clear();

                IEnumerable <XElement> xmlItems = xml.Elements();
                foreach (var xmlItem in xmlItems)
                {
                    if (xmlItem == null)
                    {
                        continue;
                    }

                    ArtifactSuitData config = new ArtifactSuitData();
                    config.SuitID   = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "ID", "0"));
                    config.SuitName = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "Name", ""));
                    config.IsMulti  = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "Multi", "0")) > 0;

                    string equipIdStr = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "GoodsID", "0"));
                    if (equipIdStr.Length > 0)
                    {
                        config.EquipIDList = new List <int>();

                        string[] all = equipIdStr.Split(',');
                        foreach (string one in all)
                        {
                            config.EquipIDList.Add(int.Parse(one));
                        }
                    }

                    string addString = Convert.ToString(Global.GetDefAttributeStr(xmlItem, "TaoZhuangProps", ""));
                    if (addString.Length > 0)
                    {
                        config.SuitAttr = new Dictionary <int, Dictionary <string, string> >();
                        string[] addArr = addString.Split('|');
                        foreach (string str in addArr)
                        {
                            string[] oneArr = str.Split(',');

                            int count = int.Parse(oneArr[0]);
                            if (config.SuitAttr.ContainsKey(count))
                            {
                                config.SuitAttr[count].Add(oneArr[1], oneArr[2]);
                            }
                            else
                            {
                                Dictionary <string, string> value = new Dictionary <string, string>();
                                value.Add(oneArr[1], oneArr[2]);
                                config.SuitAttr.Add(int.Parse(oneArr[0]), value);
                            }
                        }
                    }

                    _artifactSuitList.Add(config);
                }
            }
            catch (Exception ex)
            {
                LogManager.WriteLog(LogTypes.Fatal, "加载Config/TaoZhuangProps.xml时文件出错", ex);
            }
        }