Bem, eu me chamo Yruan, hoje trago a vocês um sistema de colocar jogadores dentro do porta malas de um veiculo, ele é um sistema muito simples ainda não coloquei a verificação se o veiculo tem porta malas ou não.
- Código:
new pVeiculoProximo[MAX_PLAYERS];
new bool:PlayerInPortaMalas[MAX_PLAYERS];
CMD:pmalas(playerid, params[])
{
new id, Float:P[3];
GetPlayerPos(playerid, P[0], P[1], P[2]);
if(sscanf(params, "u", id))
{
SendClientMessage(playerid, VERMELHOs, "Uso incorreto /pmalas [id].");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
else if(IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: Para esta a��o, voc� deve sair do ve�culo.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
else if(!IsPlayerInRangeOfPoint(id, 3.0, P[0], P[1], P[2]))
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: Voc� n�o est� perto do jogador.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
else if(PlayerInPortaMalas[id] == true)
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: Este jogador j� est� no porta-malas.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
pVeiculoProximo[id] = VeiculoProximo(playerid);
PlayerInPortaMalas[id] = true;
TogglePlayerSpectating(id, 1);
PlayerSpectateVehicle(id, pVeiculoProximo[id]);
SendClientMessage(id, -1, "{6E6E6E} Voc� foi colocado no porta-malas.");
SendClientMessage(playerid, -1, "{6E6E6E} Voc� colocou algu�m no porta malas.");
SendClientMessage(playerid, -1, "{6E6E6E} Para tirar o jogador do porta-malas, use \"/tmalas [id]\".");
return true;
}
CMD:tmalas(playerid, params[])
{
new id;
if(sscanf(params, "u", id))
{
SendClientMessage(playerid, VERMELHOs, "Uso incorreto /tmalas [id].");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
else if(IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: Para esta a��o, voc� deve sair do ve�culo.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
else if(PlayerInPortaMalas[id] == false)
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: Este jogador n�o est� no porta-malas.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
pVeiculoProximo[playerid] = VeiculoProximo(playerid);
if(pVeiculoProximo[playerid] != pVeiculoProximo[id])
{
SendClientMessage(playerid, VERMELHOs, "[Erro]: O jogador n�o est� neste ve�culo.");
GameTextForPlayer(playerid, "~r~~r~Erro", 5000, 1);
return true;
}
new Float:x, Float:y, Float:z;
GetPosBehindVehicle(pVeiculoProximo[id], x, y, z, 1.0);
TogglePlayerSpectating(id, 0);
SetPlayerPos(id, x, y, z);
PlayerInPortaMalas[id] = false;
SendClientMessage(id, -1, "{6E6E6E} Voc� foi tirado do porta-malas.");
SendClientMessage(playerid, -1, "{6E6E6E} Voc� tirou algu�m no porta malas.");
return true;
}
stock GetPosBehindVehicle (vehicleid, &Float:x, &Float:y, &Float:z, Float:offset=0.5)
{
new Float:vehicleSize[3], Float:vehiclePos[3];
GetVehiclePos(vehicleid, vehiclePos[0], vehiclePos[1], vehiclePos[2]);
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE,vehicleSize[0],vehicleSize[1], vehicleSize[2]);
GetXYBehindVehicle(vehicleid, vehiclePos[0], vehiclePos[1], (vehicleSize[1]/2)+offset);
x = vehiclePos[0];
y = vehiclePos[1];
z = vehiclePos[2];
return 1;
}
GetXYBehindVehicle(vehicleid, &Float:q, &Float:w, Float:distance)
{
new Float:a;
GetVehiclePos(vehicleid, q, w, a);
GetVehicleZAngle(vehicleid, a);
q += (distance * -floatsin(-a, degrees));
w += (distance * -floatcos(-a, degrees));
}
stock VeiculoProximo(playerid)
{
new Float:X, Float:Y, Float:Z, id = -1;
for(new I = 1; I < GetVehiclePoolSize()+1; I++)
{
GetVehiclePos(I, X, Y, Z);
if(IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z))
{
id = I;
break;
}
}
return id;
}