Merge branch 'release/pre' of github.com:RaidMax/IW4M-Admin into release/pre
This commit is contained in:
commit
3cffdfdd9d
@ -69,6 +69,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Integrations.Cod", "Integra
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Integrations.Source", "Integrations\Source\Integrations.Source.csproj", "{9512295B-3045-40E0-9B7E-2409F2173E9D}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Integrations.Source", "Integrations\Source\Integrations.Source.csproj", "{9512295B-3045-40E0-9B7E-2409F2173E9D}"
|
||||||
EndProject
|
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}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GameFiles", "GameFiles", "{6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "GameInterface", "GameInterface", "{5C2BE2A8-EA1D-424F-88E1-7FC33EEC2E55}"
|
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}.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.ActiveCfg = Prerelease|Any CPU
|
||||||
{9512295B-3045-40E0-9B7E-2409F2173E9D}.Prerelease|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
@ -415,6 +441,7 @@ Global
|
|||||||
{00A1FED2-2254-4AF7-A5DB-2357FA7C88CD} = {26E8B310-269E-46D4-A612-24601F16065F}
|
{00A1FED2-2254-4AF7-A5DB-2357FA7C88CD} = {26E8B310-269E-46D4-A612-24601F16065F}
|
||||||
{A9348433-58C1-4B9C-8BB7-088B02529D9D} = {A2AE33B4-0830-426A-9E11-951DAB12BE5B}
|
{A9348433-58C1-4B9C-8BB7-088B02529D9D} = {A2AE33B4-0830-426A-9E11-951DAB12BE5B}
|
||||||
{9512295B-3045-40E0-9B7E-2409F2173E9D} = {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}
|
{6CBF412C-EFEE-45F7-80FD-AC402C22CDB9} = {8C8F3945-0AEF-4949-A1F7-B18E952E50BC}
|
||||||
{5C2BE2A8-EA1D-424F-88E1-7FC33EEC2E55} = {6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}
|
{5C2BE2A8-EA1D-424F-88E1-7FC33EEC2E55} = {6CBF412C-EFEE-45F7-80FD-AC402C22CDB9}
|
||||||
{AB83BAC0-C539-424A-BF00-78487C10753C} = {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