SA-MP Forums Archive
Is player standing at vehicle's trunk or hood - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Is player standing at vehicle's trunk or hood (/showthread.php?tid=453546)



Is player standing at vehicle's trunk or hood - dominik523 - 25.07.2013

Hey! I want to add to my command /trunk part of the code which will get vehicle's trunk X,Y and Z coordinates. I know I have to use GetVehicleModelInfo and GetVehiclePos, and use sinus with that, but I don't know how. Can anyone please help me? I really want to create that.


Re: Is player standing at vehicle's trunk or hood - Threshold - 25.07.2013

You can always try getting a vehicle's position, getting the X and Y position in front of it, and the X and Y position behind it, see if they're close to one of them, and that's it. I know how to use mathematical things such as 'sin' and 'cos' etc, but I just don't know how to use it in SA-MP terms. I'm probably gonna start learning now and I might be able to get back to you if nobody else does.


Re: Is player standing at vehicle's trunk or hood - redreaper666 - 25.07.2013

new Float:X1,Y1,Z1,X2,Y2,Z2;
GetVehiclePos(vehicleid,X1,Y1,Z1);
GetPlayerPos(playerid,X2,Y2,Z2);

then you need to test:
If(Y2-Y1) = a positive amount then hes at the trunk/hood.
If(Y2-Y1) = a negative amount then hes at the trunk/hood.

should be working like that if the car is at its location always X=0 Y=0 Z=0
-Y is the back of the car
+Y is the front of the car


Re: Is player standing at vehicle's trunk or hood - Threshold - 25.07.2013

Not exactly. It's very dependent on which way the car is facing...


Re: Is player standing at vehicle's trunk or hood - redreaper666 - 25.07.2013

Getvehiclerotation then aswell


Re: Is player standing at vehicle's trunk or hood - [XST]O_x - 25.07.2013

Something like that maybe... but it's hard to know, it's kind of approximate.
pawn Code:
stock GetXYBehindVehicle(vehicleid, &Float:x2, &Float:y2, Float:distance)
{
    new Float:a;
    GetVehiclePos(vehicleid, x2, y2, a);
    GetVehicleZAngle(vehicleid, a);
    x2 += (distance * floatsin(-a+180, degrees));
    y2 += (distance * floatcos(-a+180, degrees));
}

stock GetTrunkPos(vehicleid, &Float: x3, &Float:y3, &Float:z3)
{
    new Float: x, Float: y;
    new Float: sizeX, Float: sizeY, Float:sizeZ[2];
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ[0]);
   
    GetXYBehindVehicle(vehicleid, x, y, sizeY/2);
    x3 = x;
    y3 = y;
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_REAR_BUMPER_Z , sizeX, sizeY, sizeZ[1]);
   
    z3 = (sizeZ[1] + sizeZ[0]/2);
}



Re: Is player standing at vehicle's trunk or hood - dominik523 - 25.07.2013

Quote:
Originally Posted by [XST]O_x
View Post
Something like that maybe... but it's hard to know, it's kind of approximate.
pawn Code:
stock GetXYBehindVehicle(vehicleid, &Float:x2, &Float:y2, Float:distance)
{
    new Float:a;
    GetVehiclePos(vehicleid, x2, y2, a);
    GetVehicleZAngle(vehicleid, a);
    x2 += (distance * floatsin(-a+180, degrees));
    y2 += (distance * floatcos(-a+180, degrees));
}

stock GetTrunkPos(vehicleid, &Float: x3, &Float:y3, &Float:z3)
{
    new Float: x, Float: y;
    new Float: sizeX, Float: sizeY, Float:sizeZ[2];
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ[0]);
   
    GetXYBehindVehicle(vehicleid, x, y, sizeY/2);
    x3 = x;
    y3 = y;
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_REAR_BUMPER_Z , sizeX, sizeY, sizeZ[1]);
   
    z3 = (sizeZ[1] + sizeZ[0]/2);
}
what will those two stocks return?


Re: Is player standing at vehicle's trunk or hood - Misiur - 25.07.2013

Will return nothing, but will store information in variables passed by reference


Re: Is player standing at vehicle's trunk or hood - [XST]O_x - 25.07.2013

Quote:
Originally Posted by dominik523
View Post
what will those two stocks return?
You only need GetTrunkPos.

An example to use:
pawn Code:
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(!strcmp(cmdtext,"/mytrunkpos")) {
    new Float:x, Float:y, Float:z;
    GetTrunkPos(GetPlayerVehicleID(playerid), x, y, z);
    new string[64]; format(string ,sizeof(string), "%.1f, %.1f, %.1f", x, y, z);
    SendClientMessage(playerid, -1, string);
    return 1; }
    return 0;
}



Re: Is player standing at vehicle's trunk or hood - dominik523 - 25.07.2013

