Skip to content

Commit

Permalink
1.6.4a
Browse files Browse the repository at this point in the history
- New give command
- Added `@css/permmute` flag to allow perm penalties
- Fixed mute when player silenced
- Added CleanModule - allow to clean weapons on ground
  • Loading branch information
daffyyyy committed Oct 19, 2024
1 parent d30ac80 commit 5a9367a
Show file tree
Hide file tree
Showing 17 changed files with 193 additions and 27 deletions.
1 change: 0 additions & 1 deletion CS2-SimpleAdmin/Api/CS2_SimpleAdminApi.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using System.Diagnostics;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Entities;
Expand Down
3 changes: 1 addition & 2 deletions CS2-SimpleAdmin/CS2-SimpleAdmin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using CounterStrikeSharp.API.Core.Capabilities;
using CounterStrikeSharp.API.Modules.Commands;
using CounterStrikeSharp.API.Modules.Commands.Targeting;
using CounterStrikeSharp.API.Modules.Entities;
using CounterStrikeSharp.API.Modules.Memory.DynamicFunctions;
using CS2_SimpleAdmin.Managers;
using CS2_SimpleAdminApi;
Expand All @@ -20,7 +19,7 @@ public partial class CS2_SimpleAdmin : BasePlugin, IPluginConfig<CS2_SimpleAdmin
public override string ModuleName => "CS2-SimpleAdmin" + (Helper.IsDebugBuild ? " (DEBUG)" : " (RELEASE)");
public override string ModuleDescription => "Simple admin plugin for Counter-Strike 2 :)";
public override string ModuleAuthor => "daffyy & Dliix66";
public override string ModuleVersion => "1.6.3b";
public override string ModuleVersion => "1.6.4a";

