Raised This Month: $51 Target: $400
 12% 

Solved set_user_velocity


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
lexzor
Veteran Member
Join Date: Nov 2020
Old 12-30-2020 , 06:23   set_user_velocity
Reply With Quote #1

hy guys, i'm using "No Cross Mid" plugin by ghw_chronic
PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>

//Used for create_middle functions
#define tag_sprite_size_horizontal    4000
#define tag_sprite_size_vertical    600
#define tag_sprite_vertical_increments    15

#define MINNUM        2

new bool:stopplugin

new beamsprite

new CTspawn_loc[3]
new 
Tspawn_loc[3]

new 
plugin_enabledplugin_fenceplugin_2pplplugin_checktimeplugin_redrawtimeplugin_fencecolorplugin_fencealphaplugin_punishment

new Float:farthest_point1[3]
new 
Float:farthest_point2[3]
new 
alivenummaxplayers

new Float:oldtime

new multiplier

public plugin_init()
{
    
register_plugin("No Rush","2.0","GHW_Chronic")

    
plugin_enabled register_cvar("NR_enabled","1")
    
plugin_fence register_cvar("NR_fence","1")
    
plugin_2ppl register_cvar("NR_twopeople","1")
    
plugin_punishment register_cvar("NR_punishment","1")
    
plugin_checktime register_cvar("NR_checktime","2.0")
    
plugin_redrawtime register_cvar("NR_redrawtime","15.0")
    
plugin_fencecolor register_cvar("NR_fencecolor","green")
    
plugin_fencealpha register_cvar("NR_fencealpha","200")

    
stopplugin=true
    
new mapname[32]
    
get_mapname(mapname,31)
    new 
configfile[200]
    
get_configsdir(configfile,199)
    
format(configfile,199,"%s/no_rush_maps.ini",configfile)
    if(
file_exists(configfile))
    {
        new 
read[32], trash
        
for(new i=0;i<file_size(configfile,1);i++)
        {
            
read_file(configfile,i,read,31,trash)
            if(
equali(mapname,read))
            {
                
set_task(0.1,"spawn_locs")
                
set_task(0.2,"create_middle1")
                
oldtime get_pcvar_float(plugin_redrawtime)
                
stopplugin=false
                
break;
            }
        }
    }

    
register_event("DeathMsg","checknum","a")
    
register_event("ResetHUD","checknum","b")

    
maxplayers get_maxplayers()
}

public 
plugin_precache()
{
    
beamsprite precache_model("sprites/dot.spr")
}

public 
client_putinserver(id)
{
    if(!
stopplugin)
    {
        
set_task(get_pcvar_float(plugin_checktime),"prethink",id,"",0,"b")
    }
}

public 
client_disconnect(id)
{
    
remove_task(id)
}

public 
checknum()
{
    if(
get_pcvar_num(plugin_enabled) && !stopplugin)
    {
        new 
newnum
        
for(new i=0;i<=maxplayers;i++)
        {
            if(
is_user_alive(i)) newnum++
        }
        if(
alivenum>MINNUM && newnum<=MINNUM && get_pcvar_num(plugin_2ppl))
        {
            
client_print(0,print_chat,"[AMXX] You can now cross over to the other side since only 2 people remain.")
        }
        
alivenum=newnum
    
}
}

