コード例 #1
0
        private string[] GetDamage(FormState state, string name, BattleStats bstats, int damage, Enemy target, string attackName)
        {
            string[] result = new string[] { "", "" };
            Random   r      = state.Random; // Random pointer
            Player   p      = state.Player;

            if (IsHit(r))
            {
                // get brief damage boost after initial parry

                if (p.Stats.isParried)
                {
                    p.Stats.isParried = false;
                    damage           *= 2;
                }

                result[0] = $"{name} used {attackName}! ";
                int crit = GetDamageFromCrit(damage, bstats.stats[Stat.CRITS], r);

                if (crit > damage)
                {
                    result[0] += "It was a critical hit! ";
                    damage     = crit;
                }

                result[1] = damage.ToString();
            }
            else
            {
                tp.Miss();
                result[0] = $"{name} used {attackName} and missed!";
                result[1] = 0.ToString();
            }
            return(result);
        }
コード例 #2
0
        private void EnemyAttack()
        {
            if (eTurn == d.enemies.Count)
            {
                eTurn = 0;
            }

            Enemy attacker = d.enemies[eTurn];

            if (attacker.hp > 0)
            {
                Skill s = attacker.active[r.Next(0, attacker.active.Count)];

                CombatLog.AppendText($"{attacker.name} used {s.Name}");
                CombatLog.AppendText(Environment.NewLine);

                int h = r.Next(0, 100);

                if (h < 95)
                {
                    int damage = SkillManager.CalculateDamage(s.Damage, s.Multiplier);

                    damage -= p.resistances[s.Element];

                    bool crit = IsCritHit();

                    if (crit)
                    {
                        damage = (damage * 2); // crit damage
                        tp.HalfTurn();
                    }
                    else
                    {
                        tp.FullTurn();
                    }

                    string log;

                    if (PlayerHealth.Value - damage <= 0)
                    {
                        timer.Stop();
                        PlayerHealth.Value = 0;
                        tp.turnEnd         = true;
                        log = "You died! Returning you back to the Select Dungeon screen...";
                        MessageBox.Show(log);
                        Run();
                    }
                    else
                    {
                        log = $"It hit for {damage} damage.";

                        int v = PlayerHealth.Value - damage;

                        if (v >= PlayerHealth.Maximum)
                        {
                            PlayerHealth.Value = PlayerHealth.Maximum;
                        }
                        else
                        {
                            PlayerHealth.Value -= damage;
                        }

                        CombatLog.AppendText(log);
                        CombatLog.AppendText(Environment.NewLine);
                        CombatLog.AppendText(Environment.NewLine);
                    }
                }
                else
                {
                    CombatLog.AppendText("The attack missed.");
                    CombatLog.AppendText(Environment.NewLine);
                    CombatLog.AppendText(Environment.NewLine);
                    tp.Miss();
                }

                CheckTurnEnemies();
            }
            eTurn++;
        }