Пятница, 22.09.2017, 14:35
Приветствую Вас Guest | RSS
Главная страница | Статьи | Регистрация | Вход
Меню сайта

Случайный рисунок

Категории каталога
Туториалы по маппингу (HL2) [68]
Туториалы по маппингу для Half-Life
Туториалы по текстурированию (HL2) [10]
Туторы по текстурированию для Half-Life
Туториалы по моделированию (HL2) [9]
Туторы по моделированию для Half-Life
Туториалы по программированию (HL2) [53]
Туторы по прагроммированию для Half-life
Другие туториалы (HL1 и HL2) [4]
Туторы которые не вошли в другие категории
Half-Life 2 Beta [1]
Статьи о npc и weapon в бете Half-Life 2, а так же мануалы и FAQ.
Туториалы по маппингу (HL1) [14]
Туторы по маппингу для Half-Life 1
Туториалы по текстурированию (HL1) [1]
Туторы по текстурированию для Half-Life 1
Туториалы по моделированию (HL1) [1]
Туторы по моделированию для Half-Life 1
Туториалы по программированию (HL1) [30]
Туторы по программированию для Half-Life 1

Наш опрос
Приводить ли сайт в чувство?
Всего ответов: 700

Начало » Статьи » Туториалы по программированию (HL1)

Добаление пулемёта из HLOF в HL1
Итак, прежде всего....
Да, скачаем файл w-saw.cpp и включим его в серверной проект.
Затем, открываем weapons.cpp
И пишем там примерно 328 строчке(после UTIL_PrecacheOther( "item_longjump" );)
Code
//SAW
  UTIL_PrecacheOther( "ammo_556" );

На 180:

Code
case BULLET_PLAYER_556:

