/// <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 }
/// <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); } }