Raised This Month: $32 Target: $400
 8% 

[REQ] NightCrawler Mod


Post New Thread Reply   
 
Thread Tools Display Modes
Jhob94
AMX Mod X Donor
Join Date: Jul 2012
Location: Siiiiiiiiuu
Old 05-14-2013 , 16:21   Re: [REQ] NightCrawler Mod
Reply With Quote #101

Quote:
Originally Posted by Moody92 View Post
The current nightcrawler has many flaws, even exolent stated that when he said " I may rewrite nc from the scratch"

So I guess nc isn't perfect anymore.
My version isnt only Exolent. It is exolent version that was edited by another pro coder and final version was also edited by me but iam just an noob
__________________

Last edited by Jhob94; 05-14-2013 at 16:22.
Jhob94 is offline
AmineKyo
فوق سريرك
Join Date: Oct 2011
Location: Morocco
Old 05-14-2013 , 18:28   Re: [REQ] NightCrawler Mod
Reply With Quote #102

Quote:
Originally Posted by Jhob94 View Post
My version isnt only Exolent. It is exolent version that was edited by another pro coder and final version was also %InsertAWordFromBelow% by me but iam just an noob
Ruined, Screwed, Destroyed...
just joking,
This 'ProCoder' had a Deagle in his Steam AvatarPicture right ? I forgot his name
__________________
AmineKyo is offline
Jhob94
AMX Mod X Donor
Join Date: Jul 2012
Location: Siiiiiiiiuu
Old 05-14-2013 , 19:26   Re: [REQ] NightCrawler Mod
Reply With Quote #103

Hum i dont think so.
well idk if he wants i tell who he is. So the only thing i can for now is that he made the pokemod season 5 x)
__________________
Jhob94 is offline
bael
Junior Member
Join Date: Oct 2012
Old 05-14-2013 , 19:51   Re: AW: [REQ] NightCrawler Mod
Reply With Quote #104

Quote:
Originally Posted by Kia View Post
Ahhh, now I understand, something like the sound of a metal detector? The nearer you are, the sound gets faster played.
Maybe this can help http://wiki.amxmodx.org/Half-Life_1_Game_Events#Geiger
Never tried it out, but remember it from playing HL
bael is offline
Old 02-05-2014, 16:38
bricir
This message has been deleted by bricir.
bricir
Junior Member
Join Date: May 2013
Old 02-05-2014 , 16:40   Re: [REQ] NightCrawler Mod
Reply With Quote #105

Quote:
Originally Posted by pokemonmaster View Post
Well, it is missing the sound part
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

// --------------------------------------------------------------------
#define MAX_RADIUS    600.0        // OR distance, doesn't matter
#define DECREMENT_AT_TIME 67

#define TASK_HUD    81732512371
#define NC_TEAM    1        // 1 for Terrorist, 2 for CTs
#define UPDATE_TIME 0.5
// --------------------------------------------------------------------

#define IsAlive(%1) (gAlive & (1<<%1))
#define SetAlive(%1) (gAlive |= (1<<%1))
#define SetNotAlive(%1) (gAlive &= ~(1<<%1))

new iMaxRadius
new g_szPlayerMessage[33][50]
new 
g_iMaxPlayers
new gAlive
new g_szDefaultMessage[30]

public 
plugin_init()
{
    
register_plugin("Near NC detector""1.0""Khalid :)")
    
    
RegisterHam(Ham_Spawn"player""Fwd_Spawn"1)
    
RegisterHam(Ham_Killed"player""Fwd_Killed"0)
    
    
g_iMaxPlayers get_maxplayers()
    
    
iMaxRadius floatround(MAX_RADIUS)
    new 
iNum iMaxRadius DECREMENT_AT_TIME
    
    add
(g_szDefaultMessagecharsmax(g_szDefaultMessage), "[")
    while(
iNum)
    {
        --
iNum
        add
(g_szDefaultMessagecharsmax(g_szDefaultMessage), "-")
    }
    
add(g_szDefaultMessagecharsmax(g_szDefaultMessage), "]")
}

public 
client_disconnect(id)
{
    
id += TASK_HUD
    
    
if(task_exists(id))
    {
        
remove_task(id)
    }
}

