private void RefreshShenJiFuWenProps(GameClient client) { Dictionary <int, ShenJiFuWenConfigData> tempShenJiConfig = null; lock (this.ConfigMutex) { tempShenJiConfig = this.ShenJiConfig; } double[] _ExtProps = new double[177]; foreach (ShenJiFuWenData item in client.ClientData.ShenJiDataDict.Values) { ShenJiFuWenConfigData sConfigData = null; if (tempShenJiConfig.TryGetValue(item.ShenJiID, out sConfigData)) { ShenJiFuWenEffectData effect = sConfigData.GetEffect(item.Level); for (int i = 0; i < _ExtProps.Length; i++) { _ExtProps[i] += effect.ExtProps[i]; } } } client.ClientData.PropsCacheManager.SetExtProps(new object[] { PropsSystemTypes.ShenJiFuWen, _ExtProps }); client.delayExecModule.SetDelayExecProc(new DelayExecProcIds[] { DelayExecProcIds.RecalcProps, DelayExecProcIds.NotifyRefreshProps }); }
public bool LoadShenJiFuWenConfigFile() { try { GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath("Config/ShenJiFuWen.xml")); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath("Config/ShenJiFuWen.xml")); if (null == xml) { return(false); } Dictionary <int, ShenJiFuWenConfigData> tempShenJiConfig = new Dictionary <int, ShenJiFuWenConfigData>(); IEnumerable <XElement> xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { ShenJiFuWenConfigData data = new ShenJiFuWenConfigData(); data.ShenJiID = (int)Global.GetSafeAttributeLong(xmlItem, "ID"); data.PreShenJiID = (int)Global.GetSafeAttributeLong(xmlItem, "Prev"); data.PreShenJiLev = (int)Global.GetSafeAttributeLong(xmlItem, "PrevLevel"); data.MaxLevel = (int)Global.GetSafeAttributeLong(xmlItem, "MaxLevel"); data.UpNeed = (int)Global.GetSafeAttributeLong(xmlItem, "UpNeed"); for (int levelloop = 1; levelloop <= 5; levelloop++) { ShenJiFuWenEffectData effectItem = this.ParseShenJiFuWenEffectData(xmlItem, levelloop.ToString()); if (null == effectItem) { break; } data.ShenJiEffectList.Add(effectItem); } tempShenJiConfig[data.ShenJiID] = data; } lock (this.ConfigMutex) { this.ShenJiConfig = tempShenJiConfig; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", "Config/ShenJiFuWen.xml", ex.Message), null, true); return(false); } return(true); }
private ShenJiFuWenEffectData ParseShenJiFuWenEffectData(XElement xmlItem, string Key) { string TempValueString = Global.GetSafeAttributeStr(xmlItem, string.Format("Effect{0}", Key)); string[] ValueFileds = TempValueString.Split(new char[] { '|' }); ShenJiFuWenEffectData result; if (ValueFileds.Length == 0) { result = null; } else { ShenJiFuWenEffectData data = new ShenJiFuWenEffectData(); foreach (string value in ValueFileds) { string[] KvpFileds = value.Split(new char[] { ',' }); if (KvpFileds.Length == 2) { ExtPropIndexes index = ConfigParser.GetPropIndexByPropName(KvpFileds[0]); if (index != ExtPropIndexes.Max) { data.ExtProps[(int)index] = Global.SafeConvertToDouble(KvpFileds[1]); } } } result = data; } return(result); }