Problem with cmd: /changename
#1

Hello, everyone.

I got a problem with /changename command.

Код:
if(strcmp(cmd, "/changename", true) == 0)
	{
	  GetPlayerName(playerid, sendername, sizeof(sendername));
		new tmpp[256];
		tmpp = strtok(cmdtext, idx);
		if(!strlen(tmpp))
		{
			SendClientMessage(playerid, COLOR_DBLUE, "PAREIZA SINTAKSE: /changename [playerid] [new nick]");
			return 1;
		}
		giveplayerid = strval(tmpp);
		tmp = strtok(cmdtext, idx);
		GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
		GetPlayerName(playerid, sendername, sizeof(sendername));
		if(IsPlayerConnected(playerid))
		{
		  if(PlayerInfo[playerid][pAdmin] >= 1337)
		  {
		    if(IsPlayerConnected(giveplayerid))
		    {
					SetPlayerName(giveplayerid, tmp);
					format(string, sizeof(string), "AdmCMD: %s(%i) has changed Your name to %s", sendername, playerid, tmp);
					SendClientMessage(giveplayerid, COLOR_DBLUE, string);
					format(string, sizeof(string), "AdmCMD: You have changed ID %i's name to %s", giveplayerid, tmp);
					SendClientMessage(playerid, COLOR_DBLUE, string);
					format(string, 256, "AdmWarning: %s has changed %s's his name to %s.", sendername,giveplayer, tmp);
					ABroadCast(COLOR_YELLOW,string,1);
				}
				else
				{
				  format(string, sizeof(string), "%d is not an active player.", giveplayerid);
					SendClientMessage(playerid, COLOR_RED, string);
				}
			}
			else
			{
			  SendClientMessage(playerid, COLOR_RED, "Tu neesi administrators !");
			}
		}
		else
		{
		  SendClientMessage(playerid, COLOR_RED, "Tu neesi ielogojies!");
		}
	 	return 1;
	}
Here is a command, but the thing is... When I change someones name, everything seems okey at the start, but after restart in users folder is OLD name + new one, so I got 2 accounts. They are same, just other names. How to make, than it Renames this file, not create new one.




Sorry for bad english.
Reply
#2

Anyone?
Reply
#3

Just use fremove to delete the old file
https://sampwiki.blast.hk/wiki/Fremove
Reply
#4

This is too hard for me, I even dont know in witch tags I should put that fremove.
Reply
#5

Quote:
Originally Posted by kukars22
Hello, everyone.

I got a problem with /changename command.

Код:
if(strcmp(cmd, "/changename", true) == 0)
	{
	  GetPlayerName(playerid, sendername, sizeof(sendername));
		new tmpp[256];
		tmpp = strtok(cmdtext, idx);
		if(!strlen(tmpp))
		{
			SendClientMessage(playerid, COLOR_DBLUE, "PAREIZA SINTAKSE: /changename [playerid] [new nick]");
			return 1;
		}
		giveplayerid = strval(tmpp);
		tmp = strtok(cmdtext, idx);
		GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
		GetPlayerName(playerid, sendername, sizeof(sendername));
		if(IsPlayerConnected(playerid))
		{
		  if(PlayerInfo[playerid][pAdmin] >= 1337)
		  {
		    if(IsPlayerConnected(giveplayerid))
		    {
					SetPlayerName(giveplayerid, tmp);
					format(string, sizeof(string), "AdmCMD: %s(%i) has changed Your name to %s", sendername, playerid, tmp);
					SendClientMessage(giveplayerid, COLOR_DBLUE, string);
					format(string, sizeof(string), "AdmCMD: You have changed ID %i's name to %s", giveplayerid, tmp);
					SendClientMessage(playerid, COLOR_DBLUE, string);
					format(string, 256, "AdmWarning: %s has changed %s's his name to %s.", sendername,giveplayer, tmp);
					ABroadCast(COLOR_YELLOW,string,1);
				}
				else
				{
				  format(string, sizeof(string), "%d is not an active player.", giveplayerid);
					SendClientMessage(playerid, COLOR_RED, string);
				}
			}
			else
			{
			  SendClientMessage(playerid, COLOR_RED, "Tu neesi administrators !");
			}
		}
		else
		{
		  SendClientMessage(playerid, COLOR_RED, "Tu neesi ielogojies!");
		}
	 	return 1;
	}
