#define FILTERSCRIPT
#include <a_samp>
public OnFilterScriptInit()
{
print("\n----------------------------------------------");
print(" Teleport-to-player via Scoreboard by WizardCM");
print("----------------------------------------------\n");
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(clickedplayerid, X, Y, Z);
if (IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid), X+5, Y+5, Z);
else SetPlayerPos(playerid, X+1, Y+1, Z);
return 1;
}
When teleporting to someone, check if the other player is in a car. If they are, check if there are any passenger seats available. If there are, teleport to their car as a passenger. Otherwise just teleport normally. |
GetVehiclePassengers(vehicleid, passengers[4])
{
for(new i = 0; i < 4; i ++)
passengers[i] = -1;
for(new i = 0; i < MAX_PLAYERS; i ++)
if(GetPlayerVehicleID(i) == vehicleid)
passengers[GetPlayerVehicleSeat(i)] = i;
}
if(IsPlayerInAnyVehicle(player_tele_target)) //To detect if the target is in a vehicle
{
new passengers[4];
GetVehiclePassengers(GetPlayerVehicleID(player_tele_target), passengers);
//GetVehicePassengers fills the array with the playerid at the specific seat (passengers[0] is the driver etc)
//and with -1 if it is free, so check for -1 with a loop
for(new i = 0; i < 4; i ++)
{
if(passengers[i] == -1) PutPlayerInVehicle(playerid, GetPlayerVehicleID(player_tele_target), i);
//This will put the player on the first free seat
}
}
You can use this function, to detect where there is a free seat in the car, so no one gets kicked, if there are other passengers:
~snip (Still did not test it, even i posted it sometimes already ) It is used like this: ~snip |
#include <a_samp>
GetVehiclePassengers(vehicleid, passengers[4])
{
for(new i = 0; i < 4; i ++)
passengers[i] = -1;
for(new i = 0; i < MAX_PLAYERS; i ++)
if(GetPlayerVehicleID(i) == vehicleid)
passengers[GetPlayerVehicleSeat(i)] = i;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(clickedplayerid, X, Y, Z);
if(IsPlayerInAnyVehicle(clickedplayerid)) //To detect if the target is in a vehicle
{
new passengers[4];
GetVehiclePassengers(GetPlayerVehicleID(clickedplayerid), passengers);
//GetVehicePassengers fills the array with the playerid at the specific seat (passengers[0] is the driver etc)
//and with -1 if it is free, so check for -1 with a loop
for(new i = 0; i < 4; i ++)
{
if(passengers[i] == -1) PutPlayerInVehicle(playerid, GetPlayerVehicleID(clickedplayerid), i);
//This will put the player on the first free seat
}
}
if (IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid), X+5, Y+5, Z);
else SetPlayerPos(playerid, X+1, Y+1, Z);
return 1;
}