PDA

View Full Version : DetachObjcetFromPlayer


NeXoR
13/04/2016, 12:19 AM
Is it possible to disable AttachObjectToPlayer without DestroyObject ?

Sew_Sumi
13/04/2016, 05:37 AM
https://wiki.sa-mp.com/wiki/GetObjectPos and https://wiki.sa-mp.com/wiki/GetObjectRot

then

DestroyObject and CreateObject maybe.


If this works, and it doesn't look too bad, you could make a function of it.

Godey
13/04/2016, 10:12 AM
-> CreateObject
-> Attach it to the player
-> Delete the created object (it makes sense, because when the object is deleted, it will automatically un-attach it)

Sew_Sumi
13/04/2016, 12:25 PM
-> CreateObject
-> Attach it to the player
-> Delete the created object (it makes sense, because when the object is deleted, it will automatically un-attach it)

He's wanting to keep the object, hence the not using deleteobject.

NeXoR
13/04/2016, 12:51 PM
He's wanting to keep the object, hence the not using deleteobject.

Exactly

Godey
13/04/2016, 12:54 PM
What do you even mean exactly? Dettach from the player and do what with the object?

Sew_Sumi
13/04/2016, 01:13 PM
What do you even mean exactly? Detach from the player and do what with the object?

Wants it to detatch...


As in walk somewhere with it attached, then when he "detaches" for the object to stay there...



C'mon... You've been doing so well in answering all those threads (I been seeing) then this? :)


Make a function, doing what I said... GetObjectPos GetObjectRot, then DeleteObject, and CreateObject. Just so it appears to stay in the same spot. Could do CreateObject then DeleteObject so it visually doesn't glitch.

Godey
13/04/2016, 01:22 PM
Well in that case, your right..
-> Create object
-> Attach to Player
-> Delete object ( Before deleting, GetObjectPos & GetObjectRot )
-> Create new object ( Use coords & rotation which have stored use those 2 functions)

Thank you for being so observant :D

NeXoR
13/04/2016, 02:14 PM
Well in that case, your right..
-> Create object
-> Attach to Player
-> Delete object ( Before deleting, GetObjectPos & GetObjectRot )
-> Create new object ( Use coords & rotation which have stored use those 2 functions)

Thank you for being so observant :D

Wants it to detatch...


As in walk somewhere with it attached, then when he "detaches" for the object to stay there...



C'mon... You've been doing so well in answering all those threads (I been seeing) then this? :)


Make a function, doing what I said... GetObjectPos GetObjectRot, then DeleteObject, and CreateObject. Just so it appears to stay in the same spot. Could do CreateObject then DeleteObject so it visually doesn't glitch.

Well, It returns to the spawn position
Pics:
http://i.imgur.com/CywzL2E.jpg

http://i.imgur.com/r7myFrK.jpg

Code:
else if(!strcmp(params, "stop", true))
{
new Float:X, Float:Y, Float:Z, Float:RX, Float:RY, Float:RZ;
if(!UsingStretcher[playerid]) return SendClientMessage(playerid, COLOR_GREY, "You are not using any stretcher.");
if(!MovingStretcher[playerid]) return SendClientMessage(playerid, COLOR_GREY, "You are not moving your stretcher.");
MovingStretcher[playerid] = 0;
GetObjectPos(StretcherObj[playerid], X, Y, Z);
GetObjectRot(StretcherObj[playerid], RX, RY, RZ);
DestroyObject(StretcherObj[playerid]);
StretcherObj[playerid] = CreateObject(2146, X, Y, Z, RX, RY, RZ, 100.0);
SendClientMessage(playerid, COLOR_LIGHTRED, "You have stopped moving your stretcher.");
return 1;
}

Godey
13/04/2016, 02:24 PM
DrawDistance is optional, try without it:
StretcherObj[playerid] = CreateObject(2146, X, Y, Z, RX, RY, RZ);

If this doesn't work instead of GetObjectPos, try GetPlayerPos..

NeXoR
13/04/2016, 02:45 PM
DrawDistance is optional, try without it:
StretcherObj[playerid] = CreateObject(2146, X, Y, Z, RX, RY, RZ);

If this doesn't work instead of GetObjectPos, try GetPlayerPos..

First time it spawned above me, Then I changed the X and Z offset to match the AttachObjectToPlayer
Code
GetPlayerPos(playerid, X, Y, Z);
GetObjectRot(StretcherObj[playerid], RX, RY, RZ);
DestroyObject(StretcherObj[playerid]);
X -= 1.00; Z -= 0.50;
StretcherObj[playerid] = CreateObject(2146, X, Y, Z, RX, RY, RZ, 100.0);

But the stretcher spawns behind me (without rotation), How can I store the rotation ?

Godey
13/04/2016, 02:50 PM
Actually you can't,
now you have 2 options
[1]: Bear with random rotation
[2]: Try to fix GetObjectPos

NeXoR
13/04/2016, 02:56 PM
Actually you can't,
now you have 2 options
[1]: Bear with random rotation
[2]: Try to fix GetObjectPos
Got a clue how to do Number 2 ?

Sew_Sumi
13/04/2016, 05:40 PM
This could be something to do with crouching, offsets and a few other bits but this is good progress regardless. ;)

NeXoR
13/04/2016, 06:41 PM
This could be something to do with crouching, offsets and a few other bits but this is good progress regardless. ;)

Should I just use SetPlayerAttachedObject ?

Sew_Sumi
13/04/2016, 06:46 PM
There should be a way of doing this, maybe you should use a blank script, and test a heap to see how you can make this work. Another maybe, to not attach the object to the player, but have the object follow the player using MoveObject and use GetPlayerPos, GetPlayerVelocity and all those bits.


You've got a good plan, and it has been done before, but yea, it's going to take some tweaking.

NeXoR
13/04/2016, 07:00 PM
There should be a way of doing this, maybe you should use a blank script, and test a heap to see how you can make this work. Another maybe, to not attach the object to the player, but have the object follow the player using MoveObject and use GetPlayerPos, GetPlayerVelocity and all those bits.


You've got a good plan, and it has been done before, but yea, it's going to take some tweaking.

I'll try out the MoveObject, thanks for the motivation xD

Which callback should I use ? OnPlayerUpdate ?

Sew_Sumi
13/04/2016, 07:42 PM
Try a timer, more than OnPlayerUpdate. Being that it's a stretcher system it's not like everyone is going to use a stretcher at the same time, you could use OnPlayerUpdate by using it correctly, but for testing purposes, stick to a timer so it doesn't conflict too badly.

Just keep an eye on lag and how the stretcher appears.