Raised This Month: $32 Target: $400
 8% 

Choose random ct and give bat


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
wicho
Veteran Member
Join Date: Feb 2012
Location: GuateAmala
Old 02-16-2020 , 00:12   Choose random ct and give bat
Reply With Quote #1

Hello everyone, well I use this code that in the new round chooses a random CT and gives it a pet bat that gives it powers, the problem is that when the player dies the bat is removed and also when the player disconnects it is removed, My question is how can I do that when the player who has the bat dies or disconnects choose a random CT and gives him the bat and so on, could you please give me an example? ... Thanks in advance

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Bat"
#define VERSION "1.0"
#define AUTHOR "Sn!ff3r"

#define fm_precache_model(%1)         engfunc(EngFunc_PrecacheModel,%1)
#define fm_precache_sound(%1)         engfunc(EngFunc_PrecacheSound,%1)
#define fm_remove_entity(%1)         engfunc(EngFunc_RemoveEntity, %1)
#define fm_set_user_gravity(%1,%2)     set_pev(%1,pev_gravity,%2)

static const pet_model[] = "models/stukabat.mdl"
static const pet_sounds[][] = { "bullchicken/bc_die1.wav""bullchicken/bc_die2.wav""bullchicken/bc_die3.wav""bullchicken/bc_idle1.wav""bullchicken/bc_pain3.wav" }
static const 
pet_idle 13
static const pet_run 13
static const Float:pet_idle_speed 0.5
static const Float:pet_run_speed 13.0
static const Float:player_gravity 0.8

new item_pet[33]
new 
item_have[33]
new 
Float:item_leaptime[33]

new 
maxplayers

public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_event("DeathMsg","DeathMsg","a")
    
register_event("HLTV","HLTV""a","1=0""2=0")
    
    
register_forward(FM_Think,"FM_Think_hook")
    
register_forward(FM_PlayerPreThink"FM_PlayerPreThink_hook")
    
    
maxplayers get_maxplayers()
}

public 
plugin_precache()
{
    new 
0
    
    
for(0sizeof pet_soundsi++)
        
fm_precache_sound(pet_sounds[i])
    
    
fm_precache_model(pet_model)    
}

public 
HLTV()
{
    new 
iPlayers[32], iNumiRandomCT
    get_players
(iPlayersiNum"ae""CT")
         
iRandomCT random_num(0iNum 1)
    
create_pet(iPlayers[iRandomCT])
}

public 
DeathMsg() 
{
    new 
id read_data(2)
    
    if(
item_have[id])
    {
        
remove_pet(id)
    }
}

public 
new_round_gravity(id)
{
    
fm_set_user_gravity(id,player_gravity)    
}

public 
create_pet(id)
{
    
item_pet[id] = engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocString,"info_target"))
    
set_pev(item_pet[id],pev_classname,"zp_bat")
        
    
engfunc(EngFunc_SetModel,item_pet[id],pet_model)
        
    new 
Float:origin[3]
    
pev(id,pev_origin,origin)            
        
    
set_pev(item_pet[id],pev_origin,origin)
    
set_pev(item_pet[id],pev_solid,SOLID_TRIGGER)
    
set_pev(item_pet[id],pev_movetype,MOVETYPE_FLY)
    
set_pev(item_pet[id],pev_owner,33)
    
set_pev(item_pet[id],pev_nextthink,1.0)
    
set_pev(item_pet[id],pev_sequence,0)
    
set_pev(item_pet[id],pev_gaitsequence,0)
    
set_pev(item_pet[id],pev_framerate,1.0)
        
    
fm_set_user_gravity(id,player_gravity)        
        
    
engfunc(EngFunc_EmitSound,item_pet[id],CHAN_AUTO,pet_sounds[random_num(0,sizeof pet_sounds 1)],1.01.20PITCH_NORM)            
        
    
item_have[id] = 1
}

public 
FM_Think_hook(ent)
{
    for(new 
0<= maxplayersi++)
    {
        if(
ent == item_pet[i])
        {
            static 
Float:origin[3]
            static 
Float:origin2[3]
            static 
Float:velocity[3]
            
pev(ent,pev_origin,origin2)
            
get_offset_origin_body(i,Float:{50.0,0.0,0.0},origin)
            
            if(
get_distance_f(origin,origin2) > 300.0)
            {
                
set_pev(ent,pev_origin,origin)
            }
            
            else if(
get_distance_f(origin,origin2) > 80.0)
            {
                
get_speed_vector(origin2,origin,250.0,velocity)
                
set_pev(ent,pev_velocity,velocity)
                if(
pev(ent,pev_sequence) != pet_run || pev(ent,pev_framerate) != pet_run_speed)
                {
                    
set_pev(ent,pev_sequence,pet_run)
                    
set_pev(ent,pev_gaitsequence,pet_run)
                    
set_pev(ent,pev_framerate,pet_run_speed)
                }
            }
            
            else if(
get_distance_f(origin,origin2) < 75.0)
            {
                if(
pev(ent,pev_sequence) != pet_idle || pev(ent,pev_framerate) != pet_idle_speed)
                {
                    
set_pev(ent,pev_sequence,pet_idle)
                    
set_pev(ent,pev_gaitsequence,pet_idle)
                    
set_pev(ent,pev_framerate,pet_idle_speed)
                }
                
set_pev(ent,pev_velocity,Float:{0.0,0.0,0.0})
            }
            
pev(i,pev_origin,origin)
            
origin[2] = origin2[2]
            
entity_set_aim(ent,origin)            
            
set_pev(ent,pev_nextthink,1.0)
            break
        }
    }
}