so I have something like this:
Code:
{
	new string[128], done, idx;
	new engine, lights, alarm, doors, bonnet, boot, objective;
	if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
	if(PlayerInfo[playerid][pVeh] || PlayerInfo[playerid][pVeh2] || PlayerInfo[playerid][pVeh3] || PlayerInfo[playerid][pVeh4] || PlayerInfo[playerid][pVeh5])
    {
        new Float:vx, Float:vy, Float:vz;
        // veh 1
	    GetTrunkPos(PlayerInfo[playerid][pVeh],vx,vy,vz);
	    if(IsPlayerInRangeOfPoint(playerid,1.0, vx,vy,vz))
	    {
	       ...
	    }
will adding isPlayerInRangeOfPoint after GetTrunkPos work?


Re: Is player standing at vehicle's trunk or hood - [XST]O_x - 25.07.2013

Quote:
Originally Posted by dominik523
View Post
so I have something like this:
Code:
{
	new string[128], done, idx;
	new engine, lights, alarm, doors, bonnet, boot, objective;
	if(!IsPlayerLoggedIn(playerid)) return SendClientMessage(playerid, COLOR_GREY, "You need to login first before using any command.");
	if(PlayerInfo[playerid][pVeh] || PlayerInfo[playerid][pVeh2] || PlayerInfo[playerid][pVeh3] || PlayerInfo[playerid][pVeh4] || PlayerInfo[playerid][pVeh5])
    {
        new Float:vx, Float:vy, Float:vz;
        // veh 1
	    GetTrunkPos(PlayerInfo[playerid][pVeh],vx,vy,vz);
	    if(IsPlayerInRangeOfPoint(playerid,1.0, vx,vy,vz))
	    {
	       ...
	    }
will adding isPlayerInRangeOfPoint after GetTrunkPos work?
It should. Try it for yourself and tell me if it works.
If you want to check how accurate it is, try creating an object in these positions and see if it's created close to the trunk.

EDIT:
pawn Code:
stock GetXYBehindVehicle(vehicleid, &Float:x2, &Float:y2, Float:distance)
{
    new Float:a;
    GetVehiclePos(vehicleid, x2, y2, a);
    GetVehicleZAngle(vehicleid, a);
    x2 += (distance * floatsin(-a+180, degrees));
    y2 += (distance * floatcos(-a+180, degrees));
}

stock GetTrunkPos(vehicleid, &Float: x3, &Float:y3, &Float:z3)
{
    new Float: x, Float: y;
    new Float: sizeX, Float: sizeY, Float:sizeZ[2];
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ[0]);
   
    GetXYBehindVehicle(vehicleid, x, y, sizeY/2);
    x3 = x;
    y3 = y;
   
    GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_REAR_BUMPER_Z , sizeX, sizeY, sizeZ[1]);
   
    z3 = (sizeZ[1] + sizeZ[0] + 3.1);
}
Use this instead. Much more accurate.


Re: Is player standing at vehicle's trunk or hood - dominik523 - 25.07.2013

damn, it won't work :/
It says that I'm not near vehicle. This is part of /trunk:
Code:
if(PlayerInfo[playerid][pVeh] || PlayerInfo[playerid][pVeh2] || PlayerInfo[playerid][pVeh3] || PlayerInfo[playerid][pVeh4] || PlayerInfo[playerid][pVeh5])
    {
        new Float:vx, Float:vy, Float:vz;
        // veh 1
	    GetTrunkPos(PlayerInfo[playerid][pVeh],vx,vy,vz);
	    if(IsPlayerInRangeOfPoint(playerid,1.0, vx,vy,vz))
	    {
	        idx = PlayerInfo[playerid][pVeh];
	        if(IsBike(idx)) return SendClientMessage(playerid, COLOR_GREY, "This vehicle does not have trunk.");
			GetVehicleParamsEx(idx, engine, lights, alarm, doors, bonnet, boot, objective);
			if(!boot)
			{

			    SetVehicleParamsEx(idx, engine, lights, alarm, doors, bonnet, 1, objective);
			    format(string, sizeof(string), "* %s opens their vehicle's trunk.", RPN(playerid));
				SendNearbyMessage(playerid, 15, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
			}
			else
			{
			    SetVehicleParamsEx(idx, engine, lights, alarm, doors, bonnet, 0, objective);
			    format(string, sizeof(string), "* %s closes their vehicle's trunk.", RPN(playerid));
				SendNearbyMessage(playerid, 15, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
			}
			done = 1;
			return 1;
	    }
stocks are the same as you wrote them


Re: Is player standing at vehicle's trunk or hood - [XST]O_x - 25.07.2013

Try enlarging the radius. Try something like 3-4. 1.0 is very tiny and the player almost has to be in the exact same spot.


Re: Is player standing at vehicle's trunk or hood - dominik523 - 25.07.2013

I set it to 3, and it won't work :/


Re: Is player standing at vehicle's trunk or hood - [XST]O_x - 25.07.2013

Use this instead:
https://sampforum.blast.hk/showthread.php?tid=413618


Re: Is player standing at vehicle's trunk or hood - dominik523 - 26.07.2013

Its working! thank you guys so much for helping me.