diff --git a/lang/Jailbreak.English/LastRequest/LastRequestMessages.cs b/lang/Jailbreak.English/LastRequest/LastRequestMessages.cs
new file mode 100644
index 00000000..7f2442ec
--- /dev/null
+++ b/lang/Jailbreak.English/LastRequest/LastRequestMessages.cs
@@ -0,0 +1,17 @@
+using Jailbreak.Formatting.Base;
+using Jailbreak.Formatting.Views;
+
+namespace Jailbreak.English.LastRequest;
+
+public class LastRequestMessages : ILastRequestMessages
+{
+ public IView LastRequestEnabled() => new SimpleView()
+ {
+ { "Last Request has been enabled." }
+ };
+
+ public IView LastRequestDisabled() => new SimpleView()
+ {
+ { "Last Request has been disabled." }
+ };
+}
\ No newline at end of file
diff --git a/mod/Jailbreak.LastRequest/Jailbreak.LastRequest.csproj b/mod/Jailbreak.LastRequest/Jailbreak.LastRequest.csproj
index 1e02febe..87ee1a09 100644
--- a/mod/Jailbreak.LastRequest/Jailbreak.LastRequest.csproj
+++ b/mod/Jailbreak.LastRequest/Jailbreak.LastRequest.csproj
@@ -7,6 +7,7 @@
+
diff --git a/mod/Jailbreak.LastRequest/LastRequestConfig.cs b/mod/Jailbreak.LastRequest/LastRequestConfig.cs
new file mode 100644
index 00000000..fd59e8aa
--- /dev/null
+++ b/mod/Jailbreak.LastRequest/LastRequestConfig.cs
@@ -0,0 +1,6 @@
+namespace Jailbreak.LastRequest;
+
+public class LastRequestConfig
+{
+ public int PrisonersToActiveLR { get; set; } = 2;
+}
\ No newline at end of file
diff --git a/mod/Jailbreak.LastRequest/LastRequestExtension.cs b/mod/Jailbreak.LastRequest/LastRequestExtension.cs
new file mode 100644
index 00000000..eceec6d0
--- /dev/null
+++ b/mod/Jailbreak.LastRequest/LastRequestExtension.cs
@@ -0,0 +1,15 @@
+using Jailbreak.Public.Extensions;
+using Jailbreak.Public.Mod.LastRequest;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Jailbreak.LastRequest;
+
+public static class LastRequestExtension
+{
+ public static void AddJailbreakLastRequest(this IServiceCollection collection)
+ {
+ collection.AddConfig("lastrequest");
+
+ collection.AddPluginBehavior();
+ }
+}
\ No newline at end of file
diff --git a/mod/Jailbreak.LastRequest/LastRequestFactory.cs b/mod/Jailbreak.LastRequest/LastRequestFactory.cs
new file mode 100644
index 00000000..012f6f03
--- /dev/null
+++ b/mod/Jailbreak.LastRequest/LastRequestFactory.cs
@@ -0,0 +1,25 @@
+using CounterStrikeSharp.API.Core;
+using Jailbreak.LastRequest.LastRequests;
+using Jailbreak.Public.Mod.LastRequest;
+using Jailbreak.Public.Mod.LastRequest.Enums;
+
+namespace Jailbreak.LastRequest;
+
+public class LastRequestFactory : ILastRequestFactory
+{
+ private BasePlugin plugin;
+
+ public LastRequestFactory(BasePlugin plugin)
+ {
+ this.plugin = plugin;
+ }
+
+ public AbstractLastRequest CreateLastRequest(CCSPlayerController prisoner, CCSPlayerController guard, LRType type)
+ {
+ return type switch
+ {
+ LRType.KnifeFight => new KnifeFight(plugin, prisoner, guard),
+ _ => throw new ArgumentException("Invalid last request type: " + type, nameof(type))
+ };
+ }
+}
\ No newline at end of file
diff --git a/mod/Jailbreak.LastRequest/LastRequestManager.cs b/mod/Jailbreak.LastRequest/LastRequestManager.cs
index fe125ace..ef3a760e 100644
--- a/mod/Jailbreak.LastRequest/LastRequestManager.cs
+++ b/mod/Jailbreak.LastRequest/LastRequestManager.cs
@@ -1,5 +1,11 @@
-using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API;
+using CounterStrikeSharp.API.Core;
+using CounterStrikeSharp.API.Core.Attributes.Registration;
+using CounterStrikeSharp.API.Modules.Utils;
+using Jailbreak.Formatting.Extensions;
+using Jailbreak.Formatting.Views;
using Jailbreak.Public.Behaviors;
+using Jailbreak.Public.Extensions;
using Jailbreak.Public.Mod.LastRequest;
namespace Jailbreak.LastRequest;
@@ -7,6 +13,14 @@ namespace Jailbreak.LastRequest;
public class LastRequestManager : IPluginBehavior, ILastRequestManager
{
private BasePlugin _parent;
+ private LastRequestConfig config;
+ private ILastRequestMessages messages;
+
+ public LastRequestManager(LastRequestConfig config, ILastRequestMessages messages)
+ {
+ this.config = config;
+ this.messages = messages;
+ }
public void Start(BasePlugin parent)
{
@@ -14,11 +28,34 @@ public void Start(BasePlugin parent)
_parent.RegisterEventHandler(OnPlayerDeath);
}
+ [GameEventHandler(HookMode.Post)]
public HookResult OnPlayerDeath(EventPlayerDeath @event, GameEventInfo info)
{
+ var player = @event.Userid;
+ if (!player.IsReal())
+ return HookResult.Continue;
+
+ if (player.GetTeam() != CsTeam.Terrorist)
+ return HookResult.Continue;
+
+ int remainingPrisoners = Utilities.GetPlayers().Count(CountsToLR);
+ if (remainingPrisoners > config.PrisonersToActiveLR)
+ return HookResult.Continue;
+
+ IsLREnabled = true;
+ messages.LastRequestEnabled().ToAllChat();
return HookResult.Continue;
}
+ private bool CountsToLR(CCSPlayerController player)
+ {
+ if (!player.IsReal())
+ return false;
+ if (!player.PawnIsAlive)
+ return false;
+ return player.GetTeam() == CsTeam.Terrorist;
+ }
+
public bool IsLREnabled { get; set; }
public IList ActiveLRs { get; } = new List();
diff --git a/mod/Jailbreak.LastRequest/LastRequests/KnifeFight.cs b/mod/Jailbreak.LastRequest/LastRequests/KnifeFight.cs
new file mode 100644
index 00000000..70a4480b
--- /dev/null
+++ b/mod/Jailbreak.LastRequest/LastRequests/KnifeFight.cs
@@ -0,0 +1,28 @@
+using CounterStrikeSharp.API.Core;
+using Jailbreak.Public.Mod.LastRequest;
+using Jailbreak.Public.Mod.LastRequest.Enums;
+
+namespace Jailbreak.LastRequest.LastRequests;
+
+public class KnifeFight : AbstractLastRequest
+{
+ public KnifeFight(BasePlugin plugin, CCSPlayerController prisoner, CCSPlayerController guard) : base(plugin,
+ prisoner, guard)
+ {
+ }
+
+ public override void Setup()
+ {
+ // Strip weapons, teleport T to CT
+ }
+
+ public override void Execute()
+ {
+ // Give knives
+ }
+
+ public override void End(LRResult result)
+ {
+ // Slay the loser
+ }
+}
\ No newline at end of file
diff --git a/public/Jailbreak.Formatting/Views/ILastRequestMessages.cs b/public/Jailbreak.Formatting/Views/ILastRequestMessages.cs
new file mode 100644
index 00000000..10235732
--- /dev/null
+++ b/public/Jailbreak.Formatting/Views/ILastRequestMessages.cs
@@ -0,0 +1,9 @@
+using Jailbreak.Formatting.Base;
+
+namespace Jailbreak.Formatting.Views;
+
+public interface ILastRequestMessages
+{
+ public IView LastRequestEnabled();
+ public IView LastRequestDisabled();
+}
\ No newline at end of file
diff --git a/public/Jailbreak.Public/Mod/LastRequest/AbstractLastRequest.cs b/public/Jailbreak.Public/Mod/LastRequest/AbstractLastRequest.cs
index 1b7404a1..e7f6d6f1 100644
--- a/public/Jailbreak.Public/Mod/LastRequest/AbstractLastRequest.cs
+++ b/public/Jailbreak.Public/Mod/LastRequest/AbstractLastRequest.cs
@@ -5,13 +5,22 @@ namespace Jailbreak.Public.Mod.LastRequest;
public abstract class AbstractLastRequest
{
- protected CCSPlayerController prisoner, guard;
- protected LRType type;
- protected LRState state;
-
- protected DateTimeOffset startTime;
-
- public abstract void Setup();
- public abstract void Execute();
- public abstract void End(LRResult result);
+ public CCSPlayerController prisoner { get; protected set; }
+ public CCSPlayerController guard { get; protected set; }
+ public LRType type { get; protected set; }
+ public LRState state { get; protected set; }
+ protected BasePlugin plugin;
+ protected DateTimeOffset startTime;
+
+ protected AbstractLastRequest(BasePlugin plugin, CCSPlayerController prisoner, CCSPlayerController guard)
+ {
+ this.plugin = plugin;
+ this.prisoner = prisoner;
+ this.guard = guard;
+ }
+
+
+ public abstract void Setup();
+ public abstract void Execute();
+ public abstract void End(LRResult result);
}
\ No newline at end of file