From f43214b22aba738b88134bec26a02c74f6bd7306 Mon Sep 17 00:00:00 2001 From: MSWS Date: Mon, 16 Sep 2024 23:11:23 -0700 Subject: [PATCH] Start work on gangs integration --- Jailbreak.sln | 24 ++++ lang/Jailbreak.English/RTD/RTDLocale.cs | 1 + .../Warden/WardenCmdChickenLocale.cs | 4 +- .../Warden/WardenCmdSoccerLocale.cs | 4 +- mod/Gangs.BaseImpl/BasePerk.cs | 44 ++++++ mod/Gangs.BaseImpl/Gangs.BaseImpl.csproj | 23 ++++ mod/Gangs.BombIconPerk/BombIcon.cs | 55 ++++++++ mod/Gangs.BombIconPerk/BombIconCommand.cs | 125 ++++++++++++++++++ mod/Gangs.BombIconPerk/BombIconExtension.cs | 12 ++ mod/Gangs.BombIconPerk/BombIconMenu.cs | 17 +++ mod/Gangs.BombIconPerk/BombPerk.cs | 34 +++++ .../Gangs.BombIconPerk.csproj | 26 ++++ mod/Gangs.Boostrap/Gangs.Boostrap.csproj | 19 +++ mod/Gangs.Boostrap/GangsServiceExtension.cs | 23 ++++ mod/Jailbreak.LastGuard/LastGuard.cs | 2 +- .../Listeners/LogEntityParentListeners.cs | 4 +- mod/Jailbreak.RTD/AutoRTD.cs | 18 ++- mod/Jailbreak.RTD/Jailbreak.RTD.csproj | 8 +- mod/Jailbreak.RTD/RTDCommand.cs | 1 + mod/Jailbreak.RTD/RewardGenerator.cs | 1 + .../Rewards/AbstractOnTickReward.cs | 1 - mod/Jailbreak.RTD/Rewards/AmmoWeaponReward.cs | 3 +- mod/Jailbreak.RTD/Rewards/CannotLeftKnife.cs | 4 +- mod/Jailbreak.RTD/Rewards/CannotRightKnife.cs | 1 - mod/Jailbreak.RTD/Rewards/CannotScope.cs | 2 +- mod/Jailbreak.RTD/Rewards/CannotUseReward.cs | 6 +- mod/Jailbreak.RTD/Rewards/ChatSpyReward.cs | 18 +-- mod/Jailbreak.RTD/Rewards/FakeBombReward.cs | 5 +- mod/Jailbreak.RTD/Rewards/NoWeaponReward.cs | 3 +- mod/Jailbreak.RTD/Rewards/WeaponReward.cs | 1 - .../SpecialDays/HideAndSeekDay.cs | 4 +- .../SpecialDays/InfectionDay.cs | 2 +- .../SpecialDays/NoScopeDay.cs | 5 +- .../SpecialDays/OneInTheChamberDay.cs | 1 + .../Commands/ChickenCommandBehavior.cs | 3 +- .../Commands/SoccerCommandBehavior.cs | 14 +- mod/Jailbreak.Warden/Global/WardenBehavior.cs | 5 +- mod/Jailbreak.Warden/Jailbreak.Warden.csproj | 2 +- .../SpecialTreatmentBehavior.cs | 1 - .../Views/RTD/IRTDLocale.cs | 2 +- .../Views/Warden/IWardenCmdOpenLocale.cs | 4 +- public/Jailbreak.Public/API.cs | 12 ++ .../Extensions/PlayerExtensions.cs | 8 +- .../Jailbreak.Public/Jailbreak.Public.csproj | 3 + public/Jailbreak.Public/Mixin/GangsAPI.dll | Bin 0 -> 52736 bytes public/Jailbreak.Tag/WeaponType.cs | 24 ++-- public/Jailbreak.Validator/ItemValidator.cs | 1 + src/Jailbreak/Jailbreak.csproj | 1 + src/Jailbreak/JailbreakServiceCollection.cs | 3 +- 49 files changed, 497 insertions(+), 87 deletions(-) create mode 100644 mod/Gangs.BaseImpl/BasePerk.cs create mode 100644 mod/Gangs.BaseImpl/Gangs.BaseImpl.csproj create mode 100644 mod/Gangs.BombIconPerk/BombIcon.cs create mode 100644 mod/Gangs.BombIconPerk/BombIconCommand.cs create mode 100644 mod/Gangs.BombIconPerk/BombIconExtension.cs create mode 100644 mod/Gangs.BombIconPerk/BombIconMenu.cs create mode 100644 mod/Gangs.BombIconPerk/BombPerk.cs create mode 100644 mod/Gangs.BombIconPerk/Gangs.BombIconPerk.csproj create mode 100644 mod/Gangs.Boostrap/Gangs.Boostrap.csproj create mode 100644 mod/Gangs.Boostrap/GangsServiceExtension.cs create mode 100644 public/Jailbreak.Public/Mixin/GangsAPI.dll diff --git a/Jailbreak.sln b/Jailbreak.sln index a4382dcf..f4de6fa2 100644 --- a/Jailbreak.sln +++ b/Jailbreak.sln @@ -44,6 +44,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jailbreak.Trail", "mod\Jail EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jailbreak.RTD", "mod\Jailbreak.RTD\Jailbreak.RTD.csproj", "{C68D4760-7E1E-4633-995A-5EC1EF40E63B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gangs.BombIconPerk", "mod\Gangs.BombIconPerk\Gangs.BombIconPerk.csproj", "{80F8E8F7-6976-414D-AFC0-17E1E3ABD746}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gangs.BaseImpl", "mod\Gangs.BaseImpl\Gangs.BaseImpl.csproj", "{4035945A-80FA-49E7-A9BF-069FEA3213E5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gangs.Boostrap", "mod\Gangs.Boostrap\Gangs.Boostrap.csproj", "{214E54DB-DD70-4B61-BFFC-596C2717E333}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gangs", "Gangs", "{069A4F54-AE2A-4FDF-A5A8-F550B254C2A9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -122,6 +130,18 @@ Global {C68D4760-7E1E-4633-995A-5EC1EF40E63B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C68D4760-7E1E-4633-995A-5EC1EF40E63B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C68D4760-7E1E-4633-995A-5EC1EF40E63B}.Release|Any CPU.Build.0 = Release|Any CPU + {80F8E8F7-6976-414D-AFC0-17E1E3ABD746}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80F8E8F7-6976-414D-AFC0-17E1E3ABD746}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80F8E8F7-6976-414D-AFC0-17E1E3ABD746}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80F8E8F7-6976-414D-AFC0-17E1E3ABD746}.Release|Any CPU.Build.0 = Release|Any CPU + {4035945A-80FA-49E7-A9BF-069FEA3213E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4035945A-80FA-49E7-A9BF-069FEA3213E5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4035945A-80FA-49E7-A9BF-069FEA3213E5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4035945A-80FA-49E7-A9BF-069FEA3213E5}.Release|Any CPU.Build.0 = Release|Any CPU + {214E54DB-DD70-4B61-BFFC-596C2717E333}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {214E54DB-DD70-4B61-BFFC-596C2717E333}.Debug|Any CPU.Build.0 = Debug|Any CPU + {214E54DB-DD70-4B61-BFFC-596C2717E333}.Release|Any CPU.ActiveCfg = Release|Any CPU + {214E54DB-DD70-4B61-BFFC-596C2717E333}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {9135CCC9-66C5-4A9C-AE3C-91475B5F0437} = {177DA48D-8306-4102-918D-992569878581} @@ -142,5 +162,9 @@ Global {C93A626A-BB44-4309-8DAD-4B28B2941870} = {36BA84C0-291C-4930-A7C6-97CDF8F7F0D7} {91F4EC7A-993A-4CA0-84C3-9F1100124A9C} = {36BA84C0-291C-4930-A7C6-97CDF8F7F0D7} {C68D4760-7E1E-4633-995A-5EC1EF40E63B} = {36BA84C0-291C-4930-A7C6-97CDF8F7F0D7} + {069A4F54-AE2A-4FDF-A5A8-F550B254C2A9} = {36BA84C0-291C-4930-A7C6-97CDF8F7F0D7} + {4035945A-80FA-49E7-A9BF-069FEA3213E5} = {069A4F54-AE2A-4FDF-A5A8-F550B254C2A9} + {80F8E8F7-6976-414D-AFC0-17E1E3ABD746} = {069A4F54-AE2A-4FDF-A5A8-F550B254C2A9} + {214E54DB-DD70-4B61-BFFC-596C2717E333} = {069A4F54-AE2A-4FDF-A5A8-F550B254C2A9} EndGlobalSection EndGlobal diff --git a/lang/Jailbreak.English/RTD/RTDLocale.cs b/lang/Jailbreak.English/RTD/RTDLocale.cs index cf066f34..1f811585 100644 --- a/lang/Jailbreak.English/RTD/RTDLocale.cs +++ b/lang/Jailbreak.English/RTD/RTDLocale.cs @@ -2,6 +2,7 @@ using Jailbreak.Formatting.Base; using Jailbreak.Formatting.Logistics; using Jailbreak.Formatting.Views; +using Jailbreak.Formatting.Views.RTD; using Jailbreak.Public.Mod.RTD; namespace Jailbreak.English.RTD; diff --git a/lang/Jailbreak.English/Warden/WardenCmdChickenLocale.cs b/lang/Jailbreak.English/Warden/WardenCmdChickenLocale.cs index 3097b622..9979410b 100644 --- a/lang/Jailbreak.English/Warden/WardenCmdChickenLocale.cs +++ b/lang/Jailbreak.English/Warden/WardenCmdChickenLocale.cs @@ -1,9 +1,7 @@ -using CounterStrikeSharp.API.Core; -using CounterStrikeSharp.API.Modules.Utils; +using CounterStrikeSharp.API.Modules.Utils; using Jailbreak.Formatting.Base; using Jailbreak.Formatting.Logistics; using Jailbreak.Formatting.Views.Warden; -using Jailbreak.Public.Mod.Warden; namespace Jailbreak.English.Warden; diff --git a/lang/Jailbreak.English/Warden/WardenCmdSoccerLocale.cs b/lang/Jailbreak.English/Warden/WardenCmdSoccerLocale.cs index aa0e0f3f..1300aae0 100644 --- a/lang/Jailbreak.English/Warden/WardenCmdSoccerLocale.cs +++ b/lang/Jailbreak.English/Warden/WardenCmdSoccerLocale.cs @@ -1,9 +1,7 @@ -using CounterStrikeSharp.API.Core; -using CounterStrikeSharp.API.Modules.Utils; +using CounterStrikeSharp.API.Modules.Utils; using Jailbreak.Formatting.Base; using Jailbreak.Formatting.Logistics; using Jailbreak.Formatting.Views.Warden; -using Jailbreak.Public.Mod.Warden; namespace Jailbreak.English.Warden; diff --git a/mod/Gangs.BaseImpl/BasePerk.cs b/mod/Gangs.BaseImpl/BasePerk.cs new file mode 100644 index 00000000..d05fe6ec --- /dev/null +++ b/mod/Gangs.BaseImpl/BasePerk.cs @@ -0,0 +1,44 @@ +using GangsAPI.Data.Gang; +using GangsAPI.Data.Stat; +using GangsAPI.Perks; +using GangsAPI.Services.Menu; + +namespace Gangs.BaseImpl; + +public abstract class BasePerk(IServiceProvider provider) : BaseStat, IPerk { + public abstract Task GetCost(IGangPlayer player); + public abstract Task OnPurchase(IGangPlayer player); + public abstract Task GetMenu(IGangPlayer player); +} + +public abstract class BasePerk(IServiceProvider provider) + : BasePerk(provider), IPerk, IStat { + protected IServiceProvider Provider { get; } = provider; + public override Type ValueType => typeof(TV); + public abstract TV Value { get; set; } + + public bool Equals(IStat? other) { + return other is not null && StatId == other.StatId; + } +} + +public abstract class BaseStat : IStat { + public bool Equals(IStat? other) { + return other is not null && StatId == other.StatId; + } + + public abstract string StatId { get; } + public abstract string Name { get; } + public abstract string? Description { get; } + public abstract Type ValueType { get; } +} + +public abstract class BaseStat : BaseStat, IStat { + public override Type ValueType => typeof(V); + + public bool Equals(IStat? other) { + return other is not null && StatId == other.StatId; + } + + public abstract V? Value { get; set; } +} \ No newline at end of file diff --git a/mod/Gangs.BaseImpl/Gangs.BaseImpl.csproj b/mod/Gangs.BaseImpl/Gangs.BaseImpl.csproj new file mode 100644 index 00000000..bf304216 --- /dev/null +++ b/mod/Gangs.BaseImpl/Gangs.BaseImpl.csproj @@ -0,0 +1,23 @@ + + + + net8.0 + enable + enable + + + + + ..\..\public\Jailbreak.Public\Mixin\GangsAPI.dll + + + + + + + + + + + + diff --git a/mod/Gangs.BombIconPerk/BombIcon.cs b/mod/Gangs.BombIconPerk/BombIcon.cs new file mode 100644 index 00000000..1afb22a7 --- /dev/null +++ b/mod/Gangs.BombIconPerk/BombIcon.cs @@ -0,0 +1,55 @@ +namespace Gangs.BombIconPerk; + +[Flags] +public enum BombIcon { + ANYASMUG = 1 << 0, + C4_RED = 1 << 1, + CACHINGA = 1 << 2, + CLOWN_EMOJI = 1 << 3, + CSGO = 1 << 4, + DOGE = 1 << 5, + DOLLAR = 1 << 6, + EGO = 1 << 7, + GOAT = 1 << 8, + IM = 1 << 9, + IMBAD = 1 << 10, + KZ = 1 << 11, + OMEGALUL = 1 << 12, + PEPEGA = 1 << 13, + POOP = 1 << 14, + STEAM = 1 << 15, + THINKING = 1 << 16, + UWUNUKE = 1 << 17, + ZZZ = 1 << 18 +} + +public static class BombIconExtensions { + public static int GetCost(this BombIcon icon) { + return icon switch { + BombIcon.ANYASMUG => 750, + BombIcon.C4_RED => 500, + BombIcon.CACHINGA => 1000, + BombIcon.CLOWN_EMOJI => 2000, + BombIcon.CSGO => 750, + BombIcon.DOGE => 1500, + BombIcon.DOLLAR => 10000, + BombIcon.EGO => 1000, + BombIcon.GOAT => 5000, + BombIcon.IM => 500, + BombIcon.IMBAD => 1000, + BombIcon.KZ => 1000, + BombIcon.OMEGALUL => 3500, + BombIcon.PEPEGA => 2500, + BombIcon.POOP => 650, + BombIcon.STEAM => 750, + BombIcon.THINKING => 800, + BombIcon.UWUNUKE => 2500, + BombIcon.ZZZ => 2000, + _ => 0 + }; + } + + public static string GetEquipment(this BombIcon icon) { + return icon.ToString().ToLower(); + } +} \ No newline at end of file diff --git a/mod/Gangs.BombIconPerk/BombIconCommand.cs b/mod/Gangs.BombIconPerk/BombIconCommand.cs new file mode 100644 index 00000000..6067e6ac --- /dev/null +++ b/mod/Gangs.BombIconPerk/BombIconCommand.cs @@ -0,0 +1,125 @@ +using GangsAPI; +using GangsAPI.Data; +using GangsAPI.Data.Command; +using GangsAPI.Exceptions; +using GangsAPI.Extensions; +using GangsAPI.Perks; +using GangsAPI.Permissions; +using GangsAPI.Services; +using GangsAPI.Services.Commands; +using GangsAPI.Services.Gang; +using GangsAPI.Services.Menu; +using GangsAPI.Services.Player; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; + +namespace Gangs.BombIconPerk; + +public class BombIconCommand(IServiceProvider provider) : ICommand { + private readonly IEcoManager eco = provider.GetRequiredService(); + + private readonly IGangChatPerk? gangChat = + provider.GetService(); + + private readonly IGangManager gangs = + provider.GetRequiredService(); + + private readonly IGangStatManager gangStats = + provider.GetRequiredService(); + + private readonly IStringLocalizer localizer = + provider.GetRequiredService(); + + private readonly IMenuManager menus = + provider.GetRequiredService(); + + private readonly IPlayerManager players = + provider.GetRequiredService(); + + private readonly IRankManager ranks = + provider.GetRequiredService(); + + public string Name => "bombicon"; + public string[] Usage => [""]; + + public void Start() { + provider.GetRequiredService().RegisterCommand(this); + } + + public async Task Execute(PlayerWrapper? executor, + CommandInfoWrapper info) { + if (executor == null) return CommandResult.PLAYER_ONLY; + var player = await players.GetPlayer(executor.Steam) + ?? throw new PlayerNotFoundException(executor.Steam); + if (player.GangId == null) { + info.ReplySync(localizer.Get(MSG.NOT_IN_GANG)); + return CommandResult.SUCCESS; + } + + var gang = await gangs.GetGang(player.GangId.Value) + ?? throw new GangNotFoundException(player.GangId.Value); + + var (success, data) = + await gangStats.GetForGang(gang, BombPerk.STAT_ID); + + if (!success || data == null) data = new BombPerkData(); + + if (info.ArgCount == 1) { + var menu = new BombIconMenu(); + await menus.OpenMenu(executor, menu); + return CommandResult.SUCCESS; + } + + BombIcon icon; + if (!int.TryParse(info[1], out var iconInt) || iconInt < 0) { + if (!Enum.TryParse(info[1], out icon)) { + info.ReplySync(localizer.Get(MSG.COMMAND_INVALID_PARAM, info[1], + "an icon")); + return CommandResult.SUCCESS; + } + } else { icon = (BombIcon)iconInt; } + + if (!data.Unlocked.HasFlag(icon)) { + var (canPurchase, minRank) = await ranks.CheckRank(player, + Perm.PURCHASE_PERKS); + + if (!canPurchase) { + info.ReplySync(localizer.Get(MSG.GENERIC_NOPERM_RANK, minRank.Name)); + return CommandResult.SUCCESS; + } + + var cost = icon.GetCost(); + if (await eco.TryPurchase(executor, cost, + item: "Bomb Icon: " + icon.ToString().ToTitleCase()) < 0) + return CommandResult.SUCCESS; + + data.Unlocked |= icon; + + await gangStats.SetForGang(gang, BombPerk.STAT_ID, data); + + if (gangChat == null) return CommandResult.SUCCESS; + + await gangChat.SendGangChat(player, gang, + localizer.Get(MSG.PERK_PURCHASED, icon.ToString())); + return CommandResult.SUCCESS; + } + + + var (canManage, required) = + await ranks.CheckRank(player, Perm.MANAGE_PERKS); + if (!canManage) { + info.ReplySync(localizer.Get(MSG.GENERIC_NOPERM_RANK, required.Name)); + return CommandResult.SUCCESS; + } + + data.Equipped = icon; + await gangStats.SetForGang(gang, BombPerk.STAT_ID, data); + + if (gangChat == null) return CommandResult.SUCCESS; + + await gangChat.SendGangChat(player, gang, + localizer.Get(MSG.GANG_THING_SET, "Bomb Icon", + icon.ToString().ToTitleCase())); + return CommandResult.SUCCESS; + } +} \ No newline at end of file diff --git a/mod/Gangs.BombIconPerk/BombIconExtension.cs b/mod/Gangs.BombIconPerk/BombIconExtension.cs new file mode 100644 index 00000000..e972fba3 --- /dev/null +++ b/mod/Gangs.BombIconPerk/BombIconExtension.cs @@ -0,0 +1,12 @@ +using GangsAPI.Services; +using Microsoft.Extensions.DependencyInjection; + +namespace Gangs.BombIconPerk; + +public class BombIconBootstrap { + public BombIconBootstrap(IServiceProvider collection) { + new BombIconCommand(collection).Start(); + collection.GetRequiredService() + .Perks.Add(new BombPerk(collection)); + } +} \ No newline at end of file diff --git a/mod/Gangs.BombIconPerk/BombIconMenu.cs b/mod/Gangs.BombIconPerk/BombIconMenu.cs new file mode 100644 index 00000000..712a9803 --- /dev/null +++ b/mod/Gangs.BombIconPerk/BombIconMenu.cs @@ -0,0 +1,17 @@ +using GangsAPI.Data; +using GangsAPI.Services.Menu; + +namespace Gangs.BombIconPerk; + +public class BombIconMenu : IMenu { + public Task Open(PlayerWrapper player) { + player.PrintToChat("Bomb Icon Menu"); + return Task.CompletedTask; + } + + public Task Close(PlayerWrapper player) { return Task.CompletedTask; } + + public Task AcceptInput(PlayerWrapper player, int input) { + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/mod/Gangs.BombIconPerk/BombPerk.cs b/mod/Gangs.BombIconPerk/BombPerk.cs new file mode 100644 index 00000000..5620f70c --- /dev/null +++ b/mod/Gangs.BombIconPerk/BombPerk.cs @@ -0,0 +1,34 @@ +using Gangs.BaseImpl; +using GangsAPI.Data.Gang; +using GangsAPI.Services.Menu; + +namespace Gangs.BombIconPerk; + +public class BombPerk(IServiceProvider provider) + : BasePerk(provider) { + public const string STAT_ID = "jb_bomb_icon"; + public override string StatId => STAT_ID; + public override string Name => "Bomb Icon"; + + public override string? Description + => "Customize the icon that is shown when you bomb a CT"; + + public override BombPerkData Value { get; set; } = new(); + + public override Task GetCost(IGangPlayer player) { + return Task.FromResult(null); + } + + public override Task OnPurchase(IGangPlayer player) { + throw new NotImplementedException(); + } + + public override Task GetMenu(IGangPlayer player) { + return Task.FromResult(new BombIconMenu()); + } +} + +public class BombPerkData { + public BombIcon Unlocked { get; set; } + public BombIcon Equipped { get; set; } +} \ No newline at end of file diff --git a/mod/Gangs.BombIconPerk/Gangs.BombIconPerk.csproj b/mod/Gangs.BombIconPerk/Gangs.BombIconPerk.csproj new file mode 100644 index 00000000..5913b7e0 --- /dev/null +++ b/mod/Gangs.BombIconPerk/Gangs.BombIconPerk.csproj @@ -0,0 +1,26 @@ + + + + net8.0 + enable + enable + + + + + + ..\..\public\Jailbreak.Public\Mixin\GangsAPI.dll + + + + + + + + + + + + + + diff --git a/mod/Gangs.Boostrap/Gangs.Boostrap.csproj b/mod/Gangs.Boostrap/Gangs.Boostrap.csproj new file mode 100644 index 00000000..e9f63b1b --- /dev/null +++ b/mod/Gangs.Boostrap/Gangs.Boostrap.csproj @@ -0,0 +1,19 @@ + + + + net8.0 + enable + enable + + + + + + + + + ..\..\public\Jailbreak.Public\Mixin\GangsAPI.dll + + + + diff --git a/mod/Gangs.Boostrap/GangsServiceExtension.cs b/mod/Gangs.Boostrap/GangsServiceExtension.cs new file mode 100644 index 00000000..b1333ae6 --- /dev/null +++ b/mod/Gangs.Boostrap/GangsServiceExtension.cs @@ -0,0 +1,23 @@ +using CounterStrikeSharp.API.Core; +using Gangs.BombIconPerk; +using Jailbreak.Public; +using Jailbreak.Public.Behaviors; +using Jailbreak.Public.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace Gangs.Boostrap; + +public static class GangsServiceExtension { + public static void AddGangs(this IServiceCollection services) { + services.AddPluginBehavior(); + } +} + +public class GangsInit : IPluginBehavior { + public void Start(BasePlugin basePlugin) { + var services = API.Gangs?.Services; + if (services == null) return; + + _ = new BombIconBootstrap(services); + } +} \ No newline at end of file diff --git a/mod/Jailbreak.LastGuard/LastGuard.cs b/mod/Jailbreak.LastGuard/LastGuard.cs index b0e0c1fb..168ec7a9 100644 --- a/mod/Jailbreak.LastGuard/LastGuard.cs +++ b/mod/Jailbreak.LastGuard/LastGuard.cs @@ -165,7 +165,7 @@ private bool playerHasGun(CCSPlayerController player) { if (weapons == null) return false; foreach (var weapon in weapons.MyWeapons) { if (weapon.Value == null) continue; - if (!Tag.GUNS.Contains(weapon.Value.DesignerName)) continue; + if (!global::Tag.GUNS.Contains(weapon.Value.DesignerName)) continue; return true; } diff --git a/mod/Jailbreak.Logs/Listeners/LogEntityParentListeners.cs b/mod/Jailbreak.Logs/Listeners/LogEntityParentListeners.cs index 5bf32652..699ef816 100644 --- a/mod/Jailbreak.Logs/Listeners/LogEntityParentListeners.cs +++ b/mod/Jailbreak.Logs/Listeners/LogEntityParentListeners.cs @@ -20,8 +20,8 @@ public void Start(BasePlugin _parent) { public void OnEntityParentChanged(CEntityInstance affectedEntity, CEntityInstance newParent) { if (!affectedEntity.IsValid) return; - if (!Tag.WEAPONS.Contains(affectedEntity.DesignerName) - && !Tag.UTILITY.Contains(affectedEntity.DesignerName)) + if (!global::Tag.WEAPONS.Contains(affectedEntity.DesignerName) + && !global::Tag.UTILITY.Contains(affectedEntity.DesignerName)) return; var weaponEntity = diff --git a/mod/Jailbreak.RTD/AutoRTD.cs b/mod/Jailbreak.RTD/AutoRTD.cs index beeeb815..0a1ff681 100644 --- a/mod/Jailbreak.RTD/AutoRTD.cs +++ b/mod/Jailbreak.RTD/AutoRTD.cs @@ -4,7 +4,6 @@ using CounterStrikeSharp.API.Modules.Admin; using CounterStrikeSharp.API.Modules.Commands; using CounterStrikeSharp.API.Modules.Cvars; -using Jailbreak.Formatting.Base; using Jailbreak.Formatting.Extensions; using Jailbreak.Formatting.Views; using Jailbreak.Formatting.Views.RTD; @@ -18,9 +17,14 @@ namespace Jailbreak.RTD; public class AutoRTD(IRTDRewarder rewarder, IAutoRTDLocale locale, IRTDLocale rtdLocale, IGenericCmdLocale generic) : IPluginBehavior { - private ICookie? cookie; private static readonly Dictionary cachedCookies = new(); + public static readonly FakeConVar CV_AUTORTD_FLAG = + new("css_autortd_flag", "Permission flag required to enable auto-RTD", + "@ego/dssilver"); + + private ICookie? cookie; + public void Start(BasePlugin basePlugin) { Server.NextFrameAsync(async () => { if (API.Actain != null) @@ -29,10 +33,6 @@ public void Start(BasePlugin basePlugin) { }); } - public static readonly FakeConVar CV_AUTORTD_FLAG = - new("css_autortd_flag", "Permission flag required to enable auto-RTD", - "@ego/dssilver"); - [GameEventHandler] public HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info) { if (RoundUtil.IsWarmup()) return HookResult.Continue; @@ -48,12 +48,11 @@ public HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info) { Server.NextFrameAsync(async () => { var val = await cookie.Get(steam); cachedCookies[steam] = val is null or "Y"; - if (cachedCookies[steam]) { + if (cachedCookies[steam]) Server.NextFrame(() => { if (!player.IsValid) return; player.ExecuteClientCommandFromServer("css_rtd"); }); - } }); continue; } @@ -61,9 +60,8 @@ public HookResult OnRoundEnd(EventRoundEnd @event, GameEventInfo info) { cachedCookies[steam] = true; } - if (cachedCookies.TryGetValue(player.SteamID, out var value) && value) { + if (cachedCookies.TryGetValue(player.SteamID, out var value) && value) player.ExecuteClientCommandFromServer("css_rtd"); - } } }); diff --git a/mod/Jailbreak.RTD/Jailbreak.RTD.csproj b/mod/Jailbreak.RTD/Jailbreak.RTD.csproj index ad80f8cd..9d36a223 100644 --- a/mod/Jailbreak.RTD/Jailbreak.RTD.csproj +++ b/mod/Jailbreak.RTD/Jailbreak.RTD.csproj @@ -9,13 +9,13 @@ - + - - ..\..\public\Jailbreak.Public\Mixin\MAULActainShared.dll - + + ..\..\public\Jailbreak.Public\Mixin\MAULActainShared.dll + diff --git a/mod/Jailbreak.RTD/RTDCommand.cs b/mod/Jailbreak.RTD/RTDCommand.cs index 6ebebe84..a4f7b76d 100644 --- a/mod/Jailbreak.RTD/RTDCommand.cs +++ b/mod/Jailbreak.RTD/RTDCommand.cs @@ -5,6 +5,7 @@ using CounterStrikeSharp.API.Modules.Cvars; using Jailbreak.Formatting.Extensions; using Jailbreak.Formatting.Views; +using Jailbreak.Formatting.Views.RTD; using Jailbreak.Public.Behaviors; using Jailbreak.Public.Mod.RTD; using Jailbreak.Public.Utils; diff --git a/mod/Jailbreak.RTD/RewardGenerator.cs b/mod/Jailbreak.RTD/RewardGenerator.cs index e9ad3049..dcea5d1b 100644 --- a/mod/Jailbreak.RTD/RewardGenerator.cs +++ b/mod/Jailbreak.RTD/RewardGenerator.cs @@ -8,6 +8,7 @@ using Jailbreak.Public.Mod.Warden; using Jailbreak.Public.Mod.Zones; using Jailbreak.RTD.Rewards; +using Jailbreak.Tag; namespace Jailbreak.RTD; diff --git a/mod/Jailbreak.RTD/Rewards/AbstractOnTickReward.cs b/mod/Jailbreak.RTD/Rewards/AbstractOnTickReward.cs index dfa9e1f0..f793acb6 100644 --- a/mod/Jailbreak.RTD/Rewards/AbstractOnTickReward.cs +++ b/mod/Jailbreak.RTD/Rewards/AbstractOnTickReward.cs @@ -1,6 +1,5 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; -using Jailbreak.Public.Extensions; using Jailbreak.Public.Mod.RTD; namespace Jailbreak.RTD.Rewards; diff --git a/mod/Jailbreak.RTD/Rewards/AmmoWeaponReward.cs b/mod/Jailbreak.RTD/Rewards/AmmoWeaponReward.cs index 5db9e7c4..23d471b5 100644 --- a/mod/Jailbreak.RTD/Rewards/AmmoWeaponReward.cs +++ b/mod/Jailbreak.RTD/Rewards/AmmoWeaponReward.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using Jailbreak.Public.Extensions; @@ -11,7 +10,7 @@ public class AmmoWeaponReward : WeaponReward { public AmmoWeaponReward(string weapon, int primary, int secondary, CsTeam requiredTeam = CsTeam.Terrorist) : base(weapon, requiredTeam) { - Trace.Assert(Tag.GUNS.Contains(weapon)); + Trace.Assert(global::Tag.GUNS.Contains(weapon)); this.primary = primary; this.secondary = secondary; } diff --git a/mod/Jailbreak.RTD/Rewards/CannotLeftKnife.cs b/mod/Jailbreak.RTD/Rewards/CannotLeftKnife.cs index db9035a6..925fcd29 100644 --- a/mod/Jailbreak.RTD/Rewards/CannotLeftKnife.cs +++ b/mod/Jailbreak.RTD/Rewards/CannotLeftKnife.cs @@ -1,12 +1,10 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using Jailbreak.Public.Extensions; -using Jailbreak.Public.Mod.RTD; namespace Jailbreak.RTD.Rewards; -public class CannotLeftKnife(BasePlugin plugin) - : AbstractOnTickReward(plugin) { +public class CannotLeftKnife(BasePlugin plugin) : AbstractOnTickReward(plugin) { private readonly HashSet blockedPlayerIDs = []; public override string Name => "Cannot Left-Knife"; diff --git a/mod/Jailbreak.RTD/Rewards/CannotRightKnife.cs b/mod/Jailbreak.RTD/Rewards/CannotRightKnife.cs index 3ccb5415..abc7c9c7 100644 --- a/mod/Jailbreak.RTD/Rewards/CannotRightKnife.cs +++ b/mod/Jailbreak.RTD/Rewards/CannotRightKnife.cs @@ -1,7 +1,6 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using Jailbreak.Public.Extensions; -using Jailbreak.Public.Mod.RTD; namespace Jailbreak.RTD.Rewards; diff --git a/mod/Jailbreak.RTD/Rewards/CannotScope.cs b/mod/Jailbreak.RTD/Rewards/CannotScope.cs index 8621ceb6..1757b0e5 100644 --- a/mod/Jailbreak.RTD/Rewards/CannotScope.cs +++ b/mod/Jailbreak.RTD/Rewards/CannotScope.cs @@ -19,7 +19,7 @@ override protected void tick(CCSPlayerController player) { if (weaponServices == null) return; var activeWeapon = weaponServices.ActiveWeapon.Value; if (activeWeapon == null || !activeWeapon.IsValid) return; - if (!Tag.SNIPERS.Contains(activeWeapon.DesignerName)) return; + if (!global::Tag.SNIPERS.Contains(activeWeapon.DesignerName)) return; activeWeapon.NextSecondaryAttackTick = Server.TickCount + 500; } } \ No newline at end of file diff --git a/mod/Jailbreak.RTD/Rewards/CannotUseReward.cs b/mod/Jailbreak.RTD/Rewards/CannotUseReward.cs index 1c293d0b..5c2b3e10 100644 --- a/mod/Jailbreak.RTD/Rewards/CannotUseReward.cs +++ b/mod/Jailbreak.RTD/Rewards/CannotUseReward.cs @@ -2,15 +2,15 @@ using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using Jailbreak.Public.Extensions; -using Jailbreak.Public.Mod.RTD; +using Jailbreak.Tag; namespace Jailbreak.RTD.Rewards; public class CannotUseReward : AbstractOnTickReward { private readonly ImmutableHashSet blockedWeapons; - public CannotUseReward(BasePlugin plugin, WeaponType blocked) : this( - plugin, blocked.GetItems().ToArray()) { + public CannotUseReward(BasePlugin plugin, WeaponType blocked) : this(plugin, + blocked.GetItems().ToArray()) { NameShort = blocked.ToString().ToTitleCase(); } diff --git a/mod/Jailbreak.RTD/Rewards/ChatSpyReward.cs b/mod/Jailbreak.RTD/Rewards/ChatSpyReward.cs index a19791c0..ba29f8d9 100644 --- a/mod/Jailbreak.RTD/Rewards/ChatSpyReward.cs +++ b/mod/Jailbreak.RTD/Rewards/ChatSpyReward.cs @@ -10,15 +10,6 @@ public ChatSpyReward(BasePlugin plugin) { plugin.RegisterEventHandler(onRoundEnd); } - private HookResult onRoundEnd(EventRoundEnd @event, GameEventInfo info) { - foreach (var player in Utilities.GetPlayers()) { - if (API.Actain == null) return HookResult.Continue; - API.Actain.getSpyService().SetSpy(player.SteamID, false); - } - - return HookResult.Continue; - } - public string Name => "Chat Spy"; public string? Description @@ -31,4 +22,13 @@ public bool GrantReward(CCSPlayerController player) { API.Actain.getSpyService().SetSpy(player.SteamID, true); return true; } + + private HookResult onRoundEnd(EventRoundEnd @event, GameEventInfo info) { + foreach (var player in Utilities.GetPlayers()) { + if (API.Actain == null) return HookResult.Continue; + API.Actain.getSpyService().SetSpy(player.SteamID, false); + } + + return HookResult.Continue; + } } \ No newline at end of file diff --git a/mod/Jailbreak.RTD/Rewards/FakeBombReward.cs b/mod/Jailbreak.RTD/Rewards/FakeBombReward.cs index 9d5ffba2..83369a7c 100644 --- a/mod/Jailbreak.RTD/Rewards/FakeBombReward.cs +++ b/mod/Jailbreak.RTD/Rewards/FakeBombReward.cs @@ -1,7 +1,4 @@ -using CounterStrikeSharp.API.Modules.Utils; -using Jailbreak.Public.Mod.RTD; - -namespace Jailbreak.RTD.Rewards; +namespace Jailbreak.RTD.Rewards; public class FakeBombReward() : WeaponReward("weapon_c4") { public override string Name => "Fake Bomb"; diff --git a/mod/Jailbreak.RTD/Rewards/NoWeaponReward.cs b/mod/Jailbreak.RTD/Rewards/NoWeaponReward.cs index f2f47acb..e86e6855 100644 --- a/mod/Jailbreak.RTD/Rewards/NoWeaponReward.cs +++ b/mod/Jailbreak.RTD/Rewards/NoWeaponReward.cs @@ -9,12 +9,11 @@ public class NoWeaponReward : IRTDReward { public string Description => "You will not spawn with a knife next round."; public bool GrantReward(CCSPlayerController player) { - foreach (var offset in (int[]) [64, 128, 256]) { + foreach (var offset in (int[]) [64, 128, 256]) Server.RunOnTick(Server.TickCount + offset, () => { if (!player.IsValid) return; player.RemoveWeapons(); }); - } return true; } diff --git a/mod/Jailbreak.RTD/Rewards/WeaponReward.cs b/mod/Jailbreak.RTD/Rewards/WeaponReward.cs index 032dca7e..5b1b6f42 100644 --- a/mod/Jailbreak.RTD/Rewards/WeaponReward.cs +++ b/mod/Jailbreak.RTD/Rewards/WeaponReward.cs @@ -1,5 +1,4 @@ using System.Diagnostics; -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using CounterStrikeSharp.API.Modules.Utils; using Jailbreak.Public.Extensions; diff --git a/mod/Jailbreak.SpecialDay/SpecialDays/HideAndSeekDay.cs b/mod/Jailbreak.SpecialDay/SpecialDays/HideAndSeekDay.cs index 67ed110c..0e9d098b 100644 --- a/mod/Jailbreak.SpecialDay/SpecialDays/HideAndSeekDay.cs +++ b/mod/Jailbreak.SpecialDay/SpecialDays/HideAndSeekDay.cs @@ -56,8 +56,8 @@ public class HideAndSeekDay(BasePlugin plugin, IServiceProvider provider) public static readonly FakeConVar CV_GUARD_WEAPONS = new( "jb_sd_hns_weapons_ct", "List of weapons/items CTs may use, empty for no restrictions", - string.Join(",", Tag.PISTOLS.Union(Tag.UTILITY)), ConVarFlags.FCVAR_NONE, - new ItemValidator(allowMultiple: true)); + string.Join(",", global::Tag.PISTOLS.Union(global::Tag.UTILITY)), + ConVarFlags.FCVAR_NONE, new ItemValidator(allowMultiple: true)); public static readonly FakeConVar CV_PRISONER_WEAPONS = new( "jb_sd_hns_weapons_t", diff --git a/mod/Jailbreak.SpecialDay/SpecialDays/InfectionDay.cs b/mod/Jailbreak.SpecialDay/SpecialDays/InfectionDay.cs index 9b5e567e..11d7f964 100644 --- a/mod/Jailbreak.SpecialDay/SpecialDays/InfectionDay.cs +++ b/mod/Jailbreak.SpecialDay/SpecialDays/InfectionDay.cs @@ -142,7 +142,7 @@ public InfectionSettings() { public override ISet? AllowedWeapons(CCSPlayerController player) { return player.Team == CsTeam.CounterTerrorist ? - Tag.UTILITY.Union(Tag.PISTOLS).ToHashSet() : + global::Tag.UTILITY.Union(global::Tag.PISTOLS).ToHashSet() : null; } diff --git a/mod/Jailbreak.SpecialDay/SpecialDays/NoScopeDay.cs b/mod/Jailbreak.SpecialDay/SpecialDays/NoScopeDay.cs index fa2d24a6..05b4b004 100644 --- a/mod/Jailbreak.SpecialDay/SpecialDays/NoScopeDay.cs +++ b/mod/Jailbreak.SpecialDay/SpecialDays/NoScopeDay.cs @@ -24,8 +24,9 @@ public class NoScopeDay(BasePlugin plugin, IServiceProvider provider) "jb_sd_noscope_allowedweapons", "Weapons to allow players to use, empty for no restrictions", string.Join(",", - Tag.UTILITY.Union(new[] { "weapon_ssg08", "weapon_knife" }.ToHashSet())), - ConVarFlags.FCVAR_NONE, new ItemValidator(allowMultiple: true)); + global::Tag.UTILITY.Union(new[] { "weapon_ssg08", "weapon_knife" } + .ToHashSet())), ConVarFlags.FCVAR_NONE, + new ItemValidator(allowMultiple: true)); public static readonly FakeConVar CV_KNIFE_DELAY = new( "jb_sd_noscope_knife_delay", diff --git a/mod/Jailbreak.SpecialDay/SpecialDays/OneInTheChamberDay.cs b/mod/Jailbreak.SpecialDay/SpecialDays/OneInTheChamberDay.cs index 19b5e3f2..ab51fa35 100644 --- a/mod/Jailbreak.SpecialDay/SpecialDays/OneInTheChamberDay.cs +++ b/mod/Jailbreak.SpecialDay/SpecialDays/OneInTheChamberDay.cs @@ -7,6 +7,7 @@ using Jailbreak.Public.Mod.SpecialDay; using Jailbreak.Public.Mod.SpecialDay.Enums; using Jailbreak.Public.Utils; +using Jailbreak.Tag; using Jailbreak.Validator; namespace Jailbreak.SpecialDay.SpecialDays; diff --git a/mod/Jailbreak.Warden/Commands/ChickenCommandBehavior.cs b/mod/Jailbreak.Warden/Commands/ChickenCommandBehavior.cs index 89b12ecb..5d8150b4 100644 --- a/mod/Jailbreak.Warden/Commands/ChickenCommandBehavior.cs +++ b/mod/Jailbreak.Warden/Commands/ChickenCommandBehavior.cs @@ -6,7 +6,6 @@ using Jailbreak.Formatting.Extensions; using Jailbreak.Formatting.Views.Warden; using Jailbreak.Public.Behaviors; -using Jailbreak.Public.Extensions; using Jailbreak.Public.Mod.Warden; namespace Jailbreak.Warden.Commands; @@ -18,7 +17,7 @@ public class ChickenCommandBehavior(IWardenService warden, new("css_jb_max_chickens", "The maximum number of chickens that the warden can spawn", 5); - private int chickens = 0; + private int chickens; [GameEventHandler] public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) { diff --git a/mod/Jailbreak.Warden/Commands/SoccerCommandBehavior.cs b/mod/Jailbreak.Warden/Commands/SoccerCommandBehavior.cs index f0cbf61f..ff1a483c 100644 --- a/mod/Jailbreak.Warden/Commands/SoccerCommandBehavior.cs +++ b/mod/Jailbreak.Warden/Commands/SoccerCommandBehavior.cs @@ -12,20 +12,20 @@ namespace Jailbreak.Warden.Commands; public class SoccerCommandBehavior(IWardenService warden, IWardenLocale wardenLocale, IWardenCmdSoccerLocale locale) : IPluginBehavior { + public static readonly FakeConVar CV_MAX_SOCCERS = + new("css_jb_max_soccers", + "The maximum number of soccer balls that the warden can spawn", 3); + + private int soccers; + public void Start(BasePlugin basePlugin) { - basePlugin.RegisterListener((manifest) + basePlugin.RegisterListener(manifest => { manifest.AddResource( "models/props/de_dust/hr_dust/dust_soccerball/dust_soccer_ball001.vmdl"); }); } - public static readonly FakeConVar CV_MAX_SOCCERS = - new("css_jb_max_soccers", - "The maximum number of soccer balls that the warden can spawn", 3); - - private int soccers = 0; - [GameEventHandler] public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info) { soccers = 0; diff --git a/mod/Jailbreak.Warden/Global/WardenBehavior.cs b/mod/Jailbreak.Warden/Global/WardenBehavior.cs index 92d48c70..6a778737 100644 --- a/mod/Jailbreak.Warden/Global/WardenBehavior.cs +++ b/mod/Jailbreak.Warden/Global/WardenBehavior.cs @@ -440,9 +440,10 @@ public HookResult OnRoundStart(EventRoundStart ev, GameEventInfo info) { if (prisoners == 0) return; - if (CV_WARDEN_AUTO_SNITCH.Value) { + if (CV_WARDEN_AUTO_SNITCH.Value) cmdLocale.CellsOpenedWithPrisoners(prisoners).ToAllChat(); - } else { cmdLocale.CellsOpened.ToAllChat(); } + else + cmdLocale.CellsOpened.ToAllChat(); }); return HookResult.Continue; diff --git a/mod/Jailbreak.Warden/Jailbreak.Warden.csproj b/mod/Jailbreak.Warden/Jailbreak.Warden.csproj index ca3670c3..165ee9a3 100644 --- a/mod/Jailbreak.Warden/Jailbreak.Warden.csproj +++ b/mod/Jailbreak.Warden/Jailbreak.Warden.csproj @@ -9,7 +9,7 @@ - + diff --git a/mod/Jailbreak.Warden/SpecialTreatment/SpecialTreatmentBehavior.cs b/mod/Jailbreak.Warden/SpecialTreatment/SpecialTreatmentBehavior.cs index 1f79aae9..2b9ed918 100644 --- a/mod/Jailbreak.Warden/SpecialTreatment/SpecialTreatmentBehavior.cs +++ b/mod/Jailbreak.Warden/SpecialTreatment/SpecialTreatmentBehavior.cs @@ -1,5 +1,4 @@ using System.Drawing; -using CounterStrikeSharp.API; using CounterStrikeSharp.API.Core; using Jailbreak.Formatting.Extensions; using Jailbreak.Formatting.Views.Warden; diff --git a/public/Jailbreak.Formatting/Views/RTD/IRTDLocale.cs b/public/Jailbreak.Formatting/Views/RTD/IRTDLocale.cs index f4ee3449..4555b383 100644 --- a/public/Jailbreak.Formatting/Views/RTD/IRTDLocale.cs +++ b/public/Jailbreak.Formatting/Views/RTD/IRTDLocale.cs @@ -1,7 +1,7 @@ using Jailbreak.Formatting.Base; using Jailbreak.Public.Mod.RTD; -namespace Jailbreak.Formatting.Views; +namespace Jailbreak.Formatting.Views.RTD; public interface IRTDLocale { public IView RewardSelected(IRTDReward reward); diff --git a/public/Jailbreak.Formatting/Views/Warden/IWardenCmdOpenLocale.cs b/public/Jailbreak.Formatting/Views/Warden/IWardenCmdOpenLocale.cs index ad0ac482..a39a9e15 100644 --- a/public/Jailbreak.Formatting/Views/Warden/IWardenCmdOpenLocale.cs +++ b/public/Jailbreak.Formatting/Views/Warden/IWardenCmdOpenLocale.cs @@ -21,14 +21,14 @@ public interface IWardenCmdOpenLocale { public IView CellsOpenedBy(CCSPlayerController? player); /// - /// Cells were opened with prisoners still inside. + /// Cells were opened with prisoners still inside. /// /// /// public IView CellsOpenedWithPrisoners(int prisoners); /// - /// Cells were already opened, but there are still prisoners inside. + /// Cells were already opened, but there are still prisoners inside. /// /// /// diff --git a/public/Jailbreak.Public/API.cs b/public/Jailbreak.Public/API.cs index cbe66259..19056d37 100644 --- a/public/Jailbreak.Public/API.cs +++ b/public/Jailbreak.Public/API.cs @@ -1,4 +1,5 @@ using CounterStrikeSharp.API.Core.Capabilities; +using GangsAPI; using MAULActainShared.plugin; using MStatsShared; @@ -22,6 +23,9 @@ public static class API { public static PluginCapability StatsCapability { get; } = new("mstats:core"); + public static PluginCapability GangsCapability { get; } = + new("gangs:core"); + public static IMStat? Stats { get { try { return StatsCapability.Get(); } catch (KeyNotFoundException) { @@ -37,4 +41,12 @@ public static IActain? Actain { } } } + + public static IGangPlugin? Gangs { + get { + try { return GangsCapability.Get(); } catch (KeyNotFoundException) { + return null; + } + } + } } \ No newline at end of file diff --git a/public/Jailbreak.Public/Extensions/PlayerExtensions.cs b/public/Jailbreak.Public/Extensions/PlayerExtensions.cs index 48ad1dc0..d42282dd 100644 --- a/public/Jailbreak.Public/Extensions/PlayerExtensions.cs +++ b/public/Jailbreak.Public/Extensions/PlayerExtensions.cs @@ -8,6 +8,10 @@ namespace Jailbreak.Public.Extensions; public static class PlayerExtensions { + public enum FadeFlags { + FADE_IN, FADE_OUT, FADE_STAYOUT + } + [Obsolete("Use CCSPlayerController#Team instead")] public static CsTeam GetTeam(this CCSPlayerController controller) { return (CsTeam)controller.TeamNum; @@ -152,10 +156,6 @@ public static void SetColor(this CCSPlayerController player, Color color) { ?.Value; } - public enum FadeFlags { - FADE_IN, FADE_OUT, FADE_STAYOUT - } - public static void ColorScreen(this CCSPlayerController player, Color color, float hold = 0.1f, float fade = 0.2f, FadeFlags flags = FadeFlags.FADE_IN, bool withPurge = true) { diff --git a/public/Jailbreak.Public/Jailbreak.Public.csproj b/public/Jailbreak.Public/Jailbreak.Public.csproj index ee3295a2..5595dfab 100644 --- a/public/Jailbreak.Public/Jailbreak.Public.csproj +++ b/public/Jailbreak.Public/Jailbreak.Public.csproj @@ -11,6 +11,9 @@ + + Mixin\GangsAPI.dll + ./Mixin/MAULActainShared.dll diff --git a/public/Jailbreak.Public/Mixin/GangsAPI.dll b/public/Jailbreak.Public/Mixin/GangsAPI.dll new file mode 100644 index 0000000000000000000000000000000000000000..3fb11694b50b45efc175db8d417894e4f9b15ad1 GIT binary patch literal 52736 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 HoCN*_MKpk~ literal 0 HcmV?d00001 diff --git a/public/Jailbreak.Tag/WeaponType.cs b/public/Jailbreak.Tag/WeaponType.cs index 4fbbb4fd..9218b971 100644 --- a/public/Jailbreak.Tag/WeaponType.cs +++ b/public/Jailbreak.Tag/WeaponType.cs @@ -1,4 +1,6 @@ -[Flags] +namespace Jailbreak.Tag; + +[Flags] public enum WeaponType { GRENADE = 1 << 0, // 1 UTILITY = 1 << 1, // 2 @@ -18,25 +20,25 @@ public static IReadOnlySet GetItems(this WeaponType type) { switch (type) { case WeaponType.GUNS: - return Tag.GUNS; + return global::Tag.GUNS; case WeaponType.HEAVY: - return Tag.HEAVY; + return global::Tag.HEAVY; case WeaponType.SMGS: - return Tag.SMGS; + return global::Tag.SMGS; case WeaponType.SHOTGUNS: - return Tag.SHOTGUNS; + return global::Tag.SHOTGUNS; case WeaponType.PISTOLS: - return Tag.PISTOLS; + return global::Tag.PISTOLS; case WeaponType.RIFLES: - return Tag.RIFLES; + return global::Tag.RIFLES; case WeaponType.SNIPERS: - return Tag.SNIPERS; + return global::Tag.SNIPERS; case WeaponType.UTILITY: - return Tag.UTILITY; + return global::Tag.UTILITY; case WeaponType.GRENADE: - return Tag.GRENADES; + return global::Tag.GRENADES; case WeaponType.WEAPON: - return Tag.WEAPONS; + return global::Tag.WEAPONS; default: foreach (var t in Enum.GetValues()) if (type.HasFlag(t)) diff --git a/public/Jailbreak.Validator/ItemValidator.cs b/public/Jailbreak.Validator/ItemValidator.cs index 17bd6a5f..cea77122 100644 --- a/public/Jailbreak.Validator/ItemValidator.cs +++ b/public/Jailbreak.Validator/ItemValidator.cs @@ -1,4 +1,5 @@ using CounterStrikeSharp.API.Modules.Cvars.Validators; +using Jailbreak.Tag; namespace Jailbreak.Validator; diff --git a/src/Jailbreak/Jailbreak.csproj b/src/Jailbreak/Jailbreak.csproj index 5cc564de..75a28d5a 100644 --- a/src/Jailbreak/Jailbreak.csproj +++ b/src/Jailbreak/Jailbreak.csproj @@ -57,6 +57,7 @@ + diff --git a/src/Jailbreak/JailbreakServiceCollection.cs b/src/Jailbreak/JailbreakServiceCollection.cs index 6861319c..cae835ef 100644 --- a/src/Jailbreak/JailbreakServiceCollection.cs +++ b/src/Jailbreak/JailbreakServiceCollection.cs @@ -1,4 +1,5 @@ using CounterStrikeSharp.API.Core; +using Gangs.Boostrap; using Jailbreak.Debug; using Jailbreak.English.Generic; using Jailbreak.English.LastGuard; @@ -19,7 +20,6 @@ using Jailbreak.LastRequest; using Jailbreak.Logs; using Jailbreak.Mute; -using Jailbreak.Public.Mod.Warden; using Jailbreak.Rebel; using Jailbreak.RTD; using Jailbreak.SpecialDay; @@ -71,5 +71,6 @@ public void ConfigureServices(IServiceCollection serviceCollection) { serviceCollection.AddJailbreakSpecialDay(); serviceCollection.AddJailbreakZones(); serviceCollection.AddDiceRoll(); + serviceCollection.AddGangs(); } } \ No newline at end of file