Skip to content

Commit f323571

Browse files
authored
Merge pull request #2 from imi-tat0r/custom-vote-percentage
- Added MinVotePercentage - Added more languages
2 parents 4ba3fc1 + a5e4136 commit f323571

14 files changed

+106
-21
lines changed

CS2-CustomVotes.Shared/CS2-CustomVotes.Shared.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,8 @@
77
<Nullable>enable</Nullable>
88
</PropertyGroup>
99

10+
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
11+
<Exec Command="mkdir $(SolutionDir)Public\addons\counterstrikesharp\shared\CS2-CustomVotes.Shared" IgnoreExitCode="true" />
12+
<Exec Command="xcopy /Y /R $(TargetDir)*.* $(SolutionDir)Public\addons\counterstrikesharp\shared\CS2-CustomVotes.Shared\" />
13+
</Target>
1014
</Project>

CS2-CustomVotes.Shared/ICustomVoteApi.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@ public interface ICustomVoteApi
66
{
77
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style);
88
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style);
9+
10+
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style, int minVotePercentage);
11+
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style, int minVotePercentage);
912
public void RemoveCustomVote(string name);
1013
}

CS2-CustomVotes/CS2-CustomVotes.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,10 @@
1515
<ProjectReference Include="..\CS2-CustomVotes.Shared\CS2-CustomVotes.Shared.csproj" />
1616
</ItemGroup>
1717

18+
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
19+
<Exec Command="mkdir $(SolutionDir)Public\addons\counterstrikesharp\plugins\CS2-CustomVotes\lang" IgnoreExitCode="true" />
20+
<Exec Command="xcopy /Y /R $(TargetDir)*.* $(SolutionDir)Public\addons\counterstrikesharp\plugins\CS2-CustomVotes\" />
21+
<Exec Command="xcopy /Y /R $(ProjectDir)lang\*.* $(SolutionDir)Public\addons\counterstrikesharp\plugins\CS2-CustomVotes\lang\" />
22+
</Target>
23+
1824
</Project>

CS2-CustomVotes/Helpers/Config.cs renamed to CS2-CustomVotes/Extensions/ConfigExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
using CounterStrikeSharp.API;
44
using CounterStrikeSharp.API.Core;
55

6-
namespace CS2_CustomVotes.Helpers;
6+
namespace CS2_CustomVotes.Extensions;
77

8-
public static class Config
8+
public static class ConfigExtensions
99
{
1010
private static readonly string AssemblyName = Assembly.GetExecutingAssembly().GetName().Name ?? "";
11-
private static readonly string CfgPath = $"{Server.GameDirectory}/csgo/addons/counterstrikesharp/configs/plugins/{AssemblyName}/{AssemblyName}.json";
11+
public static readonly string CfgPath = $"{Server.GameDirectory}/csgo/addons/counterstrikesharp/configs/plugins/{AssemblyName}/{AssemblyName}.json";
1212

1313
public static void Update<T>(this T config) where T : BasePluginConfig, new()
1414
{

CS2-CustomVotes/Models/ActiveVote.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public KeyValuePair<string, List<uint>> GetWinningOption()
5050
return new KeyValuePair<string, List<uint>>(Vote.DefaultOption, new List<uint>());
5151

5252
var winningOption = OptionVotes.MaxBy(x => x.Value.Count);
53-
return winningOption;
53+
var totalVotes = OptionVotes.Sum(x => x.Value.Count);
54+
55+
if (Vote.MinVotePercentage < 0 || winningOption.Value.Count >= totalVotes * Vote.MinVotePercentage / 100)
56+
return winningOption;
57+
58+
return new KeyValuePair<string, List<uint>>(Vote.DefaultOption, new List<uint>());
5459
}
5560
}

CS2-CustomVotes/Models/CustomVote.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ public class CustomVote
3636

3737
[JsonPropertyName("Style")]
3838
public string Style { get; set; } = null!;
39-
39+
40+
[JsonPropertyName("MinVotePercentage")]
41+
public int MinVotePercentage { get; set; } = -1;
42+
4043
[JsonPropertyName("Permission")]
4144
public Permission Permission { get; set; } = new();
4245

