CMD:changename(playerid, params[]) {
if(isnull(params)) {
return SendClientMessage(playerid, -1, "/changename [newname]");
}
if(strlen(params) > MAX_PLAYER_NAME) {
return SendClientMessage(playerid, -1, "Your name must contain a maximum of 24 characters.");
}
new current[MAX_PLAYER_NAME];
GetPlayerName(playerid, current, sizeof current);
if(!strcmp(current, params, false)) {
return SendClientMessage(playerid, -1, "That's already your name!");
}
new query[128];
mysql_format(handle, query, sizeof query, "SELECT * FROM `users` WHERE `name` = '%s'", params);
mysql_tquery(handle, query, "ChangeName", "is", playerid, params);
return 1;
}
forward ChangeName(playerid, newname[]);
public ChangeName(playerid, newname[]) {
new current[MAX_PLAYER_NAME];
GetPlayerName(playerid, current, sizeof current);
new query[128];
mysql_format(handle, query, sizeof query, "UPDATE `users` SET `name` = '%s' WHERE `name` = '%s'", newname, current);
mysql_tquery(handle, query);
SetPlayerName(playerid, newname);
return 1;
}
if(cache_num_rows()) return error;
mysql_format(..., "UPDATE IGNORE `users` SET `name` = '%e' WHERE `name` = '%s'", ...);
mysql_tquery(handle, query, "OnPlayerNameChange", "ds", playerid, params);
// without `IGNORE` keyword, it would return error about duplicate key
// `IGNORE` literally ignores the error and does absolutely nothing (0 rows are affected)
// When the row is updated (sets the new name), the affected rows will be 1
if (!cache_affected_rows())
{
// already registered name, pick a new one
}
else
{
// SetPlayerName
}
if(cache_num_rows() > 0) { return SCM blah blah blah "Someone else is using this name!"); } |