Skip to content

Commit 676361e

Browse files
Augatonclaude
andcommitted
Arbitrage du depart d'un joueur avec SCPReplacer
Les roles SCP n'etaient pas exclus : un SCP qui partait declenchait le remplacement immediat et la loterie de volontariat. Le plugin declare desormais sa portee avec la priorite 50 et ne traite que les departs qui lui reviennent. Publie player.replaced. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 44e591d commit 676361e

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

Commands/ReplacerCommand.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public sealed class ReplacerCommand : StaffParentCommand
1919

2020
public override void LoadGeneratedCommands()
2121
{
22+
RegisterCommand(new CollectionCommand(Permission));
23+
2224
RegisterCommand(new StatusCommand(
2325
"Replacer",
2426
typeof(Plugin), Permission, builder =>

Handlers/PlayerHandlers.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
22
using Exiled.API.Enums;
3+
using AugatonLib.Arbitration;
4+
using AugatonLib.Bus;
35
using AugatonLib.Text;
46
using Exiled.API.Extensions;
57
using Exiled.API.Features;
@@ -55,6 +57,9 @@ public void OnLeft(LeftEventArgs ev)
5557
if (!IsReplaceable(leaver))
5658
return;
5759

60+
if (!DepartureArbiter.IsOwner(leaver, Plugin.DepartureOwner))
61+
return;
62+
5863
PlayerSnapshot snapshot = CaptureSnapshot(leaver);
5964
Player replacement = queue.Pick(leaver, plugin.Config);
6065

@@ -216,6 +221,8 @@ private void ApplySnapshot(Player replacement, PlayerSnapshot snapshot)
216221

217222
Announce(target, snapshot);
218223

224+
PluginBus.Publish(BusTopics.PlayerReplaced, Plugin.DepartureOwner, target);
225+
219226
Log.Info($"{target.Nickname} ({target.UserId}) remplace {snapshot.Nickname} en tant que {snapshot.Role}.");
220227
}
221228
catch (Exception e)

Plugin.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System;
22
using Exiled.API.Features;
33
using Replacer.API;
4+
using AugatonLib.Arbitration;
5+
using AugatonLib.Runtime;
46
using Replacer.Handlers;
57
using PlayerEvents = Exiled.Events.Handlers.Player;
68
using ServerEvents = Exiled.Events.Handlers.Server;
@@ -19,6 +21,8 @@ public sealed class Plugin : Plugin<Config, Translation>
1921

2022
public override Version RequiredExiledVersion => new Version(9, 14, 2);
2123

24+
public const string DepartureOwner = "Replacer";
25+
2226
public static Plugin Instance { get; private set; }
2327

2428
private SpectatorQueue queue;
@@ -43,6 +47,14 @@ public override void OnEnabled()
4347
ServerEvents.RoundEnded += OnRoundEnded;
4448
ServerEvents.RestartingRound += OnRestartingRound;
4549

50+
DepartureArbiter.Declare(DepartureOwner, 50, player => player is not null);
51+
52+
PluginDirectory.Register(
53+
this,
54+
Capability.Hints,
55+
Capability.Departure,
56+
Capability.Bus);
57+
4658
base.OnEnabled();
4759
}
4860

@@ -58,6 +70,9 @@ public override void OnDisabled()
5870
queue?.Clear();
5971
API.HintBridge.Clear();
6072

73+
DepartureArbiter.Withdraw(DepartureOwner);
74+
PluginDirectory.Unregister(this);
75+
6176
playerHandlers = null;
6277
queue = null;
6378
Instance = null;

0 commit comments

Comments
 (0)