-
Notifications
You must be signed in to change notification settings - Fork 112
feat: ShowingHitMarkerEventArgs #791
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,66 @@ | ||||||||||||||
| // ----------------------------------------------------------------------- | ||||||||||||||
| // <copyright file="ShowingHitMarkerEventArgs.cs" company="ExMod Team"> | ||||||||||||||
| // Copyright (c) ExMod Team. All rights reserved. | ||||||||||||||
| // Licensed under the CC BY-SA 3.0 license. | ||||||||||||||
| // </copyright> | ||||||||||||||
| // ----------------------------------------------------------------------- | ||||||||||||||
|
|
||||||||||||||
| namespace Exiled.Events.EventArgs.Player | ||||||||||||||
| { | ||||||||||||||
| using API.Features; | ||||||||||||||
| using Interfaces; | ||||||||||||||
|
|
||||||||||||||
| /// <summary> | ||||||||||||||
| /// Contains all information before a hitmarker is show to player. | ||||||||||||||
| /// </summary> | ||||||||||||||
| public class ShowingHitMarkerEventArgs : IPlayerEvent, IDeniableEvent | ||||||||||||||
| { | ||||||||||||||
| /// <summary> | ||||||||||||||
| /// Initializes a new instance of the <see cref="ShowingHitMarkerEventArgs" /> class. | ||||||||||||||
| /// </summary> | ||||||||||||||
| /// <param name="hub"> | ||||||||||||||
| /// <inheritdoc cref="Player" /> | ||||||||||||||
| /// </param> | ||||||||||||||
| /// <param name="size"> | ||||||||||||||
| /// <inheritdoc cref="Size" /> | ||||||||||||||
| /// </param> | ||||||||||||||
| /// <param name="shouldPlayAudio"> | ||||||||||||||
| /// <inheritdoc cref="ShouldPlayAudio" /> | ||||||||||||||
| /// </param> | ||||||||||||||
| /// <param name="hitmarkerType"> | ||||||||||||||
| /// <inheritdoc cref="HitmarkerType" /> | ||||||||||||||
| /// </param> | ||||||||||||||
| public ShowingHitMarkerEventArgs(ReferenceHub hub, float size, bool shouldPlayAudio, HitmarkerType hitmarkerType) | ||||||||||||||
| { | ||||||||||||||
| Player = Player.Get(hub); | ||||||||||||||
| Size = size; | ||||||||||||||
| ShouldPlayAudio = shouldPlayAudio; | ||||||||||||||
| HitmarkerType = hitmarkerType; | ||||||||||||||
| } | ||||||||||||||
|
|
||||||||||||||
| /// <summary> | ||||||||||||||
| /// Gets or sets the player that the hitmarker is being shown to. | ||||||||||||||
| /// </summary> | ||||||||||||||
| public Player Player { get; set; } | ||||||||||||||
|
Comment on lines
+42
to
+44
|
||||||||||||||
| /// Gets or sets the player that the hitmarker is being shown to. | |
| /// </summary> | |
| public Player Player { get; set; } | |
| /// Gets the player that the hitmarker is being shown to. | |
| /// </summary> | |
| public Player Player { get; private set; } |
Copilot
AI
Mar 29, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor grammar issue in the property XML doc ("a the type"). Please fix to "the type" to avoid typos in generated documentation.
| /// Gets or sets a the type of the hitmarker. | |
| /// Gets or sets the type of the hitmarker. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,81 @@ | ||
| // ----------------------------------------------------------------------- | ||
| // <copyright file="ShowingHitMarker.cs" company="ExMod Team"> | ||
| // Copyright (c) ExMod Team. All rights reserved. | ||
| // Licensed under the CC BY-SA 3.0 license. | ||
| // </copyright> | ||
| // ----------------------------------------------------------------------- | ||
|
|
||
| namespace Exiled.Events.Patches.Events.Player | ||
| { | ||
| using System.Collections.Generic; | ||
| using System.Reflection.Emit; | ||
|
|
||
| using Exiled.API.Features.Pools; | ||
| using Exiled.Events.Attributes; | ||
| using Exiled.Events.EventArgs.Player; | ||
| using HarmonyLib; | ||
|
|
||
| using static HarmonyLib.AccessTools; | ||
|
|
||
| /// <summary> | ||
| /// Patch the <see cref="Hitmarker.SendHitmarkerDirectly(ReferenceHub, float, bool, HitmarkerType)"/> method. | ||
| /// Adds the <see cref="Handlers.Player.ShowingHitMarker"/> event. | ||
| /// </summary> | ||
| [EventPatch(typeof(Handlers.Player), nameof(Handlers.Player.ShowingHitMarker))] | ||
| [HarmonyPatch(typeof(Hitmarker), nameof(Hitmarker.SendHitmarkerDirectly), typeof(ReferenceHub), typeof(float), typeof(bool), typeof(HitmarkerType))] | ||
| internal static class ShowingHitMarker | ||
| { | ||
| private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, ILGenerator generator) | ||
| { | ||
| List<CodeInstruction> newInstructions = ListPool<CodeInstruction>.Pool.Get(instructions); | ||
|
|
||
| LocalBuilder ev = generator.DeclareLocal(typeof(ShowingHitMarkerEventArgs)); | ||
| Label continueLabel = generator.DefineLabel(); | ||
|
|
||
| int offset = 1; | ||
|
|
||
| int index = newInstructions.FindIndex(instruction => instruction.opcode == OpCodes.Ret) + offset; | ||
|
|
||
| newInstructions.InsertRange(index, new[] | ||
| { | ||
| // ShowingHitMarkerEventArgs ev = new(hub, size, playAudio, hitmarkerType) | ||
| new CodeInstruction(OpCodes.Ldarg_0).MoveLabelsFrom(newInstructions[index]), | ||
| new(OpCodes.Ldarg_1), | ||
| new(OpCodes.Ldarg_2), | ||
| new(OpCodes.Ldarg_3), | ||
| new(OpCodes.Newobj, GetDeclaredConstructors(typeof(ShowingHitMarkerEventArgs))[0]), | ||
| new(OpCodes.Dup), | ||
| new(OpCodes.Stloc_S, ev.LocalIndex), | ||
|
|
||
| // Handlers.Player.OnShowingHitMarker(ev) | ||
| new(OpCodes.Call, Method(typeof(Handlers.Player), nameof(Handlers.Player.OnShowingHitMarker))), | ||
|
|
||
| // if (!ev.IsAllowed) return; | ||
| new(OpCodes.Ldloc_S, ev.LocalIndex), | ||
| new(OpCodes.Callvirt, PropertyGetter(typeof(ShowingHitMarkerEventArgs), nameof(ShowingHitMarkerEventArgs.IsAllowed))), | ||
| new(OpCodes.Brtrue_S, continueLabel), | ||
| new(OpCodes.Ret), | ||
|
|
||
| // size = ev.Size; | ||
| new CodeInstruction(OpCodes.Ldloc_S, ev.LocalIndex).WithLabels(continueLabel), | ||
| new(OpCodes.Callvirt, PropertyGetter(typeof(ShowingHitMarkerEventArgs), nameof(ShowingHitMarkerEventArgs.Size))), | ||
| new(OpCodes.Starg_S, 1), | ||
|
|
||
| // playAudio = ev.ShouldPlayAudio; | ||
| new(OpCodes.Ldloc_S, ev.LocalIndex), | ||
| new(OpCodes.Callvirt, PropertyGetter(typeof(ShowingHitMarkerEventArgs), nameof(ShowingHitMarkerEventArgs.ShouldPlayAudio))), | ||
| new(OpCodes.Starg_S, 2), | ||
|
|
||
| // hitmarkerType = ev.HitmarkerType; | ||
| new(OpCodes.Ldloc_S, ev.LocalIndex), | ||
| new(OpCodes.Callvirt, PropertyGetter(typeof(ShowingHitMarkerEventArgs), nameof(ShowingHitMarkerEventArgs.HitmarkerType))), | ||
| new(OpCodes.Starg_S, 3), | ||
| }); | ||
|
|
||
| for (int z = 0; z < newInstructions.Count; z++) | ||
| yield return newInstructions[z]; | ||
|
|
||
| ListPool<CodeInstruction>.Pool.Return(newInstructions); | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The XML doc summary has grammatical errors ("is show to player"); please correct to something like "...before a hitmarker is shown to a player." so generated docs/readers are clear.