public 
Fwd_Spawn(id)
{
    if(!
is_user_alive(id))
    {
        return;
    }
    
    
SetAlive(id)
    
set_task(UPDATE_TIME"ShowHud"TASK_HUD id, .flags "b")
}

public 
Fwd_Killed(id)
{
    
SetNotAlive(id)
    if(
task_exists(id TASK_HUD))
        
remove_task(id TASK_HUD)
}

public 
ShowHud(taskid)
{
    new 
id taskid TASK_HUD
    
    
if(!IsAlive(id))
    {
        
remove_task(taskid)
        return;
    }
    
    static 
Float:fOrigin[3]
    
pev(idpev_originfOrigin)
    
    static 
iEntiFound
    iEnt 
0iFound 0
    
    
static iColor[3]; iColor = { 00}
    
    
// Nearest player
    
while( (iEnt engfunc(EngFunc_FindEntityInSphereiEntfOriginMAX_RADIUS ) ) )
    {
        if(
iEnt g_iMaxPlayers || iEnt == id)
        {
            continue;
        }
        
        if(!
IsAlive(iEnt))
        {
            continue;
        }
        
        if(
get_user_team(iEnt) != NC_TEAM)
        {
            continue;
        }
        
        
distance_rate(idfOriginiEntiColor)
        
iFound 1
        
break;
    }
    
    
set_hudmessage(iColor[0], iColor[1], iColor[2], -1.00.6000.0UPDATE_TIME 0.10.00.1)
    
show_hudmessage(idiFound g_szPlayerMessage[id] : g_szDefaultMessage)
}

stock distance_rate(idFloat:Origin1[3], iEntiColor[3])
{
    static 
Float:Origin2[3]; pev(iEntpev_originOrigin2)
    
    new 
Float:flDistance get_distance_f(Origin1Origin2)
    
    if(
flDistance MAX_RADIUS)
        return;
    
    new 
Float:flNewDistance MAX_RADIUS DECREMENT_AT_TIMEFloat:flOldDistance  MAX_RADIUS
    
    
new 1
    
while( flNewDistance >= )
    {
        if( 
flNewDistance <= flDistance <= flOldDistance )
            break;
        
        
flOldDistance flNewDistanceflNewDistance -= DECREMENT_AT_TIME
        
++k
    
}
    
    
set_player_msg_string(idkiColor)
}