CS2-CustomVotes/Plugin.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
using CounterStrikeSharp.API.Core;
1+
using System.Text.Json;
2+
using CounterStrikeSharp.API.Core;
23
using CounterStrikeSharp.API.Core.Attributes;
4+
using CounterStrikeSharp.API.Core.Attributes.Registration;
35
using CounterStrikeSharp.API.Core.Capabilities;
6+
using CounterStrikeSharp.API.Modules.Admin;
7+
using CounterStrikeSharp.API.Modules.Commands;
8+
using CS2_CustomVotes.Extensions;
49
using CS2_CustomVotes.Factories;
5-
using CS2_CustomVotes.Helpers;
6-
using CS2_CustomVotes.Models;
710
using CS2_CustomVotes.Services;
811
using CS2_CustomVotes.Shared;
912
using Microsoft.Extensions.DependencyInjection;
@@ -16,7 +19,7 @@ public class CustomVotes : BasePlugin, IPluginConfig<CustomVotesConfig>
1619
{
1720
public override string ModuleName => "Custom Votes";
1821
public override string ModuleDescription => "Allows you to create custom votes for your server.";
19-
public override string ModuleVersion => "1.0.0";
22+
public override string ModuleVersion => "1.0.1";
2023
public override string ModuleAuthor => "imi-tat0r";
2124

2225
public CustomVotesConfig Config { get; set; } = null!;
@@ -58,9 +61,21 @@ public void OnConfigParsed(CustomVotesConfig config)
5861
config.Update();
5962
}
6063

61-
public override void Unload(bool hotReload)
64+
[ConsoleCommand("css_reload_cfg", "Reload the config in the current session without restarting the server")]
65+
[RequiresPermissions("@css/generic")]
66+
[CommandHelper(minArgs: 0, whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
67+
public void OnReloadConfigCommand(CCSPlayerController? player, CommandInfo info)
6268
{
63-
base.Unload(hotReload);
69+
var config = File.ReadAllText(ConfigExtensions.CfgPath);
70+
try
71+
{
72+
OnConfigParsed(JsonSerializer.Deserialize<CustomVotesConfig>(config,
73+
new JsonSerializerOptions() { ReadCommentHandling = JsonCommentHandling.Skip })!);
74+
}
75+
catch (Exception e)
76+
{
77+
info.ReplyToCommand($"[DiscordChatSync] Failed to reload config: {e.Message}");
78+
}
6479
}
6580
}
6681

CS2-CustomVotes/PluginConfig.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,16 @@ public class CustomVotesConfig : BasePluginConfig
3333
{ "Disable", new("{Red}Disable", new List<string> { "sv_cheats 0" })}
3434
},
3535
DefaultOption = "Disable",
36-
Style = "center"
36+
Style = "center",
37+
MinVotePercentage = 50,
38+
Permission = new Permission
39+
{
40+
RequiresAll = false,
41+
Permissions = new List<string>()
42+
}
3743
}
3844
};
3945

4046
[JsonPropertyName("ConfigVersion")]
41-
public override int Version { get; set; } = 1;
47+
public override int Version { get; set; } = 2;
4248
}

CS2-CustomVotes/Services/CustomVoteApi.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,24 @@ public CustomVoteApi(IVoteManager voteManager)
1515

1616
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style)
1717
{
18-
_voteManager.AddVote(name, new List<string>(), description, defaultOption, timeToVote, options, style);
18+
_voteManager.AddVote(name, new List<string>(), description, defaultOption, timeToVote, options, style, -1);
1919
}
2020

2121
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote,
2222
Dictionary<string, VoteOption> options, string style)
2323
{
24-
_voteManager.AddVote(name, aliases, description, defaultOption, timeToVote, options, style);
24+
_voteManager.AddVote(name, aliases, description, defaultOption, timeToVote, options, style, -1);
25+
}
26+
27+
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style, int minVotePercentage)
28+
{
29+
_voteManager.AddVote(name, new List<string>(), description, defaultOption, timeToVote, options, style, minVotePercentage);
30+
}
31+
32+
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote,
33+
Dictionary<string, VoteOption> options, string style, int minVotePercentage)
34+
{
35+
_voteManager.AddVote(name, aliases, description, defaultOption, timeToVote, options, style, minVotePercentage);
2536
}
2637

2738
public void RemoveCustomVote(string name)

CS2-CustomVotes/Services/VoteManager.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace CS2_CustomVotes.Services;
1818
public interface IVoteManager
1919
{
2020
public void AddVote(CustomVote vote);
21-
public void AddVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style = "center");
21+
public void AddVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style = "center", int minVotePercentage = 50);
2222
public void RemoveVote(string name);
2323

2424
public bool StartVote(CCSPlayerController? player, string name, out string baseName);
@@ -76,7 +76,7 @@ public void AddVote(CustomVote vote)
7676

7777
vote.ExecuteCommand();
7878
}
79-
public void AddVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style = "center")
79+
public void AddVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style = "center", int minVotePercentage = 50)
8080
{
8181
var customVote = new CustomVote
8282
{
@@ -86,7 +86,8 @@ public void AddVote(string name, List<string> aliases, string description, strin
8686
DefaultOption = defaultOption,
8787
TimeToVote = timeToVote,
8888
Options = options,
89-
Style = style
89+
Style = style,
90+
MinVotePercentage = minVotePercentage,
9091
};
9192
AddVote(customVote);
9293
}

CS2-CustomVotes/lang/cz.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"vote.disabled": "Speciální hlasování jsou {DarkBlue}vypnuta{Default}.",
3+
"vote.active": "Hlasování již probíhá.",
4+
"vote.started": "Hráč {DarkBlue}{0}{Default} spustil hlasování pro {DarkBlue}{1}{Default}.",
5+
"vote.cooldown": "Prosím, počkejte {DarkBlue}{0}{Default} sekund mezi hlasováním.",
6+
"vote.already_voted": "Již jste hlasovali.",
7+
"vote.finished_with": "Hlasování pro {DarkBlue}{0}{Default} skončilo s výsledkem {DarkBlue}{1}{Default} ({2} hlasy).",
8+
"vote.no_permission": "Nemáte potřebné oprávnění k zahájení tohoto hlasování."
9+
}

