[AJUDA] /entrar na ambulancia
#1

Antes de mais boa tarde a todos.
Gostava que alguйm me conseguisse ajudar a fazer um simples comando de /entrar na ambulвncia.
Basicamente, eu tenho um interior para a ambulвncia, e queria que um player que chegasse na parte de trбs da ambulвncia e escrevesse o comando /entrar, aparecesse no interior que tenho para a ambulancia, e que quando fizesse /sair, aparecesse outra vez atrбs da ambulвncia.

Obrigado pela colaboraзгo.
Reply
#2

pawn Код:
if(strcmp(cmd, "/entrar", true) == 0)
{
    SetPlayerPos(playerid, X, Y, Z);
    SetPlayerInterior(playerid, 1);
    return 1;
}
й isto ?
Reply
#3

no comando de /entrar
pawn Код:
new Float:x,Float:y:Float:z;
GetPlayerPos(playerid,x,y,z);
SetPlayerPos(playerid,DX,DY,DZ);
SetPlayerInterior(playerid,INTERIORAMBULANCIA);
no SetPlayerPos,muda respectivamente de DX para posiзao X,dentro do interior...
no comando de /sair
pawn Код:
SetPlayerPos(playerid,x,y,z);
SetPlayerInterior(playerid,0);
e perigoso nao dar certo,porque usei GetPlayerPos em um comando e apenas usei SetPlayerPos naquela posiзao em outro comando,mais nao custa tentar,testa e avisa ai.
Reply
#4

pawn Код:
#include <zcmd>

stock CheckPlayerDistanceToVehicle(Float:radi, playerid, vehicleid)
{/* Thanks for whoever made this function */
    if(IsPlayerConnected(playerid))
    {
        new Float:PX,Float:PY,Float:PZ,Float:CX,Float:CY,Float:CZ;
        GetPlayerPos(playerid,PX,PY,PZ);
        GetVehiclePos(vehicleid, CX,CY,CZ);
        new Float:CDistance = (CX-PX)*(CX-PX)+(CY-PY)*(CY-PY)+(CZ-PZ)*(CZ-PZ);
        if(CDistance <= radi*radi)
        {
            return 1;
        }
    }
    return 0;
}

CMD:entrar(playerid, params[])
{
    new contador, resultado;
    for(new i; i != MAX_VEHICLES; i++)
    {
        new distance = CheckPlayerDistanceToVehicle(4.4, playerid, i);
        if(distance)
        {
            resultado = i;
            if(GetVehicleModel(i) == 416) contador++;
        }
    }
    switch(contador)
    {
        case 0:
        {
            SendClientMessage(playerid, -1, "Nenhuma ambulвncia prуxima.");
        }

        case 1:
        {
            SendClientMessage(playerid, -1, "Vocк entrou na ambulвncia.");
            /* Coordenadas & Interiorid do interior. */
            SetPlayerInterior(playerid, 0);
            SetPlayerPos(playerid, 0, 0, 0);
            SetPVarInt(playerid, "AmbID", resultado);
            SetPVarInt(playerid, "isPlayerInAmbulance", 1);
            SetPlayerVirtualWorld(playerid, resultado);
        }
       
        default:
        {
            SendClientMessage(playerid, -1, "Tem mais de uma ambulвncia prуxima.");
        }
    }
    return 1;
}

CMD:sair(playerid, params[])
{
    if(!GetPVarInt(playerid, "isPlayerInAmbulance"))
        return SendClientMessage(playerid, -1, "Vocк nгo estб em uma ambulвncia.");
    SendClientMessage(playerid, -1, "Vocк saiu da ambulвncia.");
    new Float:vPos[3];
    GetVehiclePos(GetPVarInt(playerid, "AmbID"), vPos[0], vPos[1], vPos[2]);
    SetPlayerPos(playerid, vPos[0]+1.2, vPos[1], vPos[2]+1);
    SetPlayerVirtualWorld(playerid, 0);
    DeletePVar(playerid, "isPlayerInAmbulance");
    DeletePVar(playerid, "AmbID");
    return 1;
}
Reply
#5

Obrigado Larceny!
Reply
#6

larceny, use isto:

pawn Код:
IsPlayerInRangeOfVehicle(playerid, Float:radi, vehicleid)
{

    static
        Float:PX,
        Float:PY,
        Float:PZ,
        Float:CX,
        Float:CY,
        Float:CZ
    ;

    GetPlayerPos(playerid,PX,PY,PZ);
    GetVehiclePos(vehicleid, CX,CY,CZ);
    return (CX-PX)*(CX-PX)+(CY-PY)*(CY-PY)+(CZ-PZ)*(CZ-PZ) < radi*radi;
}
Talvez este tambйm:

pawn Код:
IsPlayerInRangeOfVehicle(playerid, Float:radi, vehicleid)
{

    static
        Float:CX,
        Float:CY,
        Float:CZ
    ;

    GetVehiclePos(vehicleid, CX,CY,CZ);

    return IsPlayerInRangeOfPoint(playerid, radi, CX, CY, CZ);
}
Melhor, й.
Obviamente.
Reply
#7

Pessoal, sem querer ser ingrato, nгo jб existe uma callback nativa do sa-mp que faz isto? certo que ela sу pegar a cordenada atй um certo ponto, mais editando ela poderia deixб-la para um certo player.

pawn Код:
native Float:GetPlayerDistanceFromPoint(playerid, Float:X, Float:Y, Float:Z);
native Float:GetVehicleDistanceFromPoint(vehicleid, Float:X, Float:Y, Float:Z);
https://sampforum.blast.hk/showthread.php?tid=271586
Reply
#8

ah sim, somente dei uma olhada na nomeclatura da publica
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)