예제 #1
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);
    }
예제 #2
0
 public bool HasTarget()
 {
     if (target != null)
     {
         return(target.IsAlive());
     }
     return(false);
 }
예제 #3
0
        public override float GetScore(BaseContext c)
        {
            BaseCombatEntity combatTarget = c.AIAgent.CombatTarget;

            if (!(combatTarget == null) && combatTarget.IsAlive())
            {
                return(1f);
            }
            return(0f);
        }
예제 #4
0
 public void TargetScan()
 {
     if (HasTarget() || IsOffline() || IsBeingRemoteControlled() || targetTrigger.entityContents == null)
     {
         return;
     }
     foreach (BaseEntity entityContent in targetTrigger.entityContents)
     {
         if (entityContent == null)
         {
             continue;
         }
         BaseCombatEntity component = entityContent.GetComponent <BaseCombatEntity>();
         if (component == null || !component.IsAlive() || !InFiringArc(component) || !ObjectVisible(component))
         {
             continue;
         }
         if (!Sentry.targetall)
         {
             BasePlayer basePlayer = component as BasePlayer;
             if ((bool)basePlayer && (IsAuthed(basePlayer) || Ignore(basePlayer)))
             {
                 continue;
             }
         }
         if (!ShouldTarget(component))
         {
             continue;
         }
         if (PeacekeeperMode())
         {
             if (!IsEntityHostile(component))
             {
                 continue;
             }
             if (target == null)
             {
                 nextShotTime = UnityEngine.Time.time + 1f;
             }
         }
         SetTarget(component);
         if ((object)target != null)
         {
             break;
         }
     }
 }
예제 #5
0
 public void TargetScan()
 {
     if (this.HasTarget() || this.IsOffline() || this.targetTrigger.entityContents == null)
     {
         return;
     }
     foreach (BaseEntity entityContent in this.targetTrigger.entityContents)
     {
         if (!Object.op_Equality((Object)entityContent, (Object)null))
         {
             BaseCombatEntity component = (BaseCombatEntity)((Component)entityContent).GetComponent <BaseCombatEntity>();
             if (!Object.op_Equality((Object)component, (Object)null) && component.IsAlive() && (this.InFiringArc(component) && this.ObjectVisible(component)))
             {
                 if (!Sentry.targetall)
                 {
                     BasePlayer player = component as BasePlayer;
                     if (Object.op_Implicit((Object)player) && (this.IsAuthed(player) || this.Ignore(player)))
                     {
                         continue;
                     }
                 }
                 if (!(component is AutoTurret))
                 {
                     if (this.PeacekeeperMode())
                     {
                         if (this.IsEntityHostile(component))
                         {
                             if (Object.op_Equality((Object)this.target, (Object)null))
                             {
                                 this.nextShotTime = Time.get_time() + 1f;
                             }
                         }
                         else
                         {
                             continue;
                         }
                     }
                     this.SetTarget(component);
                     break;
                 }
             }
         }
     }
 }
예제 #6
0
    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);
    }
예제 #7
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);
    }
예제 #8
0
        public override float GetScore(BaseContext c)
        {
            BaseCombatEntity combatTarget = c.AIAgent.CombatTarget;

            return(!Object.op_Equality((Object)combatTarget, (Object)null) && combatTarget.IsAlive() ? 1f : 0.0f);
        }