Raised This Month: $51 Target: $400
 12% 

Can Someone Add +XP To This Ctf


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
barbergaming
Member
Join Date: Dec 2019
Location: Search For Me
Old 04-03-2020 , 13:31   Can Someone Add +XP To This Ctf
Reply With Quote #1

i have a ctf plugin i want to add +xp for players has captured the flag like When he tkae the blue flag into red base = +10xp for capturing im using oxicrom ranksystem



Code:
#include < amxmodx >
#include < amxmisc >

#include < fakemeta >
#include < engine >
#include < hamsandwich >
#include < fun >
#include < cstrike >

#include < colorchat >
#include < xs >

#pragma semicolon 1

#define PLUGIN_VERSION		"1.0.3"

#define MAX_PLAYERS		32 + 1
#define IS_PLAYER(%1)		( 1 <= %1 <= gMaxPlayers )
#define HUD_MAX_LIFE		0.8
#define FLAG_MENU_ACCESS	ADMIN_IMMUNITY

enum _: iFlags
{
	RED_FLAG,
	BLUE_FLAG
};

enum _: iEvents
{
	RED_FLAG_DROPPED,
	RED_FLAG_TAKEN,
	RED_TEAM_SCORES,
	BLUE_FLAG_DROPPED,
	BLUE_FLAG_TAKEN,
	BLUE_TEAM_SCORES
};

new const gPluginTag[ ] = "[Fantasy CTF]";

new const gBaseClassname[ ] = "FlagBase_Entity";
new const gFlagClassname[ ] = "FlagFlag_Entity";

new const gFlagModels[ iFlags ][  ] =
{
	"models/fantasyctf/red_flag.mdl",
	"models/fantasyctf/blue_flag.mdl"
};

new const gBackFlagModels[ iFlags ][ ] =
{
	"models/fantasyctf/back_redflag.mdl",
	"models/fantasyctf/back_blueflag.mdl"
};

new const gFlagEventSounds[ iEvents ][ ] =
{
	"fantasyctf/red_flag_dropped.mp3",
	"fantasyctf/red_flag_taken.mp3",
	"fantasyctf/red_team_scores.mp3",
	"fantasyctf/blue_flag_dropped.mp3",
	"fantasyctf/blue_flag_taken.mp3",
	"fantasyctf/blue_team_scores.mp3"
};

new const gBaseModel[ ] = "models/kingpin.mdl";

new Float:flFlagMinSize[ 3 ] = { -15.0, -8.0, -15.0 };
new Float:flFlagMaxSize[ 3 ] = { 15.0, 8.0, 15.0 };

new i;
new gMaxPlayers;
new gHudSyncScore;
new gHudSyncFlagEvent;
new gMessageScreenFade;
new gSpriteLight;

new gBlueScore = 0;
new gRedScore = 0;

new bool:bRedFlagInBase = true;
new bool:bBlueFlagInBase = true;

new bCountFlags[ iFlags ];

new bGotEnemyFlag[ MAX_PLAYERS ];
new bBackFlag[ MAX_PLAYERS ];

new Float:flLastHud[ MAX_PLAYERS ];

new Float:flRedBaseOrigins[ 3 ];
new Float:flBlueBaseOrigins[ 3 ];

new gCvarEnableGlow;
new gCvarEnemyBaseDamage;
new gCvarEnemyBaseRadiusDmg;

public plugin_init( )
{
	register_plugin( "Fantasy Capture The Flag", PLUGIN_VERSION, "tuty" );
	
	register_event( "DeathMsg", "Hook_DeathMessage", "a" );
	RegisterHam( Ham_Player_PreThink, "player", "bacon_PreThink" );

	register_touch( gFlagClassname, "player", "forward_TouchedFlag" );

	register_think( gBaseClassname, "forward_BaseThink" );
	register_think( gFlagClassname, "forward_FlagThink" );
	
	register_clcmd( "say /flagmenu", "CommandFlagMenu" );
	register_clcmd( "say_team /flagmenu", "CommandFlagMenu" );
	
	gCvarEnableGlow = register_cvar( "fctf_glow", "1" );
	gCvarEnemyBaseDamage = register_cvar( "fctf_base_dmg", "2" );
	gCvarEnemyBaseRadiusDmg = register_cvar( "fctf_base_radiusdmg", "200" );
	
	gMaxPlayers = get_maxplayers( );
	gHudSyncScore = CreateHudSyncObj( );
	gHudSyncFlagEvent = CreateHudSyncObj( );

	gMessageScreenFade = get_user_msgid( "ScreenFade" );
}

public plugin_precache( )
{
	gSpriteLight = precache_model( "sprites/lgtning.spr" );

	for( i = 0; i < iFlags; i++ )
	{
		precache_model( gFlagModels[ i ] );
	}
	
	for( i = 0; i < iFlags; i++ )
	{
		precache_model( gBackFlagModels[ i ] );
	}
	
	for( i = 0; i < iEvents; i++ )
	{
		precache_sound( gFlagEventSounds[ i ] );
	}

	precache_model( gBaseModel );
}

public plugin_cfg( )
{
	new szConfigsDir[ 64 ], szFile[ 64 ];
	get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
	
	new szMap[ 40 ];
	get_mapname( szMap, charsmax( szMap ) );
	
	formatex( szFile, charsmax( szFile ), "%s/%s_bases.ctf", szConfigsDir, szMap );
	
	if( !file_exists( szFile ) )
	{
		return 1;
	}
	
	new szBuffer[ 128 ], szTemp1[ 128 ], szTemp2[ 128 ];

	new szFileOrigin1[ 3 ][ 32 ], szFileAngles1[ 3 ][ 32 ];
	new szFileOrigin2[ 3 ][ 32 ], szFileAngles2[ 3 ][ 32 ];

	new Float:flOriginRed[ 3 ], Float:flOriginBlue[ 3 ];
	new Float:flAnglesRed[ 3 ], Float:flAnglesBlue[ 3 ];

	new iFile = fopen( szFile, "rt" );
	
	while( !feof( iFile ) )
	{
		fgets( iFile, szBuffer, charsmax( szBuffer ) );
		strtok( szBuffer, szTemp1, charsmax( szTemp1 ), szTemp2, charsmax( szTemp2 ), '|', 0 );
		
		parse( szTemp1, szFileOrigin1[ 0 ], sizeof szFileOrigin1[ ] - 1, szFileOrigin1[ 1 ], sizeof szFileOrigin1[ ] - 1, szFileOrigin1[ 2 ], sizeof szFileOrigin1[ ] - 1, szFileAngles1[ 0 ], sizeof szFileAngles1[ ] - 1, szFileAngles1[ 1 ], sizeof szFileAngles1[ ] - 1, szFileAngles1[ 2 ], sizeof szFileAngles1[ ] - 1 );
		
		flRedBaseOrigins[ 0 ] = flOriginRed[ 0 ] = str_to_float( szFileOrigin1[ 0 ] );
		flRedBaseOrigins[ 1 ] = flOriginRed[ 1 ] = str_to_float( szFileOrigin1[ 1 ] );
		flRedBaseOrigins[ 2 ] = flOriginRed[ 2 ] = str_to_float( szFileOrigin1[ 2 ] );
			
		flAnglesRed[ 0 ] = str_to_float( szFileAngles1[ 0 ] );
		flAnglesRed[ 1 ] = str_to_float( szFileAngles1[ 1 ] );
		flAnglesRed[ 2 ] = str_to_float( szFileAngles1[ 2 ] );
		
		parse( szTemp2, szFileOrigin2[ 0 ], sizeof szFileOrigin2[ ] - 1, szFileOrigin2[ 1 ], sizeof szFileOrigin2[ ] - 1, szFileOrigin2[ 2 ], sizeof szFileOrigin2[ ] - 1, szFileAngles2[ 0 ], sizeof szFileAngles2[ ] - 1, szFileAngles2[ 1 ], sizeof szFileAngles2[ ] - 1, szFileAngles2[ 2 ], sizeof szFileAngles2[ ] - 1 );
		
		flBlueBaseOrigins[ 0 ] = flOriginBlue[ 0 ] = str_to_float( szFileOrigin2[ 0 ] );
		flBlueBaseOrigins[ 1 ] = flOriginBlue[ 1 ] = str_to_float( szFileOrigin2[ 1 ] );
		flBlueBaseOrigins[ 2 ] = flOriginBlue[ 2 ] = str_to_float( szFileOrigin2[ 2 ] );
			
		flAnglesBlue[ 0 ] = str_to_float( szFileAngles2[ 0 ] );
		flAnglesBlue[ 1 ] = str_to_float( szFileAngles2[ 1 ] );
		flAnglesBlue[ 2 ] = str_to_float( szFileAngles2[ 2 ] );
	}
	
	UTIL_CreateBase( gBaseModel, flOriginRed, RED_FLAG, flAnglesRed );
	UTIL_CreateBase( gBaseModel, flOriginBlue, BLUE_FLAG, flAnglesBlue );
		
	fclose( iFile );

	return 1;
}
		
