Exemple #1
0
    public void DoRadialDamage()
    {
        List <Collider> list     = (List <Collider>)Pool.GetList <Collider>();
        Vector3         position = Vector3.op_Addition(((Component)this).get_transform().get_position(), new Vector3(0.0f, this.radius * 0.75f, 0.0f));

        Vis.Colliders <Collider>(position, this.radius, list, LayerMask.op_Implicit(this.AttackLayers), (QueryTriggerInteraction)2);
        HitInfo info = new HitInfo();

        info.DoHitEffects = true;
        info.DidHit       = true;
        info.HitBone      = 0U;
        info.Initiator    = Object.op_Equality((Object)this.creatorEntity, (Object)null) ? ((Component)this).get_gameObject().ToBaseEntity() : this.creatorEntity;
        info.PointStart   = ((Component)this).get_transform().get_position();
        using (List <Collider> .Enumerator enumerator = list.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                Collider current = enumerator.Current;
                if (!current.get_isTrigger() || ((Component)current).get_gameObject().get_layer() != 29 && ((Component)current).get_gameObject().get_layer() != 18)
                {
                    BaseCombatEntity baseEntity = ((Component)current).get_gameObject().ToBaseEntity() as BaseCombatEntity;
                    if (!Object.op_Equality((Object)baseEntity, (Object)null) && baseEntity.isServer && (baseEntity.IsAlive() && baseEntity.IsVisible(position, float.PositiveInfinity)))
                    {
                        if (baseEntity is BasePlayer)
                        {
                            Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", (BaseEntity)baseEntity, 0U, new Vector3(0.0f, 1f, 0.0f), Vector3.get_up(), (Connection)null, false);
                        }
                        info.PointEnd         = ((Component)baseEntity).get_transform().get_position();
                        info.HitPositionWorld = ((Component)baseEntity).get_transform().get_position();
                        info.damageTypes.Set(DamageType.Heat, this.damagePerSecond * this.tickRate);
                        baseEntity.OnAttacked(info);
                    }
                }
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <Collider>((List <M0>&) ref list);
    }
    public void DoRadialDamage()
    {
        List <Collider> list    = Pool.GetList <Collider>();
        Vector3         vector3 = base.transform.position + new Vector3(0f, this.radius * 0.75f, 0f);

        Vis.Colliders <Collider>(vector3, this.radius, list, this.AttackLayers, QueryTriggerInteraction.Collide);
        HitInfo hitInfo = new HitInfo()
        {
            DoHitEffects = true,
            DidHit       = true,
            HitBone      = 0,
            Initiator    = (this.creatorEntity == null ? base.gameObject.ToBaseEntity() : this.creatorEntity),
            PointStart   = base.transform.position
        };

        foreach (Collider collider in list)
        {
            if (collider.isTrigger && (collider.gameObject.layer == 29 || collider.gameObject.layer == 18))
            {
                continue;
            }
            BaseCombatEntity baseEntity = collider.gameObject.ToBaseEntity() as BaseCombatEntity;
            if (baseEntity == null || !baseEntity.isServer || !baseEntity.IsAlive() || !baseEntity.IsVisible(vector3, Single.PositiveInfinity))
            {
                continue;
            }
            if (baseEntity is BasePlayer)
            {
                Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", baseEntity, 0, new Vector3(0f, 1f, 0f), Vector3.up, null, false);
            }
            hitInfo.PointEnd         = baseEntity.transform.position;
            hitInfo.HitPositionWorld = baseEntity.transform.position;
            hitInfo.damageTypes.Set(DamageType.Heat, this.damagePerSecond * this.tickRate);
            baseEntity.OnAttacked(hitInfo);
        }
        Pool.FreeList <Collider>(ref list);
    }
Exemple #3
0
    public void DoRadialDamage()
    {
        List <Collider> obj      = Pool.GetList <Collider>();
        Vector3         position = base.transform.position + new Vector3(0f, radius * 0.75f, 0f);

        Vis.Colliders(position, radius, obj, AttackLayers);
        HitInfo hitInfo = new HitInfo();

        hitInfo.DoHitEffects = true;
        hitInfo.DidHit       = true;
        hitInfo.HitBone      = 0u;
        hitInfo.Initiator    = ((creatorEntity == null) ? GameObjectEx.ToBaseEntity(base.gameObject) : creatorEntity);
        hitInfo.PointStart   = base.transform.position;
        foreach (Collider item in obj)
        {
            if (item.isTrigger && (item.gameObject.layer == 29 || item.gameObject.layer == 18))
            {
                continue;
            }
            BaseCombatEntity baseCombatEntity = GameObjectEx.ToBaseEntity(item.gameObject) as BaseCombatEntity;
            if (!(baseCombatEntity == null) && baseCombatEntity.isServer && baseCombatEntity.IsAlive() && (!ignoreNPC || !baseCombatEntity.IsNpc) && baseCombatEntity.IsVisible(position))
            {
                if (baseCombatEntity is BasePlayer)
                {
                    Effect.server.Run("assets/bundled/prefabs/fx/impacts/additive/fire.prefab", baseCombatEntity, 0u, new Vector3(0f, 1f, 0f), Vector3.up);
                }
                hitInfo.PointEnd         = baseCombatEntity.transform.position;
                hitInfo.HitPositionWorld = baseCombatEntity.transform.position;
                hitInfo.damageTypes.Set(DamageType.Heat, damagePerSecond * tickRate);
                Interface.CallHook("OnFireBallDamage", this, baseCombatEntity, hitInfo);
                baseCombatEntity.OnAttacked(hitInfo);
            }
        }
        Pool.FreeList(ref obj);
    }