Cуmo obtengo esa posiciуn?
#1

Buenas, estoy elaborando un cуdigo para un trabajo de Camionero diferente desde 0, bien, todo estб saliendo bien POR EL MOMENTO, acб me quedй estacando, no se me ocurre como hacer lo siguiente; me gustarнa saber como obtener la posiciуn de la parte trasera de este camiуn(Boxville), justo debajo de las puertas traseras propias para marcar un checkpoint que serб indicativo de que el jugador llenarб el camiуn con cargamento.

ACБ INDICADO;

http://imgur.com/a/6rdpa

Gracias de antemano.
Reply
#2

Es sencillo, solo debes obtener la posiciуn del coche el cual ocupas y luego para saber la coordenada de las puertas debes restar el eje Y. Acб te hice un script de ejemplo:

Код:
CMD:test(playerid, params[])
{
	if(!IsPlayerInAnyVehicle(playerid))
	    return SendClientMessage(playerid, -1, "No estбs en ningъn vehнculo");
	    
	new
	    vehicleid,
	    Float:Pos[3],
		Float:pos;
		
	if(sscanf(params,"f", pos))
	    return SendClientMessage(playerid, -1, "USO: /test [Variable flotante]");
	    
	vehicleid = GetPlayerVehicleID(playerid);
	
	GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);

	DisablePlayerCheckpoint(playerid);
	SetPlayerCheckpoint(playerid, Pos[0], Pos[1]-pos, Pos[2], 1.0);
	return 1;
}
Lo hice con sscanf para que veas cuanto podes restarle al eje Y para que te quede perfecto. Colocando la variable flotante en 3.2 te quedarнa perfectamente como queres, es decir, de esta manera:
Код:
SetPlayerCheckpoint(playerid, Pos[0], Pos[1]-3.2, Pos[2], 1.0);
Reply
#3

Quote:
Originally Posted by Juance
Посмотреть сообщение
Es sencillo, solo debes obtener la posiciуn del coche el cual ocupas y luego para saber la coordenada de las puertas debes restar el eje Y. Acб te hice un script de ejemplo:

Код:
CMD:test(playerid, params[])
{
	if(!IsPlayerInAnyVehicle(playerid))
	    return SendClientMessage(playerid, -1, "No estбs en ningъn vehнculo");
	    
	new
	    vehicleid,
	    Float:Pos[3],
		Float:pos;
		
	if(sscanf(params,"f", pos))
	    return SendClientMessage(playerid, -1, "USO: /test [Variable flotante]");
	    
	vehicleid = GetPlayerVehicleID(playerid);
	
	GetVehiclePos(vehicleid, Pos[0], Pos[1], Pos[2]);

	DisablePlayerCheckpoint(playerid);
	SetPlayerCheckpoint(playerid, Pos[0], Pos[1]-pos, Pos[2], 1.0);
	return 1;
}
Lo hice con sscanf para que veas cuanto podes restarle al eje Y para que te quede perfecto. Colocando la variable flotante en 3.2 te quedarнa perfectamente como queres, es decir, de esta manera:
Код:
SetPlayerCheckpoint(playerid, Pos[0], Pos[1]-3.2, Pos[2], 1.0);
Esto serнa suponiendo que el vehiculo estй en direcciуn al norte, lo cual no es adecuado. Si no me equivoco hay includes con funciones que pueden sacar el OffSet del vehнculo, buscalos por el foro.
Reply
#4

Quote:
Originally Posted by Troydere
Посмотреть сообщение
Esto serнa suponiendo que el vehiculo estй en direcciуn al norte, lo cual no es adecuado. Si no me equivoco hay includes con funciones que pueden sacar el OffSet del vehнculo, buscalos por el foro.
Tenes razуn, no me habнa fijado en ese detalle.
Reply
#5

Estuve averiguando en el foro y no he encontrado nada, obviamente en la secciуn inglesa.
Reply
#6

https://sampforum.blast.hk/showthread.php?tid=446462

https://github.com/grasmanek94/GPB/b...icleMatrix.inc
Reply
#7

De nada, suerte. Puedes basarte con esto.
Код:
stock GetVehicleBoot(vehicleid, &Float:x, &Float:y, &Float:z)
{
    if (!GetVehicleModel(vehicleid) || vehicleid == INVALID_VEHICLE_ID)
        return (x = 0.0, y =0.0, z = 0.0), 0;

    static
        Float:pos[7];

    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, pos[0], pos[1], pos[2]);
    GetVehiclePos(vehicleid, pos[3], pos[4], pos[5]);
    GetVehicleZAngle(vehicleid, pos[6]);

    x = pos[3] - (floatsqroot(pos[1] + pos[1]) * floatsin(-pos[6], degrees));
    y = pos[4] - (floatsqroot(pos[1] + pos[1]) * floatcos(-pos[6], degrees));
    z = pos[5];
    return true;
}
CMD:moneria(playerid, params[])
{
    static
        Float:fX,
        Float:fY,
        Float:fZ;
    GetVehicleBoot(GetPlayerVehicleID(playerid), fX, fY, fZ);
    SetPlayerCheckpoint(playerid, fX, fY, fZ, 1.0);
    return true;
}
Reply
#8

Hecho, +REP a todos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)