26.08.2011, 17:40
you can also use this stock function to detect if the player uses Non-RP name:
under OnPlayerConnect, you put:
pawn Код:
stock IsRPName(const name[], max_underscores = 2)
{
new underscores = 0;
if (name[0] < 'A' || name[0] > 'Z') return false; // First letter is not capital
for(new i = 1; i < strlen(name); i++)
{
if(name[i] != '_' && (name[i] < 'A' || name[i] > 'Z') && (name[i] < 'a' || name[i] > 'z')) return false; // a-zA-Z_
if( (name[i] >= 'A' && name[i] <= 'Z') && (name[i - 1] != '_') ) return false; // unneeded capital letter
if(name[i] == '_')
{
underscores++;
if(underscores > max_underscores || i == strlen(name)) return false; // More underlines than limit, or underline at the last pos
if(name[i + 1] < 'A' || name[i + 1] > 'Z') return false; // Not a capital letter after underline
}
}
if (underscores == 0) return false; // No underline detected
return true;
}
pawn Код:
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME], roleplayname[MAX_PLAYER_NAME] = "Will_Smith", goodbyemessage[108];
GetPlayerName(playerid, name, sizeof(name));
if (!IsRPName(name)) // you can control the max underlines, e.g if you allow max. 1 underlines, write this: if (!IsRPName(name, 1))
{
for (new i = 0; i < MAX_PLAYERS; i++) if (IsPlayerConnected(i)) break; // find a player who is online (and hasn't got kicked from the server -> has got a RolePlay name
if (IsPlayerConnected(i)) GetPlayerName(i, roleplayname, MAX_PLAYER_NAME); // if there was an online player, it's name will be the suggested roleplay name
format (goodbyemessage, sizeof(goodbyemessage), "* %s was kicked, come back with a roleplay name such as %s", name, roleplayname);
SendClientMessageToAll(-1, goodbyemessage);
return Kick(playerid);
}
// more things you do in OnPlayerConnect
return 1;
}