public client_connect( id )
{
	bGotEnemyFlag[ id ] = 0;
}

public client_disconnect( id )
{
	bGotEnemyFlag[ id ] = 0;

	UTIL_RemoveBackFlag( id );
}

public bacon_PreThink( id )
{
	if( is_user_alive( id ) )
	{
		new Float:flGameTime = get_gametime( );
		
		if( flGameTime - flLastHud[ id ] > HUD_MAX_LIFE )
		{
			set_hudmessage( 212, 42, 255, -1.0, 0.02, 1, 6.0, HUD_MAX_LIFE );
			ShowSyncHudMsg( id, gHudSyncScore, "Scoreboard:^nRed: %d | Blue: %d", gRedScore, gBlueScore );
			
			flLastHud[ id ] = flGameTime;
		}
	}
}

public Hook_DeathMessage( )
{
	new iVictim = read_data( 2 );
	
	if( IS_PLAYER( iVictim ) 
	&& bGotEnemyFlag[ iVictim ] == 1 )
	{
		new Float:flOrigin[ 3 ];
		pev( iVictim, pev_origin, flOrigin );
		
		flOrigin[ 2 ] -= 36.0;
		
		bGotEnemyFlag[ iVictim ] = 0;
		UTIL_RemoveBackFlag( iVictim );

		switch( cs_get_user_team( iVictim ) )
		{
			case CS_TEAM_T:
			{
				set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
				ShowSyncHudMsg( iVictim, gHudSyncFlagEvent, "You lost the enemy flag!" );
						
				client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_FLAG_DROPPED ] );
				UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flOrigin, BLUE_FLAG );

				bBlueFlagInBase = false;
			}
			
			case CS_TEAM_CT:
			{
				set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
				ShowSyncHudMsg( iVictim, gHudSyncFlagEvent, "You lost the enemy flag!" );

				client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_FLAG_DROPPED ] );
				UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flOrigin, RED_FLAG );

				bRedFlagInBase = false;
			}
		}
	}
	
	return;
}

public CommandFlagMenu( id )
{
	if( !( get_user_flags( id ) & FLAG_MENU_ACCESS ) )
	{
		ColorChat( id, RED, "^3%s^1 You don't have acces to this menu!", gPluginTag );
		
		return PLUGIN_HANDLED;
	}

	if( !is_user_alive( id ) )
	{
		ColorChat( id, RED, "^3%s^1 You can't create ^4Flags^1 while dead!", gPluginTag );
		
		return PLUGIN_HANDLED;
	}
	
	new iMenu = menu_create( "\wCreate \rFlag\w:", "menu_FlagHandler");
	
	menu_additem( iMenu, "\wCreate \yRed Flag", "1", 0 );
	menu_additem( iMenu, "\wCreate \yBlue Flag", "2", 0 );
	menu_additem( iMenu, "\wDelete \yRed Flag", "3", 0 );
	menu_additem( iMenu, "\wDelete \yBlue Flag", "4", 0 );
	menu_additem( iMenu, "\wSave flag origins", "5", 0 );
	
	menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL );
	
	menu_display( id, iMenu, 0 );
	
	return PLUGIN_HANDLED;
}

