View Single Post
Old 28/12/2017, 05:30 PM   #8
adri1
Banned
 
Join Date: Oct 2010
Posts: 1,927
Reputation: 955
Default Re: Pickups outside normal map don't get created

I made an experimental include, its working, but object pickup rotation is not too smooth
Code:
/*
	By adri1
*/

//cpickup
#if defined _inc_cpickup
	#endinput
#endif
#define _inc_cpickup

//streamer
#if !defined _streamer_included
	#error "no streamer include"
#endif

//yhooks
#include <YSI-Includes\YSI\y_hooks>

//
#define CUSTOM_PICKUP_UNIQUE_ID 1000
#define INVALID_CUSTOM_PICKUP_ID INVALID_STREAMER_ID
forward OnPlayerEnterCustomPickup(playerid, pickupid);
forward OnPlayerLeaveCustomPickup(playerid, pickupid);

stock CreateDynamicCustomPickup(model, Float:x, Float:y, Float:z, Float:rx = 0.0, Float:ry = 0.0, worldid = -1, interiorid = -1, playerid = -1)
{
	//create
	new objectid = CreateDynamicObject(model, x, y, z + 1.0, rx, ry, 0.0, worldid, interiorid, playerid),
		areaid = CreateDynamicCylinder(x, y, z - 1.0, z + 3.0, 0.5, worldid, interiorid, playerid);
	
	//move object
	SetDynamicObjectPos(objectid, x, y, z - 0.001);
	MoveDynamicObject(objectid, x, y, z, 0.005, rx, ry, 179.0);

	//object
	Streamer_SetIntData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID, CUSTOM_PICKUP_UNIQUE_ID); 

	//area
	new streamer_info[2];
	streamer_info[0] = CUSTOM_PICKUP_UNIQUE_ID;
	streamer_info[1] = objectid;
	Streamer_SetArrayData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, streamer_info);
	return areaid;
}

stock DestroyDynamicCustomPickup(pickupid)
{
	if(pickupid == INVALID_CUSTOM_PICKUP_ID) return 0;

	new streamer_info[2];
	Streamer_GetArrayData(STREAMER_TYPE_AREA, pickupid, E_STREAMER_EXTRA_ID, streamer_info);
	if(streamer_info[0] != CUSTOM_PICKUP_UNIQUE_ID) return 0;

	DestroyDynamicObject(streamer_info[1]);
	DestroyDynamicArea(pickupid);
	return 1;
}

hook OnPlayerEnterDynArea(playerid, areaid)
{
	new streamer_info[2];
	Streamer_GetArrayData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, streamer_info);
	if(streamer_info[0] == CUSTOM_PICKUP_UNIQUE_ID) CallLocalFunction("OnPlayerEnterCustomPickup", "dd", playerid, areaid);
	return 1;
}

hook OnPlayerLeaveDynArea(playerid, areaid)
{
	new streamer_info[2];
	Streamer_GetArrayData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, streamer_info);
	if(streamer_info[0] == CUSTOM_PICKUP_UNIQUE_ID) CallLocalFunction("OnPlayerLeaveCustomPickup", "dd", playerid, areaid);
	return 1;
}

hook OnDynamicObjectMoved(objectid)
{
	if(Streamer_GetIntData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_EXTRA_ID) == CUSTOM_PICKUP_UNIQUE_ID)
	{
		new Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz;
		GetDynamicObjectPos(objectid, x, y, z);
		GetDynamicObjectRot(objectid, rx, ry, rz);
		

		if(rz == 179.0) rz = 359.0;
		else rz = 179.0;

		SetDynamicObjectPos(objectid, x, y, z - 0.001);
		MoveDynamicObject(objectid, x, y, z, 0.001, rx, ry, rz);
	}
	return 1;
}
adri1 is offline   Reply With Quote