Beispiel #1
0
 public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target)
 {
     Player player = initiator as Player;
     if (player == null) throw new ArgumentException("Only players can eat!");
     player.EatItem(item);
     yield break;
 }
Beispiel #2
0
 public void MarkKilled(Character dead)
 {
     if (dead.Name.Equals(rivalMonsterName))
     {
         ++rivalKillCounter;
     }
 }
Beispiel #3
0
 public void NotifyBattleSlotsUpdated(Character character)
 {
     if (OnBattleSlotUpdated != null)
     {
         OnBattleSlotUpdated();
         //OnCharacterUpdated(character);
     }
 }
Beispiel #4
0
 public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target)
 {
     if (game.GetRandom(100) <= 75)
     {
         UINotifier.Get().NotifyFlee(initiator);
     }
     yield break;
 }
Beispiel #5
0
 public DamageStep(Character target, int damage, bool crit, int hitPoints)
 {
     Target = target;
     Damage = damage;
     Crit = crit;
     DesiredHitPoints = hitPoints;
     currentHp = hitPoints - damage;
     damagePerStep = Math.Min(-1, Damage / TOTAL_STEPS);
 }
Beispiel #6
0
        public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target)
        {
            // Go through types that have actions and perform them all.
            if (Types.Contains(FeatType.NORMAL_DAMAGE))
            {
                initiator.GetMainAttack().Execute(game, initiator, target);
            }

            // Apply any effect.
            if (EffectParams != null)
            {
                target.AddEffect(game.GetEffect(EffectParams));
            }
            yield break;
        }
Beispiel #7
0
        public void FillInfo(Character character)
        {
            this.character = character;
            if (character == null) return;

            isPlayerCharacter = character is Player;

            if (characterImage != null)
            {
                characterImage.Dispose();
                characterImage = null;
            }
            characterImage = GetPictureForCharacter(character);
            nameLabel.Text = character.Name;
            nameLabel.Location = new Point((this.Width - nameLabel.Width)/2, nameLabel.Location.Y);
            setLevelAndExperience(character);
            DrawHealthBar(character.HitPoints, character.MaxHitPoints);
            Invalidate();
        }
Beispiel #8
0
 private void setLevelAndExperience(Character character)
 {
     if (isPlayerCharacter)
     {
         Player player = character as Player;
         levelLabel.Visible = true;
         levelLabel.Text = "Level " + player.Level;
         levelLabel.Location = new Point((panel3.Width - levelLabel.Width) / 2, levelLabel.Location.Y);
         panel3.Visible = true;
         panel2.Visible = true;
         drawProgressBar(player.ExperiencePoints, player.TotalXpForNextLevel(player.Level), player.TotalXpForNextLevel(player.Level - 1), Color.SkyBlue, experiencePointsBar, xpLabel);
     }
     else
     {
         panel3.Visible = false;
         panel2.Visible = false;
     }
 }
Beispiel #9
0
 public Treasure(Game game, Player player)
 {
     Player = player;
     Loot = new Character(game, "Chest", "chest", 1, 0, 0, 0);
     LootItems = game.GetRandomLoot();
 }
Beispiel #10
0
 private void CharacterInfo_OnCharacterUpdated(Character c)
 {
     if (character != c || character == null) return;
     FillInfo(c);
 }
Beispiel #11
0
 private Image GetPictureForCharacter(Character character)
 {
     if (character.IsDead())
     {
         return Image.FromFile(character.BaseImageName + "_dead.png");
     }
     else
     {
         Bitmap output = new Bitmap(100, 100);
         using (Graphics G = Graphics.FromImage(output))
         {
             G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
             G.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;
             G.DrawImage(Image.FromFile(character.BaseImageName + ".png"), 0, 0);
             if (character is Player)
             {
                 Player player = character as Player;
                 foreach (Item item in player.equipItems.Reverse())
                 {
                     if (item == null) continue;
                     G.DrawImage(Image.FromFile(item.GetEquipPictureName()), 0, 0);
                 }
                 if (player.BattleSlots[(int)BattleSlotType.LEFT_HAND].Item != null)
                 {
                     Image image = Image.FromFile(player.BattleSlots[(int)BattleSlotType.LEFT_HAND].Item.GetEquipPictureName());
                     image.RotateFlip(RotateFlipType.RotateNoneFlipX);
                     G.DrawImage(image, 0, 0);
                 }
                 if (player.BattleSlots[(int)BattleSlotType.RIGHT_HAND].Item != null)
                 {
                     G.DrawImage(Image.FromFile(player.BattleSlots[(int)BattleSlotType.RIGHT_HAND].Item.GetEquipPictureName()), 0, 0);
                 }
             }
             int effectHeight = 0;
             foreach (Effect effect in character.ActiveEffects)
             {
                 Image image = Image.FromFile(effect.GetImageName());
                 SizeF textSize = G.MeasureString(effect.RemainingTurns.ToString(), EFFECT_FONT);
                 int leftEdge = (character is Player ? 0 : output.Width - 25) - (int)textSize.Width;
                 G.DrawImage(image, leftEdge, effectHeight);
                 G.DrawString(effect.RemainingTurns.ToString(), EFFECT_FONT, Brushes.Black, new Point(leftEdge + 25, 25 - (int)textSize.Height));
             }
         }
         return output;
     }
 }
Beispiel #12
0
 public AttackStep(Character attacker)
 {
     Attacker = attacker;
 }
Beispiel #13
0
 public void NotifyCharacterDamage(Character character, int damage, bool crit)
 {
     OnCharacterDamage?.Invoke(character, damage, crit);
 }
Beispiel #14
0
 public HealStep(Character target, int increase, int hitPoints)
 {
     Target = target;
     Increase = increase;
     CurrentHitPoints = hitPoints;
 }
Beispiel #15
0
 public void NotifyCharacterUpdated(Character character)
 {
     OnCharacterUpdated?.Invoke(character);
 }
Beispiel #16
0
 public void NotifyFlee(Character character)
 {
     OnFlee?.Invoke(character);
 }
Beispiel #17
0
 public void NotifyEquipItemsUpdated(Character character)
 {
     if (OnEquipItemsUpdated != null)
     {
         OnEquipItemsUpdated();
         OnCharacterUpdated(character);
     }
 }
Beispiel #18
0
        public IEnumerable<FightStep> Execute(Game game, Character initiator, Character target)
        {
            bool crit = false;
            if (initiator.IsDead())
                throw new InvalidOperationException("Dead characters cannot attack!");

            int roll = game.Roll(DiceRoll.D20(0));
            int damage = 0;

            crit = false;
            if (roll >= stats.CritRangeStart)
            {
                roll = game.Roll(DiceRoll.D20(0));
                if (roll + initiator.AttackModifier > target.ArmorClass)
                {
                    crit = true;
                    for (int i = 0; i < stats.CritModifier; ++i)
                    {
                        damage += Math.Max(game.Roll(stats.Damage), 1);
                    }
                }
                else
                {
                    damage = Math.Max(game.Roll(stats.Damage), 1);
                }
            }
            else if (roll + initiator.AttackModifier > target.ArmorClass)
            {
                damage = Math.Max(game.Roll(stats.Damage), 1);
            } // else miss

            if (damage > 0 && initiator is Player)
            {
                (initiator as Player).GainProficiency(target as Monster, weapon);
            }

            target.UpdateHitPoints(-damage);
            yield return new AttackStep(initiator);
            yield return new DamageStep(target, -damage, crit, target.HitPoints);
        }