public menu_FlagHandler( id, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy( menu );

		return PLUGIN_HANDLED;
	}

	new szData[ 6 ], szName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, szData, charsmax( szData ), szName, charsmax( szName ), callback );

	new iKey = str_to_num( szData );

	switch( iKey )
	{
		case 1:
		{
			if( bCountFlags[ RED_FLAG ] >= 1 )
			{
				ColorChat( id, RED, "^3%s^1 You already created a^4 Red^1 flag!", gPluginTag );
				
				return PLUGIN_HANDLED;
			}
	
			new Float:flOrigin[ 3 ], Float:flAngles[ 3 ];

			pev( id, pev_origin, flOrigin );
			pev( id, pev_angles, flAngles );

			ColorChat( id, RED, "^3%s^4 Red^1 flag successfuly created!", gPluginTag );
			UTIL_CreateBase( gBaseModel, flOrigin, RED_FLAG, flAngles );

			bCountFlags[ RED_FLAG ]++;

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 2:
		{
			if( bCountFlags[ BLUE_FLAG ] >= 1 )
			{
				ColorChat( id, RED, "^3%s^1 You already created a^4 Blue^1 flag!", gPluginTag );
				
				return PLUGIN_HANDLED;
			}

			new Float:flOrigin[ 3 ], Float:flAngles[ 3 ];

			pev( id, pev_origin, flOrigin );
			pev( id, pev_angles, flAngles );

			ColorChat( id, RED, "^3%s^4 Blue^1 flag successfuly created!", gPluginTag );
			UTIL_CreateBase( gBaseModel, flOrigin, BLUE_FLAG, flAngles );
			
			bCountFlags[ BLUE_FLAG ]++;

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 3:
		{
			UTIL_RemoveBase( RED_FLAG );
			ColorChat( id, RED, "^3%s^4 Red^1 flag successfuly deleted!", gPluginTag );

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 4:
		{
			UTIL_RemoveBase( BLUE_FLAG );
			ColorChat( id, RED, "^3%s^4 Blue^1 flag successfuly deleted!", gPluginTag );

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 5:
		{
			new szConfigsDir[ 64 ], szFile[ 64 ];
			get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
			
			new szMap[ 40 ];
			get_mapname( szMap, charsmax( szMap ) );
		
			formatex( szFile, charsmax( szFile ), "%s/%s_bases.ctf", szConfigsDir, szMap );
			
			if( file_exists( szFile ) )
			{
				delete_file( szFile );
			}
			
			new iEnt = FM_NULLENT;
			new szBuffer[ 256 ], iBaseTeam;
			
			new Float:flRedBaseOrigin[ 3 ], flRedBaseAngles[ 3 ];
			new Float:flBlueBaseOrigin[ 3 ], flBlueBaseAngles[ 3 ];
			
			while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, "classname", gBaseClassname ) ) )
			{
				iBaseTeam = pev( iEnt, pev_iuser2 );
				
				switch( iBaseTeam )
				{
					case RED_FLAG:
					{
						pev( iEnt, pev_origin, flRedBaseOrigin );
						pev( iEnt, pev_angles, flRedBaseAngles );
					}
					
					case BLUE_FLAG:
					{
						pev( iEnt, pev_origin, flBlueBaseOrigin );
						pev( iEnt, pev_angles, flBlueBaseAngles );
					}
				}
			}
			
			formatex( szBuffer, charsmax( szBuffer ), "%f %f %f %f %f %f | %f %f %f %f %f %f", flRedBaseOrigin[ 0 ], flRedBaseOrigin[ 1 ], flRedBaseOrigin[ 2 ], flRedBaseAngles[ 0 ], flRedBaseAngles[ 1 ], flRedBaseAngles[ 2 ], flBlueBaseOrigin[ 0 ], flBlueBaseOrigin[ 1 ], flBlueBaseOrigin[ 2 ], flBlueBaseAngles[ 0 ], flBlueBaseAngles[ 1 ], flBlueBaseAngles[ 2 ] );
			write_file( szFile, szBuffer, -1 );
			
			ColorChat( id, RED, "^3%s^1 All flags are successfuly saved!", gPluginTag );
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

public forward_TouchedFlag( iFlag, iPlayer )
{
	if( pev_valid( iFlag ) )
	{
		new iBaseTeam = pev( iFlag, pev_iuser2 );
		
		new szName[ 40 ];
		get_user_name( iPlayer, szName, charsmax( szName ) );

		if( iBaseTeam == RED_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_CT )
		{
			engfunc( EngFunc_RemoveEntity, iFlag );
			UTIL_CreateBackFlag( iPlayer,  gBackFlagModels[ RED_FLAG ], { 255, 10, 10 } );
			
			bGotEnemyFlag[ iPlayer ] = 1;
			bRedFlagInBase = false;
			
			set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "You got the enemy flag!" );

			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_FLAG_TAKEN ] );
		}

		if( iBaseTeam == BLUE_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_T )
		{
			engfunc( EngFunc_RemoveEntity, iFlag );
			UTIL_CreateBackFlag( iPlayer,  gBackFlagModels[ BLUE_FLAG ], { 10, 10, 255 } );
			
			bGotEnemyFlag[ iPlayer ] = 1;
			bBlueFlagInBase = false;

			set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "You got the enemy flag!" );

			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_FLAG_TAKEN ] );
		}

		if( bGotEnemyFlag[ iPlayer ] == 1
		&& iBaseTeam == BLUE_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_CT
		&& bBlueFlagInBase == true )
		{
			bGotEnemyFlag[ iPlayer ] = 0;
			gBlueScore++;

			set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "Nice!^nYou captured the enemy flag!" );

			ColorChat( 0, RED, "^3%s^4 %s^1 captured the^4 T^1 flag!", gPluginTag, szName );
			UTIL_RemoveBackFlag( iPlayer );
			
			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_TEAM_SCORES ] );
			UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flRedBaseOrigins, RED_FLAG );
		}
		
		if( bGotEnemyFlag[ iPlayer ] == 1
		&& iBaseTeam == RED_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_T  
		&& bRedFlagInBase == true )
		{
			bGotEnemyFlag[ iPlayer ] = 0;
			gRedScore++;

			set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "Nice!^nYou captured the enemy flag!" );
			
			ColorChat( 0, RED, "^3%s^4 %s^1 captured the^4 CT^1 flag!", gPluginTag, szName );
			UTIL_RemoveBackFlag( iPlayer );
			
			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_TEAM_SCORES ] );
			UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flBlueBaseOrigins, BLUE_FLAG );
		}
	}		
}

public forward_BaseThink( iEnt )
{
	if( pev_valid( iEnt ) )
	{
		set_pev( iEnt, pev_nextthink, get_gametime( ) + 1.0 );
		
		set_pev( iEnt, pev_sequence, 0 );
		set_pev( iEnt, pev_framerate, 1.0 );
		
		new id;
		new iBaseTeam = pev( iEnt, pev_iuser2 );

		for( id = 1; id <= gMaxPlayers; id++ )
		{
			if( IS_PLAYER( id ) 
			&& is_user_connected( id ) )
			{
				if( is_user_alive( id ) 
				&& ( cs_get_user_team( id ) == CS_TEAM_T && iBaseTeam == BLUE_FLAG && bBlueFlagInBase == true )
				|| ( cs_get_user_team( id ) == CS_TEAM_CT && iBaseTeam == RED_FLAG && bRedFlagInBase == true ) )
				{
					new Float:flOrigin[ 3 ], Float:flBaseOrigin[ 3 ], iOrigin[ 3 ];

					pev( id, pev_origin, flOrigin );
					pev( iEnt, pev_origin, flBaseOrigin );

					FVecIVec( flBaseOrigin, iOrigin );
						
					if( get_distance_f( flBaseOrigin, flOrigin ) <= float( get_pcvar_num( gCvarEnemyBaseRadiusDmg ) ) )
					{
						if( UTIL_IsVisible( id, iEnt ) )
						{
							switch( iBaseTeam )
							{
								case RED_FLAG:
								{
									UTIL_BeamEnt( iEnt, id, { 255, 10, 10 } );
									UTIL_Fade( id, { 255, 10, 10 } );
								}
								
								case BLUE_FLAG:
								{
									UTIL_BeamEnt( iEnt, id, { 10, 10, 255 } );
									UTIL_Fade( id, { 10, 10, 255 } );
								}
							}

							ExecuteHam( Ham_TakeDamage, id, iEnt, iEnt, float( get_pcvar_num( gCvarEnemyBaseDamage ) ), DMG_PARALYZE  );
						}
					}
				}
			}
		}
	}
}
	
public forward_FlagThink( iEnt )
{
	if( pev_valid( iEnt ) )
	{
		set_pev( iEnt, pev_nextthink, get_gametime( ) + 0.001 );
		
		set_pev( iEnt, pev_sequence, 0 );
		set_pev( iEnt, pev_framerate, 0.7 );
	}
}

public plugin_end( )
{
	gBlueScore = 0;
	gRedScore = 0;
}

