예제 #1
0
        public bool PrimaryAttack(bool isPlayer1, CharacterClass opponent) // returns true if killing blow
        {
            RedisManager redis  = new RedisManager();
            int          damage = 0;

            switch (ClassName)
            {
            case "Barbarian":
                if (RollAttack(opponent.ArmorClass))
                {
                    int rage = 0;
                    if (redis.CheckIfEffectActive(isPlayer1, "Raging"))
                    {
                        rage = 2;
                    }
                    damage = RollDamage(1, 12, (int)Stat.Str, rage);     // 1d12 + STR + 2(Rage damage if active)
                }
                break;

            case "Bard":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(1, 8, (int)Stat.Dex, 0);     // 1d8 + DEX
                }
                break;

            case "Cleric":
                if (!RollSpellSave((int)Stat.Wis, (int)Stat.Dex, opponent))     // 1d8(DEX Save)
                {
                    damage = RollDie(8);
                }
                break;

            case "Druid":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(1, 8, (int)Stat.Wis, 0);     // 1d8 + WIS
                }
                break;

            case "Fighter":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(2, 6, (int)Stat.Str, 0);     // 2d6 + STR
                }
                break;

            case "Monk":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(1, 4, (int)Stat.Dex, 0);     // 1d4 + DEX
                }
                break;

            case "Paladin":
                if (RollAttack(opponent.ArmorClass))
                {
                    int smite = 0;
                    if (redis.CheckIfEffectActive(isPlayer1, "Smiting"))
                    {
                        smite = RollDie(8);
                        //redis.DecrementResource(isPlayer1);
                        redis.RemoveEffect(isPlayer1, "Smiting");
                    }
                    damage = RollDamage(1, 8, (int)Stat.Str, smite);     // 1d8 + STR
                }
                break;

            case "Ranger":
                if (RollAttack(opponent.ArmorClass))
                {
                    int mark = 0;
                    if (redis.CheckIfEffectActive(isPlayer1, "Marking"))
                    {
                        mark = RollDie(6);
                    }
                    damage = RollDamage(1, 8, (int)Stat.Dex, mark);     // 1d8 + DEX
                }
                break;

            case "Rogue":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(1, 4, (int)Stat.Dex, RollDie(6));     // 1d4 + DEX + 1d6(Sneak Attack)
                    redis.DecrementResource(isPlayer1);
                }
                break;

            case "Sorcerer":
                if (!RollSpellSave((int)Stat.Cha, (int)Stat.Con, opponent))     // 1d6(CON Save)
                {
                    damage = RollDie(6);
                }
                break;

            case "Warlock":
                if (RollAttack(opponent.ArmorClass))
                {
                    int hex = 0;
                    if (redis.CheckIfEffectActive(isPlayer1, "Hexing"))
                    {
                        hex = RollDie(6);
                    }
                    damage = RollDamage(1, 10, (int)Stat.Cha, hex);     // 1d10 + CHA
                }
                break;

            case "Wizard":
                if (RollAttack(opponent.ArmorClass))
                {
                    damage = RollDamage(1, 10, (int)Stat.Int, 0);     // 1d10 + INT
                }
                break;

            default:
                break;
            }

            redis.DecrementAction();

            bool over;

            if (damage != 0)
            {
                over = redis.ApplyDamage(isPlayer1, damage, Character.Name);
                if (over)
                {
                    //redis.MatchOver(); // Probably pass isPlayer
                    return(true);
                }
            }

            return(false);
        }
예제 #2
0
        private void btnEndRound_Click(object sender, EventArgs e)
        {
            isPlayer1sTurn = redis.GetTurn(); // Player who ended their turn
            redis.SetTurn(!isPlayer1sTurn);   // Set that it is now the opponents turn
            isPlayer1sTurn = !isPlayer1sTurn; // Opponent becomes current player

            if (redis.GetTurn())              // Player 1's Turn
            {
                lblTurn.Text = "<< Player 1's turn.";

                btnPrimary2.Enabled   = false;
                btnSecondary2.Enabled = false;

                if (redis.CheckIfEffectActive(isPlayer1sTurn, "Incapacitated"))
                {
                    if (player2Class.RollSpellSave((int)Stat.Cha, (int)Stat.Wis, player1Class)) // Succeeds saving throw
                    {
                        redis.IncrementAction();
                        redis.AddToCombatLog(player1.Name + " is no longer incapacitated!");
                        redis.RemoveEffect(isPlayer1sTurn, "Incapacitated");

                        btnPrimary1.Enabled   = true;
                        btnSecondary1.Enabled = true;
                    }
                    else // Fails saving throw
                    {
                        redis.AddToCombatLog(player1.Name + " is still incapacitated! They lose their turn.");

                        btnPrimary1.Enabled   = false;
                        btnSecondary1.Enabled = false;
                    }
                }
                else
                {
                    redis.IncrementAction();
                    redis.AddToCombatLog(player1.Name + "'s turn.");

                    btnPrimary1.Enabled   = true;
                    btnSecondary1.Enabled = true;
                }

                if (player1Class.ClassName == "Rogue")
                {
                    redis.IncrementResource(isPlayer1sTurn);
                }
            }
            else // Player 2's Turn
            {
                lblTurn.Text = "Player 2's turn. >>";

                btnPrimary1.Enabled   = false;
                btnSecondary1.Enabled = false;


                if (redis.CheckIfEffectActive(isPlayer1sTurn, "Incapacitated"))
                {
                    if (player1Class.RollSpellSave((int)Stat.Cha, (int)Stat.Wis, player2Class))
                    {
                        redis.IncrementAction();
                        redis.AddToCombatLog(player2.Name + " is no longer incapacitated!");
                        redis.RemoveEffect(isPlayer1sTurn, "Incapacitated");

                        btnPrimary2.Enabled   = true;
                        btnSecondary2.Enabled = true;
                    }
                    else
                    {
                        redis.AddToCombatLog(player2.Name + " is still incapacitated! They lose their turn.");

                        btnPrimary2.Enabled   = false;
                        btnSecondary2.Enabled = false;
                    }
                }
                else
                {
                    redis.IncrementAction();
                    redis.AddToCombatLog(player2.Name + "'s turn.");

                    btnPrimary2.Enabled   = true;
                    btnSecondary2.Enabled = true;
                }

                if (player2Class.ClassName == "Rogue")
                {
                    redis.IncrementResource(isPlayer1sTurn);
                }
            }

            RefreshUI();
        }