if player does not write any id..
#1

I wonder how can I make this command that if a player does not write any id, it shows him his own stats? because if he does stats, sscanf calls and asks for an id

Код:
CMD:stats(playerid, params[])
{
    new id;
    if(connected[playerid] == true) return GameTextForPlayer(playerid, "~r~Spawn First", 5000, 5);
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) /stats [id]");
    if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) That player is not connected!");
	{
	     new iString[2000];
		 format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[id]);
	     SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]);
		 SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths]));
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);
	}
 	return 1;
}
Reply
#2

This sscanf thread has what you're looking for.
https://sampforum.blast.hk/showthread.php?tid=570927

Quote:

EVERY format specifier (that is, everything except '', {} and p) now has an optional equivalent - this is just their letter capitalised, so for example the old "z" optional string specifier is now "S" (there is still "z" and, for completeness, "Z", but both give warnings). In addition to optional specifiers, there are also now default values

And then there is an example snippet.
PHP код:
sscanf(params"U(-1)"id);
if (
id == -1)
{
    
// No player was entered.
}
else if (
id == INVALID_PLAYER_ID
{
    
// Entered player is not connected, send the error message.
}
else 
{
    
// The rest of your code

Try doing

PHP код:
if(sscanf(params"U(-1)"id)) return SendClientMessage(playerid, -1"{c3c3c3}(INFO) /stats [id]"); 
And then update your code to match the example
Reply
#3

pawn Код:
sscanf(params, "u", id);
    if(id == INVALID_PLAYER_ID) {
        SendClientMessage(playerid, -1, "{c3c3c3}(INFO) That player is not connected!");
    }
    else if (id == -1){
        //Show the stats for the player.
    }
    else {
        //Show stats for player specified in the sscanf params.
        new iString[2000];
        format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[id]);
        SendClientMessage(playerid, -1, iString);

        format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]);
        SendClientMessage(playerid, -1, iString);

        format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths]));
        SendClientMessage(playerid, -1, iString);

        format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]);
        SendClientMessage(playerid, -1, iString);

        format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[id][Headshots]);
        SendClientMessage(playerid, -1, iString);
    }
Edit: Didn't refresh the page, missed the reply above.
Reply
#4

This can be done much more easy then the answers above:
Код:
if(isnull(id))
{
player stats
}
else
{
stats for id
}
Reply
#5

I tried this but I just get errors

Код:
CMD:stats(playerid, params[])
{
    new id;
    if(connected[playerid] == true) return GameTextForPlayer(playerid, "~r~Spawn First", 5000, 5);
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) /stats [id]");
    if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) That player is not connected!");
    if(isnull(id))
    {
         new iString[2000];
		 format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[playerid]);
	     SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[playerid][Score], pInfo[playerid][Level], pInfo[playerid][DuelsWin], pInfo[playerid][DuelsLost]);
		 SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[playerid][Points], pInfo[playerid][Respect], pInfo[playerid][Kills], pInfo[playerid][Deaths], floatdiv(pInfo[playerid][Kills], pInfo[playerid][Deaths]));
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[playerid], PlayerDeaths[playerid], floatdiv(PlayerKills[playerid], PlayerDeaths[playerid]), pInfo[playerid][Headshots]);
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[playerid][Headshots]);
		 SendClientMessage(playerid, -1, iString);
    }
    else
	{
	     new iString[2000];
		 format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[id]);
	     SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]);
		 SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths]));
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);
	}
 	return 1;
}
But I get these errors
Код:
C:\Users\yan\Desktop\LS DM\gamemodes\DBv1.pwn(3943) : error 028: invalid subscript (not an array or too many subscripts): "id"
C:\Users\yan\Desktop\LS DM\gamemodes\DBv1.pwn(3943) : error 029: invalid expression, assumed zero
C:\Users\yan\Desktop\LS DM\gamemodes\DBv1.pwn(3943) : error 028: invalid subscript (not an array or too many subscripts): "id"
C:\Users\yan\Desktop\LS DM\gamemodes\DBv1.pwn(3943) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
The line is on isnull
Reply
#6

isnull is used for strings/arrays whatever. If you want to use isnull, you should do isnull(params)

