[SOLVED]Megaphone
#1

Hi,

I was given this code for Megaphone,
And well, Its not working right :P

pawn Код:
dcmd_megaphone(playerid, params[])
{
        new
        string[128],
        message[104];

        if(sscanf(params, "s", message))
        {
            SendClientMessage(playerid, COLOR_RED, "Usage: /megaphone [message]");
        }
        else if(GetPlayerTeam(playerid) == TEAM_POLICESF) return SendClientMessage(playerid, COLOR_RED, "You are not a Cop");
        {
            format(string, sizeof(string), "Officer [%s]: %s!", GetPlayerNameEx(playerid), message);
            SendClientMessage(playerid, COLOR_YELLOW, string);
            for(new i = 0; i < MAX_PLAYERS; i++)
        {
            while(GetDistanceBetweenPlayers(playerid, i) < 7.0)
        {
            SendClientMessage(i, COLOR_YELLOW, string);
        }
    }
}
        return 1;
}
It just spams this on my chatbox,

Officer [Torran]: !

On every line of my chatbox,
How to fix,
Reply
#2

Btw, I dont know wether it works if i type a message,
Because i just typed /megaphone
Reply
#3

Код:
if(strcmp(cmd, "/megaphone", true) == 0 || strcmp(cmd, "/m", true) == 0)
{
new tmpcar = GetPlayerVehicleID(playerid);
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_GRAD2, "USAGE: (/m)egaphone [megaphone chat]");
return 1;
}
if (gTeam[playerid] != 2)
{
SendClientMessage(playerid, COLOR_GRAD2, " you are not part of a team");
return 1;
}
if(!IsACopCar(tmpcar))
{
SendClientMessage(playerid, COLOR_GRAD2, " you are not in a police vehicle");
return 1;
}
format(string, sizeof(string), "[Officer %s:o< %s]", sendername, result);
ProxDetector(60.0, playerid, string,COLOR_YELLOW,COLOR_YELLOW,COLOR_YELLOW,COLOR_YELLOW,COLOR_YELLOW);
printf("%s", string);
return 1;
}
just use that. works perfect, and its a megaphone from an rrp script. so yah, should work.
edit it to your own needs
Reply
#4

Cant be bothered, Id like to use the one i have,
All i need fixing is this spamming problem
Reply
#5

Also if i type /megaphone test
Nothing happens, Or if it does,
It just spams again, But with ! and Not my message,
And then i crash
Reply
#6

format(string, sizeof(string), "Officer [%s]: %s!", GetPlayerNameEx(playerid), message);

maybe change message to result..
Reply
#7

Use if(condition) instead of while(condition). I just found out using while spams the chat.
Reply
#8

Like SAWC said, while will check if something is in range of the point and if the condition doesn't change it will still send the message over and over. Using if passes the message once and only once per person if they are in the range of the player.
Reply
#9

Ok now,

If i type /megaphone,
it says the usage,

Then

Officer [Torran]: !

Twice

And if i say, /megaphone test

It says

Officer [Torran]: Test!

Twice??
Reply
#10

pawn Код:
dcmd_megaphone(playerid, params[])
{
        new
        string[128],
        message[104];

        if(sscanf(params, "s", message))
        {
            SendClientMessage(playerid, COLOR_RED, "Usage: /megaphone [message]");
        }
        else if(GetPlayerTeam(playerid) == TEAM_POLICESF) return SendClientMessage(playerid, COLOR_RED, "You are not a Cop");
        {
            format(string, sizeof(string), "Officer [%s]: %s!", GetPlayerNameEx(playerid), message);
            SendClientMessage(playerid, COLOR_YELLOW, string); // take this line out
            for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(GetDistanceBetweenPlayers(playerid, i) < 7.0)
        {
            SendClientMessage(i, COLOR_YELLOW, string);
        }
    }
}
        return 1;
}
Remove that line.

For the first error, you'll have to change:
pawn Код:
else if(GetPlayerTeam(playerid) == TEAM_POLICESF) return SendClientMessage(playerid, COLOR_RED, "You are not a Cop");
For
pawn Код:
else if(GetPlayerTeam(playerid) != TEAM_POLICESF) return SendClientMessage(playerid, COLOR_RED, "You're not a cop");
else
{
  //command effect
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)