PHP Code:
#pragma semicolon 1
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <api_custom_entities>
#define ENTITY_NAME "item_super_healthkit"
#define MAX_HEALTH 100.0
#define HEAL_AMOUNT MAX_HEALTH
new g_szSndItemSpawn[] = "fvox/beep.wav";
new g_szSndItemPickup[] = "items/smallmedkit1.wav";
new g_szSndItemDisappeared[] = "fvox/buzz.wav";
new g_ceHandler;
public plugin_precache()
{
precache_sound(g_szSndItemSpawn);
precache_sound(g_szSndItemPickup);
precache_sound(g_szSndItemDisappeared);
//Register new entity
g_ceHandler = CE_Register(
.szName = ENTITY_NAME, //classname
.modelIndex = precache_model("models/w_medkit.mdl"), //modelindex
.vMins = Float:{-12.0, -12.0, 0.0}, //min size
.vMaxs = Float:{12.0, 12.0, 24.0}, //max size
.fLifeTime = 10.0, //lifetime of entity(0.0 to permanent)
.fRespawnTime = 25.0, // respawn delay
.preset = CEPreset_Item //preset for entity
);
//Register spawn hook.
CE_RegisterHook(CEFunction_Spawn, ENTITY_NAME, "OnSpawn");
//Register pickup hook.
CE_RegisterHook(CEFunction_Pickup, ENTITY_NAME, "OnPickup");
//Register picked hook
CE_RegisterHook(CEFunction_Picked, ENTITY_NAME, "OnPicked");
//Register kill hook.
CE_RegisterHook(CEFunction_Killed, ENTITY_NAME, "OnKilled");
}
public plugin_init()
{
register_plugin("[Custom Entity] Item Super Health Kit", "1.0.0", "Hedgehog Fog");
//Register Think Hook for custom entity
RegisterHam(Ham_Think, CE_BASE_CLASSNAME, "OnThink");
}
public OnSpawn(ent)
{
//Some effect for item
set_pev(ent, pev_rendermode, kRenderNormal);
set_pev(ent, pev_renderfx, kRenderFxGlowShell);
set_pev(ent, pev_renderamt, 4.0);
set_pev(ent, pev_rendercolor, {255.0, 255.0, 255.0});
//Emit spawn sound
emit_sound(ent, CHAN_BODY, g_szSndItemSpawn, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
public OnPickup(ent, id)
{
//Get player health
static Float:fHealth;
pev(id, pev_health, fHealth);
if (fHealth < MAX_HEALTH) {
//Can be picked
return PLUGIN_HANDLED;
}
//Can not be picked
return PLUGIN_CONTINUE;
}
public OnPicked(ent, id)
{
//Get player health
static Float:fHealth;
pev(id, pev_health, fHealth);
//Add health to player
fHealth += HEAL_AMOUNT;
if (fHealth > MAX_HEALTH) {
fHealth = MAX_HEALTH;
} set_pev(id, pev_health, fHealth);
//Emit pickup sound
emit_sound(ent, CHAN_VOICE, g_szSndItemPickup, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
public OnKilled(ent, bool:picked)
{
if (!picked) {
//Emit disappear sound
emit_sound(ent, CHAN_VOICE, g_szSndItemDisappeared, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
}
}
public OnThink(ent)
{
//Check if custom entity is associated with current plugin
if (g_ceHandler != CE_GetHandlerByEntity(ent)) {
return;
}
//Make something here
}