33using CounterStrikeSharp . API . Core . Attributes ;
44using CounterStrikeSharp . API . Core . Attributes . Registration ;
55using CustomCommands . Model ;
6+ using Microsoft . Extensions . Logging ;
67using 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