Registrierung - oder - Hineingehen
Cry of Fear 1.0Cry of Fear 1.0

Хоррор от первого лица (Одиночная игра и Кооператив)...

20/02/2012
Natural SelectionNatural Selection

Крупный мультиплеерный мод о противостоянии людей и пришельцев...

20/02/2006

По просьбам трудящихся коментирую код МР5


  • Beschreibung
  • Einstellung

Разбираемся в коде пушки МР5

По просьбам трудящихся коментирую код МР5


Der Autor der Lektion : Durane
Der Durchsichten : 637 ( +3 )
Heruntergeladen : 0
Hochgeladen von : Streit
Erstellt : 04/07/2011 5:34:59 PM
Source : http://www.sharaw.deagle.ru
Wertung :
 ( 0 ) 
Aktie :


Es gibt die folgenden Sprachen : | russisch |

Code:

#include "extdll.h"
#include "util.h"
#include "cbase.h"
#include "monsters.h"
#include "weapons.h"
#include "nodes.h"
#include "player.h"
#include "soundent.h"
#include "gamerules.h"

enum mp5_e // Загрузка анимаций
{
   MP5_LONGIDLE = 0, // Длинное бездействие
   MP5_IDLE1, // Бездействие
   MP5_LAUNCH, // Выстрел подствольным гранатометом
   MP5_RELOAD, // Перезарядка
   MP5_DEPLOY, // Взятие в руки
   MP5_FIRE1, // Выстрел
   MP5_FIRE2, // Выстрел
   MP5_FIRE3, // Выстрел
};

LINK_ENTITY_TO_CLASS( weapon_mp5, CMP5 ); // Создание ентайта
LINK_ENTITY_TO_CLASS( weapon_9mmAR, CMP5 );

//=========================================================
//=========================================================
int CMP5::SecondaryAmmoIndex( void )
{
   return m_iSecondaryAmmoType;
}

void CMP5::Spawn( ) // Загрузка на карту
{
   pev->classname = MAKE_STRING("weapon_9mmAR"); // hack to allow for old names
   Precache( );
   SET_MODEL(ENT(pev), "models/w_9mmAR.mdl"); // Какая модель на карте
   m_iId = WEAPON_MP5;

   m_iDefaultAmmo = MP5_DEFAULT_GIVE; // Кол-во патронов (weapon.h)

   FallInit();// get ready to fall down. // Создание на карте
}


void CMP5::Precache( void ) // Кеширование (загрузка) необходимых файлов
{
   PRECACHE_MODEL("models/v_9mmAR.mdl"); // Модель оружия в руках
   PRECACHE_MODEL("models/w_9mmAR.mdl"); // Модель оружия на земле
   PRECACHE_MODEL("models/p_9mmAR.mdl"); // Модель оружия у противника

   m_iShell = PRECACHE_MODEL ("models/shell.mdl");// brass shellTE_MODEL // Модель гильзы

   PRECACHE_MODEL("models/grenade.mdl"); // grenade // Модель гранаты

   PRECACHE_MODEL("models/w_9mmARclip.mdl"); // Модель обоймы
   PRECACHE_SOUND("items/9mmclip1.wav"); // Звук поднятия обоймы с земли

   PRECACHE_SOUND("items/clipinsert1.wav");
   PRECACHE_SOUND("items/cliprelease1.wav");

   PRECACHE_SOUND ("weapons/hks1.wav");// H to the K // Звук выстрела
   PRECACHE_SOUND ("weapons/hks2.wav");// H to the K // -----//------
   PRECACHE_SOUND ("weapons/hks3.wav");// H to the K // -----//------

   PRECACHE_SOUND( "weapons/glauncher.wav" ); // Звук выстрела гранатой
   PRECACHE_SOUND( "weapons/glauncher2.wav" ); // ----------//----------

   PRECACHE_SOUND ("weapons/357_cock1.wav");

   m_usMP5 = PRECACHE_EVENT( 1, "events/mp5.sc" ); // Загрузка евент-файла
   m_usMP52 = PRECACHE_EVENT( 1, "events/mp52.sc" );
}

int CMP5::GetItemInfo(ItemInfo *p) // Основная инфа об оружии
{
   p->pszName = STRING(pev->classname);
   p->pszAmmo1 = "9mm"; // Тип патронов
   p->iMaxAmmo1 = _9MM_MAX_CARRY; // Макс. количество с собой
   p->pszAmmo2 = "ARgrenades"; // Тип патронов 2
   p->iMaxAmmo2 = M203_GRENADE_MAX_CARRY; // Макс. кол-во с собой 2
   p->iMaxClip = MP5_MAX_CLIP; // Кол-во пуль в обойме
   p->iSlot = 2; // На какой цыфре оружие (значение + 1), если 2 значит в третьей
   p->iPosition = 0; // Какая позици в этом разделе (значение + 2), если 0 значит первая
   p->iFlags = 0;
   p->iId = m_iId = WEAPON_MP5; // Ентайт
   p->iWeight = MP5_WEIGHT; // Значимость по отношению к другим пушкам

   return 1;
}

