Воскресенье, 19.05.2024, 16:02
 
Приветствую Вас Guest | RSS
Главная страница | Тут на днях какуюто шнягу откапал... - Форум | Регистрация | Вход
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Игровая мастерская » Программирование » Тут на днях какуюто шнягу откапал...
Тут на днях какуюто шнягу откапал...
AndreazzzДата: Вторник, 11.05.2010, 23:16 | Сообщение # 1
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
Это шняга исходник StriderMod вот сыль: http://www.joluis.com/zips/PilotableCode.zip
Надеюсь камуто будет интересно happy

______________________________________________________________________________________________________

Code
//========= Copyright © 1996-2010, Valve Corporation, All rights reserved. ============//
//
// Purpose:   
//
//=============================================================================//

#include "cbase.h"
#include "npcevent.h"
#include "in_buttons.h"

#ifdef CLIENT_DLL
   #include "c_hl2mp_player.h"
#else
   #include "grenade_ar2.h"
   #include "hl2mp_player.h"
   #include "basegrenade_shared.h"
#endif

#include "weapon_hl2mpbase.h"
#include "weapon_hl2mpbase_machinegun.h"

#ifdef CLIENT_DLL
#define CWeaponOICW C_WeaponOICW
#endif

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

#define SMG1_GRENADE_DAMAGE 100.0f
#define SMG1_GRENADE_RADIUS 250.0f

class CWeaponOICW : public CHL2MPMachineGun
{
public:
   DECLARE_CLASS( CWeaponOICW, CHL2MPMachineGun );

   CWeaponOICW();

   DECLARE_NETWORKCLASS();   
   DECLARE_PREDICTABLE();

     
   void    Precache( void );
   void    AddViewKick( void );
   void    SecondaryAttack( void );
   virtual bool    Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
   void    ToggleZoom( void );
   void    CheckZoomToggle( void );
   virtual void    ItemPostFrame( void );
   virtual void    ItemBusyFrame( void );

   int  GetMinBurst() { return 2; }
   int  GetMaxBurst() { return 5; }

   virtual void Equip( CBaseCombatCharacter *pOwner );
   bool    Reload( void );

   float    GetFireRate( void ) { return 0.075f; }    // 13.3hz
     
   Activity    GetPrimaryAttackActivity( void );

   virtual const Vector& GetBulletSpread( void )
   {
    static const Vector cone = VECTOR_CONE_5DEGREES;
    return cone;
   }

   const WeaponProficiencyInfo_t *GetProficiencyValues();

   DECLARE_ACTTABLE();

protected:

   Vector    m_vecTossVelocity;
   float    m_flNextGrenadeCheck;
     
private:
   CWeaponOICW( const CWeaponOICW & );
   CNetworkVar( bool,    m_bInZoom );
   CNetworkVar( bool,    m_bMustReload );
};

IMPLEMENT_NETWORKCLASS_ALIASED( WeaponOICW, DT_WeaponOICW )

BEGIN_NETWORK_TABLE( CWeaponOICW, DT_WeaponOICW )
END_NETWORK_TABLE()

BEGIN_PREDICTION_DATA( CWeaponOICW )
END_PREDICTION_DATA()

LINK_ENTITY_TO_CLASS( weapon_oicw, CWeaponOICW );
PRECACHE_WEAPON_REGISTER(weapon_oicw);

acttable_t    CWeaponOICW::m_acttable[] =   
{
   { ACT_MP_STAND_IDLE,    ACT_HL2MP_IDLE_SMG1,     false },
   { ACT_MP_CROUCH_IDLE,    ACT_HL2MP_IDLE_CROUCH_SMG1,    false },

   { ACT_MP_RUN,      ACT_HL2MP_RUN_SMG1,      false },
   { ACT_MP_CROUCHWALK,    ACT_HL2MP_WALK_CROUCH_SMG1,    false },

   { ACT_MP_ATTACK_STAND_PRIMARYFIRE,    ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG1,    false },
   { ACT_MP_ATTACK_CROUCH_PRIMARYFIRE,    ACT_HL2MP_GESTURE_RANGE_ATTACK_SMG1,    false },

   { ACT_MP_RELOAD_STAND,    ACT_HL2MP_GESTURE_RELOAD_SMG1,   false },
   { ACT_MP_RELOAD_CROUCH,    ACT_HL2MP_GESTURE_RELOAD_SMG1,   false },

   { ACT_MP_JUMP,      ACT_HL2MP_JUMP_SMG1,     false },
};

IMPLEMENT_ACTTABLE(CWeaponOICW);

