Buguri plugin de baza NightCrawler

Discutii legate de instalarea, configurarea si modificarea unui server de Counter-Strike.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

27 May 2014, 15:56

Salut , am luat un plugin de baza "NightCrawler" si are niste buguri , am cautat mult un plugin bun dar fara succes. Oricum , problemele ar fii:

Prima ar fi eliminarea "laser sight" si "adrenaline" din meniul de iteme CT de la inceputul rundei , deci pur si simplu vreau sa nu mai apara in meniul acela.

A doua ar fi cu o putere de la T , mai exact teleportarea , as vrea sa nu pot sa ma teleportez in afara mapei , momentan daca ma teleportez in sus raman blocat in "cer" , nu stiu daca m-am facut bine inteles , cand vrei sa te teleportezi in afara mapei ... sa nu te lase pur si simplu.

Iar a treia si ultima problema ar fi cu "Team Swap" adica cand castiga CT nu inverseaza corect echipele , sau cateodata cand sunt 1 vs 1 pe server daca castiga CT ii baga pe ambii in aceias echipa , mai exact la T..

Sunt sigur ca toate aceste probleme sunt de la pluginul de baza , deoarece eu nu am bagat alte pluginuri. Acesta ii pluginul. Multumesc mult!
| Afiseaza codul
/* 
	-	Credits:
	-		Joropito - Team Menu
	-		Pastout - Suicide Bomb
	-		Exolent - Teleport
	*/

	#include < amxmodx >
	#include < cstrike >
	#include < hamsandwich >
	#include < fun >
	#include < fakemeta >
	#include < engine >
	#include < xs >
	
	#define PISTOL_WEAPONS_BIT    (1<<CSW_GLOCK18|1<<CSW_USP|1<<CSW_DEAGLE|1<<CSW_P228|1<<CSW_FIVESEVEN|1<<CSW_ELITE)
	#define SHOTGUN_WEAPONS_BIT    (1<<CSW_M3|1<<CSW_XM1014)
	#define SUBMACHINE_WEAPONS_BIT    (1<<CSW_TMP|1<<CSW_MAC10|1<<CSW_MP5NAVY|1<<CSW_UMP45|1<<CSW_P90)
	#define RIFLE_WEAPONS_BIT    (1<<CSW_FAMAS|1<<CSW_GALIL|1<<CSW_AK47|1<<CSW_SCOUT|1<<CSW_M4A1|1<<CSW_SG550|1<<CSW_SG552|1<<CSW_AUG|1<<CSW_AWP|1<<CSW_G3SG1)
	#define MACHINE_WEAPONS_BIT    (1<<CSW_M249)

	#define PRIMARY_WEAPONS_BIT    (SHOTGUN_WEAPONS_BIT|SUBMACHINE_WEAPONS_BIT|RIFLE_WEAPONS_BIT|MACHINE_WEAPONS_BIT)
	#define SECONDARY_WEAPONS_BIT    (PISTOL_WEAPONS_BIT)

	#define IsPrimaryWeapon(%1) ( (1<<%1) & PRIMARY_WEAPONS_BIT )
	#define IsSecondaryWeapon(%1) ( (1<<%1) & PISTOL_WEAPONS_BIT )

	#define m_iVGUI						510
	#define m_fGameHUDInitialized		349
	#define m_fNextHudTextArgsGameTime	198

	#define TEAM_MENU					"#Team_Select"
	#define TEAM_MENU2					"#Team_Select_Spect"

	#define MIN_WEAPON		CSW_P228
	#define MAX_WEAPON 		CSW_P90

	#define TEAM_NC 		CS_TEAM_T
	#define TEAM_HUMAN 		CS_TEAM_CT

	/* Constants */
	
		enum (+=1000)
		{
			TASK_ADRENALINE = 1000,
			TASK_SUICIDE,
			TASK_POISON,
			TASK_INVISIBLE,
			TASK_STARTGAME
		}
		
		new const g_iMaxBPAmmo[ MAX_WEAPON + 1 ] =
		{
			0, 52, 0, 90, 1, 32, 0, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30,
			120, 200, 32, 90, 120, 90, 2, 35, 90, 90, 0, 100
		};

		new const g_iMaxClipAmmo[ MAX_WEAPON + 1 ] =
		{
			0, 13, 0, 10, 0, 7, 0, 30, 30, 0, 30, 20, 25, 30, 35, 25, 12, 20, 10, 30, 
			100, 8, 30, 30, 20, 0, 7, 30, 30, 0, 50
		};

		new const g_szWeaponClassnames[ MAX_WEAPON + 1 ][ ] =
		{
			"", "weapon_p228", "", "weapon_scout", "weapon_hegrenade",
			"weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug",
			"weapon_smokegrenade", "weapon_elite", "weapon_fiveseven",
			"weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas",
			"weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy",
			"weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1",
			"weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47",
			"weapon_knife", "weapon_p90"
		};

		new const g_szWeaponNames[ MAX_WEAPON + 1 ][ ] =
		{
			"", "P228", "", "Schmidt Scout", "", "XM1014 (Auto-Shotgun)", "",
			"Mac-10", "AUG", "", "Dual Elites", "Five-Seven", "UMP-45", "SG-550",
			"Galil", "Famas", "USP", "Glock-18", "AWP", "MP5-Navy", "M249 (Para)",
			"M3 (Pump-Shotgun)", "M4A1", "TMP", "G3SG1", "", "Deagle", "SG-552",
			"AK-47", "", "P90"
		};

		enum _:ItemsInfo
		{
			ITEM_LASER, // Done
			ITEM_SUICIDE, // Done
			ITEM_POISON, // Done
			ITEM_ADRENALINE, // Done
			ITEM_MEDKIT // Done
		};

		new const g_szItemNames[ ItemsInfo ][ ] =
		{
			"Laser Sight",
                  "Suicide Bomber \r(Bind Key Activated)",                                                        
			"Poison Scout Bullets \r(No Bind Key Activated)",
                  "Adrenaline",			
			"Medic Kit \r(Bind Key Activated)"
		};
		
		new const g_szObjectives[ ][ ] = 
		{
			"func_bomb_target",
			"info_bomb_target",
			"hostage_entity",
			"monster_scientist",
			"func_hostage_rescue",
			"info_hostage_rescue",
			"info_vip_start",
			"func_vip_safetyzone",
			"func_escapezone"
		}
		
		new const g_szPrefix[ ] = "[Nightcrawler]";

		new const g_szNCModel[ ] = "models/player/nightcrawler/nightcrawler.mdl";
            new const g_szNCModelT[ ] = "models/player/nightcrawler/nightcrawlerT.mdl";
		new const g_szNCKnife_V[ ] = "models/nightcrawler/v_nightcrawler.mdl";
		
		new const g_szLaserSprite[ ] = "sprites/zbeam4.spr";
		new const g_szExplosionSprite[ ] = "sprites/zerogxplode.spr";
		
		new const g_szSuicideBombSound[ ] = "weapons/c4_beep4.wav";
		new const g_szTeleportSound[ ] = "warcraft3/blinkarrival.wav";
		
	/* Booleans */
	
		new bool:g_bRememberGuns[ 33 ];
		new bool:g_bNCNextRound[ 33 ];
		new bool:g_bHasLaser[ 33 ];
		new bool:g_bAdrenalineActive[ 33 ];
		new bool:g_bVisible[ 33 ];
		
	/* Floats */
		
		new Float:g_flWallOrigin[ 33 ][ 3 ];
		new Float:g_flLastTeleportTime[ 33 ];
		
	/* Integers */
	
		new g_iPrimaryWeapon[ 33 ];
		new g_iSecondaryWeapon[ 33 ];
		new g_iChosenItem[ 33 ];
		
		new g_iAdrenalineUses[ 33 ];
		new g_iMedKitUses[ 33 ];
		new g_iSuicideTime[ 33 ];
		new g_iPoisonRemaining[ 33 ];
		new g_iTeleportsRemaining[ 33 ];
		
		new g_iTeamCount[ CsTeams ];		
		
		new g_iCurrentRound;
		
		new g_iMaxPlayers;
		
		new g_iLaserSprite;
		new g_iExplosionSprite;

	/* Menus */
		
		new g_hWeaponMenu;
		new g_hPrimaryWeaponMenu;
		new g_hSecondaryWeaponMenu;
		new g_hItemsMenu;

	/* Messages */
	
		new g_msgShowMenu;
		new g_msgVGUIMenu;
		new g_msgDeath;
		new g_msgScoreInfo;
		new g_msgStatusIcon;

	/* PCVARS */
	
		new g_pNightcrawlerRatio;
		new g_pNightcrawlerVisibleTime;
		new g_pNightcrawlerHealth;
		new g_pNightcrawlerGravity;
		new g_pNightcrawlerSpeed;
		new g_pNightcrawlerTeleDelay;
		new g_pNightcrawlerTeleCount;
		
		new g_pMapLighting;
		
		new g_pAdrenalineUses;
		new g_pAdrenalineTime;
		new g_pAdrenalineSpeed;
		
		new g_pMedKitUses;
		
		new g_pSuicideRadius;
		new g_pSuicideDamage;
		new g_pSuicideTime;
		
		new g_pPoisonAmount;
		new g_pPoisonInterval;
		new g_pPoisonDamage;
		
	public plugin_precache()
	{
		precache_model( g_szNCModel );
		precache_model( g_szNCKnife_V );
		
		precache_sound( g_szSuicideBombSound );
		precache_sound( g_szTeleportSound );
		
		g_iLaserSprite = precache_model( g_szLaserSprite );
		g_iExplosionSprite = precache_model( g_szExplosionSprite );
	}
	
	public plugin_init()
	{
		register_plugin( "Nightcrawler Mod", "1.0", "H3avY Ra1n" );
		
		register_clcmd( "jointeam", "CmdJoinTeam" );
		register_clcmd( "joinclass", "CmdJoinTeam" );
		register_clcmd( "say /guns", "CmdEnableGuns" );
		register_clcmd( "item", "CmdUseItem" );
		
		RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 );
		RegisterHam( Ham_Killed, "player", "Ham_PlayerKilled_Post", 1 );
		RegisterHam( Ham_TakeDamage, "player", "Ham_PlayerTakeDamage_Post", 1 );
		
		register_forward( FM_Spawn, "Forward_Spawn_Post", 1 );
		register_forward( FM_Touch, "Forward_Touch_Pre", 0 );
		register_forward( FM_PlayerPreThink, "Forward_PlayerPreThink" );
		register_forward( FM_AddToFullPack, "Forward_AddToFullPack_Post", 1 );
		
		register_logevent( "LogEvent_BombSpawned", 3, "2=Spawned_With_The_Bomb" );
		register_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" );
		
		register_event( "CurWeapon", "Event_CurWeapon", "be" );
		
		register_menucmd( register_menuid( "Team_Select", 1 ), ( 1 << 0 ) | ( 1 << 1 ) | ( 1 << 4 ) | ( 1 << 5 ), "TeamSelectMenu_Handler" );
			
		g_msgShowMenu 	= get_user_msgid( "ShowMenu" );
		g_msgVGUIMenu 	= get_user_msgid( "VGUIMenu" );
		g_msgScoreInfo 	= get_user_msgid( "ScoreInfo" );
		g_msgDeath		= get_user_msgid( "DeathMsg" );
		g_msgStatusIcon = get_user_msgid( "StatusIcon" );
		
		register_message( g_msgShowMenu, "Message_ShowMenu" );
		register_message( g_msgVGUIMenu, "Message_VGUIMenu" );
		register_message( g_msgStatusIcon, "Message_StatusIcon" );
		
		g_pNightcrawlerRatio		= register_cvar( "nc_ratio", "33" ); // Percentage
		g_pNightcrawlerVisibleTime	= register_cvar( "nc_visible_time", "2" );
		g_pNightcrawlerHealth		= register_cvar( "nc_health", "150" );
		g_pNightcrawlerGravity		= register_cvar( "nc_gravity", "600" );
		g_pNightcrawlerSpeed		= register_cvar( "nc_speed", "280.0" );
		g_pNightcrawlerTeleCount	= register_cvar( "nc_teleport_count", "2" );
		g_pNightcrawlerTeleDelay 	= register_cvar( "nc_teleport_delay", "2" );
		
		g_pMapLighting				= register_cvar( "nc_lighting", "g" );
		
		g_pAdrenalineUses			= register_cvar( "nc_adrenaline_uses", "2" );
		g_pAdrenalineTime			= register_cvar( "nc_adrenaline_time", "10" );
		g_pAdrenalineSpeed			= register_cvar( "nc_adrenaline_speed", "320" );
		
		g_pSuicideDamage 			= register_cvar( "nc_suicide_damage", "80" );
		g_pSuicideRadius			= register_cvar( "nc_suicide_radius", "50" );
		g_pSuicideTime				= register_cvar( "nc_suicide_time", "3" );
		
		g_pMedKitUses				= register_cvar( "nc_medkit_uses", "2" );
		
		g_pPoisonAmount				= register_cvar( "nc_poison_amount", "3" );
		g_pPoisonInterval			= register_cvar( "nc_poison_interval", "1" );
		g_pPoisonDamage				= register_cvar( "nc_poison_damage", "5" );
		
		g_iMaxPlayers 				= get_maxplayers();
		
		set_task( 30.0, "Task_StartGame", TASK_STARTGAME );
		
		CreateMenus();
	}

	public Message_StatusIcon( iMsgID, iMsgDest, id )
	{
		static szIcon[ 8 ];
		get_msg_arg_string( 2, szIcon, 7 );
		
		if( equal( szIcon, "buyzone" ) && get_msg_arg_int( 1 ) )
		{
			set_pdata_int( id, 235, get_pdata_int( id, 235 ) & ~(1<<0) );
			return PLUGIN_HANDLED;
		}
		
		return PLUGIN_CONTINUE;
	}
	
	public Forward_Spawn_Post( iEntity )
	{
		new szClassname[ 32 ];
		pev( iEntity, pev_classname, szClassname, charsmax( szClassname ) );
		
		for( new i = 0; i < sizeof g_szObjectives; i++ )
		{
			if( equali( szClassname, g_szObjectives[ i ] ) )
			{
				remove_entity( iEntity );
				break;
			}
		}
	}
	
			
	public Forward_Touch_Pre( iEnt, id )
	{
		if( !is_user_alive( id ) )
			return FMRES_IGNORED;
		
		new szClassname[ 32 ];
		pev( iEnt, pev_classname, szClassname, charsmax( szClassname ) );
		
		if( equali( szClassname, "worldspawn" ) || equali( szClassname, "func_wall" ) || equali( szClassname, "func_breakable" ) )
			pev( id, pev_origin, g_flWallOrigin[ id ] );
		
		else if( equali( szClassname, "weaponbox" ) || equali( szClassname, "armoury_entity" ) )
		{
			if( cs_get_user_team( id ) == TEAM_NC )
				return FMRES_SUPERCEDE;
		}
		
		return FMRES_IGNORED;
	}

	public client_putinserver( id )
	{
		g_bRememberGuns[ id ] = false;
		g_bNCNextRound[ id ] = false;
		g_bHasLaser[ id ] = false;
		g_bAdrenalineActive[ id ] = false;
		g_bVisible[ id ] = true;
		
		g_iAdrenalineUses[ id ] = 0;
		g_iMedKitUses[ id ] = 0;
		g_iSuicideTime[ id ] = 0;
		g_iPoisonRemaining[ id ] = 0;
		
		g_iPrimaryWeapon[ id ] = 0;
		g_iSecondaryWeapon[ id ] = 0;
		
		g_iTeleportsRemaining[ id ] = 0;
		
		g_iChosenItem[ id ] = -1;
		
		new szLighting[ 3 ];
		get_pcvar_string( g_pMapLighting, szLighting, 2 );
		
		engfunc( EngFunc_LightStyle, 0, szLighting );
	}

	public client_disconnect( id )
	{
		remove_task( TASK_SUICIDE + id );
	}
	
	public Forward_PlayerPreThink( id )
	{
		if( !is_user_alive( id ) )
			return;
		
		static CsTeams:iTeam;
		iTeam = cs_get_user_team( id );
		
		if( iTeam == TEAM_HUMAN )
		{
			if( !g_bHasLaser[ id ] )
			{
				static iPlayers[ 32 ], iNum;
				get_players( iPlayers, iNum, "ae", "CT" );
				
				if( iNum == 1 )
				{
					g_bHasLaser[ id ] = true;
				}
			}
			
			if( g_bHasLaser[ id ] )
			{

				static iTarget, iBody, iRed, iGreen, iBlue, iWeapon;
				
				get_user_aiming( id, iTarget, iBody );
			
				iWeapon = get_user_weapon( id );
			
				if( IsPrimaryWeapon( iWeapon ) || IsSecondaryWeapon( iWeapon ) )
				{
					if( is_user_alive( iTarget ) && cs_get_user_team( iTarget ) == TEAM_NC )
					{
						iRed = 255;
						iGreen = 0;
						iBlue = 0;
					}
					
					else
					{
						iRed = 0;
						iGreen = 255;
						iBlue = 0;
					}
					
					static iOrigin[ 3 ];
					get_user_origin( id, iOrigin, 3 );
					
					message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
					write_byte( TE_BEAMENTPOINT );
					write_short( id | 0x1000 );
					write_coord( iOrigin[ 0 ] );
					write_coord( iOrigin[ 1 ] );
					write_coord( iOrigin[ 2 ] );
					write_short( g_iLaserSprite );
					write_byte( 1 );
					write_byte( 10 );
					write_byte( 1 );
					write_byte( 5 );
					write_byte( 0 );
					write_byte( iRed );
					write_byte( iGreen );
					write_byte( iBlue );
					write_byte( 150 );
					write_byte( 25 );
					message_end( );
				}
			}
		}
		
		else if( iTeam == TEAM_NC )
		{
			static iButton;
			iButton = get_user_button( id );
			
			if( iButton & IN_USE )
			{
				static Float:fOrigin[ 3 ];
				pev( id, pev_origin, fOrigin );
				
				if( get_distance_f( fOrigin, g_flWallOrigin[ id ] ) > 10.0 )
					return;
				
				if( pev( id, pev_flags ) & FL_ONGROUND )
					return;
				
				if( iButton & IN_FORWARD )
				{
					static Float:fVelocity[ 3 ];
					velocity_by_aim( id, 240, fVelocity );
					
					set_pev( id, pev_velocity, fVelocity );
				}
				
				else if( iButton & IN_BACK )
				{
					static Float:fVelocity[ 3 ];
					velocity_by_aim( id, -240, fVelocity );
					
					set_pev( id, pev_velocity, fVelocity );
				}
			}
		}
		
		return;
	}

	public LogEvent_BombSpawned()
	{
		new szLogUser[ 80 ], szName[ 32 ];
		read_logargv( 0, szLogUser, 79 );
		parse_loguser( szLogUser, szName, 31 );
		
		new id = get_user_index( szName );
		
		engclient_cmd( id, "drop", "weapon_c4" );
		new iBomb = find_ent_by_class( -1, "weapon_c4" );
		
		if( iBomb )
		{
			remove_entity( iBomb );
		}
	}
	
	public LogEvent_RoundEnd()
	{
		g_iCurrentRound++;
	}

	////////////////////
	///*	Ratio	*///
	////////////////////

	public CmdJoinTeam( id )
		return PLUGIN_HANDLED;
		
	public TeamSelectMenu_Handler( id, iKey )
	{
		new CsTeams:iTeam = cs_get_user_team( id );
		
		CountTeams();

		switch( iKey )
		{
			case 0: // Join NC (Terrorists)
			{
				client_print( id, print_chat, "%s You cannot join the Night-Crawler team!", g_szPrefix );
				
				return PLUGIN_HANDLED;
			}
			
			case 1: // Join Humans (CTs)
			{
				if( iTeam == TEAM_HUMAN )
					return PLUGIN_HANDLED;
				
				if( task_exists( TASK_STARTGAME ) )
					ForceTeam( id, TEAM_HUMAN );
				
				else
				{
					CountTeams();
					
					// ( Percent * Total Players / 100 ) - Current Amount of NCs
					new iNeeded = get_pcvar_num( g_pNightcrawlerRatio ) * ( g_iTeamCount[ TEAM_NC ] + g_iTeamCount[ TEAM_HUMAN ] ) / 100 - g_iTeamCount[ TEAM_NC ];
					
					if( iNeeded == 0 && g_iTeamCount[ TEAM_HUMAN ] == 1 )
						iNeeded = 1;
						
					if( iNeeded >= 1 )
						ForceTeam( id, TEAM_NC );
					
					else ForceTeam( id, TEAM_HUMAN );
				
				}
				
				return PLUGIN_HANDLED;
			}
			
			case 5:
			{
				user_silentkill( id );
				ForceTeam( id, CS_TEAM_SPECTATOR );
				
				return PLUGIN_HANDLED;
			}
		}
		
		return PLUGIN_HANDLED;
	}

	public ForceTeam( id, CsTeams:iTeam )
	{
		static iRestore, iVGUI, iMSGBlock;

		iRestore = get_pdata_int( id, m_iVGUI );
		iVGUI = iRestore & ( 1 << 0 );
		if( iVGUI )
			set_pdata_int( id, m_iVGUI, iRestore & ~( 1 << 0 ) );

		switch( iTeam )
		{
			case CS_TEAM_SPECTATOR:
			{
				iMSGBlock = get_msg_block( g_msgShowMenu );
				set_msg_block( g_msgShowMenu, BLOCK_ONCE );
				dllfunc( DLLFunc_ClientPutInServer, id );
				set_msg_block( g_msgShowMenu, iMSGBlock );
				set_pdata_int( id, m_fGameHUDInitialized, 1 );
				engclient_cmd( id, "jointeam", "6" );
			}
			case CS_TEAM_T, CS_TEAM_CT:
			{
				iMSGBlock = get_msg_block( g_msgShowMenu );
				set_msg_block( g_msgShowMenu, BLOCK_ONCE );
				engclient_cmd( id, "jointeam", ( iTeam == CS_TEAM_CT ) ? "2" : "1" );
				engclient_cmd( id, "joinclass", "1" );
				set_msg_block( g_msgShowMenu, iMSGBlock );
			}
		}
		
		if( iVGUI )
			set_pdata_int( id, m_iVGUI, iRestore );
	}

	public Message_VGUIMenu( iMSGId, iDest, id )
	{
		static iMSGArg1;

		iMSGArg1 = get_msg_arg_int( 1 );
		
		if( iMSGArg1 == 2 )
		{
			show_menu( id, 51, TEAM_MENU2, -1 );
			return PLUGIN_HANDLED;
		}

		return PLUGIN_CONTINUE;
	}

	public Message_ShowMenu( iMSGId, iDest, id )
	{
		static iMSGArg1;
		iMSGArg1 = get_msg_arg_int( 1 );

		if( iMSGArg1 != 531 && iMSGArg1 != 563 )
			return PLUGIN_CONTINUE;

		show_menu( id, 51, TEAM_MENU2, -1 );
		return PLUGIN_HANDLED;
	}
		
	public Event_CurWeapon( id )
	{
		new iWeapon = read_data( 2 );
		switch( cs_get_user_team( id ) )
		{
			case TEAM_HUMAN:
			{
				if( IsPrimaryWeapon( iWeapon ) || IsSecondaryWeapon( iWeapon ) )
				{
					if( cs_get_user_bpammo( id, iWeapon ) != g_iMaxBPAmmo[ iWeapon ] )
					{
						cs_set_user_bpammo( id, iWeapon, g_iMaxBPAmmo[ iWeapon ] );
					}
					
					if( g_bAdrenalineActive[ id ] )
					{
						new iEnt = find_ent_by_owner( -1, g_szWeaponClassnames[ iWeapon ], id );
						
						if( !pev_valid( iEnt ) )
							return;
						
						cs_set_weapon_ammo( iEnt, g_iMaxClipAmmo[ iWeapon ] );
					}
				}
				
				if( g_bAdrenalineActive[ id ] )
				{
					set_user_maxspeed( id, get_pcvar_float( g_pAdrenalineSpeed ) );
				}
			}
			
			case TEAM_NC:
			{
				if( iWeapon == CSW_KNIFE )
				{
					set_pev( id, pev_viewmodel2, g_szNCKnife_V );
				}
			}
		}
	}

	public CreateMenus()
	{
		g_hWeaponMenu = menu_create( "Weapons Menu", "WeaponMenu_Handler" );
		menu_additem( g_hWeaponMenu, "New Weapons", "0" );
		menu_additem( g_hWeaponMenu, "Previous Weapons", "1" );
		menu_additem( g_hWeaponMenu, "2 + Don't Ask Again", "2" );
		
		g_hPrimaryWeaponMenu = menu_create( "Primary Weapons", "PrimaryMenu_Handler" );
		g_hSecondaryWeaponMenu = menu_create( "Secondary Weapons", "SecondaryMenu_Handler" );
		
		new szInfo[ 3 ];
		for( new i = MIN_WEAPON; i <= MAX_WEAPON; i++ )
		{
			if( IsPrimaryWeapon( i ) )
			{
				num_to_str( i, szInfo, charsmax( szInfo ) );
				menu_additem( g_hPrimaryWeaponMenu, g_szWeaponNames[ i ], szInfo );
			}
			
			else if( IsSecondaryWeapon( i ) )
			{
				num_to_str( i, szInfo, charsmax( szInfo ) );
				menu_additem( g_hSecondaryWeaponMenu, g_szWeaponNames[ i ], szInfo );
			}
			
			else continue;
		}
		
		g_hItemsMenu = menu_create( "Choose an Item:", "ItemsMenu_Handler" );
		
		for( new i = 0; i < ItemsInfo; i++ )
		{
			num_to_str( i, szInfo, charsmax( szInfo ) );
			
			if( i == ITEM_LASER )
			{
				menu_additem( g_hItemsMenu, g_szItemNames[ i ], szInfo, _, menu_makecallback( "LaserItem_Callback" ) );
			}
			
			else menu_additem( g_hItemsMenu, g_szItemNames[ i ], szInfo );
		}
	}	
	
	public LaserItem_Callback( id, hMenu, iItem )
	{
		if( g_iCurrentRound == 0 )
			return ITEM_DISABLED;
			
		new iFrags = get_user_frags( id );
		new iDeaths = get_user_deaths( id );

		new iPlayerFrags;
		
		new iPlayers[ 32 ], iNum;
		get_players( iPlayers, iNum, "ae", "CT" );
		
		for( new i = 0, iPlayer; i < iNum; i++ )
		{
			iPlayer = iPlayers[ i ];
			
			if( !is_user_alive( iPlayer ) || iPlayer == id )
				continue;
				
			iPlayerFrags = get_user_frags( iPlayer );
			
			if( iPlayerFrags > iFrags )
				return ITEM_DISABLED;
				
			else if( iPlayerFrags == iFrags )
			{
				if( get_user_deaths( iPlayer ) < iDeaths )
					return ITEM_DISABLED;
			}
		}
		
		return ITEM_ENABLED;
		
	}

	public Ham_PlayerSpawn_Post( id )
	{
		if( !is_user_alive( id ) )
			return HAM_IGNORED;
		
		strip_user_weapons( id );
		give_item( id, "weapon_knife" );
		
		new CsTeams:iTeam = cs_get_user_team( id );
		
		if( g_bNCNextRound[ id ] )
		{
			if( iTeam != TEAM_NC )
			{
				cs_set_user_team( id, TEAM_NC );
				ExecuteHamB( Ham_CS_RoundRespawn, id );
				g_bNCNextRound[ id ] = false;
				return HAM_IGNORED;
			}
			
			g_bNCNextRound[ id ] = false;
		}
		
		switch( iTeam )
		{
			case TEAM_NC:
			{
				cs_set_user_model( id, "nightcrawler" );
				
				if( get_user_weapon( id ) == CSW_KNIFE )
					set_pev( id, pev_viewmodel2, g_szNCKnife_V );
					
				client_print( id, print_chat, "%s You are now invisible.", g_szPrefix );
				
				set_user_health( id, get_pcvar_num( g_pNightcrawlerHealth ) );
				set_user_gravity( id, get_pcvar_float( g_pNightcrawlerGravity ) / 800 );
				set_user_maxspeed( id, get_pcvar_float( g_pNightcrawlerSpeed ) );
				
				set_user_footsteps( id, 1 );
				
				g_iTeleportsRemaining[ id ] = get_pcvar_num( g_pNightcrawlerTeleCount );
				
				g_bVisible[ id ] = false;
			}
			
			case TEAM_HUMAN:
			{
				if( g_bRememberGuns[ id ] )
					GiveWeapons( id );
				
				else if( g_iPrimaryWeapon[ id ] == 0 || g_iSecondaryWeapon[ id ] == 0 )
				{
					menu_display( id, g_hPrimaryWeaponMenu );
				}
				
				else menu_display( id, g_hWeaponMenu );
				
				set_user_footsteps( id, 0 );
				
				cs_set_user_model( id, "gign" );
				
				g_bVisible[ id ] = true;
			}
		}
		
		g_bNCNextRound[ id ] = false;
		
		return HAM_IGNORED;
	}

	public Ham_PlayerKilled_Post( iVictim, iKiller, iShouldGib )
	{
		if( !is_user_alive( iKiller ) )
			return HAM_IGNORED;
		
		switch( cs_get_user_team( iKiller ) )
		{
			case TEAM_HUMAN:
			{
				if( cs_get_user_team( iVictim ) == TEAM_NC )
				{
					client_print( iVictim, print_chat, "%s You were killed by a human and are now one also!", g_szPrefix );
					cs_set_user_team( iVictim, TEAM_HUMAN );
					
					if( !g_bNCNextRound[ iKiller ] )
					{
						client_print( iKiller, print_chat, "%s You killed a Night-Crawler and will be one next round!", g_szPrefix );
						g_bNCNextRound[ iKiller ] = true;
					}
				}
			}
			
			case TEAM_NC:
			{
				if( cs_get_user_team( iVictim ) == TEAM_HUMAN )
				{
					client_print( iKiller, print_chat, "%s You killed a human!", g_szPrefix );
					client_print( iVictim, print_chat, "%s You were killed by a Night-Crawler!", g_szPrefix );
				}
			}
		}
		
		return HAM_IGNORED;
	}

	public Ham_PlayerTakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
	{
		if( is_user_connected( iAttacker ) && cs_get_user_team( iVictim ) == TEAM_NC )
		{
			remove_task( TASK_INVISIBLE + iVictim );
			
			g_bVisible[ iVictim ] = true;
			
			set_task( get_pcvar_float( g_pNightcrawlerVisibleTime ), "Task_SetInvisible", iVictim + TASK_INVISIBLE );
			
			if( g_iChosenItem[ iAttacker ] == ITEM_POISON && iInflictor == CSW_SCOUT )
			{
				g_iPoisonRemaining[ iVictim ] = get_pcvar_num( g_pPoisonAmount );
				
				remove_task( TASK_POISON + iVictim );
				
				new szParams[ 2 ];
				szParams[ 0 ] = iAttacker;
				set_task( get_pcvar_float( g_pPoisonInterval ), "Task_Poison", TASK_POISON + iVictim, szParams, 2 );
			}
		}
	}
	
	public Task_Poison( szParams[ ], iTaskID )
	{
		new iAttacker = szParams[ 0 ];
		
		new id = iTaskID - TASK_POISON;
		
		ExecuteHam( Ham_TakeDamage, id, iAttacker, iAttacker, get_pcvar_float( g_pPoisonDamage ), DMG_GENERIC );
		
		if( --g_iPoisonRemaining[ id ] > 0 )
		{
			set_task( get_pcvar_float( g_pPoisonInterval ), "Task_PoisonHurt", iTaskID );
		}
	}
	
	public GiveWeapons( id )
	{
		new iPrimary = g_iPrimaryWeapon[ id ];
		new iSecondary = g_iSecondaryWeapon[ id ];
		
		give_item( id, g_szWeaponClassnames[ iPrimary ] );
		give_item( id, g_szWeaponClassnames[ iSecondary ] );
		
		cs_set_user_bpammo( id, iPrimary, g_iMaxBPAmmo[ iPrimary ] );
		cs_set_user_bpammo( id, iSecondary, g_iMaxBPAmmo[ iSecondary ] );
	}

	public WeaponMenu_Handler( id, hMenu, iItem )
	{
		switch( iItem )
		{
			case 0: menu_display( id, g_hPrimaryWeaponMenu, 0 );
			case 1: 
			{
				GiveWeapons( id );
				menu_display( id, g_hItemsMenu, 0 );
			}
			
			case 2: 
			{
				GiveWeapons( id );
				g_bRememberGuns[ id ] = true;
				
				menu_display( id, g_hItemsMenu, 0 );
			}
		}
	}

	public PrimaryMenu_Handler( id, hMenu, iItem )
	{
		if( iItem == MENU_EXIT )
		{
			menu_display( id, g_hItemsMenu, 0 );
			return PLUGIN_HANDLED;
		}
		
		new iAccess, hCallback;
		new szData[ 6 ];
		
		menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), _, _, hCallback );
		
		g_iPrimaryWeapon[ id ] = str_to_num( szData );

		menu_display( id, g_hSecondaryWeaponMenu, 0 );
		
		return PLUGIN_HANDLED;
	}

	public SecondaryMenu_Handler( id, hMenu, iItem )
	{
		if( iItem == MENU_EXIT )
		{
			menu_display( id, g_hItemsMenu, 0 );
			return PLUGIN_HANDLED;
		}
		
		new iAccess, hCallback;
		new szData[ 6 ];
		
		menu_item_getinfo( hMenu, iItem, iAccess, szData, charsmax( szData ), _, _, hCallback );
		
		g_iSecondaryWeapon[ id ] = str_to_num( szData );

		GiveWeapons( id );
		
		menu_display( id, g_hItemsMenu, 0 );
		
		return PLUGIN_HANDLED;
	}

	public ItemsMenu_Handler( id, hMenu, iItem )
	{
		g_iChosenItem[ id ] = iItem;
		
		switch( iItem )
		{
			case ITEM_LASER:
			{
				g_bHasLaser[ id ] = true;
			}
			
			case ITEM_ADRENALINE:
			{
				client_print( id, print_chat, "%s Bind a key to 'item' to inject adrenaline.", g_szPrefix );
				
				g_iAdrenalineUses[ id ] = get_pcvar_num( g_pAdrenalineUses );
			}
			
			case ITEM_MEDKIT:
			{
				client_print( id, print_chat, "%s Bind a key to 'item' to use a medical kit.", g_szPrefix );
				
				g_iMedKitUses[ id ] = get_pcvar_num( g_pMedKitUses );
			}
			
			case ITEM_SUICIDE:
			{
				client_print( id, print_chat, "%s Bind a key to 'item' to start the countdown.", g_szPrefix );
			}
			
			case ITEM_POISON:
			{
				client_print( id, print_chat, "%s All bullets fired with a scout will be poisonous.", g_szPrefix );
			}
		}
		
		return PLUGIN_HANDLED;
	}
	
	public Task_StartGame()
	{
		new iPlayers[ 32 ], iNum;
		get_players( iPlayers, iNum );
		
		new iNCAmount = ( get_pcvar_num( g_pNightcrawlerRatio ) * iNum ) / 100 - g_iTeamCount[ TEAM_NC ];
		
		if( iNCAmount == 0 && iNum > 1 )
			iNCAmount = 1;
		
		new iRandom;
		
		for( new i = 0; i < iNCAmount; i++ )
		{
			iRandom = random( iNum );			
			cs_set_user_team( iPlayers[ iRandom ], TEAM_NC );
			iPlayers[ iRandom ] = iPlayers[ --iNum ];
		}
		
		server_cmd( "sv_restartround 1 " );
	}
	
	public CmdEnableGuns( id )
	{
		if( g_bRememberGuns[ id ] )
		{
			client_print( id, print_chat, "%s Your gun menu has been re-enabled.", g_szPrefix );
			g_bRememberGuns[ id ] = false;
		}
		
		else
			client_print( id, print_chat, "%s Your gun menu is already enabled!", g_szPrefix );
	}
	
	public CmdUseItem( id )
	{
		switch( cs_get_user_team( id ) )
		{
			case TEAM_NC:
			{
				if( g_iTeleportsRemaining[ id ] > 0 )
				{
					new Float:flGameTime = get_gametime();
					
					new iDelay = get_pcvar_num( g_pNightcrawlerTeleDelay );
					
					if( flGameTime - g_flLastTeleportTime[ id ] < iDelay )
					{
						client_print( id, print_chat, "%s You must wait %i seconds inbetween teleports.", g_szPrefix, iDelay );
						return;
					}
					
					else if( TeleportPlayer( id ) )
					{
						g_iTeleportsRemaining[ id ]--;
						g_flLastTeleportTime[ id ] = get_gametime();
					
					}
				}
			}
			
			case TEAM_HUMAN:
			{
				switch( g_iChosenItem[ id ] )
				{
					case ITEM_ADRENALINE:
					{
						if( g_bAdrenalineActive[ id ] )
						{
							client_print( id, print_chat, "%s Adrenaline is already active!", g_szPrefix );
						}
						
						else if( g_iAdrenalineUses[ id ] > 0 )
						{
							g_iAdrenalineUses[ id ]--;
							client_print( id, print_chat, "%s You have injected adrenaline!", g_szPrefix );
							
							g_bAdrenalineActive[ id ] = true;
							
							set_user_maxspeed( id, get_pcvar_float( g_pAdrenalineSpeed ) );
							
							set_task( get_pcvar_float( g_pAdrenalineTime ), "Task_RemoveAdrenaline", TASK_ADRENALINE + id );
						}
					}
					
					case ITEM_MEDKIT:
					{
						if( g_iMedKitUses[ id ] > 0 )
						{
							g_iMedKitUses[ id ]--;
							client_print( id, print_chat, "%s You have used one of your medical kits. You have %i more.", g_szPrefix, g_iMedKitUses[ id ] );
							
							set_user_health( id, 100 );
						}
					}
					
					case ITEM_SUICIDE:
					{
						if( task_exists( TASK_SUICIDE + id ) )
							return;
							
						g_iSuicideTime[ id ] = get_pcvar_num( g_pSuicideTime );
						
						Task_Suicide( TASK_SUICIDE + id );
						
						set_task( 1.0, "Task_Suicide", TASK_SUICIDE + id, .flags="a", .repeat=g_iSuicideTime[ id ] );
						
					}
				}
			}
		}
	}
	
	public Task_SetInvisible( iTaskID )
	{
		new id = iTaskID - TASK_INVISIBLE;
		
		g_bVisible[ id ] = false;
	}
	
	public Task_Suicide( iTaskID )
	{
		new id = iTaskID - TASK_SUICIDE;

		if( --g_iSuicideTime[ id ] == 0 )
		{
			new Float:flOrigin[ 3 ];
			pev( id, pev_origin, flOrigin );
		
			user_kill( id );
			
			message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
			write_byte( TE_EXPLOSION );
			write_coord( floatround( flOrigin[ 0 ] ) );
			write_coord( floatround( flOrigin[ 1 ] ) );
			write_coord( floatround( flOrigin[ 2 ] ) );
			write_short( g_iExplosionSprite );
			write_byte( 30 );
			write_byte( 30 );
			write_byte( 0 );
			message_end();
			
			fm_radius_damage( id, flOrigin, get_pcvar_float( g_pSuicideDamage ), get_pcvar_float( g_pSuicideRadius ) );
		}
		
		else emit_sound( id, CHAN_ITEM, g_szSuicideBombSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	}
	
	// Taken from Jailbreak Mod by Pastout.
	stock fm_radius_damage( id, Float:flOrigin[ 3 ], Float:flDamage, Float:flRadius )
	{
		new szClassname[ 33 ], CsTeams:iTeam;
		
		iTeam = cs_get_user_team( id );
		
		static iEnt;
		iEnt = -1;
		while( ( iEnt = engfunc( EngFunc_FindEntityInSphere, iEnt, flOrigin, flRadius ) ) )
		{
			pev( iEnt, pev_classname, szClassname, charsmax( szClassname ) );
			
			if( !equali( szClassname, "player" ) || !is_user_alive( iEnt ) || cs_get_user_team( iEnt ) == iTeam )
				continue;
			
			ExecuteHamB( Ham_TakeDamage, iEnt, 0, id, flDamage, DMG_GENERIC );
		}
	}
	
	// Taken from Jailbreak Mod by Pastout
	stock createKill(id, attacker, weaponDescription[]) 
	{
		new iFrags, iFrags2;
		
		if(id != attacker) 
		{
			iFrags = get_user_frags(attacker);
			set_user_frags(attacker, iFrags + 1);
			   
			//Kill the victim and block the messages
			set_msg_block(g_msgDeath,BLOCK_ONCE);
			set_msg_block(g_msgScoreInfo,BLOCK_ONCE);
			user_kill(id);
			  
			//user_kill removes a frag, this gives it back
			iFrags2 = get_user_frags(id);
			set_user_frags(id, iFrags2 + 1);
			  
			//Replaced HUD death message
			message_begin(MSG_ALL, g_msgDeath,{0,0,0},0);
			write_byte(attacker);
			write_byte(id);
			write_byte(0);
			write_string(weaponDescription);
			message_end();
			  
			//Update killers scorboard with new info
			message_begin(MSG_ALL, g_msgScoreInfo);
			write_byte(attacker);
			write_short(iFrags);
			write_short(get_user_deaths(attacker));
			write_short(0);
			write_short(get_user_team(attacker));
			message_end();
			  
			//Update victims scoreboard with correct info
			message_begin(MSG_ALL, g_msgScoreInfo);
			write_byte(id);
			write_short(iFrags2);
			write_short(get_user_deaths(id));
			write_short(0);
			write_short(get_user_team(id));
			message_end();
			
			new szName[32], szName1[32];
			get_user_name(id, szName, 31);
			get_user_name(attacker, szName1, 31);
		}
	}
			
	public Task_RemoveAdrenaline( iTaskID )
	{
		new id = iTaskID - TASK_ADRENALINE;
		
		g_bAdrenalineActive[ id ] = false;
		
		if( is_user_alive( id ) )
			set_user_maxspeed( id, 0.0 );
	}
	
	public Forward_AddToFullPack_Post( es, e, iEntity, iHost, iHostFlags, iPlayer, pSet )
	{
		if( is_user_alive( iEntity ) && is_user_alive( iHost ) && cs_get_user_team( iEntity ) == TEAM_NC && cs_get_user_team( iHost ) == TEAM_HUMAN )
		{
			set_es( es, ES_RenderMode, kRenderTransAdd );
			
			if( g_bVisible[ iEntity ] )
				set_es( es, ES_RenderAmt, 255 );
				
			else set_es( es, ES_RenderAmt, 0 );
		}
	}

	CountTeams()
	{
		for( new i = 1; i <= g_iMaxPlayers; i++ )
		{
			if( !is_user_connected( i ) )
				continue;
			
			g_iTeamCount[ cs_get_user_team( i ) ]++;
		}
	}
	
	// Credits to NiHiLaNTh
	TeleportPlayer( iPlayer )
	{
		new Float:vOrigin[ 3 ], Float:vViewOfs[ 3 ];
		pev( iPlayer, pev_origin, vOrigin );
		pev( iPlayer, pev_view_ofs, vViewOfs );
		
		xs_vec_add( vOrigin, vViewOfs, vOrigin );
		
		new Float:vViewAngle[ 3 ];
		pev( iPlayer, pev_v_angle, vViewAngle );
		
		new Float:vAimVector[ 3 ];
		angle_vector( vViewAngle, ANGLEVECTOR_FORWARD, vAimVector );
		xs_vec_normalize( vAimVector, vAimVector );
		xs_vec_mul_scalar( vAimVector, 9999.0, vAimVector );
		
		engfunc( EngFunc_TraceLine, vOrigin, vAimVector, 0, iPlayer, 0 );
		
		get_tr2( 0, TR_vecEndPos, vAimVector );
		get_tr2( 0, TR_vecPlaneNormal, vOrigin );
		
		xs_vec_normalize( vOrigin, vOrigin );
		xs_vec_mul_scalar( vOrigin, 36.0, vOrigin );
		xs_vec_add( vAimVector, vOrigin, vOrigin );
		
		new bool:bDucking = false;
		
		if( trace_hull( vOrigin, HULL_HUMAN, iPlayer ) )
		{
			if( !trace_hull( vOrigin, HULL_HEAD, iPlayer ) )
			{
				bDucking = true;
			}
			else
			{
				// player cannot duck or stand clearly, so try to move the origin so player can
				
				new iResetCount;
				
				test_new_origin:
				
				if( ++iResetCount > 4 )
				{
					// too many tries to find a good origin. just set to fail.
					
					client_print( iPlayer, print_center, "You cannot teleport there! You will be stuck!" );
					
					return 0;
				}
				
				for( new i = 0; i < 6; i++ )
				{
					switch( i )
					{
						case 0:
						{
							// check above x
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 0 ] += 16.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								get_tr2( 0, TR_vecEndPos, vViewOfs );
								
								vOrigin[ 0 ] = vViewOfs[ 0 ] - 16.0;
								
								goto test_new_origin;
							}
						}
						case 1:
						{
							// check below x
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 0 ] -= 16.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								get_tr2( 0, TR_vecEndPos, vViewOfs );
								
								vOrigin[ 0 ] = vViewOfs[ 0 ] + 16.0;
								
								goto test_new_origin;
							}
						}
						case 2:
						{
							// check above y
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 1 ] += 16.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								get_tr2( 0, TR_vecEndPos, vViewOfs );
								
								vOrigin[ 1 ] = vViewOfs[ 1 ] - 16.0;
								
								goto test_new_origin;
							}
						}
						case 3:
						{
							// check below y
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 1 ] -= 16.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								get_tr2( 0, TR_vecEndPos, vViewOfs );
								
								vOrigin[ 1 ] = vViewOfs[ 1 ] + 16.0;
								
								goto test_new_origin;
							}
						}
						case 4:
						{
							// check above z
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 2 ] += 36.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								xs_vec_copy( vOrigin, vViewOfs );
								vViewOfs[ 2 ] += 18.0;
								
								engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
								
								get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
								
								if( vViewOfs[ 0 ] != 1.0 )
								{
									get_tr2( 0, TR_vecEndPos, vViewOfs );
									
									vOrigin[ 2 ] = vViewOfs[ 2 ] - 36.0;
									
									goto test_new_origin;
								}
								
								bDucking = true;
							}
						}
						case 5:
						{
							// check below z
							
							xs_vec_copy( vOrigin, vViewOfs );
							vViewOfs[ 2 ] -= 36.0;
							
							engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
							
							get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
							
							if( vViewOfs[ 0 ] != 1.0 )
							{
								xs_vec_copy( vOrigin, vViewOfs );
								vViewOfs[ 2 ] -= 18.0;
								
								engfunc( EngFunc_TraceLine, vOrigin, vViewOfs, 0, iPlayer, 0 );
								
								get_tr2( 0, TR_flFraction, vViewOfs[ 0 ] );
								
								if( vViewOfs[ 0 ] != 1.0 )
								{
									get_tr2( 0, TR_vecEndPos, vViewOfs );
									
									vOrigin[ 2 ] = vViewOfs[ 2 ] + 36.0;
									
									goto test_new_origin;
								}
								
								bDucking = true;
							}
						}
					}
				}
			}
		}
		
		if( engfunc( EngFunc_PointContents, vOrigin ) != CONTENTS_EMPTY )
		{
			client_print( iPlayer, print_center, "You can't teleport there!" );
			
			return 0;
		}
		
		if( bDucking )
		{
			set_pev( iPlayer, pev_flags, pev( iPlayer, pev_flags ) | FL_DUCKING );
			engfunc( EngFunc_SetSize, iPlayer, Float:{ -16.0, -16.0, -18.0 }, Float:{ 16.0, 16.0, 18.0 } );
		}
		
		engfunc( EngFunc_SetOrigin, iPlayer, vOrigin );
		
		return 1;
	}
