sscanf warning
#1

Hi!

I get a warning when the reason is not written in this command below:

Код:
command(mute,playerid,params[])
{
	if(Player[playerid][pAdmin] == ADMIN_NONE) return ShowMessager(playerid,"~r~WARNING MESSAGE","You must be ~r~Administrator ~w~to mute players.",3);

	new muteid,reason[64];

	if(sscanf(params,"uS[64]",muteid,reason)) return ShowMessager(playerid,"~y~COMMAND USAGE","/mute ~y~Player, (Reason)",3);
	if(!IsPlayerConnected(muteid)) return ShowMessager(playerid,"~r~WARNING MESSAGE","Player is invalid.",3);
	if(playerid == muteid) return ShowMessager(playerid,"~r~WARNING MESSAGE","You cannot mute yourself!",3);

	if(Player[playerid][pAdmin] <= Player[muteid][pAdmin])
	{
		new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(muteid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"You cannot mute ~y~%s~w~.",PlayerName);
		return ShowMessager(playerid,"~r~WARNING MESSAGE",String,3);
	}

	if(Player[muteid][pMuted] == TRUE)
	{
		new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(muteid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"Player ~y~%s~w~ is already muted.",PlayerName);
		return ShowMessager(playerid,"~r~WARNING MESSAGE",String,3);
	}

	Player[muteid][pMuted] = TRUE;

	if(strlen(reason))
	{
		new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(muteid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"You've muted ~y~%s~w~.~n~~n~Reason: ~y~%s",PlayerName,reason);
		ShowMessager(playerid,"~g~INFORMATION",String,3);

		GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"Administrator ~y~%s ~w~has muted you.~n~~n~Reason: ~y~%s",PlayerName,reason);
		ShowMessager(muteid,"~g~INFORMATION",String,3);
	}
	else
	{
		new PlayerName[MAX_PLAYER_NAME]; GetPlayerName(muteid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"You've muted ~y~%s~w~.",PlayerName);
		ShowMessager(playerid,"~g~INFORMATION",String,3);

		GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
		format(String,sizeof(String),"Administrator ~y~%s ~w~has muted you.",PlayerName);
		ShowMessager(muteid,"~g~INFORMATION",String,3);
	}
	
	return 1;
}
The warning says:

Quote:

[19:48:21] sscanf warning: No default value found.
[19:48:21] sscanf warning: Unknown format specifier '[', skipping.
[19:48:21] sscanf warning: Unknown format specifier '6', skipping.
[19:48:21] sscanf warning: Unknown format specifier '4', skipping.
[19:48:21] sscanf warning: Unknown format specifier ']', skipping.
[19:48:21] sscanf warning: Format specifier does not match parameter count.

Any ideas what is wrong??
Reply
#2

An optional string requires a default value!
So change uS[64] to something with a default value like uS(*)[64]

Then, replace the if(strlen(reason)) check with if(reason[0] != '*')
Reply
#3

you need to provide a default value (a string here) in this line:
pawn Код:
if(sscanf(params,"uS[64]",muteid,reason)) return ShowMessager(playerid,"~y~COMMAND USAGE","/mute ~y~Player, (Reason)",3);
by adding a default reason like "dont spam", it looks like
pawn Код:
if(sscanf(params,"uS(dont spam)[64]",muteid,reason)) return ShowMessager(playerid,"~y~COMMAND USAGE","/mute ~y~Player, (Reason)",3);
and as AndreT suggsted, the later script code is slightly glitched, its not relevant anymore, since the reason is always given, so you dont need the if/else check at all.
Reply
#4

Thanks guys, it works!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)