int CMP5::AddToPlayer( CBasePlayer *pPlayer ) // Добавление игроку
{
   if ( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
   {
     MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
     WRITE_BYTE( m_iId );
     MESSAGE_END();
     return TRUE;
   }
   return FALSE;
}

BOOL CMP5::Deploy( ) // Взятие в руки
{
   return DefaultDeploy( "models/v_9mmAR.mdl", "models/p_9mmAR.mdl", MP5_DEPLOY, "mp5" );
}


void CMP5::PrimaryAttack() // Основная атака
{
   // don't fire underwater // Не стрелять под водой
   if (m_pPlayer->pev->waterlevel == 3) // Если чувак под водой
   {
     PlayEmptySound( ); // Играть звук невозможности стрелять
     m_flNextPrimaryAttack = 0.15; // Время через которое можно опять стрелять
     return;
   }

   if (m_iClip <= 0) // Провека на наличие патронов
   {
     PlayEmptySound(); // Играть звук невозможности стрелять
     m_flNextPrimaryAttack = 0.15; // Время через которое можно опять стрелять
     return;
   }

   m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
   m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH;

   m_iClip--;


   m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH;

   // player "shoot" animation
   m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); // Анимация стрельбы игроком

   Vector vecSrc = m_pPlayer->GetGunPosition( );
   Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
   Vector vecDir;

   #ifdef CLIENT_DLL
     if ( !bIsMultiplayer() )
   #else
     if ( !g_pGameRules->IsMultiplayer() ) // Если мультиплеер
   #endif
     {
       // optimized multiplayer. Widened to make it easier to hit a moving player // Облегчение попадания в движущегося игрока
       vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_6DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
     }
     else // Если сингл
     {
       // single player spread // Стандартное попадание
       vecDir = m_pPlayer->FireBulletsPlayer( 1, vecSrc, vecAiming, VECTOR_CONE_3DEGREES, 8192, BULLET_PLAYER_MP5, 2, 0, m_pPlayer->pev, m_pPlayer->random_seed );
     }

   int flags;
   #if defined( CLIENT_WEAPONS )
     flags = FEV_NOTHOST;
   #else
     flags = 0;
   #endif

   PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usMP5, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 );

   if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) // Если нет патронов
     // HEV suit - indicate out of ammo condition // Костюм говорит что нужны патроны
     m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);

   m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1; // Когда следующий выстрел

   if ( m_flNextPrimaryAttack < UTIL_WeaponTimeBase() )
     m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1; // Когда следующий выстрел

   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
}



void CMP5::SecondaryAttack( void ) // Второстепенная атака
{
   // don't fire underwater // Не стрелять под водой
   if (m_pPlayer->pev->waterlevel == 3)
   {
     PlayEmptySound( );
     m_flNextPrimaryAttack = 0.15;
     return;
   }

   if (m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType] == 0) // Проверка на наличия второго типа патронов
   {
     PlayEmptySound( );
     return;
   }

   m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
   m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH;

   m_pPlayer->m_iExtraSoundTypes = bits_SOUND_DANGER;
   m_pPlayer->m_flStopExtraSoundTime = UTIL_WeaponTimeBase() + 0.2;

   m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType]--;

   // player "shoot" animation
   m_pPlayer->SetAnimation( PLAYER_ATTACK1 );

   UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );

   // we don't add in player velocity anymore.
   CGrenade::ShootContact( m_pPlayer->pev,
   m_pPlayer->pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_forward * 16,
gpGlobals->v_forward * 800 );

   int flags;
   #if defined( CLIENT_WEAPONS )
     flags = FEV_NOTHOST;
   #else
     flags = 0;
   #endif

   PLAYBACK_EVENT( flags, m_pPlayer->edict(), m_usMP52 );

   m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1; // Следующая основная атака
   m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1; // Следующая второстепенная атака
   m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5;// idle pretty soon after shooting.

   if (!m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType])
   // HEV suit - indicate out of ammo condition // Костюм говорит что нет пуль
   m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0);
}