public 
FM_PlayerPreThink_hook(id)
{
    if (!
is_user_alive(id))
        return
    
    if(
allowed_leap(id))
    {
        static 
Float:velocity[3]
        
velocity_by_aim(idget_cvar_num("zp_leap_force"), velocity)
        
        
velocity[2] = get_cvar_float("zp_leap_height")
        
        
set_pev(idpev_velocityvelocity)
        
        
item_leaptime[id] = get_gametime()
    }
}

public 
allowed_leap(id)
{    
    if(!
item_have[id])
        return 
false
    
    
if (!(pev(idpev_flags) & FL_ONGROUND) || fm_get_speed(id) < 80)
        return 
false
    
    
static buttons
    buttons 
pev(idpev_button)
    
    if (!
is_user_bot(id) && (!(buttons IN_JUMP) || !(buttons IN_DUCK)))
        return 
false
    
    
if (get_gametime() - item_leaptime[id] < get_cvar_float("zp_leap_cooldown"))
        return 
false
    
    
return true
}

public 
remove_pet(ent
{
    if(
pev_valid(ent)) 
    {
        
fm_remove_entity(ent)
    }
}

// Get entity's speed (from fakemeta_util)
stock fm_get_speed(entity)
{
    static 
Float:velocity[3]
    
pev(entitypev_velocityvelocity)
    
    return 
floatround(vector_length(velocity));
}

stock get_offset_origin_body(ent,const Float:offset[3],Float:origin[3])
{
    if(!
pev_valid(ent))
        return 
0;
    
    new 
Float:angle[3]
    
pev(ent,pev_angles,angle)
    
    
pev(ent,pev_origin,origin)
    
    
origin[0] += floatcos(angle[1],degrees) * offset[0]
    
origin[1] += floatsin(angle[1],degrees) * offset[0]
    
    
origin[1] += floatcos(angle[1],degrees) * offset[1]
    
origin[0] += floatsin(angle[1],degrees) * offset[1]
    
    return 
1;
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speedFloat:new_velocity[3])
{
    
new_velocity[0] = origin2[0] - origin1[0]
    
new_velocity[1] = origin2[1] - origin1[1]
    
new_velocity[2] = origin2[2] - origin1[2]
    new 
Float:num floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
    
new_velocity[0] *= num
    new_velocity
[1] *= num
    new_velocity
[2] *= num
    
    
return 1;
}

stock entity_set_aim(ent,const Float:origin2[3],bone=0)
{
    if(!
pev_valid(ent))
        return 
0;
    
    static 
Float:origin[3]
    
origin[0] = origin2[0]
    
origin[1] = origin2[1]
    
origin[2] = origin2[2]
    
    static 
Float:ent_origin[3], Float:angles[3]
    
    if(
bone)
        
engfunc(EngFunc_GetBonePosition,ent,bone,ent_origin,angles)
    else
        
pev(ent,pev_origin,ent_origin)
    
    
origin[0] -= ent_origin[0]
    
origin[1] -= ent_origin[1]
    
origin[2] -= ent_origin[2]
    
    static 
Float:v_length
    v_length 
vector_length(origin)
    
    static 
Float:aim_vector[3]
    
aim_vector[0] = origin[0] / v_length
    aim_vector
[1] = origin[1] / v_length
    aim_vector
[2] = origin[2] / v_length
    
    
static Float:new_angles[3]
    
vector_to_angle(aim_vector,new_angles)
    
    
new_angles[0] *= -1
    
    
if(new_angles[1]>180.0new_angles[1] -= 360
    
if(new_angles[1]<-180.0new_angles[1] += 360
    
if(new_angles[1]==180.0 || new_angles[1]==-180.0new_angles[1]=-179.999999
    
    set_pev
(ent,pev_angles,new_angles)
    
set_pev(ent,pev_fixangle,1)
    
    return 
1;


Last edited by wicho; 02-16-2020 at 00:41.
wicho is offline
JocAnis
Veteran Member
Join Date: Jun 2010
Old 02-16-2020 , 05:26   Re: Choose random ct and give bat
Reply With Quote #2

Not a fix for disconnected player, but when he dies:

Code:
public DeathMsg() 
{
    new id = read_data(2)
    
    if(item_have[id])
    {
        remove_pet(id)
set_task( 0.1, "HLTV" )
    }
}
Im on mobile so cant help you more..try that one

Edit: Or i can:
Code:
public client_disconnected( id ) 
{
if( item_have[ id ] ) //hoping it will be cached here
{
remove_pet(id)
set_task( 0.1, "HLTV" )
}
}
__________________
KZ Public Autocup - PrimeKZ

My blog: http://primekz.xyz (in progress...) - not active (dec 2022)

Last edited by JocAnis; 02-16-2020 at 05:31.
JocAnis is offline
Reply


Thread Tools
Display Modes

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 02:10.


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