Esempio n. 1
0
        public static bool IsCondition(AICondition condition, Prop prop, Power p = null)
        {
            bool      isTrue = true;
            Character ch     = prop as Character;

            switch (condition.type)
            {
            case AIConditionType.Held: isTrue = ch == null || ch.isHeld(); break;

            case AIConditionType.Rooted: isTrue = ch == null || ch.isRooted(); break;

            case AIConditionType.Health: isTrue = prop.GetHealthPct() < condition.threshold; break;

            case AIConditionType.Energy: isTrue = ch == null || ch.GetEnergyPct() < condition.threshold; break;

            case AIConditionType.Random: isTrue = Random.Range(0, 100) < condition.threshold; break;

            case AIConditionType.Shielded: isTrue = p && prop.stats[RPGSettings.GetResistanceStat(p.type)].currentValue > condition.threshold; break;

            case AIConditionType.Boosted: isTrue = p && ch && ch.stats[RPGSettings.GetDamageStat(p.type)].currentValue > condition.threshold; break;

            case AIConditionType.Status: isTrue = prop.GetStacks(condition.status) > 0; break;
            }
            if (condition.reverse)
            {
                isTrue = !isTrue;
            }
            return(isTrue);
        }
Esempio n. 2
0
 public override void Apply(Prop ch, Character caster = null)
 {
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Crushing)].addModifier(crushingRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Piercing)].addModifier(piercingRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Toxic)].addModifier(toxicRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Fire)].addModifier(fireRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Cold)].addModifier(coldRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Energy)].addModifier(energyRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Electric)].addModifier(electricRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Psionic)].addModifier(psionicRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Magic)].addModifier(magicRes);
     ch.stats[RPGSettings.GetResistanceStat(RPGSettings.DamageType.Negative)].addModifier(negativeRes);
 }
Esempio n. 3
0
        public virtual void ApplyDamage(float damage, RPGSettings.DamageType dt)
        {
            if (dead)
            {
                return;
            }

            // apply damage resistance
            if (dt != RPGSettings.DamageType.Healing)
            {
                damage *= GetFactor(-stats[RPGSettings.GetResistanceStat(dt)].currentValue);
            }
            health -= damage;
            if (health <= 0)
            {
                // die!
                if (explosion)
                {
                    explosion.Explode(GetBodyPart(Character.BodyPart.Chest), null);
                }

                dead = true;

                RPGSettings.instance.RemoveCharacter(this);
                foreach (Character ch in Power.getAll())
                {
                    if (ch.target == this)
                    {
                        ch.target = null;
                    }
                }

                OnDeath();
            }

            int dmg = (int)Mathf.Abs(damage);

            NumberFloat(dmg.ToString(), damage > 0 ? Color.red : Color.green);

            // TODO if we don't have a HUD yet, add a healthbar to props?
            RPGSettings.instance.SetupCharacter(this);
        }
Esempio n. 4
0
        protected void InitProp()
        {
            statusDirty = true;

            for (int i = 0; i < RPGSettings.BasicDamageTypesCount; i++)
            {
                stats[RPGSettings.GetResistanceStat((RPGSettings.DamageType)(1 << i))] = new Stat();
                stats[RPGSettings.GetDefenceStat((RPGSettings.DamageType)(1 << i))]    = new Stat();
            }

            stats[RPGSettings.StatName.Health.ToString()] = new Stat(maxHealth, false);
            healthStat = stats[RPGSettings.StatName.Health.ToString()];

            ThirdPersonCharacter tpc = GetComponent <ThirdPersonCharacter>();

            if (tpc)
            {
                tpc.onGrounded.AddListener(EndKnockback);
            }
        }