Exemplo n.º 1
0
 public List <int>[] TriggeredStates(Battler u, Battler t, double effectMagnitude = 1.0)
 {
     List <int>[] stateIds = new List <int>[] { new List <int>(), new List <int>() };
     for (int i = 0; i < StatesGiveRate.Length; i++)
     {
         if (StatesGiveRate[i] <= 0)
         {
             continue;
         }
         double tAttr  = (t.StateRates[i] + 100) * u.Luk() / (100 * t.Luk());
         double result = (StatesGiveRate[i] + 100) * tAttr / 100.0 * effectMagnitude;
         if (Chance((int)result))
         {
             stateIds[0].Add(i);
         }
     }
     for (int i = 0; i < StatesReceiveRate.Length; i++)
     {
         if (StatesReceiveRate[i] <= 0)
         {
             continue;
         }
         double result = (StatesReceiveRate[i] + 100) * (u.StateRates[i] + 100) / 10000.0;
         if (Chance((int)result))
         {
             stateIds[1].Add(i);
         }
     }
     return(stateIds);
 }
Exemplo n.º 2
0
        private List <int> ApplyToolEffects(Battler b, Tool t, double effectMagnitude = 1.0, ApplyExtra extraFunc = null)
        {
            List <int> oneTarget = new List <int>();

            if (t.Hit(this, b, effectMagnitude))
            {
                CriticalHitRatio = t.CriticalHitRatio(this, b, effectMagnitude);
                oneTarget.Add(CriticalHitRatio);
                oneTarget.Add(t.ElementMagnitude(b));
                oneTarget.Add(t.GetToolFormula(this, b, effectMagnitude));
                List <int>[] states = t.TriggeredStates(this, b, effectMagnitude);
                oneTarget.Add(states[0].Count);
                foreach (int stateGiveId in states[0])
                {
                    oneTarget.Add(stateGiveId);
                }
                oneTarget.Add(states[1].Count);
                foreach (int stateReceiveId in states[1])
                {
                    oneTarget.Add(stateReceiveId);
                }
                if (extraFunc != null)
                {
                    oneTarget = extraFunc(oneTarget, b, effectMagnitude);
                }
            }
            else
            {
                oneTarget.Add(-t.Type);
            }
            return(oneTarget);
        }
Exemplo n.º 3
0
        private List <int> ExecuteSteal(List <int> oneActResult, Battler target, double effectMagnitude)
        {
            double willSteal = effectMagnitude * 100 * Luk() / target.Luk();

            oneActResult.Add(SelectedSkill.Steal && Chance((int)willSteal) ? 1 : 0);
            return(oneActResult);
        }
Exemplo n.º 4
0
        public bool Hit(Battler u, Battler t, double effectMagnitude = 1.0)
        {
            double toolAcc = Accuracy * (u.SelectedWeapon != null ? u.SelectedWeapon.Accuracy : 100) / 10000.0;
            double def     = t.Spd() * t.Eva();
            double result  = 95 * toolAcc * u.Tec() * u.Acc() / (def != 0 ? def : 0.01) * effectMagnitude;

            return(Chance((int)result));
        }
Exemplo n.º 5
0
        public int CriticalHitRatio(Battler u, Battler t, double effectMagnitude = 1.0)
        {
            if (effectMagnitude < 0.5)
            {
                return(1);
            }
            double toolCrt = CritcalRate * (u.SelectedWeapon != null ? u.SelectedWeapon.CritcalRate : 100) / 10000.0;
            double def     = t.Tec() * t.Cev();
            double result  = 2 * Math.Pow(u.Tec() * toolCrt, 1.1) * u.Crt() / (def != 0 ? def : 0.01) * effectMagnitude;

            return(Chance((int)result) ? 3 : 1);
        }
