3
3
using CounterStrikeSharp . API . Core . Attributes ;
4
4
using CounterStrikeSharp . API . Core . Attributes . Registration ;
5
5
using CustomCommands . Model ;
6
+ using Microsoft . Extensions . Logging ;
6
7
using System . Text . Json ;
7
8
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 ;
20
10
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" ;
22
18
23
- public CustomCommandsConfig Config { get ; set ; } = new ( ) ;
19
+ private List < CCSPlayerController > PlayerList = new ( ) ;
20
+ public CustomCommandsConfig Config { get ; set ; } = new ( ) ;
21
+ private string PrefixCache = "" ;
24
22
25
- private string PrefixCache = "" ;
23
+ public void OnConfigParsed ( CustomCommandsConfig config )
24
+ {
25
+ Config = config ;
26
+ }
26
27
27
- public void OnConfigParsed ( CustomCommandsConfig config )
28
+ public override void Load ( bool hotReload )
29
+ {
30
+ if ( ! Config . IsPluginEnabled )
28
31
{
29
- Config = config ;
32
+ Console . WriteLine ( $ "{ Config . LogPrefix } { ModuleName } is disabled") ;
33
+ return ;
30
34
}
31
35
32
-
36
+ Console . WriteLine (
37
+ $ "CustomCommands has been loaded, and the hot reload flag was { hotReload } , path is { ModulePath } ") ;
33
38
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 ) ;
44
41
45
- if ( Config . Prefix != PrefixCache )
46
- PrefixCache = ReplaceTags ( Config . Prefix ) ;
42
+ var comms = LoadCommandsFromJson ( ) ;
47
43
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 )
52
47
{
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 ) ;
68
49
}
69
- else
70
- Console . WriteLine ( "No Config file found. Please create one" ) ;
71
-
72
- if ( hotReload )
73
- InitializeLists ( ) ;
74
50
}
75
51
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 ) )
77
60
{
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 ) ;
122
63
}
123
-
124
-
125
- private void PrintToChat ( Receiver printToChat , CCSPlayerController player , string message )
64
+ else
126
65
{
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 ;
142
68
}
69
+ }
70
+
71
+ private void AddCommands ( Commands com )
72
+ {
73
+ string [ ] aliases = com . Command . Split ( ',' ) ;
143
74
144
- private string ReplaceTags ( string input )
75
+ for ( int i = 0 ; i < aliases . Length ; i ++ )
145
76
{
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 ) =>
152
78
{
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
+ }
156
116
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
+ }
159
122
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" ) ;
162
139
163
- private void InitializeLists ( )
140
+ switch ( printToChat )
164
141
{
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 ;
169
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
+ }
170
191
171
- [ GameEventHandler ( HookMode . Post ) ]
172
- public HookResult OnPlayerConnectFull ( EventPlayerConnectFull @event , GameEventInfo _ )
192
+ private void InitializeLists ( )
193
+ {
194
+ Utilities . GetPlayers ( ) . ForEach ( controller =>
173
195
{
174
- if ( ! PlayerList . Contains ( @event . Userid ) )
175
- PlayerList . Add ( @event . Userid ) ;
196
+ PlayerList . Add ( controller ) ;
197
+ } ) ;
198
+ }
176
199
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 ;
179
207
}
180
208
}
0 commit comments