Change name help. -
DeeadPool - 23.08.2016
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;
}
Re: Change name help. -
Threshold - 23.08.2016
Well, the problem here is you don't create or delete any accounts... So give that a try...
Re: Change name help. -
DeeadPool - 23.08.2016
I am not able to do it. Can someone create it for me? and explain a bit?
Re: Change name help. -
Shinja - 23.08.2016
Show your SaveData function
Re: Change name help. -
DeeadPool - 23.08.2016
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;
}
Re: Change name help. -
oMa37 - 23.08.2016
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.
Re: Change name help. -
DeeadPool - 23.08.2016
It's not copy pasted.
I learn't queries, but was not sure of my script.
Re: Change name help. -
oMa37 - 23.08.2016
I meant, Don't just copy/paste the code i post, because it's just an example, lol.
Re: Change name help. -
DeeadPool - 23.08.2016
Oh, my bad.
Re: Change name help. -
Tass007 - 24.08.2016
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;
}