Exemple #1
0
 public bool OnSkillUse(CharacterStats player, Stats enemy, EffectValues skillValues)
 {
     if (CheckCooldown(false))
     {
         return(SkillUseEffect(player, enemy, skillValues)); // False on interrupted skill
     }
     return(true);
 }
Exemple #2
0
 public bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValues)
 {
     if (CheckCooldown(false))
     {
         return(AttackHitEffect(self as CharacterStats, attacker, attackValues));
     }
     return(true);
 }
Exemple #3
0
 public bool OnAttackUse(CharacterStats player, Stats enemy, EffectValues attackValues)
 {
     if (CheckCooldown(false))
     {
         return(AttackUseEffect(player, enemy, attackValues));
     }
     return(true);
 }
Exemple #4
0
        protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy)
        {
            int drain = Power(player, enemy);

            SkillEffectValues = new EffectValues(drain, drain, this);

            return(true);
        }
Exemple #5
0
        protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy)
        {
            essence = Buff.AddBuff <ShadowEssence>(player);
            int damage = Power(player, enemy) * essence.Stacks;

            SkillEffectValues = new EffectValues(damage, source: this);

            return(true);
        }
Exemple #6
0
        public void AttackEnemy(Stats self, Stats target)
        {
            EffectValues   attackValues = new EffectValues(self.Attack);
            CharacterStats player       = null;

            if (self is CharacterStats) // Check if player is attacking
            {
                player = self as CharacterStats;
            }

            // Check buff and item effects on attacking unit
            if (player != null)                   // Player is attacking
            {
                foreach (Buff buff in self.Buffs) // Buff events
                {
                    if (!buff.OnAttackUse(player, target, attackValues))
                    {
                        return;
                    }
                }
                foreach (Item item in player.OwnerUnit.Items) // Item events
                {
                    if (!item.OnAttackUse(player, target, attackValues))
                    {
                        return;
                    }
                }
            }
            else // Enemy is attacking
            {
                foreach (Buff buff in self.Buffs)
                {
                    if (!buff.OnAttackUse((CharacterStats)target, self, attackValues))
                    {
                        return;
                    }
                }
            }

            // Calculate attack value and check buff and item effects
            if (target.OwnerUnit.OnAttackHit(target, self, attackValues))
            {
                int damage = Math.Max(0, attackValues.Damage - target.Armour);
                target.Health -= damage;

                if (player != null) // Player is attacking
                {
                    Battle.WriteEnemyHealth("Your attack", damage, target);
                }
                else // Enemy is attacking
                {
                    Battle.WritePlayerDamage(self.OwnerUnit.Name, "attack", damage, target.Health);
                }
            }
        }
Exemple #7
0
 // Handles the damage and healing part of the skill usend on the enemy
 private static void damageAndHealing(CharacterStats player, Stats self, EffectValues skillEffectValues)
 {
     if (skillEffectValues.Damage >= 0)
     {
         self.Health -= skillEffectValues.Damage;
         Battle.WriteEnemyHealth(skillEffectValues.SourceSkill.Name, skillEffectValues.Damage, self);
     }
     if (skillEffectValues.Healing >= 0)
     {
         player.Health += skillEffectValues.Healing;
         Battle.WritePlayerHealthGain(skillEffectValues.SourceSkill.Name, skillEffectValues.Healing, player);
     }
 }
Exemple #8
0
        protected override bool SetSkillEffectValues(CharacterStats player, Stats enemy)
        {
            shard = Buff.AddBuff <SoulShard>(player);
            if (soulShardCost > shard.Stacks)
            {
                Console.WriteLine($"Not enough {shard.Name} to use skill.\n");
                return(false);
            }

            int damage = Power(player, enemy);

            SkillEffectValues = new EffectValues(damage, source: this);

            return(true);
        }
Exemple #9
0
 public override bool OnSkillHit(CharacterStats player, Stats enemy, EffectValues skillEffectValues) // Always call when overriding
 {
     foreach (Buff buff in player.Buffs)
     {
         if (!buff.OnSkillHit(player, enemy, skillEffectValues))
         {
             return(false);                                                    // Skill interrupted by buff effect
         }
     }
     foreach (Item item in player.OwnerUnit.Items)
     {
         if (!item.OnSkillHit(player, enemy, skillEffectValues))
         {
             return(false);                                                    // Skill interrupted by item effect
         }
     }
     return(base.OnSkillHit(player, enemy, skillEffectValues));
 }
Exemple #10
0
        public sealed override bool OnSkillHit(CharacterStats player, Stats self, EffectValues skillEffectValues)
        {
            foreach (Buff buff in self.Buffs)
            {
                if (!buff.OnSkillHit(player, self, skillEffectValues))
                {
                    return(false); // Skill usage interrupted by an effect
                }
            }

            // Checks for base effects and then enemy's effect. If both return true then skill usage has not been interrupted and can proceed
            if (base.OnSkillHit(player, self, skillEffectValues) &&
                SkillHitEffect(player, self, skillEffectValues))
            {
                damageAndHealing(player, self, skillEffectValues);
                return(true);
            }

            return(false);
        }
Exemple #11
0
        // Checks all buff and item effects on the attacked unit
        // Returns false on impaired by an effect attack; True on successful attack
        public virtual bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValues) // Always call when overriding
        {
            foreach (Buff buff in self.Buffs)                                                  // Check buff effects for attacked unit
            {
                if (!buff.OnAttackHit(self, attacker, attackValues))
                {
                    return(false);
                }
            }

            if (self is CharacterStats) // Player is attacked --> check item effects
            {
                CharacterStats player = self as CharacterStats;
                foreach (Item item in player.OwnerUnit.Items)
                {
                    if (!item.OnAttackHit(player, attacker, attackValues))
                    {
                        return(false);                                                   // Checks for item cooldown and item on attack hit effect
                    }
                }
            }

            return(true);
        }
Exemple #12
0
        protected virtual bool SkillHitEffect(CharacterStats player, Stats enemy, EffectValues attackValues) => true; // Don't call when overriding

        // Returns true if skill should continue; False on interrupted (e.g. miss, resist, etc.)
        protected virtual bool SkillUseEffect(CharacterStats player, Stats enemy, EffectValues attackValues) => true; // Don't call when overriding
Exemple #13
0
 public virtual bool OnSkillUse(CharacterStats player, Stats enemy, EffectValues skillValues)
 {
     return(true);
 }
Exemple #14
0
 public virtual bool OnAttackUse(CharacterStats player, Stats enemy, EffectValues attackValues)
 {
     return(true);
 }
Exemple #15
0
 public virtual bool OnAttackHit(Stats self, Stats attacker, EffectValues attackValue)
 {
     return(true);
 }
Exemple #16
0
 // Resets necessary skill values and prepares skill for fresh use
 public virtual void Refresh()
 {
     SkillEffectValues = new EffectValues();
     CurrentCooldown   = 0;
 }
Exemple #17
0
 // The behaviour of the enemy for when hit by a skill
 // Returns true if skill has not been interrupted; False if skill has been interrupted and should not proceed
 protected virtual bool SkillHitEffect(CharacterStats player, Stats self, EffectValues skillEffectValues)
 {
     return(true);
 }
Exemple #18
0
 // Sets effect values and checks casting conditions
 // Returns true on valid usage condition (e.g. player has enough soul shards to cast draw soul)
 protected virtual bool SetSkillEffectValues(CharacterStats player, Stats enemy)
 {
     SkillEffectValues = new EffectValues(Power(player, enemy), source: this);
     return(true);
 }