Переходим на район 362 строчки(сразу после блока с python`ом):

Code
#if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD )
  // SAW
  UTIL_PrecacheOtherWeapon( "weapon_saw" );
  UTIL_PrecacheOther( "ammo_556" );
#endif

Теперь открываем weapons.h на 83-82 строчке и пишем:

Code
#define WEAPON_SAW 18//SAW

Дальше на 108-107:

Code
#define SAW_WEIGHT 20//SAW

Затем чуть ниже, после #define _357_MAX_CARRY 240, пишем

Code
#define _556_MAX_CARRY 250//SAW CARTRIGES

На 147 строчке пишем максимальное кол-во патронов в магазине для нашего пулемёта:

Code
#define SAW_MAX_CLIP 100//SAW clip

167:

Code
#define SAW_DEFAULT_GIVE 100

182:

Code
#define AMMO_556_BOXGIVE 100//SAW

Чуть ниже в typedef enum добавим:

Code
BULLET_PLAYER_556, //SAW PLAYER

А на 658-663 строчке добавим новый класс:

Code

class CSAW : public CBasePlayerWeapon
{
public:
  void Spawn( void );
  void Precache( void );
  int iItemSlot( void ) { return 6; }
  int GetItemInfo(ItemInfo *p);
  int AddToPlayer( CBasePlayer *pPlayer );
  void PrimaryAttack( void );
  BOOL Deploy( void );
  void Holster( int skiplocal = 0 );
  void Reload( void );
  void WeaponIdle( void );
  float m_flSoundDelay;

  int m_iShell;
  int m_iLink;

  virtual BOOL UseDecrement( void )
  {  
#if defined( CLIENT_WEAPONS )
  return TRUE;
#else
  return FALSE;
#endif
  }

private:
  unsigned short m_usFireSAW;
};

Откроем теперь skill.h и на 102:

Code
float plrDmg556;//SAW dmg

Откроем player.cpp и зайдём в void CBasePlayer::TabulateAmmo():

Code
ammo_556 = AmmoInventory( GetAmmoIndex( "556" ) );//SAW

Перейдём на 3693:

Code
GiveNamedItem( "ammo_556" );//SAW ammo
  GiveNamedItem( "weapon_saw" );//SAW gun

multiplay_gamerules.cpp(150):

Code
// 556 Round - SAW and Rifle
  gSkillData.plrDmg556 = 23;

gamerules(244):

Code
// 556 Round - SAW
  gSkillData.plrDmg556 = GetSkillCvar( "sk_plr_556_bullet");

game(769):

Code
// 556 Round - SAW
  CVAR_REGISTER ( &sk_plr_556_bullet1 );// {"sk_plr_357_bullet1","0"};
  CVAR_REGISTER ( &sk_plr_556_bullet2 );// {"sk_plr_357_bullet2","0"};
  CVAR_REGISTER ( &sk_plr_556_bullet3 );// {"sk_plr_357_bullet3","0"};

Там же на 308:

Code
// 556 Round SAW
cvar_t sk_plr_556_bullet1 = {"sk_plr_556_bullet1","0"};
cvar_t sk_plr_556_bullet2 = {"sk_plr_556_bullet2","0"};
cvar_t sk_plr_556_bullet3 = {"sk_plr_556_bullet3","0"};

func_break(65):
у последнего оружия в том списке сначала поставьте запятую

Code
"weapon_saw", //26
  "ammo_556" //27

combat.cpp(1568):

Code
case BULLET_PLAYER_556: //SAW
  pEntity->TraceAttack(pevAttacker, gSkillData.plrDmg556, vecDir, &tr, DMG_BULLET); //Saw
  break;

client.cpp(1584):

Code
cd->vuser2.y = pl->ammo_556;//SAW

cbase.h(344):

Code
int ammo_556;//5,56 mm for SAW

stats.cpp(33):

Code
if ( !strcmp( pName, "556" ) )
  return gSkillData.plrDmg556;

ВСЁ с сервером, теперь переходим на КЛИЕНТ и включаем w_saw.cpp в проект.
Открываем теперь ev_hldm.cpp(75):

Code
void EV_FireSAW( struct event_args_s *args );//SAW

На 300:

Code
case BULLET_PLAYER_556: //SAW

На 441:

Code
case BULLET_PLAYER_556:
   
  EV_HLDM_PlayTextureSound( idx, &tr, vecSrc, vecEnd, iBulletType );
  EV_HLDM_DecalGunshot( &tr, iBulletType );
   
  break;

На 960 примерно:

Code
//======================
// SAW START  
// ( 5.56 )
//======================
void EV_FireSAW( event_args_t *args )
{
  int idx;
  vec3_t origin;
  vec3_t angles;
  vec3_t velocity;

  vec3_t vecSrc, vecAiming;
  vec3_t up, right, forward;
  float flSpread = 0.01;

  idx = args->entindex;
  VectorCopy( args->origin, origin );
  VectorCopy( args->angles, angles );
  VectorCopy( args->velocity, velocity );

  AngleVectors( angles, forward, right, up );

  if ( EV_IsLocal( idx ) )
  {
  // Python uses different body in multiplayer versus single player
  int multiplayer = gEngfuncs.GetMaxClients() == 1 ? 0 : 1;

  // Add muzzle flash to current weapon model
  EV_MuzzleFlash();
  gEngfuncs.pEventAPI->EV_WeaponAnimation( SAW_SHOOT, multiplayer ? 1 : 0 );

  V_PunchAxis( 0, -10.0 );
  }
  switch( gEngfuncs.pfnRandomLong( 0, 2 ) )
  {
  case 0:  
  gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/saw_fire1.wav", gEngfuncs.pfnRandomFloat(0.8, 0.9), ATTN_NORM, 0, PITCH_NORM );
  break;
  case 1:  
  gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/saw_fire2.wav", gEngfuncs.pfnRandomFloat(0.8, 0.9), ATTN_NORM, 0, PITCH_NORM );
  break;
  case 2:  
  gEngfuncs.pEventAPI->EV_PlaySound( idx, origin, CHAN_WEAPON, "weapons/saw_fire3.wav", gEngfuncs.pfnRandomFloat(0.8, 0.9), ATTN_NORM, 0, PITCH_NORM );
  break;
  }
  EV_GetGunPosition( args, vecSrc, origin );
   
  VectorCopy( forward, vecAiming );

  EV_HLDM_FireBullets( idx, forward, right, up, 1, vecSrc, vecAiming, 8192, BULLET_PLAYER_556, 0, 0, args->fparam1, args->fparam2 );
}
//======================
// SAW END  
// ( 5.56 )
//======================

ev_hldm.h(18):

Code
BULLET_PLAYER_556, //SAW

Чуть ниже между enum`ами добавим свой enum:

Code
enum saw_e {
  SAW_SLOWIDLE = 0,
  SAW_IDLE2,
  SAW_RELOAD1,
  SAW_RELOAD2,
  SAW_HOLSTER,
  SAW_DRAW,
  SAW_SHOOT,
  SAW_SHOOT2,
  SAW_SHOOT3
};

hl_events.cpp(30):

Code
void EV_FireSAW( struct event_args_s *args );//SAW

А на 86 - среди подобных добавим:

Code
gEngfuncs.pfnHookEvent( "events/saw.sc", EV_FireSAW );//SAW

hl_weapons.cpp(60):

Code
CSAW g_SAW;

А на 635:

Code
HUD_PrepEntity( &g_SAW , &player );

713:

Code
case WEAPON_SAW: //SAW
  pWeapon = &g_SAW;
  break;

885:

Code
player.ammo_556 = (int)from->client.vuser2[1];

Там же на 962:

Code
to->client.vuser2[1] = player.ammo_556;

ХУУУУХХХХ вроде с кодом всё....
Компилим, коли ошибки будут - сначала всё проверьте, всё ли сделали, что написано, и даже если да - прверьте чтобы, например везде case WEAPON_... { .... } а вы наш case засунули внутрь первого, во второе многоточие .... - короче - что бы всё правильно чисто по смыслу и только потом - жаловаться мне

Так стоп, ещё пару штрихов с ресурсами:
Нам нужен saw.sc в папке events, все модели и звуки, связанные с нашим оружием, ну и спрайты следует все заменить на OpFor`овские. - вроде всё

Буду рад хорошим отзывам, всегда Ваш, MadKing.

Источник: http://crazyarts.do.am/publ/1-1-0-10

Категория: Туториалы по программированию (HL1) | Добавил: MadKing (05.08.2009) | Автор: MadKing
Просмотров: 1250 | Комментарии: 1 | Рейтинг: 5.0 |

Всего комментариев: 1
1  
Какой с него прикол если в нем патроны не заканчивается на модели как в ОП

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Кто в Онлайн

Друзья сайта

Баннеры

  Сайт CrazyArts   Black   Сообщество сайтов о Half-Life   Самый   Только   Все   hl2 top 100     Rambler's Top100  

игры
игры

  Каталог сайтов Планета Топ 100 - Planet Top 100       ТОП ЛУЧШИХ ИГРОВЫХ САЙТОВ           Detroit Team Site :: Моды от Detroit Team, видео, новости.   Naruto-kun[Звезда Наруто]  


The idea of dising: Homie7