PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <engine>
#include <fakemeta>
#include <xs>
#define PLUGIN "Bear Trap"
#define VERSION "1.3"
#define AUTHOR "EFFEX"
#define TASK_FREEDOM 4383173
#define resetUserSpeed(%1) ExecuteHamB(Ham_Player_ResetMaxSpeed, %1)
new const g_szTrapModel[] = "models/beartrap.mdl"
new const g_szTrapClassName[] = "beartrap"
new const g_szTrapSound[] = "bearsound.wav"
new const g_szTrapHitSound[] = "debris/metal6.wav"
const Float:g_fMaxDistance = 150.0
new pCvarSelfTrap, pCvarMessageOwner, pCvarFreedomTime, pCvarTrapTeammates, pCvarMaxTraps,
pCvarTrapDelay, pCvarBearTrapLife
new g_mMessageBarTime
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
new bool:g_bGotTrapped[MAX_PLAYERS + 1]
new g_iTrapNum[MAX_PLAYERS + 1], g_iSysTime[MAX_PLAYERS + 1], g_iTrapID[MAX_PLAYERS + 1]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
pCvarSelfTrap = register_cvar("beartrap_self_trap", "0")
pCvarMessageOwner = register_cvar("beartrap_print_owner", "1")
pCvarTrapTeammates = register_cvar("beartrap_trap_teammates", "0")
pCvarFreedomTime = register_cvar("beartrap_freedom_time", "10")
pCvarMaxTraps = register_cvar("beartrap_max_traps", "3")
pCvarTrapDelay = register_cvar("beartrap_trap_delay", "10")
pCvarBearTrapLife = register_cvar("beartrap_trap_life", "800.0")
g_mMessageBarTime = get_user_msgid("BarTime")
register_event("HLTV", "event_NewRound", "a", "1=0", "2=0")
RegisterHam(Ham_Player_Jump, "player", "ham_Player_Jump_Pre", 0)
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "Player_ResetMaxSpeed", 1)
register_clcmd("say /placetrap", "cmdPlaceTrap")
register_forward(FM_Touch, "forward_BearTrapTouch")
}
public plugin_precache()
{
precache_model(g_szTrapModel)
precache_sound(g_szTrapSound)
precache_sound(g_szTrapHitSound)
}
public client_putinserver(id)
{
g_bGotTrapped[id] = false
g_iTrapNum[id] = 0
}
public event_NewRound()
{
new iEnt = -1
while((iEnt = find_ent_by_class(iEnt, g_szTrapClassName)))
{
remove_entity(iEnt)
}
}
public ham_PlayerSpawn_Post(id)
{
g_bGotTrapped[id] = false
g_iTrapNum[id] = g_iSysTime[id] = 0
remove_task(id + TASK_FREEDOM)
}
public ham_Player_Jump_Pre(id)
{
if(g_bGotTrapped[id])
{
static iOldbuttons; iOldbuttons = entity_get_int(id, EV_INT_oldbuttons)
if(!(iOldbuttons & IN_JUMP))
{
entity_set_int(id, EV_INT_oldbuttons, (iOldbuttons | IN_JUMP))
return HAM_HANDLED
}
return HAM_SUPERCEDE
}
return HAM_HANDLED
}
public ham_trapTakeDamage(iVictimID, iInflictor, iAttacker, Float:fDamage)
{
if(!pev_valid(iVictimID) || !is_user_connected(iAttacker))
return FMRES_IGNORED
new iTrapVictimID = pev(iVictimID, pev_iuser1)
if(!iTrapVictimID || !is_user_connected(iTrapVictimID))
{
SetHamReturnInteger(0)
return HAM_SUPERCEDE
}
static Float:fOrigin[3]
pev(iVictimID, pev_origin, fOrigin)
fOrigin[2] += 3.0
drawSparks(fOrigin)
if(floatround(fDamage) >= pev(iVictimID, pev_health))
{
unfreezePlayer(iTrapVictimID)
barTime(iTrapVictimID, 0)
remove_task(iTrapVictimID + TASK_FREEDOM)
g_iTrapID[iTrapVictimID] = 0
}
emit_sound(iVictimID, CHAN_BODY, g_szTrapHitSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return HAM_IGNORED
}
public Player_ResetMaxSpeed(id)
{
if(is_user_alive(id) && g_bGotTrapped[id])
{
set_pev(id, pev_maxspeed, -1.0)
}
}
public forward_BearTrapTouch(iTouched, iToucher)
{
if(!pev_valid(iTouched) || !is_user_connected(iToucher))
return FMRES_IGNORED
if(g_bGotTrapped[iToucher])
return FMRES_IGNORED
static szClassName[2][MAX_PLAYERS]
pev(iToucher, pev_classname, szClassName[0], charsmax(szClassName[]))
pev(iTouched, pev_classname, szClassName[1], charsmax(szClassName[]))
if(equal(szClassName[1], g_szTrapClassName) && equal(szClassName[0], "player"))
{
static Float:fGameTime;fGameTime = get_gametime()
if((fGameTime - pev(iTouched, pev_fuser1)) < 1.0)
return FMRES_IGNORED
new iOwner = pev(iTouched, pev_iuser2)
if((iOwner == iToucher) && !get_pcvar_num(pCvarSelfTrap)
|| !(iOwner == iToucher) && !get_pcvar_num(pCvarTrapTeammates) && (get_user_team(iOwner) == get_user_team(iToucher)))
return FMRES_IGNORED
setAnimation((g_iTrapID[iToucher] = iTouched), 1)
emit_sound(iTouched, CHAN_BODY, g_szTrapSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
trapPlayer(iToucher, iOwner, iTouched)
}
return FMRES_IGNORED
}
public cmdPlaceTrap(id)
{
new Float:fEndPosition[3], iTarget, Float:fMaxAimDistanceCheck = 30.0
getAimEndPosition(id, fEndPosition)
if((iTarget = checkEntitiesAround(id, fMaxAimDistanceCheck, fEndPosition)))
{
if(pev(iTarget, pev_iuser2) == id)
{
if(pev(iTarget, pev_iuser1) > 0)
{
client_print(id, print_chat, "[BearTrap]: There a player stuck on your trap, you can not take it back.")
return PLUGIN_HANDLED
}
client_print(id, print_chat, "[BearTrap]: You got back your bear trap!")
g_iTrapNum[id]--
remove_entity(iTarget)
}
else
{
client_print(id, print_chat, "[BearTrap]: This is not your bear trap, get outta here!")
}
return PLUGIN_HANDLED
}
if(g_iTrapNum[id] >= get_pcvar_num(pCvarMaxTraps))
{
client_print(id, print_chat, "[BearTrap]: You cannot make bear traps anymore!")
return PLUGIN_HANDLED
}
new iSysTime = get_systime(), iPcvarValue = get_pcvar_num(pCvarTrapDelay)
new iDelay = (iSysTime - g_iSysTime[id]), iCountDown = (iPcvarValue - iDelay)
if(iDelay < iPcvarValue)
{
client_print(id, print_chat, "[BearTrap]: You must wait %d second%s to place another trap!", iCountDown, (iCountDown > 1) ? "s" : "")
return PLUGIN_HANDLED
}
new iBearTrapEntity = create_entity("info_target")
if(pev_valid(iBearTrapEntity))
{
g_iTrapNum[id]++
g_iSysTime[id] = iSysTime
engfunc(EngFunc_SetOrigin, iBearTrapEntity, fEndPosition)
engfunc(EngFunc_SetModel, iBearTrapEntity, g_szTrapModel)
set_pev(iBearTrapEntity, pev_movetype, MOVETYPE_NOCLIP)
set_pev(iBearTrapEntity, pev_solid, SOLID_SLIDEBOX)
engfunc(EngFunc_SetSize, iBearTrapEntity, Float:{-5.78, -10.0, -0.44}, Float:{5.78, 6.0, 5.05})
set_pev(iBearTrapEntity, pev_iuser2, id)
set_pev(iBearTrapEntity, pev_classname, g_szTrapClassName)
drop_to_floor(iBearTrapEntity)
}
return PLUGIN_HANDLED
}
checkEntitiesAround(player, Float:fRadius, Float:fOrigin[3])
{
static szClassName[MAX_PLAYERS], Float:fEntOrigin[3], Float:fPlayerOrigin[3]
pev(player, pev_origin, fPlayerOrigin)
for(new iWbox; (iWbox = find_ent_in_sphere(iWbox, fOrigin, fRadius)) != 0;)
{
pev(iWbox, pev_origin, fEntOrigin)
if(get_distance_f(fEntOrigin, fPlayerOrigin) > g_fMaxDistance)
continue
entity_get_string(iWbox, EV_SZ_classname, szClassName, charsmax(szClassName))
if(equal(szClassName, g_szTrapClassName))
{
return iWbox
}
}
return 0
}
getAimEndPosition(id, Float:fOrigin[3])
{
new Float:fStart[3], Float:fViewOfs[3]
pev(id, pev_origin, fStart)
pev(id, pev_view_ofs, fViewOfs)
xs_vec_add(fStart, fViewOfs, fStart)
new Float:fDest[3]
pev(id, pev_v_angle, fDest)
engfunc(EngFunc_MakeVectors, fDest)
global_get(glb_v_forward, fDest)
xs_vec_mul_scalar(fDest, g_fMaxDistance, fDest)
xs_vec_add(fStart, fDest, fDest)
engfunc(EngFunc_TraceLine, fStart, fDest, 0, id, 0)
get_tr2(0, TR_vecEndPos, fOrigin)
}
trapPlayer(iVictim, iKiller, iTrapID)
{
g_bGotTrapped[iVictim] = true
set_pev(iVictim, pev_maxspeed, -1.0)
if(get_pcvar_num(pCvarMessageOwner))
{
new szVictimName[MAX_PLAYERS]
get_user_name(iVictim, szVictimName, charsmax(szVictimName))
client_print(iKiller, print_chat, "[BearTrap]: %s got trapped by your bear trap!", szVictimName)
}
set_pev(iTrapID, pev_health, get_pcvar_float(_:pCvarBearTrapLife))
set_pev(iTrapID, pev_takedamage, DAMAGE_AIM)
RegisterHamFromEntity(Ham_TakeDamage, iTrapID, "ham_trapTakeDamage")
set_pev(iTrapID, pev_nextthink, get_gametime() + 1.0)
new Float:fDelayTime = float(get_pcvar_num(pCvarFreedomTime))
set_pev(iTrapID, pev_iuser1, iVictim)
set_pev(iTrapID, pev_fuser1, get_gametime() + (fDelayTime + 2.0))
set_task(fDelayTime, "giveFreedom", iVictim + TASK_FREEDOM)
barTime(iVictim, floatround(fDelayTime))
}
public giveFreedom(id)
{
id -= TASK_FREEDOM
if(is_user_connected(id))
{
setAnimation(g_iTrapID[id], 0)
set_pev(g_iTrapID[id], pev_iuser1, 0)
unfreezePlayer(id)
g_iTrapID[id] = 0
}
else g_iTrapID[id] = 0
}
setAnimation(iEntity, iAnim)
{
entity_set_float(iEntity, EV_FL_animtime, 0.0)
entity_set_float(iEntity, EV_FL_framerate, 0.4)
entity_set_int(iEntity, EV_INT_sequence, iAnim)
entity_set_int(iEntity, EV_INT_gaitsequence, 1)
entity_set_float(iEntity, EV_FL_frame, 0.0)
}
unfreezePlayer(iVictim)
{
g_bGotTrapped[iVictim] = false
resetUserSpeed(iVictim)
}
barTime(id, iTime)
{
if(is_user_connected(id))
{
message_begin(MSG_ONE, g_mMessageBarTime, .player = id)
write_short(iTime)
message_end()
}
}
drawSparks(Float:fOrigin[3])
{
message_begin(MSG_ALL, SVC_TEMPENTITY)
write_byte(TE_SPARKS)
engfunc(EngFunc_WriteCoord, fOrigin[0])
engfunc(EngFunc_WriteCoord, fOrigin[1])
engfunc(EngFunc_WriteCoord, fOrigin[2])
message_end()
}
You can use a sound, just download it and name as 'beartrap' ^^.