Воскресенье, 22.12.2024, 10:59
Crazy Arts DoAm
                Вы вошли как Гость | Группа Гости |  RSS Приветствую Вас Гость
Главная | Каталог статей | Мой профиль | Выход | Регистрация | Вход
Меню сайта

Наши друзья
HLDM RMF TeaM HLBase Half-Life Страйдеры Half-Life: Confession Все для игр VALVE

Форма входа

Категории раздела
HL SDK [9]
Всё о ХЛ СДК
HL Source SDK [2]
Всё о кодинге под Сойсом
Маппинг HL [0]
Маппинг CS [1]
Маппинг под соусом(HL2, CSS, ....) [2]
Моделинг [0]
Текстуринг [0]
Серверы [2]

Поиск

Мини-чат

Наш опрос
За кого вы больше играете в ХЛ2ДМ?
Всего ответов: 17
Хотите видеть ещё опросы?
Пишите в Предложения в форуме

Главная » Статьи » Наши статейки » HL SDK

Добавление в HL1 пулемёта SAW
Итак, прежде всего....
Да, скачаем файл 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`овские. - вроде всё

Категория: HL SDK | Добавил: Админко (05.08.2009)
Просмотров: 2121 | Комментарии: 3 | Рейтинг: 5.0/1 |
Всего комментариев: 3
3 Админко  
0
Да и ещё - для того, чтобы была отдача - вот этот код в PrimaryAttack вставляем:
float flZVel = m_pPlayer->pev->velocity.z;
m_pPlayer->pev->velocity = m_pPlayer->pev->velocity - gpGlobals->v_forward * 100;
m_pPlayer->pev->velocity.z = flZVel;
Должно отбрасывать.... happy

1 F3λR4iK  
0
жесть!

2 Админко  
0
Не спорю.... biggrin biggrin

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

Сообщения:

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!

Статистика

Онлайн всего: 1
Гостей: 1
Юзеров: 0

GeoIP

Наши баннеры

Сайт CrazyArts

[ Получить код баннера]

Copyright CrazyArts © 2024 This site is using individual dizigne called CombineDiz, made by MadKing, CrazyArts in 2009 year