Beispiel #1
0
        /// <summary>
        /// Handles the removal of C4 charges.
        /// </summary>
        /// <param name="charge"> The C4 charge to be handled.</param>
        /// <param name="removeMethod"> The method of removing the charge.</param>
        public void C4Handler(Pickup charge, C4RemoveMethod removeMethod = C4RemoveMethod.Detonate)
        {
            switch (removeMethod)
            {
            case C4RemoveMethod.Remove:
            {
                charge.Destroy();
                break;
            }

            case C4RemoveMethod.Detonate:
            {
                EffectGrenade projectile = (EffectGrenade)charge.Base;
                projectile._fuseTime = 0.1f;
                projectile.ServerActivate();
                break;
            }

            case C4RemoveMethod.Drop:
            {
                TrySpawn((int)Id, charge.Position, out _);
                charge.Destroy();
                break;
            }
            }

            PlacedCharges.Remove(charge);
        }
Beispiel #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExplodingGrenadeEventArgs"/> class.
        /// </summary>
        /// <param name="thrower"><inheritdoc cref="Thrower"/></param>
        /// <param name="grenade"><inheritdoc cref="Grenade"/></param>
        /// <param name="targets"><inheritdoc cref="TargetsToAffect"/></param>
        public ExplodingGrenadeEventArgs(Player thrower, EffectGrenade grenade, Collider[] targets)
        {
            Thrower         = thrower ?? Server.Host;
            GrenadeType     = grenadeDictionary[grenade.GetType()];
            Grenade         = grenade;
            TargetsToAffect = ListPool <Player> .Shared.Rent();

            foreach (Collider collider in targets)
            {
                if (!(Grenade is ExplosionGrenade) || !collider.TryGetComponent(out IDestructible destructible) || !ReferenceHub.TryGetHubNetID(destructible.NetworkId, out ReferenceHub hub))
                {
                    continue;
                }

                Player player = Player.Get(hub);
                if (player == null)
                {
                    continue;
                }

                if (!TargetsToAffect.Contains(player))
                {
                    TargetsToAffect.Add(player);
                }
            }
        }
 private static void Prefix(EffectGrenade __instance)
 {
     if (Items.C4Charge.Instance.IsSticky && Items.C4Charge.PlacedCharges.ContainsKey(Pickup.Get(__instance)))
     {
         __instance.gameObject.GetComponent <Rigidbody>().isKinematic = true;
     }
 }
Beispiel #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ExplodingGrenadeEventArgs"/> class.
        /// </summary>
        /// <param name="thrower"><inheritdoc cref="Thrower"/></param>
        /// <param name="grenade"><inheritdoc cref="Grenade"/></param>
        /// <param name="players"><inheritdoc cref="TargetsToAffect"/></param>
        public ExplodingGrenadeEventArgs(Player thrower, EffectGrenade grenade, List <Player> players)
        {
            Thrower         = thrower ?? Server.Host;
            GrenadeType     = grenadeDictionary[grenade.GetType()];
            Grenade         = grenade;
            TargetsToAffect = ListPool <Player> .Shared.Rent();

            TargetsToAffect.AddRange(players);
        }
Beispiel #5
0
        private void OnShooting(ShootingEventArgs ev)
        {
            if (!AllowShoot)
            {
                return;
            }

            Vector3 forward = ev.Shooter.CameraTransform.forward;

            if (Physics.Raycast(ev.Shooter.CameraTransform.position + forward, forward, out var hit, 500))
            {
                EffectGrenade grenade = hit.collider.gameObject.GetComponentInParent <EffectGrenade>();
                if (grenade == null)
                {
                    return;
                }

                if (PlacedCharges.ContainsKey(Pickup.Get(grenade)))
                {
                    C4Handler(Pickup.Get(grenade), ShotMethod);
                }
            }
        }
Beispiel #6
0
 /// <summary>
 /// Inits the <see cref="CollisionHandler"/> object.
 /// </summary>
 /// <param name="owner">The grenade owner.</param>
 /// <param name="grenade">The grenade component.</param>
 public void Init(GameObject owner, ThrownProjectile grenade)
 {
     Owner       = owner;
     Grenade     = (EffectGrenade)grenade;
     initialized = true;
 }