Try doing it the way I suggested you do, as I think you will learn something more useful this way (optional specifiers in sscanf).
Also, does iString really need to have a size of 2000? Lol, cut it down a bit. You can't send a message longer than 144 characters (I think. It might be 128 or 140 something, unless you're using some other code to split the message but in your case you really don't need to split anything as everything should fit perfectly). So just make it that size.

PHP код:
CMD:stats(playeridparams[])
{
    new 
id;
    if(
connected[playerid] == true) return GameTextForPlayer(playerid"~r~Spawn First"50005);
    if(
sscanf(params"U(-1)"id)) return SendClientMessage(playerid, -1"{c3c3c3}(INFO) /stats [id]");
    if( 
id == -)
    {
         new 
iString[140];
         
format (iStringsizeof(iString), "{ffff99}(INFO) Current session stats of: %s"PlayerName[playerid]);
         
SendClientMessage(playerid, -1iString);
         
format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i"pInfo[playerid][Score], pInfo[playerid][Level], pInfo[playerid][DuelsWin], pInfo[playerid][DuelsLost]);
         
SendClientMessage(playerid, -1iString);
         
format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f"pInfo[playerid][Points], pInfo[playerid][Respect], pInfo[playerid][Kills], pInfo[playerid][Deaths], floatdiv(pInfo[playerid][Kills], pInfo[playerid][Deaths]));
         
SendClientMessage(playerid, -1iString);
          
format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f"PlayerKills[playerid], PlayerDeaths[playerid], floatdiv(PlayerKills[playerid], PlayerDeaths[playerid]), pInfo[playerid][Headshots]);
         
SendClientMessage(playerid, -1iString);
          
format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45"pInfo[playerid][Headshots]);
         
SendClientMessage(playerid, -1iString);
    }
    else if(
id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1"{c3c3c3}(INFO) That player is not connected!");
    else
    {
         new 
iString[140];
         
format (iStringsizeof(iString), "{ffff99}(INFO) Current session stats of: %s"PlayerName[id]);
         
SendClientMessage(playerid, -1iString);
         
format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i"pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]);
         
SendClientMessage(playerid, -1iString);
         
format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f"pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths]));
         
SendClientMessage(playerid, -1iString);
          
format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f"PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]);
         
SendClientMessage(playerid, -1iString);
          
format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45"pInfo[id][Headshots]);
         
SendClientMessage(playerid, -1iString);
    }
     return 
1;

Reply
#7

You can simply do
PHP код:
CMD:stats(playeridparams[]) 

    new 
id
    if(
connected[playerid] == true)
        return 
GameTextForPlayer(playerid"~r~Spawn First"50005);
    
    if(
isnull(params))
        
id playerid;
    else if(
sscanf(params"u"id))
        return 
SendClientMessage(playerid, -1"{c3c3c3}(INFO) /stats [id]");  
    
    if(!
IsPlayerConnected(id))
        return 
SendClientMessage(playerid, -1"{c3c3c3}(INFO) That player is not connected!"); 
    new 
iString[75]; 
    
format (iStringsizeof(iString), "{ffff99}(INFO) Current session stats of: %s"PlayerName[playerid]); 
    
SendClientMessage(playerid, -1iString); 
    
format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i"pInfo[playerid][Score], pInfo[playerid][Level], pInfo[playerid][DuelsWin], pInfo[playerid][DuelsLost]); 
    
SendClientMessage(playerid, -1iString); 
    
format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f"pInfo[playerid][Points], pInfo[playerid][Respect], pInfo[playerid][Kills], pInfo[playerid][Deaths], floatdiv(pInfo[playerid][Kills], pInfo[playerid][Deaths])); 
    
SendClientMessage(playerid, -1iString); 
    
format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f"PlayerKills[playerid], PlayerDeaths[playerid], floatdiv(PlayerKills[playerid], PlayerDeaths[playerid]), pInfo[playerid][Headshots]); 
    
SendClientMessage(playerid, -1iString); 
    
format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45"pInfo[playerid][Headshots]); 
    
SendClientMessage(playerid, -1iString); 
    return 
1

Reply
#8

I did this but it doesnt work, no changes still asks for an id

Код:
CMD:stats(playerid, params[])
{
    new id;
    if(connected[playerid] == true) return GameTextForPlayer(playerid, "~r~Spawn First", 5000, 5);
    if(sscanf(params, "u", id)) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) /stats [id]");
    if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "{c3c3c3}(INFO) That player is not connected!");
	sscanf(params, "U(-1)", id);
	if(id == -1)
    {
         new iString[2000];
		 format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[playerid]);
	     SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[playerid][Score], pInfo[playerid][Level], pInfo[playerid][DuelsWin], pInfo[playerid][DuelsLost]);
		 SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[playerid][Points], pInfo[playerid][Respect], pInfo[playerid][Kills], pInfo[playerid][Deaths], floatdiv(pInfo[playerid][Kills], pInfo[playerid][Deaths]));
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[playerid], PlayerDeaths[playerid], floatdiv(PlayerKills[playerid], PlayerDeaths[playerid]), pInfo[playerid][Headshots]);
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[playerid][Headshots]);
		 SendClientMessage(playerid, -1, iString);
    }
    else
	{
	     new iString[2000];
		 format (iString, sizeof(iString), "{ffff99}(INFO) Current session stats of: %s", PlayerName[id]);
	     SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i", pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]);
		 SendClientMessage(playerid, -1, iString);

		 format(iString,sizeof(iString),"{ffff99}Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f", pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths]));
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f", PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);

 		 format(iString,sizeof(iString),"{ffff99}Headshots given: %i/45", pInfo[id][Headshots]);
		 SendClientMessage(playerid, -1, iString);
	}
 	return 1;
}
Reply
#9

