Skip to content

Commit 0a1e5c2

Browse files
committed
fixed CenterMessage Timer
1 parent d8cc8ff commit 0a1e5c2

File tree

4 files changed

+211
-135
lines changed

4 files changed

+211
-135
lines changed

CustomCommands/CustomCommands.cs

+6-135
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@
99
namespace CustomCommands;
1010

1111
[MinimumApiVersion(98)]
12-
public class CustomCommands : BasePlugin, IPluginConfig<CustomCommandsConfig>
12+
public partial class CustomCommands : BasePlugin, IPluginConfig<CustomCommandsConfig>
1313
{
1414
public override string ModuleName => "CustomCommands";
1515
public override string ModuleVersion => "1.0.3";
1616
public override string ModuleAuthor => "HerrMagic";
1717
public override string ModuleDescription => "Create your own commands per config";
1818

19+
private List<CenterClientElement> centerClientOn = new();
20+
private CenterServerElement centerServerOn = new();
21+
1922
private List<CCSPlayerController> PlayerList = new();
2023
public CustomCommandsConfig Config { get; set; } = new();
2124
private string PrefixCache = "";
@@ -41,13 +44,11 @@ public override void Load(bool hotReload)
4144

4245
var comms = LoadCommandsFromJson();
4346

47+
RegisterListeners();
48+
4449
if (comms != null)
45-
{
4650
foreach (var com in comms)
47-
{
4851
AddCommands(com);
49-
}
50-
}
5152

5253
if (hotReload)
5354
InitializeLists();
@@ -68,141 +69,11 @@ public override void Load(bool hotReload)
6869
}
6970
}
7071

71-
private void AddCommands(Commands com)
72-
{
73-
string[] aliases = com.Command.Split(',');
74-
75-
for (int i = 0; i < aliases.Length; i++)
76-
{
77-
AddCommand(aliases[i], com.Description, (player, info) =>
78-
{
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-
}
116-
117-
private void PrintToAllCenter(Commands cmd)
118-
{
119-
foreach (var controller in PlayerList)
120-
controller.PrintToCenterHtml(cmd.CenterMessage, cmd.CenterMessageTime);
121-
}
122-
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');
139-
140-
switch (printToChat)
141-
{
142-
case Receiver.Client:
143-
PrintToChatClient(player, msg);
144-
break;
145-
case Receiver.Server:
146-
PrintToChatServer(msg);
147-
break;
148-
default:
149-
break;
150-
}
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-
}
191-
19272
private void InitializeLists()
19373
{
19474
Utilities.GetPlayers().ForEach(controller =>
19575
{
19676
PlayerList.Add(controller);
19777
});
19878
}
199-
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;
207-
}
20879
}

CustomCommands/Events.cs

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Core.Attributes.Registration;
4+
5+
namespace CustomCommands;
6+
public partial class CustomCommands
7+
{
8+
[GameEventHandler(HookMode.Post)]
9+
public HookResult OnPlayerConnectFull(EventPlayerConnectFull @event, GameEventInfo _)
10+
{
11+
if (!PlayerList.Contains(@event.Userid))
12+
PlayerList.Add(@event.Userid);
13+
14+
return HookResult.Continue;
15+
}
16+
17+
[GameEventHandler]
18+
public HookResult OnPlayerDisconnect(EventPlayerDisconnect @event, GameEventInfo _)
19+
{
20+
centerClientOn.RemoveAll(p => p.ClientId == @event.Userid.UserId);
21+
22+
return HookResult.Continue;
23+
}
24+
}

CustomCommands/Functions.cs

