Перейти к содержимому


Фотография

Принудительная смена активного слота с оружием или предметом


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 12

#1 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 11 Ноябрь 2020 - 15:28

Есть ли возможность в игре как-то принудительно сменить активный слот? Например, чтобы в руки взялась Аптечка или Таблетки, когда они есть в слоте.

 

SetEntPropEnt(client, Prop_Send, "m_hActiveWeapon" ...) - не работает. Точнее работает, но в случае с Таблетками или Аптечками слот просто становится активный, но визуально в руках остается оружие. Данный способ работает только на переключение Основного, второстепенного оружия и гранат.

  • Elllymn это нравится

#2 anarki1980

anarki1980

    Участник

  • Пользователь
  • PipPip
  • 147 сообщений

Отправлено 11 Ноябрь 2020 - 17:34

как хак накрайняк можно удалить таблетки из инвентаря и выдать снова - возьмутся в руки



#3 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 12 Ноябрь 2020 - 14:19

как хак накрайняк можно удалить таблетки из инвентаря и выдать снова - возьмутся в руки

 

Таблетки возможно, а аптечка нет.



#4 BHaType

BHaType

    Пользователь

  • Пользователь
  • PipPipPip
  • 358 сообщений

Отправлено 13 Ноябрь 2020 - 1:25

Не проверял

 

Скрытый текст

  • 8rutu5 это нравится

#5 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 13 Ноябрь 2020 - 17:20

Спасибо. Я нашел способ как это сделать. Чуть позже постараюсь сюда выложить.
  • BloodyBlade это нравится

#6 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 25 Ноябрь 2020 - 19:18

EquipPlayerWeapon ?



#7 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 27 Ноябрь 2020 - 18:48

Если выдать аптечку или таблетки, активный слот не изменится.


  • dragokas это нравится

#8 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 03 Май 2021 - 21:29

Спасибо. Я нашел способ как это сделать. Чуть позже постараюсь сюда выложить.

 

Ради интереса, что это в итоге был за способ?



#9 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 04 Май 2021 - 17:30

Ради интереса, что это в итоге был за способ?

Короче код там как всегда в моем стиле - геморный, но если интересен сам алгоритм, то насколько мне помнится, при выдаче аптечки я делаю следующие действия:
 

1. Сначала делаю хук SDKHook_WeaponSwitch

 

2. В SDKHook_WeaponSwitch указываю, что, если новым предметом взятым в руки является любое оружие или гранаты, то return Plugin_Handled

 

3. Выбрасываю предметы из всех слотов, кроме того, который мне нужен (таблетки или аптечки), так как на этих слотах автопереключения на предмет не идет при выдаче. (Сохраняя ID выброшенного оружия и гранат, само собой).

 

4. Возвращаю все выброшенные предметы по их сохраненному ID, тут в дело вступает как раз WeaponSwitch, который блочит автосмену и в руках в итоге мы так и держим аптечку или таблетки.

 

5. Делаю анхук SDKHook_WeaponSwitch

 

P.S. У данного способа один минус - нужно доп.условия делать в случае, если у тебя было два пистолета. Вернется только один. Мне пока лень этот момент проработать, но, когда-нибудь, надеюсь, исправлю.


Сообщение отредактировал 8rutu5: 04 Май 2021 - 17:31


#10 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 04 Май 2021 - 17:38

Да, весьма необычно :) Спасибо за алгоритм, может пригодиться.

 

Кстати, не знаю как в L4D2, но в L4D1, если с пола взять второй пистолет, то хук WeaponSwitch не срабатывает, хотя при этом идёт смена первичной оружки на пистолет. Такой вот баг игры.



#11 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 04 Май 2021 - 18:07

Да, весьма необычно :) Спасибо за алгоритм, может пригодиться.

 

Кстати, не знаю как в L4D2, но в L4D1, если с пола взять второй пистолет, то хук WeaponSwitch не срабатывает, хотя при этом идёт смена первичной оружки на пистолет. Такой вот баг игры.

 

С этими пистолетами вообще мутная тема. Во второй части пробовал через проп делать там было что-то типа isDualWeilded или как-то так, щас лень искать. Он вообще не работает, а вот если значение модельки проверить, там есть для одиночного пистолета и для двойного, то игра определяет, что у тебя 1 или 2 пистолета. Бред, в общем...



#12 dragokas

dragokas

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 792 сообщений

Отправлено 04 Май 2021 - 18:17

Точно не подскажу, надо проверять. Во второй части не знаю как, в L4D1, вроде как через эти флаги проверяется:

#define FL_PISTOL_PRIMARY (1<<6) // Is 1 when you have a primary weapon and dual pistols
#define FL_PISTOL (1<<7) // Is 1 when you have dual pistols
 
int bits = GetEntProp(client, Prop_Send, "m_iAddonBits");
 
if( bits & FL_PISTOL_PRIMARY )
{
// ...
}
if( bits & FL_PISTOL )
{
// ...
}

 

И это ещё попробуй:

int dual = GetEntProp(oldweapon, Prop_Send, "m_hasDualWeapons");

  • 8rutu5 это нравится

#13 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 04 Май 2021 - 18:21

 

Точно не подскажу, надо проверять. Во второй части не знаю как, в L4D1, вроде как через эти флаги проверяется:

#define FL_PISTOL_PRIMARY (1<<6) // Is 1 when you have a primary weapon and dual pistols
#define FL_PISTOL (1<<7) // Is 1 when you have dual pistols
 
int bits = GetEntProp(client, Prop_Send, "m_iAddonBits");
 
if( bits & FL_PISTOL_PRIMARY )
{
// ...
}
if( bits & FL_PISTOL )
{
// ...
}

И это ещё попробуй:

int dual = GetEntProp(oldweapon, Prop_Send, "m_hasDualWeapons");

Спасибо, попробую




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных