parent
7526f86dab
commit
18f23fd07d
@ -69,6 +69,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Integrations.Cod", "Integra
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Integrations.Source", "Integrations\Source\Integrations.Source.csproj", "{9512295B-3045-40E0-9B7E-2409F2173E9D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mute", "Plugins\Mute\Mute.csproj", "{259824F3-D860-4233-91D6-FF73D4DD8B18}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GameFiles", "GameFiles", "{6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GameInterface", "GameInterface", "{5C2BE2A8-EA1D-424F-88E1-7FC33EEC2E55}"
|
||||
@ -401,6 +403,30 @@ Global
|
||||
{9512295B-3045-40E0-9B7E-2409F2173E9D}.Release|x86.Build.0 = Release|Any CPU
|
||||
{9512295B-3045-40E0-9B7E-2409F2173E9D}.Prerelease|Any CPU.ActiveCfg = Prerelease|Any CPU
|
||||
{9512295B-3045-40E0-9B7E-2409F2173E9D}.Prerelease|Any CPU.Build.0 = Prerelease|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|Mixed Platforms.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|Mixed Platforms.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|x64.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|x64.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|x86.ActiveCfg = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|x86.Build.0 = Debug|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|Mixed Platforms.Build.0 = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|x64.Build.0 = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Release|x86.Build.0 = Release|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|Any CPU.ActiveCfg = Prerelease|Any CPU
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18}.Prerelease|Any CPU.Build.0 = Prerelease|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@ -415,6 +441,7 @@ Global
|
||||
{00A1FED2-2254-4AF7-A5DB-2357FA7C88CD} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||
{A9348433-58C1-4B9C-8BB7-088B02529D9D} = {A2AE33B4-0830-426A-9E11-951DAB12BE5B}
|
||||
{9512295B-3045-40E0-9B7E-2409F2173E9D} = {A2AE33B4-0830-426A-9E11-951DAB12BE5B}
|
||||
{259824F3-D860-4233-91D6-FF73D4DD8B18} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||
{6CBF412C-EFEE-45F7-80FD-AC402C22CDB9} = {8C8F3945-0AEF-4949-A1F7-B18E952E50BC}
|
||||
{5C2BE2A8-EA1D-424F-88E1-7FC33EEC2E55} = {6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}
|
||||
{AB83BAC0-C539-424A-BF00-78487C10753C} = {6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}
|
||||
|
42
Plugins/Mute/Commands/MuteCommand.cs
Normal file
42
Plugins/Mute/Commands/MuteCommand.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using Data.Models.Client;
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Commands;
|
||||
using SharedLibraryCore.Configuration;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
|
||||
namespace Mute.Commands;
|
||||
|
||||
public class MuteCommand : Command
|
||||
{
|
||||
public MuteCommand(CommandConfiguration config, ITranslationLookup translationLookup) : base(config,
|
||||
translationLookup)
|
||||
{
|
||||
Name = "mute";
|
||||
Description = translationLookup["PLUGINS_MUTE_COMMANDS_MUTE_DESC"];
|
||||
Alias = "mu";
|
||||
Permission = EFClient.Permission.Moderator;
|
||||
RequiresTarget = true;
|
||||
SupportedGames = Plugin.SupportedGames;
|
||||
Arguments = new[]
|
||||
{
|
||||
new CommandArgument
|
||||
{
|
||||
Name = translationLookup["COMMANDS_ARGS_PLAYER"],
|
||||
Required = true
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private readonly MuteManager _muteManager = new();
|
||||
|
||||
public override async Task ExecuteAsync(GameEvent gameEvent)
|
||||
{
|
||||
if (await _muteManager.Mute(gameEvent))
|
||||
{
|
||||
gameEvent.Origin.Tell($"{_translationLookup["PLUGINS_MUTE_MUTED"]} {gameEvent.Target.Name}");
|
||||
return;
|
||||
}
|
||||
|
||||
gameEvent.Origin.Tell($"{_translationLookup["PLUGINS_MUTE_UNMUTED"]} {gameEvent.Target.Name}");
|
||||
}
|
||||
}
|
38
Plugins/Mute/DataManager.cs
Normal file
38
Plugins/Mute/DataManager.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using Data.Models.Client;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using static System.Enum;
|
||||
|
||||
namespace Mute;
|
||||
|
||||
public class DataManager
|
||||
{
|
||||
public DataManager(IMetaServiceV2 metaService)
|
||||
{
|
||||
_metaService = metaService;
|
||||
}
|
||||
|
||||
private readonly IMetaServiceV2 _metaService;
|
||||
|
||||
public async Task<MuteState> ReadPersistentData(EFClient client)
|
||||
{
|
||||
var clientMuteState = client.GetAdditionalProperty<MuteState?>(Plugin.MuteKey) ??
|
||||
Parse<MuteState>((await _metaService.GetPersistentMeta(Plugin.MuteKey, client.ClientId))?
|
||||
.Value ?? nameof(MuteState.Unmuted));
|
||||
|
||||
client.SetAdditionalProperty(Plugin.MuteKey, clientMuteState);
|
||||
return clientMuteState;
|
||||
}
|
||||
|
||||
public async Task WritePersistentData(EFClient client, MuteState state)
|
||||
{
|
||||
await _metaService.SetPersistentMeta(Plugin.MuteKey, state.ToString(), client.ClientId);
|
||||
client.SetAdditionalProperty(Plugin.MuteKey, state);
|
||||
}
|
||||
}
|
||||
|
||||
public enum MuteState
|
||||
{
|
||||
Muted,
|
||||
Unmuting,
|
||||
Unmuted
|
||||
}
|
20
Plugins/Mute/Mute.csproj
Normal file
20
Plugins/Mute/Mute.csproj
Normal file
@ -0,0 +1,20 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Authors>MrAmos123</Authors>
|
||||
<OutputType>Library</OutputType>
|
||||
<Configurations>Debug;Release;Prerelease</Configurations>
|
||||
<Platforms>AnyCPU</Platforms>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="RaidMax.IW4MAdmin.SharedLibraryCore" Version="2022.6.16.1"/>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||
<Exec Command="dotnet publish $(ProjectPath) -c $(ConfigurationName) -o $(ProjectDir)..\..\Build\Plugins --no-build --no-restore --no-dependencies"/>
|
||||
</Target>
|
||||
</Project>
|
21
Plugins/Mute/MuteManager.cs
Normal file
21
Plugins/Mute/MuteManager.cs
Normal file
@ -0,0 +1,21 @@
|
||||
using SharedLibraryCore;
|
||||
|
||||
namespace Mute;
|
||||
|
||||
public class MuteManager
|
||||
{
|
||||
public async Task<bool> Mute(GameEvent gameEvent)
|
||||
{
|
||||
if (await Plugin.DataManager.ReadPersistentData(gameEvent.Target) == MuteState.Muted)
|
||||
{
|
||||
await gameEvent.Owner.ExecuteCommandAsync($"unmute {gameEvent.Target.ClientNumber}");
|
||||
await Plugin.DataManager.WritePersistentData(gameEvent.Target,
|
||||
gameEvent.Target.IsIngame ? MuteState.Unmuted : MuteState.Unmuting);
|
||||
return false;
|
||||
}
|
||||
|
||||
await gameEvent.Owner.ExecuteCommandAsync($"muteClient {gameEvent.Target.ClientNumber}");
|
||||
await Plugin.DataManager.WritePersistentData(gameEvent.Target, MuteState.Muted);
|
||||
return true;
|
||||
}
|
||||
}
|
60
Plugins/Mute/Plugin.cs
Normal file
60
Plugins/Mute/Plugin.cs
Normal file
@ -0,0 +1,60 @@
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
|
||||
namespace Mute;
|
||||
|
||||
public class Plugin : IPlugin
|
||||
{
|
||||
public Plugin(IMetaServiceV2 metaService)
|
||||
{
|
||||
DataManager = new DataManager(metaService);
|
||||
}
|
||||
|
||||
public string Name => "Mute";
|
||||
public float Version => (float) Utilities.GetVersionAsDouble();
|
||||
public string Author => "Amos";
|
||||
|
||||
public static string MuteKey = "IW4MMute";
|
||||
|
||||
public static DataManager DataManager;
|
||||
public static readonly Server.Game[] SupportedGames = {Server.Game.IW4};
|
||||
|
||||
public async Task OnEventAsync(GameEvent gameEvent, Server server)
|
||||
{
|
||||
if (!SupportedGames.Contains(server.GameName)) return;
|
||||
|
||||
switch (gameEvent.Type)
|
||||
{
|
||||
case GameEvent.EventType.Join:
|
||||
switch (await DataManager.ReadPersistentData(gameEvent.Origin))
|
||||
{
|
||||
case MuteState.Muted:
|
||||
await server.ExecuteCommandAsync($"muteClient {gameEvent.Origin.ClientNumber}");
|
||||
break;
|
||||
case MuteState.Unmuting:
|
||||
await server.ExecuteCommandAsync($"unmute {gameEvent.Origin.ClientNumber}");
|
||||
await DataManager.WritePersistentData(gameEvent.Origin, MuteState.Unmuted);
|
||||
break;
|
||||
case MuteState.Unmuted:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public Task OnLoadAsync(IManager manager)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task OnUnloadAsync()
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public Task OnTickAsync(Server server)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user