CS2-CustomVotes/lang/pt-pt.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"vote.disabled": "Os votos personalizados estão {DarkBlue}DESATIVADOS{Default}!",
3+
"vote.active": "Já está a decorrer uma votação!",
4+
"vote.started": "O jogador {DarkBlue}{0}{Default} começou uma votação para {DarkBlue}{1}{Default}",
5+
"vote.cooldown": "Por favor espere {DarkBlue}{0}{Default} segundos entre as votações!",
6+
"vote.already_voted": "Já votou!",
7+
"vote.finished_with": "Votar para {DarkBlue}{0}{Default} acaba em {DarkBlue}{1}{Default} ({2} votos).",
8+
"vote.no_permission": "Não tem a permissão necessária para iniciar esta votação..."
9+
}

CS2-CustomVotes/lang/ru.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"vote.disabled": "Custom Votes {DarkBlue}отключен{Default}.",
3+
"vote.active": "Голосование уже началось.",
4+
"vote.started": "Игрок {DarkBlue}{0}{Default} начал голосование {DarkBlue}{1}{Default}.",
5+
"vote.cooldown": "Пожалуйста, подождите {DarkBlue}{0}{Default} секунд между голосованиями.",
6+
"vote.already_voted": "Вы уже проголосовали.",
7+
"vote.finished_with": "Голосование {DarkBlue}{0}{Default} закончилось с {DarkBlue}{1}{Default} ({2} голосов).",
8+
"vote.no_permission": "У вас нет прав для начала этого голосования."
9+
}

README.MD

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
![Copyright ev0lve Digital](https://img.shields.io/badge/Copyright-ev0lve%20Digital-blue) ![GitHub License](https://img.shields.io/github/license/imi-tat0r/CS2-CustomVotes) ![Issues](https://img.shields.io/github/issues/imi-tat0r/CS2-CustomVotes) ![Downloads](https://img.shields.io/github/downloads/imi-tat0r/CS2-CustomVotes/total) ![Stars](https://img.shields.io/github/stars/imi-tat0r/CS2-CustomVotes)
22

3-
# CS2 Custom Votes (1.0.0)
3+
# CS2 Custom Votes (1.0.1)
44
![image](https://du.hurenso.hn/r/X4jQaq.png) ![image](https://du.hurenso.hn/r/81Imq8.png)
55

66
# About
@@ -58,13 +58,14 @@ Every vote options can trigger multiple commands at once allowing for a wide ran
5858
},
5959
"DefaultOption": "Disable", // default option (must be a key from the "Options" object)
6060
"Style": "chat", // Menu style - "center" or "chat" (will be overridden by the global ForceStyle if not "none")
61+
"MinVotePercentage": -1, // minimum percentage of votes required to pass the vote (-1 behaves like 50%)
6162
"Permission": {
6263
"RequiresAll": false, // if true, all permissions must be present to vote
6364
"Permissions": [] // list of permissions required to start this vote (empty list allows everyone to start the vote)
6465
}
6566
}
6667
],
67-
"ConfigVersion": 1
68+
"ConfigVersion": 2
6869
}
6970
```
7071

@@ -75,6 +76,8 @@ public interface ICustomVoteApi
7576
{
7677
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style);
7778
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style);
79+
public void AddCustomVote(string name, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style, int minVotePercentage);
80+
public void AddCustomVote(string name, List<string> aliases, string description, string defaultOption, float timeToVote, Dictionary<string, VoteOption> options, string style, int minVotePercentage);
7881
public void RemoveCustomVote(string name);
7982
}
8083

@@ -89,7 +92,8 @@ customVotesApi.AddCustomVote(
8992
{ "Enable", new VoteOption("{Green}Enable", new List<string> { "sv_cheats 1" })},
9093
{ "Disable", new VoteOption("{Red}Disable", new List<string> { "sv_cheats 0" })},
9194
},
92-
"chat"); // Menu style - "center" or "chat"
95+
"chat", // Menu style - "center" or "chat"
96+
-1); // minimum percentage of votes required to pass the vote (-1 behaves like 50%)
9397
9498
customVotesApi.RemoveCustomVote("cheats");
9599
```

0 commit comments

Comments
 (0)