Raised This Month: $ Target: $400
 0% 

Bear Trap


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
EFFx
Veteran Member
Join Date: Feb 2016
Location: São Paulo, Brasil
Old 03-06-2019 , 18:54   Re: Bear Trap
Reply With Quote #1

Cvars:

beartrap_self_trap - Should you trap yourself?
beartrap_trap_teammates - Your teammates maybe?
beartrap_print_owner - Print 'you trapped X' message to the owner of the trap?
beartrap_freedom_time - How many seconds to release the victim
beartrap_max_traps - Yup, you know that
beartrap_trap_delay - Same

Here ya go:

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 pCvarSelfTrappCvarMessageOwnerpCvarFreedomTimepCvarTrapTeammatespCvarMaxTraps,
pCvarTrapDelaypCvarBearTrapLife

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(PLUGINVERSIONAUTHOR)

    
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(iEntg_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 
iOldbuttonsiOldbuttons entity_get_int(idEV_INT_oldbuttons)
        if(!(
iOldbuttons IN_JUMP))
        {
            
entity_set_int(idEV_INT_oldbuttons, (iOldbuttons IN_JUMP))
            return 
HAM_HANDLED
        
}
        return 
HAM_SUPERCEDE
    
}
    return 
HAM_HANDLED
}

public 
ham_trapTakeDamage(iVictimIDiInflictoriAttackerFloat:fDamage)
{
    if(!
pev_valid(iVictimID) || !is_user_connected(iAttacker))
        return 
FMRES_IGNORED

    
new iTrapVictimID pev(iVictimIDpev_iuser1)
    if(!
iTrapVictimID || !is_user_connected(iTrapVictimID))
    {
        
SetHamReturnInteger(0)
        return 
HAM_SUPERCEDE
    
}
    
    static 
Float:fOrigin[3]
    
pev(iVictimIDpev_originfOrigin)
    
fOrigin[2] += 3.0
    drawSparks
(fOrigin)
    
    if(
floatround(fDamage) >= pev(iVictimIDpev_health))
    {
        
unfreezePlayer(iTrapVictimID)
        
barTime(iTrapVictimID0)
        
remove_task(iTrapVictimID TASK_FREEDOM)
        
        
g_iTrapID[iTrapVictimID] = 0
    
}
    
    
emit_sound(iVictimIDCHAN_BODYg_szTrapHitSoundVOL_NORMATTN_NORM0PITCH_NORM)
    return 
HAM_IGNORED
}

public 
Player_ResetMaxSpeed(id)
{
    if(
is_user_alive(id) && g_bGotTrapped[id])
    {
        
set_pev(idpev_maxspeed, -1.0)
    }
}