stock UTIL_CreateBase( const szModel[ ], Float:flOrigin[ 3 ], const iBaseType, Float:flAngles[ 3 ] )
{
	new iEntity = create_entity( "info_target" );
	
	if( !pev_valid( iEntity ) )
	{
		return PLUGIN_HANDLED;
	}
	
	set_pev( iEntity, pev_classname, gBaseClassname );
	engfunc( EngFunc_SetModel, iEntity, szModel );
	
	set_pev( iEntity, pev_origin, flOrigin );
	set_pev( iEntity, pev_solid, SOLID_NOT );
	set_pev( iEntity, pev_movetype, MOVETYPE_TOSS );
	set_pev( iEntity, pev_iuser2, iBaseType );
	set_pev( iEntity, pev_takedamage, DAMAGE_NO );
	set_pev( iEntity, pev_angles, flAngles );
	set_pev( iEntity, pev_sequence, 0 );
	set_pev( iEntity, pev_framerate, 1.0 );
	set_pev( iEntity, pev_nextthink, get_gametime( ) + 5.0 );

	engfunc( EngFunc_DropToFloor, iEntity );

	switch( pev( iEntity, pev_iuser2 ) )
	{
		case RED_FLAG:
		{
			UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flOrigin, RED_FLAG );
				
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 255, 10, 10, kRenderNormal, 25 );
			}
		}
		
		case BLUE_FLAG:
		{
			UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flOrigin, BLUE_FLAG );
			
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 10, 10, 255, kRenderNormal, 25 );
			}
		}
	}

	return PLUGIN_HANDLED;
}

stock UTIL_CreateFlag( const szModel[ ], Float:flOrigin[ 3 ], const iFlagType )
{
	new iEntity = create_entity( "info_target" );
	
	if( !pev_valid( iEntity ) )
	{
		return PLUGIN_HANDLED;
	}
	
	flOrigin[ 2 ] += 1.5;

	new Float:flAngles[ 3 ];
	pev( iEntity, pev_angles, flAngles );
	
	flAngles[ 1 ] += random_float( 1.0, 360.0 );

	set_pev( iEntity, pev_classname, gFlagClassname );
	engfunc( EngFunc_SetModel, iEntity, szModel );
	engfunc( EngFunc_SetSize, iEntity, flFlagMinSize, flFlagMaxSize );

	set_pev( iEntity, pev_origin, flOrigin );
	set_pev( iEntity, pev_solid, SOLID_BBOX );
	set_pev( iEntity, pev_movetype, MOVETYPE_FLY );
	set_pev( iEntity, pev_iuser2, iFlagType );
	set_pev( iEntity, pev_takedamage, DAMAGE_NO );
	set_pev( iEntity, pev_angles, flAngles );
	set_pev( iEntity, pev_sequence, 0 );
	set_pev( iEntity, pev_framerate, 0.7 );
	set_pev( iEntity, pev_nextthink, get_gametime( ) + 0.001 );
	
	switch( pev( iEntity, pev_iuser2 ) )
	{
		case RED_FLAG:
		{
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 255, 10, 10, kRenderNormal, 5 );
			}
			
			bRedFlagInBase = true;
		}
		
		case BLUE_FLAG:
		{
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 10, 10, 255, kRenderNormal, 5 );
			}
			
			bBlueFlagInBase = true;
		}
	}

	return PLUGIN_HANDLED;
}

stock UTIL_RemoveBase( const iBaseType ) 
{
	new iEnt = FM_NULLENT;

	while( ( iEnt = find_ent_by_class( iEnt, gBaseClassname ) ) )
	{
		new iBaseTeam = pev( iEnt, pev_iuser2 );
				
		if( iBaseTeam == iBaseType )
		{
			engfunc( EngFunc_RemoveEntity, iEnt );
					
			bCountFlags[ iBaseType ] = 0;
		}
	}
	
	while( ( iEnt = find_ent_by_class( iEnt, gFlagClassname ) ) )
	{
		new iFlagTeam = pev( iEnt, pev_iuser2 );
				
		if( iFlagTeam == iBaseType )
		{
			engfunc( EngFunc_RemoveEntity, iEnt );
		}
	}
}

stock UTIL_CreateBackFlag( id, const szModel[ ], iColor[ 3 ] )
{
	engfunc( EngFunc_RemoveEntity, bBackFlag[ id ] );
	new iEntity = bBackFlag[ id ] = create_entity( "info_target" );
	
	if( pev_valid( iEntity ) )
	{
		engfunc( EngFunc_SetModel, iEntity, szModel );

		set_pev( iEntity, pev_movetype, MOVETYPE_FOLLOW );
		set_pev( iEntity, pev_aiment, id );
		
		set_rendering( iEntity, kRenderFxGlowShell, iColor[ 0 ], iColor[ 1 ], iColor[ 2 ], kRenderNormal, 5 );
	}
}

stock UTIL_RemoveBackFlag( id )
{
	if( bBackFlag[ id ] > 0 )
	{
		engfunc( EngFunc_RemoveEntity, bBackFlag[ id ] );
	}

	bBackFlag[ id ] = 0;
}

stock bool:UTIL_IsVisible( index, entity, ignoremonsters = 0 )
{
	new Float:flStart[ 3 ], Float:flDest[ 3 ];
	pev( index, pev_origin, flStart );
	pev( index, pev_view_ofs, flDest );

	xs_vec_add( flStart, flDest, flStart );
    
	pev( entity, pev_origin, flDest );
	engfunc( EngFunc_TraceLine, flStart, flDest, ignoremonsters, index, 0 );
    
	new Float:flFraction;
	get_tr2( 0, TR_flFraction, flFraction );
	
	if( flFraction == 1.0 || get_tr2( 0, TR_pHit ) == entity )
	{
		return true;
	}
    
	return false;
}

stock UTIL_BeamEnt( iStart, iEnd, iColor[ 3 ] )
{
	message_begin( MSG_PVS, SVC_TEMPENTITY );
	write_byte( TE_BEAMENTS );
	write_short( iStart );
	write_short( iEnd  );
	write_short( gSpriteLight );
	write_byte( 2 );
	write_byte( 8 );
	write_byte( 3 );
	write_byte( 35 );
	write_byte( 1 );
	write_byte( iColor[ 0 ] );
	write_byte( iColor[ 1 ] );
	write_byte( iColor[ 2 ] );
	write_byte( 255 );
	write_byte( 1 );
	message_end( );
}

stock UTIL_Fade( id, iColor[ 3 ] )
{
	message_begin( MSG_ONE_UNRELIABLE, gMessageScreenFade, _, id );
	write_short( 1 << 12 );
	write_short( 1 << 12 );
	write_short( 1 << 12 );
	write_byte( iColor[ 0 ] );
	write_byte( iColor[ 1 ] );
	write_byte( iColor[ 2 ] );
	write_byte( 130 );
	message_end( );
}
barbergaming is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 04-03-2020 , 13:55   Re: Can Someone Add +XP To This Ctf
Reply With Quote #2

Code:
#include < amxmodx >
#include < amxmisc >

#include < fakemeta >
#include < engine >
#include < hamsandwich >
#include < fun >
#include < cstrike >

#include < colorchat >
#include < xs >
#include < crxranks >


#define PLUGIN_VERSION		"1.0.3"

#define MAX_PLAYERS		32 + 1
#define IS_PLAYER(%1)		( 1 <= %1 <= gMaxPlayers )
#define HUD_MAX_LIFE		0.8
#define FLAG_MENU_ACCESS	ADMIN_IMMUNITY