//=========================================================
CWeaponOICW::CWeaponOICW( )
{
   m_fMinRange1  = 0;// No minimum range.   
   m_fMaxRange1  = 1400;
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::Precache( void )
{
#ifndef CLIENT_DLL
   UTIL_PrecacheOther("grenade_ar2");
#endif

   BaseClass::Precache();
}

//-----------------------------------------------------------------------------
// Purpose: Give this weapon longer range when wielded by an ally NPC.
//-----------------------------------------------------------------------------
void CWeaponOICW::Equip( CBaseCombatCharacter *pOwner )
{
   m_fMaxRange1 = 1400;

   BaseClass::Equip( pOwner );
}

//-----------------------------------------------------------------------------
// Purpose:   
// Output : Activity
//-----------------------------------------------------------------------------
Activity CWeaponOICW::GetPrimaryAttackActivity( void )
{
   if ( m_nShotsFired < 2 )
    return ACT_VM_PRIMARYATTACK;

   if ( m_nShotsFired < 3 )
    return ACT_VM_RECOIL1;
     
   if ( m_nShotsFired < 4 )
    return ACT_VM_RECOIL2;

   return ACT_VM_RECOIL3;
}

//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
bool CWeaponOICW::Reload( void )
{
   bool fRet;
   float fCacheTime = m_flNextSecondaryAttack;

   fRet = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD );
   if ( fRet )
   {
    // Undo whatever the reload process has done to our secondary
    // attack timer. We allow you to interrupt reloading to fire
    // a grenade.
    m_flNextSecondaryAttack = GetOwner()->m_flNextAttack = fCacheTime;

    WeaponSound( RELOAD );
    ToHL2MPPlayer(GetOwner())->DoAnimationEvent( PLAYERANIMEVENT_RELOAD );

   }

   return fRet;
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::CheckZoomToggle( void )
{
   CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
     
   if ( pPlayer->m_afButtonPressed & IN_ATTACK3 )
   {
    ToggleZoom();
   }
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::ItemBusyFrame( void )
{
   // Allow zoom toggling even when we're reloading
   CheckZoomToggle();
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::ItemPostFrame( void )
{
   // Allow zoom toggling
   CheckZoomToggle();

   if ( m_bMustReload && HasWeaponIdleTimeElapsed() )
   {
    Reload();
   }

   BaseClass::ItemPostFrame();
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::ToggleZoom( void )
{
   CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
     
   if ( pPlayer == NULL )
    return;
   color32 lightGreen = { 50, 255, 170, 32 };

#ifndef CLIENT_DLL

   if ( m_bInZoom )
   {
    if ( pPlayer->SetFOV( this, 0, 0.2f ) )
    {
     pPlayer->ShowViewModel( true );
     WeaponSound(SPECIAL2);
     m_bInZoom = false;
     UTIL_ScreenFade( pPlayer, lightGreen, 0.2f, 0, (FFADE_IN|FFADE_PURGE) );
    }
   }
   else
   {
    if ( pPlayer->SetFOV( this, 35, 0.1f ) )
    {
     pPlayer->ShowViewModel( false );
     WeaponSound(SPECIAL1);
     m_bInZoom = true;
     UTIL_ScreenFade( pPlayer, lightGreen, 0.2f, 0, (FFADE_OUT|FFADE_PURGE|FFADE_STAYOUT) );
    }
   }
#endif
}
//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::AddViewKick( void )
{
   #define    EASY_DAMPEN   0.5f
   #define    MAX_VERTICAL_KICK    1.0f    //Degrees
   #define    SLIDE_LIMIT   2.0f    //Seconds
     
   //Get the view kick
   CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );

   if ( pPlayer == NULL )
    return;

   DoMachineGunKick( pPlayer, EASY_DAMPEN, MAX_VERTICAL_KICK, m_fFireDuration, SLIDE_LIMIT );
}

//-----------------------------------------------------------------------------
// Purpose:   
// Input  : *pSwitchingTo -   
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool CWeaponOICW::Holster( CBaseCombatWeapon *pSwitchingTo )
{
   if ( m_bInZoom )
   {
    ToggleZoom();
   }

   return BaseClass::Holster( pSwitchingTo );
}

//-----------------------------------------------------------------------------
// Purpose:   
//-----------------------------------------------------------------------------
void CWeaponOICW::SecondaryAttack( void )
{
   // Only the player fires this way so we can cast
   CBasePlayer *pPlayer = ToBasePlayer( GetOwner() );
     
   if ( pPlayer == NULL )
    return;

   //Must have ammo
   if ( ( pPlayer->GetAmmoCount( m_iSecondaryAmmoType ) <= 0 ) || ( pPlayer->GetWaterLevel() == 3 ) )
   {
    SendWeaponAnim( ACT_VM_DRYFIRE );
    BaseClass::WeaponSound( EMPTY );
    m_flNextSecondaryAttack = gpGlobals->curtime + 0.5f;
    return;
   }

   if( m_bInReload )
    m_bInReload = false;

   // MUST call sound before removing a round from the clip of a CMachineGun
   BaseClass::WeaponSound( WPN_DOUBLE );

   Vector vecSrc = pPlayer->Weapon_ShootPosition();
   Vector    vecThrow;
   // Don't autoaim on grenade tosses
   AngleVectors( pPlayer->EyeAngles() + pPlayer->GetPunchAngle(), &vecThrow );
   VectorScale( vecThrow, 1000.0f, vecThrow );
     
#ifndef CLIENT_DLL
   //Create the grenade
   CGrenadeAR2 *pGrenade = (CGrenadeAR2*)Create( "grenade_ar2", vecSrc, vec3_angle, pPlayer );
   pGrenade->SetAbsVelocity( vecThrow );

   pGrenade->SetLocalAngularVelocity( RandomAngle( -400, 400 ) );
   pGrenade->SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE );   
   pGrenade->SetThrower( GetOwner() );
   pGrenade->SetDamage( SMG1_GRENADE_DAMAGE );
   pGrenade->SetDamageRadius( SMG1_GRENADE_RADIUS );
#endif

   SendWeaponAnim( ACT_VM_SECONDARYATTACK );

   // player "shoot" animation
   pPlayer->SetAnimation( PLAYER_ATTACK1 );
   //Tony; TODO SECONDARY!
   ToHL2MPPlayer(pPlayer)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );

   // Decrease ammo
   pPlayer->RemoveAmmo( 1, m_iSecondaryAmmoType );

   // Can shoot again immediately
   m_flNextPrimaryAttack = gpGlobals->curtime + 0.5f;

   // Can blow up after a short delay (so have time to release mouse button)
   m_flNextSecondaryAttack = gpGlobals->curtime + 1.0f;
}

//-----------------------------------------------------------------------------
const WeaponProficiencyInfo_t *CWeaponOICW::GetProficiencyValues()
{
   static WeaponProficiencyInfo_t proficiencyTable[] =
   {
    { 7.0,  0.75    },
    { 5.00,  0.75    },
    { 10.0/3.0, 0.75    },
    { 5.0/3.0,    0.75    },
    { 1.00,  1.0  },
   };

   COMPILE_TIME_ASSERT( ARRAYSIZE(proficiencyTable) == WEAPON_PROFICIENCY_PERFECT + 1);

   return proficiencyTable;
}
- это буржуйская версия OICW с зумом и подстволкой




Было отредактированно - Andreazzz - Вторник, 11.05.2010, 23:21
 
HitmenДата: Среда, 12.05.2010, 00:25 | Сообщение # 2
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
Видел, хорошая вещь smile
+1 всё ровно


Туториалы по программированию, мои и слегка изменённые чужие. :)

