SA-MP Forums Archive
change name? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: change name? (/showthread.php?tid=470292)



change name? - Champ - 17.10.2013

is there any way to change the name from the database?

like using /changename command players get his changed name instantly and also his name in mysql database also get change.

I am using this format on register.

pawn Код:
format(Query, sizeof Query, "SELECT * FROM `accounts` WHERE `Name` = '%s' LIMIT 1", pName);
thank you.


Re: change name? - tyler12 - 17.10.2013

UPDATE `accounts` SET `Name` = 'OLD_NAME' WHERE `Name` = 'NEW_NAME'


Re: change name? - Konstantinos - 17.10.2013

pawn Код:
"UPDATE `accounts` SET `Name` = '%s' WHERE `Name` = '%s' LIMIT 1"
That should work, though if you load an (registered) ID, you could replace it.


Re: change name? - Champ - 17.10.2013

and how we can use the above format in the below code ?

pawn Код:
CMD:changename(playerid, params[])
{
    new targetid,name[128];
    if(PInfo[playerid][Level] < 2 || !IsPlayerAdmin(playerid)) return 0;
    else if (sscanf(params,"us",targetid,name))SendClientMessage(playerid,RED,"Usage: /changename [Playerid] [New name]");
    else if(!IsPlayerConnected(targetid))SendClientMessage(playerid,RED,"Error: Player is not connected!");
    else {
        new string[128],n[MAX_PLAYER_NAME];
        GetPlayerName(targetid,n,sizeof(n));
        SetPlayerName(targetid,name);
        format(string,sizeof(string),"Admin %s [ID:%d] Has set %s [ID:%d] name to %s",Name(playerid),playerid,n,targetid,name);
        SendClientMessageToAll(YELLOW,string);
        format(string,sizeof(string),"Your Name has been set to %s by Admin %s[ID:%d]",Name(targetid),n,playerid);
        SendClientMessage(playerid,GREEN,string);
    }
    return 1;
}
thank you.


Re: change name? - tyler12 - 17.10.2013

pawn Код:
CMD:changename(playerid, params[])
{
    new targetid,name[128],query[100];
    if(PInfo[playerid][Level] < 2 || !IsPlayerAdmin(playerid)) return 0;
    else if (sscanf(params,"us",targetid,name))SendClientMessage(playerid,RED,"Usage: /changename [Playerid] [New name]");
    else if(!IsPlayerConnected(targetid))SendClientMessage(playerid,RED,"Error: Player is not connected!");
    else {
        new string[128],n[MAX_PLAYER_NAME];
        GetPlayerName(targetid,n,sizeof(n));
        format(query,sizeof(query),"UPDATE `accounts` SET `Name` = '%s' WHERE `Name` = '%s'",name,n);
        mysql_query(query);
        SetPlayerName(targetid,name);
        format(string,sizeof(string),"Admin %s [ID:%d] Has set %s [ID:%d] name to %s",Name(playerid),playerid,n,targetid,name);
        SendClientMessageToAll(YELLOW,string);
        format(string,sizeof(string),"Your Name has been set to %s by Admin %s[ID:%d]",Name(targetid),n,playerid);
        SendClientMessage(playerid,GREEN,string);
    }
    return 1;
}



Re: change name? - Champ - 17.10.2013

thank you. i will test it.

+rep for all

thank you once again.


Re: change name? - Konstantinos - 17.10.2013

You should use the size on "s" specifier in sscanf. You can reduce the name to 24 (max player's name lenght) instead of 128.
pawn Код:
CMD:changename(playerid, params[])
{
    new targetid,name[MAX_PLAYER_NAME];
    if(PInfo[playerid][Level] < 2 || !IsPlayerAdmin(playerid)) return 0;
    if (sscanf(params,"us[24]",targetid,name))SendClientMessage(playerid,RED,"Usage: /changename [Playerid] [New name]");
    if(!IsPlayerConnected(targetid))SendClientMessage(playerid,RED,"Error: Player is not connected!");
    new string[128],n[MAX_PLAYER_NAME];
    GetPlayerName(targetid,n,sizeof(n));
    SetPlayerName(targetid,name);
    format(string,sizeof(string),"Admin %s [ID:%d] Has set %s [ID:%d] name to %s",Name(playerid),playerid,n,targetid,name);
    SendClientMessageToAll(YELLOW,string);
    format(string,sizeof(string),"Your Name has been set to %s by Admin %s[ID:%d]",Name(targetid),n,playerid);
    SendClientMessage(playerid,GREEN,string);
    format(string, sizeof string, "UPDATE `accounts` SET `Name` = '%s' WHERE `Name` = '%s' LIMIT 1", name, n);
    //mysql_query(string); // Non-threaded queries
    //mysql_tquery( connectionHandle, string, "", "" ); // Threaded queries
    return 1;
}



Re: change name? - tyler12 - 17.10.2013

Quote:
Originally Posted by Konstantinos
Посмотреть сообщение
You use use the size on "s" specifier in sscanf.
pawn Код:
CMD:changename(playerid, params[])
{
    new targetid,name[MAX_PLAYER_NAME];
    if(PInfo[playerid][Level] < 2 || !IsPlayerAdmin(playerid)) return 0;
    if (sscanf(params,"us[24]",targetid,name))SendClientMessage(playerid,RED,"Usage: /changename [Playerid] [New name]");
    if(!IsPlayerConnected(targetid))SendClientMessage(playerid,RED,"Error: Player is not connected!");
    new string[128],n[MAX_PLAYER_NAME];
    GetPlayerName(targetid,n,sizeof(n));
    SetPlayerName(targetid,name);
    format(string,sizeof(string),"Admin %s [ID:%d] Has set %s [ID:%d] name to %s",Name(playerid),playerid,n,targetid,name);
    SendClientMessageToAll(YELLOW,string);
    format(string,sizeof(string),"Your Name has been set to %s by Admin %s[ID:%d]",Name(targetid),n,playerid);
    SendClientMessage(playerid,GREEN,string);
    format(string, sizeof string, "UPDATE `accounts` SET `Name` = '%s' WHERE `Name` = '%s' LIMIT 1", name, n);
    //mysql_query(string); // Non-threaded queries
    //mysql_tquery( connectionHandle, string, "", "" ); // Threaded queries
    return 1;
}
If 's' has no size, it's set to 32 by default.

Quote:
Originally Posted by ******
Note that disabling prints is a VERY bad idea when developing code as you open yourself up to unreported buffer overflows when no length is specified on strings less than 32 cells (the default length).



Re: change name? - Champ - 17.10.2013

i will test your too.

thanks for such a fast help