20.02.2014, 21:48
How can I make if players are talking/writing in vehicle only driver and every passenger in that vehicle will receive message?
if(strcmp(cmd,"/cw",true)==0)
{
if(IsSpawned[playerid] == 0) {
SendClientMessage(playerid, COLOR_ERROR, "You are dead. You cannot use this command");
return 1;
}
if(!IsPlayerInAnyVehicle(playerid)) {
SendClientMessage(playerid, COLOR_ERROR, "You not in any vehicle. You cannot use this command");
return 1;
}
if(strlen(cmdtext) <= 4) {
SendClientMessage(playerid,COLOR_ERROR,"USAGE: /cw (msg)");
return 1;
}
new cwhisperid = GetPlayerVehicleID(playerid);
new output[150];
new pname[24];
GetPlayerName(playerid, pname, 24);
strmid(output,cmdtext,3,strlen(cmdtext));
format(string, sizeof(string), "(CAR WHISPER): %s(%d) %s",pname,playerid,output);
printf("%s", string);
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerInAnyVehicle(i))
{
if(GetPlayerVehicleID(i) == cwhisperid)
{
format(string, sizeof(string), "(CAR WHISPER): %s(%d) %s",pname,playerid,output);
SendClientMessage(i,COLOR_YELLOW,string);
}
}
}
return 1;
}
public OnPlayerText(playerid, text[])
{
new vehicleid = GetPlayerVehicleID(playerid);
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, sizeof(Name));
new string[256];
for(new i=0;i<MAX_PLAYERS;i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInVehicle(i, vehicleid))
{
if(Carinfo[vehicleid][VehWin] == 0) // closed
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
format(string, sizeof(string), "Driver %s: %s",Name,text);
SendClientMessage(i,-1,string);
return 0;
}
else
{
format(string, sizeof(string), "Passenger %s: %s",Name,text);
SendClientMessage(i,-1,string);
return 0;
}
}
if(Carinfo[vehicleid][VehWin] == 1) // opened
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
format(string, sizeof(string), "Driver %s: %s",Name,text);
ProxDetector(8.0, playerid, string, COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE); // Radius need to be checked..
return 0;
}
else
{
format(string, sizeof(string), "Passenger %s: %s",Name,text);
ProxDetector(8.0, playerid, string, COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE,COLOR_DBLUE); // Radius need to be checked..
return 0;
}
}
}
}
}
return 1;
}
Originally Posted by Mionee
https://sampforum.blast.hk/showthread.php?tid=79709
Something like this (using zcmd and sscanf): pawn Код:
|
CMD:carmsg(playerid, params[])
{
new string[128], text[100];
if(sscanf(params, "s[100]", text)) return SendClientMessage(playerid, -1, "USAGE: /carmsg [text]"); // first of all, you don't need to use sscanf here
for(new i = 0; i < MAX_PLAYERS; i ++) // secondly, you shouldn't use a for() loop here; you should encourage other people to use foreach (or y_iterate, same thing)
{
if(IsPlayerConnected(i)) // not needed if you use foreach
{
if(IsPlayerInVehicle(i, GetPlayerVehicleID(playerid))) // this is wrong, too; don't use GetPlayerVehicleID(playerid) more than once if you don't have to!
{
format(string, sizeof(string), "[%s]: %s", GetPlayerName(playerid, string, sizeof(string)), text);
SendClientMessage(i, -1, string);
return 1; // this ends the loop, so only one player is going to get the message
}
}
}
return 1;
}
// correct code:
CMD:carmsg(playerid, params[])
{
new
szName[MAX_PLAYER_NAME],
szString[128],
vehicleID = GetPlayerVehicleID(playerid);
if(isnull(params)) return SendClientMessage(playerid, -1, "SYNTAX: /carmsg [text]");
if(vehicleID == 0) return SendClientMessage(playerid, -1, "You aren't in a vehicle, bruh!");
GetPlayerName(playerid, szName, sizeof(szName));
format(szString, sizeof(szString), "[%s]: %s", szName, params);
foreach(new i : Player)
{
if(IsPlayerInVehicle(i, vehicleID)) SendClientMessage(i, -1, szString);
}
return 1;
}
public OnPlayerText(playerid, text[])
{
if(IsPlayerInAnyVehicle(playerid))
{
new str[150], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name)), car = GetPlayerVehicleID(playerid);
format(str, sizeof(str), "%s(%d) [CAR]: %s", name, playerid, text);
for(new i = 0; i < MAX_PLAYERS; i++) //Foreach recommended.
{
if(!IsPlayerConnected(i)) continue;
if(!IsPlayerInVehicle(i, car)) continue;
SendClientMessage(i, 0xFFFF00FF, str);
}
}
else //They aren't in a car...
{
//Rest of code...
}
return 0;
}
I'll just make it simple for you.
pawn Код:
|
public OnPlayerText(playerid, text[])
{
if(IsPlayerInAnyVehicle(playerid))
{
new str[150], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name)), car = GetPlayerVehicleID(playerid);
format(str, sizeof(str), "%s(%d) [CAR]: %s", name, playerid, text);
for(new i = 0; i < MAX_PLAYERS; i++) //Foreach recommended.
{
if(!IsPlayerConnected(i)) continue;
if(!IsPlayerInVehicle(i, car)) continue;
SendClientMessage(i, 0xFFFF00FF, str);
}
}
else return 1;
return 0;
}