Andreazzz | Дата: Вторник, 11.05.2010, 23:16 | Сообщение # 1 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Это шняга исходник StriderMod вот сыль: http://www.joluis.com/zips/PilotableCode.zip Надеюсь камуто будет интересно ______________________________________________________________________________________________________ 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 |
|
| |
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
| Ай донт ноу
|
|
| |