format(string, sizeof(string), "users/%s.ini", playername2);
new File: UserFile = fopen(string, io_read);
if(UserFile)
|
Do you have an enforced naming convention on your server? i.e.: Firstname_Lastname? In that case, converting individual characters of the player's name is probably the way to go. |
UsernameToLower(name[]) {
new
loweredName[MAX_PLAYER_NAME],
tmp[MAX_PLAYER_NAME];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(name[i] >= 'A' && name[i] <= 'Z') {
tmp[i] = tolower(name[i]);
}
strcat(loweredName, tmp[i]);
}
return loweredName;
}
printf("%s", UsernameToLower("Andy_S_Edeyn"));
printf("%s", UsernameToLower("AAAAndy_Sedeyn"));
printf("%s", UsernameToLower("andYseDeyn"));
printf("%s", UsernameToLower("ANDYSEDEYN"));
UsernameToLower(name[]) {
new
loweredName[MAX_PLAYER_NAME],
tmp[MAX_PLAYER_NAME];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(i == 0 && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] == '_' && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] != '_' && (name[i] >= 'A' || name[i] <= 'Z')) {
tmp[i] = tolower(name[i]);
}
strcat(loweredName, tmp[i]);
}
return loweredName;
}
printf("%s", UsernameToLower("Andy_S_edeyn"));
printf("%s", UsernameToLower("And_y_s_Edeyn"));
printf("%s", UsernameToLower("andyS_Ede_y_n"));
printf("%s", UsernameToLower("ANDY_S_EDEYN"));
printf("%s", UsernameToLower("ANDYSEDEYN"));
printf("%s", UsernameToLower("ANDY_s_EDEYN"));
UserPath(playerid) {
new name[MAX_PLAYER_NAME], path[36];
GetPlayerName(playerid, name, sizeof(name));
format(path, sizeof(path), USER_PATH, UsernameToLower(name););
return path;
}
UsernameToLower(const playername[MAX_PLAYER_NAME])
{
new ln[MAX_PLAYER_NAME];
for(new i; i<strlen(playername); i++)
{
if(playername[i] == '_') continue;
if('A' > playername[i] || playername[i] > 'Z') return playername;
ln[i] = tolower(playername[i]);
}
return ln;
}
format(sz_accStr, sizeof(sz_accStr), "users/%s.ini", NickToLower(account_name));
printf(sz_accStr);
NickToLower(nick[])
{
for(new i=0, j=strlen(nick); i<j; i++)
{
nick[i] = tolower(nick[i]);
}
printf(nick);//it works
return nick;
}
new account_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, account_name, MAX_PLAYER_NAME);
NickToLower(account_name);
printf("users/%s.ini", account_name);
|
thanks but i have a problem
PHP код:
edit: But when i print inside the function it works PHP код:
|
|
This one is more faster and optimized:
PHP Code:
|
printf("1) %s", UsernameToLower("Andy_S_edeyn"));
printf("2) %s", UsernameToLower("And_y_s_Edeyn"));
printf("3) %s", UsernameToLower("andyS_Ede_y_n"));
printf("4) %s", UsernameToLower("ANDY_S_EDEYN"));
printf("5) %s", UsernameToLower("ANDYSEDEYN"));
printf("6) %s", UsernameToLower("ANDY_s_EDEYN"));
[18:00:52] 1) Andy_S_edeyn [18:00:52] 2) And_y_s_Edeyn [18:00:52] 3) andyS_Ede_y_n [18:00:52] 4) andy [18:00:52] 5) andysedeyn [18:00:52] 6) ANDY_s_EDEYN
UsernameToLower(name[]) {
new
tmp[MAX_PLAYER_NAME];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(name[i] >= 'A' && name[i] <= 'Z') {
tmp[i] = tolower(name[i]);
}
}
return tmp;
}
printf("1) %s", UsernameToLower("Andy_S_edeyn"));
printf("2) %s", UsernameToLower("And_y_s_Edeyn"));
printf("3) %s", UsernameToLower("andyS_Ede_y_n"));
printf("4) %s", UsernameToLower("ANDY_S_EDEYN"));
printf("5) %s", UsernameToLower("ANDYSEDEYN"));
printf("6) %s", UsernameToLower("ANDY_s_EDEYN"));
[18:03:26] 1) andy_s_edeyn [18:03:26] 2) and_y_s_edeyn [18:03:26] 3) andys_ede_y_n [18:03:26] 4) andy_s_edeyn [18:03:26] 5) andysedeyn [18:03:26] 6) andy_s_edeyn
GetPlayerName(playerid, playername, sizeof(playername));
format(tempPname, sizeof(tempPname), "%s", playername);
format(playername, sizeof(playername), "%s%d", playername,playerid);
SetPlayerName(playerid, playername);
SetPlayerName(playerid, UsernameToLower(tempPname));
stock UsernameToLower(name[]) {
new
loweredName[MAX_PLAYER_NAME+4],
tmp[MAX_PLAYER_NAME+4];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(i == 0 && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] == '_' && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] != '_' && (name[i] >= 'A' || name[i] <= 'Z')) {
tmp[i] = tolower(name[i]);
}
strcat(loweredName, tmp[i]);
}
return loweredName;
}
#define USER_PATH "/users/%s.ini"
UserPath(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(path, sizeof(path), USER_PATH, UsernameToLower(name));
return path;
}
if(fexist(UserPath(playerid)))
INI_ParseFile(UserPath(playerid), "LoadUser_data", .bExtra = true, .extra = playerid);
// Change 'LoadUser_data' to whatever your function is called.
// And _'data' to whatever your filetag is.
format(path, sizeof(path), USER_PATH, UsernameToLower(name));
|
@Andy no, My UserNametoLower function is not for converting all lowercase
its to forcing player to set theirname in proper roleplay that you've gave to me earlier my problem now is when the player connects it not change the tab name like for ex. my samp name: jOhn_dOE when i connect on my script i changed that on John_Doe but if you check it on tab your name doesn't changed and one buggy thing some of my players doesn't convert their first later to uppercase for ex. john_doe then it change their name to john_Doe |
FixUsername(name[]) {
new
tmp[MAX_PLAYER_NAME];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(i == 0 && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] == '_' && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] != '_' && (name[i] >= 'A' || name[i] <= 'Z')) {
tmp[i] = tolower(name[i]);
}
}
return tmp;
}
printf("1) %s", FixUsername("Andy_S_edeyn"));
printf("2) %s", FixUsername("And_y_s_Edeyn"));
printf("3) %s", FixUsername("andyS_Ede_y_n"));
printf("4) %s", FixUsername("ANDY_S_EDEYN"));
printf("5) %s", FixUsername("ANDYSEDEYN"));
printf("6) %s", FixUsername("ANDY_s_EDEYN"));
printf("7) %s", FixUsername("john_doe"));
[02:50:38] 1) Andy_S_Edeyn [02:50:38] 2) And_Y_S_Edeyn [02:50:38] 3) Andys_Ede_Y_N [02:50:38] 4) Andy_S_Edeyn [02:50:38] 5) Andysedeyn [02:50:38] 6) Andy_S_Edeyn [02:50:38] 7) John_Doe
new playername[MAX_PLAYER_NAME+4],tempPname[MAX_PLAYER_NAME+4];
GetPlayerName(playerid, playername, sizeof(playername));
format(tempPname, sizeof(tempPname), "%s", playername);
format(playername, sizeof(playername), "%s%d", playername,playerid);
SetPlayerName(playerid, playername);
SetPlayerName(playerid, UsernameToLower(playername));
UsernameToLower(const playername[MAX_PLAYER_NAME])
{
new ln[MAX_PLAYER_NAME],
strl = strlen(playername);
for(new i; i < strl; i++)
{
ln[i] = playername[i];
if(playername[i] == '_') continue;
ln[i] = tolower(playername[i]);
}
return ln;
}
|
thanks again andy
PHP Code:
coz when i directly setname with format it not works EDIT: another buggy when i check my name on tab it not change but when i type/chat my name works fine |
|
EDIT: SetPlayerName is case-insensitive. That means that you can't change the player's name to the exact same name even when some characters are changed in case. You could bypass it by first giving the player another name and then changing it back to the fixed name.
|
FixUsername(name[]) {
new
tmp[MAX_PLAYER_NAME];
for(new i = 0, j = strlen(name); i <= j; i++) {
tmp[i] = name[i];
if(i == 0 && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if(name[i-1] == '_' && (name[i] <= 'A' || name[i] >= 'Z')) {
tmp[i] = toupper(name[i]);
}
else if((name[i-1] != '_' && i != 0) && (name[i] >= 'A' || name[i] <= 'Z')) {
tmp[i] = tolower(name[i]);
}
}
return tmp;
}
new playername[MAX_PLAYER_NAME+4],tempPname[MAX_PLAYER_NAME+4];
GetPlayerName(playerid, playername, sizeof(playername));
format(tempPname, sizeof(tempPname), "%s", playername);
format(playername, sizeof(playername), "%s%d", playername,playerid);
SetPlayerName(playerid, playername);
SetPlayerName(playerid, UsernameToLower(playername));
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
SetPlayerName(playerid, "TempName002", MAX_PLAYER_NAME);
SetPlayerName(playerid, FixUsername(playername), MAX_PLAYER_NAME);