public static void LoadUnionPalaceSpecialInfo() { string fileName = Global.GameResPath("Config/ShenDianExtra.xml"); XElement xml = CheckHelper.LoadXml(fileName, true); if (null != xml) { try { UnionPalaceManager._unionPalaceSpecialList.Clear(); IEnumerable <XElement> xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { if (xmlItem != null) { UnionPalaceSpecialInfo config = new UnionPalaceSpecialInfo(); config.StatueLevel = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "StatueLevel", "0")); config.UnionLevel = Convert.ToInt32(Global.GetDefAttributeStr(xmlItem, "ZhanMengLevel", "0")); config.MaxLifePercent = Convert.ToDouble(Global.GetDefAttributeStr(xmlItem, "MaxLifePercent", "0")); UnionPalaceManager._unionPalaceSpecialList.Add(config.StatueLevel, config); } } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("加载[{0}]时出错!!!", fileName), null, true); } } }
public static void SetUnionPalaceProps(GameClient client, UnionPalaceData myData) { lock (client.ClientData.LockUnionPalace) { int life = 0; int attack = 0; int defense = 0; int injure = 0; UnionPalaceBasicInfo basicInfo = UnionPalaceManager.GetUPBasicInfoByID(myData.StatueID); int bangHuiLevel = Global.GetBangHuiLevel(client); if (basicInfo != null && basicInfo.UnionLevel <= bangHuiLevel && myData.StatueLevel <= bangHuiLevel) { life = myData.LifeAdd; attack = myData.AttackAdd; defense = myData.DefenseAdd; injure = myData.AttackInjureAdd; } foreach (UnionPalaceBasicInfo d in UnionPalaceManager._unionPalaceBasicList.Values) { if (d.StatueID < myData.StatueID && d.UnionLevel <= bangHuiLevel && d.StatueLevel <= bangHuiLevel) { life += d.LifeMax; attack += d.AttackMax; defense += d.DefenseMax; injure += d.AttackInjureMax; } } double lifePercent = 0.0; int step = (myData.StatueID - 1) / 8; if (step > 0) { if (myData.ResultType == 4 || myData.ResultType == -7) { int maxID = 0; IOrderedEnumerable <UnionPalaceBasicInfo> temp = from info in UnionPalaceManager._unionPalaceBasicList.Values where info.StatueID <= myData.StatueID && info.StatueLevel <= myData.StatueLevel && info.UnionLevel <= myData.UnionLevel && info.UnionLevel > 0 orderby info.StatueID descending select info; if (temp.Any <UnionPalaceBasicInfo>()) { maxID = temp.First <UnionPalaceBasicInfo>().StatueID; } step = maxID / 8; } UnionPalaceSpecialInfo s = UnionPalaceManager.GetUPSpecialInfoByID(step); if (s != null && s.UnionLevel <= bangHuiLevel) { lifePercent = s.MaxLifePercent; } } EquipPropItem propItem = new EquipPropItem(); propItem.ExtProps[13] = (double)life; propItem.ExtProps[45] = (double)attack; propItem.ExtProps[46] = (double)defense; propItem.ExtProps[27] = (double)injure; propItem.ExtProps[14] = lifePercent; client.ClientData.PropsCacheManager.SetExtProps(new object[] { 19, propItem.ExtProps }); } }
public static void SetUnionPalaceProps(GameClient client, UnionPalaceData myData) { lock (client.ClientData.LockUnionPalace) { //加成 int life = 0; int attack = 0; int defense = 0; int injure = 0; UnionPalaceBasicInfo basicInfo = GetUPBasicInfoByID(myData.StatueID); int bangHuiLevel = Global.GetBangHuiLevel(client); if (basicInfo != null && basicInfo.UnionLevel <= bangHuiLevel && myData.StatueLevel <= bangHuiLevel) { life = myData.LifeAdd; attack = myData.AttackAdd; defense = myData.DefenseAdd; injure = myData.AttackInjureAdd; } foreach (UnionPalaceBasicInfo d in _unionPalaceBasicList.Values) { if (d.StatueID < myData.StatueID && d.UnionLevel <= bangHuiLevel && d.StatueLevel <= bangHuiLevel) { life += d.LifeMax; attack += d.AttackMax; defense += d.DefenseMax; injure += d.AttackInjureMax; } } //额外加成 double lifePercent = 0; int step = (myData.StatueID - 1) / STATUE_COUNT; if (step > 0) { if (myData.ResultType == (int)EUnionPalaceState.PalaceMore || myData.ResultType == (int)EUnionPalaceState.EPalaceMore) { int maxID = 0; var temp = from info in _unionPalaceBasicList.Values where info.StatueID <= myData.StatueID && info.StatueLevel <= myData.StatueLevel && info.UnionLevel <= myData.UnionLevel && info.UnionLevel > 0 orderby info.StatueID descending select info; if (temp.Any()) { maxID = temp.First <UnionPalaceBasicInfo>().StatueID; } step = maxID / STATUE_COUNT; } UnionPalaceSpecialInfo s = GetUPSpecialInfoByID(step); if (s != null && s.UnionLevel <= bangHuiLevel) { lifePercent = s.MaxLifePercent; } } EquipPropItem propItem = new EquipPropItem(); propItem.ExtProps[(int)ExtPropIndexes.MaxLifeV] = life; propItem.ExtProps[(int)ExtPropIndexes.AddAttack] = attack; propItem.ExtProps[(int)ExtPropIndexes.AddDefense] = defense; propItem.ExtProps[(int)ExtPropIndexes.AddAttackInjure] = injure; propItem.ExtProps[(int)ExtPropIndexes.MaxLifePercent] = lifePercent; client.ClientData.PropsCacheManager.SetExtProps((int)PropsSystemTypes.UnionPalace, propItem.ExtProps); } }