Skip to content

Commit df82d9d

Browse files
committed
min(98), Added newline support, Refactored code
1 parent 7287e97 commit df82d9d

File tree

1 file changed

+170
-142
lines changed

1 file changed

+170
-142
lines changed

CustomCommands/CustomCommands.cs

+170-142
Original file line numberDiff line numberDiff line change
@@ -3,178 +3,206 @@
33
using CounterStrikeSharp.API.Core.Attributes;
44
using CounterStrikeSharp.API.Core.Attributes.Registration;
55
using CustomCommands.Model;
6+
using Microsoft.Extensions.Logging;
67
using System.Text.Json;
78

8-
namespace CustomCommands
9-
{
10-
[MinimumApiVersion(98)]
11-
public class CustomCommands : BasePlugin, IPluginConfig<CustomCommandsConfig>
12-
{
13-
public override string ModuleName => "CustomCommands";
14-
15-
public override string ModuleVersion => "1.0.1";
16-
17-
public override string ModuleAuthor => "HerrMagic";
18-
19-
public override string ModuleDescription => "Create your own commands per config";
9+
namespace CustomCommands;
2010

21-
private List<CCSPlayerController> PlayerList = new();
11+
[MinimumApiVersion(98)]
12+
public class CustomCommands : BasePlugin, IPluginConfig<CustomCommandsConfig>
13+
{
14+
public override string ModuleName => "CustomCommands";
15+
public override string ModuleVersion => "1.0.1";
16+
public override string ModuleAuthor => "HerrMagic";
17+
public override string ModuleDescription => "Create your own commands per config";
2218

23-
public CustomCommandsConfig Config { get; set; } = new();
19+
private List<CCSPlayerController> PlayerList = new();
20+
public CustomCommandsConfig Config { get; set; } = new();
21+
private string PrefixCache = "";
2422

25-
private string PrefixCache = "";
23+
public void OnConfigParsed(CustomCommandsConfig config)
24+
{
25+
Config = config;
26+
}
2627

27-
public void OnConfigParsed(CustomCommandsConfig config)
28+
public override void Load(bool hotReload)
29+
{
30+
if (!Config.IsPluginEnabled)
2831
{
29-
Config = config;
32+
Console.WriteLine($"{Config.LogPrefix} {ModuleName} is disabled");
33+
return;
3034
}
3135

32-
36+
Console.WriteLine(
37+
$"CustomCommands has been loaded, and the hot reload flag was {hotReload}, path is {ModulePath}");
3338

34-
public override void Load(bool hotReload)
35-
{
36-
if (!Config.IsPluginEnabled)
37-
{
38-
Console.WriteLine($"{Config.LogPrefix} {ModuleName} is disabled");
39-
return;
40-
}
41-
42-
Console.WriteLine(
43-
$"CustomCommands has been loaded, and the hot reload flag was {hotReload}, path is {ModulePath}");
39+
if (Config.Prefix != PrefixCache)
40+
PrefixCache = ReplaceTags(Config.Prefix);
4441

45-
if (Config.Prefix != PrefixCache)
46-
PrefixCache = ReplaceTags(Config.Prefix);
42+
var comms = LoadCommandsFromJson();
4743

48-
var json = File.ReadAllText(Path.Combine(ModuleDirectory, "Commands.json"));
49-
var comms = JsonSerializer.Deserialize<List<Commands>>(json);
50-
51-
if (comms != null)
44+
if (comms != null)
45+
{
46+
foreach (var com in comms)
5247
{
53-
foreach (var com in comms)
54-
{
55-
string[] aliases = com.Command.Split(',');
56-
57-
for (int i = 0; i < aliases.Length; i++)
58-
{
59-
AddCommand(aliases[i], com.Description, (player, info) =>
60-
{
61-
if (player == null) return;
62-
63-
TriggerMessage(player, com);
64-
65-
});
66-
}
67-
}
48+
AddCommands(com);
6849
}
69-
else
70-
Console.WriteLine("No Config file found. Please create one");
71-
72-
if (hotReload)
73-
InitializeLists();
7450
}
7551

76-
private void TriggerMessage(CCSPlayerController player, Commands cmd)
52+
if (hotReload)
53+
InitializeLists();
54+
}
55+
56+
private List<Commands>? LoadCommandsFromJson()
57+
{
58+
string jsonPath = Path.Combine(ModuleDirectory, "Commands.json");
59+
if (File.Exists(jsonPath))
7760
{
78-
switch (cmd.PrintTo)
79-
{
80-
case Sender.ClientChat:
81-
PrintToChat(Receiver.Client, player, cmd.Message);
82-
83-
break;
84-
case Sender.AllChat:
85-
PrintToChat(Receiver.Server, player, cmd.Message);
86-
87-
break;
88-
case Sender.ClientCenter:
89-
player.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
90-
91-
break;
92-
case Sender.AllCenter:
93-
foreach (var controller in PlayerList)
94-
controller.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
95-
96-
break;
97-
case Sender.ClientChatClientCenter:
98-
PrintToChat(Receiver.Client, player, cmd.Message);
99-
player.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
100-
101-
break;
102-
case Sender.ClientChatAllCenter:
103-
PrintToChat(Receiver.Client, player, cmd.Message);
104-
foreach (var controller in PlayerList)
105-
controller.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
106-
107-
break;
108-
case Sender.AllChatClientCenter:
109-
PrintToChat(Receiver.Server, player, cmd.Message);
110-
player.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
111-
112-
break;
113-
case Sender.AllChatAllCenter:
114-
PrintToChat(Receiver.Server, player, cmd.Message);
115-
foreach (var controller in PlayerList)
116-
controller.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
117-
118-
break;
119-
default:
120-
break;
121-
}
61+
var json = File.ReadAllText(jsonPath);
62+
return JsonSerializer.Deserialize<List<Commands>>(json);
12263
}
123-
124-
125-
private void PrintToChat(Receiver printToChat, CCSPlayerController player, string message)
64+
else
12665
{
127-
string[] msg = ReplaceTags(message).Split("\\n");
128-
129-
switch (printToChat)
130-
{
131-
case Receiver.Client:
132-
foreach (var line in msg)
133-
player.PrintToChat(line);
134-
break;
135-
case Receiver.Server:
136-
foreach (var line in msg)
137-
Server.PrintToChatAll(line);
138-
break;
139-
default:
140-
break;
141-
}
66+
Logger.LogWarning("No Config file found. Please create one");
67+
return null;
14268
}
69+
}
70+
71+
private void AddCommands(Commands com)
72+
{
73+
string[] aliases = com.Command.Split(',');
14374

144-
private string ReplaceTags(string input)
75+
for (int i = 0; i < aliases.Length; i++)
14576
{
146-
string[] patterns =
147-
{
148-
"{PREFIX}", "{DEFAULT}", "{RED}", "{LIGHTPURPLE}", "{GREEN}", "{LIME}", "{LIGHTGREEN}", "{LIGHTRED}", "{GRAY}",
149-
"{LIGHTOLIVE}", "{OLIVE}", "{LIGHTBLUE}", "{BLUE}", "{PURPLE}", "{GRAYBLUE}"
150-
};
151-
string[] replacements =
77+
AddCommand(aliases[i], com.Description, (player, info) =>
15278
{
153-
PrefixCache ,"\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E",
154-
"\x0A"
155-
};
79+
if (player == null) return;
80+
TriggerMessage(player, com);
81+
});
82+
}
83+
}
84+
private void TriggerMessage(CCSPlayerController player, Commands cmd)
85+
{
86+
switch (cmd.PrintTo)
87+
{
88+
case Sender.ClientChat:
89+
PrintToChat(Receiver.Client, player, cmd.Message);
90+
break;
91+
case Sender.AllChat:
92+
PrintToChat(Receiver.Server, player, cmd.Message);
93+
break;
94+
case Sender.ClientCenter:
95+
player.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
96+
break;
97+
case Sender.AllCenter:
98+
PrintToAllCenter(cmd);
99+
break;
100+
case Sender.ClientChatClientCenter:
101+
PrintToChatAndCenter(Receiver.Client, player, cmd);
102+
break;
103+
case Sender.ClientChatAllCenter:
104+
PrintToChatAndAllCenter(Receiver.Client, player, cmd);
105+
break;
106+
case Sender.AllChatClientCenter:
107+
PrintToChatAndCenter(Receiver.Server, player, cmd);
108+
break;
109+
case Sender.AllChatAllCenter:
110+
PrintToChatAndAllCenter(Receiver.Server, player, cmd);
111+
break;
112+
default:
113+
break;
114+
}
115+
}
156116

157-
for (var i = 0; i < patterns.Length; i++)
158-
input = input.Replace(patterns[i], replacements[i]);
117+
private void PrintToAllCenter(Commands cmd)
118+
{
119+
foreach (var controller in PlayerList)
120+
controller.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
121+
}
159122

160-
return input;
161-
}
123+
private void PrintToChatAndCenter(Receiver receiver, CCSPlayerController player, Commands cmd)
124+
{
125+
PrintToChat(receiver, player, cmd.Message);
126+
player.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
127+
}
128+
129+
private void PrintToChatAndAllCenter(Receiver receiver, CCSPlayerController player, Commands cmd)
130+
{
131+
PrintToChat(receiver, player, cmd.Message);
132+
PrintToAllCenter(cmd);
133+
}
134+
135+
136+
private void PrintToChat(Receiver printToChat, CCSPlayerController player, string message)
137+
{
138+
string[] msg = ReplaceTags(message).Split("\\n");
162139

163-
private void InitializeLists()
140+
switch (printToChat)
164141
{
165-
Utilities.GetPlayers().ForEach(controller =>
166-
{
167-
PlayerList.Add(controller);
168-
});
142+
case Receiver.Client:
143+
PrintToChatClient(player, msg);
144+
break;
145+
case Receiver.Server:
146+
PrintToChatServer(msg);
147+
break;
148+
default:
149+
break;
169150
}
151+
}
152+
153+
private void PrintToChatClient(CCSPlayerController player, string[] msg)
154+
{
155+
foreach (var line in msg)
156+
player.PrintToChat(line);
157+
}
158+
159+
private void PrintToChatServer(string[] msg)
160+
{
161+
foreach (var line in msg)
162+
Server.PrintToChatAll(line);
163+
}
164+
165+
private string ReplaceTags(string input)
166+
{
167+
Dictionary<string, string> replacements = new()
168+
{
169+
{"{PREFIX}", PrefixCache},
170+
{"{DEFAULT}", "\x01"},
171+
{"{RED}", "\x02"},
172+
{"{LIGHTPURPLE}", "\x03"},
173+
{"{GREEN}", "\x04"},
174+
{"{LIME}", "\x05"},
175+
{"{LIGHTGREEN}", "\x06"},
176+
{"{LIGHTRED}", "\x07"},
177+
{"{GRAY}", "\x08"},
178+
{"{LIGHTOLIVE}", "\x09"},
179+
{"{OLIVE}", "\x10"},
180+
{"{LIGHTBLUE}", "\x0B"},
181+
{"{BLUE}", "\x0C"},
182+
{"{PURPLE}", "\x0E"},
183+
{"{GRAYBLUE}", "\x0A"}
184+
};
185+
186+
foreach (var pair in replacements)
187+
input = input.Replace(pair.Key, pair.Value);
188+
189+
return input;
190+
}
170191

171-
[GameEventHandler(HookMode.Post)]
172-
public HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo _)
192+
private void InitializeLists()
193+
{
194+
Utilities.GetPlayers().ForEach(controller =>
173195
{
174-
if (!PlayerList.Contains(@event.Userid))
175-
PlayerList.Add(@event.Userid);
196+
PlayerList.Add(controller);
197+
});
198+
}
176199

177-
return HookResult.Continue;
178-
}
200+
[GameEventHandler(HookMode.Post)]
201+
public HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo _)
202+
{
203+
if (!PlayerList.Contains(@event.Userid))
204+
PlayerList.Add(@event.Userid);
205+
206+
return HookResult.Continue;
179207
}
180208
}

0 commit comments

Comments
 (0)