enum _: iFlags
{
	RED_FLAG,
	BLUE_FLAG
};

enum _: iEvents
{
	RED_FLAG_DROPPED,
	RED_FLAG_TAKEN,
	RED_TEAM_SCORES,
	BLUE_FLAG_DROPPED,
	BLUE_FLAG_TAKEN,
	BLUE_TEAM_SCORES
};

new const gPluginTag[ ] = "[Fantasy CTF]";

new const gBaseClassname[ ] = "FlagBase_Entity";
new const gFlagClassname[ ] = "FlagFlag_Entity";

new const gFlagModels[ iFlags ][  ] =
{
	"models/fantasyctf/red_flag.mdl",
	"models/fantasyctf/blue_flag.mdl"
};

new const gBackFlagModels[ iFlags ][ ] =
{
	"models/fantasyctf/back_redflag.mdl",
	"models/fantasyctf/back_blueflag.mdl"
};

new const gFlagEventSounds[ iEvents ][ ] =
{
	"fantasyctf/red_flag_dropped.mp3",
	"fantasyctf/red_flag_taken.mp3",
	"fantasyctf/red_team_scores.mp3",
	"fantasyctf/blue_flag_dropped.mp3",
	"fantasyctf/blue_flag_taken.mp3",
	"fantasyctf/blue_team_scores.mp3"
};

new const gBaseModel[ ] = "models/kingpin.mdl";

new Float:flFlagMinSize[ 3 ] = { -15.0, -8.0, -15.0 };
new Float:flFlagMaxSize[ 3 ] = { 15.0, 8.0, 15.0 };

new i;
new gMaxPlayers;
new gHudSyncScore;
new gHudSyncFlagEvent;
new gMessageScreenFade;
new gSpriteLight;

new gBlueScore = 0;
new gRedScore = 0;

new bool:bRedFlagInBase = true;
new bool:bBlueFlagInBase = true;

new bCountFlags[ iFlags ];

new bGotEnemyFlag[ MAX_PLAYERS ];
new bBackFlag[ MAX_PLAYERS ];

new Float:flLastHud[ MAX_PLAYERS ];

new Float:flRedBaseOrigins[ 3 ];
new Float:flBlueBaseOrigins[ 3 ];

new gCvarEnableGlow;
new gCvarEnemyBaseDamage;
new gCvarEnemyBaseRadiusDmg;

public plugin_init( )
{
	register_plugin( "Fantasy Capture The Flag", PLUGIN_VERSION, "tuty" );
	
	register_event( "DeathMsg", "Hook_DeathMessage", "a" );
	RegisterHam( Ham_Player_PreThink, "player", "bacon_PreThink" );

	register_touch( gFlagClassname, "player", "forward_TouchedFlag" );

	register_think( gBaseClassname, "forward_BaseThink" );
	register_think( gFlagClassname, "forward_FlagThink" );
	
	register_clcmd( "say /flagmenu", "CommandFlagMenu" );
	register_clcmd( "say_team /flagmenu", "CommandFlagMenu" );
	
	gCvarEnableGlow = register_cvar( "fctf_glow", "1" );
	gCvarEnemyBaseDamage = register_cvar( "fctf_base_dmg", "2" );
	gCvarEnemyBaseRadiusDmg = register_cvar( "fctf_base_radiusdmg", "200" );
	
	gMaxPlayers = get_maxplayers( );
	gHudSyncScore = CreateHudSyncObj( );
	gHudSyncFlagEvent = CreateHudSyncObj( );

	gMessageScreenFade = get_user_msgid( "ScreenFade" );
}

public plugin_precache( )
{
	gSpriteLight = precache_model( "sprites/lgtning.spr" );

	for( i = 0; i < iFlags; i++ )
	{
		precache_model( gFlagModels[ i ] );
	}
	
	for( i = 0; i < iFlags; i++ )
	{
		precache_model( gBackFlagModels[ i ] );
	}
	
	for( i = 0; i < iEvents; i++ )
	{
		precache_sound( gFlagEventSounds[ i ] );
	}

	precache_model( gBaseModel );
}

public plugin_cfg( )
{
	new szConfigsDir[ 64 ], szFile[ 64 ];
	get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
	
	new szMap[ 40 ];
	get_mapname( szMap, charsmax( szMap ) );
	
	formatex( szFile, charsmax( szFile ), "%s/%s_bases.ctf", szConfigsDir, szMap );
	
	if( !file_exists( szFile ) )
	{
		return 1;
	}
	
	new szBuffer[ 128 ], szTemp1[ 128 ], szTemp2[ 128 ];

	new szFileOrigin1[ 3 ][ 32 ], szFileAngles1[ 3 ][ 32 ];
	new szFileOrigin2[ 3 ][ 32 ], szFileAngles2[ 3 ][ 32 ];

	new Float:flOriginRed[ 3 ], Float:flOriginBlue[ 3 ];
	new Float:flAnglesRed[ 3 ], Float:flAnglesBlue[ 3 ];

	new iFile = fopen( szFile, "rt" );
	
	while( !feof( iFile ) )
	{
		fgets( iFile, szBuffer, charsmax( szBuffer ) );
		strtok( szBuffer, szTemp1, charsmax( szTemp1 ), szTemp2, charsmax( szTemp2 ), '|', 0 );
		
		parse( szTemp1, szFileOrigin1[ 0 ], sizeof szFileOrigin1[ ] - 1, szFileOrigin1[ 1 ], sizeof szFileOrigin1[ ] - 1, szFileOrigin1[ 2 ], sizeof szFileOrigin1[ ] - 1, szFileAngles1[ 0 ], sizeof szFileAngles1[ ] - 1, szFileAngles1[ 1 ], sizeof szFileAngles1[ ] - 1, szFileAngles1[ 2 ], sizeof szFileAngles1[ ] - 1 );
		
		flRedBaseOrigins[ 0 ] = flOriginRed[ 0 ] = str_to_float( szFileOrigin1[ 0 ] );
		flRedBaseOrigins[ 1 ] = flOriginRed[ 1 ] = str_to_float( szFileOrigin1[ 1 ] );
		flRedBaseOrigins[ 2 ] = flOriginRed[ 2 ] = str_to_float( szFileOrigin1[ 2 ] );
			
		flAnglesRed[ 0 ] = str_to_float( szFileAngles1[ 0 ] );
		flAnglesRed[ 1 ] = str_to_float( szFileAngles1[ 1 ] );
		flAnglesRed[ 2 ] = str_to_float( szFileAngles1[ 2 ] );
		
		parse( szTemp2, szFileOrigin2[ 0 ], sizeof szFileOrigin2[ ] - 1, szFileOrigin2[ 1 ], sizeof szFileOrigin2[ ] - 1, szFileOrigin2[ 2 ], sizeof szFileOrigin2[ ] - 1, szFileAngles2[ 0 ], sizeof szFileAngles2[ ] - 1, szFileAngles2[ 1 ], sizeof szFileAngles2[ ] - 1, szFileAngles2[ 2 ], sizeof szFileAngles2[ ] - 1 );
		
		flBlueBaseOrigins[ 0 ] = flOriginBlue[ 0 ] = str_to_float( szFileOrigin2[ 0 ] );
		flBlueBaseOrigins[ 1 ] = flOriginBlue[ 1 ] = str_to_float( szFileOrigin2[ 1 ] );
		flBlueBaseOrigins[ 2 ] = flOriginBlue[ 2 ] = str_to_float( szFileOrigin2[ 2 ] );
			
		flAnglesBlue[ 0 ] = str_to_float( szFileAngles2[ 0 ] );
		flAnglesBlue[ 1 ] = str_to_float( szFileAngles2[ 1 ] );
		flAnglesBlue[ 2 ] = str_to_float( szFileAngles2[ 2 ] );
	}
	
	UTIL_CreateBase( gBaseModel, flOriginRed, RED_FLAG, flAnglesRed );
	UTIL_CreateBase( gBaseModel, flOriginBlue, BLUE_FLAG, flAnglesBlue );
		
	fclose( iFile );

	return 1;
}
		
