15.03.2016, 21:11
Function allows you to get a constant value (see enum), defining the ban type what you want to do. (ip, pseudo or the twice).
Code test :
Result :
PHP код:
enum
{
INVALID_BAN_TYPE,
PSEUDO_BAN_TYPE,
IP_BAN_TYPE,
TWICE_BAN_TYPE
}
stock GetBanType(const buf[])
{
new
l = strlen(buf);
if(buf[0] == '+' || buf[l-1] == '+') return INVALID_BAN_TYPE;
new
bool:gbt@p,
bool:gbt@i,
bool:gbt@s;
for(new i = 0; i < l; i++)
{
switch(buf[i])
{
case 'p', 'P': {if(gbt@p) return INVALID_BAN_TYPE; gbt@p = true;}
case 'i', 'I': {if(gbt@i) return INVALID_BAN_TYPE; gbt@i = true;}
case '+': {if(gbt@s) return INVALID_BAN_TYPE; gbt@s = true;}
default: return INVALID_BAN_TYPE;
}
}
return (gbt@p ? (gbt@i ? (gbt@s ? TWICE_BAN_TYPE : INVALID_BAN_TYPE) : PSEUDO_BAN_TYPE) : (gbt@i ? IP_BAN_TYPE : INVALID_BAN_TYPE));
}
PHP код:
main()
{
new const
a[][] =
{
"p+i",
"i",
"p",
"P+I",
"I",
"P",
"pi",
"p+",
"i+",
"+p",
"+i",
"a+p",
"a+a",
"p+++i"
};
for(new i = 0; i < sizeof(a); i++)
{
new
bt = GetBanType(a[i]);
switch(bt)
{
case INVALID_BAN_TYPE: printf("%s -> INVALID_BAN_TYPE", a[i]);
case PSEUDO_BAN_TYPE: printf("%s -> PSEUDO_BAN_TYPE", a[i]);
case IP_BAN_TYPE: printf("%s -> IP_BAN_TYPE", a[i]);
case TWICE_BAN_TYPE: printf("%s -> TWICE_BAN_TYPE", a[i]);
}
}
}
Код:
p+i -> TWICE_BAN_TYPE i -> IP_BAN_TYPE p -> PSEUDO_BAN_TYPE P+I -> TWICE_BAN_TYPE I -> IP_BAN_TYPE P -> PSEUDO_BAN_TYPE pi -> INVALID_BAN_TYPE p+ -> INVALID_BAN_TYPE i+ -> INVALID_BAN_TYPE +p -> INVALID_BAN_TYPE +i -> INVALID_BAN_TYPE a+p -> INVALID_BAN_TYPE a+a -> INVALID_BAN_TYPE p+++i -> INVALID_BAN_TYPE

