|
|
weapon_dualies
| |
HellMapper | Дата: Воскресенье, 08.11.2009, 12:23 | Сообщение # 1 |
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
| Code //========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============// // // Purpose: Dualies - hand gun // // $NoKeywords: $ //=============================================================================//
#include "cbase.h" #include "NPCEvent.h" #include "basehlcombatweapon.h" #include "basecombatcharacter.h" #include "AI_BaseNPC.h" #include "player.h" #include "gamerules.h" #include "in_buttons.h" #include "soundent.h" #include "game.h" #include "vstdlib/random.h" #include "gamestats.h"
// memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h"
#define DUALIES_FASTEST_REFIRE_TIME 0.1f #define DUALIES_FASTEST_DRY_REFIRE_TIME 0.2f
#define DUALIES_ACCURACY_SHOT_PENA LTY_TIME 0.2f // Applied amount of time each shot adds to the time we must recover from #define DUALIES_ACCURACY_MAXIMUM_PENALTY_TIME 1.5f // Maximum penalty to deal out
ConVar Dualies_use_new_accuracy( "Dualies_use_new_accuracy", "1" );
//----------------------------------------------------------------------------- // CWeaponDualies //-----------------------------------------------------------------------------
class CWeaponDualies : public CBaseHLCombatWeapon { DECLARE_DATADESC();
public: DECLARE_CLASS( CWeaponDualies, CBaseHLCombatWeapon );
CWeaponDualies(void);
DECLARE_SERVERCLASS();
void Precache(void); void ItemPostFrame(void); void ItemPreFrame(void); void ItemBusyFrame(void); void PrimaryAttack(void); void AddViewKick(void); void DryFire(void); void PostFireStuff(void); void Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator );
void UpdatePenaltyTime( void );
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; } Activity GetPrimaryAttackActivity( void );
virtual bool Reload( void );
virtual const Vector& GetBulletSpread( void ) { // Handle NPCs first static Vector npcCone = VECTOR_CONE_5DEGREES; if ( GetOwner() && GetOwner()->IsNPC() ) return npcCone; static Vector cone;
if ( Dualies_use_new_accuracy.GetBool() ) { float ramp = RemapValClamped( m_flAccuracyPenalty, 0.0f, DUALIES_ACCURACY_MAXIMUM_PENALTY_TIME, 0.0f, 1.0f );
// We lerp from very accurate to inaccurate over time VectorLerp( VECTOR_CONE_1DEGREES, VECTOR_CONE_6DEGREES, ramp, cone ); } else { // Old value cone = VECTOR_CONE_4DEGREES; }
return cone; } virtual int GetMinBurst() { return 1; }
virtual int GetMaxBurst() { return 3; }
virtual float GetFireRate( void ) { return 0.5f; }
DECLARE_ACTTABLE();
private: float m_flSoonestPrimaryAttack; float m_flLastAttackTime; float m_flAccuracyPenalty; int m_nNumShotsFired; bool Flip; };
IMPLEMENT_SERVERCLASS_ST(CWeaponDualies, DT_WeaponDualies) END_SEND_TABLE()
LINK_ENTITY_TO_CLASS( weapon_Dualies, CWeaponDualies ); PRECACHE_WEAPON_REGISTER( weapon_Dualies );
BEGIN_DATADESC( CWeaponDualies )
DEFINE_FIELD( m_flSoonestPrimaryAttack, FIELD_TIME ), DEFINE_FIELD( m_flLastAttackTime, FIELD_TIME ), DEFINE_FIELD( m_flAccuracyPenalty, FIELD_FLOAT ), //NOTENOTE: This is NOT tracking game time DEFINE_FIELD( m_nNumShotsFired, FIELD_INTEGER ),
END_DATADESC()
#ifndef CLIENT_DLL acttable_t CWeaponDualies::m_acttable[] = { { ACT_IDLE, ACT_IDLE_DUALIES, false }, { ACT_IDLE_ANGRY, ACT_IDLE_ANGRY_DUALIES, false }, { ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_DUALIES, false }, { ACT_RELOAD, ACT_RELOAD_DUALIES, false }, { ACT_WALK_AIM, ACT_WALK_AIM_DUALIES, false }, { ACT_RUN_AIM, ACT_RUN_AIM_DUALIES, false }, { ACT_GESTURE_RANGE_ATTACK1, ACT_GESTURE_RANGE_ATTACK_DUALIES,false }, { ACT_RELOAD_LOW, ACT_RELOAD_DUALIES_LOW, false }, { ACT_RANGE_ATTACK1_LOW, ACT_RANGE_ATTACK_DUALIES_LOW, false }, { ACT_COVER_LOW, ACT_COVER_DUALIES_LOW, false }, { ACT_RANGE_AIM_LOW, ACT_RANGE_AIM_DUALIES_LOW, false }, { ACT_GESTURE_RELOAD, ACT_GESTURE_RELOAD_DUALIES, false }, { ACT_WALK, ACT_WALK_DUALIES, false }, { ACT_RUN, ACT_RUN_DUALIES, false }, };
IMPLEMENT_ACTTABLE( CWeaponDualies );
//----------------------------------------------------------------------------- // Purpose: Constructor //----------------------------------------------------------------------------- CWeaponDualies::CWeaponDualies( void ) { m_flSoonestPrimaryAttack = gpGlobals->curtime; m_flAccuracyPenalty = 0.0f;
m_fMinRange1 = 24; m_fMaxRange1 = 1500; m_fMinRange2 = 24; m_fMaxRange2 = 200;
m_bFiresUnderwater = true; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::Precache( void ) { BaseClass::Precache(); }
//----------------------------------------------------------------------------- // Purpose: // Input : // Output : //----------------------------------------------------------------------------- void CWeaponDualies::Operator_HandleAnimEvent( animevent_t *pEvent, CBaseCombatCharacter *pOperator ) { switch( pEvent->event ) { case EVENT_WEAPON_PISTOL_FIRE: { Vector vecShootOrigin, vecShootDir; vecShootOrigin = pOperator->Weapon_ShootPosition();
CAI_BaseNPC *npc = pOperator->MyNPCPointer(); ASSERT( npc != NULL );
vecShootDir = npc->GetActualShootTrajectory( vecShootOrigin );
CSoundEnt::InsertSound( SOUND_COMBAT|SOUND_CONTEXT_GUNFIRE, pOperator->GetAbsOrigin(), SOUNDENT_VOLUME_PISTOL, 0.2, pOperator, SOUNDENT_CHANNEL_WEAPON, pOperator->GetEnemy() );
WeaponSound( SINGLE_NPC ); pOperator->FireBullets( 1, vecShootOrigin, vecShootDir, VECTOR_CONE_PRECALCULATED, MAX_TRACE_LENGTH, m_iPrimaryAmmoType, 2 ); pOperator->DoMuzzleFlash(); m_iClip1 = m_iClip1 - 1; } break; default: BaseClass::Operator_HandleAnimEvent( pEvent, pOperator ); break; } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::DryFire( void ) { WeaponSound( EMPTY ); SendWeaponAnim( ACT_VM_DRYFIRE ); m_flSoonestPrimaryAttack = gpGlobals->curtime + DUALIES_FASTEST_DRY_REFIRE_TIME; m_flNextPrimaryAttack = gpGlobals->curtime + SequenceDuration(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::PrimaryAttack(void) { if ( ( gpGlobals->curtime - m_flLastAttackTime ) > 0.5f ) { m_nNumShotsFired = 0; } else { m_nNumShotsFired++; } m_flLastAttackTime = gpGlobals->curtime; m_flSoonestPrimaryAttack = gpGlobals->curtime + DUALIES_FASTEST_REFIRE_TIME; //Flipping Code -Jman if ( Flip == true ) { BaseClass::PrimaryAttack(); Flip = false; PostFireStuff(); } else { BaseClass::RightDualiesAttack(); Flip = true; PostFireStuff(); } } //Post Fire things. void CWeaponDualies::PostFireStuff(void) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if( pOwner ) { pOwner->ViewPunchReset(); } // Add an accuracy penalty which can move past our maximum penalty time if we're really spastic m_flAccuracyPenalty += DUALIES_ACCURACY_SHOT_PENALTY_TIME; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::UpdatePenaltyTime( void ) { CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
if ( pOwner == NULL ) return;
// Check our penalty time decay if ( ( ( pOwner->m_nButtons & IN_ATTACK ) == false ) && ( m_flSoonestPrimaryAttack < gpGlobals->curtime ) ) { m_flAccuracyPenalty -= gpGlobals->frametime; m_flAccuracyPenalty = clamp( m_flAccuracyPenalty, 0.0f, DUALIES_ACCURACY_MAXIMUM_PENALTY_TIME ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::ItemPreFrame( void ) { UpdatePenaltyTime();
BaseClass::ItemPreFrame(); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::ItemBusyFrame( void ) { UpdatePenaltyTime();
BaseClass::ItemBusyFrame(); }
//----------------------------------------------------------------------------- // Purpose: Allows firing as fast as button is pressed //----------------------------------------------------------------------------- void CWeaponDualies::ItemPostFrame( void ) { BaseClass::ItemPostFrame();
if ( m_bInReload ) return; CBasePlayer *pOwner = ToBasePlayer( GetOwner() );
if ( pOwner == NULL ) return;
//Allow a refire as fast as the player can click if ( ( ( pOwner->m_nButtons & IN_ATTACK ) == false ) && ( m_flSoonestPrimaryAttack < gpGlobals->curtime ) ) { m_flNextPrimaryAttack = gpGlobals->curtime - 0.1f; } else if ( ( pOwner->m_nButtons & IN_ATTACK ) && ( m_flNextPrimaryAttack < gpGlobals->curtime ) && ( m_iClip1 <= 0 ) ) { DryFire(); } }
//----------------------------------------------------------------------------- // Purpose: // Output : int //----------------------------------------------------------------------------- Activity CWeaponDualies::GetPrimaryAttackActivity( void ) { if ( m_nNumShotsFired < 1 ) return ACT_VM_PRIMARYATTACK;
if ( m_nNumShotsFired < 2 ) return ACT_VM_RECOIL1;
if ( m_nNumShotsFired < 3 ) return ACT_VM_RECOIL2;
return ACT_VM_RECOIL3; }
//----------------------------------------------------------------------------- //----------------------------------------------------------------------------- bool CWeaponDualies::Reload( void ) { bool fRet = DefaultReload( GetMaxClip1(), GetMaxClip2(), ACT_VM_RELOAD ); if ( fRet ) { WeaponSound( RELOAD ); m_flAccuracyPenalty = 0.0f; } return fRet; }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponDualies::AddViewKick( void ) { CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if ( pPlayer == NULL ) return;
QAngle viewPunch;
viewPunch.x = random->RandomFloat( 0.25f, 0.5f ); viewPunch.y = random->RandomFloat( -.6f, .6f ); viewPunch.z = 0.0f;
//Add it to the view punch pPlayer->ViewPunch( viewPunch ); } Проблема в том, что MuzzleFlash не распространяется на второй пистолет и линия выстрела тоже идет только с одного пистолета и я пока не знаю в чем проблема. Помогите! Вот исходник на валвдев но там в нем есть ошибки в моем коде они исправлены http://developer.valvesoftware.com/wiki/Dual_Pistols_%28CSS_Style%29
Я живу в будущем City 15
Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
|
|
| |
Hitmen | Дата: Воскресенье, 08.11.2009, 13:43 | Сообщение # 2 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| А лог ошибок какой, просто без ошибок не могу дать совета по исправлению.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
HellMapper | Дата: Воскресенье, 08.11.2009, 13:58 | Сообщение # 3 |
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
| Ошибок нет, но не работает муззлефлеш(
Я живу в будущем City 15
Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
|
|
| |
Hitmen | Дата: Воскресенье, 08.11.2009, 14:22 | Сообщение # 4 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| HellMapper, Тогда код сырой. Но вроде Detler делал мод, где стволы из CS:S в Half-Life 2.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Воскресенье, 08.11.2009, 16:06 | Сообщение # 5 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Да, был мод, я его просил исходники скинуть, но копатся в дисках лень Добавлено (08.11.2009, 16:06) --------------------------------------------- Может дело в модели?? Хотя в RightDualiesAttack есть Code pPlayer->DoMuzzleFlash();
|
|
| |
Strider | Дата: Воскресенье, 08.11.2009, 16:19 | Сообщение # 6 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Мне кажеццо в аттачментах дело...
|
|
| |
Hitmen | Дата: Воскресенье, 08.11.2009, 19:37 | Сообщение # 7 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Andreazzz, Просто тутуриал не доделан, на CS-Mapping была ссылка на мод от Детлера. Вот CS:S в HL2: http://rghost.ru/456893
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Воскресенье, 08.11.2009, 20:53 | Сообщение # 8 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| Hitmen, читать надо - ФАЙЛ УДАЛЁН!!! Добавлено (08.11.2009, 20:53) --------------------------------------------- я сёдня нервный
|
|
| |
Hitmen | Дата: Понедельник, 09.11.2009, 00:01 | Сообщение # 9 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Могу залить куда-нибудь, у меня исходники есть.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Andreazzz | Дата: Понедельник, 09.11.2009, 11:18 | Сообщение # 10 |
Spy
Группа: Проверенные
Сообщений: 996
Репутация: 55
Статус: Offline
| ДАВАЙ!!! БУду век благадарен и + дам)
Было отредактированно - Andreazzz - Понедельник, 09.11.2009, 11:21 |
|
| |
Hitmen | Дата: Понедельник, 09.11.2009, 19:50 | Сообщение # 11 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| За плюс дам, да и так скину. Народ вроде зафурыкал, через несколько часов за компьютером буду, быстро залью:)
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
HellMapper | Дата: Понедельник, 09.11.2009, 19:54 | Сообщение # 12 |
Scout
Группа: Проверенные
Сообщений: 588
Репутация: 27
Статус: Offline
| БЫСТРЕЕ!!!!!!!!!!!!!!!
Я живу в будущем City 15
Если Вы можете, играя в "Counter-Strike: Sourсe", посадить хедшот ножом через стену в попу своему противнику, который находится на другом конце карты, на другом сервере, и который играет в "Team Fortress 2" и находится под действием убер-заряда, то знайте, что в плане читерства вы достигли совершенства. ©IPa
|
|
| |
Hitmen | Дата: Понедельник, 09.11.2009, 21:38 | Сообщение # 13 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Быстрее не могу я сейчас йогой заниматься буду. Плюс уроки ещё не сделаны.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
DetLeR | Дата: Понедельник, 09.11.2009, 22:08 | Сообщение # 14 |
Engineer
Группа: Администраторы
Сообщений: 1731
Статус: Offline
| Hitmen, не ври. Карантин.
|
|
| |
Strider | Дата: Понедельник, 09.11.2009, 22:33 | Сообщение # 15 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| DetLeR, +1.
|
|
| |
Hitmen | Дата: Вторник, 10.11.2009, 01:44 | Сообщение # 16 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Какой карантин? Я из Питера, у нас его нету.Добавлено (10.11.2009, 01:44) --------------------------------------------- Если не веришь, то и не надо. Это в Москве есть люди, которые дохают, у нас просто всё позже будет, плюс не хочется карантина до 22, у девушки днюха, нужно отметить.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
DetLeR | Дата: Вторник, 10.11.2009, 09:55 | Сообщение # 17 |
Engineer
Группа: Администраторы
Сообщений: 1731
Статус: Offline
| Hitmen, да ладно. По всей стране у школоты 3х недельные каникулы и студенты тоже не учится.
|
|
| |
Hitmen | Дата: Вторник, 10.11.2009, 15:38 | Сообщение # 18 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| DetLeR, Какие каникулы? У нас закроют только при условии, что 30% учащихся будет болеть. А в у нас в районе и 10% нет болеющих. Не смотря на то, что сегодня снег выпал. У нас иммунитет ко всему. Кста, если не знаешь, то не говори. (без обид, просто уже надоело малость доказывать, что Питер не на карантине) Добавлено (10.11.2009, 15:38) --------------------------------------------- Кста, вот я и с компа, из-за вас репетитора отменил. Шучу, просто учёба наладилась, отличником стал даже в физ-мате. Ща архив общий со всеми исходниками загружу.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
Strider | Дата: Вторник, 10.11.2009, 15:40 | Сообщение # 19 |
Spy
Группа: Проверенные
Сообщений: 1465
Репутация: 51
Статус: Offline
| Quote (DetLeR) 3х недельные нийуха-се. У нас 1 неделя...
|
|
| |
Hitmen | Дата: Вторник, 10.11.2009, 16:29 | Сообщение # 20 |
Spy
Группа: Проверенные
Сообщений: 2104
Репутация: 84
Статус: Offline
| Strider, Да вы вообще обнаглели, мы наверное в декабре сядим, точнее заболеем. У нас аккредитация школы будет.
Туториалы по программированию, мои и слегка изменённые чужие. :)
Sp@ce Project Blog Sp@ce Project Web-Site
I'm in spaaace! Я в контакте Я в Facebook'е
|
|
| |
|
|
Помощь в разработке форума: HOMiE7 |
|
| |
|