The Place to Start


Experience Tutorial 
Karl Purkhardt
Intermediate


Experience Tutorial
Half-Life Code is in YELLOW
My Code is in RED

Player.h
add the folowing:-

typedef enum
{
	PLAYER_IDLE,
	PLAYER_WALK,
	PLAYER_JUMP,
	PLAYER_SUPERJUMP,
	PLAYER_DIE,
	PLAYER_ATTACK1,
} PLAYER_ANIM;

//Experience Level
typedef enum 
{
EXP_LEVEL_1,
EXP_LEVEL_2,
EXP_LEVEL_3,
EXP_LEVEL_4,
EXP_LEVEL_5,

} explevel_t;
//Experience Level 

void SetCustomDecalFrames( int nFrames );
int GetCustomDecalFrames( void );

//Experience Level
int	exp_level;
//Experience Level

};

#define AUTOAIM_2DEGREES  0.0348994967025
#define AUTOAIM_5DEGREES  0.08715574274766
#define AUTOAIM_8DEGREES  0.1391731009601
#define AUTOAIM_10DEGREES 0.1736481776669


Multiplay_Gamerules.cpp
In PlayerSpawn()
Add this:

while ( pWeaponEntity = UTIL_FindEntityByClassname( pWeaponEntity, "game_player_equip" ))
	{
		pWeaponEntity->Touch( pPlayer );
		addDefault = FALSE;
	}

