mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
1
This commit is contained in:
167
game/server/cstrike/bot/cs_bot_event_weapon.cpp
Normal file
167
game/server/cstrike/bot/cs_bot_event_weapon.cpp
Normal file
@@ -0,0 +1,167 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
// Author: Michael S. Booth (mike@turtlerockstudios.com), 2003
|
||||
|
||||
#include "cbase.h"
|
||||
#include "cs_gamerules.h"
|
||||
#include "KeyValues.h"
|
||||
|
||||
#include "cs_bot.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
void CCSBot::OnWeaponFire( IGameEvent *event )
|
||||
{
|
||||
if ( !IsAlive() )
|
||||
return;
|
||||
|
||||
// don't react to our own events
|
||||
CBasePlayer *player = UTIL_PlayerByUserId( event->GetInt( "userid" ) );
|
||||
if ( player == this )
|
||||
return;
|
||||
|
||||
// for knife fighting - if our victim is attacking or reloading, rush him
|
||||
/// @todo Propagate events into active state
|
||||
if (GetEnemy() == player && IsUsingKnife())
|
||||
{
|
||||
ForceRun( 5.0f );
|
||||
}
|
||||
|
||||
const float ShortRange = 1000.0f;
|
||||
const float NormalRange = 2000.0f;
|
||||
|
||||
float range;
|
||||
|
||||
/// @todo Check weapon type (knives are pretty quiet)
|
||||
/// @todo Use actual volume, account for silencers, etc.
|
||||
CWeaponCSBase *weapon = (CWeaponCSBase *)((player)?player->GetActiveWeapon():NULL);
|
||||
|
||||
if (weapon == NULL)
|
||||
return;
|
||||
|
||||
switch( weapon->GetWeaponID() )
|
||||
{
|
||||
// silent "firing"
|
||||
case WEAPON_HEGRENADE:
|
||||
case WEAPON_SMOKEGRENADE:
|
||||
case WEAPON_FLASHBANG:
|
||||
case WEAPON_SHIELDGUN:
|
||||
case WEAPON_C4:
|
||||
return;
|
||||
|
||||
// quiet
|
||||
case WEAPON_KNIFE:
|
||||
case WEAPON_TMP:
|
||||
range = ShortRange;
|
||||
break;
|
||||
|
||||
// M4A1 - check for silencer
|
||||
case WEAPON_M4A1:
|
||||
{
|
||||
if (weapon->IsSilenced())
|
||||
{
|
||||
range = ShortRange;
|
||||
}
|
||||
else
|
||||
{
|
||||
range = NormalRange;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// USP - check for silencer
|
||||
case WEAPON_USP:
|
||||
{
|
||||
if (weapon->IsSilenced())
|
||||
{
|
||||
range = ShortRange;
|
||||
}
|
||||
else
|
||||
{
|
||||
range = NormalRange;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// loud
|
||||
case WEAPON_AWP:
|
||||
range = 99999.0f;
|
||||
break;
|
||||
|
||||
// normal
|
||||
default:
|
||||
range = NormalRange;
|
||||
break;
|
||||
}
|
||||
|
||||
OnAudibleEvent( event, player, range, PRIORITY_HIGH, true ); // weapon_fire
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
void CCSBot::OnWeaponFireOnEmpty( IGameEvent *event )
|
||||
{
|
||||
if ( !IsAlive() )
|
||||
return;
|
||||
|
||||
// don't react to our own events
|
||||
CBasePlayer *player = UTIL_PlayerByUserId( event->GetInt( "userid" ) );
|
||||
if ( player == this )
|
||||
return;
|
||||
|
||||
// for knife fighting - if our victim is attacking or reloading, rush him
|
||||
/// @todo Propagate events into active state
|
||||
if (GetEnemy() == player && IsUsingKnife())
|
||||
{
|
||||
ForceRun( 5.0f );
|
||||
}
|
||||
|
||||
OnAudibleEvent( event, player, 1100.0f, PRIORITY_LOW, false ); // weapon_fire_on_empty
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
void CCSBot::OnWeaponReload( IGameEvent *event )
|
||||
{
|
||||
if ( !IsAlive() )
|
||||
return;
|
||||
|
||||
// don't react to our own events
|
||||
CBasePlayer *player = UTIL_PlayerByUserId( event->GetInt( "userid" ) );
|
||||
if ( player == this )
|
||||
return;
|
||||
|
||||
// for knife fighting - if our victim is attacking or reloading, rush him
|
||||
/// @todo Propagate events into active state
|
||||
if (GetEnemy() == player && IsUsingKnife())
|
||||
{
|
||||
ForceRun( 5.0f );
|
||||
}
|
||||
|
||||
OnAudibleEvent( event, player, 1100.0f, PRIORITY_LOW, false ); // weapon_reload
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
void CCSBot::OnWeaponZoom( IGameEvent *event )
|
||||
{
|
||||
if ( !IsAlive() )
|
||||
return;
|
||||
|
||||
// don't react to our own events
|
||||
CBasePlayer *player = UTIL_PlayerByUserId( event->GetInt( "userid" ) );
|
||||
if ( player == this )
|
||||
return;
|
||||
|
||||
OnAudibleEvent( event, player, 1100.0f, PRIORITY_LOW, false ); // weapon_zoom
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user