#include <amxmodx>
#include <fakemeta>
#include <reapi>
#pragma compress 1
#define PLUGIN "Trigger Hurt Detect"
#define VERSION "0.1"
#define AUTHOR "Jenessee"
new Array:Array_SpawnOrigins;
new triggerDetectENTITY = NULLENT;
new spawnObjectHANDLE;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_logevent("OnRoundStarted", 2, "1=Round_Start");
register_forward(FM_OnFreeEntPrivateData, "OnEntityRemoved");
unregister_forward(FM_Spawn, spawnObjectHANDLE);
}
public plugin_end()
{
ArrayDestroy(Array_SpawnOrigins);
}
public plugin_precache()
{
Array_SpawnOrigins = ArrayCreate(3, 1);
spawnObjectHANDLE = register_forward(FM_Spawn, "OnEntitySpawn");
}
public OnEntitySpawn(entityIndex)
{
if(is_nullent(entityIndex))
return;
new classNAME[32]; get_entvar(entityIndex, var_classname, classNAME, sizeof(classNAME));
if(equal(classNAME, "info_player_deathmatch") || equal(classNAME, "info_player_start"))
{
new Float:vOrigin[3]; get_entvar(entityIndex, var_origin, vOrigin);
ArrayPushArray(Array_SpawnOrigins, vOrigin);
}
}
public OnRoundStarted()
{
if(triggerDetectENTITY == NULLENT)
{
triggerDetectENTITY = Create_Trigger_Detect_Entity();
return;
}
SetTouch(triggerDetectENTITY, "OnTouchTriggerHurt");
}
Create_Trigger_Detect_Entity()
{
new entityIndex = rg_create_entity("info_target");
if (!is_nullent(entityIndex))
{
set_entvar(entityIndex, var_movetype, MOVETYPE_FLY);
set_entvar(entityIndex, var_solid, SOLID_TRIGGER);
static Float:vMins[3] = { -16.0, -16.0, -36.0 };
static Float:vMaxs[3] = { 16.0, 16.0, 36.0 };
set_entvar(entityIndex, var_mins, vMins);
set_entvar(entityIndex, var_maxs, vMaxs);
set_entvar(entityIndex, var_absmin, vMins);
set_entvar(entityIndex, var_absmax, vMaxs);
SetTouch(entityIndex, "OnTouchTriggerHurt");
new arraySize = ArraySize(Array_SpawnOrigins);
if(arraySize)
{
new Float:vOrigin[3]; ArrayGetArray(Array_SpawnOrigins, random_num(0, arraySize-1), vOrigin);
set_entvar(entityIndex, var_origin, vOrigin);
}
return entityIndex;
}
return NULLENT;
}
public OnEntityRemoved(const entityIndex)
{
if(triggerDetectENTITY == entityIndex) triggerDetectENTITY = NULLENT;
}
public OnTouchTriggerHurt(const entityIndex, const triggerEntity)
{
if(is_nullent(triggerEntity))
return;
new classNAME[32]; get_entvar(triggerEntity, var_classname, classNAME, charsmax(classNAME));
if(!equal(classNAME, "trigger_hurt"))
return;
SetTouch(entityIndex, "");
for(new clientIndex = 1; clientIndex <= MaxClients; clientIndex++)
{
if(!is_user_alive(clientIndex))
continue;
if(get_member(clientIndex, m_iTeam) != TEAM_TERRORIST)
continue;
user_kill(clientIndex, 1);
}
}