public client_connect( id )
{
	bGotEnemyFlag[ id ] = 0;
}

public client_disconnect( id )
{
	bGotEnemyFlag[ id ] = 0;

	UTIL_RemoveBackFlag( id );
}

public bacon_PreThink( id )
{
	if( is_user_alive( id ) )
	{
		new Float:flGameTime = get_gametime( );
		
		if( flGameTime - flLastHud[ id ] > HUD_MAX_LIFE )
		{
			set_hudmessage( 212, 42, 255, -1.0, 0.02, 1, 6.0, HUD_MAX_LIFE );
			ShowSyncHudMsg( id, gHudSyncScore, "Scoreboard:^nRed: %d | Blue: %d", gRedScore, gBlueScore );
			
			flLastHud[ id ] = flGameTime;
		}
	}
}

public Hook_DeathMessage( )
{
	new iVictim = read_data( 2 );
	
	if( IS_PLAYER( iVictim ) 
	&& bGotEnemyFlag[ iVictim ] == 1 )
	{
		new Float:flOrigin[ 3 ];
		pev( iVictim, pev_origin, flOrigin );
		
		flOrigin[ 2 ] -= 36.0;
		
		bGotEnemyFlag[ iVictim ] = 0;
		UTIL_RemoveBackFlag( iVictim );

		switch( cs_get_user_team( iVictim ) )
		{
			case CS_TEAM_T:
			{
				set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
				ShowSyncHudMsg( iVictim, gHudSyncFlagEvent, "You lost the enemy flag!" );
						
				client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_FLAG_DROPPED ] );
				UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flOrigin, BLUE_FLAG );

				bBlueFlagInBase = false;
			}
			
			case CS_TEAM_CT:
			{
				set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
				ShowSyncHudMsg( iVictim, gHudSyncFlagEvent, "You lost the enemy flag!" );

				client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_FLAG_DROPPED ] );
				UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flOrigin, RED_FLAG );

				bRedFlagInBase = false;
			}
		}
	}
	
	return;
}

public CommandFlagMenu( id )
{
	if( !( get_user_flags( id ) & FLAG_MENU_ACCESS ) )
	{
		ColorChat( id, RED, "^3%s^1 You don't have acces to this menu!", gPluginTag );
		
		return PLUGIN_HANDLED;
	}

	if( !is_user_alive( id ) )
	{
		ColorChat( id, RED, "^3%s^1 You can't create ^4Flags^1 while dead!", gPluginTag );
		
		return PLUGIN_HANDLED;
	}
	
	new iMenu = menu_create( "\wCreate \rFlag\w:", "menu_FlagHandler");
	
	menu_additem( iMenu, "\wCreate \yRed Flag", "1", 0 );
	menu_additem( iMenu, "\wCreate \yBlue Flag", "2", 0 );
	menu_additem( iMenu, "\wDelete \yRed Flag", "3", 0 );
	menu_additem( iMenu, "\wDelete \yBlue Flag", "4", 0 );
	menu_additem( iMenu, "\wSave flag origins", "5", 0 );
	
	menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL );
	
	menu_display( id, iMenu, 0 );
	
	return PLUGIN_HANDLED;
}

public menu_FlagHandler( id, menu, item )
{
	if( item == MENU_EXIT )
	{
		menu_destroy( menu );

		return PLUGIN_HANDLED;
	}

	new szData[ 6 ], szName[ 64 ], access, callback;
	menu_item_getinfo( menu, item, access, szData, charsmax( szData ), szName, charsmax( szName ), callback );

	new iKey = str_to_num( szData );

	switch( iKey )
	{
		case 1:
		{
			if( bCountFlags[ RED_FLAG ] >= 1 )
			{
				ColorChat( id, RED, "^3%s^1 You already created a^4 Red^1 flag!", gPluginTag );
				
				return PLUGIN_HANDLED;
			}
	
			new Float:flOrigin[ 3 ], Float:flAngles[ 3 ];

			pev( id, pev_origin, flOrigin );
			pev( id, pev_angles, flAngles );

			ColorChat( id, RED, "^3%s^4 Red^1 flag successfuly created!", gPluginTag );
			UTIL_CreateBase( gBaseModel, flOrigin, RED_FLAG, flAngles );

			bCountFlags[ RED_FLAG ]++;

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 2:
		{
			if( bCountFlags[ BLUE_FLAG ] >= 1 )
			{
				ColorChat( id, RED, "^3%s^1 You already created a^4 Blue^1 flag!", gPluginTag );
				
				return PLUGIN_HANDLED;
			}

			new Float:flOrigin[ 3 ], Float:flAngles[ 3 ];

			pev( id, pev_origin, flOrigin );
			pev( id, pev_angles, flAngles );

			ColorChat( id, RED, "^3%s^4 Blue^1 flag successfuly created!", gPluginTag );
			UTIL_CreateBase( gBaseModel, flOrigin, BLUE_FLAG, flAngles );
			
			bCountFlags[ BLUE_FLAG ]++;

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 3:
		{
			UTIL_RemoveBase( RED_FLAG );
			ColorChat( id, RED, "^3%s^4 Red^1 flag successfuly deleted!", gPluginTag );

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 4:
		{
			UTIL_RemoveBase( BLUE_FLAG );
			ColorChat( id, RED, "^3%s^4 Blue^1 flag successfuly deleted!", gPluginTag );

			menu_destroy( menu );
			return PLUGIN_HANDLED;
		}
		
		case 5:
		{
			new szConfigsDir[ 64 ], szFile[ 64 ];
			get_configsdir( szConfigsDir, charsmax( szConfigsDir ) );
			
			new szMap[ 40 ];
			get_mapname( szMap, charsmax( szMap ) );
		
			formatex( szFile, charsmax( szFile ), "%s/%s_bases.ctf", szConfigsDir, szMap );
			
			if( file_exists( szFile ) )
			{
				delete_file( szFile );
			}
			
			new iEnt = FM_NULLENT;
			new szBuffer[ 256 ], iBaseTeam;
			
			new Float:flRedBaseOrigin[ 3 ], flRedBaseAngles[ 3 ];
			new Float:flBlueBaseOrigin[ 3 ], flBlueBaseAngles[ 3 ];
			
			while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, "classname", gBaseClassname ) ) )
			{
				iBaseTeam = pev( iEnt, pev_iuser2 );
				
				switch( iBaseTeam )
				{
					case RED_FLAG:
					{
						pev( iEnt, pev_origin, flRedBaseOrigin );
						pev( iEnt, pev_angles, flRedBaseAngles );
					}
					
					case BLUE_FLAG:
					{
						pev( iEnt, pev_origin, flBlueBaseOrigin );
						pev( iEnt, pev_angles, flBlueBaseAngles );
					}
				}
			}
			
			formatex( szBuffer, charsmax( szBuffer ), "%f %f %f %f %f %f | %f %f %f %f %f %f", flRedBaseOrigin[ 0 ], flRedBaseOrigin[ 1 ], flRedBaseOrigin[ 2 ], flRedBaseAngles[ 0 ], flRedBaseAngles[ 1 ], flRedBaseAngles[ 2 ], flBlueBaseOrigin[ 0 ], flBlueBaseOrigin[ 1 ], flBlueBaseOrigin[ 2 ], flBlueBaseAngles[ 0 ], flBlueBaseAngles[ 1 ], flBlueBaseAngles[ 2 ] );
			write_file( szFile, szBuffer, -1 );
			
			ColorChat( id, RED, "^3%s^1 All flags are successfuly saved!", gPluginTag );
		}
	}
	
	menu_destroy( menu );
	return PLUGIN_HANDLED;
}

