Skip to content

Commit 4d2bbbb

Browse files
committed
merge 'master' into 'dev'
2 parents 955cb95 + ed260ed commit 4d2bbbb

9 files changed

Lines changed: 93 additions & 24 deletions

File tree

EXILED/Exiled.API/Extensions/BitwiseExtensions.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,8 @@ public static T ModifyFlags<T>(this T flags, bool value, params T[] changeFlags)
6767
/// <param name="value">Value to check in flag.</param>
6868
/// <typeparam name="T">The type of the enum.</typeparam>
6969
/// <returns><see langword="true"/> if value is presented in flag. Otherwise, <see langword="false"/>.</returns>
70-
public static bool HasFlagFast<T>(this T flag, T value)
71-
where T : Enum
72-
{
73-
long flagValue = Convert.ToInt64(flag);
74-
long valueValue = Convert.ToInt64(value);
75-
76-
return (flagValue & valueValue) == valueValue;
77-
}
70+
[Obsolete("Use Enum::HasFlag instead.")]
71+
public static bool HasFlag<T>(this T flag, T value)
72+
where T : Enum => flag.HasFlag(value);
7873
}
7974
}

EXILED/Exiled.API/Features/Player.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ namespace Exiled.API.Features
6464

6565
using PlayerRoles;
6666
using PlayerRoles.FirstPersonControl;
67-
using PlayerRoles.FirstPersonControl.Thirdperson;
6867
using PlayerRoles.FirstPersonControl.Thirdperson.Subcontrollers;
6968
using PlayerRoles.FirstPersonControl.Thirdperson.Subcontrollers.Wearables;
7069
using PlayerRoles.RoleAssign;
@@ -874,7 +873,7 @@ public WearableElementType Wearables
874873
WearableElements flags = data.Flags;
875874
WearableElementType exiledFlags = WearableElementType.None;
876875

