SA-MP Forums Archive
[Tutorial] /whisper (sscanf/zcmd) - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+---- Forum: Tutorials (https://sampforum.blast.hk/forumdisplay.php?fid=70)
+---- Thread: [Tutorial] /whisper (sscanf/zcmd) (/showthread.php?tid=352085)



/whisper (sscanf/zcmd) - JaKe Elite - 18.06.2012

/whisper (sscanf/zcmd)

made by Romel
I create this because i'm bored
I made a /whisper too, but i will not copy the code from there
so i will use made from scratch

Requirements:

- Little Experience in scripting
- sscanf which can be found here!
Click here if you are having the sscanf ID 0 bug!

- zcmd which can be found here!

Full Code:

Before i explain each part please don't copy this code first i'm just previewing.
I will explain the /whisper command after this moment (sorry if my english speaking is bad)

pawn Code:
CMD:whisper(playerid, params[])
{
    new pname[MAX_PLAYER_NAME], str[128], Float:pPos[3];
    if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, -1, "Syntax: /whisper <text>");
    GetPlayerName(playerid, pname, sizeof(pname));
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerInRangeOfPoint(i, 10.0, pPos[0], pPos[1], pPos[2]))
        {
            format(str, sizeof(str), "[Whisper] %s: %s", pname, params);
            SendClientMessage(i, -1, str);
        }
    }
    return 1;
}
Explain:

pawn Code:
new pname[MAX_PLAYER_NAME], str[128], Float:pPos[3];
pname will be the name of player who use /whisper
str will be use to send a whisper message
pPos[3] will be use to get the player position (who use /whisper)

pawn Code:
if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, -1, "Syntax: /whisper <text>");
If player types empty this message will be sent. s[128] means string[size]

pawn Code:
GetPlayerName(playerid, pname, sizeof(pname));
GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
like i mention above pname will be use for getting players name
like i mention above ppos will be use for getting player pos
Note: In using GetPlayerPos, there must be Float tag in new pPos[3];

pawn Code:
for(new i = 0; i < MAX_PLAYERS; i++)
looping all players

pawn Code:
if(IsPlayerInRangeOfPoint(i, 10.0, pPos[0], pPos[1], pPos[2]))
will check if a player is near in player's position with in float:distance 10.0, edit the float:distance 10.0

pawn Code:
format(str, sizeof(str), "[Whisper] %s: %s", pname, params);
like i mention above, str will use for sending whisper, we use str in format

pawn Code:
SendClientMessage(i, -1, str);
will sent to the players who are near in player's position with in float:distance 10.0, the message will be sent is the formatted string

Note: -1 is not a invalid color, -1 means COLOR_WHITE, change -1 to your color defines

Finish:

pawn Code:
CMD:whisper(playerid, params[])
{
    new pname[MAX_PLAYER_NAME], str[128], Float:pPos[3];
    if(sscanf(params, "s[128]", params)) return SendClientMessage(playerid, -1, "Syntax: /whisper <text>");
    GetPlayerName(playerid, pname, sizeof(pname));
    GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerInRangeOfPoint(i, 10.0, pPos[0], pPos[1], pPos[2]))
        {
            format(str, sizeof(str), "[Whisper] %s: %s", pname, params);
            SendClientMessage(i, -1, str);
        }
    }
    return 1;
}
Credits to Y_Less for sscanf
Credits to Zeex for zcmd
and Credits to Me for tutorial

Have fun modifying your own made /whisper!


Re: /whisper (sscanf/zcmd) - Mimic - 18.06.2012

pawn Code:
for(new i = 0; i < MAX_PLAYERS; i++)
Maybe you should go in further depth about looping? Beginners won't know how that works just because you said it's a loop, other than that, nice tutorial.


Re: /whisper (sscanf/zcmd) - CoDeZ - 28.06.2012

This is what i've been looking for
Thanks