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); }
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); }
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); }
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); } }