RoyalServer
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

28 May 2014, 15:00

UPP , ma ajuta cineva ?
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

29 May 2014, 18:48

UPP , va rog mult , ma poate ajuta cineva ? :|
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

30 May 2014, 23:18

UPP , are cineva bunavointa sa ma ajute ?
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

31 May 2014, 15:38

UPP din nou , ma poate ajuta cineva ?

Edit : Va rog sa il mutati la scripting ca sa nu mai fac inca in topic.
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

01 Jun 2014, 12:36

UPP , ma ajuta cineva ?
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

02 Jun 2014, 19:54

Upp , chiar nimeni ?
User avatar
WISHEXEC
Membru, skill +4
Membru, skill +4
Posts: 1683
Joined: 12 Nov 2011, 19:37
Detinator Steam: Da
CS Status: AmxModX
Detinator server CS: DAEVA.RO
Reputatie: Fost Moderator ajutator
Nume anterior : ONEMDX
Location: România
Has thanked: 84 times
Been thanked: 85 times
Contact:

02 Jun 2014, 23:28

cauta-ma pe mess si vedem ce putem face
Gossu
Membru, skill 0
Membru, skill 0
Posts: 88
Joined: 27 May 2014, 15:31
Detinator Steam: Da
Fond eXtream: 0
Has thanked: 16 times

13 Jun 2014, 22:24

ONEMDX wrote:cauta-ma pe mess si vedem ce putem face

Am vazut ca addonsurile tale sunt impecabile , si ai recomandari de la toti membrii forumului , dar adevarul este .. ca nu imi permit sa achizitionez acel addons de night crawler facut de tine.
Post Reply

Return to “Probleme la servere dedicate de Counter-Strike”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 54 guests