Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
BanCommands.c
Go to the documentation of this file.
1// Ban Subcommands Args
12
13// Ban Create Args
14enum SCR_EBanCreateArgs
15{
21 EBCA_END
22}
23
24// Ban Remove Args
25enum SCR_EBanRemoveArgs
26{
30 EBRA_END
31}
32
33// Ban List Args
34enum SCR_EBanListArgs
35{
39 EBLA_END
40}
41
42enum SCR_EPlayerIdType
43{
46 EPIT_USERNAME
47}
48
49enum EBackendCallbackState
50{
54 EBCS_TIMEOUT
55}
56
57class StateBackendCallback : BackendCallback
58{
59 EBackendCallbackState m_eState = EBackendCallbackState.EBCS_PENDING;
60 EApiCode m_eLastError = EApiCode.EACODE_ERROR_OK;
62
63 override void OnError( int code, int restCode, int apiCode )
64 {
65 super.OnError(code, restCode, apiCode);
66 m_eLastError = apiCode;
67 m_eState = EBackendCallbackState.EBCS_ERROR;
68 }
69
70 override void OnSuccess( int code )
71 {
72 super.OnSuccess(code);
73 m_eState = EBackendCallbackState.EBCS_SUCCESS;
74 }
75
76 override void OnTimeout()
77 {
78 super.OnTimeout();
79 m_eState = EBackendCallbackState.EBCS_TIMEOUT;
80 }
81}
82
83
84// Ban Server Command
86{
87 protected ref StateBackendCallback m_Callback;
91
92 const static int BAN_LIST_ITEMS_PER_PAGE_CHAT = 10;
93 const static int BAN_LIST_ITEMS_PER_PAGE_RCON = 25;
94
95 protected int m_iBanPlayerId;
96 protected int m_iDuration;
97 protected int m_iPage;
98 protected string m_sBanReason = "";
99 protected string m_sPlayerName = "";
100
101 // Handle Create Subcommand
102 //-----------------------------------------------------------------------------
103 protected ScrServerCmdResult CreateBan(array<string> argv, int playerId)
104 {
105 // All args except Reason are required
106 if (argv.Count() < SCR_EBanCreateArgs.EBCA_REASON)
107 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PARAMETERS);
108
109 argv = TryParsePlayerNameWithSpaces(argv, SCR_EBanCreateArgs.EBCA_ID);
110
111 // Get duration for ban in Int from String
112 m_iDuration = argv[SCR_EBanCreateArgs.EBCA_DURATION].ToInt(-1);
113 if (m_iDuration < 0)
114 return ScrServerCmdResult("Not Valid time value in seconds", EServerCmdResultType.ERR);
115
116 // If there are some additional args then combine them into reason string
117 m_sBanReason = "";
118 if (argv.Count() > SCR_EBanCreateArgs.EBCA_REASON)
119 {
120 for (int i = SCR_EBanCreateArgs.EBCA_REASON, count = argv.Count() - 1; i < count; i++)
121 {
122 m_sBanReason += argv[i] + " ";
123 }
124 m_sBanReason += argv[argv.Count() - 1];
125 }
126 else
127 {
128 m_sBanReason = "No reason provided"
129 }
130
131 // Create Ban for player based on the id type (identity, playerId or username)
132 m_iBanPlayerId = 0;
133 m_sPlayerName = "";
134
135 SCR_EPlayerIdType idType = GetPlayerIdType(argv[SCR_EBanCreateArgs.EBCA_ID]);
136 switch (idType)
137 {
138 case SCR_EPlayerIdType.EPIT_PLAYERID:
139 {
140 m_iBanPlayerId = argv[SCR_EBanCreateArgs.EBCA_ID].ToInt();
141 m_sPlayerName = GetGame().GetPlayerManager().GetPlayerName(m_iBanPlayerId);
142 if (m_sPlayerName == "")
143 return ScrServerCmdResult("Player not found", EServerCmdResultType.ERR);
144 PrintFormat("Request Ban %1[%2] for %3 seconds. Reason: '%4'", m_sPlayerName, m_iBanPlayerId, m_iDuration, m_sBanReason);
145 bool success = m_BanApi.CreateBanPlayerId(m_Callback, m_iBanPlayerId, m_sBanReason, m_iDuration);
146 if (!success)
147 return ScrServerCmdResult("Failed to create ban.", EServerCmdResultType.ERR);
148 } break;
149
150 case SCR_EPlayerIdType.EPIT_IDENTITY:
151 {
152 m_sPlayerName = argv[SCR_EBanCreateArgs.EBCA_ID];
153 PrintFormat("Request Ban %1 for %2 seconds. Reason: '%3'", m_sPlayerName, m_iDuration, m_sBanReason);
154 bool success = m_BanApi.CreateBanIdentityId(m_Callback, m_sPlayerName, m_sBanReason, m_iDuration);
155 if (!success)
156 return ScrServerCmdResult("Failed to create ban.", EServerCmdResultType.ERR);
157 } break;
158
159 case SCR_EPlayerIdType.EPIT_USERNAME:
160 {
161 m_sPlayerName = argv[SCR_EBanCreateArgs.EBCA_ID];
163 PrintFormat("Request Ban %1[%2] for %3 seconds. Reason: '%4'", m_sPlayerName, m_iBanPlayerId, m_iDuration, m_sBanReason);
164 bool success = m_BanApi.CreateBanPlayerId(m_Callback, m_iBanPlayerId, m_sBanReason, m_iDuration);
165 if (!success)
166 return ScrServerCmdResult("Failed to create ban.", EServerCmdResultType.ERR);
167 } break;
168 }
169
170 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PENDING);
171 }
172
173 // Handle Remove Subcommand
174 //-----------------------------------------------------------------------------
175 protected ScrServerCmdResult RemoveBan(array<string> argv, int playerId)
176 {
177 // All args are required
178 if (argv.Count() < SCR_EBanRemoveArgs.EBRA_END)
179 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PARAMETERS);
180
181 argv = TryParsePlayerNameWithSpaces(argv, SCR_EBanRemoveArgs.EBRA_ID);
182
183 bool success = false;
184 SCR_EPlayerIdType idType = GetPlayerIdType(argv[SCR_EBanRemoveArgs.EBRA_ID]);
185 if (idType == SCR_EPlayerIdType.EPIT_USERNAME)
186 {
187 m_Callback.m_eLastMatchType = EStringMatchType.ESMT_EQUALS;
188 m_sPlayerName = argv[SCR_EBanRemoveArgs.EBRA_ID];
189 success = m_BanApi.RemoveBanByName(m_Callback, m_sPlayerName, EStringMatchType.ESMT_EQUALS);
190 PrintFormat("Requested unban of user with user name: '%1'", argv[SCR_EBanRemoveArgs.EBRA_ID]);
191 }
192 else
193 {
194 success = m_BanApi.RemoveBans(m_Callback, {argv[SCR_EBanRemoveArgs.EBRA_ID]});
195 PrintFormat("Requested unban of user with identity: '%1'", argv[SCR_EBanRemoveArgs.EBRA_ID]);
196 }
197
198 if (!success)
199 return ScrServerCmdResult("Failed to remove ban.", EServerCmdResultType.ERR);
200 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PENDING);
201 }
202
203 // Handle List Subcommand
204 //-----------------------------------------------------------------------------
205 protected ScrServerCmdResult ListBans(array<string> argv, int playerId)
206 {
207 // Get which page was requested. Show first page if unspecified
208 if (argv.Count() < SCR_EBanListArgs.EBLA_END)
209 {
210 m_iPage = 1;
211 }
212 else
213 {
214 m_iPage = argv[SCR_EBanListArgs.EBLA_PAGE].ToInt();
215 if (m_iPage < 1)
216 return ScrServerCmdResult("Not Valid page number", EServerCmdResultType.ERR);
217 }
218
220
221 // Set different page limits for chat and RCON
222 if (playerId == 0)
224 else
226 m_Params.offset = m_Params.limit * (m_iPage - 1);
227 bool success = m_BanApi.RequestServerBanList(m_Callback, m_Params);
228 if (!success)
229 return ScrServerCmdResult("Failed to list bans.", EServerCmdResultType.ERR);
230 return ScrServerCmdResult("Processing ban list", EServerCmdResultType.PENDING);
231 }
232
233 // Handle result for List Subcommand
234 //-----------------------------------------------------------------------------
236 {
237 // Check if there are any bans
238 if (m_BanApi.GetPageCount() == 0)
239 return ScrServerCmdResult("Server has no bans to list.", EServerCmdResultType.OK);
240
241 // Error if requested page exceeded page count
242 if ((m_BanApi.GetPage() + 1) > m_BanApi.GetPageCount())
243 return ScrServerCmdResult("Page not found!", EServerCmdResultType.ERR);
244
245 // Generate string resposne for list
246 ref array<OnlineBanListData> banList = new array<OnlineBanListData>;
247 m_BanApi.GetPageItems(banList);
248 string banListStr = "Total bans: " + m_BanApi.GetTotalItemCount() + " | Page: " + (m_BanApi.GetPage() + 1) +"/" + m_BanApi.GetPageCount() + "\n";
249 banListStr += "- Identity Id | Banned name\n";
250 foreach (OnlineBanListData ban : banList)
251 {
252 banListStr += string.Format("- %1 | %2\n", ban.identityId, ban.bannedName);
253 }
254
255 return ScrServerCmdResult(banListStr, EServerCmdResultType.OK);
256 }
257
258 // Handle result for multiple target match
259 //-----------------------------------------------------------------------------
261 {
262 // Check if there are any bans
263 if (m_BanApi.GetPageCount() == 0)
264 return ScrServerCmdResult("Server has no bans to list.", EServerCmdResultType.OK);
265
266 // Error if requested page exceeded page count
267 if ((m_BanApi.GetPage() + 1) > m_BanApi.GetPageCount())
268 return ScrServerCmdResult("Page not found!", EServerCmdResultType.ERR);
269
270 // Generate string resposne for list
271 ref array<OnlineBanListData> banList = new array<OnlineBanListData>;
272 m_BanApi.GetPageItems(banList);
273 string banListStr = "Multiple users found! Please use a unique identifier.\n";
274 banListStr += "Total bans: " + m_BanApi.GetTotalItemCount() + " | Page: " + (m_BanApi.GetPage() + 1) +"/" + m_BanApi.GetPageCount() + "\n";
275 banListStr += "- Identity Id | Banned name\n";
276 foreach (OnlineBanListData ban : banList)
277 {
278 banListStr += string.Format("- %1 | %2\n", ban.identityId, ban.bannedName);
279 }
280
281 return ScrServerCmdResult(banListStr, EServerCmdResultType.OK);
282 }
283
284 // Command handler for RCON and Chat
285 //-----------------------------------------------------------------------------
286 protected ScrServerCmdResult HandleCommand(array<string> argv, int playerId = 0)
287 {
288 if (RplSession.Mode() != RplMode.Dedicated)
289 return ScrServerCmdResult("Command is supported only on Dedicated Servers", EServerCmdResultType.ERR);
290
291 BackendApi bApi = GetGame().GetBackendApi();
292 if (!bApi)
293 return ScrServerCmdResult(string.Empty, EServerCmdResultType.ERR);
294 m_BanApi = bApi.GetBanServiceApi();
295 if (!m_BanApi)
296 return ScrServerCmdResult(string.Empty, EServerCmdResultType.ERR);
297
299 if (argv.Count() > 1)
300 {
301 if (argv[1] == "create")
303 else if (argv[1] == "remove")
305 else if (argv[1] == "list")
307 }
308
309
310 if (m_eSubcommandArg == SCR_EBanSubcommandArg.EBSA_MISSING)
312
313 m_Callback = new StateBackendCallback;
314
315 switch(m_eSubcommandArg)
316 {
317 // Handle Help
318 case SCR_EBanSubcommandArg.EBSA_HELP:
319 return ScrServerCmdResult("Help for ban command. \n#ban create <playerId/playerName> <duration> <reason> \n#ban create <identityId/playerName> <duration> <reason> \n#ban remove <identityId/playerName>\n#ban list <page>\n\n- <duration> is in seconds and can be set to 0 for permanent.\n- <reason> is optional.", EServerCmdResultType.OK);
320
321 // Handle Create
322 case SCR_EBanSubcommandArg.EBSA_CREATE:
323 return CreateBan(argv, playerId);
324
325 // Handle Remove
326 case SCR_EBanSubcommandArg.EBSA_REMOVE:
327 return RemoveBan(argv, playerId);
328
329 // Handle List
330 case SCR_EBanSubcommandArg.EBSA_LIST:
331 return ListBans(argv, playerId);
332 }
333 return ScrServerCmdResult(string.Empty, EServerCmdResultType.ERR);
334 }
335
336 // Specify what kind of player identifier is used
337 //-----------------------------------------------------------------------------
338 protected SCR_EPlayerIdType GetPlayerIdType(string id)
339 {
340 if (id.Length() == 36)
341 {
342 if (id.ContainsAt("-", 8) && id.ContainsAt("-", 13) && id.ContainsAt("-", 18) && id.ContainsAt("-", 23))
343 return SCR_EPlayerIdType.EPIT_IDENTITY;
344 else
345 return SCR_EPlayerIdType.EPIT_USERNAME;
346 }
347 else if (SCR_StringHelper.IsFormat(SCR_EStringFormat.DIGITS_ONLY, id))
348 {
349 return SCR_EPlayerIdType.EPIT_PLAYERID;
350 }
351 else
352 {
353 return SCR_EPlayerIdType.EPIT_USERNAME;
354 }
355 }
356
357 // Find playerId from given player name
358 //-----------------------------------------------------------------------------
359 protected int GetPlayerIdFromName(string name)
360 {
361 array<int> playerIds = {};
362 GetGame().GetPlayerManager().GetPlayers(playerIds);
363 foreach (int pid : playerIds)
364 {
365 if (GetGame().GetPlayerManager().GetPlayerName(pid) == name)
366 return pid;
367 }
368
369 return 0;
370 }
371
372 /*
373 If player name contains spaces, assign the whole string to ID position in argv array
374 Player name containing spaces has to be wrapped in quotes (eg. #ban create "Name with spaces" 100)
375 */
376 //-----------------------------------------------------------------------------
377 protected array<string> TryParsePlayerNameWithSpaces(array<string> argv, int playerNameStartId)
378 {
379 array<string> result = argv;
380 if (!argv[playerNameStartId].ContainsAt("\"", 0))
381 return result;
382
383 int lastQuotesIndex = -1;
384 for (int i = argv.Count()-1; i > playerNameStartId; --i)
385 {
386 if (argv[i].IsEmpty())
387 continue;
388
389 if (argv[i].ContainsAt("\"", argv[i].Length()-1))
390 {
391 lastQuotesIndex = i;
392 break;
393 }
394 }
395
396 if (lastQuotesIndex > -1)
397 {
398 string playerName = argv[playerNameStartId];
399 int i;
400 for (i = playerNameStartId + 1; i <= lastQuotesIndex; ++i)
401 {
402 playerName += (" " + argv[i]);
403 }
404
405 result[playerNameStartId] = playerName.Substring(1, playerName.Length()-2);
406 for (i = lastQuotesIndex; i > playerNameStartId; --i)
407 {
408 result.Remove(i);
409 }
410 }
411
412 return result;
413 }
414
415 // Specify keyword of command
416 //-----------------------------------------------------------------------------
417 override string GetKeyword()
418 {
419 return "ban";
420 }
421
422 // Run command server-side
423 //-----------------------------------------------------------------------------
424 override bool IsServerSide()
425 {
426 return true;
427 }
428
429 // Set requirement to admin permission via RCON
430 //-----------------------------------------------------------------------------
432 {
433 return ERCONPermissions.PERMISSIONS_ADMIN;
434 }
435
436 // Set requirement to be logged in administrator for chat command
437 //-----------------------------------------------------------------------------
439 {
440 return EPlayerRole.ADMINISTRATOR;
441 }
442
443 // Handle Chat command on server
444 //-----------------------------------------------------------------------------
445 override ref ScrServerCmdResult OnChatServerExecution(array<string> argv, int playerId)
446 {
447 return HandleCommand(argv, playerId);
448 }
449
450 // Handle Chat command on client
451 //-----------------------------------------------------------------------------
452 override ref ScrServerCmdResult OnChatClientExecution(array<string> argv, int playerId)
453 {
454 return ScrServerCmdResult(string.Empty, EServerCmdResultType.OK);
455 }
456
457 // Handle RCON command on server
458 //-----------------------------------------------------------------------------
459 override ref ScrServerCmdResult OnRCONExecution(array<string> argv)
460 {
461 return HandleCommand(argv);
462 }
463
464 // Handle successful result in OnUpdate()
465 //-----------------------------------------------------------------------------
467 {
468 switch(m_eSubcommandArg)
469 {
470 // Handle Create Result
471 case SCR_EBanSubcommandArg.EBSA_CREATE:
472 if (m_iBanPlayerId > 0)
473 GetGame().GetPlayerManager().KickPlayer(m_iBanPlayerId, PlayerManagerKickReason.BAN);
474 return ScrServerCmdResult(string.Format("Player '%1' banned!", m_sPlayerName), EServerCmdResultType.OK);
475
476 // Handle Remove Result
477 case SCR_EBanSubcommandArg.EBSA_REMOVE:
478 return ScrServerCmdResult("Ban removed!", EServerCmdResultType.OK);
479
480 // Handle List Result
481 case SCR_EBanSubcommandArg.EBSA_LIST:
482 return ListBansResult();
483
484 case SCR_EBanSubcommandArg.EBSA_LIST_FILTERED:
485 return ListBansResultFiltered();
486 }
487 return ScrServerCmdResult(string.Empty, EServerCmdResultType.OK);
488 }
489
490 // Handle failure in OnUpdate()
491 //-----------------------------------------------------------------------------
493 {
494 switch (m_Callback.m_eLastError)
495 {
496 case EApiCode.EACODE_ERROR_MULTIPLE_TARGET_MATCH:
497 {
498 m_eSubcommandArg = SCR_EBanSubcommandArg.EBSA_LIST_FILTERED;
499 m_Callback = new StateBackendCallback;
500
502 m_Params.playerName = m_sPlayerName;
503 m_Params.playerNameMatchType = EStringMatchType.ESMT_STARTS_WITH;
504 m_Params.offset = m_Params.limit * (m_iPage - 1);
505
508 else
510
511 bool success = m_BanApi.RequestServerBanList(m_Callback, m_Params);
512 if (!success)
513 return ScrServerCmdResult("Failed to list bans.", EServerCmdResultType.ERR);
514
515 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PENDING);
516 } break;
517
518 case EApiCode.EACODE_ERROR_NOT_FOUND:
519 {
520 if (m_Callback.m_eLastMatchType == EStringMatchType.ESMT_EQUALS)
521 {
522 m_Callback = new StateBackendCallback;
523 m_Callback.m_eLastMatchType = EStringMatchType.ESMT_STARTS_WITH;
524
525 bool success = m_BanApi.RemoveBanByName(m_Callback, m_sPlayerName, EStringMatchType.ESMT_STARTS_WITH);
526 PrintFormat("Retrying unban of user with user name: '%1'", m_sPlayerName);
527 if (!success)
528 return ScrServerCmdResult("Failed to remove the ban.", EServerCmdResultType.ERR);
529
530 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PENDING);
531 }
532
533 return ScrServerCmdResult("User not found!", EServerCmdResultType.ERR);
534 } break;
535
536 case EApiCode.EACODE_ERROR_USER_NOT_FOUND:
537 {
538 return ScrServerCmdResult("User not found!", EServerCmdResultType.ERR);
539 } break;
540
541 case EApiCode.EACODE_ERROR_UNKNOWN:
542 {
543 return ScrServerCmdResult("Unknown error.", EServerCmdResultType.ERR);
544 } break;
545 }
546
547 return ScrServerCmdResult(string.Empty, EServerCmdResultType.ERR);
548 }
549
550 // Handle Pending command
551 //-----------------------------------------------------------------------------
553 {
554 switch(m_Callback.m_eState)
555 {
556 case EBackendCallbackState.EBCS_SUCCESS: return HandleSuccessfulResult();
557 case EBackendCallbackState.EBCS_PENDING: return ScrServerCmdResult(string.Empty, EServerCmdResultType.PENDING);
558 case EBackendCallbackState.EBCS_TIMEOUT: return ScrServerCmdResult("Timeout", EServerCmdResultType.ERR);
559 case EBackendCallbackState.EBCS_ERROR: return HandleFailure();
560 }
561 return ScrServerCmdResult(string.Empty, EServerCmdResultType.ERR);
562 }
563}
564
565
566// Kick Server Command
567class KickCommand: ScrServerCommand
568{
569 // Specify keyword of command
570 //-----------------------------------------------------------------------------
571 override string GetKeyword()
573 return "kick";
576 // Run command server-side
577 //-----------------------------------------------------------------------------
578 override bool IsServerSide()
579 {
580 return true;
583 // Set requirement to admin permission via RCON
584 //-----------------------------------------------------------------------------
585 override int RequiredRCONPermission()
586 {
587 return ERCONPermissions.PERMISSIONS_ADMIN;
589
590 // Set requirement to be logged in administrator for chat command
591 //-----------------------------------------------------------------------------
592 override int RequiredChatPermission()
593 {
594 return EPlayerRole.ADMINISTRATOR;
595 }
596
597 // Shared handle for kicking player for RCON and Chat command
598 //-----------------------------------------------------------------------------
599 protected ScrServerCmdResult KickPlayer(array<string> argv, int playerId = 0)
600 {
601 if (argv.Count() < 2)
602 return ScrServerCmdResult(string.Empty, EServerCmdResultType.PARAMETERS);
603
604 int kickPlayerId = argv[1].ToInt();
605 if (kickPlayerId < 1)
606 return ScrServerCmdResult("Not Valid Player ID", EServerCmdResultType.ERR);
607
608 string kickPlayerName = GetGame().GetPlayerManager().GetPlayerName(kickPlayerId);
609 if (kickPlayerName == "")
610 return ScrServerCmdResult("Player not found", EServerCmdResultType.ERR);
611
612 PrintFormat("Kick %1[%2]", kickPlayerName, kickPlayerId);
613 GetGame().GetPlayerManager().KickPlayer(kickPlayerId, PlayerManagerKickReason.KICK);
614
615 return ScrServerCmdResult(string.Format("Player '%1' kicked!", kickPlayerName), EServerCmdResultType.OK);
616 }
617
618 // Handle Chat command on server
619 //-----------------------------------------------------------------------------
620 override ref ScrServerCmdResult OnChatServerExecution(array<string> argv, int playerId)
621 {
622 return KickPlayer(argv, playerId);
623 }
624
625 // Handle Chat command on client
626 //-----------------------------------------------------------------------------
627 override ref ScrServerCmdResult OnChatClientExecution(array<string> argv, int playerId)
628 {
629 return ScrServerCmdResult(string.Empty, EServerCmdResultType.OK);
630 }
631
632 // Handle RCON command on server
633 //-----------------------------------------------------------------------------
634 override ref ScrServerCmdResult OnRCONExecution(array<string> argv)
635 {
636 return KickPlayer(argv);
637 }
638
639 // Handle Pending command
640 //-----------------------------------------------------------------------------
641 override ref ScrServerCmdResult OnUpdate()
642 {
643 return ScrServerCmdResult(string.Empty, EServerCmdResultType.OK);
644 }
645
646}
enum SCR_EBanSubcommandArg EBCA_REASON
override void OnSuccess(int code)
Definition BanCommands.c:70
SCR_EBanSubcommandArg
Definition BanCommands.c:3
@ EBSA_CREATE
Definition BanCommands.c:6
@ EBSA_END
Definition BanCommands.c:10
@ EBSA_HELP
Definition BanCommands.c:5
@ EBSA_LIST_FILTERED
Definition BanCommands.c:9
@ EBSA_MISSING
Definition BanCommands.c:4
@ EBSA_REMOVE
Definition BanCommands.c:7
@ EBSA_LIST
Definition BanCommands.c:8
enum SCR_EBanSubcommandArg EBLA_SUBCOMMAND
enum SCR_EBanSubcommandArg EBCA_SUBCOMMAND
EStringMatchType m_eLastMatchType
Definition BanCommands.c:61
EApiCode m_eLastError
Definition BanCommands.c:60
enum SCR_EBanSubcommandArg EBCA_DURATION
enum SCR_EBanSubcommandArg EBRA_ID
enum SCR_EBanSubcommandArg EBLA_PAGE
enum SCR_EBanSubcommandArg EBLA_COMMAND
enum SCR_EBanSubcommandArg EPIT_IDENTITY
override void OnTimeout()
Definition BanCommands.c:76
enum SCR_EBanSubcommandArg EBCS_ERROR
enum SCR_EBanSubcommandArg EPIT_PLAYERID
enum SCR_EBanSubcommandArg EBCS_SUCCESS
override void OnError(int code, int restCode, int apiCode)
Definition BanCommands.c:63
enum SCR_EBanSubcommandArg EBCS_PENDING
enum SCR_EBanSubcommandArg EBCA_ID
enum SCR_EBanSubcommandArg EBRA_SUBCOMMAND
enum SCR_EBanSubcommandArg EBCA_COMMAND
enum SCR_EBanSubcommandArg EBRA_COMMAND
BanCommand ScrServerCommand GetKeyword()
EPlayerRole
Definition EPlayerRole.c:8
ERCONPermissions
EServerCmdResultType
ArmaReforgerScripted GetGame()
Definition game.c:1398
RplMode
Mode of replication.
Definition RplMode.c:9
EAITargetClusterState m_eState
void KickPlayer(int playerId, int duration, SCR_PlayerManagerKickReason reason)
Backend Api instance.
Definition BackendApi.c:14
SCR_EBanSubcommandArg m_eSubcommandArg
Definition BanCommands.c:90
string m_sBanReason
Definition BanCommands.c:98
ScrServerCmdResult ListBansResult()
ScrServerCmdResult ListBans(array< string > argv, int playerId)
override ref ScrServerCmdResult OnChatClientExecution(array< string > argv, int playerId)
ScrServerCmdResult HandleSuccessfulResult()
int GetPlayerIdFromName(string name)
ref StateBackendCallback m_Callback
Definition BanCommands.c:87
array< string > TryParsePlayerNameWithSpaces(array< string > argv, int playerNameStartId)
override ref ScrServerCmdResult OnChatServerExecution(array< string > argv, int playerId)
override string GetKeyword()
override ref ScrServerCmdResult OnRCONExecution(array< string > argv)
int m_iBanPlayerId
Definition BanCommands.c:95
ref BanListPageParams m_Params
Definition BanCommands.c:88
string m_sPlayerName
Definition BanCommands.c:99
override ref ScrServerCmdResult OnUpdate()
ScrServerCmdResult RemoveBan(array< string > argv, int playerId)
static const int BAN_LIST_ITEMS_PER_PAGE_CHAT
Definition BanCommands.c:92
static const int BAN_LIST_ITEMS_PER_PAGE_RCON
Definition BanCommands.c:93
override bool IsServerSide()
int m_iDuration
Definition BanCommands.c:96
ScrServerCmdResult ListBansResultFiltered()
BanServiceApi m_BanApi
Definition BanCommands.c:89
ScrServerCmdResult CreateBan(array< string > argv, int playerId)
override int RequiredChatPermission()
ScrServerCmdResult HandleFailure()
SCR_EPlayerIdType GetPlayerIdType(string id)
ScrServerCmdResult HandleCommand(array< string > argv, int playerId=0)
override int RequiredRCONPermission()
JsonApiStruct passed to BanList backend requests.
Ban Service API.
Structure for ban data response of BanList requests.
static bool IsFormat(SCR_EStringFormat format, string input)
ref ScrServerCmdResult OnRCONExecution(array< string > argv)
Server-side rcon command execution.
ref ScrServerCmdResult OnChatClientExecution(array< string > argv, int playerId)
The first chat execution stage (always on the client side).
ref ScrServerCmdResult OnUpdate()
Update PENDING request.
event bool IsServerSide()
True if the command should be passed to the server. False for only client-side execution.
int RequiredChatPermission()
Required permission (EPlayerRole) to run chat execution.
int RequiredRCONPermission()
Required permission (ERCONPermissions) to run RCON execution.
ref ScrServerCmdResult OnChatServerExecution(array< string > argv, int playerId)
The main chat execution that is executed on the server (if IsServerSide is true).
proto void PrintFormat(string fmt, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL, LogLevel level=LogLevel.NORMAL)
PlayerManagerKickReason
proto native bool IsEmpty()
EStringMatchType
Enum used to specify how string is matched when searching in backend database.
EApiCode
Definition EApiCode.c:13