Exemplo n.º 6
0
 public Battler(Battler original) : base(original)
 {
     Class             = Clone(original.Class, o => new BattlerClass(o));
     HP                = original.HP;
     SP                = original.SP;
     Level             = original.Level;
     ZPosition         = original.ZPosition;
     XPosition         = original.XPosition;
     Stats             = Clone(original.Stats, o => new Stats(o));
     StatBoosts        = Clone(original.StatBoosts, o => new Stats(o));
     ElementRates      = Clone(original.ElementRates);
     StateRates        = Clone(original.StateRates);
     Skills            = Clone(original.Skills, o => new Skill(o));
     Items             = Clone(original.Items, o => new Item(o));
     Weapons           = Clone(original.Weapons, o => new Weapon(o));
     PassiveSkills     = Clone(original.PassiveSkills, o => new PassiveSkill(o));
     Type              = original.Type;
     ComboPartners     = original.ComboPartners;
     SelectedSkill     = Clone(original.SelectedSkill, o => new Skill(o));
     SelectedItem      = Clone(original.SelectedItem, o => new Item(o));
     SelectedWeapon    = Clone(original.SelectedWeapon, o => new Weapon(o));
     SelectedTargets   = original.SelectedTargets;
     States            = Clone(original.States, o => new State(o));
     MovingLocation    = original.MovingLocation;
     ExecutedAction    = original.ExecutedAction;
     CriticalHitRatio  = original.CriticalHitRatio;
     TargetResults     = Clone(original.TargetResults, o => new List <List <int> >(o));
     EffectResults     = Clone(original.EffectResults, o => new List <int>(o));
     StatModifiers     = Clone(original.StatModifiers, o => new Stats(o));
     IsConscious       = original.IsConscious;
     CannotMove        = original.CannotMove;
     SPConsumeRate     = original.SPConsumeRate;
     ComboDifficulty   = original.ComboDifficulty;
     Counter           = original.Counter;
     Reflect           = original.Reflect;
     ExtraTurns        = original.ExtraTurns;
     DisabledToolTypes = Clone(original.DisabledToolTypes, o => new List <int>(o));
     ContactSpread     = Clone(original.ContactSpread, o => new List <int>(o));
     RemoveByHit       = Clone(original.RemoveByHit, o => new List <int>(o));
 }
Exemplo n.º 7
0
        public int ElementMagnitude(Battler b)
        {
            int rate = b.ElementRates[Element];

            if (rate == 0)
            {
                return(0);
            }
            if (rate < 100)
            {
                return(1);
            }
            if (rate >= 100)
            {
                return(2);
            }
            if (rate > -100)
            {
                return(-1);
            }
            return(-2);
        }
Exemplo n.º 8
0
        public int GetToolFormula(Battler u, Battler t, double effectMagnitude = 1.0)
        {
            double total = 0;
            double power = Power * (u.SelectedWeapon != null ? u.SelectedWeapon.Power : 10) / 100.0;
            double rates = power * u.CriticalHitRatio * (t.ElementRates[Element] + 100) / 100.0;

            switch (Formula)
            {
            case 1: total = (1.5 * u.Atk() - 1.25 * t.Def()) * rates; break;                                 // Physical standard

            case 2: total = (1.5 * u.Map() - 1.25 * t.Mar()) * rates; break;                                 // Magical standard

            case 3: total = (1.5 * (u.Atk() + u.Map()) / 2 - 1.25 * (t.Def() + t.Mar()) / 2) * rates; break; // Mixed standard

            case 4: total = (1.5 * (u.Atk() / 4 + u.Tec() * 3 / 4) - 1.25 * t.Def()) * rates; break;         // Physical gun

            case 5: total = (1.5 * (u.Map() / 4 + u.Tec() * 3 / 4) - 1.25 * t.Mar()) * rates; break;         // Magical gun
            }
            int intTotal     = (int)(total * effectMagnitude);
            int variance     = Conversion.NaturalNumber(intTotal) / 10;
            int formulaValue = intTotal + RandInt(-variance, variance);

            return(Formula > 0 ? Conversion.NaturalNumber(formulaValue) : formulaValue);
        }