HLFX.Ru Forum Страницы (5): « 1 2 3 [4] 5 »
Показать все 67 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Кодинг оружия (https://hlfx.ru/forum/showthread.php?threadid=3457)


Отправлено Lev 08-08-2012 в 08:03:

Такой вопрос - как можно сделать, чтоб во время перезарядки любого оружия, нельзя было переключиться на другое, до тех пор, пока перезарядка не завершится - то есть ни через меню оружия, ни через кнопку Q?


Отправлено HAWK0044 08-08-2012 в 08:11:

Lev
Идёшь в player.cpp находишь там

C++ Source Code:
void CBasePlayer::SelectItem(const char *pstr)

и в самом начале после
C++ Source Code:
if (!pstr)
  return;

вставляешь это
C++ Source Code:
1
if(m_pActiveItem)
2
{
3
  CBasePlayerWeapon *wpn = (CBasePlayerWeapon*)m_pActiveItem;
4
 
5
  if(wpn && wpn->m_fInReload)
6
    return;
7
 
8
}


потом ищешь
C++ Source Code:
void CBasePlayer::SelectLastItem(void)

там после
C++ Source Code:
1
if (!m_pLastItem)
2
{
3
  return;
4
}
5
 
6
if ( m_pActiveItem && !m_pActiveItem->CanHolster() )
7
{
8
  return;
9
}

вставляешь
C++ Source Code:
1
if(m_pActiveItem)
2
{
3
  CBasePlayerWeapon *wpn = (CBasePlayerWeapon*)m_pActiveItem;
4
 
5
  if(wpn && wpn->m_fInReload)
6
    return;
7
 
8
}


Отправлено Lev 08-08-2012 в 08:48:

Спасибо


Отправлено Lev 23-08-2012 в 08:10:

В атаке у любого ствола есть параметр отвечающий за частоту вызова этой функции - например

C++ Source Code:
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.1;


Как сделать, чтобы при одном нажатии на мышь производился один выстрел - и новый можно было сделать только при повторном нажатии?


Отправлено PLut 23-08-2012 в 08:32:

Lev По форуму бы поискал...

В начало функции стрельбы.

C++ Source Code:
if(!(m_pPlayer->m_afButtonPressed & IN_ATTACK))
  return;


А промежуток между выстрелами сделай меньше, например было 0.1, сделай 0.01.

__________________
Base Defense on Steam, ModDB


Отправлено Lev 23-08-2012 в 08:36:

Если 0.01 - то можно как из автомата стрелять)


Отправлено qpAHToMAS 23-08-2012 в 08:40:

Он хочет пистолет как в CS, а не как Glock в HL, который при +attack стреляет пока не кончатся патроны (а в CS будет лишь 1 выстрел).


Отправлено Lev 23-08-2012 в 08:45:

Да не только - мне ещё нужно третью атаку сделать (в Параное уже две есть) - хочу переключать режим стрельбы. Кстати - где кнопку можно забиндить для этого?


Отправлено qpAHToMAS 23-08-2012 в 08:49:

Цитата:
Lev писал:
где кнопку можно забиндить для этого?

code:
bind "mouse3" "+attack3"

Иначе говоря, нажатие на колесико мыши.


Отправлено Lev 23-08-2012 в 09:13:

Да я проще хотел сделать - чтобы не писать полноценную третью атаку - создать переменную, забиндить на неё кнопку - если нажатать один раз то один режим огня, если ещё раз - то следующий


Отправлено KiQ 23-08-2012 в 09:30:

Lev на импульс сделай

__________________
-Brain is dead-


Отправлено Lev 23-08-2012 в 09:39:

Это как?

Добавлено 23-08-2012 в 15:39:

Вот к примеру переменная

int firemode


Отправлено KiQ 23-08-2012 в 09:47:

емнип, в player.cpp в свитче импульсных команд ставишь свое число (например, 555) и пишешь, допустим:

C++ Source Code:
firemode = (firemode == 0) ? 1 : 0;


потом биндишь на любую клавишу impulse 555

Добавлено 23-08-2012 в 13:47:

P.S. только не в Cheat Commands, иначе будет работать только с sv_cheats 1

__________________
-Brain is dead-


Отправлено Lev 23-08-2012 в 10:55:

Фигня какая-то - всё сделал, но клавиша не работает. Написал в конвиге

bind "b" "impulse 45" - бестолку, хотя если через консоль - то всё работает(sv_cheats 1 не ввожу - просто impulse 45)

Добавлено 23-08-2012 в 16:55:

Да - ещё одно - это значение будет меняться глобально - то есть для всего оружия сразу - можно как-нибудь сохранять это значение для каждой пушки отдельно? Там, завести новую переменную, или ещё как


Отправлено Lev 23-08-2012 в 15:04:

Так - с клавишей разобрался. Теперь хочу вывести сообщение на экран - из CBasePlayer::ImpulseCommands всё выводится нормально

C++ Source Code:
1
case 45:
2
  if ( firemode == 1 )
3
  {
4
    firemode = 0;
5
    UTIL_ShowMessage("#FIRE_MODE_SINGLE", this );
6
  }
7
else
8
{
9
  firemode = 1;
10
  UTIL_ShowMessage("#FIRE_MODE_AUTO", this );
11
}
12
break;
- но мне нужно делать это из каждого ствола отдельно. Написал функцию - но не работает
C++ Source Code:
1
extern int firemode;
2
 
3
void CAPS::Shotmode()
4
{
5
  if (firemode == 0)
6
    UTIL_ShowMessage("#FIRE_MODE_SINGLE", m_pPlayer );
7
 
8
  if (firemode == 1)
9
    UTIL_ShowMessage("#FIRE_MODE_AUTO", m_pPlayer );
10
}
- хотя если вызвать UTIL_ShowMessage из любой другой функции в классе оружия - то всё работает


Временная зона GMT. Текущее время 01:45. Страницы (5): « 1 2 3 [4] 5 »
Показать все 67 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024