Raised This Month: $ Target: $400
 0% 

Ent Follow Players


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Arje
Senior Member
Join Date: Apr 2020
Location: Córdoba, Argentina
Old 02-11-2022 , 18:32   Ent Follow Players
Reply With Quote #1

Hello I have this code that makes the grenades follow the enemy, I wanted to know if it is possible (and how) to make the player follow other players?

Or if it is possible to create an entity that follows players, but the player in turn chases them through the entity?


PHP Code:

#define AMMOX_HEGRENADE 12

public plugin_init() {
    
// FIND THROWN GRENADES
    
register_event("AmmoX""on_AmmoX""b")
}
//----------------------------------------------------------------------------------------------
public on_AmmoX(id)
{
    if ( !
is_user_alive(id) ) return

    new 
iAmmoType read_data(1)
    new 
iAmmoCount read_data(2)

    if ( 
iAmmoType == AMMOX_HEGRENADE ) {

        if ( 
iAmmoCount == ) {
            
            
set_task(get_cvar_float("give_grenadetimer"), "give_weapons"id)
            new 
iGrenade = -1
            
while ( (iGrenade find_ent_by_class(iGrenade"grenade")) > ) {
                    

                
// Set speed here since it gets called so much
                
gNadeSpeed get_cvar_float("henade_nadespeed")
                if ( 
gNadeSpeed <= 0.0 gNadeSpeed 1.0

                gPauseEntity
[iGrenade] = true

                
new parm[3]
                
parm[0] = iGrenade
                parm
[1] = id
                
// If this changes so must nade_reset time or cooldown may not be set
                // The longer the nade_rest time the more chance for error with attacker identity
                
set_task(1.0"find_target"0parm3)

                
// Set the fuse
                
set_task(get_cvar_float("henade_fuse"), "unpause_nade"iGrenadeparm2)
                }
            }
        }

        else if ( 
iAmmoCount ) {
            
// Got a new nade remove the timer
            
remove_task(id)
        }
}
//----------------------------------------------------------------------------------------------
public find_target(parm[])
{
    new 
grenadeID parm[0]
    new 
grenadeOwner parm[1]

    if ( 
is_valid_ent(grenadeID) ) {
        new 
shortestDistance 9999
        
new nearestPlayer 0
        
new distanceteam[33], rgb[3], players[SH_MAXSLOTS], pnum

        get_user_team
(grenadeOwnerteam32)

        
// Find all alive enemies and set trail color
        
if ( cs_get_user_team(grenadeOwner) == CS_TEAM_CT ) {
            
get_players(playerspnum"ae""TERRORIST")
            
rgb = {5050175}
        }
        else {
            
get_players(playerspnum"ae""CT")
            
rgb = {1755050}
        }

        
// Find the closest enemy
        
for (new 0pnumi++) {
            if ( !
is_user_alive(players[i]) ) continue

            
distance =  get_entity_distance(players[i], grenadeID)

            if ( 
distance <= shortestDistance ) {
                
shortestDistance distance
                nearestPlayer 
players[i]
            }
        }

        
// Make the nade seek that enemy if one exists
        
if ( nearestPlayer ) {
            
// Trail on grenade
            
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
            
write_byte(22)                // TE_BEAMFOLLOW
            
write_short(grenadeID)        // entity:attachment to follow
            
write_short(gSpriteTrail)    // sprite index
            
write_byte(10)        // life in 0.1's
            
write_byte(3)        // line width in 0.1's
            
write_byte(rgb[0])    // r
            
write_byte(rgb[1])    // g
            
write_byte(rgb[2])    // b
            
switch(random_num(0,2)) {
                case 
0:write_byte(64)    // brightness
                
case 1:write_byte(128)
                case 
2:write_byte(192)
            }
            
message_end()

            
parm[2] = nearestPlayer
            set_task
(0.1"seek_target"grenadeID+1000parm3"b")
        }
    }
}
//----------------------------------------------------------------------------------------------
public seek_target(parm[])
{
    new 
grenade parm[0]
    new 
target parm[2]

    if ( !
is_valid_ent(grenade) ) {
        
remove_task(grenade+1000)
        return
    }

    if ( 
is_user_alive(target) ) {
        
entity_set_follow(grenadetarget)
    }
    else {
        
// Remove the seek loop
        
remove_task(grenade+1000)

        
// Stop the Trail
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY)
        
write_byte(99)            //TE_KILLBEAM
        
write_short(grenade)    // entity
        
message_end()

        
// Find a new player to seek
        
set_task(0.1"find_target"0parm3)
    }
}
//----------------------------------------------------------------------------------------------
stock entity_set_follow(entitytarget)
{
    if ( !
is_valid_ent(entity) || !is_user_alive(target) ) return 0

    
new Float:fl_Origin[3], Float:fl_EntOrigin[3]
    
entity_get_vector(targetEV_VEC_originfl_Origin)
    
entity_get_vector(entityEV_VEC_originfl_EntOrigin)

    new 
Float:fl_InvTime = (gNadeSpeed vector_distance(fl_Originfl_EntOrigin))

    new 
Float:fl_Distance[3]
    
fl_Distance[0] = fl_Origin[0] - fl_EntOrigin[0]
    
fl_Distance[1] = fl_Origin[1] - fl_EntOrigin[1]
    
fl_Distance[2] = fl_Origin[2] - fl_EntOrigin[2]

    new 
Float:fl_Velocity[3]
    
fl_Velocity[0] = fl_Distance[0] * fl_InvTime
    fl_Velocity
[1] = fl_Distance[1] * fl_InvTime
    fl_Velocity
[2] = fl_Distance[2] * fl_InvTime

    entity_set_vector
(entityEV_VEC_velocityfl_Velocity)

    new 
Float:fl_NewAngle[3]
    
vector_to_angle(fl_Velocityfl_NewAngle)
    
entity_set_vector(entityEV_VEC_anglesfl_NewAngle)

    return 
1
}
//---------------------------------------------------------------------------------------------- 
Arje 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 14:21.


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