From cba476b356ba82efe34b048540ef6500a616771d Mon Sep 17 00:00:00 2001 From: Joker Date: Sat, 21 Aug 2021 05:41:36 -0700 Subject: [PATCH] Smol updates --- CustomItems/CustomItems.csproj | 30 ++++---- CustomItems/Items/EmpGrenade.cs | 22 +++++- CustomItems/Items/Scp2818.cs | 13 ++++ CustomItems/Items/TranquilizerGun.cs | 100 +++++++++++++++++++-------- CustomItems/packages.config | 2 +- 5 files changed, 120 insertions(+), 47 deletions(-) diff --git a/CustomItems/CustomItems.csproj b/CustomItems/CustomItems.csproj index 9ff98a6..4361e05 100644 --- a/CustomItems/CustomItems.csproj +++ b/CustomItems/CustomItems.csproj @@ -53,36 +53,36 @@ $(EXILED_REFERENCES)\CommandSystem.Core.dll - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.API.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.API.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.Bootstrap.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.Bootstrap.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.CreditTags.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.CreditTags.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.CustomItems.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.CustomItems.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.Events.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.Events.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.Loader.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.Loader.dll True - - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.Permissions.dll + + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.Permissions.dll True - ..\packages\EXILED.2.12.0-beta\lib\net472\Exiled.Updater.dll + ..\packages\EXILED.2.13.0-beta\lib\net472\Exiled.Updater.dll True diff --git a/CustomItems/Items/EmpGrenade.cs b/CustomItems/Items/EmpGrenade.cs index f6821f5..a4b2a2e 100644 --- a/CustomItems/Items/EmpGrenade.cs +++ b/CustomItems/Items/EmpGrenade.cs @@ -7,6 +7,7 @@ namespace CustomItems.Items { + using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -208,9 +209,26 @@ private void OnExplodingGrenade(ExplodingGrenadeEventArgs ev) Timing.CallDelayed(Duration, () => { - LockedRooms079.Remove(room); + try + { + LockedRooms079.Remove(room); + } + catch (Exception e) + { + Log.Debug($"REMOVING LOCKED ROOM: {e}"); + } + if (gate != null) - disabledTeslaGates.Remove(gate); + { + try + { + disabledTeslaGates.Remove(gate); + } + catch (Exception e) + { + Log.Debug($"REMOVING DISABLED TESLA: {e}"); + } + } }); } diff --git a/CustomItems/Items/Scp2818.cs b/CustomItems/Items/Scp2818.cs index c2b74e8..d9d7045 100644 --- a/CustomItems/Items/Scp2818.cs +++ b/CustomItems/Items/Scp2818.cs @@ -89,6 +89,13 @@ protected override void OnShooting(ShootingEventArgs ev) { try { + foreach (var item in ev.Shooter.Inventory.items) + if (Check(item)) + { + Log.Debug($"SCP-2818: Found a 2818 in inventory of shooter, removing."); + ev.Shooter.RemoveItem(item); + } + Player target = null; if (ev.Target != null) target = Player.Get(ev.Target); @@ -141,9 +148,15 @@ private IEnumerator ShooterProjectile(Player player, Vector3 targetPos, P yield return Timing.WaitForSeconds(0.01f); if (DespawnAfterUse) + { + Log.Debug($"inv count: {player.Items.Count}"); foreach (Inventory.SyncItemInfo item in player.Items.ToList()) if (Check(item)) + { + Log.Debug("found 2818 in inventory, doing funni"); player.RemoveItem(item); + } + } if (player.Role != RoleType.Spectator) player.Kill(DamageTypes.Nuke); diff --git a/CustomItems/Items/TranquilizerGun.cs b/CustomItems/Items/TranquilizerGun.cs index 4a2ec92..089b89b 100644 --- a/CustomItems/Items/TranquilizerGun.cs +++ b/CustomItems/Items/TranquilizerGun.cs @@ -7,6 +7,7 @@ namespace CustomItems.Items { + using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; @@ -19,11 +20,13 @@ namespace CustomItems.Items using MEC; using Mirror; using UnityEngine; + using Random = UnityEngine.Random; /// public class TranquilizerGun : CustomWeapon { private readonly Dictionary tranquilizedPlayers = new Dictionary(); + private readonly List activeTranqs = new List(); /// public override uint Id { get; set; } = 11; @@ -99,18 +102,20 @@ public class TranquilizerGun : CustomWeapon public int ScpResistChance { get; set; } = 40; /// - public override void Destroy() + protected override void UnsubscribeEvents() { + Exiled.Events.Handlers.Player.PickingUpItem -= OnTranqPickingUpItem; + activeTranqs.Clear(); tranquilizedPlayers.Clear(); Timing.KillCoroutines($"{nameof(TranquilizerGun)}-{Id}-reducer"); - - base.Destroy(); + base.UnsubscribeEvents(); } /// protected override void SubscribeEvents() { Timing.RunCoroutine(ReduceResistances(), $"{nameof(TranquilizerGun)}-{Id}-reducer"); + Exiled.Events.Handlers.Player.PickingUpItem += OnTranqPickingUpItem; base.SubscribeEvents(); } @@ -119,17 +124,30 @@ protected override void OnHurting(HurtingEventArgs ev) { base.OnHurting(ev); - if (ev.Attacker == ev.Target || (ev.Target.Team == Team.SCP && ResistantScps && Random.Range(1, 101) <= ScpResistChance)) + if (ev.Attacker == ev.Target) return; + if (ev.Target.Team == Team.SCP) + { + int r = Random.Range(1, 101); + Log.Debug($"{Name}: SCP roll: {r} (must be greater than {ScpResistChance})", CustomItems.Instance.Config.IsDebugEnabled); + if (r <= ScpResistChance) + { + Log.Debug($"{Name}: {r} is too low, no tranq.", CustomItems.Instance.Config.IsDebugEnabled); + return; + } + } + float duration = Duration; if (!tranquilizedPlayers.TryGetValue(ev.Target, out _)) tranquilizedPlayers.Add(ev.Target, 1); tranquilizedPlayers[ev.Target] *= ResistanceModifier; + Log.Debug($"{Name}: Resistance Duration Mod: {tranquilizedPlayers[ev.Target]}", CustomItems.Instance.Config.IsDebugEnabled); duration -= tranquilizedPlayers[ev.Target]; + Log.Debug($"{Name}: Duration: {duration}", CustomItems.Instance.Config.IsDebugEnabled); if (duration > 0f) Timing.RunCoroutine(DoTranquilize(ev.Target, duration)); @@ -137,9 +155,9 @@ protected override void OnHurting(HurtingEventArgs ev) private IEnumerator DoTranquilize(Player player, float duration) { + activeTranqs.Add(player); Vector3 oldPosition = player.Position; - Inventory.SyncItemInfo previousItem = - player.ReferenceHub.inventory.items[player.ReferenceHub.inventory.GetItemIndex()]; + Inventory.SyncItemInfo previousItem = player.CurrentItem; Vector3 previousScale = player.Scale; float newHealth = player.Health - Damage; List activeEffects = NorthwoodLib.Pools.ListPool.Shared.Rent(); @@ -151,21 +169,31 @@ private IEnumerator DoTranquilize(Player player, float duration) if (effect.Enabled) activeEffects.Add(effect); - if (DropItems) + try { - foreach (Inventory.SyncItemInfo item in player.Inventory.items.ToList()) + if (DropItems) { - if (TryGet(item, out CustomItem customItem)) + if (player.Items.Count < 0) { - customItem.Spawn(player.Position, item, out _); - player.Inventory.items.Remove(item); + foreach (Inventory.SyncItemInfo item in player.Inventory.items.ToList()) + { + if (TryGet(item, out CustomItem customItem)) + { + customItem.Spawn(player.Position, item, out _); + player.Inventory.items.Remove(item); + } + } + + player.DropItems(); } } - - player.DropItems(); + } + catch (Exception e) + { + Log.Error($"{nameof(DoTranquilize)}: {e}"); } - Ragdoll ragdoll = Map.SpawnRagdoll(player, DamageTypes.None, oldPosition, allowRecall: false); + Ragdoll ragdoll = Ragdoll.Spawn(player, DamageTypes.None, oldPosition, allowRecall: false); player.Inventory.curItem = ItemType.None; player.IsInvisible = true; @@ -178,27 +206,35 @@ private IEnumerator DoTranquilize(Player player, float duration) yield return Timing.WaitForSeconds(duration); - if (ragdoll != null) - NetworkServer.Destroy(ragdoll.gameObject); + try + { + if (ragdoll != null) + NetworkServer.Destroy(ragdoll.GameObject); - if (player.GameObject == null) - yield break; + if (player.GameObject == null) + yield break; - newHealth = player.Health; + newHealth = player.Health; - player.IsGodModeEnabled = false; - player.Scale = previousScale; - player.Health = newHealth; - player.IsInvisible = false; + player.IsGodModeEnabled = false; + player.Scale = previousScale; + player.Health = newHealth; + player.IsInvisible = false; - if (!DropItems) - player.Inventory.CmdSetUnic(previousItem.uniq); + if (!DropItems) + player.Inventory.CmdSetUnic(previousItem.uniq); - foreach (PlayerEffect effect in activeEffects) - if ((effect.Duration - duration) > 0) - player.ReferenceHub.playerEffectsController.EnableEffect(effect, effect.Duration - duration); + foreach (PlayerEffect effect in activeEffects) + if ((effect.Duration - duration) > 0) + player.ReferenceHub.playerEffectsController.EnableEffect(effect, effect.Duration - duration); - NorthwoodLib.Pools.ListPool.Shared.Return(activeEffects); + activeTranqs.Remove(player); + NorthwoodLib.Pools.ListPool.Shared.Return(activeEffects); + } + catch (Exception e) + { + Log.Error($"{nameof(DoTranquilize)}: {e}"); + } if (Warhead.IsDetonated && player.Position.y < 900) { @@ -219,5 +255,11 @@ private IEnumerator ReduceResistances() yield return Timing.WaitForSeconds(ResistanceFalloffDelay); } } + + private void OnTranqPickingUpItem(PickingUpItemEventArgs ev) + { + if (activeTranqs.Contains(ev.Player)) + ev.IsAllowed = false; + } } } \ No newline at end of file diff --git a/CustomItems/packages.config b/CustomItems/packages.config index 080753e..028da07 100644 --- a/CustomItems/packages.config +++ b/CustomItems/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file