.: Description :.
can someone try to explain how to add a grab command so i can grab and move around the model.. ?
PHP Code:
#include <amxmodx>
#include <fun>
#include <fakemeta>
#define PLUGIN "MarioMod"
#define AUTHOR "zpoke"
#define VERSION "1.0"
#define ENT_CLASSNAME "zpoke_item"
#define TIMER_THINKTIME 0.025
new const g_mdl[] = "models/teleporter.mdl";
new Float:fOrigin[ 3 ];
new toucher_name[ 32 ];
new g_item
new g_forward
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_clcmd( "say /item", "mainmenu" );
g_forward = register_forward( FM_Touch, "hook_Touch" );
register_forward( FM_Think, "hook_Think", 1 );
}
public plugin_precache()
precache_model( g_mdl );
public mainmenu( id )
{
new menu = menu_create( "\rItem menu:", "menu_handler" );
menu_additem( menu, "\wCreate item", "1" );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu, 0 );
}
public menu_handler( id, menu, item )
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new data[ 6 ], iName[ 64 ];
new access, callback;
menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
create_item( id )
}
}
menu_destroy( menu );
return PLUGIN_HANDLED;
}
create_item( id )
{
new Float:mins[3], Float:maxs[3];
mins = Float:{ -15.0, -15.0, -36.0 };
maxs = Float:{ 15.0, 15.0, 36.0 };
pev( id, pev_origin, fOrigin );
g_item = engfunc( EngFunc_CreateNamedEntity, engfunc( EngFunc_AllocString, "info_target" ) );
engfunc( EngFunc_SetModel, g_item, g_mdl ) ;
engfunc( EngFunc_SetSize, g_item, mins, maxs );
engfunc( EngFunc_SetOrigin, g_item, fOrigin );
set_pev( g_item, pev_solid, SOLID_TRIGGER );
set_pev( g_item, pev_movetype, MOVETYPE_NONE );
set_pev( g_item, pev_classname, "zpoke_item" );
engfunc( EngFunc_DropToFloor, g_item );
set_pev( g_item, pev_nextthink, get_gametime() + TIMER_THINKTIME) ;
fOrigin[ 1 ] -= 100;
set_pev( id, pev_origin, fOrigin )
}
stock set_rendering2(index, fx, r, g, b, render, amount)
{
set_pev( index, pev_renderfx, fx );
new Float:RenderColor[3];
RenderColor[0] = float( r );
RenderColor[1] = float( g );
RenderColor[2] = float( b );
set_pev( index, pev_rendercolor, RenderColor );
set_pev( index, pev_rendermode, render );
set_pev( index, pev_renderamt, float( amount ) );
}
public hook_Think( ent )
{
if( ent == g_item )
{
//Making entity rotate
new Float:angles[3];
pev( ent, pev_angles, angles );
angles[0] += 5.0
angles[1] += 5.0
angles[2] += 5.0
set_pev( ent, pev_angles, angles );
set_rendering2( ent, kRenderFxGlowShell, random( 255 ), random( 255 ), random( 255 ), kRenderTransAlpha, 50 );
set_pev( ent, pev_nextthink, get_gametime() + TIMER_THINKTIME );
}
return FMRES_HANDLED;
}
public hook_Touch( ent, id )
{
if( !is_user_alive( id ) )
return FMRES_IGNORED;
//Get classname of the entity touched
new classname[32];
pev( ent, pev_classname, classname, 31);
//Get name of the toucher
get_user_name( id, toucher_name, 31 );
if( equal( classname, ENT_CLASSNAME ) )
{
action_touched( ent, id )
unregister_forward( FM_Touch, g_forward );
}
return FMRES_HANDLED;
}
action_touched( ent, id )
{
print_color( 0, "%s touched the model.", toucher_name );
client_cmd( id, "speak ^"fvox/boop^"");
remove_item( ent )
//give exp here
}
remove_item( ent )
{
if ( pev_valid( ent ) )
{
new classname[ 32 ];
pev( ent, pev_classname, classname, 31 );
if( equal( classname, "zpoke_item" ) )
engfunc(EngFunc_RemoveEntity, ent );
}
}
print_color( index, const sFormat[], any:...)
{
new players[32], count = 1
if ( index ) players[0] = index; else get_players( players, count, "ch" )
for ( new i = 0; i < count; i++ )
{
new message[256];
new len = formatex( message, 255, "^x01[MarioMod]:^x04 " )
vformat( message[len], 255 - len, sFormat, 3 )
message[192] = '^0'
message_begin( index ? MSG_ONE : MSG_ALL, get_user_msgid("SayText"), _, index )
write_byte( players[0] )
write_string( message )
message_end()
}
return 1
}