コード例 #1
0
 public EnergyResistance(IDamageType damageType, Func <float> calculation)
 {
     DamageType  = damageType.Name;
     this.amount = new BasicStat(this.Name);
     this.amount.AddModifier(
         new DelegateStatModifier(this.Name, "-", calculation)
         );
 }
        public override double StandardModifier(IDamageType damageType)
        {
            if (TypeComparer.IsSameOrVariant(damageType.GetType(), typeof(FireDamageType)).SuccessValue)
            {
                return(0.5);
            }

            if (TypeComparer.IsSameOrVariant(damageType.GetType(), typeof(WaterDamageType)).SuccessValue)
            {
                return(0.1);
            }


            return(1);
        }
コード例 #3
0
    public void DealDamage(IDamageType damage, GameObject causer = null)
    {
        damage.ChangeHealth(this, causer);

        var data = new DamageData(damage, causer);

        if (IsAlive())
        {
            BroadcastMessage("OnReceiveDamage", data);
        }
        else
        {
            BroadcastMessage("OnDeath", data);
        }

        actual = Mathf.Clamp(actual, 0, max);
    }
コード例 #4
0
 public DamageData(IDamageType _d, GameObject _o)
 {
     damage = _d; causer = _o;
 }
 public override double StandardModifier(IDamageType damageType)
 {
     return(1);
 }
 public abstract double StandardModifier(IDamageType damageType);
コード例 #7
0
    public void Activate()
    {
        IDamageType dmgType = IDamageType.Magic;

        switch (spell.spellRune)
        {
        case ISpellRune.Air:
            dmgType = IDamageType.Air;
            break;

        case ISpellRune.Earth:
            dmgType = IDamageType.Earth;
            break;

        case ISpellRune.Fire:
            dmgType = IDamageType.Fire;
            break;

        case ISpellRune.Water:
            dmgType = IDamageType.Water;
            break;
        }

        switch (spell.spellType)
        {
        case ISpellType.Target:
            if (target)
            {
                target.ApplyDamage(spell.value, dmgType);
            }
            break;

        case ISpellType.Radian:
            ICharacter[] chars = ICharacter.GetNearestFromPointAll(destination, null, spell.range);
            foreach (ICharacter ch in chars)
            {
                ch.ApplyDamage(spell.value, dmgType);
            }
            break;

        case ISpellType.Point:
            ICharacter c = ICharacter.GetNearestFromPoint(destination, null, 0.5f);
            if (c)
            {
                c.ApplyDamage(spell.value, dmgType);
            }
            break;
        }
        if (target && caster)
        {
            if (!(IReputation.GetEnemity(target.status, caster.status) > 1))
            {
                if (caster.status.reputationType != IReputationType.Bandit &&
                    caster.status.reputationType != IReputationType.Monster)
                {
                    caster.status.reputationType = IReputationType.Bandit;
                }
            }
        }
        //ISpell.SpellEffect (spell.spellRune, caster.status, trans.position);
        DestroySpell();
    }