void CMP5::Reload( void ) // Перезарядка
{
   if ( m_pPlayer->ammo_9mm <= 0 )
     return;

   DefaultReload( MP5_MAX_CLIP, MP5_RELOAD, 1.5 );
}


void CMP5::WeaponIdle( void ) // Бездействие
{
   ResetEmptySound( );

   m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );

   if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
     return;

   int iAnim;
   switch ( RANDOM_LONG( 0, 1 ) )  // Рандомное чило или 1, или 0 для выбора анимации
   {
     case 0:  // Если 0
       iAnim = MP5_LONGIDLE; // Длинная анимация бездействия
       break;

     default: // Если 1
     case 1:
       iAnim = MP5_IDLE1; // Анимация бездействия
       break;
   }

   SendWeaponAnim( iAnim );

   m_flTimeWeaponIdle = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); // how long till we do this again.
}



class CMP5AmmoClip : public CBasePlayerAmmo // Патроны
{
   void Spawn( void )
   {
     Precache( );
     SET_MODEL(ENT(pev), "models/w_9mmARclip.mdl");
     CBasePlayerAmmo::Spawn( );
   }
   void Precache( void )
   {
     PRECACHE_MODEL ("models/w_9mmARclip.mdl");
     PRECACHE_SOUND("items/9mmclip1.wav");
   }
   BOOL AddAmmo( CBaseEntity *pOther )
   {
     int bResult = (pOther->GiveAmmo( AMMO_MP5CLIP_GIVE, "9mm", _9MM_MAX_CARRY) != -1);
     if (bResult)
     {
       EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
     }
     return bResult;
   }
};
LINK_ENTITY_TO_CLASS( ammo_mp5clip, CMP5AmmoClip );
LINK_ENTITY_TO_CLASS( ammo_9mmAR, CMP5AmmoClip );



class CMP5Chainammo : public CBasePlayerAmmo // Патроны
{
   void Spawn( void )
   {
     Precache( );
     SET_MODEL(ENT(pev), "models/w_chainammo.mdl");
     CBasePlayerAmmo::Spawn( );
   }
   void Precache( void )
   {
     PRECACHE_MODEL ("models/w_chainammo.mdl");
     PRECACHE_SOUND("items/9mmclip1.wav");
   }
   BOOL AddAmmo( CBaseEntity *pOther )
   {
     int bResult = (pOther->GiveAmmo( AMMO_CHAINBOX_GIVE, "9mm", _9MM_MAX_CARRY) != -1);
     if (bResult)
     {
       EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
     }
     return bResult;
   }
};
LINK_ENTITY_TO_CLASS( ammo_9mmbox, CMP5Chainammo );


class CMP5AmmoGrenade : public CBasePlayerAmmo // Патроны
{
   void Spawn( void )
   {
     Precache( );
     SET_MODEL(ENT(pev), "models/w_ARgrenade.mdl");
     CBasePlayerAmmo::Spawn( );
   }
   void Precache( void )
   {
     PRECACHE_MODEL ("models/w_ARgrenade.mdl");
     PRECACHE_SOUND("items/9mmclip1.wav");
   }
   BOOL AddAmmo( CBaseEntity *pOther )
   {
     int bResult = (pOther->GiveAmmo( AMMO_M203BOX_GIVE, "ARgrenades", M203_GRENADE_MAX_CARRY ) != -1);

     if (bResult)
     {
       EMIT_SOUND(ENT(pev), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM);
     }
     return bResult;
   }
};
LINK_ENTITY_TO_CLASS( ammo_mp5grenades, CMP5AmmoGrenade );
LINK_ENTITY_TO_CLASS( ammo_ARgrenades, CMP5AmmoGrenade );


Die Ähnlichen1. Увеличение количества мяса от взрыв - Увеличение количества мяса от взрывов людей или инопланетян.
2. Water Splash - Добавляем брызги при выстреле по воде
Ссылки на объект
Полная ссылка на текущем языке :
Короткая ссылка :
Ссылка на превью-картинку :
Ссылка на картинку в полном размере :
Ссылка для вашего форума или сайта
BB код ссылка:
BB код ссылка с картинкой :
BB код картинки :
HTML код ссылка:
HTML код ссылка с картинкой :
HTML код картинки :
Sie können nicht kommentieren, da Sie sind nicht registriert.
    Z7 1911 (4 skins)
    The SpecialistsZ7 1911 (4 skins)
    Gold Colts M1911A1 SD
    The SpecialistsGold Colts M1911A1 SD
    SVI Infinity Match Black
    The SpecialistsSVI Infinity Match Black
    Colt Anaconda Akimbo (4 skins)
    The SpecialistsColt Anaconda Akimbo (4 skins)