This should work as charm
PHP код:
CMD:stats(playeridparams[]) 

    new 
id
    if(
connected[playerid] == true) return GameTextForPlayer(playerid"~r~Spawn First"50005);
    if(
sscanf(params"u"id)) id playerid;
    if(!
IsPlayerConnected(id)) return SendClientMessage(playerid0xc3c3c3FF"(INFO) That player is not connected!"); 
    new 
iString[75]; 
    
format (iStringsizeof(iString), "(INFO) Current session stats of: %s"PlayerName[id]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i"pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f"pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths])); 
    
SendClientMessage(playerid0xffff99FFiString);  
    
format(iString,sizeof(iString),"Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f"PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Headshots given: %i/45"pInfo[id][Headshots]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    return 
1

Reply
#10

Quote:
Originally Posted by AroseKhanNiazi
Посмотреть сообщение
This should work as charm
PHP код:
CMD:stats(playeridparams[]) 

    new 
id
    if(
connected[playerid] == true) return GameTextForPlayer(playerid"~r~Spawn First"50005);
    if(
sscanf(params"u"id)) id playerid;
    if(!
IsPlayerConnected(id)) return SendClientMessage(playerid0xc3c3c3FF"(INFO) That player is not connected!"); 
    new 
iString[75]; 
    
format (iStringsizeof(iString), "(INFO) Current session stats of: %s"PlayerName[id]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Score: %i ~ Level: %i ~ Duels Win: %i ~ Duels Lost: %i"pInfo[id][Score], pInfo[id][Level], pInfo[id][DuelsWin], pInfo[id][DuelsLost]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Points: %i ~ Respect: %i ~ Kills: %i ~ Deaths: %i ~ Ratio: %.2f"pInfo[id][Points], pInfo[id][Respect], pInfo[id][Kills], pInfo[id][Deaths], floatdiv(pInfo[id][Kills], pInfo[id][Deaths])); 
    
SendClientMessage(playerid0xffff99FFiString);  
    
format(iString,sizeof(iString),"Session Kills: %i ~ Session Deaths: %i ~ Session Ratio: %.2f"PlayerKills[id], PlayerDeaths[id], floatdiv(PlayerKills[id], PlayerDeaths[id]), pInfo[id][Headshots]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    
format(iString,sizeof(iString),"Headshots given: %i/45"pInfo[id][Headshots]); 
    
SendClientMessage(playerid0xffff99FFiString); 
    return 
1

oh thanks dude works perfectly !
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)