public forward_TouchedFlag( iFlag, iPlayer )
{
	if( pev_valid( iFlag ) )
	{
		new iBaseTeam = pev( iFlag, pev_iuser2 );
		
		new szName[ 40 ];
		get_user_name( iPlayer, szName, charsmax( szName ) );

		if( iBaseTeam == RED_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_CT )
		{
			engfunc( EngFunc_RemoveEntity, iFlag );
			UTIL_CreateBackFlag( iPlayer,  gBackFlagModels[ RED_FLAG ], { 255, 10, 10 } );
			
			bGotEnemyFlag[ iPlayer ] = 1;
			bRedFlagInBase = false;
			
			set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "You got the enemy flag!" );

			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_FLAG_TAKEN ] );
		}

		if( iBaseTeam == BLUE_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_T )
		{
			engfunc( EngFunc_RemoveEntity, iFlag );
			UTIL_CreateBackFlag( iPlayer,  gBackFlagModels[ BLUE_FLAG ], { 10, 10, 255 } );
			
			bGotEnemyFlag[ iPlayer ] = 1;
			bBlueFlagInBase = false;

			set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "You got the enemy flag!" );

			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_FLAG_TAKEN ] );
		}

		if( bGotEnemyFlag[ iPlayer ] == 1
		&& iBaseTeam == BLUE_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_CT
		&& bBlueFlagInBase == true )
		{
			bGotEnemyFlag[ iPlayer ] = 0;
			gBlueScore++;

			crxranks_give_user_xp( iPlayer, _, "ctf_capture_flag", CRXRANKS_XPS_REWARD );

			set_hudmessage( 255, 10, 10, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "Nice!^nYou captured the enemy flag!" );

			ColorChat( 0, RED, "^3%s^4 %s^1 captured the^4 T^1 flag!", gPluginTag, szName );
			UTIL_RemoveBackFlag( iPlayer );
			
			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ BLUE_TEAM_SCORES ] );
			UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flRedBaseOrigins, RED_FLAG );
		}
		
		if( bGotEnemyFlag[ iPlayer ] == 1
		&& iBaseTeam == RED_FLAG
		&& cs_get_user_team( iPlayer ) == CS_TEAM_T  
		&& bRedFlagInBase == true )
		{
			bGotEnemyFlag[ iPlayer ] = 0;
			gRedScore++;

			crxranks_give_user_xp( iPlayer, _, "ctf_capture_flag", CRXRANKS_XPS_REWARD );

			set_hudmessage( 10, 10, 255, -1.0, 0.65, 1, 6.0, 4.0 );
			ShowSyncHudMsg( iPlayer, gHudSyncFlagEvent, "Nice!^nYou captured the enemy flag!" );
			
			ColorChat( 0, RED, "^3%s^4 %s^1 captured the^4 CT^1 flag!", gPluginTag, szName );
			UTIL_RemoveBackFlag( iPlayer );
			
			client_cmd( 0, "mp3 play ^"sound/%s^"", gFlagEventSounds[ RED_TEAM_SCORES ] );
			UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flBlueBaseOrigins, BLUE_FLAG );
		}
	}		
}

public forward_BaseThink( iEnt )
{
	if( pev_valid( iEnt ) )
	{
		set_pev( iEnt, pev_nextthink, get_gametime( ) + 1.0 );
		
		set_pev( iEnt, pev_sequence, 0 );
		set_pev( iEnt, pev_framerate, 1.0 );
		
		new id;
		new iBaseTeam = pev( iEnt, pev_iuser2 );

		for( id = 1; id <= gMaxPlayers; id++ )
		{
			if( IS_PLAYER( id ) 
			&& is_user_connected( id ) )
			{
				if( is_user_alive( id ) 
				&& ( cs_get_user_team( id ) == CS_TEAM_T && iBaseTeam == BLUE_FLAG && bBlueFlagInBase == true )
				|| ( cs_get_user_team( id ) == CS_TEAM_CT && iBaseTeam == RED_FLAG && bRedFlagInBase == true ) )
				{
					new Float:flOrigin[ 3 ], Float:flBaseOrigin[ 3 ], iOrigin[ 3 ];

					pev( id, pev_origin, flOrigin );
					pev( iEnt, pev_origin, flBaseOrigin );

					FVecIVec( flBaseOrigin, iOrigin );
						
					if( get_distance_f( flBaseOrigin, flOrigin ) <= float( get_pcvar_num( gCvarEnemyBaseRadiusDmg ) ) )
					{
						if( UTIL_IsVisible( id, iEnt ) )
						{
							switch( iBaseTeam )
							{
								case RED_FLAG:
								{
									UTIL_BeamEnt( iEnt, id, { 255, 10, 10 } );
									UTIL_Fade( id, { 255, 10, 10 } );
								}
								
								case BLUE_FLAG:
								{
									UTIL_BeamEnt( iEnt, id, { 10, 10, 255 } );
									UTIL_Fade( id, { 10, 10, 255 } );
								}
							}

							ExecuteHam( Ham_TakeDamage, id, iEnt, iEnt, float( get_pcvar_num( gCvarEnemyBaseDamage ) ), DMG_PARALYZE  );
						}
					}
				}
			}
		}
	}
}
	
public forward_FlagThink( iEnt )
{
	if( pev_valid( iEnt ) )
	{
		set_pev( iEnt, pev_nextthink, get_gametime( ) + 0.001 );
		
		set_pev( iEnt, pev_sequence, 0 );
		set_pev( iEnt, pev_framerate, 0.7 );
	}
}

public plugin_end( )
{
	gBlueScore = 0;
	gRedScore = 0;
}

