public void Import(ClientEffect importObject, Type effectClass, int addValuePos, int addDeltaPos, int percValuePos, int percDeltaPos, int percentCheckPos, Stat overrideStat) { if (this.change == null) { this.change = new ChangeList(); } Stat usedStat = overrideStat == Stat.None ? importObject.ChangeStat : overrideStat; List <Stat> stats = new List <Stat>(); if (usedStat == Stat.ElementalDefendAll || usedStat == Stat.AllResist) { stats.AddRange(new Stat[] { Stat.ElementalDefendWater, Stat.ElementalDefendAir, Stat.ElementalDefendFire, Stat.ElementalDefendEarth }); } else if (usedStat == Stat.AllSpeed) { stats.AddRange(new Stat[] { Stat.Speed, Stat.FlySpeed }); } else if (usedStat == Stat.PMAttack) { stats.AddRange(new Stat[] { Stat.PhyAttack, Stat.MagicalAttack }); } else if (usedStat == Stat.PMDefend) { stats.AddRange(new Stat[] { Stat.PhysicalDefend, Stat.MagicalResist }); } else if (usedStat == Stat.ActiveDefend) { stats.AddRange(new Stat[] { Stat.Dodge, Stat.Parry, Stat.Block }); } else if (usedStat == Stat.ArStunLike) { stats.AddRange(new Stat[] { Stat.ArStun, Stat.ArStumble, Stat.ArStagger, Stat.ArSpin, Stat.OpenAerial }); } else { stats.Add(usedStat); } foreach (Stat stat in stats) { var change = new Change(); change.stat = new NamedEnum <modifiersenum>(stat.ToString()); if (change.stat == modifiersenum.NONE) { continue; } int isPercent = 0; if (importObject.reserved[percentCheckPos] != null) { isPercent = Int32.Parse(importObject.reserved[percentCheckPos].Trim()); bool overideFunction = false; int valueIdx; int deltaIdx; // Speed should always be evaluated as % even though description may not show it. if (stat == Stat.Speed || stat == Stat.FlySpeed) { overideFunction = true; } if (isPercent == 1 || overideFunction == true) { change.func = StatFunc.PERCENT; valueIdx = percValuePos; deltaIdx = percDeltaPos; } else { change.func = StatFunc.ADD; valueIdx = addValuePos; deltaIdx = addDeltaPos; } // zer0patches : Need to update positions maybe? if (importObject.reserved[valueIdx] != null) { change.value = Int32.Parse(importObject.reserved[valueIdx].Trim()); } else { change.value = 1; } if (importObject.reserved[deltaIdx] != null) { change.delta = Int32.Parse(importObject.reserved[deltaIdx].Trim()); } } else { if (importObject.reserved[addValuePos] != null) { change.func = StatFunc.ADD; change.value = Int32.Parse(importObject.reserved[addValuePos].Trim()); if (importObject.reserved[addDeltaPos] != null) { change.delta = Int32.Parse(importObject.reserved[addDeltaPos].Trim()); } } if (change.value == 0 && change.delta == 0) { change.func = StatFunc.PERCENT; // zer0patches : Need to update positions maybe? if (importObject.reserved[percValuePos] != null) { change.value = Int32.Parse(importObject.reserved[percValuePos].Trim()); } else { change.value = 1; } if (importObject.reserved[percDeltaPos] != null) { change.delta = Int32.Parse(importObject.reserved[percDeltaPos].Trim()); } } } if (stat.ToString().EndsWith("Delay") || effectClass.Equals(typeof(CurseEffect))) { change.value = -change.value; //if (effectClass.Equals(typeof(SlowEffect))) change.delta = -change.delta; } if ((stat == Stat.Speed || stat == Stat.FlySpeed) && change.func == StatFunc.ADD) { //change.value *= 100; } if (stat == Stat.AttackRange && change.func == StatFunc.ADD) { change.value *= 1000; } if (importObject.type == EffectType.WeaponStatBoost || importObject.type == EffectType.WeaponStatUp) { /* * if(change.conditions == null) * change.conditions = new Conditions(); * if(change.conditions.ConditionList == null) * change.conditions.ConditionList = new List<Condition>(); */ /* * WeaponCondition condition = new WeaponCondition(); * * // Make some corrections to maintain server compatibility with exisitng enumerations * string required_weapons = importObject.reserved[4].ToUpper().Trim(); * if (required_weapons.Contains("2H_SWORD")) required_weapons = required_weapons.Replace("2H_SWORD", "SWORD_2H"); * * condition.weapon = required_weapons; * change.conditions.ConditionList.Add(condition); * */ } if (importObject.reserved[8] != null && importObject.reserved[8].Trim() == "1") { /* * Condition flycondition = new OnFlyCondition(); * if (change.conditions == null) * change.conditions = new Conditions(); * if (change.conditions.ConditionList == null) * change.conditions.ConditionList = new List<Condition>(); * change.conditions.ConditionList.Add(flycondition); */ } this.change.Add(change); } }
public void Import(ClientEffect importObject, Type effectClass, int addValuePos, int addDeltaPos, int percValuePos, int percDeltaPos, int percentCheckPos, Stat overrideStat) { if (this.change == null) { this.change = new ChangeList(); } Stat usedStat = overrideStat == Stat.None ? importObject.ChangeStat : overrideStat; List <Stat> stats = new List <Stat>(); if (usedStat == Stat.ElementalDefendAll || usedStat == Stat.AllResist) { stats.AddRange(new Stat[] { Stat.ElementalDefendWater, Stat.ElementalDefendAir, Stat.ElementalDefendFire, Stat.ElementalDefendEarth }); } else if (usedStat == Stat.AllSpeed) { stats.AddRange(new Stat[] { Stat.Speed, Stat.FlySpeed }); } else if (usedStat == Stat.PMAttack) { stats.AddRange(new Stat[] { Stat.PhyAttack, Stat.MagicalAttack }); } else if (usedStat == Stat.PMDefend) { stats.AddRange(new Stat[] { Stat.PhysicalDefend, Stat.MagicalResist }); } else if (usedStat == Stat.ActiveDefend) { stats.AddRange(new Stat[] { Stat.Dodge, Stat.Parry, Stat.Block }); } else if (usedStat == Stat.ArStunLike) { stats.AddRange(new Stat[] { Stat.ArStun, Stat.ArStumble, Stat.ArStagger, Stat.ArSpin, Stat.OpenAerial }); } else { stats.Add(usedStat); } foreach (Stat stat in stats) { var change = new Change(); change.stat = new NamedEnum <modifiersenum>(stat.ToString()); int isPercent; if (importObject.reserved[percentCheckPos] != null) { int valueIdx; int deltaIdx; if (Int32.TryParse(importObject.reserved[percentCheckPos].Trim(), out isPercent) && isPercent == 1) { change.func = StatFunc.PERCENT; valueIdx = percValuePos; deltaIdx = percDeltaPos; } else { change.func = StatFunc.ADD; valueIdx = addValuePos; deltaIdx = addDeltaPos; } change.value = Int32.Parse(importObject.reserved[valueIdx].Trim()); if (importObject.reserved[deltaIdx] != null) { change.delta = Int32.Parse(importObject.reserved[deltaIdx].Trim()); } } else { if (importObject.reserved[addValuePos] != null) { change.func = StatFunc.ADD; change.value = Int32.Parse(importObject.reserved[addValuePos].Trim()); if (importObject.reserved[addDeltaPos] != null) { change.delta = Int32.Parse(importObject.reserved[addDeltaPos].Trim()); } } if (change.value == 0 && change.delta == 0) { change.func = StatFunc.PERCENT; change.value = Int32.Parse(importObject.reserved[percValuePos].Trim()); if (importObject.reserved[percDeltaPos] != null) { change.delta = Int32.Parse(importObject.reserved[percDeltaPos].Trim()); } } } if (stat.ToString().EndsWith("Delay") || effectClass.Equals(typeof(CurseEffect))) { change.value = -change.value; //if (effectClass.Equals(typeof(SlowEffect))) change.delta = -change.delta; } if ((stat == Stat.Speed || stat == Stat.FlySpeed) && change.func == StatFunc.ADD) { change.value *= 100; } if (stat == Stat.AttackRange && change.func == StatFunc.ADD) { change.value *= 1000; } this.change.Add(change); } }