Change name help.
#1

Hello all, I create /cname command but the problem is it creates a new user id and the old id still exists. Need help with how to fix it.

PHP код:
CMD:cname(playeridparams[])
{
    
LoginCheck(playerid);
    
LevelCheck(playerid3);
    new
        
string[128],
        
id,
        
newname[24]
    ;
    if(
sscanf(params"us[24]"idnewname)) return SendClientMessage(playeridCOLOR_RED"<!> [Error] /cname [playerid] [new name]");
    if(
strlen(newname) < || strlen(newname) > MAX_PLAYER_NAME) return SendClientMessage(playeridCOLOR_RED"[Error] Invalid Name Length.");
    if(
id == INVALID_PLAYER_ID) return SendClientMessage(playeridCOLOR_RED"[Error] Player not connected.");
    if(
User[playerid][accountAdmin] < User[id][accountAdmin]) return SendClientMessage(playeridCOLOR_RED"[Error] You cannot use this command on higher admin.");
    
    
SaveData(id);
    
User[id][accountLogged] = false;
    
#if LOG == true
        
format(stringsizeof string"Administrator %s has set %s's name to %s"pName(playerid), pName(id), newname);
        
SaveLog("account.txt"string);
    
#endif
    
format(stringsizeof(string), "You have set \"%s's\" name to \"%s\"."pName(id), newname); SendClientMessage(playeridCOLOR_YELLOWstring);
    
format(stringsizeof(string), "Administrator \"%s\" has set your name to \"%s\"."pName(playerid), newname); SendClientMessage(idCOLOR_YELLOWstring);
    
SetPlayerName(idnewname);
    
SendClientMessage(id, -1"You have been logged out from your current account, Reconnecting to the server...");
    
    
    return 
1;

Reply
#2

Well, the problem here is you don't create or delete any accounts... So give that a try...
Reply
#3

I am not able to do it. Can someone create it for me? and explain a bit?
Reply
#4

Show your SaveData function
Reply
#5

This is what i tried:-
PHP код:
CMD:cname(playeridparams[])
{
    
LoginCheck(playerid);
    
LevelCheck(playerid3);
    new
        
string[128],
        
id,
        
newname[24]
    ;
    if(
sscanf(params"us[24]"idnewname)) return SendClientMessage(playeridCOLOR_RED"<!> [Error] /cname [playerid] [new name]");
    if(
strlen(newname) < || strlen(newname) > MAX_PLAYER_NAME) return SendClientMessage(playeridCOLOR_RED"[Error] Invalid Name Length.");
    if(
id == INVALID_PLAYER_ID) return SendClientMessage(playeridCOLOR_RED"[Error] Player not connected.");
    if(
User[playerid][accountAdmin] < User[id][accountAdmin]) return SendClientMessage(playeridCOLOR_RED"[Error] You cannot use this command on higher admin.");
    
    
SaveData(id);
    
User[id][accountLogged] = false;
    
#if LOG == true
        
format(stringsizeof string"Administrator %s has set %s's name to %s"pName(playerid), pName(id), newname);
        
SaveLog("account.txt"string);
    
#endif
    
new Query2[128+50];
    
format(Query2100"DELETE FROM `users` WHERE `username` = '%s'"pName(id));
    
db_query(DatabaseQuery2);
    
db_free_result(db_query(DatabaseQuery2));
    
format(stringsizeof(string), "You have set \"%s's\" name to \"%s\"."pName(id), newname); SendClientMessage(playeridCOLOR_YELLOWstring);
    
format(stringsizeof(string), "Administrator \"%s\" has set your name to \"%s\"."pName(playerid), newname); SendClientMessage(idCOLOR_YELLOWstring);
    
SetPlayerName(idnewname);
    
SendClientMessage(id, -1"You have been logged out from your current account, Reconnecting to the server...");
    
    
    return 
1;

@Shinja
SaveData function:-
PHP код:
stock SaveData(playerid)
{
    new
        
Query[700+1000]
    ;
    
format(Querysizeof(Query), "UPDATE `users` SET `IP` = '%s', `admin` = %d, `kills` = %d, `deaths` = %d, `score` = %d, `money` = %d, `warn` = %d, `mute` = %d, `mutesec` = %d, `cmute` = %d, `cmutesec` = %d, `jail` = %d, `jailsec` = %d, `hours` = %d, `minutes` = %d, `seconds` = %d, `question` = '%s', `answer` = '%s' WHERE `username` = '%s'",
            
DB_Escape(User[playerid][accountIP]),
            
User[playerid][accountAdmin],
            
User[playerid][accountKills],
            
User[playerid][accountDeaths],
            
User[playerid][accountScore],
            
User[playerid][accountCash],
            
User[playerid][accountWarn],
            
User[playerid][accountMuted],
            
User[playerid][accountMuteSec],
            
User[playerid][accountCMuted],
            
User[playerid][accountCMuteSec],
            
User[playerid][accountJail],
            
User[playerid][accountJailSec],
            
User[playerid][accountGame][2],
            
User[playerid][accountGame][1],
            
User[playerid][accountGame][0],
            
DB_Escape(User[playerid][accountQuestion]),
            
DB_Escape(User[playerid][accountAnswer]),
            
DB_Escape(User[playerid][accountName])
    );
    
db_query(DatabaseQuery);
    
db_free_result(db_query(DatabaseQuery));
    return 
1;

Reply
#6

You don't need to re-save the whole data for the player, just update the player name
Example;
PHP код:
format(querysizeof(query),"UPDATE `playerstable` SET `PlayerName` = '%e' WHERE `username` = '%s'"newnamePlayerInfo[playerid][UserName]);
db_query(Databasequery); 
SetPlayerName(playeridnewname); 
Don't just copy/paste.
Reply
#7

It's not copy pasted.

I learn't queries, but was not sure of my script.
Reply
#8

I meant, Don't just copy/paste the code i post, because it's just an example, lol.
Reply
#9

Oh, my bad.
Reply
#10

This is what I have in my script. You can have a few ideas. If you need me to explain anything just message me.
PHP код:
CMD:setname(playerid,params[])
{
    new 
Query[128],id;
    if(
PlayerInfo[playerid][pAdmin] < 3) return 0;
    if(
sscanf(params,"is[30]",id,params)) return SendClientMessage(playerid,-1,"Usage: /setname [PlayerID] [New Name]");
    if(
strlen(params) < 3) return SendClientMessage(playerid,COLOR_RED,"Error: Your new name must be longer than 3 characters");
    
mysql_format(mysqlQuerysizeof(Query), "SELECT * FROM Users WHERE Name = '%s' LIMIT 1",GetName(id));
    
mysql_tquery(mysqlQuery"OnAccountSetName""iis",playerid,id,params);
    return 
1;

PHP код:
forward OnAccountSetName(playerididnewname[]);
public 
OnAccountSetName(playerid,idnewname[])
{
    new 
query[512],string[128];
    if(!
cache_num_rows())
    {
        return 
SendClientMessage(playeridCOLOR_RED"Error: No account exists");
    }
    else
    {
        
mysql_format(mysql,querysizeof(query), "UPDATE Users SET Name='%s' WHERE Name = '%s'",newname,GetName(id));
        
mysql_tquery(mysqlquery,"""");
        
format(string,sizeof(string),"Admin Log: %s has changed %s account name to %s",GetName(playerid),GetName(id),newname);
        
ABroadCast(COLOR_ADMIN,string,1);
        
SetPlayerName(id,newname);
        
SendClientMessage(id,-1,"An Admin has changed your account name");  
    }
    return 
1;

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)