877-
if (flags.HasFlagFast(WearableElements.Armor) && data.Payload.Length is 1)
876+
if (flags.HasFlag(WearableElements.Armor) && data.Payload.Length is 1)
878877
{
879878
ItemType armor = (ItemType)UnsafeUtility.As<byte, sbyte>(ref data.Payload[0]);
880879

@@ -899,11 +898,11 @@ public WearableElementType Wearables
899898
WearableSync.PayloadWriter.Reset();
900899
Log.Info("newWearables" + value);
901900

902-
if (value.HasFlagFast(WearableElementType.ArmorDefault))
901+
if (value.HasFlag(WearableElementType.ArmorDefault))
903902
{
904-
ItemType displayedArmor = value.HasFlagFast(WearableElementType.ArmorLight) ? ItemType.ArmorLight :
905-
value.HasFlagFast(WearableElementType.ArmorCombat) ? ItemType.ArmorCombat :
906-
value.HasFlagFast(WearableElementType.ArmorHeavy) ? ItemType.ArmorHeavy :
903+
ItemType displayedArmor = value.HasFlag(WearableElementType.ArmorLight) ? ItemType.ArmorLight :
904+
value.HasFlag(WearableElementType.ArmorCombat) ? ItemType.ArmorCombat :
905+
value.HasFlag(WearableElementType.ArmorHeavy) ? ItemType.ArmorHeavy :
907906
CurrentArmor?.Type ?? ItemType.None;
908907

909908
if (displayedArmor is not ItemType.None)

EXILED/Exiled.CustomItems/API/Features/CustomWeapon.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ public override ItemType Type
121121
if (!Attachments.IsEmpty())
122122
firearm.AddAttachment(Attachments);
123123

124+
if (ClipSize > 0)
125+
firearm.MagazineAmmo = ClipSize;
126+
124127
int ammo = firearm.MagazineAmmo;
125128
Log.Debug($"{nameof(Name)}.{nameof(Spawn)}: Spawning weapon with {ammo} ammo.");
126129
Pickup? pickup = firearm.CreatePickup(position);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// -----------------------------------------------------------------------
2+
// <copyright file="SpawningGrenadeEffectEventArgs.cs" company="ExMod Team">
3+
// Copyright (c) ExMod Team. All rights reserved.
4+
// Licensed under the CC BY-SA 3.0 license.
5+
// </copyright>
6+
// -----------------------------------------------------------------------
7+
8+
namespace Exiled.Events.EventArgs.Map
9+
{
10+
using Exiled.API.Features.Pickups;
11+
using Exiled.API.Features.Pickups.Projectiles;
12+
using Exiled.Events.EventArgs.Interfaces;
13+
14+
using UnityEngine;
15+
16+
/// <summary>
17+
/// Contains all information before grenade explosion effect is spawned.
18+
/// </summary>
19+
public class SpawningGrenadeEffectEventArgs : IPickupEvent, IDeniableEvent
20+
{
21+
/// <summary>
22+
/// Initializes a new instance of the <see cref="SpawningGrenadeEffectEventArgs"/> class.
23+
/// </summary>
24+
/// <param name="effectGrenade"><inheritdoc cref="Projectile"/></param>
25+
/// <param name="isAllowed"><inheritdoc cref="IsAllowed"/></param>
26+
public SpawningGrenadeEffectEventArgs(TimeGrenadeProjectile effectGrenade, bool isAllowed = false)
27+
{
28+
Projectile = effectGrenade;
29+
Position = effectGrenade.Position;
30+
IsAllowed = isAllowed;
31+
}
32+
33+
/// <summary>
34+
/// Gets or sets a position of this effect.
35+
/// </summary>
36+
public Vector3 Position { get; set; }
37+
38+
/// <inheritdoc/>
39+
public bool IsAllowed { get; set; }
40+
41+
/// <inheritdoc/>
42+
public Pickup Pickup => Projectile;
43+
44+
/// <summary>
45+
/// Gets the projectile that is exploding.
46+
/// </summary>
47+
public TimeGrenadeProjectile Projectile { get; }
48+
}
49+
}

EXILED/Exiled.Events/EventArgs/Player/ChangingWearablesEventArgs.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// -----------------------------------------------------------------------
1+
// -----------------------------------------------------------------------
22
// <copyright file="ChangingWearablesEventArgs.cs" company="ExMod Team">
33
// Copyright (c) ExMod Team. All rights reserved.
44
// Licensed under the CC BY-SA 3.0 license.
@@ -34,7 +34,7 @@ public ChangingWearablesEventArgs(Player player, WearableElements newWearables,
3434

3535
WearableElementType exiledFlags = WearableElementType.None;
3636

37-
if (newWearables.HasFlagFast(WearableElements.Armor) && WearableSync.PayloadWriter.buffer.Length is 1)
37+
if (newWearables.HasFlag(WearableElements.Armor) && WearableSync.PayloadWriter.buffer.Length is 1)
3838
{
3939
ItemType armor = (ItemType)UnsafeUtility.As<byte, sbyte>(ref WearableSync.PayloadWriter.buffer[0]);
4040
exiledFlags = armor.GetWearableElementType();

EXILED/Exiled.Events/EventArgs/Player/InteractingShootingTargetEventArgs.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77

88
namespace Exiled.Events.EventArgs.Player
99
{
10-
using System;
11-
1210
using AdminToys;
1311

1412
using Exiled.API.Enums;

EXILED/Exiled.Events/Events.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public override void OnEnabled()
100100
LabApi.Events.Handlers.Scp127Events.GainingExperience += Handlers.Scp127.OnGainingExperience;
101101
LabApi.Events.Handlers.Scp127Events.GainExperience += Handlers.Scp127.OnGainedExperience;
102102

103+
LabApi.Events.Handlers.ServerEvents.ProjectileExploding += Handlers.Map.OnSpawningGrenadeEffect;
104+
103105
ServerConsole.ReloadServerName();
104106
}
105107

@@ -142,6 +144,8 @@ public override void OnDisabled()
142144
LabApi.Events.Handlers.Scp127Events.Talked -= Handlers.Scp127.OnTalked;
143145
LabApi.Events.Handlers.Scp127Events.GainingExperience -= Handlers.Scp127.OnGainingExperience;
144146
LabApi.Events.Handlers.Scp127Events.GainExperience -= Handlers.Scp127.OnGainedExperience;
147+
148+
LabApi.Events.Handlers.ServerEvents.ProjectileExploding -= Handlers.Map.OnSpawningGrenadeEffect;
145149
}
146150

147151
/// <summary>

EXILED/Exiled.Events/Handlers/Map.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace Exiled.Events.Handlers
1010
#pragma warning disable SA1623 // Property summary documentation should match accessors
1111

1212
using Exiled.API.Features.Pickups;
13+
using Exiled.API.Features.Pickups.Projectiles;
1314
using Exiled.Events.EventArgs.Map;
1415
using Exiled.Events.Features;
1516

@@ -130,6 +131,11 @@ public static class Map
130131
/// </summary>
131132
public static Event<GeneratingEventArgs> Generating { get; set; } = new();
132133

134+
/// <summary>
135+
/// Invoked before grenade explosion effect is spawned.
136+
/// </summary>
137+
public static Event<SpawningGrenadeEffectEventArgs> SpawningGrenadeEffect { get; set; } = new();
138+
133139
/// <summary>
134140
/// Called before placing a decal.
135141
/// </summary>
@@ -260,5 +266,21 @@ public static class Map
260266
/// </summary>
261267
/// <param name="ev">The <see cref="GeneratingEventArgs"/> instnace.</param>
262268
public static void OnGenerating(GeneratingEventArgs ev) => Generating.InvokeSafely(ev);
269+
270+
/// <summary>
271+
/// Called before grenade explosion effect is spawned.
272+
/// </summary>
273+
/// <param name="ev">The <see cref="LabApi.Events.Arguments.ServerEvents.ProjectileExplodingEventArgs"/> instance.</param>
274+
public static void OnSpawningGrenadeEffect(LabApi.Events.Arguments.ServerEvents.ProjectileExplodingEventArgs ev)
275+
{
276+
if (!SpawningGrenadeEffect.Patched)
277+
return;
278+
279+
SpawningGrenadeEffectEventArgs exiledEv = new(Pickup.Get<TimeGrenadeProjectile>(ev.TimedGrenade.Base), true);
280+
SpawningGrenadeEffect.InvokeSafely(exiledEv);
281+
282+
ev.Position = exiledEv.Position;
283+
ev.IsAllowed = exiledEv.IsAllowed;
284+
}
263285
}
264286
}

EXILED/Exiled.Events/Patches/Events/Player/ChangingWearables.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// -----------------------------------------------------------------------
1+
// -----------------------------------------------------------------------
22
// <copyright file="ChangingWearables.cs" company="ExMod Team">
33
// Copyright (c) ExMod Team. All rights reserved.
44
// Licensed under the CC BY-SA 3.0 license.
@@ -11,7 +11,6 @@ namespace Exiled.Events.Patches.Events.Player
1111
using System.Reflection.Emit;
1212

1313
using Exiled.API.Enums;
14-
using Exiled.API.Extensions;
1514
using Exiled.API.Features;
1615
using Exiled.API.Features.Pools;
1716
using Exiled.Events.Attributes;
@@ -102,11 +101,11 @@ private static WearableElements WriteArmor(ChangingWearablesEventArgs ev)
102101
if (value is WearableElementType.None)
103102
return WearableElements.None;
104103

105-
if (value.HasFlagFast(WearableElementType.ArmorDefault))
104+
if (value.HasFlag(WearableElementType.ArmorDefault))
106105
{
107-
ItemType displayedArmor = value.HasFlagFast(WearableElementType.ArmorLight) ? ItemType.ArmorLight :
108-
value.HasFlagFast(WearableElementType.ArmorCombat) ? ItemType.ArmorCombat :
109-
value.HasFlagFast(WearableElementType.ArmorHeavy) ? ItemType.ArmorHeavy :
106+
ItemType displayedArmor = value.HasFlag(WearableElementType.ArmorLight) ? ItemType.ArmorLight :
107+
value.HasFlag(WearableElementType.ArmorCombat) ? ItemType.ArmorCombat :
108+
value.HasFlag(WearableElementType.ArmorHeavy) ? ItemType.ArmorHeavy :
110109
ev.Player.CurrentArmor?.Type ?? ItemType.None;
111110

112111
WearableSync.PayloadWriter.WriteSByte((sbyte)displayedArmor);

0 commit comments

Comments
 (0)