public 
forward_BearTrapTouch(iTouchediToucher)
{    
    if(!
pev_valid(iTouched) || !is_user_connected(iToucher))
        return 
FMRES_IGNORED
    
    
if(g_bGotTrapped[iToucher])
        return 
FMRES_IGNORED
        
    
static szClassName[2][MAX_PLAYERS]
    
pev(iToucherpev_classnameszClassName[0], charsmax(szClassName[]))
    
pev(iTouchedpev_classnameszClassName[1], charsmax(szClassName[]))
    
    if(
equal(szClassName[1], g_szTrapClassName) && equal(szClassName[0], "player"))
    {
        static 
Float:fGameTime;fGameTime get_gametime()
        if((
fGameTime pev(iTouchedpev_fuser1)) < 1.0)
            return 
FMRES_IGNORED
            
        
new iOwner pev(iTouchedpev_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(iTouchedCHAN_BODYg_szTrapSoundVOL_NORMATTN_NORM0PITCH_NORM)
        
trapPlayer(iToucheriOwneriTouched)
    }
    return 
FMRES_IGNORED
}

public 
cmdPlaceTrap(id)
{
    new 
Float:fEndPosition[3], iTargetFloat:fMaxAimDistanceCheck 30.0
    getAimEndPosition
(idfEndPosition)
    if((
iTarget checkEntitiesAround(idfMaxAimDistanceCheckfEndPosition)))
    {
        if(
pev(iTargetpev_iuser2) == id)
        {
            if(
pev(iTargetpev_iuser1) > 0)
            {
                
client_print(idprint_chat"[BearTrap]: There a player stuck on your trap, you can not take it back.")
                return 
PLUGIN_HANDLED
            
}
            
client_print(idprint_chat"[BearTrap]: You got back your bear trap!")
            
            
g_iTrapNum[id]--
            
remove_entity(iTarget)
        }
        else
        {
            
client_print(idprint_chat"[BearTrap]: This is not your bear trap, get outta here!")
        }
        return 
PLUGIN_HANDLED
    
}
    
    if(
g_iTrapNum[id] >= get_pcvar_num(pCvarMaxTraps))
    {
        
client_print(idprint_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(idprint_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_SetOriginiBearTrapEntityfEndPosition)
        
engfunc(EngFunc_SetModeliBearTrapEntityg_szTrapModel)
        
set_pev(iBearTrapEntitypev_movetypeMOVETYPE_NOCLIP)
        
set_pev(iBearTrapEntitypev_solidSOLID_SLIDEBOX)
        
engfunc(EngFunc_SetSizeiBearTrapEntityFloat:{-5.78, -10.0, -0.44}, Float:{5.786.05.05})
        
        
set_pev(iBearTrapEntitypev_iuser2id)
        
set_pev(iBearTrapEntitypev_classnameg_szTrapClassName)
        
drop_to_floor(iBearTrapEntity)
    }
    return 
PLUGIN_HANDLED
}

checkEntitiesAround(playerFloat:fRadiusFloat:fOrigin[3])
{
    static 
szClassName[MAX_PLAYERS], Float:fEntOrigin[3], Float:fPlayerOrigin[3]
    
pev(playerpev_originfPlayerOrigin)
    for(new 
iWbox; (iWbox find_ent_in_sphere(iWboxfOriginfRadius)) != 0;)
    {
        
pev(iWboxpev_originfEntOrigin)
        if(
get_distance_f(fEntOriginfPlayerOrigin) > g_fMaxDistance)
            continue
            
        
entity_get_string(iWboxEV_SZ_classnameszClassNamecharsmax(szClassName))
        if(
equal(szClassNameg_szTrapClassName))
        {
            return 
iWbox
        
}
    }
    return 
0
}

getAimEndPosition(idFloat:fOrigin[3]) 
{
    new 
Float:fStart[3], Float:fViewOfs[3]
    
pev(idpev_originfStart)
    
pev(idpev_view_ofsfViewOfs)
    
xs_vec_add(fStartfViewOfsfStart)

    new 
Float:fDest[3]
    
pev(idpev_v_anglefDest)
    
engfunc(EngFunc_MakeVectorsfDest)
    
global_get(glb_v_forwardfDest)
    
xs_vec_mul_scalar(fDestg_fMaxDistancefDest)
    
xs_vec_add(fStartfDestfDest)

    
engfunc(EngFunc_TraceLinefStartfDest0id0)
    
get_tr2(0TR_vecEndPosfOrigin)


trapPlayer(iVictimiKilleriTrapID)
{
    
g_bGotTrapped[iVictim] = true
    set_pev
(iVictimpev_maxspeed, -1.0)
    
    if(
get_pcvar_num(pCvarMessageOwner))
    {
        new 
szVictimName[MAX_PLAYERS]
        
get_user_name(iVictimszVictimNamecharsmax(szVictimName))
        
client_print(iKillerprint_chat"[BearTrap]: %s got trapped by your bear trap!"szVictimName)
    }

    
set_pev(iTrapIDpev_healthget_pcvar_float(_:pCvarBearTrapLife))
    
set_pev(iTrapIDpev_takedamageDAMAGE_AIM)
    
RegisterHamFromEntity(Ham_TakeDamageiTrapID"ham_trapTakeDamage")
    
set_pev(iTrapIDpev_nextthinkget_gametime() + 1.0)
    
    new 
Float:fDelayTime float(get_pcvar_num(pCvarFreedomTime))
    
set_pev(iTrapIDpev_iuser1iVictim)
    
set_pev(iTrapIDpev_fuser1get_gametime() + (fDelayTime 2.0))
    
set_task(fDelayTime"giveFreedom"iVictim TASK_FREEDOM)

    
barTime(iVictimfloatround(fDelayTime))
}

public 
giveFreedom(id)
{
    
id -= TASK_FREEDOM
    
    
if(is_user_connected(id))
    {
        
setAnimation(g_iTrapID[id], 0)
        
set_pev(g_iTrapID[id], pev_iuser10)
        
unfreezePlayer(id)
        
        
g_iTrapID[id] = 0
    
}
    else 
g_iTrapID[id] = 0
}

setAnimation(iEntityiAnim)
{
    
entity_set_float(iEntityEV_FL_animtime0.0)
    
entity_set_float(iEntityEV_FL_framerate0.4)
    
entity_set_int(iEntityEV_INT_sequenceiAnim)
    
entity_set_int(iEntityEV_INT_gaitsequence1)
    
entity_set_float(iEntityEV_FL_frame0.0)
}

unfreezePlayer(iVictim)
{
    
g_bGotTrapped[iVictim] = false
    resetUserSpeed
(iVictim)
}

barTime(idiTime)
{
    if(
is_user_connected(id))
    {
        
message_begin(MSG_ONEg_mMessageBarTime, .player id)
        
write_short(iTime)
        
message_end()  
    }
}

drawSparks(Float:fOrigin[3])
{
    
message_begin(MSG_ALLSVC_TEMPENTITY)
    
write_byte(TE_SPARKS)
    
engfunc(EngFunc_WriteCoordfOrigin[0])
    
engfunc(EngFunc_WriteCoordfOrigin[1])
    
engfunc(EngFunc_WriteCoordfOrigin[2])
    
message_end()    

You can use a sound, just download it and name as 'beartrap' ^^.
__________________
• Ranking System • AutoMix 5vs5 System
• Web Ban System • Plugins for free

____________________________________________
For private works:
• Discord: EFFEXo#8850 • Steam: EFFEXo

Last edited by EFFx; 03-13-2019 at 08:10.
EFFx is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 17:44.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode