Exemple #1
0
        public void TakeDamage(double value)
        {
            if (value <= 0d)
            {
                return;
            }

            var evaChance = _stats.GetEVAChance(CurrentLevel);

            RollingEvasion(this, ref evaChance);

            var attackEvaded = RHelper.RollPercentage((int)evaChance);

            if (attackEvaded && _stats.EVAType == EVAType.Dodge)
            {
                AttackDodged(this, value);
                DodgedAttack = true;
                return;
            }
            BlockedDamage = attackEvaded;

            var reduction = attackEvaded ? 2d : 1d;

            if (attackEvaded)
            {
                AttackBlocked(this, ref value, ref reduction);
            }

            value /= reduction;
            TakeTrueDamage(value);
        }
        public void GeneratePack(int x, int y)
        {
            var pack = new MobPack(_model.Map)
            {
                Position = new Point(x, y)
            };
            var enemyCount = _model.Party.FrontRow.Count - RHelper.Roll(0, 1);

            if (enemyCount == 0)
            {
                ++enemyCount;
            }

            var xpReward = 0;

            // 25% Chance to get a group of enemies with the same race
            var raceGroup = RHelper.RollPercentage(25) ? _model.RaceFactory.GetRandomTemplate() : null;

            for (var i = 0; i < enemyCount; ++i)
            {
                var strengthRoll = RHelper.Roll(0, 99);
                var strength     = strengthRoll < 60
                    ? MobPackStrength.Equal
                    : strengthRoll < 90
                        ? MobPackStrength.Stronger
                        : strengthRoll < 98
                            ? MobPackStrength.Challenging
                            : MobPackStrength.Elite;

                xpReward += GenerateEnemy(pack, raceGroup, strength);
            }

            pack.XPReward = xpReward;

            switch (pack.Strength)
            {
            case MobPackStrength.Equal:
                pack.SightRadius = 25;
                break;

            case MobPackStrength.Stronger:
                pack.SightRadius = 20;
                break;

            case MobPackStrength.Challenging:
                pack.SightRadius = 10;
                break;

            case MobPackStrength.Elite:
                pack.SightRadius = 5;
                break;
            }

            _packs.Add(pack);
        }
 public Digger(int row, int col, int digGoal, IRMap map)
 {
     _row               = row;
     _col               = col;
     _digGoal           = digGoal;
     _map               = map;
     _digged            = 0;
     _darkDigger        = RHelper.RollPercentage(25);
     _doubleCombatBonus = RHelper.RollPercentage(10);
     _combatBonus       = (ulong)RHelper.Roll(0, 23);
 }
Exemple #4
0
        public static IStats GetRandomBaseStats()
        {
            var stats = new Stats();
            var hp    = stats[Stat.HP];

            hp[StatType.Base]   = RHelper.Roll(75, 200);
            hp[StatType.Growth] = RHelper.Roll(5, 25);

            stats[BaseStat.MP][StatType.Base] = 200d;

            for (var stat = Stat.AD; stat <= Stat.CHA; ++stat)
            {
                var s = stats[stat];
                s[StatType.Base]   = RHelper.Roll(20, 80);
                s[StatType.Growth] = RHelper.Roll(1, 20);
            }

            stats.EVAType = RHelper.RollPercentage(10) ? EVAType.Block : EVAType.Dodge;

            if (stats.EVAType == EVAType.Dodge)
            {
                stats[BaseStat.EVA][StatType.Base]   = 2d;
                stats[BaseStat.EVA][StatType.Growth] = RHelper.Roll(1, 8);
            }
            else
            {
                stats[BaseStat.EVA][StatType.Base]   = RHelper.Roll(20, 80);
                stats[BaseStat.EVA][StatType.Growth] = RHelper.Roll(0, 1);
            }

            var spd = stats[BaseStat.SPD];

            spd[StatType.Base]       = 100d;
            spd[StatType.Growth]     = RHelper.Roll(5, 10);
            spd[StatType.Multiplier] = 0.0255d;

            for (var stat = Stat.FIR; stat <= Stat.LGT; ++stat)
            {
                stats[stat][StatType.Base] = RHelper.Roll(50, 200);
            }

            for (var stat = Stat.PSN; stat <= Stat.SIL; ++stat)
            {
                stats[stat][StatType.Base] = RHelper.Roll(0, 30);
            }

            stats.XPMultiplier = RHelper.Roll(80, 120) / 100d;

            return(stats);
        }
        public override void SpellEffect(ICharacter caster, ICharacter target)
        {
            var damage = (3.75 * aAD * (aARC / 100) - 1.25 * dDEF) * (100 / dARC);

            DealDamage(damage);
            for (var i = Stat.HP; i <= Stat.SIL; ++i)
            {
                var stat      = target.Stats[i];
                var battleMod = stat[StatType.BattleMod];
                if (battleMod > 1 && RHelper.RollPercentage(40))
                {
                    BuffStat(caster, i, battleMod - 1);
                    stat[StatType.BattleMod] = 1;
                }
            }
        }
Exemple #6
0
        public void AddEnemy(ICharacter enemy, MobPackStrength strength = MobPackStrength.Stronger,
                             double convertBonus = 1.2)
        {
            _enemies.Add(enemy);
            SetConvertBonus(enemy, convertBonus);
            SetStrength(enemy, strength);

            var coreCount = RHelper.RollPercentage(10) ? 2 : 1;

            if (RHelper.RollPercentage(20))
            {
                IntactCoreCount += coreCount;
            }
            else
            {
                UnstableCoreCount += coreCount;
            }
        }
Exemple #7
0
        protected override void OnAttacking(ICharacter attacker, ICharacter target, ISpell spell, ref double damage, ref double modifier)
        {
            var drunkCounter = GetVar(attacker, "drunk_turnCounter") - 1;

            SetVar(attacker, "drunk_turnCounter", drunkCounter);

            if (attacker.Race == "Beerman")
            {
                damage *= 1.25d;
            }
            else if (RHelper.RollPercentage(25))
            {
                damage = 0d;
            }

            if (drunkCounter > 0)
            {
                return;
            }

            RemoveFrom(attacker);
        }
Exemple #8
0
        public bool Generate(int row, int col, Direction direction)
        {
            Width  = RHelper.Roll(MinWidth, MaxWidth);
            Height = RHelper.Roll(MinHeight, MaxHeight);

            if (!CheckAvailableSpace(row, col, direction))
            {
                return(false);
            }

            GenerateImpl(row, col, direction);

            if (!_spawningEnabled || !RHelper.RollPercentage(_spawnChance))
            {
                return(true);
            }

            var topRow  = row;
            var leftCol = col;

            GetTopLeftCorner(ref topRow, ref leftCol, direction);

            var maxRow = topRow + Height;
            var maxCol = leftCol + Width;

            int spawnRow;
            int spawnCol;

            do
            {
                spawnRow = RHelper.Roll(topRow, maxRow);
                spawnCol = RHelper.Roll(leftCol, maxCol);
            } while (!Map[spawnRow, spawnCol].Is(RCell.Walkable));

            _packManager.GeneratePack(spawnCol, spawnRow);

            return(true);
        }
Exemple #9
0
        public bool TryToApplyDebuf(DebuffResistance type, int successChance)
        {
            var resistance = GetTotalStat(type) * 3;

            return(RHelper.RollPercentage((int)(successChance - resistance)));
        }
 protected bool RollPercentage(double chance)
 {
     return(RHelper.RollPercentage((int)chance));
 }