stock UTIL_CreateBase( const szModel[ ], Float:flOrigin[ 3 ], const iBaseType, Float:flAngles[ 3 ] )
{
	new iEntity = create_entity( "info_target" );
	
	if( !pev_valid( iEntity ) )
	{
		return PLUGIN_HANDLED;
	}
	
	set_pev( iEntity, pev_classname, gBaseClassname );
	engfunc( EngFunc_SetModel, iEntity, szModel );
	
	set_pev( iEntity, pev_origin, flOrigin );
	set_pev( iEntity, pev_solid, SOLID_NOT );
	set_pev( iEntity, pev_movetype, MOVETYPE_TOSS );
	set_pev( iEntity, pev_iuser2, iBaseType );
	set_pev( iEntity, pev_takedamage, DAMAGE_NO );
	set_pev( iEntity, pev_angles, flAngles );
	set_pev( iEntity, pev_sequence, 0 );
	set_pev( iEntity, pev_framerate, 1.0 );
	set_pev( iEntity, pev_nextthink, get_gametime( ) + 5.0 );

	engfunc( EngFunc_DropToFloor, iEntity );

	switch( pev( iEntity, pev_iuser2 ) )
	{
		case RED_FLAG:
		{
			UTIL_CreateFlag( gFlagModels[ RED_FLAG ], flOrigin, RED_FLAG );
				
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 255, 10, 10, kRenderNormal, 25 );
			}
		}
		
		case BLUE_FLAG:
		{
			UTIL_CreateFlag( gFlagModels[ BLUE_FLAG ], flOrigin, BLUE_FLAG );
			
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 10, 10, 255, kRenderNormal, 25 );
			}
		}
	}

	return PLUGIN_HANDLED;
}

stock UTIL_CreateFlag( const szModel[ ], Float:flOrigin[ 3 ], const iFlagType )
{
	new iEntity = create_entity( "info_target" );
	
	if( !pev_valid( iEntity ) )
	{
		return PLUGIN_HANDLED;
	}
	
	flOrigin[ 2 ] += 1.5;

	new Float:flAngles[ 3 ];
	pev( iEntity, pev_angles, flAngles );
	
	flAngles[ 1 ] += random_float( 1.0, 360.0 );

	set_pev( iEntity, pev_classname, gFlagClassname );
	engfunc( EngFunc_SetModel, iEntity, szModel );
	engfunc( EngFunc_SetSize, iEntity, flFlagMinSize, flFlagMaxSize );

	set_pev( iEntity, pev_origin, flOrigin );
	set_pev( iEntity, pev_solid, SOLID_BBOX );
	set_pev( iEntity, pev_movetype, MOVETYPE_FLY );
	set_pev( iEntity, pev_iuser2, iFlagType );
	set_pev( iEntity, pev_takedamage, DAMAGE_NO );
	set_pev( iEntity, pev_angles, flAngles );
	set_pev( iEntity, pev_sequence, 0 );
	set_pev( iEntity, pev_framerate, 0.7 );
	set_pev( iEntity, pev_nextthink, get_gametime( ) + 0.001 );
	
	switch( pev( iEntity, pev_iuser2 ) )
	{
		case RED_FLAG:
		{
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 255, 10, 10, kRenderNormal, 5 );
			}
			
			bRedFlagInBase = true;
		}
		
		case BLUE_FLAG:
		{
			if( get_pcvar_num( gCvarEnableGlow ) == 1 )
			{
				set_rendering( iEntity, kRenderFxGlowShell, 10, 10, 255, kRenderNormal, 5 );
			}
			
			bBlueFlagInBase = true;
		}
	}

	return PLUGIN_HANDLED;
}

stock UTIL_RemoveBase( const iBaseType ) 
{
	new iEnt = FM_NULLENT;

	while( ( iEnt = find_ent_by_class( iEnt, gBaseClassname ) ) )
	{
		new iBaseTeam = pev( iEnt, pev_iuser2 );
				
		if( iBaseTeam == iBaseType )
		{
			engfunc( EngFunc_RemoveEntity, iEnt );
					
			bCountFlags[ iBaseType ] = 0;
		}
	}
	
	while( ( iEnt = find_ent_by_class( iEnt, gFlagClassname ) ) )
	{
		new iFlagTeam = pev( iEnt, pev_iuser2 );
				
		if( iFlagTeam == iBaseType )
		{
			engfunc( EngFunc_RemoveEntity, iEnt );
		}
	}
}

stock UTIL_CreateBackFlag( id, const szModel[ ], iColor[ 3 ] )
{
	engfunc( EngFunc_RemoveEntity, bBackFlag[ id ] );
	new iEntity = bBackFlag[ id ] = create_entity( "info_target" );
	
	if( pev_valid( iEntity ) )
	{
		engfunc( EngFunc_SetModel, iEntity, szModel );

		set_pev( iEntity, pev_movetype, MOVETYPE_FOLLOW );
		set_pev( iEntity, pev_aiment, id );
		
		set_rendering( iEntity, kRenderFxGlowShell, iColor[ 0 ], iColor[ 1 ], iColor[ 2 ], kRenderNormal, 5 );
	}
}

stock UTIL_RemoveBackFlag( id )
{
	if( bBackFlag[ id ] > 0 )
	{
		engfunc( EngFunc_RemoveEntity, bBackFlag[ id ] );
	}

	bBackFlag[ id ] = 0;
}

stock bool:UTIL_IsVisible( index, entity, ignoremonsters = 0 )
{
	new Float:flStart[ 3 ], Float:flDest[ 3 ];
	pev( index, pev_origin, flStart );
	pev( index, pev_view_ofs, flDest );

	xs_vec_add( flStart, flDest, flStart );
    
	pev( entity, pev_origin, flDest );
	engfunc( EngFunc_TraceLine, flStart, flDest, ignoremonsters, index, 0 );
    
	new Float:flFraction;
	get_tr2( 0, TR_flFraction, flFraction );
	
	if( flFraction == 1.0 || get_tr2( 0, TR_pHit ) == entity )
	{
		return true;
	}
    
	return false;
}

stock UTIL_BeamEnt( iStart, iEnd, iColor[ 3 ] )
{
	message_begin( MSG_PVS, SVC_TEMPENTITY );
	write_byte( TE_BEAMENTS );
	write_short( iStart );
	write_short( iEnd  );
	write_short( gSpriteLight );
	write_byte( 2 );
	write_byte( 8 );
	write_byte( 3 );
	write_byte( 35 );
	write_byte( 1 );
	write_byte( iColor[ 0 ] );
	write_byte( iColor[ 1 ] );
	write_byte( iColor[ 2 ] );
	write_byte( 255 );
	write_byte( 1 );
	message_end( );
}

stock UTIL_Fade( id, iColor[ 3 ] )
{
	message_begin( MSG_ONE_UNRELIABLE, gMessageScreenFade, _, id );
	write_short( 1 << 12 );
	write_short( 1 << 12 );
	write_short( 1 << 12 );
	write_byte( iColor[ 0 ] );
	write_byte( iColor[ 1 ] );
	write_byte( iColor[ 2 ] );
	write_byte( 130 );
	message_end( );
}
Add in RankSystem.ini -> XP Rewards:

Code:
ctf_capture_flag = 10
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
barbergaming
Member
Join Date: Dec 2019
Location: Search For Me
Old 04-03-2020 , 13:56   Re: Can Someone Add +XP To This Ctf
Reply With Quote #3

thnx dude verry fast service xd <3
barbergaming 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 21:31.


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