={Hitmen}=
(Rock Path Collective)
Зарегистрирован: Jan 2008
Проживает: Russian Federation/St.-Petersburg
Написал: 254 сообщений
Оценка: 15 чел.
|
Вот, у меня на базе AUG прописан:
code:
#include "cbase.h"
#include "basecombatweapon.h"
#include "basehlcombatweapon.h"
#include "NPCevent.h"
#include "basecombatcharacter.h"
#include "AI_BaseNPC.h"
#include "player.h"
#include "gamerules.h"
#include "game.h"
#include "in_buttons.h"
#include "AI_Memory.h"
#include "soundent.h"
#include "hl2_player.h"
#include "EntityFlame.h"
#include "npc_combine.h"
#include "rumble_shared.h"
#include "shake.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
class CWeaponAUG : public CHLMachineGun
{
DECLARE_CLASS( CWeaponAUG, CHLMachineGun );
public:
DECLARE_DATADESC();
DECLARE_SERVERCLASS();
CWeaponAUG();
void AddViewKick( void );
void ItemPostFrame( void );
void PrimaryAttack( void );
void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator );
float GetFireRate( void );
bool Reload( void );
int GetMinBurst() { return 4; }
int GetMaxBurst() { return 7; }
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; }
virtual const Vector& GetBulletSpread( void )
{
static Vector cone;
if( GetOwner() && GetOwner()->IsPlayer() )
{
cone = ( m_bZoomed ) ? VECTOR_CONE_1DEGREES : VECTOR_CONE_3DEGREES;
}
else
{
cone = VECTOR_CONE_8DEGREES;
}
return cone;
}
bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
virtual void Drop( const Vector &vecVelocity );
virtual bool Deploy( void );
protected:
void Zoom( void );
int m_nShotsFired;
bool m_bZoomed;
static const char *pShootSounds[];
DECLARE_ACTTABLE();
};
BEGIN_DATADESC( CWeaponAUG )
DEFINE_FIELD( m_nShotsFired, FIELD_INTEGER ),
DEFINE_FIELD( m_bZoomed, FIELD_BOOLEAN ),
END_DATADESC()
IMPLEMENT_SERVERCLASS_ST( CWeaponAUG, DT_WeaponAUG )
END_SEND_TABLE()
LINK_ENTITY_TO_CLASS( weapon_aug, CWeaponAUG );
PRECACHE_WEAPON_REGISTER( weapon_aug );
acttable_t CWeaponAUG::m_acttable[] =
{
{ ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_AR2, true },
{ ACT_RELOAD, ACT_RELOAD_SMG1, true },
{ ACT_IDLE, ACT_IDLE_SMG1, true },
{ ACT_IDLE_ANGRY, ACT_IDLE_ANGRY_SMG1, true },
{ ACT_WALK, ACT_WALK_RIFLE, true },
{ ACT_IDLE_RELAXED, ACT_IDLE_SMG1_RELAXED, false },
{ ACT_IDLE_STIMULATED, ACT_IDLE_SMG1_STIMULATED, false },
{ ACT_IDLE_AGITATED, ACT_IDLE_ANGRY_SMG1, false },
{ ACT_WALK_RELAXED, ACT_WALK_RIFLE_RELAXED, false },
{ ACT_WALK_STIMULATED, ACT_WALK_RIFLE_STIMULATED, false },
{ ACT_WALK_AGITATED, ACT_WALK_AIM_RIFLE, false },
{ ACT_RUN_RELAXED, ACT_RUN_RIFLE_RELAXED, false },
{ ACT_RUN_STIMULATED, ACT_RUN_RIFLE_STIMULATED, false },
{ ACT_RUN_AGITATED, ACT_RUN_AIM_RIFLE, false },
{ ACT_IDLE_AIM_RELAXED, ACT_IDLE_SMG1_RELAXED, false },
{ ACT_IDLE_AIM_STIMULATED, ACT_IDLE_AIM_RIFLE_STIMULATED, false },
{ ACT_IDLE_AIM_AGITATED, ACT_IDLE_ANGRY_SMG1, false },
{ ACT_WALK_AIM_RELAXED, ACT_WALK_RIFLE_RELAXED, false },
{ ACT_WALK_AIM_STIMULATED, ACT_WALK_AIM_RIFLE_STIMULATED, false },
{ ACT_WALK_AIM_AGITATED, ACT_WALK_AIM_RIFLE, false },
{ ACT_RUN_AIM_RELAXED, ACT_RUN_RIFLE_RELAXED, false },
{ ACT_RUN_AIM_STIMULATED, ACT_RUN_AIM_RIFLE_STIMULATED, false },
{ ACT_RUN_AIM_AGITATED, ACT_RUN_AIM_RIFLE, false },
{ ACT_WALK_AIM, ACT_WALK_AIM_RIFLE, true },
{ ACT_WALK_CROUCH, ACT_WALK_CROUCH_RIFLE, true },
{ ACT_WALK_CROUCH_AIM, ACT_WALK_CROUCH_AIM_RIFLE, true },
{ ACT_RUN, ACT_RUN_RIFLE, true },
{ ACT_RUN_AIM, ACT_RUN_AIM_RIFLE, true },
{ ACT_RUN_CROUCH, ACT_RUN_CROUCH_RIFLE, true },
{ ACT_RUN_CROUCH_AIM, ACT_RUN_CROUCH_AIM_RIFLE, true },
{ ACT_GESTURE_RANGE_ATTACK1, ACT_GESTURE_RANGE_ATTACK_AR2, false },
{ ACT_COVER_LOW, ACT_COVER_SMG1_LOW, false },
{ ACT_RANGE_AIM_LOW, ACT_RANGE_AIM_AR2_LOW, false },
{ ACT_RANGE_ATTACK1_LOW, ACT_RANGE_ATTACK_SMG1_LOW, true },
{ ACT_RELOAD_LOW, ACT_RELOAD_SMG1_LOW, false },
{ ACT_GESTURE_RELOAD, ACT_GESTURE_RELOAD_SMG1, true },
};
IMPLEMENT_ACTTABLE( CWeaponAUG );
CWeaponAUG::CWeaponAUG()
{
m_fMinRange1 = 64;
m_fMaxRange1 = 2048;
m_fMinRange2 = 256;
m_fMaxRange2 = 1024;
m_nShotsFired = 0;
}
bool CWeaponAUG:eploy( void )
{
m_nShotsFired = 0;
return BaseClass:eploy();
}
void CWeaponAUG::ItemPostFrame( void )
{
CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
if ( !pOwner )
return;
if ( ( pOwner->m_nButtons & IN_ATTACK ) == false )
{
m_nShotsFired = 0;
}
if ( pOwner -> m_afButtonPressed & IN_ATTACK2 )
{
Zoom();
}
if ( m_bZoomed )
{
m_fFireDuration = 0.05f;
}
BaseClass::ItemPostFrame();
}
void CWeaponAUG::PrimaryAttack( void )
{
m_nShotsFired++;
BaseClass::PrimaryAttack();
}
void CWeaponAUG::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator )
{
switch( pEvent -> event )
{
case EVENT_WEAPON_AR2:
{
Vector vecShootOrigin, vecShootDir;
vecShootOrigin = pOperator -> Weapon_ShootPosition( );
CAI_BaseNPC *npc = pOperator -> MyNPCPointer();
ASSERT( npc != NULL );
vecShootDir = npc -> GetActualShootTrajectory( vecShootOrigin );
WeaponSound( SINGLE_NPC );
pOperator -> FireBullets( 1, vecShootOrigin, vecShootDir, VECTOR_CONE_PRECALCULATED, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, 2 );
pOperator -> DoMuzzleFlash();
}
break;
default:
CBaseCombatWeapon::Operator_HandleAnimEvent( pEvent, pOperator );
break;
}
}
void CWeaponAUG::AddViewKick( void )
{
#define EASY_DAMPEN 0.5f
#define MAX_VERTICAL_KICK 24.0f
#define SLIDE_LIMIT 3.0f
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( !pPlayer )
return;
DoMachineGunKick( pPlayer, EASY_DAMPEN, MAX_VERTICAL_KICK, m_fFireDuration, SLIDE_LIMIT );
}
void CWeaponAUG::Zoom( void )
{
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
if ( pPlayer == NULL ) return;
if ( m_bZoomed )
{
pPlayer->SetFOV( this, 0, 0.1f );
m_bZoomed = false;
}
else
{
pPlayer->SetFOV( this, 25, 0.1f );
m_bZoomed = true;
}
}
float CWeaponAUG::GetFireRate( void )
{
if ( m_bZoomed )
{
return 0.3f;
}
return 0.1f;
}
bool CWeaponAUG::Holster( CBaseCombatWeapon *pSwitchingTo )
{
if ( m_bZoomed )
{
Zoom();
}
return BaseClass::Holster( pSwitchingTo );
}
bool CWeaponAUG::Reload( void )
{
if ( m_bZoomed )
{
Zoom();
}
bool fRet;
float fCacheTime = m_flNextSecondaryAttack;
fRet = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD );
if ( fRet )
{
m_flNextSecondaryAttack = GetOwner() -> m_flNextAttack = fCacheTime;
WeaponSound( RELOAD );
}
return fRet;
return BaseClass::Reload();
}
void CWeaponAUG:rop( const Vector &vecVelocity )
{
if ( m_bZoomed )
{
Zoom();
}
BaseClass:rop( vecVelocity );
}
Поправил ={Hitmen}= 06-11-2009 в 13:22
|