Veteran Member
Join Date: Jul 2006
Location: France (95)
05-26-2013
, 05:56
Re: Change player size
#1
Only thing i've managed to do is following code, unfortunately it has no effect, can see wanted sizes in server_frame and PreThink, but collisions remain the same as default.
Anyway, if someone find a way, there are still lot of places where values are hardcoded, see SetupVisibility in client.cll for example.
Spoiler
PHP Code:
#include < amxmodx >
// #include < amxmisc >
// #include < xs >
// #include < hlsdk_const >
#include < engine >
// #include < engine_stocks >
#include < fakemeta >
// #include < fakemeta_stocks >
#include < hamsandwich >
// #include < cstrike >
// #include < fun >
// #include < csx >
#pragma semicolon 1
#define PLUGIN ""
#define VERSION "0.0.1"
#define VECTOR_PRINT_ARGS(%0) %0[0] , %0[1] , %0[2]
new const Float : our_VEC_DUCK_HULL_MIN [ 3 ] = {- 2.0 , - 2.0 , - 2.0 };
new const Float : our_VEC_DUCK_HULL_MAX [ 3 ] = { 2.0 , 2.0 , 2.0 };
new const Float : our_VEC_DUCK_VIEW [ 3 ] = { 0.0 , 0.0 , 12.0 };
new const Float : our_VEC_HULL_MIN [ 3 ] = {- 1.0 , - 1.0 , - 1.0 };
new const Float : our_VEC_HULL_MAX [ 3 ] = { 1.0 , 1.0 , 1.0 };
new const Float : our_VEC_VIEW [ 3 ] = { 0.0 , 0.0 , 18.0 };
new HamHook : g_iHhPlr_SetObjectCollisionBox ;
new g_iMaxPlayers ;
#define IsPlayer(%0) ( 1 <= (%0) <= g_iMaxPlayers )
public plugin_init ()
{
register_plugin ( PLUGIN , VERSION , "ConnorMcLeod" );
RegisterHam ( Ham_SetObjectCollisionBox , "player" , "OnCBP_SetObjectCollisionBox" , false );
// register_forward(FM_SetSize, "OnSetSize");
g_iMaxPlayers = get_maxplayers ();
}
public OnCBP_SetObjectCollisionBox ( id )
{
if( is_user_alive ( id ) )
{
if( pev ( id , pev_flags ) & FL_DUCKING )
{
set_pev ( id , pev_mins , our_VEC_DUCK_HULL_MIN );
set_pev ( id , pev_maxs , our_VEC_DUCK_HULL_MAX );
}
else
{
set_pev ( id , pev_mins , our_VEC_HULL_MIN );
set_pev ( id , pev_maxs , our_VEC_HULL_MAX );
}
return HAM_HANDLED ;
}
return HAM_IGNORED ;
}
public OnSetSize ( id )
{
if( IsPlayer ( id ) && is_user_alive ( id ) )
{
DisableHamForward ( g_iHhPlr_SetObjectCollisionBox );
if( pev ( id , pev_flags ) & FL_DUCKING )
{
engfunc ( EngFunc_SetSize , id , our_VEC_DUCK_HULL_MIN , our_VEC_DUCK_HULL_MAX );
// set_pev(id, pev_view_ofs, our_VEC_DUCK_VIEW);
}
else
{
engfunc ( EngFunc_SetSize , id , our_VEC_HULL_MIN , our_VEC_HULL_MAX );
// set_pev(id, pev_view_ofs, our_VEC_VIEW);
}
EnableHamForward ( g_iHhPlr_SetObjectCollisionBox );
return FMRES_SUPERCEDE ;
}
return FMRES_IGNORED ;
}
public server_frame ()
{
static const id = 1 ;
if( is_user_alive ( id ) )
{
static Float : maxs [ 3 ];
pev ( id , pev_maxs , maxs );
server_print ( "%.1f %.1f %.1f server_frame" , VECTOR_PRINT_ARGS ( maxs ));
}
}
public client_PreThink ( id )
{
if( is_user_alive ( id ) )
{
static Float : maxs [ 3 ];
pev ( id , pev_maxs , maxs );
server_print ( "%.1f %.1f %.1f client_PreThink" , VECTOR_PRINT_ARGS ( maxs ));
}
}
Also, when sending SetSize in SetObjectCollisionBox (or AbsBox, that one calls the other one), server is crashing (infinite loop i would say), that's because SetSize calls AbsBox, but even trying to disable the hook (with bool variable or using DisableHamForward) to get rid of recursivity, server is crashing.
Have no other idea.
Also, hooking SetSize seems to only takes effect when crouched.
__________________