コード例 #1
0
 public void HitUnit(Missile self, Unit unit)
 {
     if (self.Skill.Data.IsAOE)
     {
         self.Blast(null);
     }
     else
     {
         Gamef.Damage(self.Damage, DamageType.unset, self.Caster, unit);
     }
     self.TakeDamage(1e7f);
 }
コード例 #2
0
ファイル: BuffBase.cs プロジェクト: RealTonyShaw/IECScripts
 public override void Update()
 {
     base.Update();
     Gamef.Damage(data.Effect * Time.deltaTime, DamageType.unset, caster, target);
     Gamef.Heal(data.Params[0] * Time.deltaTime, caster, caster);
 }
コード例 #3
0
    public void Blast(Missile exception)
    {
        float     dis, damage = Skill.Data.Damage;
        BlastType type;

        // 制造爆炸力(物理效果)
        physicalEffectHandler.CreateExplosiveForce(Skill.Data, transform.position);

        //对单位造成AOE伤害
        GameDB.unitPool.Traversal(delegate(Unit other)
        {
            if (!other.attributes.isAlive)
            {
                return;
            }
            dis = (other.transform.position - transform.position).magnitude;
            if (dis > Skill.Data.OuterBlastRadius)
            {
                //do nothing
            }
            else
            {
                if (dis > Skill.Data.MiddleBlastRadius)
                {
                    //外圈伤害
                    damage = Skill.Data.Damage * Skill.Data.OuterDamageCoefficient;
                    type   = BlastType.Outer;
                }
                else
                {
                    if (dis > Skill.Data.InnerBlastRadius)
                    {
                        //中圈伤害
                        damage = Skill.Data.Damage * Skill.Data.MiddleDamageCoefficient;
                        type   = BlastType.Middle;
                    }
                    else
                    {
                        //内圈伤害
                        damage = Skill.Data.Damage * Skill.Data.InnerDamageCoefficient;
                        type   = BlastType.Inner;
                    }
                }
                Gamef.Damage(damage, DamageType.unset, Caster, other);
                unitHandler?.Invoke(other, type);
            }
        });

        //对投掷物造成AOE伤害
        GameDB.missilePool.Traversal(delegate(Missile other)
        {
            if (!other.IsAlive)
            {
                return;
            }
            //忽略碰撞到的投掷物
            if (other == exception)
            {
                missileHandler?.Invoke(other, BlastType.Inner);
                return;
            }
            if (other == this)
            {
                return;
            }
            dis = (other.transform.position - transform.position).magnitude;
            if (dis > Skill.Data.OuterBlastRadius)
            {
                //do nothing
            }
            else
            {
                if (dis > Skill.Data.MiddleBlastRadius)
                {
                    //外圈伤害
                    damage = Skill.Data.Damage * Skill.Data.OuterDamageCoefficient;
                    type   = BlastType.Outer;
                }
                else
                {
                    if (dis > Skill.Data.InnerBlastRadius)
                    {
                        //中圈伤害
                        damage = Skill.Data.Damage * Skill.Data.MiddleDamageCoefficient;
                        type   = BlastType.Middle;
                    }
                    else
                    {
                        //内圈伤害
                        damage = Skill.Data.Damage * Skill.Data.InnerDamageCoefficient;
                        type   = BlastType.Inner;
                    }
                }
                other.TakeDamage(damage);
                missileHandler?.Invoke(other, type);
            }
        });
    }