Sp@ce Project Blog
Sp@ce Project Web-Site

I'm in spaaace!
Я в контакте
Я в Facebook'е

 
StriderДата: Среда, 12.05.2010, 21:07 | Сообщение # 3
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Исходники страйдырмода баян(я даже хотел возрадить стрмод, но они сцуко не рабочие...), а вот буржуйское ОИЦЕВишко мне нравится, нравится))
 
HitmenДата: Среда, 12.05.2010, 21:37 | Сообщение # 4
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
Strider, Ещё бы с прицелом, а то Scope не могу сделать, а туториал на devwiki кажется тяжёлым и бессмысленным.

Туториалы по программированию, мои и слегка изменённые чужие. :)

Sp@ce Project Blog
Sp@ce Project Web-Site

I'm in spaaace!
Я в контакте
Я в Facebook'е

 
StriderДата: Среда, 12.05.2010, 22:16 | Сообщение # 5
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Hitmen, Я скоп с деввики сделал, но с размерами не разобрался
 
HitmenДата: Четверг, 13.05.2010, 14:50 | Сообщение # 6
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
Strider, Вот я не понимаю, как некоторые мод делают с нормальным Scope??? Там же у них одна текстура на все разрешения.

Туториалы по программированию, мои и слегка изменённые чужие. :)

Sp@ce Project Blog
Sp@ce Project Web-Site

I'm in spaaace!
Я в контакте
Я в Facebook'е

 
StriderДата: Четверг, 13.05.2010, 16:52 | Сообщение # 7
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
Ай донт ноу
 
Форум » Игровая мастерская » Программирование » Тут на днях какуюто шнягу откапал...
  • Страница 1 из 1
  • 1
Поиск:

Помощь в разработке форума: HOMiE7