/// <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); } }
/// <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); } }
/// <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); } }
/// <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); }