+162
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
using CounterStrikeSharp.API;
2+
using CounterStrikeSharp.API.Core;
3+
using CustomCommands.Model;
4+
5+
namespace CustomCommands;
6+
public partial class CustomCommands
7+
{
8+
private void RegisterListeners()
9+
{
10+
RegisterListener<Listeners.OnTick>(() =>
11+
{
12+
// Client Print To Center
13+
foreach (var player in centerClientOn)
14+
{
15+
Utilities.GetPlayerFromUserid(player.ClientId).PrintToCenterHtml(player.Message, 1);
16+
}
17+
if (centerServerOn.IsRunning)
18+
{
19+
Utilities.GetPlayers().ForEach(controller =>
20+
{
21+
if (controller == null || !controller.IsValid) return;
22+
23+
controller.PrintToCenterHtml(centerServerOn.Message, 1);
24+
});
25+
}
26+
27+
});
28+
}
29+
private void AddCommands(Commands com)
30+
{
31+
string[] aliases = com.Command.Split(',');
32+
33+
for (int i = 0; i < aliases.Length; i++)
34+
{
35+
AddCommand(aliases[i], com.Description, (player, info) =>
36+
{
37+
if (player == null) return;
38+
TriggerMessage(player, com);
39+
});
40+
}
41+
}
42+
private void TriggerMessage(CCSPlayerController player, Commands cmd)
43+
{
44+
switch (cmd.PrintTo)
45+
{
46+
case Sender.ClientChat:
47+
PrintToChat(Receiver.Client, player, cmd.Message);
48+
break;
49+
case Sender.AllChat:
50+
PrintToChat(Receiver.Server, player, cmd.Message);
51+
break;
52+
case Sender.ClientCenter:
53+
PrintToCenterClient(player, cmd);
54+
break;
55+
case Sender.AllCenter:
56+
PrintToAllCenter(cmd);
57+
break;
58+
case Sender.ClientChatClientCenter:
59+
PrintToChatAndCenter(Receiver.Client, player, cmd);
60+
break;
61+
case Sender.ClientChatAllCenter:
62+
PrintToChatAndAllCenter(Receiver.Client, player, cmd);
63+
break;
64+
case Sender.AllChatClientCenter:
65+
PrintToChatAndCenter(Receiver.Server, player, cmd);
66+
break;
67+
case Sender.AllChatAllCenter:
68+
PrintToChatAndAllCenter(Receiver.Server, player, cmd);
69+
break;
70+
default:
71+
break;
72+
}
73+
}
74+
75+
private void PrintToCenterClient(CCSPlayerController player, Commands cmd)
76+
{
77+
var CenterClientElement = new CenterClientElement
78+
{
79+
ClientId = player.UserId!.Value,
80+
Message = cmd.CenterMessage
81+
};
82+
centerClientOn.Add(CenterClientElement);
83+
AddTimer(cmd.CenterMessageTime, () => centerClientOn.Remove(CenterClientElement));
84+
}
85+
private void PrintToAllCenter(Commands cmd)
86+
{
87+
centerServerOn.Message = cmd.CenterMessage;
88+
centerServerOn.IsRunning = true;
89+
AddTimer(cmd.CenterMessageTime, () =>
90+
{
91+
centerServerOn.IsRunning = false;
92+
});
93+
}
94+
95+
private void PrintToChatAndCenter(Receiver receiver, CCSPlayerController player, Commands cmd)
96+
{
97+
PrintToChat(receiver, player, cmd.Message);
98+
PrintToCenterClient(player, cmd);
99+
}
100+
101+
private void PrintToChatAndAllCenter(Receiver receiver, CCSPlayerController player, Commands cmd)
102+
{
103+
PrintToChat(receiver, player, cmd.Message);
104+
PrintToAllCenter(cmd);
105+
}
106+
107+
private void PrintToChat(Receiver printToChat, CCSPlayerController player, string message)
108+
{
109+
string[] msg = ReplaceTags(message).Split('\n');
110+
111+
switch (printToChat)
112+
{
113+
case Receiver.Client:
114+
PrintToChatClient(player, msg);
115+
break;
116+
case Receiver.Server:
117+
PrintToChatServer(msg);
118+
break;
119+
default:
120+
break;
121+
}
122+
}
123+
124+
private void PrintToChatClient(CCSPlayerController player, string[] msg)
125+
{
126+
foreach (var line in msg)
127+
player.PrintToChat(line);
128+
}
129+
130+
private void PrintToChatServer(string[] msg)
131+
{
132+
foreach (var line in msg)
133+
Server.PrintToChatAll(line);
134+
}
135+
136+
private string ReplaceTags(string input)
137+
{
138+
Dictionary<string, string> replacements = new()
139+
{
140+
{"{PREFIX}", PrefixCache},
141+
{"{DEFAULT}", "\x01"},
142+
{"{RED}", "\x02"},
143+
{"{LIGHTPURPLE}", "\x03"},
144+
{"{GREEN}", "\x04"},
145+
{"{LIME}", "\x05"},
146+
{"{LIGHTGREEN}", "\x06"},
147+
{"{LIGHTRED}", "\x07"},
148+
{"{GRAY}", "\x08"},
149+
{"{LIGHTOLIVE}", "\x09"},
150+
{"{OLIVE}", "\x10"},
151+
{"{LIGHTBLUE}", "\x0B"},
152+
{"{BLUE}", "\x0C"},
153+
{"{PURPLE}", "\x0E"},
154+
{"{GRAYBLUE}", "\x0A"}
155+
};
156+
157+
foreach (var pair in replacements)
158+
input = input.Replace(pair.Key, pair.Value);
159+
160+
return input;
161+
}
162+
}

CustomCommands/Model/CenterElement.cs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using CounterStrikeSharp.API;
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Core.Attributes;
4+
using CounterStrikeSharp.API.Core.Attributes.Registration;
5+
using CustomCommands.Model;
6+
using Microsoft.Extensions.Logging;
7+
using System.Text.Json;
8+
9+
namespace CustomCommands.Model;
10+
public class CenterClientElement
11+
{
12+
public int ClientId { get; set; } = -1;
13+
public string Message { get; set; } = "";
14+
}
15+
public class CenterServerElement
16+
{
17+
public string Message { get; set; } = "";
18+
public bool IsRunning { get; set; } = false;
19+
}

0 commit comments

Comments
 (0)