//------------------------------------------------------------------------------
// Simple car commands FilterScritp
// packed indented and adapted by zeruel_angel
// CREDITS TO
// pekay http://forum.sa-mp.com/index.php?topic=26414.0
// Allan (/lock /unlock and strtok) http://forum.sa-mp.com/index.php?topic=2868.msg18858#msg18858
// Joshua Yu (/purchase and /callmycar) http://forum.sa-mp.com/index.php?topic=2868.msg22605#msg22605
// Alfredk (/eject) http://forum.sa-mp.com/index.php?topic=26402
//------------------------------------------------------------------------------
#include <a_samp>
#define COLOR_GREEN 0x33AA33AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_RED 0xAA3333AA
#define COLOR_WHITE 0xFFFFFFAA
#define CAR_COST 50000
new owner[MAX_VEHICLES]={-1,...};
new ownedcar[MAX_PLAYERS]={-1,...};
new lockedCar[MAX_VEHICLES]={-1,...};
new wasInVehicle[MAX_PLAYERS]={-1,...};
//------------------------------------------------------------------------------
public OnFilterScriptInit()
{
print(" ");
print(" ---------------------------------- ");
print(" Car Commands Filterscript ");
print(" Packed indented and adapted ");
print(" by zeruel_angel ");
print(" Credits to: ");
print(" pekay, Allan, Joshua Yu, Alfredk ");
print(" ---------------------------------- ");
print(" ");
for (new i=0;i<MAX_PLAYERS;i++)
{
ownedcar[i]=-1;
wasInVehicle[i]=-1;
}
for (new i=0;i<MAX_VEHICLES;i++)
{
owner[i]=-1;
lockedCar[i]=0;
}
}
//------------------------------------------------------------------------------
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid,COLOR_YELLOW,"AYUDA: usa /carhelp para conocer los comandos de los autos");
for (new i=0;i<700;i++)
{
if (lockedCar[i]==1)
{
SetVehicleParamsForPlayer( i, playerid, 0, 1);
}
}
}
//------------------------------------------------------------------------------
public OnPlayerCommandText(playerid, cmdtext[])
{
new idx;
new cmd[255];
new tmp[255];
cmd = strtok(cmdtext,idx);
if (strcmp(cmdtext, "/carhelp", true)==0)
{
SendClientMessage(playerid, COLOR_GREEN,"Comandos disponibles:");
SendClientMessage(playerid, COLOR_YELLOW,"/traba, /destraba, /ComprarCoche, /VenderCoche, /LlamarCoche, /eject, /ejectall");
return 1;
}
if (strcmp(cmdtext, "/traba", true)==0)
{
if (IsPlayerInAnyVehicle(playerid))
{
new State=GetPlayerState(playerid);
if (State!=PLAYER_STATE_DRIVER)
{
SendClientMessage(playerid,0xFFFF00AA,"Solo el conductor puede trabar las puertas");
return 1;
}
lockedCar[GetPlayerVehicleID(playerid)]=1;
new i;
for (i=0;i<MAX_PLAYERS;i++)
{
if(i != playerid)
{
SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid),i, 0, 1);
}
}
SendClientMessage(playerid, 0xFFFF00AA, "Vehiculo cerrado!");
new Float:pX, Float:pY, Float:pZ;
GetPlayerPos(playerid,pX,pY,pZ);
PlayerPlaySound(playerid,1056,pX,pY,pZ);
}
else
{
SendClientMessage(playerid, 0xFFFF00AA, "No estas en un vehiculo!");
}
return 1;
}
if (strcmp(cmdtext, "/destraba", true)==0)
{
if (IsPlayerInAnyVehicle(playerid))
{
new State=GetPlayerState(playerid);
if (State!=PLAYER_STATE_DRIVER)
{
SendClientMessage(playerid,0xFFFF00AA,"Solo el conductor puede destrabar las puertas");
return 1;
}
new i;
lockedCar[GetPlayerVehicleID(playerid)]=0;
for (i=0;i<MAX_PLAYERS;i++)
{
SetVehicleParamsForPlayer(GetPlayerVehicleID(playerid),i, 0, 0);
}
SendClientMessage(playerid, 0xFFFF00AA, "Vehiculo destrabado!");
new Float:pX, Float:pY, Float:pZ;
GetPlayerPos(playerid,pX,pY,pZ);
PlayerPlaySound(playerid,1057,pX,pY,pZ);
}
else
{
SendClientMessage(playerid, 0xFFFF00AA, "No estas en un vehiculo!");
}
return 1;
}
if (strcmp(cmdtext, "/ComprarCoche", true)==0) // to set the vehicle that you register to be teleported
{
if (GetPlayerMoney(playerid) < CAR_COST)
{
SendClientMessage(playerid,COLOR_YELLOW,"No tienes suficiente dinero para comprar un auto");
return 1;
}
if (!(IsPlayerInAnyVehicle(playerid)))
{
SendClientMessage(playerid,COLOR_YELLOW,"No estas en un vehiculo!.");
return 1;
}
if (owner[GetPlayerVehicleID(playerid)]!=-1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Este vehiculo ya tiene dueño");
return 1;
}
if (ownedcar[playerid]!=-1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Ya tienes un vehiculo, usa /venderCoche si lo quieres vender para comprar este");
return 1;
}
ownedcar[playerid] = GetPlayerVehicleID(playerid);
owner[ownedcar[playerid]] = playerid;
SendClientMessage(playerid,COLOR_YELLOW,"FELICITACIONES! has comprado un vehiculo");
GivePlayerMoney(playerid,-CAR_COST);
return 1;
}
if (strcmp(cmdtext, "/VenderCoche", true)==0)
{
if (ownedcar[playerid]==-1)
{
SendClientMessage(playerid,COLOR_YELLOW,"NO posees ningun vehiculo...");
return 1;
}
if (lockedCar[ownedcar[playerid]]==1)
{
lockedCar[ownedcar[playerid]]=0;
for (new i=0;i<MAX_PLAYERS;i++)
{
SetVehicleParamsForPlayer(ownedcar[playerid],i, 0, 0);
}
}
owner[ownedcar[playerid]] = -1;
ownedcar[playerid] = -1;
SendClientMessage(playerid,COLOR_YELLOW,"Has vendido tu vehiculo, recuperas la mitad de tu dinero");
GivePlayerMoney(playerid,CAR_COST/2);
return 1;
}
if (strcmp(cmdtext, "/LlamarCoche", true)==0)
{
if (ownedcar[playerid] != -1)
{
if (GetPlayerMoney(playerid) < 1000)
{
SendClientMessage(playerid,COLOR_YELLOW,"Lo sentimos mucho, pero no tienes dinero suficiente para ese servicio.");
}
else
{
new Float:playerpos[4];
GetPlayerPos(playerid,playerpos[0],playerpos[1],playerpos[2]);
GetPlayerFacingAngle(playerid,playerpos[3]);
SetVehicleZAngle(ownedcar[playerid],playerpos[3]+90.0);
SetVehiclePos(ownedcar[playerid],playerpos[0]+3.0*floatsin(-playerpos[3],degrees),playerpos[1]+3.0*floatcos(-playerpos[3],degrees),playerpos[2]+0.5); // This one is cool that I am using trigo functions to set the vehicle just before you.
SendClientMessage(playerid,COLOR_YELLOW,"Gracias por usar nuestro servicio, aqui esta tu coche.");
GivePlayerMoney(playerid,-1000);
}
}
}
if (strcmp(cmd,"/eject", true)==0){
new vehicleid;
new pid;
new playerstate = GetPlayerState(playerid);
tmp = strtok(cmdtext,idx);
if (!IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid,COLOR_YELLOW,"No estas en un vehiculo");
return 1;
}
if (playerstate == PLAYER_STATE_PASSENGER)
{
SendClientMessage(playerid,COLOR_RED,"Los pasajeros no pueden usar este comando!");
return 1;
}
vehicleid = GetPlayerVehicleID(playerid);
if (!strlen(tmp))
{
SendClientMessage(playerid,COLOR_WHITE,"USo: /eject [playerid]");
return 1;
}
pid = strval(tmp);
if ((!IsPlayerConnected(pid))||(!IsPlayerInVehicle(pid,vehicleid)))
{
SendClientMessage(playerid,COLOR_RED,"Ese jugador no esta en tu vehiculo.");
return 1;
}
else
{
RemovePlayerFromVehicle(pid);
GameTextForPlayer(pid,"~w~Te han ~r~TIRADO ~w~ del vehiculo!!",3000,5);
return 1;
}
}
if (strcmp(cmd,"/ejectall", true)==0){
new vehicleid;
new playerstate = GetPlayerState(playerid);
if (!IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid,COLOR_YELLOW,"No estas en un vehiculo");
return 1;
}
if (playerstate == PLAYER_STATE_PASSENGER)
{
SendClientMessage(playerid,COLOR_RED,"Los pasajeros no pueden usar este comando!");
return 1;
}
vehicleid = GetPlayerVehicleID(playerid);
for (new i=0;i<MAX_PLAYERS;i++)
{
if ((IsPlayerConnected(i))&&(IsPlayerInVehicle(i,vehicleid)))
{
RemovePlayerFromVehicle(i);
GameTextForPlayer(i,"~w~Te han ~r~TIRADO ~w~ del vehiculo!!",3000,5);
return 1;
}
}
}
return 0;
}
//------------------------------------------------------------------------------
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if (newstate==PLAYER_STATE_DRIVER)
{
wasInVehicle[playerid]=GetPlayerVehicleID(playerid);
if ((owner[GetPlayerVehicleID(playerid)]!=-1)&&(owner[GetPlayerVehicleID(playerid)]!=playerid))
{
new name[MAX_PLAYER_NAME];
new msg[256];
GetPlayerName(owner[GetPlayerVehicleID(playerid)],name,sizeof(name));
format(msg,sizeof(msg),"Este vehiculo pertenece a: %s",name);
}
}
if (newstate==PLAYER_STATE_PASSENGER)
{
if ((owner[GetPlayerVehicleID(playerid)]!=-1)&&(owner[GetPlayerVehicleID(playerid)]!=playerid))
{
new name[MAX_PLAYER_NAME];
new msg[256];
GetPlayerName(owner[GetPlayerVehicleID(playerid)],name,sizeof(name));
format(msg,sizeof(msg),"Este vehiculo pertenece a: %s",name);
SendClientMessage(playerid,COLOR_YELLOW,msg);
}
}
if (newstate==PLAYER_STATE_ONFOOT)
{
if ((wasInVehicle[playerid]!=ownedcar[playerid])&&(lockedCar[wasInVehicle[playerid]]==1))
{
lockedCar[GetPlayerVehicleID(playerid)]=0;
for (new i=0;i<MAX_PLAYERS;i++)
{
SetVehicleParamsForPlayer(ownedcar[playerid],i, 0, 0);
}
SendClientMessage(playerid, 0xFFFF00AA, "Vehicle destrabado!");
new Float:pX, Float:pY, Float:pZ;
GetPlayerPos(playerid,pX,pY,pZ);
PlayerPlaySound(playerid,1057,pX,pY,pZ);
}
}
return 1;
}
//------------------------------------------------------------------------------
public OnPlayerDisconnect(playerid, reason)
{
if ((ownedcar[playerid]!=-1)&&(lockedCar[ownedcar[playerid]]=1))
{
lockedCar[ownedcar[playerid]]=0;
for (new i=0;i<MAX_PLAYERS;i++)
{
SetVehicleParamsForPlayer(ownedcar[playerid],i, 0, 0);
}
}
if (ownedcar[playerid]!=-1)
{
owner[ownedcar[playerid]]=-1;
ownedcar[playerid]=-1;
}
wasInVehicle[playerid]=-1;
return 1;
}
//------------------------------------------------------------------------------
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
//------------------------------------------------------------------------------