- #include < amxmodx > 
- #include < engine > 
- #include < hamsandwich > 
-   
- new HamHook:g_iFwdTakeDamage, bool:g_bHamHookEnabled; 
-   
- new const Float:g_flMoves[ ][ 3 ] = { // Credits to Ramono 
- 	{0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0}, 
- 	{0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0}, 
- 	{0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0}, 
- 	{0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0}, 
- 	{0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0} 
- }; 
-   
- public plugin_init( ) { 
- 	register_plugin( "Bad Spawns Preventer", "1.2", "xPaw" ); 
-   
- 	RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn_Pre" ); 
- 	RegisterHam( Ham_Spawn, "player", "FwdHamPlayerSpawn_Post", 1 ); 
-   
- 	DisableHamForward( g_iFwdTakeDamage = RegisterHam( Ham_TakeDamage, "player", "FwdHamPlayerDamage" ) ); 
- } 
-   
- public FwdHamPlayerDamage( const id, const iInflictor, const iAttacker, Float:flDamage, iDamageBits ) 
- 	return ( iDamageBits == DMG_GENERIC && iAttacker == 0 && flDamage == 200.0 ) ? HAM_SUPERCEDE : HAM_IGNORED; 
-   
- public FwdHamPlayerSpawn_Pre( const id ) { 
- 	if( !g_bHamHookEnabled ) { 
- 		EnableHamForward( g_iFwdTakeDamage ); 
-   
- 		g_bHamHookEnabled = true; 
- 	} 
- } 
-   
- public FwdHamPlayerSpawn_Post( const id ) { 
- 	if( g_bHamHookEnabled ) { 
- 		DisableHamForward( g_iFwdTakeDamage ); 
-   
- 		g_bHamHookEnabled = false; 
- 	} 
-   
- 	if( is_user_alive( id ) ) { 
- 		new Float:vOrigin[ 3 ], iFlags = entity_get_int( id, EV_INT_flags ); 
- 		entity_get_vector( id, EV_VEC_origin, vOrigin ); 
-   
- 		if( IsUserStuck( id, vOrigin, iFlags ) ) { 
- 			new Float:vNewOrigin[ 3 ], Float:vMins[ 3 ]; 
- 			entity_get_vector( id, EV_VEC_mins, vMins ); 
-   
- 			for( new i = 0; i < sizeof g_flMoves; i++ ) { 
- 				vNewOrigin[ 0 ] = vOrigin[ 0 ] - vMins[ 0 ] * g_flMoves[ i ][ 0 ]; 
- 				vNewOrigin[ 1 ] = vOrigin[ 1 ] - vMins[ 1 ] * g_flMoves[ i ][ 1 ]; 
- 				vNewOrigin[ 2 ] = vOrigin[ 2 ] - vMins[ 2 ] * g_flMoves[ i ][ 2 ]; 
-   
- 				if( !IsUserStuck( id, vNewOrigin, iFlags ) ) { 
- 					entity_set_vector( id, EV_VEC_velocity, Float:{ 0.0, 0.0, 0.0 } ); 
- 					entity_set_int( id, EV_INT_flags, iFlags | FL_DUCKING ); 
-   
- 					entity_set_size( id, Float:{ -16.0, -16.0, -18.0 }, Float:{ 16.0, 16.0, 18.0 } ); 
- 					entity_set_origin( id, vNewOrigin ); 
-   
- 					break; 
- 				} 
- 			} 
- 		} 
- 	} 
- } 
-   
- bool:IsUserStuck( const id, const Float:vOrigin[ 3 ], const iFlags ) 
- 	return bool:( trace_hull( vOrigin, iFlags & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, IGNORE_MONSTERS ) & 2 ); 
-