Raised This Month: $ Target: $400
 0% 

find all entity in sphere


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
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 - 799 views - 25.0 KB)
steve139 is offline
 



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