Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }