Raised This Month: $ Target: $400
 0% 

find all entity in sphere


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
steve139
Senior Member
Join Date: May 2007
Location: here
Old 09-03-2008 , 07:47   find all entity in sphere
Reply With Quote #1

hello , i wanted to find all entity id in a small sphere
and after check if the entity can be take

so i did that to find all entity



PHP Code:
public fm_find_ent_in_sphere2(Float:origin[3], Float:range) {
    new 
ent 0
    
    
while((ent engfunc(EngFunc_FindEntityInSphereentoriginrange)) != 0)
    {
        if((
is_allowed_ent(ent) )) {
            return 
ent
        
}
        else {
            
ent 0
        
}
    }
    return 
PLUGIN_CONTINUE

but while the function to find ent is lunched , server got freezed
this is the function to check if the entity is allowed

PHP Code:
is_allowed_ent(entid) {
    new 
classname[33]
    
pev(entid,pev_classname,classname,32)
    
    if(
equal(classname,"tf_weapon_caltrop"))
        return 
1
    
else if(equal(classname,"tf_weapon_concussiongrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_normalgrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_nailgrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_mirvgrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_mirvbomblet"))
        return 
1
    
else if(equal(classname,"tf_weapon_napalmgrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_empgrenade"))
        return 
1
    
else if(equal(classname,"building_dispenser"))
        return 
1
    
else if(equal(classname,"building_teleporter"))
        return 
1
    
else if(equal(classname,"tf_gl_pipebomb"))
        return 
1
    
else if(equal(classname,"tf_gl_grenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_gasgrenade"))
        return 
1
    
else if(equal(classname,"tf_weapon_caltrop"))
        return 
1
    
else if(equal(classname,"player"))
        return 
1
    
else if(equal(classname,"monster_turret"))
        return 
1
    
else if(equal(classname,"monster_miniturret"))
        return 
1
    
else if(equal(classname,"monster_sentry"))
        return 
1
    
else if(equal(classname,"detpack"))
        return 
1

    
return 0


anyone can help ?
in advance thank you
steve139 is offline
v3x
Veteran Member
Join Date: Oct 2004
Location: US
Old 09-03-2008 , 08:40   Re: find all entity in sphere
Reply With Quote #2

PHP Code:
        else {
            
ent 0
        

Take that out. I believe it's causing an infinite loop, thus the reason why your server is "freezing".
__________________
What am I doing these days? Well, I run my own Rust server. It's heavily modded. If you'd like to join, the ip is 167.114.101.67:28116

I also created a website called Rust Tools. It will calculate and tell you the raw amounts of resources needed to craft items.
v3x is offline
steve139
Senior Member
Join Date: May 2007
Location: here
Old 09-03-2008 , 08:49   Re: find all entity in sphere
Reply With Quote #3

this

PHP Code:
stock fm_find_ent_in_sphere2(Float:origin[3], Float:range) {
    new 
ent 0
    
    
while((ent engfunc(EngFunc_FindEntityInSphereentoriginrange)) != 0)
    {
        if((
is_allowed_ent(ent) )) {
            return 
ent
        
}
    }
    return 
PLUGIN_CONTINUE

it s freezing the server , also
steve139 is offline
Alka
AMX Mod X Plugin Approver
Join Date: Dec 2006
Location: malloc(null)
Old 09-03-2008 , 08:52   Re: find all entity in sphere
Reply With Quote #4

Maybe the way you checking the classname ?! Put the classnames in an array, and loop through them to check if is allowed or not. And set the initial 'ent' value to -1.
Alka is offline
jim_yang
Veteran Member
Join Date: Aug 2006
Old 09-03-2008 , 08:53   Re: find all entity in sphere
Reply With Quote #5

your function can't give you all entity in the sphere, just the first one with the wanted classnames

if you gonna compare one string to one of many strings, to make it not stuck, you should add compare condition to filter the most.
such as
if(contain(classname, "tf_weapon") != -1 || classname[0] == 'b' ||...)
just an example
if your filter is good enough, your server get less chance of freezing
__________________
Project : CSDM all in one - 99%
<team balancer#no round end#entity remover#quake sounds#fake full#maps management menu#players punishment menu#no team flash#colored flashbang#grenade trails#HE effect#spawn protection#weapon arena#weapon upgrade#auto join#no weapon drop#one name>
jim_yang is offline
steve139
Senior Member
Join Date: May 2007
Location: here
Old 09-03-2008 , 09:39   Re: find all entity in sphere
Reply With Quote #6

@alka
if((is_allowed_ent(ent) )) work correctly
@jim_yang
if i find one allowed ent it's will be good , but the loop come if it cant find ent i think


well

PHP Code:
is_allowed_ent(entid) {
    new 
classname[33]
    
pev(entid,pev_classname,classname,32)
    
    
/*if(equal(classname,"tf_weapon_caltrop"))
        return 1
    else if(equal(classname,"tf_weapon_concussiongrenade"))
        return 1
    else if(equal(classname,"tf_weapon_normalgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_nailgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_mirvgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_mirvbomblet"))
        return 1
    else if(equal(classname,"tf_weapon_napalmgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_empgrenade"))
        return 1
        */
    
if(contain(classname"tf_weapon") != -1)
        return 
1
    
else if(equal(classname,"building_dispenser"))
        return 
1
    
else if(equal(classname,"building_teleporter"))
        return 
1
    
else if(equal(classname,"tf_gl_pipebomb"))
        return 
1
    
else if(equal(classname,"tf_gl_grenade"))
        return 
1
    
/*else if(equal(classname,"tf_weapon_gasgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_caltrop"))
        return 1
        */
    
else if(equal(classname,"player"))
        return 
1
    
if(contain(classname"monster_") != -1)
        return 
1
    
/*else if(equal(classname,"monster_turret"))
        return 1
    else if(equal(classname,"monster_miniturret"))
        return 1
    else if(equal(classname,"monster_sentry"))
        return 1*/
    
else if(equal(classname,"detpack"))
        return 
1

    
return 0

and this

PHP Code:
stock fm_find_ent_in_sphere2(Float:origin[3], Float:range) {
    new 
ent = -1
    
    
while((ent engfunc(EngFunc_FindEntityInSphereentoriginrange)) != 0)
    {
        if((
is_allowed_ent(ent) )) {
            return 
ent
        
}
    }
    return 
PLUGIN_CONTINUE

keep freezing
steve139 is offline
G-Dog
Senior Member
Join Date: Dec 2005
Location: Thunderstorm Central
Old 09-04-2008 , 00:46   Re: find all entity in sphere
Reply With Quote #7

doesn't FindEntityInSphere return -1 on failure and not 0? Thus the while loop is non terminating. Try changing
Code:
while((ent = engfunc(EngFunc_FindEntityInSphere, ent, origin, range)) != 0)
to
Code:
while((ent = engfunc(EngFunc_FindEntityInSphere, ent, origin, range)) != -1)
__________________
If at first you don't succeed, then skydiving isn't for you.
G-Dog is offline
Send a message via AIM to G-Dog
steve139
Senior Member
Join Date: May 2007
Location: here
Old 09-04-2008 , 06:37   Re: find all entity in sphere
Reply With Quote #8

this
PHP Code:
stock fm_find_ent_in_sphere2(Float:origin[3], Float:range) {
    new 
ent = -1
    
    
while((ent engfunc(EngFunc_FindEntityInSphereentoriginrange)) != -1)
    {
        if((
is_allowed_ent(ent) )) {
            return 
ent
        
}
    }
    return 
PLUGIN_CONTINUE


keep freezing the server
steve139 is offline
v3x
Veteran Member
Join Date: Oct 2004
Location: US
Old 09-04-2008 , 11:07   Re: find all entity in sphere
Reply With Quote #9

Where are you calling the function from? The full code could help us understand more about your problem.
__________________
What am I doing these days? Well, I run my own Rust server. It's heavily modded. If you'd like to join, the ip is 167.114.101.67:28116

I also created a website called Rust Tools. It will calculate and tell you the raw amounts of resources needed to craft items.
v3x is offline
steve139
Senior Member
Join Date: May 2007
Location: here
Old 09-04-2008 , 11:13   Re: find all entity in sphere
Reply With Quote #10

here is the .sma
(or in .sma attached)

i want this due to the
fm_find_ent_in_sphere(id, origin, 8.0)
return first ent found in sphere but there is some map witch this return an other ent all time instead of witch i want



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

#include <hamsandwich>

#include <fakemeta>
#include <fakemeta_util>

new g_grabBeam[]        =    "sprites/laserbeam.spr"
new g_PainSound[]        =    "player/PL_PAIN2.WAV"

#define MAX_ENTS 256
#define MAX_KEYVALUES 16

#define MAX_MODELS_TO_GRAB 1
new g_modelToGrab[MAX_MODELS_TO_GRAB][] = { "models/w_" }
#define MAX_CLASSNAMES_TO_GRAB 9
new g_classnameToGrab[MAX_CLASSNAMES_TO_GRAB][] =
{
    
"weaponbox",
    
"grenade",
    
"func_breakable",
    
"func_ladder",
    
"csdm",
    
"bullet",
    
"rocket",
    
"dookie",
    
"piss_puddle"
}


#define MAX_MASSMOVE_ENTS 16

new grabbed[33]
new 
grabbedIsBrush[33]

new 
grabbedNoClip[33]
new 
grabbedCopyEnt[33]

new 
grabbedOldMoveType[33][MAX_MASSMOVE_ENTS]
new 
grabbedOldSolid[33][MAX_MASSMOVE_ENTS]

new 
grabbedOldFlags[33][MAX_MASSMOVE_ENTS]
new 
grabbedOldRender[33][MAX_MASSMOVE_ENTS][6]

new 
grablength[33]
new 
bool:grabmodeon[33]

new 
g_massMoveEnts[33][MAX_MASSMOVE_ENTS]
new 
g_massMoveNum[33]

new 
bool:g_massMoveOn[33]
new 
Float:g_massMoveOldOrigin[33][3]

new 
g_maxents
new g_maxplayers

new velocity_multiplier
new laserbeam

//Pcvars
new grab_force
new grab_glow

new grab_red
new grab_green

new grab_blue
new grab_transp

new grab_beam

new const BOUNDS 3

new pushpull_speed


#if !defined ADMIN_SUPREME
 #define ADMIN_SUPREME (1<<24)
#endif

public plugin_init()
{
    
register_plugin("Ultimate JediGrab""1.2""KRoT@L / SpaceDude")
    
register_cvar("sv_force","0")
    
    
grab_force register_cvar("sv_grab_force""10")
    
grab_glow register_cvar("sv_grab_glow""1")

    
grab_red register_cvar("sv_grab_red""0")
    
grab_green register_cvar("sv_grab_green""255")
    
grab_blue register_cvar("sv_grab_blue""128")
    
    
grab_transp register_cvar("sv_grab_transp""32")

    
grab_beam register_cvar("sv_grab_beam""1")


    
pushpull_speed register_cvar("sv_pushpull_speed""35")
    
    
    
    
register_clcmd("+force""grab"ADMIN_KICK"Bind a key to +force")
    
register_clcmd("-force""release"ADMIN_KICK)


    
register_clcmd("+pull""startpull"ADMIN_KICK"Bind a key to +pull")
    
register_clcmd("-pull""stopdist"ADMIN_KICK)
    
    
register_clcmd("+push""startpush"ADMIN_KICK"Bind a key to +push")
    
register_clcmd("-push""stopdist"ADMIN_KICK)

    
register_event("StatusValue","spec_event","be","1=2")

    
RegisterHam(Ham_Killed"player""death_event"1)
    
RegisterHam(Ham_Spawn"player""fwd_Ham_Spawn_post"1)

    
g_maxents        =        global_get(glb_maxEntities)
    
g_maxplayers        =        get_maxplayers()

    new 
Float:ori[3], i
    
for(g_maxplayers+1<= g_maxentsi++)
    {
        if(
pev_valid(i))
        {
            
pev(ipev_originori)
            if((
pev(ipev_solid) == SOLID_BSP && pev(ipev_movetype) == MOVETYPE_PUSH)
            || (
ori[0] == 0.0 && ori[1] == 0.0 && ori[2] == 0.0))
            {
                
set_pev(ipev_iuser499)
            }
        }
    }
    
    
}

public 
plugin_precache()
{
    if(
cvar_exists("amxmod_version"))
        
server_cmd("quit")

    
register_forward(FM_KeyValue"fwd_KeyValue_Post"1)
  
    
laserbeam precache_model(g_grabBeam)
    
precache_sound(g_PainSound)

}

setOldRendering(identposfm_set_rendering(entgrabbedOldRender[id][pos][0], grabbedOldRender[id][pos][1], grabbedOldRender[id][pos][2], grabbedOldRender[id][pos][3], grabbedOldRender[id][pos][4], grabbedOldRender[id][pos][5])

makeBounds(Float:traceEnds[8][3], Float:origin[3])
{
    
traceEnds[0][0] = origin[0] - BOUNDS
    traceEnds
[0][1] = origin[1] - BOUNDS

    traceEnds
[0][2] = origin[2] - BOUNDS
    traceEnds
[1][0] = origin[0] - BOUNDS

    traceEnds
[1][1] = origin[1] - BOUNDS
    traceEnds
[1][2] = origin[2] + BOUNDS

    traceEnds
[2][0] = origin[0] + BOUNDS
    traceEnds
[2][1] = origin[1] - BOUNDS

    traceEnds
[2][2] = origin[2] + BOUNDS
    traceEnds
[3][0] = origin[0] + BOUNDS

    traceEnds
[3][1] = origin[1] - BOUNDS
    traceEnds
[3][2] = origin[2] - BOUNDS

    traceEnds
[4][0] = origin[0] - BOUNDS
    traceEnds
[4][1] = origin[1] + BOUNDS

    traceEnds
[4][2] = origin[2] - BOUNDS
    traceEnds
[5][0] = origin[0] - BOUNDS

    traceEnds
[5][1] = origin[1] + BOUNDS
    traceEnds
[5][2] = origin[2] + BOUNDS

    traceEnds
[6][0] = origin[0] + BOUNDS
    traceEnds
[6][1] = origin[1] + BOUNDS

    traceEnds
[6][2] = origin[2] + BOUNDS
    traceEnds
[7][0] = origin[0] + BOUNDS

    traceEnds
[7][1] = origin[1] + BOUNDS
    traceEnds
[7][2] = origin[2] - BOUNDS

    
return 1
}
/*
is_allowed_ent(entid) {
    new classname[33]
    pev(entid,pev_classname,classname,32)
    
    if(equal(classname,"tf_weapon_caltrop"))
        return 1
    else if(equal(classname,"tf_weapon_concussiongrenade"))
        return 1
    else if(equal(classname,"tf_weapon_normalgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_nailgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_mirvgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_mirvbomblet"))
        return 1
    else if(equal(classname,"tf_weapon_napalmgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_empgrenade"))
        return 1
    else if(equal(classname,"building_dispenser"))
        return 1
    else if(equal(classname,"building_teleporter"))
        return 1
    else if(equal(classname,"tf_gl_pipebomb"))
        return 1
    else if(equal(classname,"tf_gl_grenade"))
        return 1
    else if(equal(classname,"tf_weapon_gasgrenade"))
        return 1
    else if(equal(classname,"tf_weapon_caltrop"))
        return 1
    else if(equal(classname,"player"))
        return 1
    else if(equal(classname,"monster_turret"))
        return 1
    else if(equal(classname,"monster_miniturret"))
        return 1
    else if(equal(classname,"monster_sentry"))
        return 1
    else if(equal(classname,"detpack"))
        return 1

    return 0
}*/

is_allowed_ent(entid) {
    new 
classname[33]
    
pev(entid,pev_classname,classname,32)
    if(
contain(classname"tf_weapon") != -1)
        return 
1
    
else if(equal(classname,"building_dispenser"))
        return 
1
    
else if(equal(classname,"building_teleporter"))
        return 
1
    
else if(equal(classname,"tf_gl_pipebomb"))
        return 
1
    
else if(equal(classname,"tf_gl_grenade"))
        return 
1
    
else if(equal(classname,"player"))
        return 
1
    
if(contain(classname"monster_") != -1)
        return 
1
    
else if(equal(classname,"detpack"))
        return 
1

    
return 0
}  
public 
grabtask(parm[])
{
    new 
id parm[0]
    if (!
grabbed[id])
    {
        new 
targetid 0
        
new body

        get_user_aiming
(idtargetidbody)
        if(
targetid)
        {
            
set_grabbed(idtargetid)
        }

        else
        {
            new 
iOrigin[3], Float:origin[3]
            
get_user_origin(idiOrigin3)

            
IVecFVec(iOriginorigin)

            new 
string[64], i
            
//-
            //targetid = fm_find_ent_in_sphere(id, origin, 8.0)
            
targetid fm_find_ent_in_sphere2(origin8.0)
            
            while(
targetid 0)
            {
                
string[0] = '^0'
                
pev(targetidpev_modelstring63)

                for(
0MAX_MODELS_TO_GRABi++)
                {
                    if(
containi(stringg_modelToGrab[i]) != -1)
                    {
                        
set_grabbed(idtargetid)
                        return 
0
                    
}
                }

                
string[0] = '^0'
                
pev(targetidpev_classnamestring63)

                for(
0MAX_CLASSNAMES_TO_GRABi++)
                {
                    
set_grabbed(idtargetid)
                    return 
0
                
}
            }
            
//targetid = fm_find_ent_in_sphere(targetid, origin, 8.0)
            
targetid fm_find_ent_in_sphere2(origin8.0)
        }
    }

    else
    {
        if(!
pev_valid(grabbed[id]))
        {
            
release(id)
            return 
0
        
}

        new 
origin[3], look[3]
        new 
direction[3], moveto[3]

        new 
gborigin[3], Float:grabbedorigin[3]
        new 
Float:velocity[3], length

        get_user_origin
(idorigin1)
        
get_user_origin(idlook3)

        if(
grabbedIsBrush[id] == 1)
            
fm_get_brush_entity_origin(grabbed[id], grabbedorigin)

        else
            
pev(grabbed[id], pev_origingrabbedorigin)

        
FVecIVec(grabbedorigingborigin)

        
direction[0] = look[0] - origin[0]
        
direction[1] = look[1] - origin[1]
        
direction[2] = look[2] - origin[2]

        
length get_distance(lookorigin)
        if (!
lengthlength 1

        moveto
[0] = origin[0] + direction[0] * grablength[id] / length
        moveto
[1] = origin[1] + direction[1] * grablength[id] / length
        moveto
[2] = origin[2] + direction[2] * grablength[id] / length

        
if(get_pcvar_num(grab_beam))
        {
            
message_begin(MSG_PVSSVC_TEMPENTITYgborigin)

            
write_byte(1)
            
write_short(id)

            
write_coord(gborigin[0])
            
write_coord(gborigin[1])
            
write_coord(gborigin[2])

            
write_short(laserbeam)

            
write_byte(1)
            
write_byte(1)
            
write_byte(1)

            
write_byte(6)
            
write_byte(0)
            
write_byte(255)

            
write_byte(0)
            
write_byte(0)
            
write_byte(128)

            
write_byte(0)
            
message_end()
        }

        
velocity[0] = (moveto[0] - grabbedorigin[0]) * velocity_multiplier
        velocity
[1] = (moveto[1] - grabbedorigin[1]) * velocity_multiplier
        velocity
[2] = (moveto[2] - grabbedorigin[2]) * velocity_multiplier

        
new not_a_player
        
new Float:fmoveto[3]

        
IVecFVec(movetofmoveto)
        if(
g_massMoveOn[id] == true)
        {
            new 
enti
            
new num g_massMoveNum[id]

            new 
Float:grabbedorigin2[3]
            for(
0numi++)
            {
                
ent g_massMoveEnts[id][i]
                if(!
pev_valid(ent)) continue

                
not_a_player = !is_user_connected(ent)

                if(
grabbedNoClip[id] == 1)
                {
                    
IVecFVec(movetofmoveto)
                    if(!
not_a_player)
                    {
                        
set_pev(entpev_solidSOLID_NOT)
                        
set_pev(entpev_movetypeMOVETYPE_NOCLIP)

                        if(
== 0)
                            
fm_entity_set_origin(entfmoveto)

                        else
                        {
                            
pev(entpev_origingrabbedorigin2)

                            
grabbedorigin2[0] += (grabbedorigin[0] - g_massMoveOldOrigin[id][0])
                            
grabbedorigin2[1] += (grabbedorigin[1] - g_massMoveOldOrigin[id][1])
                            
grabbedorigin2[2] += (grabbedorigin[2] - g_massMoveOldOrigin[id][2])

                            
fm_entity_set_origin(entgrabbedorigin2)
                        }
                    }

                    else
                    {
                        
pev(entpev_origingrabbedorigin2)

                        
grabbedorigin2[0] += (grabbedorigin[0] - g_massMoveOldOrigin[id][0])
                        
grabbedorigin2[1] += (grabbedorigin[1] - g_massMoveOldOrigin[id][1])
                        
grabbedorigin2[2] += (grabbedorigin[2] - g_massMoveOldOrigin[id][2])

                        new 
Float:Min[3], Float:Max[3]

                        
pev(grabbed[id], pev_minsMin)
                        
pev(grabbed[id], pev_maxsMax)

                        
grabbedorigin2[0] -= (Min[0] + Max[0]) * 0.5
                        grabbedorigin2
[1] -= (Min[1] + Max[1]) * 0.5
                        grabbedorigin2
[2] -= (Min[2] + Max[2]) * 0.5

                        fm_entity_set_origin
(grabbed[id], grabbedorigin2)
                    }

                    continue
                }

                else if(
not_a_player)
                {
                    
set_pev(entpev_solidSOLID_BBOX)
                    
set_pev(entpev_movetypeMOVETYPE_FLY)
                }

                
set_pev(entpev_velocityvelocity)
            }

            
g_massMoveOldOrigin[id][0] = grabbedorigin[0]
            
g_massMoveOldOrigin[id][1] = grabbedorigin[1]
            
g_massMoveOldOrigin[id][2] = grabbedorigin[2]
        }

        else
        {
            
not_a_player = !is_user_connected(grabbed[id])
            if(
grabbedNoClip[id] == 1)
            {
                
IVecFVec(movetofmoveto)
                if(!
not_a_player)
                {
                    
set_pev(grabbed[id], pev_solidSOLID_NOT)
                    
set_pev(grabbed[id], pev_movetypeMOVETYPE_NOCLIP)

                    
fm_entity_set_origin(grabbed[id], fmoveto)
                }

                else
                {
                    new 
Float:Min[3], Float:Max[3]

                    
pev(grabbed[id], pev_minsMin)
                    
pev(grabbed[id], pev_maxsMax)

                    
fmoveto[0] -= (Min[0] + Max[0]) * 0.5
                    fmoveto
[1] -= (Min[1] + Max[1]) * 0.5
                    fmoveto
[2] -= (Min[2] + Max[2]) * 0.5

                    fm_entity_set_origin
(grabbed[id], fmoveto)
                }

                return 
0
            
}

            else if(
not_a_player)
            {
                
set_pev(grabbed[id], pev_solidSOLID_BBOX)
                
set_pev(grabbed[id], pev_movetypeMOVETYPE_FLY)
            }

            
set_pev(grabbed[id], pev_velocityvelocity)
        }
    }
    return 
1
}

public 
release(id)
{

    if (
grabmodeon[id])
    {
        new 
Float:origin[3], Float:traceEnds[8][3]
        if(
g_massMoveOn[id] == true)
        {
            new 
enti
            
new num g_massMoveNum[id]

            new 
goToNextEnt 0

            
for(0numi++)
            {
                
ent g_massMoveEnts[id][i]
                if(!
pev_valid(ent)) continue

                if(
grabbedNoClip[id] == && !is_user_connected(ent) && pev(entpev_iuser4) != 99)
                {
                    
pev(entpev_originorigin)

                    
makeBounds(traceEndsorigin)
                    for(new 
08j++)
                    {
                        if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                        {
                            
fm_remove_entity(ent)
                            
goToNextEnt 1

                            
break
                        }
                    }
                }

                if(
goToNextEnt == i+1) continue

                
set_pev(entpev_flagsgrabbedOldFlags[id][i])
                
set_pev(entpev_movetypegrabbedOldMoveType[id][i])
                
set_pev(entpev_solidgrabbedOldSolid[id][i])

                
setOldRendering(identi)
            }

            
client_print(id,print_chat,"[AMXX] You have released something")
        }

        else if (
grabbed[id])
        {
            if(
pev_valid(grabbed[id]))
            {
                if(
grabbedNoClip[id] == && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
                {
                    
pev(grabbed[id], pev_originorigin)
                    
makeBounds(traceEndsorigin)

                    for(new 
08j++)
                    {
                        if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                        {
                            
client_print(idprint_chat"[AMXX] You can't release a TRIGGER entity inside something SOLID")
                            return 
1
                        
}
                    }
                }

                
set_pev(grabbed[id], pev_flagsgrabbedOldFlags[id][0])
                
set_pev(grabbed[id], pev_movetypegrabbedOldMoveType[id][0])
                
set_pev(grabbed[id], pev_solidgrabbedOldSolid[id][0])

                
setOldRendering(idgrabbed[id], 0)
                
client_print(idprint_chat"[AMXX] You have released something")
            }
        }

        
grabmodeon[id] = false
        grabbed
[id] = 0

        grabbedCopyEnt
[id] = 0
        remove_task
(100 id)
    }
    return 
1
}

public 
grab(id)
{
    if((
get_cvar_num("sv_force") == 0)) {
        if(!
access(id,ADMIN_KICK)) {
            
client_print(id,print_center,"Only admin can use this command")
            return 
PLUGIN_HANDLED
        
}
    }
    
grabbedNoClip[id] = 0
    
    
    
if (!grabmodeon[id])
    {
        
client_print(idprint_chat"[AMXX] Searching for a target")
        new 
targetid=0body

        
new parm[1]
        
parm[0] = id

        velocity_multiplier 
get_pcvar_num(grab_force)
        
grabmodeon[id]=true

        set_task
(0.1"grabtask"100 idparm1"b")
        
get_user_aiming(idtargetidbody)

        if (
targetid)
        {

            
set_grabbed(idtargetid)
            return 
1
        
}

        else
        {
            new 
iOrigin[3]
            new 
Float:origin[3]

            
get_user_origin(idiOrigin3)
            
IVecFVec(iOriginorigin)

            new 
string[64], i
            
//targetid = fm_find_ent_in_sphere(id, origin, 8.0)
            
targetid fm_find_ent_in_sphere2(origin8.0)

            while(
targetid 0)
            {
                
string[0] = '^0'
                
pev(targetidpev_modelstring63)

                for(
0MAX_MODELS_TO_GRABi++)
                {
                    if(
containi(stringg_modelToGrab[i]) != -1)
                    {

                        
set_grabbed(idtargetid)
                        return 
0
                    
}
                }

                
string[0] = '^0'
                
pev(targetidpev_classnamestring63)

                for(
0MAX_CLASSNAMES_TO_GRABi++)
                {
                    if(
containi(stringg_classnameToGrab[i]) != -1)
                    {

                        
set_grabbed(idtargetid)
                        return 
0
                    
}
                }
                
                
//targetid = fm_find_ent_in_sphere(targetid, origin, 8.0)
                
targetid fm_find_ent_in_sphere2(origin8.0)
            }
        }

        
    }

    return 
1
}

stock fm_find_ent_in_sphere2(Float:origin[3], Float:range) {
    new 
ent = -1
    
    
while((ent engfunc(EngFunc_FindEntityInSphereentoriginrange)) != -1)
    {
        if((
is_allowed_ent(ent) )) {
            return 
ent
        
}
    }
    return 
PLUGIN_CONTINUE
}

public 
spec_event(id)
{
    new 
targetid read_data(2)

    if (!
is_user_alive(targetid))
        return 
0

    
if (grabmodeon[id] && !grabbed[id])
        
set_grabbed(idtargetid)

    return 
0
}

public 
set_grabbed(idtargetid)
{
    if((!
is_allowed_ent(targetid)))
        return 
PLUGIN_HANDLED

    
new origin1[3], origin2[3], Float:forigin2[3]
    
get_user_origin(idorigin1)

    
pev(targetidpev_originforigin2)

    if(!
is_user_connected(targetid) && pev(targetidpev_iuser4) == 99)
    {
        
fm_get_brush_entity_origin(targetidforigin2)
        
grabbedIsBrush[id] = 1
    
}

    
FVecIVec(forigin2origin2)
    
    
g_massMoveOldOrigin[id][0] = forigin2[0]
    
g_massMoveOldOrigin[id][1] = forigin2[1]
    
g_massMoveOldOrigin[id][2] = forigin2[2]
    
    
grabbed[id] = targetid

    grabbedOldMoveType
[id][0] = pev(targetidpev_movetype)
    
grabbedOldSolid[id][0] = pev(targetidpev_solid)
    
grabbedOldFlags[id][0] = pev(targetidpev_flags)

    if(
g_massMoveOn[id] == false)
    {
        new 
Float:color[3]
        
grabbedOldRender[id][0][0] = pev(targetidpev_renderfx)

        
pev(targetidpev_rendercolorcolor)

        
grabbedOldRender[id][0][1] = floatround(color[0])
        
grabbedOldRender[id][0][2] = floatround(color[1])
        
grabbedOldRender[id][0][3] = floatround(color[2])

        
grabbedOldRender[id][0][4] = pev(targetidpev_rendermode)
        
grabbedOldRender[id][0][5] = pev(targetidpev_renderamt)

        if(
get_pcvar_num(grab_glow))
            
fm_set_rendering(targetidkRenderFxGlowShellget_pcvar_num(grab_red), get_pcvar_num(grab_green), get_pcvar_num(grab_blue), kRenderTransAlphaget_pcvar_num(grab_transp))
    }

    
grablength[id] = get_distance(origin1,origin2)

    new 
classname[32]
    
pev(targetidpev_classnameclassname31)

    
client_print(idprint_chat"[AMXX] You have grabbed something! (id=%d, classname=%s)"targetidclassname)
    return 
0
}

public 
disttask(parm[])
{
    new 
id parm[0]
    if (
grabbed[id])
    {
        if (
parm[1] == 1)
            
grablength[id] -= get_pcvar_num(pushpull_speed)

        else if (
parm[1] == 2)
            
grablength[id] += get_pcvar_num(pushpull_speed)
    }
}

public 
startpull(id)
{
    if((
get_cvar_num("sv_force") == 0)) {
        if(!
access(id,ADMIN_KICK)) {
            
client_print(id,print_center,"Only admin can use this command")
            return 
PLUGIN_HANDLED
        
}
    }

    if (
grabbed[id])
    {
        new 
parm[2]

        
parm[0] = id
        parm
[1] = 1

        set_task
(0.1"disttask"500 idparm2"b")
    }

    return 
1
}

public 
startpush(id)
{
    if((
get_cvar_num("sv_force") == 0)) {
        if(!
access(id,ADMIN_KICK)) {
            
client_print(id,print_center,"Only admin can use this command")
            return 
PLUGIN_HANDLED
        
}
    }

    if (
grabbed[id])
    {
        new 
parm[2]

        
parm[0] = id
        parm
[1] = 2

        set_task
(0.1"disttask"500 idparm2"b")
    }

    return 
1
}

public 
stopdist(idlevelcid)
{
    if (!
cmd_access(idlevelcid1))
        return 
1

    
if (grabbed[id])
        
remove_task(500 id)

    return 
1
}

public 
death_event()
{
    new 
id read_data(2)
    if(!
is_user_connected(id)) return 0

    
if(task_exists(100 id))
        
remove_task(100 id)

    if(
grabbed[id] > && pev_valid(grabbed[id]))
    {
        if(
pev_valid(grabbed[id]))
        {
            if(
grabbedNoClip[id] == && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
            {
                new 
Float:origin[3]
                
pev(grabbed[id], pev_originorigin)

                new 
Float:traceEnds[8][3]
                
makeBounds(traceEndsorigin)

                for(new 
08j++)
                {
                    if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                    {
                        
fm_remove_entity(grabbed[id])
                        break
                    }
                }
            }

            if(
pev_valid(grabbed[id]))
            {
                
set_pev(grabbed[id], pev_flagsgrabbedOldFlags[id][0])
                
set_pev(grabbed[id], pev_movetypegrabbedOldMoveType[id][0])
                
set_pev(grabbed[id], pev_solidgrabbedOldSolid[id][0])

                
setOldRendering(idgrabbed[id], 0)
            }
        }

        if(
g_massMoveOn[id] == true)
        {
            new 
entinum g_massMoveNum[id], goToNextEnt 0
            
for(0numi++)
            {
                
ent g_massMoveEnts[id][i]
                if(!
pev_valid(ent)) continue

                if(
grabbedNoClip[id] == && !is_user_connected(ent) && pev(entpev_iuser4) != 99)
                {
                    
pev(entpev_originorigin)
                    
makeBounds(traceEndsorigin)

                    for(new 
08j++)
                    {
                        if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                        {
                            
fm_remove_entity(ent)
                            
goToNextEnt 1

                            
break
                        }
                    }
                }

                if(
goToNextEnt == i+1) continue

                
set_pev(entpev_flagsgrabbedOldFlags[id][i])
                
set_pev(entpev_movetypegrabbedOldMoveType[id][i])
                
set_pev(entpev_solidgrabbedOldSolid[id][i])

                
setOldRendering(identi)
            }
        }
    }

    
grabbed[id] = 0
    grabmodeon
[id] = false

    
new players[32], inumplayer
    get_players
(playersinum)

    for(new 
inum k++)
    {
        
player players[k]
        if(
grabbed[player] == id)
        {
            if(
task_exists(100 player))
                
remove_task(100 player)

            
grabbed[player] = 0
            grabmodeon
[player] = false
        
}
    }

    
massrelease(id)
    return 
0
}

public 
client_kill(id)
{
    if(
task_exists(100 id))
        
remove_task(100 id)

    if(
grabbed[id] > && pev_valid(grabbed[id]))
    {
        if(
pev_valid(grabbed[id]))
        {
            if(
grabbedNoClip[id] == && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
            {
                new 
Float:origin[3]
                
pev(grabbed[id], pev_originorigin)

                new 
Float:traceEnds[8][3]
                
makeBounds(traceEndsorigin)

                for(new 
08j++)
                {
                    if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                    {
                        
fm_remove_entity(grabbed[id])
                        break
                    }
                }
            }

            if(
pev_valid(grabbed[id]))
            {
                
set_pev(grabbed[id], pev_flagsgrabbedOldFlags[id][0])
                
set_pev(grabbed[id], pev_movetypegrabbedOldMoveType[id][0])
                
set_pev(grabbed[id], pev_solidgrabbedOldSolid[id][0])

                
setOldRendering(idgrabbed[id], 0)
            }
        }

        if(
g_massMoveOn[id] == true)
        {
            new 
enti
            
new num g_massMoveNum[id]

            new 
goToNextEnt 0

            
for(0numi++)
            {
                
ent g_massMoveEnts[id][i]
                if(!
pev_valid(ent)) continue

                if(
grabbedNoClip[id] == && !is_user_connected(ent) && pev(entpev_iuser4) != 99)
                {
                    
pev(entpev_originorigin)
                    
makeBounds(traceEndsorigin)

                    for(new 
08j++)
                    {
                        if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                        {
                            
fm_remove_entity(ent)
                            
goToNextEnt 1

                            
break
                        }
                    }
                }

                if(
goToNextEnt == 1) continue

                
set_pev(entpev_flagsgrabbedOldFlags[id][i])
                
set_pev(entpev_movetypegrabbedOldMoveType[id][i])
                
set_pev(entpev_solidgrabbedOldSolid[id][i])

                
setOldRendering(identi)

            }
        }
    }

    
grabbed[id] = 0
    grabmodeon
[id] = false

    
new players[32], inumplayer
    get_players
(playersinum)

    for(new 
inum k++)
    {
        
player players[k]
        if(
grabbed[player] == id)
        {
            if(
task_exists(100 player))
                
remove_task(100 player)

            
grabbed[player] = 0
            grabmodeon
[player] = false
        
}
    }

    
massrelease(id)
    return 
0
}

public 
client_connect(id)
{
    if(
task_exists(100 id))
        
remove_task(100 id)

    
grabbed[id] = 0
    grabmodeon
[id] = false
}

public 
client_disconnect(id)
{
    if(
task_exists(100 id))
        
remove_task(100 id)

    if(
grabbed[id] > && pev_valid(grabbed[id]))
    {
        if(
pev_valid(grabbed[id]))
        {
            if(
grabbedNoClip[id] == && !is_user_connected(grabbed[id]) && pev(grabbed[id], pev_iuser4) != 99)
            {
                new 
Float:origin[3]
                
pev(grabbed[id], pev_originorigin)

                new 
Float:traceEnds[8][3]
                
makeBounds(traceEndsorigin)

                for(new 
08j++)
                {
                    if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                    {
                        
fm_remove_entity(grabbed[id])
                        break
                    }
                }
            }

            if(
pev_valid(grabbed[id]))
            {
                
set_pev(grabbed[id], pev_flagsgrabbedOldFlags[id][0])
                
set_pev(grabbed[id], pev_movetypegrabbedOldMoveType[id][0])
                
set_pev(grabbed[id], pev_solidgrabbedOldSolid[id][0])

                
setOldRendering(idgrabbed[id], 0)
            }
        }

        if(
g_massMoveOn[id] == true)
        {
            new 
enti
            
new num g_massMoveNum[id]

            new 
goToNextEnt 0
            
for(0numi++)
            {
                
ent g_massMoveEnts[id][i]
                if(!
pev_valid(ent)) continue

                if(
grabbedNoClip[id] == && !is_user_connected(ent) && pev(entpev_iuser4) != 99)
                {
                    
pev(entpev_originorigin)
                    
makeBounds(traceEndsorigin)

                    for(new 
08j++)
                    {
                        if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                        {
                            
fm_remove_entity(ent)
                            
goToNextEnt 1

                            
break
                        }
                    }
                }

                if(
goToNextEnt == 1) continue

                
set_pev(entpev_flagsgrabbedOldFlags[id][i])
                
set_pev(entpev_movetypegrabbedOldMoveType[id][i])
                
set_pev(entpev_solidgrabbedOldSolid[id][i])

                
setOldRendering(identi)
            }
        }
    }

    
grabbed[id] = 0
    grabmodeon
[id] = false

    massrelease
(id)
}

massrelease(id)
{
    
g_massMoveOn[id] = false
    
new num g_massMoveNum[id]

    if(
num 1)
    {
        new 
ient
        setOldRendering
(ident0)

        new 
Float:origin[3]
        new 
Float:traceEnds[8][3], goToNextEnt 0

        
for(1numi++)
        {
            
ent g_massMoveEnts[id][i]
            if(!
pev_valid(ent)) continue

            if(
grabbedNoClip[id] == && !is_user_connected(ent) && pev(entpev_iuser4) != 99)
            {
                
pev(entpev_originorigin)
                
makeBounds(traceEndsorigin)

                for(new 
08j++)
                {
                    if(
fm_point_contents(traceEnds[j]) == CONTENTS_SOLID)
                    {
                        
fm_remove_entity(ent)
                        
goToNextEnt 1

                        
break
                    }
                }
            }

            if(
goToNextEnt == 1) continue

            
set_pev(entpev_movetypegrabbedOldMoveType[id][i])
            
set_pev(entpev_solidgrabbedOldSolid[id][i])
            
set_pev(entpev_flagsgrabbedOldFlags[id][i])

            
setOldRendering(identi)
        }
    }

    
g_massMoveNum[id] = 0

Attached Files
File Type: sma Get Plugin or Get Source (force_plugin_v2.sma - 800 views - 25.0 KB)
steve139 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 03:07.


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