public 
prethink(id)
{
    if(
is_user_alive(id) && !stopplugin && get_pcvar_num(plugin_enabled) && !(alivenum<=MINNUM && get_pcvar_num(plugin_2ppl)) )
    {
        new 
origin[3]
        
get_user_origin(id,origin)
        new 
team[32]
        
get_user_team(id,team,31)
        new 
teamnum=1
        
if(containi(team,"CT")!=-|| containi(team,"Counter")!=-1)
        {
            
teamnum=2
        
}
        if( (
get_distance(origin,CTspawn_loc)<get_distance(origin,Tspawn_loc) && teamnum==1) || (get_distance(origin,Tspawn_loc)<get_distance(origin,CTspawn_loc) && teamnum==2) )
        {
            if(
get_pcvar_num(plugin_punishment)==1user_kill(id)
            else
            {
                new 
origin[3]
                
get_user_origin(id,origin)
                new 
Float:vector1[3]
                if(
teamnum==2)
                {
                    
vector1[0] = float(CTspawn_loc[0]) - origin[0]
                    
vector1[1] = float(CTspawn_loc[1]) - origin[1]
                    
vector1[2] = float(CTspawn_loc[2]) - origin[2]
                }
                else
                {
                    
vector1[0] = float(Tspawn_loc[0]) - origin[0]
                    
vector1[1] = float(Tspawn_loc[1]) - origin[1]
                    
vector1[2] = float(Tspawn_loc[2]) - origin[2]
                }
                new 
Float:num floatsqroot(250*250 vector1[0]*vector1[0] + vector1[1]*vector1[1] + vector1[2]*vector1[2])
                
vector1[0] *= num
                vector1
[1] *= num
                vector1
[2] *= num
                set_user_velocity
(id,vector1)
            }
            
client_print(id,print_chat,"[AMXX] No crossing the middle line.")
        }
    }
}

public 
spawn_locs()
{
    new 
ent1 find_ent_by_class(0,"info_player_start")
    new 
ent2 find_ent_by_class(0,"info_player_deathmatch")
    if(!
ent1)
    {
        
log_amx("No info_player_start found")
        
stopplugin=true
    
}
    if(!
ent2)
    {
        
log_amx("No info_player_deathmatch found")
        
stopplugin=true
    
}
    new 
Float:CTspawn_loc_F[3]
    new 
Float:Tspawn_loc_F[3]
    
entity_get_vector(ent1,EV_VEC_origin,CTspawn_loc_F)
    
entity_get_vector(ent2,EV_VEC_origin,Tspawn_loc_F)
    
CTspawn_loc[0] = floatround(CTspawn_loc_F[0])
    
CTspawn_loc[1] = floatround(CTspawn_loc_F[1])
    
CTspawn_loc[2] = floatround(CTspawn_loc_F[2])
    
Tspawn_loc[0] = floatround(Tspawn_loc_F[0])
    
Tspawn_loc[1] = floatround(Tspawn_loc_F[1])
    
Tspawn_loc[2] = floatround(Tspawn_loc_F[2])
}

public 
create_middle1()
{
    
//***
    //Simple Algebra to calculate the location of the middle line(s).
    //***
    
    
new Float:CTspawn_loc_F[3]
    new 
Float:Tspawn_loc_F[3]
    
IVecFVec(CTspawn_loc,CTspawn_loc_F)
    
IVecFVec(Tspawn_loc,Tspawn_loc_F)
    
    new 
Float:line1_slope = (CTspawn_loc_F[1] - Tspawn_loc_F[1]) / (CTspawn_loc_F[0] - Tspawn_loc_F[0])
    new 
Float:line2_slope = -1.0 * (1.0 line1_slope)
    
    new 
Float:midpoint[3]
    
midpoint[0] = (CTspawn_loc_F[0] + Tspawn_loc_F[0]) / 2
    midpoint
[1] = (CTspawn_loc_F[1] + Tspawn_loc_F[1]) / 2
    midpoint
[2] = (CTspawn_loc_F[2] + Tspawn_loc_F[2]) / 2

    
if(floatabs(line2_slope)>1.0)
    {
        
farthest_point1[1] = midpoint[1] + (tag_sprite_size_horizontal 2)
        
farthest_point2[1] = midpoint[1] - (tag_sprite_size_horizontal 2)
        
        
farthest_point1[0] = (farthest_point1[1] - midpoint[1] + (line2_slope midpoint[0])) / line2_slope
        farthest_point2
[0] = (farthest_point2[1] - midpoint[1] + (line2_slope midpoint[0])) / line2_slope
    
}
    
    if(
floatabs(line2_slope)<=1.0)
    {
        
farthest_point1[0] = midpoint[0] + (tag_sprite_size_horizontal 2)
        
farthest_point2[0] = midpoint[0] - (tag_sprite_size_horizontal 2)

        
farthest_point1[1] = line2_slope*(farthest_point1[0]-midpoint[0]) + midpoint[1]
        
farthest_point2[1] = line2_slope*(farthest_point2[0]-midpoint[0]) + midpoint[1]
    }
    
    
farthest_point1[2] = midpoint[2] - (tag_sprite_size_vertical 2)

    
set_task(get_pcvar_float(plugin_redrawtime),"create_middle2",1337,"",0,"b")
}

public 
create_middle2()
{
    if(!
stopplugin && get_pcvar_num(plugin_fence) && get_pcvar_num(plugin_enabled) && !(alivenum<=MINNUM && get_pcvar_num(plugin_2ppl)))
    {
        
set_task(0.1,"create_middle3",0,"",0,"a",(tag_sprite_size_vertical tag_sprite_vertical_increments))
        
multiplier=1
    
}
    if(
oldtime!=get_pcvar_float(plugin_redrawtime))
    {
        
remove_task(1337)
        
set_task(get_pcvar_float(plugin_redrawtime),"create_middle1",1337,"",0,"b")
        
oldtime=get_pcvar_float(plugin_redrawtime)
    }
}

public 
create_middle3()
{
    new 
zpoint floatround(farthest_point1[2]) + (multiplier tag_sprite_vertical_increments)
    
multiplier++
    new 
color[32], redgreenblue
    get_pcvar_string
(plugin_fencecolor,color,31)
    if(
equali(color,"red"))
    {
        
red=255
        green
=0
        blue
=0
    
}
    else if(
equali(color,"blue"))
    {
        
red=0
        green
=0
        blue
=255
    
}
    else if(
equali(color,"white"))
    {
        
red=255
        green
=255
        blue
=255
    
}
    else if(
equali(color,"random"))
    {
        
red=random_num(0,255)
        
green=random_num(0,255)
        
blue=random_num(0,255)
    }
    else if(
equali(color,"Yellow"))
    {
        
red 255
        green 
255
        blue 
0
    
}
    else if(
equali(color,"Orange"))
    {
        
red 255
        green 
128
        blue 
64
    
}
    else if(
equali(color,"Pink"))
    {
        
red 255
        green 
0
        blue 
128
    
}
    else if(
equali(color,"Indigo"))
    {
        
red 0
        green 
255
        blue 
255
    
}
    else
    {
        
red=0
        green
=255
        blue
=0
    
}

    
message_begin(MSG_BROADCASTSVC_TEMPENTITY
    
write_byte(0)        //TE_BEAMPOINTS
    
write_coord(floatround(farthest_point1[0]))
    
write_coord(floatround(farthest_point1[1]))
    
write_coord(zpoint)
    
write_coord(floatround(farthest_point2[0]))
    
write_coord(floatround(farthest_point2[1]))
    
write_coord(zpoint)
    
write_short(beamsprite)
    
write_byte(1)        // framestart
    
write_byte(1)        // framerate
    
write_byte(get_pcvar_num(plugin_redrawtime) * 10)// life in 0.1's
    
write_byte(5)        // width
    
write_byte(0)        // noise
    
write_byte(red)        // red
    
write_byte(green)    // green
    
write_byte(blue)    // blue
    
write_byte(get_pcvar_num(plugin_fencealpha))// brightness
    
write_byte(0)        // speed
    
message_end()

but there are some things that i don't like.

if nr_punishment is 2 then a player that is trying to cross the barrier is getting pushed back, but with a too high speed and he can fly if he's on a "ramp"

the problem is here, but i don t know how to resolve it.

PHP Code:
if(get_pcvar_num(plugin_punishment)==1user_kill(id)
            else
            {
                new 
origin[3]
                
get_user_origin(id,origin)
                new 
Float:vector1[3]
                if(
teamnum==2)
                {
                    
vector1[0] = float(CTspawn_loc[0]) - origin[0]
                    
vector1[1] = float(CTspawn_loc[1]) - origin[1]
                    
vector1[2] = float(CTspawn_loc[2]) - origin[2]
                }
                else
                {
                    
vector1[0] = float(Tspawn_loc[0]) - origin[0]
                    
vector1[1] = float(Tspawn_loc[1]) - origin[1]
                    
vector1[2] = float(Tspawn_loc[2]) - origin[2]
                }
                new 
Float:num floatsqroot(250*250 vector1[0]*vector1[0] + vector1[1]*vector1[1] + vector1[2]*vector1[2])
                
vector1[0] *= num
                vector1
[1] *= num
                vector1
[2] *= num
                set_user_velocity
(id,vector1)
            } 
can somebody help me resolving this algebra problem ?

i just want the player not to be pushed too much, but enough to move him a little away from the barrier and not cross it

Last edited by lexzor; 01-04-2021 at 03:53.
lexzor is offline
HamletEagle
AMX Mod X Plugin Approver
Join Date: Sep 2013
Location: Romania
Old 12-30-2020 , 07:55   Re: set_user_velocity
Reply With Quote #2

Lower the 250*250.
__________________
HamletEagle is offline
Natsheh
Veteran Member
Join Date: Sep 2012
Old 12-30-2020 , 22:04   Re: set_user_velocity
Reply With Quote #3

Code:
                static Float:fNum;                 fNum = floatmax(floatsqroot( (vector1[0]*vector1[0] + vector1[1]*vector1[1] + vector1[2]*vector1[2]) ), 1.0)                 vector1[0] = (vector1[0] / fNum) * 250.0;                 vector1[1] = (vector1[1] / fNum) * 250.0;                 vector1[2] = (vector1[2] / fNum) * 250.0;                 set_user_velocity(id,vector1)


also why're you declaring variables using new in a forward that's called many times per second!?

Edit: the script needs alot of optimizations ....
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !


Last edited by Natsheh; 01-02-2021 at 01:23.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
lexzor
Veteran Member
Join Date: Nov 2020
Old 01-01-2021 , 13:16   Re: set_user_velocity
Reply With Quote #4

thanks hamlet.

how can be improved ?
lexzor is offline
Natsheh
Veteran Member
Join Date: Sep 2012
Old 01-01-2021 , 13:57   Re: set_user_velocity
Reply With Quote #5

Quote:
Originally Posted by lexzor View Post
thanks hamlet.

how can be improved ?
nvm i thought u wrote the plugin or something...
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !

Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
lexzor
Veteran Member
Join Date: Nov 2020
Old 01-01-2021 , 13:59   Re: set_user_velocity
Reply With Quote #6

but you still can tell me how it could be improved i want to make it better
lexzor is offline
Natsheh
Veteran Member
Join Date: Sep 2012
Old 01-01-2021 , 14:01   Re: set_user_velocity
Reply With Quote #7

if you want to make it better, you start by simply searching...
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !

Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
lexzor
Veteran Member
Join Date: Nov 2020
Old 01-01-2021 , 14:07   Re: set_user_velocity
Reply With Quote #8

with what i should start first
lexzor is offline
Natsheh
Veteran Member
Join Date: Sep 2012
Old 01-01-2021 , 14:13   Re: set_user_velocity
Reply With Quote #9

Quote:
Originally Posted by lexzor View Post
with what i should start first
https://wiki.alliedmods.net/Optimizi...d_X_Scripting)
__________________
@Jailbreak Main Mod v2.7.0 100%
@User Tag Prefix 100% done !
@Mystery Box 100% done !
@VIP System 100% done !


Last edited by Natsheh; 01-01-2021 at 14:13.
Natsheh is offline
Send a message via MSN to Natsheh Send a message via Skype™ to Natsheh
lexzor
Veteran Member
Join Date: Nov 2020
Old 01-01-2021 , 22:00   Re: set_user_velocity
Reply With Quote #10

sorry, natsheh i copy what u send me but i still get back with a big speed
lexzor 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 04:36.


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