public 
set_player_msg_string(idiNumiColor[3])
{
    
setc(g_szPlayerMessage[id], charsmax(g_szPlayerMessage), 0)
    
    static 
iLeftiAdd
    
new szAdd[30], szMark[30]
    if(
iNum < ( iAdd = (iMaxRadius DECREMENT_AT_TIME) ) )
    {
        
iLeft iAdd iNum
        iAdd 
iLeft 2
        
        
while(iAdd > -1)
        {
            
szAdd[iAdd] = '-'
            
            
--iAdd
        
}
    }
    
    while(
iNum > -1)
    {
        
szMark[iNum] = '!'
        
--iNum
    
}
    
    if(
iLeft == || !iLeft)
    {
        
iColor = { 2550}
    }
    
    else if( 
iLeft <= ( (iMaxRadius DECREMENT_AT_TIME) / ) )
    {
        
iColor = { 255255}
    }
    
    else
    {
        
iColor = { 5020550 }
    }
    
    
formatex(g_szPlayerMessage[id], charsmax(g_szPlayerMessage[]), "[%s%s%s]"szAddszMarkszAdd)

now I would like this as an item so players can buy it from shop... anyone up for it ?
bricir is offline
ONEMDX
Junior Member
Join Date: Jan 2013
Old 02-16-2014 , 05:36   Re: [REQ] NightCrawler Mod
Reply With Quote #106

someone has nightcrawler mod on his server ? PM with a IP thanks i want to see a comparation

Last edited by ONEMDX; 02-16-2014 at 05:44.
ONEMDX is offline
pokemonmaster
princess milk
Join Date: Nov 2010
Location: Somewhere in this world
Old 02-16-2014 , 06:29   Re: [REQ] NightCrawler Mod
Reply With Quote #107

Quote:
Originally Posted by bricir View Post
now I would like this as an item so players can buy it from shop... anyone up for it ?
Telling which plugin would help you know
__________________
اَشْهَدُ اَنْ لَّآ اِلٰهَ اِلَّا اللہُ وَحْدَه لَا شَرِيْكَ لَه وَ اَشْهَدُ اَنَّ مُحَمَّدًا عَبْدُه وَرَسُوْلُه
No longer active in AMXX. Sorry.
pokemonmaster is offline
shopbot
Junior Member
Join Date: Jan 2014
Old 03-28-2014 , 09:17   Re: [REQ] NightCrawler Mod
Reply With Quote #108

Code:
/*
		Plugin: Nightcrawler Mod
		Author: H3avY Ra1n
		Version: 1.0
	
		Description
		-----------
	
			Nightcrawler mod is a modification for Counter-Strike 1.6. In the beginning, a random player is chosen to be a 
			nightcrawler. Nightcrawlers have more speed, less gravity, a custom knife, are invisible, can climb walls, 
			and can teleport. The objective of the nightcrawlers is to kill the humans (CTs). 
	
			The humans can choose from any primary and secondary weapons in the game. They also have the opportunity to choose
			from a variety of different items. Those items include: Laser Sight, Suicide Bomb, Poison Scout Bullets, 
			Adrenaline, and Medical Kits. Their objective is to defend themselves by any means possible.
	
	
		CVARs
		-----
		
			nc_ratio <percent> 				- Percentage of players that are nightcrawlers.
			nc_visible_time <seconds>		- How long nightcrawlers are visible when shot at.
			nc_health <health>				- How much health nightcrawlers spawn with.
			nc_gravity <gravity>			- How much gravity nightcrawlers spawn with.
			nc_speed <speed>				- How much speed nightcrawlers have.
			nc_teleport_count <amount>		- How many times nightcrawlers can teleport in a round.
			nc_teleport_delay <seconds>		- How long a nightcrawler has to wait in between teleports.
	
			nc_lighting <letter>			- How dark the map is. a=darkest, z=lightest
		
			nc_adrenaline_uses <amount>		- How many times a human can inject adrenaline per round.
			nc_adrenaline_time <seconds>	- How long adrenaline lasts per injection.
			nc_adrenaline_speed <speed>		- How fast humans go when they have injected adrenaline.
	
			nc_suicide_damage <damage>		- How much damage suicide bomb does to those in the radius.
			nc_suicide_radius <distance>	- How many units around the player suicide bomb affects.
			nc_suicide_time <time>			- How long it takes for a player to explode after activating the bomb.
	
			nc_medkit_uses <amount>			- How many medical kit a human has.
			nc_medkit_health <health>		- How much health a medical kit heals you to.
			
			nc_poison_amount <amount>		- How many times poison will hurt the player.
			nc_poison_interval <seconds> 	- How often poison will hurt the player.
			nc_poison_damage <damage>		- How much damage poison does each time.
	
	
		Changelog
		---------
		
			October 11, 2011	
			
				- v1.0 -
				
					+ Initial Release
	
		Credits
		-------
		
			Joropito		
			
				+ Team Menu
	
			Pastout
			
				+ Suicide Bomb
	
			Exolent
			
				+ Teleport Player
	
	*/
	

	/* Includes */
	
		#include < amxmodx >
		#include < cstrike >
		#include < hamsandwich >
		#include < fun >
		#include < fakemeta >
		#include < engine >
		#include < xs >
		
	/* Defines */
	
		#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

		#define MAX_PLAYERS 	32
	
	/* 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",
			"Adrenaline \r(Bind Key Activated)",
			"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_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";
		new const g_szAdrenalineSound[ ] = "fvox/adrenaline_shot.wav";
		new const g_szMedicalKitSound[ ] = "fvos/administering_medical.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_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_pMedKitHealth;
		
		new g_pSuicideRadius;
		new g_pSuicideDamage;
		new g_pSuicideTime;
		
		new g_pPoisonAmount;
		new g_pPoisonInterval;
		new g_pPoisonDamage;
	
	/* Ham Hooks (Used to reset max speed) */
	
		new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;
		
	
	/////////////////////////////
	//* Client (dis)connecting *//
	/////////////////////////////
	
	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 );
	}
	
	///////////////////////
	//* Plugin Precache *//
	///////////////////////
	
	public plugin_precache()
	{
		precache_model( g_szNCModel );
		precache_model( g_szNCKnife_V );
		
		precache_sound( g_szSuicideBombSound );
		precache_sound( g_szTeleportSound );
		precache_sound( g_szMedicalKitSound );
		precache_sound( g_szAdrenalineSound );
		
		g_iLaserSprite = precache_model( g_szLaserSprite );
		g_iExplosionSprite = precache_model( g_szExplosionSprite );
	}
	
	///////////////////
	//* Plugin Init *//
	///////////////////
	
	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_AddPlayerItem, "player", "Ham_AddPlayerItem_Pre", 		0 );
		RegisterHam( Ham_Spawn, 		"player", "Ham_PlayerSpawn_Post", 		1 );
		RegisterHam( Ham_Killed, 		"player", "Ham_PlayerKilled_Post", 		1 );
		RegisterHam( Ham_TakeDamage, 	"player", "Ham_PlayerTakeDamage_Post", 	1 );
		RegisterHam( Ham_TakeDamage, 	"player", "Ham_PlayerTakeDamage_Pre", 	0 );
		
		register_forward( FM_Spawn, 			"Forward_Spawn_Post", 			1 );
		register_forward( FM_Touch, 			"Forward_Touch_Pre", 			0 );
		register_forward( FM_PlayerPreThink, 	"Forward_PlayerPreThink", 		0 );
		register_forward( FM_AddToFullPack, 	"Forward_AddToFullPack_Post", 	1 );
		
		register_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" );
		
		register_event( "CurWeapon", "Event_CurWeapon", "be" );
		
		register_menucmd( register_menuid( "Team_Select", 1 ), MENU_KEY_1 | MENU_KEY_2 | MENU_KEY_5 | MENU_KEY_6, "TeamSelectMenu_Handler" );
			
		g_msgShowMenu 	= get_user_msgid( "ShowMenu" 	);
		g_msgVGUIMenu 	= get_user_msgid( "VGUIMenu" 	);
		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_pMedKitHealth				= register_cvar( "nc_medkit_health", 	"100" 	);
		
		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();
	}

	///////////////////////
	//* Client Commands *//
	//*	--------------- *//
	//*    Join Team    *//
	//*   Enable Guns   *//
	//*     Use Item    *//
	///////////////////////
	
	public CmdJoinTeam( id )
		return PLUGIN_HANDLED;
	
	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_flLastTeleportTime[ id ] = get_gametime();
						
						if( --g_iTeleportsRemaining[ id ] == 0 )
						{
							client_print( id, print_chat, "%s You are now out of teleports.", g_szPrefix );
						}
						
						else client_print( id, print_chat, "%s You have %i teleports left.", g_szPrefix, g_iTeleportsRemaining[ id ] );
					}
					
				}
			}
			
			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;
							
							client_cmd( id, "spk ^"%s^"", g_szAdrenalineSound );
							
							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 )
						{
							new iNewHealth = get_pcvar_num( g_pMedKitHealth );

							if( get_user_health( id ) >= iNewHealth )
							{
								client_print( id, print_chat, "%s A medical kit won't help you right now!", g_szPrefix );
							}
							
							else
							{
								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, iNewHealth );
								
								client_cmd( id, "spk ^"%s^"", g_szMedicalKitSound );
							}
						}
						
						else
						{
							client_print( id, print_chat, "%s You're out of medical kits!", g_szPrefix );
						}
					}
					
					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 ] );
						
					}
				}
			}
		}
	}
	
	//////////////////////
	//*      Menus     *//
	//*     -------    *//
	//*   Weapon Menu  *//
	//*  Primary Menu  *//
	//* Secondary Menu *//
	//*    Item Menu   *//
	//////////////////////
	
	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" );
		
		if( iNum == 1 )
			return ITEM_DISABLED;
			
		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 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 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 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;
	}
	///////////////////////////
	//*    Ham Functions    *//
	//*    -------------    *//
	//*  Spawn              *//
	//*  Killed             *//
	//*  Take Damage (PRE)  *//
	//*  Take Damage (POST) *//
	///////////////////////////
	
	public Ham_AddPlayerItem_Pre( id, iWeapon )
	{
		if( cs_get_weapon_id( iWeapon ) == CSW_C4 )
		{
			cs_set_user_plant( id, 0, 0 );
			set_pev( id, pev_body, 0 );
			SetHamReturnInteger( false );
			return HAM_SUPERCEDE;
		}
		
		return HAM_IGNORED;
	}
	
	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_Pre( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
	{
		if( cs_get_user_team( iVictim ) == TEAM_NC && iBits & DMG_FALL )
			return HAM_SUPERCEDE;
		
		return HAM_IGNORED;
	}
	
	public Ham_PlayerTakeDamage_Post( iVictim, iInflictor, iAttacker, Float:flDamage, iBits )
	{
		if( cs_get_user_team( iVictim ) == TEAM_NC )
		{				
			if( is_user_connected( iAttacker ) )
			{
				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 );
				}
			}
		}
		
		return HAM_IGNORED;
	}
	
	//////////////////////
	//* Fakemeta Hooks *//
	//* -------------- *//
	//*  Entity Spawn*  //
	//*  Entity Touch*  //
	//*  Player Think  *//
	//*  AddToFullPack *//
	//////////////////////
	
	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 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 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 );
		}
	}
	
	//////////////////
	//* Log Events *//
	//* ---------- *//
	//* Round End  //
	/////////////////
	
	public LogEvent_RoundEnd()
	{
		g_iCurrentRound++;
	}
	/////////////////
	//*   Events  *//
	//*   ------  *//
	//* CurWeapon *//
	/////////////////
	
	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 );
				}
			}
		}
	}
	
	///////////////////
	//* Ratio Stuff *//
	//* ----------- *//
	//*  Team Menu  *//
	//* Force Team  *//
	///////////////////
	
	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 );
	}
	
	///////////////////
	//*  Messages   *//
	//*  --------   *//
	//* VGUI Menu   *//
	//* Show Menu   *//
	//* Status Icon *//
	///////////////////

	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 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;
	}
	
	/////////////////////
	//*     Tasks     *//
	//*     -----     *//
	//*     Poison    *//
	//*   Start Game  *//
	//* Set Invisible *//
	//*  Suicide Bomb *//
	//*   Adrenaline  *//
	/////////////////////
	
	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 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 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 );
	}
	
	public Task_RemoveAdrenaline( iTaskID )
	{
		new id = iTaskID - TASK_ADRENALINE;
		
		g_bAdrenalineActive[ id ] = false;
		
		if( is_user_alive( id ) )
		{
			ExecuteHamB( Ham_Player_ResetMaxSpeed, id );
			
			client_print( id, print_chat, "%s The adrenaline has worn off.", g_szPrefix );
		}
		
		
	}
	
	///////////////////////
	//*   Other Stuff   *//
	//*   -----------   *//
	//*  Radius Damage  *//
	//*   Count Teams   *//
	//* Teleport Player *//
	///////////////////////
	
	// Taken from Jailbreak Mod by Pastout.
	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 );
		}
	}
			
	CountTeams()
	{
		for( new i = 1; i <= g_iMaxPlayers; i++ )
		{
			if( !is_user_connected( i ) )
				continue;
			
			g_iTeamCount[ cs_get_user_team( i ) ]++;
		}
	}
	
	// Credits to Exolent for this function
	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_SKY )
		{
			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 } );
		}
		
		emit_sound( iPlayer, CHAN_ITEM, g_szTeleportSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
		
		engfunc( EngFunc_SetOrigin, iPlayer, vOrigin );
		
		return 1;
	}

Last edited by YamiKaitou; 03-28-2014 at 14:53.
shopbot is offline
Kia
AlliedModders Donor
Join Date: Apr 2010
Location: In a world of madness
Old 03-28-2014 , 10:07   Re: [REQ] NightCrawler Mod
Reply With Quote #109

Please remove the code from the post and attach the sma file, also the version is known for having bugs.
__________________
Kia is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 01:41.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode