1+ using System . Text . Json ;
2+ using CounterStrikeSharp . API ;
3+ using CounterStrikeSharp . API . Core ;
4+ using CounterStrikeSharp . API . Modules . Admin ;
5+ using CustomCommands . Model ;
6+ using Microsoft . Extensions . Logging ;
7+
8+ namespace CustomCommands ;
9+ public partial class CustomCommands
10+ {
11+ private void RegisterListeners ( )
12+ {
13+ RegisterListener < Listeners . OnTick > ( ( ) =>
14+ {
15+ // Client Print To Center
16+ foreach ( var player in centerClientOn )
17+ Utilities . GetPlayerFromUserid ( player . ClientId ) . PrintToCenterHtml ( player . Message , 1 ) ;
18+
19+ // Server Print To Center
20+ if ( centerServerOn . IsRunning )
21+ {
22+ Utilities . GetPlayers ( ) . ForEach ( controller =>
23+ {
24+ if ( controller == null || ! controller . IsValid ) return ;
25+
26+ string message = ReplaceMessageTags ( centerServerOn . Message , controller ) ;
27+ controller . PrintToCenterHtml ( message , 1 ) ;
28+ } ) ;
29+ }
30+ } ) ;
31+ }
32+
33+ private List < Commands > CheckForDuplicateCommands ( List < Commands > comms )
34+ {
35+ List < Commands > duplicateCommands = new ( ) ;
36+ List < Commands > commands = new ( ) ;
37+ List < string > commandNames = new ( ) ;
38+
39+ foreach ( var com in comms )
40+ {
41+ string [ ] aliases = com . Command . Split ( ',' ) ;
42+
43+ foreach ( var alias in aliases )
44+ {
45+ if ( commandNames . Contains ( alias ) )
46+ {
47+ duplicateCommands . Add ( com ) ;
48+ continue ;
49+ }
50+ commandNames . Add ( alias ) ;
51+ }
52+ }
53+
54+ if ( duplicateCommands . Count == 0 )
55+ return comms ;
56+
57+ Logger . LogError ( $ "------------------------------------------------------------------------") ;
58+ Logger . LogError ( $ "{ Config . LogPrefix } Duplicate commands found, removing them from the list. Please check your config file for duplicate commands and remove them.") ;
59+ for ( int i = 0 ; i < comms . Count ; i ++ )
60+ {
61+ if ( duplicateCommands . Contains ( comms [ i ] ) )
62+ {
63+ Logger . LogError ( $ "{ Config . LogPrefix } Duplicate command found index { i + 1 } : ") ;
64+ Logger . LogError ( $ "{ Config . LogPrefix } - { comms [ i ] . Title } ") ;
65+ Logger . LogError ( $ "{ Config . LogPrefix } - { comms [ i ] . Description } ") ;
66+ Logger . LogError ( $ "{ Config . LogPrefix } - { comms [ i ] . Command } ") ;
67+ continue ;
68+ }
69+
70+ commands . Add ( comms [ i ] ) ;
71+ }
72+ Logger . LogError ( $ "------------------------------------------------------------------------") ;
73+
74+ return commands ;
75+ }
76+ private void AddCommands ( Commands com )
77+ {
78+ string [ ] aliases = com . Command . Split ( ',' ) ;
79+
80+ for ( int i = 0 ; i < aliases . Length ; i ++ )
81+ {
82+ AddCommand ( aliases [ i ] , com . Description , ( player , info ) =>
83+ {
84+ if ( player == null ) return ;
85+
86+ if ( com . Permission . PermissionList . Count > 0 && com . Permission != null )
87+ if ( ! RequiresPermissions ( player , com . Permission ) )
88+ return ;
89+
90+ SendMessage ( player , com ) ;
91+
92+ ExecuteServerCommands ( com ) ;
93+ } ) ;
94+ }
95+ }
96+
97+ private bool RequiresPermissions ( CCSPlayerController player , Permission permissions )
98+ {
99+ if ( ! permissions . ReguiresAllPermissions )
100+ {
101+ foreach ( var permission in permissions . PermissionList )
102+ {
103+ if ( AdminManager . PlayerHasPermissions ( player , new string [ ] { permission } ) )
104+ return true ;
105+ }
106+ player . PrintToChat ( $ "{ Config . Prefix } You don't have the required permissions to execute this command") ;
107+ return false ;
108+ }
109+ else
110+ {
111+ if ( ! AdminManager . PlayerHasPermissions ( player , permissions . PermissionList . ToArray ( ) ) )
112+ {
113+ player . PrintToChat ( $ "{ Config . Prefix } You don't have the required permissions to execute this command") ;
114+ return false ;
115+ }
116+ return true ;
117+ }
118+ }
119+
120+ private void ExecuteServerCommands ( Commands cmd )
121+ {
122+ if ( cmd . ServerCommands . Count == 0 ) return ;
123+
124+ foreach ( var serverCommand in cmd . ServerCommands )
125+ {
126+ Server . ExecuteCommand ( serverCommand ) ;
127+ }
128+ }
129+
130+ private void SendMessage ( CCSPlayerController player , Commands cmd )
131+ {
132+ switch ( cmd . PrintTo )
133+ {
134+ case Sender . ClientChat :
135+ PrintToChat ( Receiver . Client , player , cmd . Message ) ;
136+ break ;
137+ case Sender . AllChat :
138+ PrintToChat ( Receiver . Server , player , cmd . Message ) ;
139+ break ;
140+ case Sender . ClientCenter :
141+ PrintToCenterClient ( player , cmd ) ;
142+ break ;
143+ case Sender . AllCenter :
144+ PrintToAllCenter ( cmd ) ;
145+ break ;
146+ case Sender . ClientChatClientCenter :
147+ PrintToChatAndCenter ( Receiver . Client , player , cmd ) ;
148+ break ;
149+ case Sender . ClientChatAllCenter :
150+ PrintToChatAndAllCenter ( Receiver . Client , player , cmd ) ;
151+ break ;
152+ case Sender . AllChatClientCenter :
153+ PrintToChatAndCenter ( Receiver . Server , player , cmd ) ;
154+ break ;
155+ case Sender . AllChatAllCenter :
156+ PrintToChatAndAllCenter ( Receiver . Server , player , cmd ) ;
157+ break ;
158+ default :
159+ break ;
160+ }
161+ }
162+
163+ private string [ ] WrappedLine ( dynamic input )
164+ {
165+ List < string > output = new List < string > ( ) ;
166+
167+ if ( input is JsonElement jsonElement )
168+ {
169+ switch ( jsonElement . ValueKind )
170+ {
171+ case JsonValueKind . String :
172+ string result = jsonElement . GetString ( ) ! ;
173+ return result ? . Split ( new [ ] { "\r \n " , "\r " , "\n " } , StringSplitOptions . None ) ?? Array . Empty < string > ( ) ;
174+
175+ case JsonValueKind . Array :
176+ foreach ( var arrayElement in jsonElement . EnumerateArray ( ) )
177+ {
178+ string [ ] lines = arrayElement . GetString ( ) ? . Split ( new [ ] { "\r \n " , "\r " , "\n " } , StringSplitOptions . None ) ?? Array . Empty < string > ( ) ;
179+ output . AddRange ( lines ) ;
180+ }
181+ break ;
182+
183+ default :
184+ Logger . LogError ( $ "{ Config . LogPrefix } Message is not a string or array") ;
185+ return Array . Empty < string > ( ) ;
186+ }
187+ }
188+ else
189+ {
190+ Logger . LogError ( $ "{ Config . LogPrefix } Invalid input type") ;
191+ return Array . Empty < string > ( ) ;
192+ }
193+
194+ return output . ToArray ( ) ;
195+ }
196+ }
0 commit comments