Exemplo n.º 1
0
    public void SpellAttack(Character attacker, Character defender, CharacterObject.HitType hitType, float attackRange, int damage)
    {
        if (defender == null || Vector3.Distance(attacker.WorldObject.transform.position, defender.WorldObject.transform.position) > attackRange)
        {
            return;
        }

        if (UnityEngine.Random.value <= defender.DodgeBonus)
        {
            return;
        }

        float armorParam = 1;

        if (defender.ArmorValue > 0)
        {
            armorParam = Mathf.Min(damage / defender.ArmorValue, 1.0f);
        }

        damage = (int)(damage * armorParam);

        defender.TakeDamage(damage, hitType);

        if (defender.Damage >= defender.HitPoints)
        {
            attacker.XP += defender.XP;
        }
    }
Exemplo n.º 2
0
    public virtual void TakeDamage(int amount, CharacterObject.HitType hitType)
    {
        if (amount <= 0)
        {
            amount = 1;
        }

        if (amount > 0 && WorldObject.audio != null && HitSound != null)
        {
            WorldObject.audio.PlayOneShot(HitSound);
        }

        Damage += amount;

        CharacterObject obj = WorldObject.GetComponent <CharacterObject>();

        if (obj != null)
        {
            obj.Hit(hitType);
        }

        Debug.Log(Name + " Took Damage: " + amount.ToString());
    }