AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Suggestions / Requests (https://forums.alliedmods.net/forumdisplay.php?f=12)
-   -   Plugin Hook (https://forums.alliedmods.net/showthread.php?t=332502)

Ace67 05-16-2021 09:48

Plugin Hook
 
Hello, I have a server base builder and I want a plugin allowing to use only for VIPs Hook for 170 seconds (build phase "times") and admin can use the hook after the build phase, in each round please.
Thanks.

/I need it for basebuilder 5.4, not for 6.5\


I give here the plugin of the hook


Code:

/**************************************************************************************************

**** CVARS (FEATURES) ****
sv_adminhook        = Turn Plugin On/off
**** ADMIN COMMANDS ****
ADMIN_LEVEL_A (flag="m")
Granting Hook/Rope  = amx_granthook <authid, nick, @team, @all or #userid> <on/off>

ADMIN_LEVEL_E (flag="q") || Granted by admin
Ninja Rope by Spacedude (slightly modified) & Hook thingy
Attaching Rope                        = +rope
Deattaching Rope                = -rope
Attaching Hook                        = +hook
Deattaching Hook                = -hook

**************************************************************************************************/
#define USING_AMX 0 // 1 = Using AMX \ 0 = Useing AMXX

#if USING_AMX
        #include <amxmod>
        #include <amxmisc>
        #include <VexdUM>
        #include <fun>
        new gModName[32] = "AMX"
#else
        #include <amxmodx>
        #include <amxmisc>
        #include <fun>
        #include <engine>
        new gModName[32] = "AMXX"
#endif

#define TE_BEAMENTPOINT 1
#define TE_KILLBEAM 99
#define DELTA_T 0.1                                // seconds
#define BEAMLIFE 100                        // deciseconds
#define MOVEACCELERATION 150        // units per second^2
#define REELSPEED 300                        // units per second

/* Hook Stuff */
new gHookLocation[33][3]
new gHookLenght[33]
new bool:gIsHooked[33]
new gAllowedHook[33]
new Float:gBeamIsCreated[33]
new global_gravity
new beam

/************************************************************************************************************************/
public plugin_init() //Called on plugin start
{
        // Plugin Info
        register_plugin("Admin Hook","1.0","AssKicR")
       
        //CVARS
        register_cvar("sv_adminhook", "1" )

        //ADMIN CMDS
        register_concmd("amx_granthook","AdminGrantHook",ADMIN_LEVEL_A,"<authid, nick, @team, @all or #userid> <on/off>")

        //USER COMMANDS
        register_clcmd("+rope", "hook_on",ADMIN_LEVEL_E)
        register_clcmd("-rope", "hook_off",ADMIN_LEVEL_E)
        register_clcmd("+hook", "hook_on",ADMIN_LEVEL_E)
        register_clcmd("-hook", "hook_off",ADMIN_LEVEL_E)

        //HOOKED EVENTS
        register_event("ResetHUD", "ResetHUD", "b")
}
/************************************************************************************************************************/
public plugin_precache()
{
        beam = precache_model("sprites/zbeam4.spr")
        precache_sound("weapons/xbow_hit2.wav")
}
/*************************************************************************************************************************/
/************************************************** USP/SCOUT REMOVE *****************************************************/
/*************************************************************************************************************************/

/*************************************************************************************************************************/
/**************************************************** HOOKED EVENTS ******************************************************/
/*************************************************************************************************************************/
public ResetHUD(id) {
        //Check if he is hooked to something
        if (gIsHooked[id]) RopeRelease(id)
}
/************************************************************************************************************************/
stock kz_velocity_set(id,vel[3]) {
        //Set Their Velocity to 0 so that they they fall straight down from
        new Float:Ivel[3]
        Ivel[0]=float(vel[0])
        Ivel[1]=float(vel[1])
        Ivel[2]=float(vel[2])
        entity_set_vector(id, EV_VEC_velocity, Ivel)
}

stock kz_velocity_get(id,vel[3]) {
        //Set Their Velocity to 0 so that they they fall straight down from
        new Float:Ivel[3]

        entity_get_vector(id, EV_VEC_velocity, Ivel)
        vel[0]=floatround(Ivel[0])
        vel[1]=floatround(Ivel[1])
        vel[2]=floatround(Ivel[2])
}

/************************************************************************************************************************/
/**************************************************** ADMIN COMMANDS ****************************************************/
/************************************************************************************************************************/
public AdminGrantHook(id,level,cid)
{
        if ( !cmd_access(id,level,cid,1) )
                return PLUGIN_HANDLED

        new arg1[32],arg2[32]
        read_argv(1,arg1,31)
        read_argv(2,arg2,31)
        new onoff = str_to_num(arg2)

        if ( equali(arg1,"@all") )
        {
                new plist[32],pnum
                get_players(plist,pnum,"a")
                if (pnum==0)
                {
                console_print(id,"[%s] There are no clients",gModName)
                return PLUGIN_HANDLED
                }
                for (new i=0; i<pnum; i++) {
                        gAllowedHook[plist[i]]=onoff
                        if (gIsHooked[plist[i]]==true && onoff==0)
                        {
                                RopeRelease(plist[i])
                        }
                }

                console_print(id,"[%s] %s all players access to hook/rope",gModName,onoff ? "Gave":"Removed")
        }
        else if ( arg1[0]=='@' )
        {
                new plist[32],pnum
                get_players(plist,pnum,"ae",arg1[1])
                if ( pnum==0 )
                {
                console_print(id,"[%s] No clients in such team",gModName)
                return PLUGIN_HANDLED
                }
                for (new i=0; i<pnum; i++) {
                        gAllowedHook[plist[i]]=onoff
                        if (gIsHooked[plist[i]]==true && onoff==0)
                        {
                                RopeRelease(plist[i])
                        }
                }
                console_print(id,"[%s] %s all %ss access to hook/rope",onoff ? "Gave":"Removed",arg1[1])
        }
        else
        {
                new pName[32]
                new player = cmd_target(id,arg1,6)
                if (!player) return PLUGIN_HANDLED

                gAllowedHook[player]=onoff
                if (gAllowedHook[player]==0 && onoff==0)
                {
                        RopeRelease(player)
                }

               
                get_user_name(player,pName,31)
                console_print(id,"[%s] %s ^"%s^" access to hook/rope",onoff ? "Gave":"Removed",pName)
        }

        return PLUGIN_HANDLED
}

/************************************************************************************************************************/
/****************************************************** NINJAROPE *******************************************************/
/************************************************************************************************************************/

public ropetask(parm[])
{
        new id = parm[0]
        new user_origin[3], user_look[3], user_direction[3], move_direction[3]
        new A[3], D[3], buttonadjust[3]
        new acceleration, velocity_towards_A, desired_velocity_towards_A
        new velocity[3], null[3]

        if (!is_user_alive(id))
        {
                RopeRelease(id)
                return
        }

        if (gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime())
        {
                beamentpoint(id)
        }

        null[0] = 0
        null[1] = 0
        null[2] = 0

        get_user_origin(id, user_origin)
        get_user_origin(id, user_look,2)
        kz_velocity_get(id, velocity)

        buttonadjust[0]=0
        buttonadjust[1]=0

        if (get_user_button(id)&IN_FORWARD)                buttonadjust[0]+=1
        if (get_user_button(id)&IN_BACK)                buttonadjust[0]-=1
        if (get_user_button(id)&IN_MOVERIGHT)        buttonadjust[1]+=1
        if (get_user_button(id)&IN_MOVELEFT)        buttonadjust[1]-=1
        if (get_user_button(id)&IN_JUMP)                buttonadjust[2]+=1
        if (get_user_button(id)&IN_DUCK)                buttonadjust[2]-=1

        if (buttonadjust[0] || buttonadjust[1])
        {
                user_direction[0] = user_look[0] - user_origin[0]
                user_direction[1] = user_look[1] - user_origin[1]

                move_direction[0] = buttonadjust[0]*user_direction[0] + user_direction[1]*buttonadjust[1]
                move_direction[1] = buttonadjust[0]*user_direction[1] - user_direction[0]*buttonadjust[1]
                move_direction[2] = 0

                velocity[0] += floatround(move_direction[0] * MOVEACCELERATION * DELTA_T / get_distance(null,move_direction))
                velocity[1] += floatround(move_direction[1] * MOVEACCELERATION * DELTA_T / get_distance(null,move_direction))
        }

        if (buttonadjust[2])        gHookLenght[id] -= floatround(buttonadjust[2] * REELSPEED * DELTA_T)
        if (gHookLenght[id] < 100) gHookLenght[id] = 100

        A[0] = gHookLocation[id][0] - user_origin[0]
        A[1] = gHookLocation[id][1] - user_origin[1]
        A[2] = gHookLocation[id][2] - user_origin[2]

        D[0] = A[0]*A[2] / get_distance(null,A)
        D[1] = A[1]*A[2] / get_distance(null,A)
        D[2] = -(A[1]*A[1] + A[0]*A[0]) / get_distance(null,A)

        acceleration = - global_gravity * D[2] / get_distance(null,D)

        velocity_towards_A = (velocity[0] * A[0] + velocity[1] * A[1] + velocity[2] * A[2]) / get_distance(null,A)
        desired_velocity_towards_A = (get_distance(user_origin,gHookLocation[id]) - gHookLenght[id] /*- 10*/) * 4

        if (get_distance(null,D)>10)
        {
                velocity[0] += floatround((acceleration * DELTA_T * D[0]) / get_distance(null,D))
                velocity[1] += floatround((acceleration * DELTA_T * D[1]) / get_distance(null,D))
                velocity[2] += floatround((acceleration * DELTA_T * D[2]) / get_distance(null,D))
        }

        velocity[0] += ((desired_velocity_towards_A - velocity_towards_A) * A[0]) / get_distance(null,A)
        velocity[1] += ((desired_velocity_towards_A - velocity_towards_A) * A[1]) / get_distance(null,A)
        velocity[2] += ((desired_velocity_towards_A - velocity_towards_A) * A[2]) / get_distance(null,A)

        kz_velocity_set(id, velocity)
}

public hooktask(parm[])
{
        new id = parm[0]
        new velocity[3]

        if ( !gIsHooked[id] ) return
       
        new user_origin[3],oldvelocity[3]
        parm[0] = id

        if (!is_user_alive(id))
        {
                RopeRelease(id)
                return
        }

        if (gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime())
        {
                beamentpoint(id)
        }

        get_user_origin(id, user_origin)
        kz_velocity_get(id, oldvelocity)
        new distance=get_distance( gHookLocation[id], user_origin )
        if ( distance > 10 )
        {
                velocity[0] = floatround( (gHookLocation[id][0] - user_origin[0]) * ( 2.0 * REELSPEED / distance ) )
                velocity[1] = floatround( (gHookLocation[id][1] - user_origin[1]) * ( 2.0 * REELSPEED / distance ) )
                velocity[2] = floatround( (gHookLocation[id][2] - user_origin[2]) * ( 2.0 * REELSPEED / distance ) )
        }
        else
        {
                velocity[0]=0
                velocity[1]=0
                velocity[2]=0
        }

        kz_velocity_set(id, velocity)
       
}

public hook_on(id)
{
        if (get_cvar_num("sv_adminhook")==1)
                {
                if (gAllowedHook[id] || (get_user_flags(id)&ADMIN_LEVEL_E)) {
                        if (!gIsHooked[id] && is_user_alive(id))
                        {
                                new cmd[32]
                                read_argv(0,cmd,31)
                                if(equal(cmd,"+rope")) RopeAttach(id,0)
                                if(equal(cmd,"+hook")) RopeAttach(id,1)
                        }
                }else{
                        client_print(id,print_chat,"[%s] You have no access to that command",gModName)
                        return PLUGIN_HANDLED
                }
        }else{
                client_print(id,print_chat,"[%s] This command is deativated",gModName)
        }
        return PLUGIN_HANDLED
}

public hook_off(id)
{
        if (gAllowedHook[id] || (get_user_flags(id)&ADMIN_LEVEL_E)) {
                if (gIsHooked[id])
                {
                        RopeRelease(id)
                }
        }else{
                client_print(id,print_chat,"[%s] You have no access to that command",gModName)
                return PLUGIN_HANDLED
        }
        return PLUGIN_HANDLED
}

public RopeAttach(id,hook)
{
        new parm[1], user_origin[3]
        parm[0] = id
        gIsHooked[id] = true
        get_user_origin(id,user_origin)
        get_user_origin(id,gHookLocation[id], 3)
        gHookLenght[id] = get_distance(gHookLocation[id],user_origin)
        global_gravity = get_cvar_num("sv_gravity")
        set_user_gravity(id,0.001)
        beamentpoint(id)
        emit_sound(id, CHAN_STATIC, "weapons/xbow_hit2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
        if (hook) set_task(DELTA_T, "hooktask", 200+id, parm, 1, "b")
        else set_task(DELTA_T, "ropetask", 200+id, parm, 1, "b")
}

public RopeRelease(id)
{
        gIsHooked[id] = false
        killbeam(id)
        set_user_gravity(id)
        remove_task(200+id)
}

public beamentpoint(id)
{
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
        write_byte( TE_BEAMENTPOINT )
        write_short( id )
        write_coord( gHookLocation[id][0] )
        write_coord( gHookLocation[id][1] )
        write_coord( gHookLocation[id][2] )
        write_short( beam )        // sprite index
        write_byte( 0 )                // start frame
        write_byte( 0 )                // framerate
        write_byte( BEAMLIFE )        // life
        write_byte( 10 )        // width
        write_byte( 0 )                // noise
        if (get_user_team(id)==1)                // Terrorist
        {
                write_byte( 255 )        // r, g, b
                write_byte( 0 )        // r, g, b
                write_byte( 0 )        // r, g, b
        }
        else                                                        // Counter-Terrorist
        {
                write_byte( 0 )        // r, g, b
                write_byte( 0 )        // r, g, b
                write_byte( 255 )        // r, g, b
        }
        write_byte( 150 )        // brightness
        write_byte( 0 )                // speed
        message_end( )
        gBeamIsCreated[id] = get_gametime()
}

public killbeam(id)
{
        message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
        write_byte( TE_KILLBEAM )
        write_short( id )
        message_end()
}

/************************************************************************************************************************/
/******************************************************* FORWARDS *******************************************************/
/************************************************************************************************************************/

public client_disconnect(id) {
        gAllowedHook[id]=0
}

/************************************************************************************************************************/
/************************************************** AMXX -> AMX funcs ***************************************************/
/************************************************************************************************************************/
#if USING_AMX
        stock get_user_button(id) return entity_get_int(id, EV_INT_button)
#endif


MacL 05-16-2021 12:10

Re: Plugin Hook
 
PHP Code:

/**************************************************************************************************

**** CVARS (FEATURES) ****
sv_adminhook         = Turn Plugin On/off
**** ADMIN COMMANDS ****
ADMIN_LEVEL_A (flag="m")
Granting Hook/Rope   = amx_granthook <authid, nick, @team, @all or #userid> <on/off>

ADMIN_LEVEL_E (flag="q") || Granted by admin
Ninja Rope by Spacedude (slightly modified) & Hook thingy
Attaching Rope            = +rope
Deattaching Rope        = -rope
Attaching Hook            = +hook
Deattaching Hook        = -hook

**************************************************************************************************/
#define USING_AMX 0 // 1 = Using AMX \ 0 = Useing AMXX

#if USING_AMX
    #include <amxmod>
    #include <amxmisc>
    #include <VexdUM>
    #include <fun>
    
new gModName[32] = "AMX"
#else
    #include <amxmodx>
    #include <amxmisc>
    #include <fun>
    #include <engine>
    
new gModName[32] = "AMXX"
#endif

#define TE_BEAMENTPOINT 1
#define TE_KILLBEAM 99
#define DELTA_T 0.1                // seconds
#define BEAMLIFE 100            // deciseconds
#define MOVEACCELERATION 150    // units per second^2
#define REELSPEED 300            // units per second

#define USE_TIRANT_ZBB
//#define USE_VECO_ZBB

#if defined USE_TIRANT_ZBB
#include <basebuilder>
#define IsBuildPhase() bb_is_build_phase()
#endif

#if defined USE_VECO_ZBB
#include <vzbb_mod>
#define IsBuildPhase() user_can_build()
#endif

/* Hook Stuff */
new gHookLocation[33][3]
new 
gHookLenght[33]
new 
bool:gIsHooked[33]
new 
gAllowedHook[33]
new 
Float:gBeamIsCreated[33]
new 
global_gravity
new beam

/************************************************************************************************************************/
public plugin_init() //Called on plugin start
{
    
// Plugin Info
    
register_plugin("Admin Hook","1.0","AssKicR")
    
    
//CVARS
    
register_cvar("sv_adminhook""1" )

    
//ADMIN CMDS
    
register_concmd("amx_granthook","AdminGrantHook",ADMIN_LEVEL_A,"<authid, nick, @team, @all or #userid> <on/off>")

    
//USER COMMANDS
    
register_clcmd("+rope""hook_on",ADMIN_LEVEL_E)
    
register_clcmd("-rope""hook_off",ADMIN_LEVEL_E)
    
register_clcmd("+hook""hook_on",ADMIN_LEVEL_E)
    
register_clcmd("-hook""hook_off",ADMIN_LEVEL_E)

    
//HOOKED EVENTS
    
register_event("ResetHUD""ResetHUD""b")
}
/************************************************************************************************************************/
public plugin_precache()
{
    
beam precache_model("sprites/zbeam4.spr")
    
precache_sound("weapons/xbow_hit2.wav")
}
/*************************************************************************************************************************/
/************************************************** USP/SCOUT REMOVE *****************************************************/
/*************************************************************************************************************************/

/*************************************************************************************************************************/
/**************************************************** HOOKED EVENTS ******************************************************/
/*************************************************************************************************************************/
public ResetHUD(id) {
    
//Check if he is hooked to something
    
if (gIsHooked[id]) RopeRelease(id)
}
/************************************************************************************************************************/
stock kz_velocity_set(id,vel[3]) {
    
//Set Their Velocity to 0 so that they they fall straight down from
    
new Float:Ivel[3]
    
Ivel[0]=float(vel[0])
    
Ivel[1]=float(vel[1])
    
Ivel[2]=float(vel[2])
    
entity_set_vector(idEV_VEC_velocityIvel)
}

stock kz_velocity_get(id,vel[3]) {
    
//Set Their Velocity to 0 so that they they fall straight down from
    
new Float:Ivel[3]

    
entity_get_vector(idEV_VEC_velocityIvel)
    
vel[0]=floatround(Ivel[0])
    
vel[1]=floatround(Ivel[1])
    
vel[2]=floatround(Ivel[2])
}

/************************************************************************************************************************/
/**************************************************** ADMIN COMMANDS ****************************************************/
/************************************************************************************************************************/
public AdminGrantHook(id,level,cid

    if ( !
cmd_access(id,level,cid,1) ) 
        return 
PLUGIN_HANDLED 

    
new arg1[32],arg2[32]
    
read_argv(1,arg1,31)
    
read_argv(2,arg2,31)
    new 
onoff str_to_num(arg2)

    if ( 
equali(arg1,"@all") ) 
    { 
        new 
plist[32],pnum 
        get_players
(plist,pnum,"a"
        if (
pnum==0
        { 
         
console_print(id,"[%s] There are no clients",gModName
         return 
PLUGIN_HANDLED 
        

        for (new 
i=0i<pnumi++) { 
            
gAllowedHook[plist[i]]=onoff
            
if (gIsHooked[plist[i]]==true && onoff==0)
            {
                
RopeRelease(plist[i])
            }
        }

        
console_print(id,"[%s] %s all players access to hook/rope",gModName,onoff "Gave":"Removed"
    } 
    else if ( 
arg1[0]=='@' 
    { 
        new 
plist[32],pnum 
        get_players
(plist,pnum,"ae",arg1[1]) 
        if ( 
pnum==
        { 
         
console_print(id,"[%s] No clients in such team",gModName
         return 
PLUGIN_HANDLED 
        

        for (new 
i=0i<pnumi++) {
            
gAllowedHook[plist[i]]=onoff
            
if (gIsHooked[plist[i]]==true && onoff==0)
            {
                
RopeRelease(plist[i])
            }
        }
        
console_print(id,"[%s] %s all %ss access to hook/rope",onoff "Gave":"Removed",arg1[1]) 
    } 
    else 
    { 
        new 
pName[32
        new 
player cmd_target(id,arg1,6
        if (!
player) return PLUGIN_HANDLED 

        gAllowedHook
[player]=onoff
        
if (gAllowedHook[player]==&& onoff==0)
        {
            
RopeRelease(player)
        }

        
        
get_user_name(player,pName,31
        
console_print(id,"[%s] %s ^"%s^" access to hook/rope",onoff "Gave":"Removed",pName
    } 

    return 
PLUGIN_HANDLED 
}

/************************************************************************************************************************/
/****************************************************** NINJAROPE *******************************************************/
/************************************************************************************************************************/

public ropetask(parm[])
{
    new 
id parm[0]
    new 
user_origin[3], user_look[3], user_direction[3], move_direction[3]
    new 
A[3], D[3], buttonadjust[3]
    new 
accelerationvelocity_towards_Adesired_velocity_towards_A
    
new velocity[3], null[3]

    if (!
is_user_alive(id))
    {
        
RopeRelease(id)
        return
    }

    if (
gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime())
    {
        
beamentpoint(id)
    }

    
null[0] = 0
    null
[1] = 0
    null
[2] = 0

    get_user_origin
(iduser_origin)
    
get_user_origin(iduser_look,2)
    
kz_velocity_get(idvelocity)

    
buttonadjust[0]=0
    buttonadjust
[1]=0

    
if (get_user_button(id)&IN_FORWARD)        buttonadjust[0]+=1
    
if (get_user_button(id)&IN_BACK)        buttonadjust[0]-=1
    
if (get_user_button(id)&IN_MOVERIGHT)    buttonadjust[1]+=1
    
if (get_user_button(id)&IN_MOVELEFT)    buttonadjust[1]-=1
    
if (get_user_button(id)&IN_JUMP)        buttonadjust[2]+=1
    
if (get_user_button(id)&IN_DUCK)        buttonadjust[2]-=1

    
if (buttonadjust[0] || buttonadjust[1])
    {
        
user_direction[0] = user_look[0] - user_origin[0]
        
user_direction[1] = user_look[1] - user_origin[1]

        
move_direction[0] = buttonadjust[0]*user_direction[0] + user_direction[1]*buttonadjust[1]
        
move_direction[1] = buttonadjust[0]*user_direction[1] - user_direction[0]*buttonadjust[1]
        
move_direction[2] = 0

        velocity
[0] += floatround(move_direction[0] * MOVEACCELERATION DELTA_T get_distance(null,move_direction))
        
velocity[1] += floatround(move_direction[1] * MOVEACCELERATION DELTA_T get_distance(null,move_direction))
    }

    if (
buttonadjust[2])    gHookLenght[id] -= floatround(buttonadjust[2] * REELSPEED DELTA_T)
    if (
gHookLenght[id] < 100gHookLenght[id] = 100

    A
[0] = gHookLocation[id][0] - user_origin[0]
    
A[1] = gHookLocation[id][1] - user_origin[1]
    
A[2] = gHookLocation[id][2] - user_origin[2]

    
D[0] = A[0]*A[2] / get_distance(null,A)
    
D[1] = A[1]*A[2] / get_distance(null,A)
    
D[2] = -(A[1]*A[1] + A[0]*A[0]) / get_distance(null,A)

    
acceleration = - global_gravity D[2] / get_distance(null,D)

    
velocity_towards_A = (velocity[0] * A[0] + velocity[1] * A[1] + velocity[2] * A[2]) / get_distance(null,A)
    
desired_velocity_towards_A = (get_distance(user_origin,gHookLocation[id]) - gHookLenght[id/*- 10*/) * 4

    
if (get_distance(null,D)>10)
    {
        
velocity[0] += floatround((acceleration DELTA_T D[0]) / get_distance(null,D))
        
velocity[1] += floatround((acceleration DELTA_T D[1]) / get_distance(null,D))
        
velocity[2] += floatround((acceleration DELTA_T D[2]) / get_distance(null,D))
    }

    
velocity[0] += ((desired_velocity_towards_A velocity_towards_A) * A[0]) / get_distance(null,A)
    
velocity[1] += ((desired_velocity_towards_A velocity_towards_A) * A[1]) / get_distance(null,A)
    
velocity[2] += ((desired_velocity_towards_A velocity_towards_A) * A[2]) / get_distance(null,A)

    
kz_velocity_set(idvelocity)
}

public 
hooktask(parm[])

    new 
id parm[0]
    new 
velocity[3]

    if ( !
gIsHooked[id] ) return 
    
    new 
user_origin[3],oldvelocity[3]
    
parm[0] = id

    
if (!is_user_alive(id))
    {
        
RopeRelease(id)
        return
    }

    if (
gBeamIsCreated[id] + BEAMLIFE/10 <= get_gametime())
    {
        
beamentpoint(id)
    }

    
get_user_origin(iduser_origin
    
kz_velocity_get(idoldvelocity
    new 
distance=get_distancegHookLocation[id], user_origin )
    if ( 
distance 10 
    { 
        
velocity[0] = floatround( (gHookLocation[id][0] - user_origin[0]) * ( 2.0 REELSPEED distance ) )
        
velocity[1] = floatround( (gHookLocation[id][1] - user_origin[1]) * ( 2.0 REELSPEED distance ) )
        
velocity[2] = floatround( (gHookLocation[id][2] - user_origin[2]) * ( 2.0 REELSPEED distance ) )
    } 
    else
    {
        
velocity[0]=0
        velocity
[1]=0
        velocity
[2]=0
    
}

    
kz_velocity_set(idvelocity
    


public 
hook_on(id)
{
    if (
get_cvar_num("sv_adminhook")==1)
        {
        if(
get_user_flags(id)&ADMIN_LEVEL_A && !IsBuildPhase( ))
        {
            
client_print(id,print_chat,"[%s] Only Admins can use hook after buildtime",gModName)
            return 
PLUGIN_HANDLED
        
}            
        if (
gAllowedHook[id] || (get_user_flags(id)&ADMIN_LEVEL_E))
        {
            if (!
gIsHooked[id] && is_user_alive(id))
            {
                new 
cmd[32]
                
read_argv(0,cmd,31)
                if(
equal(cmd,"+rope")) RopeAttach(id,0)
                if(
equal(cmd,"+hook")) RopeAttach(id,1)
            }
        }
        else
        {
            
client_print(id,print_chat,"[%s] You have no access to that command",gModName)
            return 
PLUGIN_HANDLED
        
}
    }else{
        
client_print(id,print_chat,"[%s] This command is deativated",gModName)
    }
    return 
PLUGIN_HANDLED
}

public 
hook_off(id)
{
    if (
gAllowedHook[id] || (get_user_flags(id)&ADMIN_LEVEL_E)) {
        if (
gIsHooked[id])
        {
            
RopeRelease(id)
        }
    }else{
        
client_print(id,print_chat,"[%s] You have no access to that command",gModName)
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
RopeAttach(id,hook)
{
    new 
parm[1], user_origin[3]
    
parm[0] = id
    gIsHooked
[id] = true
    get_user_origin
(id,user_origin)
    
get_user_origin(id,gHookLocation[id], 3)
    
gHookLenght[id] = get_distance(gHookLocation[id],user_origin)
    
global_gravity get_cvar_num("sv_gravity")
    
set_user_gravity(id,0.001)
    
beamentpoint(id)
    
emit_sound(idCHAN_STATIC"weapons/xbow_hit2.wav"1.0ATTN_NORM0PITCH_NORM)
    if (
hookset_task(DELTA_T"hooktask"200+idparm1"b")
    else 
set_task(DELTA_T"ropetask"200+idparm1"b")
}

public 
RopeRelease(id)
{
    
gIsHooked[id] = false
    killbeam
(id)
    
set_user_gravity(id)
    
remove_task(200+id)
}

public 
beamentpoint(id)
{
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byteTE_BEAMENTPOINT )
    
write_shortid )
    
write_coordgHookLocation[id][0] )
    
write_coordgHookLocation[id][1] )
    
write_coordgHookLocation[id][2] )
    
write_shortbeam )    // sprite index
    
write_byte)        // start frame
    
write_byte)        // framerate
    
write_byteBEAMLIFE )    // life
    
write_byte10 )    // width
    
write_byte)        // noise
    
if (get_user_team(id)==1)        // Terrorist
    
{
        
write_byte255 )    // r, g, b
        
write_byte)    // r, g, b
        
write_byte)    // r, g, b
    
}
    else                            
// Counter-Terrorist
    
{
        
write_byte)    // r, g, b
        
write_byte)    // r, g, b
        
write_byte255 )    // r, g, b
    
}
    
write_byte150 )    // brightness
    
write_byte)        // speed
    
message_end( )
    
gBeamIsCreated[id] = get_gametime()
}

public 
killbeam(id)
{
    
message_beginMSG_BROADCASTSVC_TEMPENTITY )
    
write_byteTE_KILLBEAM )
    
write_shortid )
    
message_end()
}

/************************************************************************************************************************/
/******************************************************* FORWARDS *******************************************************/
/************************************************************************************************************************/

public client_disconnect(id) {
    
gAllowedHook[id]=0
}

/************************************************************************************************************************/
/************************************************** AMXX -> AMX funcs ***************************************************/
/************************************************************************************************************************/
#if USING_AMX
    
stock get_user_button(id) return entity_get_int(idEV_INT_button)
#endif 


Ace67 05-16-2021 16:25

Re: Plugin Hook
 
Thanks works <3, i just have edited flags + natives for bb 5.4


All times are GMT -4. The time now is 19:53.

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