Here is a command, but the thing is... When I change someones name, everything seems okey at the start, but after restart in users folder is OLD name + new one, so I got 2 accounts. They are same, just other names. How to make, than it Renames this file, not create new one.




Sorry for bad english.
Check in the functions list if there is any function to "SetFileName" or something like that.
Reply
#6

I found a better command:

Код:
if(!strcmp("/setname", cmd, true))
	{
	if (PlayerInfo[playerid][pAdmin] < 1337) return SendClientMessage(playerid, COLOR_GRAD2, "  Restricted");
	tmp = strtok(cmdtext,idx);
	if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /setname [id] [newname]");
	giveplayerid = ReturnUser(tmp);
	if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, COLOR_GRAD2, "Invalid Playerid!");
	new str[128],gpname[MAX_PLAYER_NAME];
	GetPlayerName(giveplayerid, gpname, MAX_PLAYER_NAME);
	format(str, 128, "users/%s.ini", gpname);
	if(!fexist(str)) return SendClientMessage(playerid, COLOR_YELLOW, "The person havent an account on this server");
	tmp = strtok(cmdtext,idx);
	if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "USAGE: /setname [id] [newname]");
	new str2[128];
	format(str2,128,"users/%s.ini",tmp);
	frename(str,str2);
	new pname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
	SetPlayerName(giveplayerid,tmp);
	format(string, sizeof(string), "[NameChange] %s changed name of \"%s\" to \"%s\"",pname,gpname,tmp);
	return 1;
	}
But the thing is, it shows me than frename is undefined symbol, How to define it?
Reply
#7

Put these functions somewhere in your script

pawn Код:
stock fcopy(oldname[],newname[])
{
    new File:ohnd,File:nhnd;
    if (!fexist(oldname))
    {
        return 0;
    }
    ohnd=fopen(oldname,io_read);
    nhnd=fopen(newname,io_write);
    new buf2[1];
    for (new i=flength(ohnd);i>0;i--)
    {
        fputchar(nhnd, fgetchar(ohnd, buf2[0],false),false);
    }
    fclose(ohnd);
    fclose(nhnd);
    return 1;
}

stock frename(oldname[],newname[])
{
    if (!fexist(oldname))
    {
        return 0;
    }
    fremove(newname);
    if (!fcopy(oldname,newname))
    {
        return 0;
    }
    fremove(oldname);
    return 1;
}
Reply
#8

There's also this one:

pawn Код:
stock frename(oldname[],newname[]) {
  if (!fexist(oldname)) return false;
  fremove(newname);
  if (!fcopy(oldname,newname)) return false;
  fremove(oldname);
  return true;
}
Reply
#9

Quote:
Originally Posted by sizeof(Sky));
There's also this one:

pawn Код:
stock frename(oldname[],newname[]) {
  if (!fexist(oldname)) return false;
  fremove(newname);
  if (!fcopy(oldname,newname)) return false;
  fremove(oldname);
  return true;
}
undefined symol: fcopy
Reply
#10

Quote:
Originally Posted by MadeMan
Put these functions somewhere in your script

pawn Код:
stock fcopy(oldname[],newname[])
{
    new File:ohnd,File:nhnd;
    if (!fexist(oldname))
    {
        return 0;
    }
    ohnd=fopen(oldname,io_read);
    nhnd=fopen(newname,io_write);
    new buf2[1];
    for (new i=flength(ohnd);i>0;i--)
    {
        fputchar(nhnd, fgetchar(ohnd, buf2[0],false),false);
    }
    fclose(ohnd);
    fclose(nhnd);
    return 1;
}

stock frename(oldname[],newname[])
{
    if (!fexist(oldname))
    {
        return 0;
    }
    fremove(newname);
    if (!fcopy(oldname,newname))
    {
        return 0;
    }
    fremove(oldname);
    return 1;
}
Thanks, its working now.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)