Hi I have a problem with an module it works to compile it but when I put in on my server it gave my an error and server crash.
PHP Code:
#include "sdk/amxxmodule.h"
void DropJetpack( int iPlayer ), SetJetpack( edict_t *ePlayer ), SetKnife( edict_t *ePlayer ); int g_iVEgonString, g_iPEgonString, g_iVKnifeString, g_iPKnifeString, g_iJetpackString,
g_iBazookaRocketString, g_iRPGRocketString, g_iInfoTargetString, g_iCurWeapon, g_iDeathMsg, g_iHLTV, g_iVariable, g_iVariable2, g_iStatus, g_iRocketTouchForward, g_iJetpackTouchForward,
g_iCurrentWeapon[ 33 ], g_iFlame, g_iTrail, g_iShockwave, g_iExplode; bool g_bCurWeapon, g_bDeathMsg, g_bHLTV, g_bJetpack[ 33 ]; float g_fFuel[ 33 ], g_fRocketTime[ 33 ]; edict_t *g_ePlayer;
bool strcasecontain( const char *ccString, const char *ccSubString )
{
const char *ccCopyOfString = ccString, *ccSecondCopyOfString = ccString, *ccCopyOfSubString = ccSubString, *ccSecondCopyOfSubString = ccSubString;
while( *ccSecondCopyOfString )
{
if( tolower( *ccSecondCopyOfString ) == tolower( *ccCopyOfSubString ) )
{
ccSecondCopyOfString++;
if( !*++ccCopyOfSubString )
return true;
}
else
{
ccSecondCopyOfString = ++ccCopyOfString;
ccCopyOfSubString = ccSecondCopyOfSubString;
}
}
return false;
}
static cell AMX_NATIVE_CALL get_user_jetpack( AMX *, cell *cParameters )
{
return g_bJetpack[ cParameters[ 1 ] ];
}
static cell AMX_NATIVE_CALL get_user_fuel( AMX *, cell *cParameters )
{
return amx_ftoc( g_fFuel[ cParameters[ 1 ] ] );
}
static cell AMX_NATIVE_CALL get_user_rocket_time( AMX *, cell *cParameters )
{
return amx_ftoc( g_fRocketTime[ cParameters[ 1 ] ] );
}
static cell AMX_NATIVE_CALL set_user_jetpack( AMX *, cell *cParameters )
{
if( cParameters[ 2 ] )
{
edict_t *ePlayer = INDEXENT( cParameters[ 1 ] ); g_bJetpack[ cParameters[ 1 ] ] = true, g_engfuncs.pfnClientCommand( ePlayer, "weapon_knife\n" ), SetJetpack( ePlayer );
}
else g_bJetpack[ cParameters[ 1 ] ] = false;
return 1;
}
static cell AMX_NATIVE_CALL set_user_fuel( AMX *, cell *cParameters )
{
g_fFuel[ cParameters[ 1 ] ] = amx_ctof( cParameters[ 2 ] );
return 1;
}
static cell AMX_NATIVE_CALL set_user_rocket_time( AMX *, cell *cParameters )
{
g_fRocketTime[ cParameters[ 1 ] ] = amx_ctof( cParameters[ 2 ] );
return 1;
}
static cell AMX_NATIVE_CALL user_drop_jetpack( AMX *, cell *cParameters )
{
DropJetpack( cParameters[ 1 ] );
return 1;
}
AMX_NATIVE_INFO JetpackBazookaNativeInfo[ ] =
{
{ "get_user_jetpack", get_user_jetpack }, { "get_user_fuel", get_user_fuel }, { "get_user_rocket_time", get_user_rocket_time }, { "set_user_jetpack", set_user_jetpack },
{ "set_user_fuel", set_user_fuel }, { "set_user_rocket_time", set_user_rocket_time }, { "user_drop_jetpack", user_drop_jetpack }, { 0, 0 }
};
void OnAmxxAttach( )
{
MF_AddNatives( JetpackBazookaNativeInfo );
}
void OnPluginsLoaded( )
{
g_iRocketTouchForward = MF_RegisterForward( "Rocket_Touch", ET_IGNORE, FP_CELL, FP_CELL, FP_DONE ),
g_iJetpackTouchForward = MF_RegisterForward( "Jetpack_Touch", ET_STOP, FP_CELL, FP_DONE ), g_iJetpackString = g_engfuncs.pfnAllocString( "Jetpack" ),
g_iBazookaRocketString = g_engfuncs.pfnAllocString( "BazookaRocket" ), g_iRPGRocketString = g_engfuncs.pfnAllocString( "models/rpgrocket.mdl" ),
g_iPEgonString = g_engfuncs.pfnAllocString( "models/p_egon.mdl" ), g_iVEgonString = g_engfuncs.pfnAllocString( "models/v_egon.mdl" ),
g_iPKnifeString = g_engfuncs.pfnAllocString( "models/p_knife.mdl" ), g_iVKnifeString = g_engfuncs.pfnAllocString( "models/v_knife.mdl" ),
g_iInfoTargetString = g_engfuncs.pfnAllocString( "info_target" );
}
void DispatchTouch( edict_t *eTouched, edict_t *eToucher )
{
const char *ccTouchedName = STRING( eTouched -> v.classname );
if( !strcmp( ccTouchedName, "BazookaRocket" ) )
{
MF_ExecuteForward( g_iRocketTouchForward, static_cast < cell > ( ENTINDEX( eTouched -> v.owner ) ), static_cast < cell > ( ENTINDEX( eTouched ) ) );
if( !strcmp( "func_breakable", STRING( eToucher -> v.classname ) ) ) MDLL_Use( eToucher, eTouched );
for( g_iVariable2 = 0; g_iVariable2 < 4; g_iVariable2++ )
{
g_engfuncs.pfnMessageBegin( MSG_BROADCAST, SVC_TEMPENTITY, 0, 0 ), g_engfuncs.pfnWriteByte( TE_EXPLOSION ),
g_engfuncs.pfnWriteCoord( eTouched -> v.origin.x + g_engfuncs.pfnRandomLong( -22, 22 ) ), g_engfuncs.pfnWriteCoord( eTouched -> v.origin.y + g_engfuncs.pfnRandomLong( -22, 22 ) ),
g_engfuncs.pfnWriteCoord( eTouched -> v.origin.z + g_engfuncs.pfnRandomLong( -22, 22 ) ), g_engfuncs.pfnWriteShort( g_iExplode ), g_engfuncs.pfnWriteByte( g_engfuncs.pfnRandomLong( 15, 25 ) ),
g_engfuncs.pfnWriteByte( 15 ), g_engfuncs.pfnWriteByte( 0 ), g_engfuncs.pfnMessageEnd( );
}
for( g_iVariable2 = 0; g_iVariable2 < 4; g_iVariable2++ )
{
g_engfuncs.pfnMessageBegin( MSG_BROADCAST, SVC_TEMPENTITY, 0, 0 ), g_engfuncs.pfnWriteByte( TE_BEAMCYLINDER ), g_engfuncs.pfnWriteCoord( eTouched -> v.origin.x ),
g_engfuncs.pfnWriteCoord( eTouched -> v.origin.y ), g_engfuncs.pfnWriteCoord( eTouched -> v.origin.z ), g_engfuncs.pfnWriteCoord( eTouched -> v.origin.x ), g_engfuncs.pfnWriteCoord( eTouched -> v.origin.y ),
g_engfuncs.pfnWriteCoord( eTouched -> v.origin.z + ( 450 + ( g_iVariable2 * 100 ) ) ), g_engfuncs.pfnWriteShort( g_iShockwave ), g_engfuncs.pfnWriteByte( 0 ), g_engfuncs.pfnWriteByte( 0 ),
g_engfuncs.pfnWriteByte( 4 ), g_engfuncs.pfnWriteByte( g_iVariable2 * 40 ), g_engfuncs.pfnWriteByte( 0 ), g_engfuncs.pfnWriteByte( 121 ), g_engfuncs.pfnWriteByte( 121 ), g_engfuncs.pfnWriteByte( 121 ),
g_engfuncs.pfnWriteByte( g_engfuncs.pfnRandomLong( 150, 240 ) ), g_engfuncs.pfnWriteByte( 0 ), g_engfuncs.pfnMessageEnd( );
}
g_engfuncs.pfnRemoveEntity( eTouched );
}
else if( !strcmp( ccTouchedName, "Jetpack" ) )
{
int iPlayer = ENTINDEX( eToucher );
if( iPlayer > 32 || iPlayer < 1 || !MF_IsPlayerAlive( iPlayer ) || g_bJetpack[ iPlayer ] || MF_ExecuteForward( g_iJetpackTouchForward, static_cast < cell > ( iPlayer ) ) ) RETURN_META( MRES_SUPERCEDE );
if( g_fFuel[ iPlayer ] < 2 ) g_fFuel[ iPlayer ] = 250;
g_bJetpack[ iPlayer ] = true, g_engfuncs.pfnClientCommand( eToucher, "weapon_knife\n" ), SetJetpack( eToucher ), g_engfuncs.pfnEmitSound( eToucher, CHAN_ITEM, "items/gunpickup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM ),
g_engfuncs.pfnRemoveEntity( eTouched );
}
RETURN_META( MRES_IGNORED );
}
void ClientDisconnect( edict_t *ePlayer )
{
int iPlayer = ENTINDEX( ePlayer );
if( g_bJetpack[ iPlayer ] ) DropJetpack( iPlayer );
RETURN_META( MRES_IGNORED );
}
void ClientPutInServer( edict_t *ePlayer )
{
int iPlayer = ENTINDEX( ePlayer );
g_bJetpack[ iPlayer ] = false, g_fFuel[ iPlayer ] = 0, g_fRocketTime[ iPlayer ] = 0;
RETURN_META( MRES_IGNORED );
}
void ClientCommand( edict_t *ePlayer )
{
if( !strcasecmp( g_engfuncs.pfnCmd_Argv( 0 ), "drop" ) )
{
int iPlayer = ENTINDEX( ePlayer );
if( g_bJetpack[ iPlayer ] && g_iCurrentWeapon[ iPlayer ] == 29 )
{
DropJetpack( iPlayer );
RETURN_META( MRES_SUPERCEDE );
}
}
RETURN_META( MRES_IGNORED );
}
void PlayerPreThink( edict_t *ePlayer )
{
int iPlayer = ENTINDEX( ePlayer );
if( g_bJetpack[ iPlayer ] )
{
int iButton = ePlayer -> v.button, iFlags = ePlayer -> v.flags; float fGameTime = gpGlobals -> time;
if( iButton & IN_ATTACK2 && g_fRocketTime[ iPlayer ] < fGameTime )
{
edict_t *eEntity = g_engfuncs.pfnCreateNamedEntity( g_iInfoTargetString ); g_engfuncs.pfnSetModel( eEntity, STRING( g_iRPGRocketString ) ),
eEntity -> v.classname = g_iBazookaRocketString, eEntity -> v.movetype = MOVETYPE_FLY, eEntity -> v.solid = SOLID_BBOX, eEntity -> v.effects = EF_LIGHT;
Vector vecVector, vecVelocity, vecOrigin, vecAngles; g_engfuncs.pfnMakeVectors( ePlayer -> v.v_angle ), vecVector = gpGlobals -> v_forward * 64, vecVelocity = gpGlobals -> v_forward * 1750,
vecOrigin = ePlayer -> v.origin, vecOrigin.x += vecVector.x, vecOrigin.y += vecVector.y, g_engfuncs.pfnSetOrigin( eEntity, vecOrigin ), eEntity -> v.velocity = vecVelocity,
g_engfuncs.pfnVecToAngles( vecVelocity, vecAngles ), eEntity -> v.angles = vecAngles, eEntity -> v.owner = ePlayer, g_engfuncs.pfnMessageBegin( MSG_BROADCAST, SVC_TEMPENTITY, 0, 0 ),
g_engfuncs.pfnWriteByte( TE_BEAMFOLLOW ), g_engfuncs.pfnWriteShort( ENTINDEX( eEntity ) ), g_engfuncs.pfnWriteShort( g_iTrail ), g_engfuncs.pfnWriteByte( 25 ), g_engfuncs.pfnWriteByte( 5 ),
g_engfuncs.pfnWriteByte( 191 ), g_engfuncs.pfnWriteByte( 191 ), g_engfuncs.pfnWriteByte( 191 ), g_engfuncs.pfnWriteByte( g_engfuncs.pfnRandomLong( 150, 240 ) ), g_engfuncs.pfnMessageEnd( ),
g_engfuncs.pfnEmitSound( ePlayer, CHAN_WEAPON, "weapons/rocketfire1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM ), g_fRocketTime[ iPlayer ] = fGameTime + 15;
}
if( iButton & IN_DUCK && iButton & IN_JUMP && !( iFlags & FL_ONGROUND ) && g_fFuel[ iPlayer ] > 0 )
{
Vector vecVelocity = ePlayer -> v.velocity, vecAngles = ePlayer -> v.angles, vecForward; vecAngles.z = 0, g_engfuncs.pfnAngleVectors( vecAngles, vecForward, 0, 0 ), vecAngles = vecForward, vecAngles.x *= 300,
vecAngles.y *= 300, vecVelocity.x = vecAngles.x, vecVelocity.y = vecAngles.y;
if( vecVelocity.z < 300 ) vecVelocity.z += 35;
ePlayer -> v.velocity = vecVelocity, g_engfuncs.pfnMessageBegin( MSG_BROADCAST, SVC_TEMPENTITY, 0, 0 ), g_engfuncs.pfnWriteByte( TE_SPRITE ),
g_engfuncs.pfnWriteCoord( ePlayer -> v.origin.x ), g_engfuncs.pfnWriteCoord( ePlayer -> v.origin.y ), g_engfuncs.pfnWriteCoord( ePlayer -> v.origin.z ),
g_engfuncs.pfnWriteShort( g_iFlame ), g_engfuncs.pfnWriteByte( 8 ), g_engfuncs.pfnWriteByte( 200 ), g_engfuncs.pfnMessageEnd( );
if( g_fFuel[ iPlayer ] > 80 ) g_engfuncs.pfnEmitSound( ePlayer, CHAN_ITEM, "jetpack.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );
else g_engfuncs.pfnEmitSound( ePlayer, CHAN_ITEM, "jp_blow.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );
g_fFuel[ iPlayer ] -= 1;
}
else if( !( iButton & IN_DUCK ) && !( iButton & IN_JUMP ) && g_fFuel[ iPlayer ] < 250 ) g_fFuel[ iPlayer ] += 0.5;
}
RETURN_META( MRES_IGNORED );
}
int PrecacheModel( char * )
{
g_engfuncs.pfnPrecacheModel( "models/rpgrocket.mdl" ), g_engfuncs.pfnPrecacheModel( "models/p_egon.mdl" ), g_engfuncs.pfnPrecacheModel( "models/v_egon.mdl" ),
g_engfuncs.pfnPrecacheModel( "models/p_egon.mdl" ), g_iFlame = g_engfuncs.pfnPrecacheModel( "sprites/xfireball3.spr" ), g_iTrail = g_engfuncs.pfnPrecacheModel( "sprites/laserbeam.spr" ),
g_iShockwave = g_engfuncs.pfnPrecacheModel( "sprites/shockwave.spr" ), g_iExplode = g_engfuncs.pfnPrecacheModel( "sprites/zerogxplode.spr" );
RETURN_META_VALUE( MRES_IGNORED, 0 );
}
int PrecacheSound( char * )
{
g_engfuncs.pfnPrecacheSound( "items/gunpickup2.wav" ), g_engfuncs.pfnPrecacheSound( "weapons/rocketfire1.wav" ), g_engfuncs.pfnPrecacheSound( "jetpack.wav" ), g_engfuncs.pfnPrecacheSound( "jp_blow.wav" );
RETURN_META_VALUE( MRES_IGNORED, 0 );
}
void EmitSound( edict_t *eEntity, int, const char *ccSound, float, float, int, int )
{
int iEntity = ENTINDEX( eEntity );
if( iEntity < 33 && g_bJetpack[ iEntity ] && ccSound[ 0 ] == 'w' && ccSound[ 8 ] == 'k' ) RETURN_META( MRES_SUPERCEDE );
RETURN_META( MRES_IGNORED );
}
void MessageBegin_Post( int, int iType, const float *, edict_t *eEntity )
{
if( iType == g_iCurWeapon && g_bJetpack[ ENTINDEX( eEntity ) ] ) g_bCurWeapon = true, g_ePlayer = eEntity, g_iVariable = 0;
else if( iType == g_iDeathMsg ) g_bDeathMsg = true, g_iVariable = 0;
else if( iType == g_iHLTV ) g_bHLTV = true, g_iVariable = 0;
RETURN_META( MRES_IGNORED );
}
void MessageEnd_Post( void )
{
if( g_bCurWeapon ) g_bCurWeapon = false;
else if( g_bDeathMsg ) g_bDeathMsg = false;
else if( g_bHLTV ) g_bHLTV = false;
RETURN_META( MRES_IGNORED );
}
void WriteByte_Post( int iByte )
{
if( g_bCurWeapon )
{
g_iVariable++;
if( g_iVariable == 1 ) g_iStatus = iByte;
else if( g_iVariable == 2 && g_iStatus )
{
int iPlayer = ENTINDEX( g_ePlayer ); g_iCurrentWeapon[ iPlayer ] = iByte;
if( g_iCurrentWeapon[ iPlayer ] == 29 ) SetJetpack( g_ePlayer );
}
}
else if( g_bDeathMsg )
{
g_iVariable++;
if( g_iVariable == 2 && g_bJetpack[ iByte ] ) DropJetpack( iByte );
}
else if( g_bHLTV )
{
g_iVariable++;
if( g_iVariable == 1 ) g_iStatus = iByte;
else if( g_iVariable == 2 && !g_iStatus && !iByte )
{
edict_t *eEntity = 0;
while( !FNullEnt( ( eEntity = g_engfuncs.pfnFindEntityByString( eEntity, "classname", "BazookaRocket" ) ) ) ) g_engfuncs.pfnRemoveEntity( eEntity );
eEntity = 0;
while( !FNullEnt( ( eEntity = g_engfuncs.pfnFindEntityByString( eEntity, "classname", "Jetpack" ) ) ) ) g_engfuncs.pfnRemoveEntity( eEntity );
}
}
RETURN_META( MRES_IGNORED );
}
int RegUserMsg_Post( const char *ccName, int )
{
if( !strcmp( ccName, "CurWeapon" ) ) g_iCurWeapon = META_RESULT_ORIG_RET( int );
else if( !strcmp( ccName, "DeathMsg" ) ) g_iDeathMsg = META_RESULT_ORIG_RET( int );
else if( !strcmp( ccName, "HLTV" ) ) g_iHLTV = META_RESULT_ORIG_RET( int );
RETURN_META_VALUE( MRES_IGNORED, 0 );
}
void DropJetpack( int iPlayer )
{
edict_t *ePlayer = INDEXENT( iPlayer ), *eEntity = g_engfuncs.pfnCreateNamedEntity( g_iInfoTargetString ); g_engfuncs.pfnSetModel( eEntity, STRING( g_iPEgonString ) ),
g_engfuncs.pfnSetSize( eEntity, Vector( -16, -16, -16 ), Vector( 16, 16, 16 ) ), eEntity -> v.classname = g_iJetpackString, eEntity -> v.movetype = MOVETYPE_TOSS,
eEntity -> v.solid = SOLID_TRIGGER; Vector vecVector, vecOrigin = ePlayer -> v.origin; g_engfuncs.pfnMakeVectors( ePlayer -> v.v_angle ), vecVector = gpGlobals -> v_forward * 75,
vecOrigin.x += vecVector.x, vecOrigin.y += vecVector.y, g_engfuncs.pfnSetOrigin( eEntity, vecOrigin ), g_bJetpack[ iPlayer ] = false;
if( MF_IsPlayerAlive( iPlayer ) ) g_engfuncs.pfnClientCommand( ePlayer, "weapon_knife\n" ), SetKnife( ePlayer );
}
void SetJetpack( edict_t *ePlayer )
{
ePlayer -> v.viewmodel = g_iVEgonString, ePlayer -> v.weaponmodel = g_iPEgonString;
}
void SetKnife( edict_t *ePlayer )
{
ePlayer -> v.viewmodel = g_iVKnifeString, ePlayer -> v.weaponmodel = g_iPKnifeString;
}
I don't get it why because the models are in precached, any ideas?