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(playerid, params[])
{
    
LoginCheck(playerid);
    
LevelCheck(playerid, 3);
    new
        
string[128],
        
id,
        
newname[24]
    ;
    if(
sscanf(params, "us[24]", id, newname)) return SendClientMessage(playerid, COLOR_RED, "<!> [Error] /cname [playerid] [new name]");
    if(
strlen(newname) < 3 || strlen(newname) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, "[Error] Invalid Name Length.");
    if(
id == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "[Error] Player not connected.");
    if(
User[playerid][accountAdmin] < User[id][accountAdmin]) return SendClientMessage(playerid, COLOR_RED, "[Error] You cannot use this command on higher admin.");
    
    
SaveData(id);
    
User[id][accountLogged] = false;
    
#if LOG == true
        
format(string, sizeof string, "Administrator %s has set %s's name to %s", pName(playerid), pName(id), newname);
        
SaveLog("account.txt", string);
    
#endif
    
format(string, sizeof(string), "You have set \"%s's\" name to \"%s\".", pName(id), newname); SendClientMessage(playerid, COLOR_YELLOW, string);
    
format(string, sizeof(string), "Administrator \"%s\" has set your name to \"%s\".", pName(playerid), newname); SendClientMessage(id, COLOR_YELLOW, string);
    
SetPlayerName(id, newname);
    
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(playerid, params[])
{
    
LoginCheck(playerid);
    
LevelCheck(playerid, 3);
    new
        
string[128],
        
id,
        
newname[24]
    ;
    if(
sscanf(params, "us[24]", id, newname)) return SendClientMessage(playerid, COLOR_RED, "<!> [Error] /cname [playerid] [new name]");
    if(
strlen(newname) < 3 || strlen(newname) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, "[Error] Invalid Name Length.");
    if(
id == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "[Error] Player not connected.");
    if(
User[playerid][accountAdmin] < User[id][accountAdmin]) return SendClientMessage(playerid, COLOR_RED, "[Error] You cannot use this command on higher admin.");
    
    
SaveData(id);
    
User[id][accountLogged] = false;
    
#if LOG == true
        
format(string, sizeof 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(Query2, 100, "DELETE FROM `users` WHERE `username` = '%s'", pName(id));
    
db_query(Database, Query2);
    
db_free_result(db_query(Database, Query2));
    
format(string, sizeof(string), "You have set \"%s's\" name to \"%s\".", pName(id), newname); SendClientMessage(playerid, COLOR_YELLOW, string);
    
format(string, sizeof(string), "Administrator \"%s\" has set your name to \"%s\".", pName(playerid), newname); SendClientMessage(id, COLOR_YELLOW, string);
    
SetPlayerName(id, newname);
    
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(Query, sizeof(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(Database, Query);
    
db_free_result(db_query(Database, Query));
    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(query, sizeof(query),"UPDATE `playerstable` SET `PlayerName` = '%e' WHERE `username` = '%s'", newname, PlayerInfo[playerid][UserName]);
db_query(Database, query); 
SetPlayerName(playerid, newname); 
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(mysql, Query, sizeof(Query), "SELECT * FROM Users WHERE Name = '%s' LIMIT 1",GetName(id));
    
mysql_tquery(mysql, Query, "OnAccountSetName", "iis",playerid,id,params);
    return 
1;
} 
PHP код:
forward OnAccountSetName(playerid, id, newname[]);
public 
OnAccountSetName(playerid,id, newname[])
{
    new 
query[512],string[128];
    if(!
cache_num_rows())
    {
        return 
SendClientMessage(playerid, COLOR_RED, "Error: No account exists");
    }
    else
    {
        
mysql_format(mysql,query, sizeof(query), "UPDATE Users SET Name='%s' WHERE Name = '%s'",newname,GetName(id));
        
mysql_tquery(mysql, query,"", "");
        
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)