diff --git a/EXILED/Exiled.API/Enums/DamageType.cs b/EXILED/Exiled.API/Enums/DamageType.cs index b1b9c8df2..3d949bde6 100644 --- a/EXILED/Exiled.API/Enums/DamageType.cs +++ b/EXILED/Exiled.API/Enums/DamageType.cs @@ -9,6 +9,9 @@ namespace Exiled.API.Enums { using Features; + using InventorySystem.Items.Firearms.Modules; + using InventorySystem.Items.Jailbird; + using PlayerRoles; /// @@ -145,9 +148,9 @@ public enum DamageType Scp173, /// - /// Damage caused by with . + /// Damage caused by with or Unknown. /// - Scp939None, + Scp939Other, /// /// Damage caused by . @@ -210,9 +213,9 @@ public enum DamageType Hypothermia, /// - /// Damage caused by . + /// Damage caused by when or Unknown. /// - ParticleDisruptor, + ParticleDisruptorOther, /// /// Damage caused by . @@ -227,7 +230,7 @@ public enum DamageType /// /// Damage caused by . /// - Jailbird, + JailbirdOther, /// /// Damage caused by . @@ -368,5 +371,25 @@ public enum DamageType /// Damage dealt by a when . /// MicroHidBrokenFire, + + /// + /// Damage caused by when . + /// + JailbirdCharged, + + /// + /// Damage caused by when swinging. + /// + JailbirdSwing, + + /// + /// Damage caused by when . + /// + ParticleDisruptorRapidShot, + + /// + /// Damage caused by when . + /// + ParticleDisruptorSingleShot, } } \ No newline at end of file diff --git a/EXILED/Exiled.API/Extensions/DamageTypeExtensions.cs b/EXILED/Exiled.API/Extensions/DamageTypeExtensions.cs index 82a187869..b069e85e1 100644 --- a/EXILED/Exiled.API/Extensions/DamageTypeExtensions.cs +++ b/EXILED/Exiled.API/Extensions/DamageTypeExtensions.cs @@ -14,6 +14,8 @@ namespace Exiled.API.Extensions using Features; + using InventorySystem.Items.Firearms.Modules; + using InventorySystem.Items.Jailbird; using InventorySystem.Items.MicroHID.Modules; using InventorySystem.Items.Scp1509; @@ -80,8 +82,8 @@ public static class DamageTypeExtensions { ItemType.GunFSP9, DamageType.Fsp9 }, { ItemType.GunE11SR, DamageType.E11Sr }, { ItemType.MicroHID, DamageType.MicroHidPrimaryFire }, - { ItemType.ParticleDisruptor, DamageType.ParticleDisruptor }, - { ItemType.Jailbird, DamageType.Jailbird }, + { ItemType.ParticleDisruptor, DamageType.ParticleDisruptorOther }, + { ItemType.Jailbird, DamageType.JailbirdOther }, { ItemType.GunFRMG0, DamageType.Frmg0 }, { ItemType.GunA7, DamageType.A7 }, { ItemType.GunSCP127, DamageType.Scp127 }, @@ -111,8 +113,8 @@ public static class DamageTypeExtensions public static bool IsWeapon(this DamageType type, bool checkNonFirearm = true) => type switch { - DamageType.Crossvec or DamageType.Logicer or DamageType.Revolver or DamageType.Shotgun or DamageType.AK or DamageType.Com15 or DamageType.Com18 or DamageType.E11Sr or DamageType.Fsp9 or DamageType.ParticleDisruptor or DamageType.Com45 or DamageType.Frmg0 or DamageType.A7 or DamageType.Scp127 => true, - DamageType.MicroHidPrimaryFire or DamageType.MicroHidChargeFire or DamageType.MicroHidBrokenFire or DamageType.Jailbird when checkNonFirearm => true, + DamageType.Crossvec or DamageType.Logicer or DamageType.Revolver or DamageType.Shotgun or DamageType.AK or DamageType.Com15 or DamageType.Com18 or DamageType.E11Sr or DamageType.Fsp9 or DamageType.ParticleDisruptorOther or DamageType.ParticleDisruptorRapidShot or DamageType.ParticleDisruptorSingleShot or DamageType.Com45 or DamageType.Frmg0 or DamageType.A7 or DamageType.Scp127 => true, + DamageType.MicroHidPrimaryFire or DamageType.MicroHidChargeFire or DamageType.MicroHidBrokenFire or DamageType.JailbirdOther or DamageType.JailbirdCharged or DamageType.JailbirdSwing when checkNonFirearm => true, _ => false, }; @@ -124,7 +126,7 @@ public static class DamageTypeExtensions /// Returns whether the is caused by SCP. public static bool IsScp(this DamageType type, bool checkItems = true) => type switch { - DamageType.Scp or DamageType.Scp049 or DamageType.Scp096SlapLeft or DamageType.Scp096SlapRight or DamageType.Scp096Charge or DamageType.Scp096GateKill or DamageType.Scp096Other or DamageType.Scp106 or DamageType.Scp173 or DamageType.Scp939None or DamageType.Scp939Claw or DamageType.Scp939LungeTarget or DamageType.Scp939LungeSecondary or DamageType.Scp0492 or DamageType.Scp3114 or DamageType.Scp3114SkinSteal => true, + DamageType.Scp or DamageType.Scp049 or DamageType.Scp096SlapLeft or DamageType.Scp096SlapRight or DamageType.Scp096Charge or DamageType.Scp096GateKill or DamageType.Scp096Other or DamageType.Scp106 or DamageType.Scp173 or DamageType.Scp939Other or DamageType.Scp939Claw or DamageType.Scp939LungeTarget or DamageType.Scp939LungeSecondary or DamageType.Scp0492 or DamageType.Scp3114 or DamageType.Scp3114SkinSteal => true, DamageType.Scp018 or DamageType.Scp207 when checkItems => true, _ => false, }; @@ -141,7 +143,7 @@ public static class DamageTypeExtensions /// /// The damage type to be checked. /// Returns whether the is caused by SCP. - public static bool IsScp939(this DamageType type) => type is DamageType.Scp939None or DamageType.Scp939Claw or DamageType.Scp939LungeTarget or DamageType.Scp939LungeSecondary; + public static bool IsScp939(this DamageType type) => type is DamageType.Scp939Other or DamageType.Scp939Claw or DamageType.Scp939LungeTarget or DamageType.Scp939LungeSecondary; /// /// Check if a damage type is caused by >. @@ -222,8 +224,20 @@ public static DamageType GetDamageType(DamageHandlerBase damageHandlerBase) MicroHidFiringMode.BrokenFire => DamageType.MicroHidBrokenFire, _ => DamageType.Unknown, }; - case DisruptorDamageHandler: - return DamageType.ParticleDisruptor; + case JailbirdDamageHandler jailbirdDamageHandler: + if (jailbirdDamageHandler.Attacker.Hub?.inventory.CurInstance is not JailbirdItem jailbirdItem) + return DamageType.JailbirdOther; + + return jailbirdItem._charging ? DamageType.JailbirdCharged : DamageType.JailbirdSwing; + + case DisruptorDamageHandler disruptorDamageHandler: + return disruptorDamageHandler.FiringState switch + { + DisruptorActionModule.FiringState.FiringRapid => DamageType.ParticleDisruptorRapidShot, + DisruptorActionModule.FiringState.FiringSingle => DamageType.ParticleDisruptorSingleShot, + DisruptorActionModule.FiringState.None => DamageType.ParticleDisruptorOther, + _ => DamageType.ParticleDisruptorOther, + }; case Scp1507DamageHandler: return DamageType.Scp1507; case Scp956DamageHandler: @@ -250,7 +264,7 @@ public static DamageType GetDamageType(DamageHandlerBase damageHandlerBase) Scp939DamageType.Claw => DamageType.Scp939Claw, Scp939DamageType.LungeTarget => DamageType.Scp939LungeTarget, Scp939DamageType.LungeSecondary => DamageType.Scp939LungeSecondary, - _ => DamageType.Scp939None, + _ => DamageType.Scp939Other, }; case Scp3114DamageHandler scp3114DamageHandler: return scp3114DamageHandler.Subtype switch @@ -298,6 +312,9 @@ public static DamageType GetDamageType(DamageHandlerBase damageHandlerBase) return DamageType.Unknown; } + case null: + return DamageType.Unknown; + default: { if (damageHandlerBase.GetType().Assembly.FullName.StartsWith("Assembly-CSharp")) diff --git a/EXILED/Exiled.API/Features/DamageHandlers/GenericDamageHandler.cs b/EXILED/Exiled.API/Features/DamageHandlers/GenericDamageHandler.cs index 1ee51df09..8d79de4b1 100644 --- a/EXILED/Exiled.API/Features/DamageHandlers/GenericDamageHandler.cs +++ b/EXILED/Exiled.API/Features/DamageHandlers/GenericDamageHandler.cs @@ -29,6 +29,8 @@ namespace Exiled.API.Features.DamageHandlers using UnityEngine; + using static InventorySystem.Items.Firearms.Modules.DisruptorActionModule; + /// /// Allows generic damage to a player. /// @@ -118,7 +120,9 @@ public GenericDamageHandler(Player player, Player attacker, float damage, Damage case DamageType.Recontainment: Base = new RecontainmentDamageHandler(Attacker); break; - case DamageType.Jailbird: + case DamageType.JailbirdOther: + case DamageType.JailbirdCharged: + case DamageType.JailbirdSwing: Base = new JailbirdDamageHandler(Attacker.Hub, damage, Vector3.zero); break; case DamageType.Scp1509: @@ -179,8 +183,17 @@ public GenericDamageHandler(Player player, Player attacker, float damage, Damage case DamageType.Scp127: GenericFirearm(damage, ItemType.GunSCP127); break; - case DamageType.ParticleDisruptor: - Base = new DisruptorDamageHandler(new DisruptorShotEvent(default, Attacker, InventorySystem.Items.Firearms.Modules.DisruptorActionModule.FiringState.FiringSingle), Vector3.up, damage); + case DamageType.ParticleDisruptorOther: + case DamageType.ParticleDisruptorRapidShot: + case DamageType.ParticleDisruptorSingleShot: + FiringState state = damageType switch + { + DamageType.ParticleDisruptorRapidShot => FiringState.FiringRapid, + DamageType.ParticleDisruptorSingleShot => FiringState.FiringSingle, + DamageType.ParticleDisruptorOther => FiringState.None, + _ => FiringState.None, + }; + Base = new DisruptorDamageHandler(new DisruptorShotEvent(default, Attacker, state), Vector3.up, damage); break; case DamageType.Scp096Other: Scp096Role curr096 = attacker.ReferenceHub.roleManager.CurrentRole as Scp096Role ?? new Scp096Role(); @@ -189,7 +202,7 @@ public GenericDamageHandler(Player player, Player attacker, float damage, Damage Base = new Scp096DamageHandler(curr096, damage, Scp096DamageHandler.AttackType.SlapRight); break; - case DamageType.Scp939None: + case DamageType.Scp939Other: Scp939Role curr939 = attacker.ReferenceHub.roleManager.CurrentRole as Scp939Role ?? new Scp939Role(); curr939?._lastOwner = attacker.ReferenceHub;