//Experience  Level 
	if (pPlayer->exp_level == EXP_LEVEL_1)
{
	/*-----Set the player speed. And increase
	it by 10 as there experience improves-----*/
	g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 290);
	/*-----Give the player some weapons and full ammo.-----*/
	pPlayer->GiveNamedItem( "weapon_crowbar" );
	pPlayer->GiveNamedItem( "weapon_9mmhandgun" );
	pPlayer->GiveAmmo( _9MM_MAX_CARRY, "9mm", _9MM_MAX_CARRY );
	/*-----Give the player some armor-----*/
	pPlayer->GiveNamedItem( "item_battery" );
	/*-----Tell the player what experience level they are at.-----*/
	ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 1");
	/*-----Dont give the player the default weapons. 
	Give them certains weapons from experience,-----*/
	addDefault = FALSE;
}		
	else if (pPlayer->exp_level == EXP_LEVEL_2)
{
	g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 300);
	pPlayer->GiveNamedItem( "weapon_shotgun" );
	pPlayer->GiveAmmo( BUCKSHOT_MAX_CARRY, "buckshot", BUCKSHOT_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_357" );
	pPlayer->GiveAmmo( _357_MAX_CARRY, "357", _357_MAX_CARRY );
	pPlayer->GiveNamedItem( "item_battery" );
	ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 2");
	addDefault = FALSE;
}
	else if (pPlayer->exp_level == EXP_LEVEL_3)
{
	g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 310);
	pPlayer->GiveNamedItem( "weapon_9mmAR" );
	pPlayer->GiveAmmo( _9MM_MAX_CARRY, "9mm", _9MM_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_snark" );
	pPlayer->GiveAmmo( SNARK_MAX_CARRY, "snark", SNARK_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_handgrenade" );
	pPlayer->GiveAmmo( HANDGRENADE_MAX_CARRY, "handgrenade", HANDGRENADE_MAX_CARRY );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 3");
	addDefault = FALSE;
}
	else if (pPlayer->exp_level == EXP_LEVEL_4)
{
	g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 320);
	pPlayer->GiveNamedItem( "weapon_crossbow" );
	pPlayer->GiveAmmo( BOLT_MAX_CARRY, "bolt", BOLT_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_RPG" );
	pPlayer->GiveAmmo( ROCKET_MAX_CARRY, "rocket", ROCKET_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_tripmine" );
	pPlayer->GiveAmmo( TRIPMINE_MAX_CARRY, "tripmine", TRIPMINE_MAX_CARRY );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 4");
	addDefault = FALSE;
}
	else if (pPlayer->exp_level == EXP_LEVEL_5)
{
	g_engfuncs.pfnSetClientMaxspeed( ENT( pPlayer->pev ), 330);
	pPlayer->GiveNamedItem( "weapon_egon" );
	pPlayer->GiveAmmo( URANIUM_MAX_CARRY, "uranium",URANIUM_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_gauss" );
	pPlayer->GiveAmmo( URANIUM_MAX_CARRY, "uranium",URANIUM_MAX_CARRY );
	pPlayer->GiveNamedItem( "weapon_satchel" );
	pPlayer->GiveAmmo( SATCHEL_MAX_CARRY, "satchel", SATCHEL_MAX_CARRY );
	pPlayer->GiveAmmo( M203_GRENADE_MAX_CARRY, "ARgrenades", M203_GRENADE_MAX_CARRY );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	pPlayer->GiveNamedItem( "item_battery" );
	ClientPrint(pPlayer->pev, HUD_PRINTCENTER, "Your Experience Level Is 5");
	addDefault = FALSE;
}
//Experience Level 



Still In Multiplay_Gamerules.cpp
In PlayerKilled()
Add this:

else if ( ktmp && ktmp->IsPlayer() )
	{
// if a player dies in a deathmatch game and the killer is a client, award the killer some points
		pKiller->frags += IPointsForKill( peKiller, pVictim );

//Experience Level
	if (peKiller->exp_level == EXP_LEVEL_1)
{
	peKiller->exp_level = EXP_LEVEL_2;							
	g_engfuncs.pfnSetClientMaxspeed( ENT( peKiller->pev ), 300);
	peKiller->GiveNamedItem( "weapon_shotgun" );
	peKiller->GiveAmmo( BUCKSHOT_MAX_CARRY, "buckshot", BUCKSHOT_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_357" );
	peKiller->GiveAmmo( _357_MAX_CARRY, "357", _357_MAX_CARRY );
	peKiller->GiveNamedItem( "item_battery" );
	ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 2");
}
	else if (peKiller->exp_level == EXP_LEVEL_2)
{
	peKiller->exp_level =EXP_LEVEL_3;
	g_engfuncs.pfnSetClientMaxspeed( ENT( peKiller->pev ), 310);
	peKiller->GiveNamedItem( "weapon_9mmAR" );
	peKiller->GiveAmmo( _9MM_MAX_CARRY, "9mm", _9MM_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_snark" );
	peKiller->GiveAmmo( SNARK_MAX_CARRY, "snark", SNARK_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_handgrenade" );
	peKiller->GiveAmmo( HANDGRENADE_MAX_CARRY, "handgrenade", HANDGRENADE_MAX_CARRY );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 3");
}
	else if (peKiller->exp_level == EXP_LEVEL_3)
{
	peKiller->exp_level =	EXP_LEVEL_4;
	g_engfuncs.pfnSetClientMaxspeed( ENT( peKiller->pev ), 320);
	peKiller->GiveNamedItem( "weapon_crossbow" );
	peKiller->GiveAmmo( BOLT_MAX_CARRY, "bolt", BOLT_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_RPG" );
	peKiller->GiveAmmo( ROCKET_MAX_CARRY, "rocket", ROCKET_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_tripmine" );
	peKiller->GiveAmmo( TRIPMINE_MAX_CARRY, "tripmine", TRIPMINE_MAX_CARRY );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 4");
}
	else if (peKiller->exp_level == EXP_LEVEL_4)
{
	peKiller->exp_level =	EXP_LEVEL_5;
	g_engfuncs.pfnSetClientMaxspeed( ENT( peKiller->pev ), 330);
	peKiller->GiveNamedItem( "weapon_egon" );
	peKiller->GiveAmmo( URANIUM_MAX_CARRY, "uranium",URANIUM_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_gauss" );
	peKiller->GiveAmmo( URANIUM_MAX_CARRY, "uranium",URANIUM_MAX_CARRY );
	peKiller->GiveNamedItem( "weapon_satchel" );
	peKiller->GiveAmmo( SATCHEL_MAX_CARRY, "satchel", SATCHEL_MAX_CARRY );
	peKiller->GiveAmmo( M203_GRENADE_MAX_CARRY, "ARgrenades", M203_GRENADE_MAX_CARRY );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	peKiller->GiveNamedItem( "item_battery" );
	ClientPrint(peKiller->pev, HUD_PRINTCENTER, "Experience Level Incresed to 5");
}	
	if (pVictim->exp_level == EXP_LEVEL_2)
{
	pVictim->exp_level = EXP_LEVEL_1;
	g_engfuncs.pfnSetClientMaxspeed( ENT( pVictim->pev ), 290);
	ClientPrint(pVictim->pev, HUD_PRINTCENTER, "Experience Level Decresed to 1");
}
	else if (pVictim->exp_level == EXP_LEVEL_3)
{
	pVictim->exp_level = EXP_LEVEL_2;
	g_engfuncs.pfnSetClientMaxspeed( ENT( pVictim->pev ), 300);
	ClientPrint(pVictim->pev, HUD_PRINTCENTER, "Experience Level Decresed to 2");
}
	else if (pVictim->exp_level == EXP_LEVEL_4)
{
	pVictim->exp_level = EXP_LEVEL_3;
	g_engfuncs.pfnSetClientMaxspeed( ENT( pVictim->pev ), 310);
	ClientPrint(pVictim->pev, HUD_PRINTCENTER, "Experience Level Decresed to 3");
}
	else if (pVictim->exp_level == EXP_LEVEL_5)
{
	pVictim->exp_level = EXP_LEVEL_4;
	g_engfuncs.pfnSetClientMaxspeed( ENT( pVictim->pev ), 320);
	ClientPrint(pVictim->pev, HUD_PRINTCENTER, "Experience Level Decresed to 4");
}
//Experience Level
		
		FireTargets( "game_playerkill", ktmp, ktmp, USE_TOGGLE, 0 );
	}
	else
	{  // killed by the world
		pKiller->frags -= 1;
	}




Still In Multiplay_Gamerules.cpp
In InitHUD()
Add this:

	// sending just one score makes the hud scoreboard active;  otherwise
	// it is just disabled for single play
	MESSAGE_BEGIN( MSG_ONE, gmsgScoreInfo, NULL, pl->edict() );
		WRITE_BYTE( ENTINDEX(pl->edict()) );
		WRITE_SHORT( 0 );
		WRITE_SHORT( 0 );
	MESSAGE_END();

	SendMOTDToClient( pl->edict() );

	//Experience Level 
	pl->exp_level = EXP_LEVEL_1;
	//Experience Level 

Any questions or suggestions should be sent to me: Don1@eidosnet.co.uk