Raised This Month: $ Target: $400
 0% 

[Solved] Moving func_wall


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
joropito
AlliedModders Donor
Join Date: Mar 2009
Location: pfnAddToFullPack
Old 05-15-2010 , 11:35   Re: Moving func_wall
Reply With Quote #6

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

#define PLUGIN_NAME     "JoRoGrab"
#define PLUGIN_AUTHOR   "JoRoPiTo"
#define PLUGIN_VERSION  "0.1"
#define PLUGIN_CVAR     "jorograb"

#define MAX_PLAYERS     32

new g_PlayerGrab[MAX_PLAYERS+1]
new 
Float:g_PlayerGrabLen[MAX_PLAYERS+1]
new 
Float:g_PlayerGrabLook[MAX_PLAYERS+1][3]
new 
Float:g_PlayerGrabMins[MAX_PLAYERS+1][3]
new 
Float:g_PlayerGrabMaxs[MAX_PLAYERS+1][3]
new 
g_MaxClients

public plugin_init()
{
        
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)
        
register_cvar(PLUGIN_CVARPLUGIN_VERSIONFCVAR_SERVER|FCVAR_SPONLY)

        
register_clcmd("+grab""grab_hold")
        
register_clcmd("-grab""grab_release")

        
g_MaxClients get_global_int(GL_maxClients)
}

public 
client_putinserver(id)
{
        
g_PlayerGrab[id] = 0

}

////////////////////////////////////////////////////////////////////

public grab_release(idlevelcid)
{
        if(!
cmd_access(idlevelcid1))
                return 
PLUGIN_HANDLED

        g_PlayerGrab
[id] = 0
        
return PLUGIN_HANDLED
}

public 
grab_hold(idlevelcid)
{
        if(!
cmd_access(idlevelcid1))
                return 
PLUGIN_HANDLED

        
static entbody
        
static Float:vorigin[3], Float:end[3], Float:mins[3]
        
get_user_aiming(identbody)
        if(
_is_block(ent) && !_is_grabbed(ent))
        {
                
entity_get_vector(idEV_VEC_originvorigin)
                
entity_get_vector(entEV_VEC_absminmins)
                
entity_get_vector(entEV_VEC_absmaxend)
                
vector_sum(endmins)
                
vector_mul(end0.5)
                
entity_get_vector(entEV_VEC_sizeg_PlayerGrabMins[id])
                
entity_get_vector(entEV_VEC_sizeg_PlayerGrabMaxs[id])
                
vector_mul(g_PlayerGrabMins[id], -0.5)
                
vector_mul(g_PlayerGrabMaxs[id], 0.5)

                new 
Float:len get_distance_f(voriginend)
                
g_PlayerGrab[id] = ent
                g_PlayerGrabLen
[id] = len
        
}
        return 
PLUGIN_HANDLED
}

stock _is_grabbed(ent)
{
        for(new 
1<= g_MaxClientsi++)
        {
                if(
g_PlayerGrab[i] == ent)
                        return 
true
        
}
        return 
false
}

stock _is_block(ent)
{
        if(
is_valid_ent(ent) && (ent >= MAX_PLAYERS))
                return 
true

        
return false
}

public 
client_PreThink(id)
{
        if(
g_PlayerGrab[id])
        {
                new 
iorigin[3], ilook[3]
                new 
Float:vdest[3], Float:vorigin[3], Float:vlook[3], Float:vdir[3], Float:vlen
                
new buttons
                get_user_origin
(idiorigin1)
                
get_user_origin(idilook3)
                
buttons entity_get_int(idEV_INT_button)
                
IVecFVec(ioriginvorigin)
                
IVecFVec(ilookvlook)
                if(!
vector_compare(vlookg_PlayerGrabLook[id]) || (buttons & (IN_ATTACK|IN_ATTACK2)))
                {
                        
g_PlayerGrabLook[id] = vlook
                        vdir 
vlook
                        vector_substract
(vdirvorigin)
                        
vlen get_distance_f(vlookvorigin)

                        if(
vlen == 0.0vlen 1.0

                        
if(buttons IN_ATTACK)
                                
g_PlayerGrabLen[id] -= 0.5
                        
else if(buttons IN_ATTACK2)
                                
g_PlayerGrabLen[id] += 0.5

                        vdest
[0] = (vorigin[0] + vdir[0] * g_PlayerGrabLen[id] / vlen)
                        
vdest[1] = (vorigin[1] + vdir[1] * g_PlayerGrabLen[id] / vlen)
                        
vdest[2] = (vorigin[2] + vdir[2] * g_PlayerGrabLen[id] / vlen)
                        
vdest[2] = float(floatround(vdest[2], floatround_floor))

                        
set_brush_origin(g_PlayerGrab[id], vdest)
                }
        }
}

stock vector_substract(Float:vecDst[], const Float:vecSrc[])
{
        
vecDst[0] -= vecSrc[0]
        
vecDst[1] -= vecSrc[1]
        
vecDst[2] -= vecSrc[2]
}

stock vector_compare(const Float:vecA[], const Float:vecB[])
{
        if((
vecA[0] == vecB[0]) && (vecA[1] == vecB[1]) && (vecA[2] == vecB[2]))
                return 
true

        
return false
}

stock vector_mul(Float:vec[], const Float:ammount)
{
        
vec[0] *= ammount
        vec
[1] *= ammount
        vec
[2] *= ammount
}

stock vector_sum(Float:vecDst[], const Float:vecSrc[])
{
        
vecDst[0] += vecSrc[0]
        
vecDst[1] += vecSrc[1]
        
vecDst[2] += vecSrc[2]
}

stock vector_copy(Float:vecDst[], const Float:vecSrc[])
{
        
vecDst[0] = vecSrc[0]
        
vecDst[1] = vecSrc[1]
        
vecDst[2] = vecSrc[2]
}

stock set_brush_origin(entFloat:origin[3])
{
        static 
Float:size[3], Float:mins[3], Float:absmin[3], Float:absmax[3]

        
entity_get_vector(entEV_VEC_minsmins)
        
entity_get_vector(entEV_VEC_maxssize)
        
vector_substract(sizemins)
        
absmin[0] = origin[0] - (size[0]/2.0)
        
absmin[1] = origin[1] - (size[1]/2.0)
        
absmin[2] = origin[2]
        
absmax[0] = origin[0] + (size[0]/2.0)
        
absmax[1] = origin[1] + (size[1]/2.0)
        
absmax[2] = origin[2] + size[2]
        
entity_set_vector(entEV_VEC_absminabsmin)
        
entity_set_vector(entEV_VEC_absmaxabsmax)
        
origin[0] = absmin[0] - mins[0]
        
origin[1] = absmin[1] - mins[1]
        
origin[2] = absmin[2] - mins[2]
        
entity_set_origin(entorigin)

__________________

Divide et vinces
approved plugins | steam account

I don't accept PM for support. Just ask on forums.
If you're looking for private work, PM me.
joropito is offline
Send a message via MSN to joropito
 



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:35.


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