14enum SCR_EBanCreateArgs
25enum SCR_EBanRemoveArgs
49enum EBackendCallbackState
59 EBackendCallbackState
m_eState = EBackendCallbackState.EBCS_PENDING;
63 override void OnError(
int code,
int restCode,
int apiCode )
65 super.OnError(code, restCode, apiCode);
67 m_eState = EBackendCallbackState.EBCS_ERROR;
72 super.OnSuccess(code);
73 m_eState = EBackendCallbackState.EBCS_SUCCESS;
79 m_eState = EBackendCallbackState.EBCS_TIMEOUT;
106 if (argv.Count() < SCR_EBanCreateArgs.EBCA_REASON)
112 m_iDuration = argv[SCR_EBanCreateArgs.EBCA_DURATION].ToInt(-1);
118 if (argv.Count() > SCR_EBanCreateArgs.EBCA_REASON)
120 for (
int i = SCR_EBanCreateArgs.EBCA_REASON, count = argv.Count() - 1; i < count; i++)
135 SCR_EPlayerIdType idType =
GetPlayerIdType(argv[SCR_EBanCreateArgs.EBCA_ID]);
138 case SCR_EPlayerIdType.EPIT_PLAYERID:
150 case SCR_EPlayerIdType.EPIT_IDENTITY:
159 case SCR_EPlayerIdType.EPIT_USERNAME:
178 if (argv.Count() < SCR_EBanRemoveArgs.EBRA_END)
183 bool success =
false;
184 SCR_EPlayerIdType idType =
GetPlayerIdType(argv[SCR_EBanRemoveArgs.EBRA_ID]);
185 if (idType == SCR_EPlayerIdType.EPIT_USERNAME)
190 PrintFormat(
"Requested unban of user with user name: '%1'", argv[SCR_EBanRemoveArgs.EBRA_ID]);
195 PrintFormat(
"Requested unban of user with identity: '%1'", argv[SCR_EBanRemoveArgs.EBRA_ID]);
208 if (argv.Count() < SCR_EBanListArgs.EBLA_END)
214 m_iPage = argv[SCR_EBanListArgs.EBLA_PAGE].ToInt();
246 ref array<OnlineBanListData> banList =
new array<OnlineBanListData>;
248 string banListStr =
"Total bans: " +
m_BanApi.GetTotalItemCount() +
" | Page: " + (
m_BanApi.GetPage() + 1) +
"/" +
m_BanApi.GetPageCount() +
"\n";
249 banListStr +=
"- Identity Id | Banned name\n";
252 banListStr +=
string.Format(
"- %1 | %2\n", ban.identityId, ban.bannedName);
271 ref array<OnlineBanListData> banList =
new array<OnlineBanListData>;
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";
278 banListStr +=
string.Format(
"- %1 | %2\n", ban.identityId, ban.bannedName);
299 if (argv.Count() > 1)
301 if (argv[1] ==
"create")
303 else if (argv[1] ==
"remove")
305 else if (argv[1] ==
"list")
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);
340 if (
id.Length() == 36)
342 if (
id.ContainsAt(
"-", 8) &&
id.ContainsAt(
"-", 13) &&
id.ContainsAt(
"-", 18) &&
id.ContainsAt(
"-", 23))
343 return SCR_EPlayerIdType.EPIT_IDENTITY;
345 return SCR_EPlayerIdType.EPIT_USERNAME;
349 return SCR_EPlayerIdType.EPIT_PLAYERID;
353 return SCR_EPlayerIdType.EPIT_USERNAME;
361 array<int> playerIds = {};
362 GetGame().GetPlayerManager().GetPlayers(playerIds);
363 foreach (
int pid : playerIds)
365 if (
GetGame().GetPlayerManager().GetPlayerName(pid) == name)
379 array<string> result = argv;
380 if (!argv[playerNameStartId].ContainsAt(
"\"", 0))
383 int lastQuotesIndex = -1;
384 for (
int i = argv.Count()-1; i > playerNameStartId; --i)
389 if (argv[i].ContainsAt(
"\"", argv[i].Length()-1))
396 if (lastQuotesIndex > -1)
398 string playerName = argv[playerNameStartId];
400 for (i = playerNameStartId + 1; i <= lastQuotesIndex; ++i)
402 playerName += (
" " + argv[i]);
405 result[playerNameStartId] = playerName.Substring(1, playerName.Length()-2);
406 for (i = lastQuotesIndex; i > playerNameStartId; --i)
496 case EApiCode.EACODE_ERROR_MULTIPLE_TARGET_MATCH:
518 case EApiCode.EACODE_ERROR_NOT_FOUND:
536 case EApiCode.EACODE_ERROR_USER_NOT_FOUND:
559 case EBackendCallbackState.EBCS_ERROR:
return HandleFailure();
601 if (argv.Count() < 2)
604 int kickPlayerId = argv[1].ToInt();
605 if (kickPlayerId < 1)
608 string kickPlayerName =
GetGame().GetPlayerManager().GetPlayerName(kickPlayerId);
609 if (kickPlayerName ==
"")
612 PrintFormat(
"Kick %1[%2]", kickPlayerName, kickPlayerId);
641 override ref ScrServerCmdResult
OnUpdate()
enum SCR_EBanSubcommandArg EBCA_REASON
override void OnSuccess(int code)
enum SCR_EBanSubcommandArg EBLA_SUBCOMMAND
enum SCR_EBanSubcommandArg EBCA_SUBCOMMAND
EStringMatchType m_eLastMatchType
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()
enum SCR_EBanSubcommandArg EBCS_ERROR
enum SCR_EBanSubcommandArg EPIT_PLAYERID
enum SCR_EBanSubcommandArg EBCS_SUCCESS
override void OnError(int code, int restCode, int apiCode)
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()
ArmaReforgerScripted GetGame()
RplMode
Mode of replication.
EAITargetClusterState m_eState
void KickPlayer(int playerId, int duration, SCR_PlayerManagerKickReason reason)
SCR_EBanSubcommandArg m_eSubcommandArg
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
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)
ref BanListPageParams m_Params
override ref ScrServerCmdResult OnUpdate()
ScrServerCmdResult RemoveBan(array< string > argv, int playerId)
static const int BAN_LIST_ITEMS_PER_PAGE_CHAT
static const int BAN_LIST_ITEMS_PER_PAGE_RCON
override bool IsServerSide()
ScrServerCmdResult ListBansResultFiltered()
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.
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)
proto native bool IsEmpty()
EStringMatchType
Enum used to specify how string is matched when searching in backend database.