public override void Load(bool hotReload)
{
Expand Down
2 changes: 1 addition & 1 deletion CS2-SimpleAdmin/Commands/basebans.cs
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ private bool CheckValidBan(CCSPlayerController? caller, int duration)
{
if (caller == null) return true;

bool canPermBan = AdminManager.PlayerHasPermissions(caller, "@css/permban");
var canPermBan = AdminManager.PlayerHasPermissions(caller, "@css/permban");

if (duration <= 0 && canPermBan == false)
{
Expand Down
1 change: 0 additions & 1 deletion CS2-SimpleAdmin/Commands/basechat.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
Expand Down
1 change: 0 additions & 1 deletion CS2-SimpleAdmin/Commands/basecommands.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
Expand Down
26 changes: 25 additions & 1 deletion CS2-SimpleAdmin/Commands/basecomms.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
using CS2_SimpleAdmin.Managers;
Expand Down Expand Up @@ -50,6 +49,7 @@ internal void Gag(CCSPlayerController? caller, CCSPlayerController player, int t
{
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
if (!caller.CanTarget(player)) return;
if (!CheckValidMute(caller, time)) return;

// Set default caller name if not provided
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
Expand Down Expand Up @@ -126,6 +126,7 @@ public void OnAddGagCommand(CCSPlayerController? caller, CommandInfo command)
: (_localizer?["sa_unknown"] ?? "Unknown");

int.TryParse(command.GetArg(2), out var time);
if (!CheckValidMute(caller, time)) return;

// Get player and admin info
var adminInfo = caller != null && caller.UserId.HasValue ? PlayersInfo[caller.UserId.Value] : null;
Expand Down Expand Up @@ -264,6 +265,7 @@ internal void Mute(CCSPlayerController? caller, CCSPlayerController player, int
{
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
if (!caller.CanTarget(player)) return;
if (!CheckValidMute(caller, time)) return;

// Set default caller name if not provided
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
Expand Down Expand Up @@ -343,6 +345,7 @@ public void OnAddMuteCommand(CCSPlayerController? caller, CommandInfo command)
: (_localizer?["sa_unknown"] ?? "Unknown");

int.TryParse(command.GetArg(2), out var time);
if (!CheckValidMute(caller, time)) return;

// Get player and admin info
var adminInfo = caller != null && caller.UserId.HasValue ? PlayersInfo[caller.UserId.Value] : null;
Expand Down Expand Up @@ -483,6 +486,7 @@ internal void Silence(CCSPlayerController? caller, CCSPlayerController player, i
{
if (Database == null || !player.IsValid || !player.UserId.HasValue) return;
if (!caller.CanTarget(player)) return;
if (!CheckValidMute(caller, time)) return;

// Set default caller name if not provided
callerName ??= caller == null ? _localizer?["sa_console"] ?? "Console" : caller.PlayerName;
Expand All @@ -499,6 +503,7 @@ internal void Silence(CCSPlayerController? caller, CCSPlayerController player, i

// Add penalty to the player's penalty manager
PlayerPenaltyManager.AddPenalty(player.Slot, PenaltyType.Silence, Time.ActualDateTime().AddMinutes(time), time);
player.VoiceFlags = VoiceFlags.Muted;

// Determine message keys and arguments based on silence time (permanent or timed)
var (messageKey, activityMessageKey, playerArgs, adminActivityArgs) = time == 0
Expand Down Expand Up @@ -559,6 +564,7 @@ public void OnAddSilenceCommand(CCSPlayerController? caller, CommandInfo command
: (_localizer?["sa_unknown"] ?? "Unknown");

int.TryParse(command.GetArg(2), out var time);
if (!CheckValidMute(caller, time)) return;

// Get player and admin info
var adminInfo = caller != null && caller.UserId.HasValue ? PlayersInfo[caller.UserId.Value] : null;
Expand Down Expand Up @@ -663,4 +669,22 @@ public void OnUnsilenceCommand(CCSPlayerController? caller, CommandInfo command)
command.ReplyToCommand($"Unsilenced offline player with pattern {pattern}.");
}
}

private bool CheckValidMute(CCSPlayerController? caller, int duration)
{
if (caller == null) return true;

var canPermMute = AdminManager.PlayerHasPermissions(caller, "@css/permmute");

if (duration <= 0 && canPermMute == false)
{
caller.PrintToChat($"{_localizer!["sa_prefix"]} {_localizer["sa_ban_perm_restricted"]}");
return false;
}

if (duration <= Config.OtherSettings.MaxMuteDuration || canPermMute) return true;

caller.PrintToChat($"{_localizer!["sa_prefix"]} {_localizer["sa_ban_max_duration_exceeded", Config.OtherSettings.MaxMuteDuration]}");
return false;
}
}
1 change: 0 additions & 1 deletion CS2-SimpleAdmin/Commands/basevotes.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
Expand Down
1 change: 0 additions & 1 deletion CS2-SimpleAdmin/Commands/funcommands.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;

Expand Down
32 changes: 19 additions & 13 deletions CS2-SimpleAdmin/Commands/playercommands.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,18 +67,11 @@ public void OnGiveCommand(CCSPlayerController? caller, CommandInfo command)
var weaponName = command.GetArg(2);

// check if item is typed
if (weaponName.Length < 5)
{
command.ReplyToCommand($"No weapon typed.");
return;
}

// check if item is valid
if (!weaponName.Contains("weapon_") && !weaponName.Contains("item_"))
{
command.ReplyToCommand($"{weaponName} is not a valid item.");
return;
}
// if (weaponName.Length < 2)
// {
// command.ReplyToCommand($"No weapon typed.");
// return;
// }

// check if weapon is knife
if (weaponName.Contains("_knife") || weaponName.Contains("bayonet"))
Expand All @@ -105,9 +98,22 @@ private static void GiveWeapon(CCSPlayerController? caller, CCSPlayerController

// Set default caller name if not provided
callerName ??= caller != null ? caller.PlayerName : _localizer?["sa_console"] ?? "Console";
var weapons = WeaponHelper.GetWeaponsByPartialName(weaponName);

switch (weapons.Count)
{
case 0:
return;
case > 1:
{
var weaponList = string.Join(", ", weapons.Select(w => w.EnumMemberValue));
command?.ReplyToCommand($"Found weapons with a similar name: {weaponList}");
return;
}
}

// Give weapon to the player
player.GiveNamedItem(weaponName);
player.GiveNamedItem(weapons.First().EnumValue);

// Log the command
if (command == null)
Expand Down
5 changes: 4 additions & 1 deletion CS2-SimpleAdmin/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,9 @@ public class OtherSettings

[JsonPropertyName("MaxBanDuration")]
public int MaxBanDuration { get; set; } = 60 * 24 * 7;

[JsonPropertyName("MaxMuteDuration")]
public int MaxMuteDuration { get; set; } = 60 * 24 * 7;

[JsonPropertyName("ExpireOldIpBans")]
public int ExpireOldIpBans { get; set; } = 0;
Expand All @@ -220,7 +223,7 @@ public class OtherSettings

public class CS2_SimpleAdminConfig : BasePluginConfig
{
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 21;
[JsonPropertyName("ConfigVersion")] public override int Version { get; set; } = 22;

[JsonPropertyName("DatabaseHost")]
public string DatabaseHost { get; set; } = "";
Expand Down
50 changes: 47 additions & 3 deletions CS2-SimpleAdmin/Helper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Globalization;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Translations;
using CounterStrikeSharp.API.Modules.Admin;
Expand All @@ -15,9 +14,11 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Text;
using System.Text.Json;
using System.Text.RegularExpressions;
using CounterStrikeSharp.API.Modules.Entities.Constants;
using CS2_SimpleAdmin.Managers;

namespace CS2_SimpleAdmin;
Expand Down Expand Up @@ -625,4 +626,47 @@ public static DateTime ActualDateTime()
return utcNow;
}
}
}
}

public static class WeaponHelper
{
private static readonly Lazy<Dictionary<string, CsItem>> WeaponsEnumCache = new(BuildEnumMemberMap);

private static Dictionary<string, CsItem> BuildEnumMemberMap()
{
var dictionary = new Dictionary<string, CsItem>();

foreach (var field in typeof(CsItem).GetFields(BindingFlags.Public | BindingFlags.Static))
{
var attribute = field.GetCustomAttribute<EnumMemberAttribute>();
if (attribute?.Value == null) continue;
if (field.GetValue(null) is not CsItem csItem)
continue;
var enumValue = field.GetValue(null);

dictionary.TryAdd(attribute.Value, csItem);
}

return dictionary;
}

public static CsItem? GetEnumFromWeaponName(string weaponName)
{
if (WeaponsEnumCache.Value.TryGetValue(weaponName, out var csItem))
{
return csItem;
}

return null;
}

public static List<(string EnumMemberValue, CsItem EnumValue)> GetWeaponsByPartialName(string input)
{
var matchingWeapons = WeaponsEnumCache.Value
.Where(kvp => kvp.Key.Contains(input))
.Select(kvp => (kvp.Key, kvp.Value))
.ToList();

return matchingWeapons;
}
}
2 changes: 1 addition & 1 deletion CS2-SimpleAdmin/VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.6.3b
1.6.4a
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using CounterStrikeSharp.API;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Core.Attributes.Registration;
using CounterStrikeSharp.API.Core.Capabilities;
using CounterStrikeSharp.API.Modules.Admin;
using CounterStrikeSharp.API.Modules.Commands;
using CS2_SimpleAdminApi;
using Microsoft.Extensions.Logging;

namespace CS2_SimpleAdmin_CleanModule;

public class CS2_SimpleAdmin_CleanModule: BasePlugin
{
public override string ModuleName => "[CS2-SimpleAdmin] Clean module";
public override string ModuleDescription => "Module allows you to remove all weapons lying on the ground";
public override string ModuleVersion => "v1.0.0";
public override string ModuleAuthor => "daffyy";

private static ICS2_SimpleAdminApi? _sharedApi;
private readonly PluginCapability<ICS2_SimpleAdminApi> _pluginCapability = new("simpleadmin:api");

public override void OnAllPluginsLoaded(bool hotReload)
{
_sharedApi = _pluginCapability.Get();

if (_sharedApi == null)
{
Logger.LogError("CS2-SimpleAdmin SharedApi not found");
Unload(false);
}
}

[ConsoleCommand("css_clean")]
[ConsoleCommand("css_clear")]
[RequiresPermissions("@css/cheat")]
public void OnCleanCommand(CCSPlayerController? caller, CommandInfo commandInfo)
{
var weapons = Utilities.FindAllEntitiesByDesignerName<CCSWeaponBaseGun>("weapon_");
var defusers = Utilities.FindAllEntitiesByDesignerName<CSceneEntity>("item_cutters");

foreach (var weapon in weapons)
{
if (!weapon.IsValid || weapon.State != CSWeaponState_t.WEAPON_NOT_CARRIED)
continue;

weapon.Remove();
}

foreach (var defuser in defusers)
{
if (!defuser.IsValid || defuser.OwnerEntity.Value != null)
continue;

defuser.Remove();
}

_sharedApi?.LogCommand(caller, commandInfo);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>CS2_SimpleAdmin_CleanModule</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="CounterStrikeSharp.API" Version="1.0.266" />
</ItemGroup>

<ItemGroup>
<Reference Include="CS2-SimpleAdminApi">
<HintPath>CS2-SimpleAdminApi.dll</HintPath>
</Reference>
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CS2-SimpleAdmin_CleanModule", "CS2-SimpleAdmin_CleanModule.csproj", "{D940F3E9-0E3F-467A-B336-149E3A624FB6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{D940F3E9-0E3F-467A-B336-149E3A624FB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D940F3E9-0E3F-467A-B336-149E3A624FB6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D940F3E9-0E3F-467A-B336-149E3A624FB6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D940F3E9-0E3F-467A-B336-149E3A624FB6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
Binary file modified Modules/CS2-SimpleAdmin_ExampleModule/CS2-SimpleAdminApi.dll
Binary file not shown.

0 comments on commit 5a9367a

Please sign in to comment.