Ejemplo n.º 1
0
        /// <inheritdoc/>
        protected override void OnReloading(ReloadingWeaponEventArgs ev)
        {
            if (UseGrenades)
            {
                ev.IsAllowed = false;

                if (ev.Player.CurrentItem.durability >= ClipSize)
                {
                    return;
                }

                Log.Debug($"{ev.Player.Nickname} is reloading a {Name}!", CustomItems.Instance.Config.IsDebugEnabled);

                foreach (Inventory.SyncItemInfo item in ev.Player.Inventory.items.ToList())
                {
                    if (item.id != ItemType.GrenadeFrag)
                    {
                        continue;
                    }
                    if (TryGet(item, out CustomItem cItem))
                    {
                        if (IgnoreModdedGrenades)
                        {
                            continue;
                        }

                        if (cItem is CustomGrenade customGrenade)
                        {
                            loadedCustomGrenade = customGrenade;
                        }
                    }

                    ev.Player.ReferenceHub.weaponManager.scp268.ServerDisable();
                    ev.Player.ReloadWeapon();

                    ev.Player.Inventory.items.ModifyDuration(ev.Player.Inventory.GetItemIndex(), ClipSize);
                    Log.Debug($"{ev.Player.Nickname} successfully reloaded a {Name}.", CustomItems.Instance.Config.IsDebugEnabled);
                    Timing.CallDelayed(4.5f, () => { ev.Player.ReloadWeapon(); });

                    ev.Player.RemoveItem(item);

                    break;
                }

                Log.Debug($"{ev.Player.Nickname} was unable to reload their {Name} - No grenades in inventory.", CustomItems.Instance.Config.IsDebugEnabled);
            }
            else
            {
                base.OnReloading(ev);
            }
        }
Ejemplo n.º 2
0
        /// <inheritdoc/>
        protected override void OnReloading(ReloadingWeaponEventArgs ev)
        {
            if (UseGrenades)
            {
                ev.IsAllowed = false;

                if (!(ev.Player.CurrentItem is Firearm firearm) || firearm.Ammo >= ClipSize)
                {
                    return;
                }

                Log.Debug($"{Name}.{nameof(OnReloading)}: {ev.Player.Nickname} is reloading!", CustomItems.Instance.Config.IsDebugEnabled);

                foreach (Item item in ev.Player.Items.ToList())
                {
                    Log.Debug($"{Name}.{nameof(OnReloading)}: Found item: {item.Type} - {item.Serial}", CustomItems.Instance.Config.IsDebugEnabled);
                    if (item.Type != ItemType.GrenadeHE && item.Type != ItemType.GrenadeFlash && item.Type != ItemType.SCP018)
                    {
                        continue;
                    }
                    if (TryGet(item, out CustomItem cItem))
                    {
                        if (IgnoreModdedGrenades)
                        {
                            continue;
                        }

                        if (cItem is CustomGrenade customGrenade)
                        {
                            loadedCustomGrenade = customGrenade;
                        }
                    }

                    ev.Player.DisableEffect(EffectType.Invisible);
                    ev.Player.Connection.Send(new RequestMessage(ev.Firearm.Serial, RequestType.Reload));

                    Timing.CallDelayed(3f, () => firearm.Ammo = ClipSize);

                    loadedGrenade = item.Type == ItemType.GrenadeFlash ? GrenadeType.Flashbang :
                                    item.Type == ItemType.GrenadeHE ? GrenadeType.FragGrenade : GrenadeType.Scp018;
                    Log.Debug($"{Name}.{nameof(OnReloading)}: {ev.Player.Nickname} successfully reloaded. Grenade type: {loadedGrenade} IsCustom: {loadedCustomGrenade != null}", CustomItems.Instance.Config.IsDebugEnabled);
                    ev.Player.RemoveItem(item);

                    return;
                }

                Log.Debug($"{Name}.{nameof(OnReloading)}: {ev.Player.Nickname} was unable to reload - No grenades in inventory.", CustomItems.Instance.Config.IsDebugEnabled);
            }
        }
Ejemplo n.º 3
0
        /// <inheritdoc/>
        protected override void OnShooting(ShootingEventArgs ev)
        {
            ev.IsAllowed = false;

            if (ev.Shooter.CurrentItem is Firearm firearm)
            {
                firearm.Ammo -= 1;
            }

            Vector3          pos = ev.Shooter.CameraTransform.TransformPoint(new Vector3(0.0715f, 0.0225f, 0.45f));
            ThrownProjectile projectile;

            if (loadedCustomGrenade != null)
            {
                projectile          = (ThrownProjectile)loadedCustomGrenade.Throw(pos, GrenadeSpeed, FuseTime, loadedCustomGrenade.Type, ev.Shooter).Base;
                loadedCustomGrenade = null;
            }
            else
            {
                switch (loadedGrenade)
                {
                case GrenadeType.Scp018:
                    projectile = ev.Shooter.ThrowGrenade(GrenadeType.Scp018).Base.Projectile;
                    break;

                case GrenadeType.Flashbang:
                    projectile = ev.Shooter.ThrowGrenade(GrenadeType.Flashbang).Base.Projectile;
                    break;

                default:
                    projectile = ev.Shooter.ThrowGrenade(GrenadeType.FragGrenade).Base.Projectile;
                    break;
                }
            }

            var comp = projectile.gameObject.AddComponent <CollisionHandler>();

            comp.Init(ev.Shooter.GameObject, projectile);
            if (comp.Owner == null || comp.Grenade == null)
            {
                Log.Debug($"{nameof(Name)}.{nameof(OnShooting)}: Grenade or owner is null, destroying collision component!", CustomItems.Instance.Config.IsDebugEnabled);
            }
        }
Ejemplo n.º 4
0
        /// <inheritdoc/>
        protected override void OnShooting(ShootingEventArgs ev)
        {
            ev.IsAllowed = false;

            ev.Shooter.SetWeaponAmmo(ev.Shooter.CurrentItem, (int)ev.Shooter.CurrentItem.durability - 1);

            Vector3 velocity = (ev.Position - ev.Shooter.Position) * GrenadeSpeed;
            Vector3 pos      = ev.Shooter.CameraTransform.TransformPoint(new Vector3(0.0715f, 0.0225f, 0.45f));
            Grenade grenade;

            if (loadedCustomGrenade != null)
            {
                grenade             = loadedCustomGrenade.Spawn(pos, velocity, FuseTime, loadedCustomGrenade.Type, ev.Shooter);
                loadedCustomGrenade = null;
            }
            else
            {
                grenade = SpawnGrenade(pos, velocity, FuseTime, GrenadeType.FragGrenade, ev.Shooter);
            }

            grenade.gameObject.AddComponent <CollisionHandler>().Init(ev.Shooter.GameObject, grenade);
        }