#if defined _api_custom_entities_included
  #endinput
#endif
#define _api_custom_entities_included

#pragma reqlib api_custom_entities

enum CEPreset
{
	CEPreset_None = 0,
	CEPreset_Item,
	CEPreset_NPC,
	CEPreset_Prop
};

enum CEFunction
{
	CEFunction_Spawn,
	CEFunction_Remove,
	CEFunction_Picked,
	CEFunction_Pickup,
	CEFunction_KVD
};
/*
 * Register entity.
 *
 * @param szName			Name of entity.
 * @param modelIndex		Precached model index.
 * @param size				Size of entity.
 * @param offset			Offset of entity origin.
 * @param lifeTime			Life time of entity.
 * @param preset			Preset for entity.
 */
native CE_Register
(
	const szName[],
	modelIndex = 0,
	const Float:vSize[3] = {8.0, 8.0, 8.0},
	const Float:vOffset[3] = {0.0, 0.0, 0.0},
	Float:fLifeTime = 0.0,
	CEPreset:preset = CEPreset_None
);

/*
 * Spawn entity.
 *
 * @param szName			Name of entity.
 * @param vOrigin			Spawn origin.
 * @return					Entity index.
 */
native CE_Create(const szName[], const Float:vOrigin[3], bool:temp = true);

native CE_GetSize(const szName[], Float:vSize[3]);
native CE_GetOffset(const szName[], Float:vOffset[3]);
native CE_GetModelIndex(const szName[]);

/*
 * Remove entity correctly.
 *
 * @param ent				Index of entity.
 * @return					result true/false
 */
native bool:CE_Remove(ent);

/*
 * Check if entity is associated with current plugin.
 *
 * @param ent				Index of entity.
 * @return					result true/false
 */
native bool:CE_CheckAssociation(ent);

native CE_RegisterHook(CEFunction:function, const szClassname[], const szCallback[]);