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

gameuser425

Участник
Сообщения
30
Реакции
3
Я хочу сделать простой и понятный плагин, для DM мода. Что-бы любой игрок в наблюдении выбрал любого игрока и наблюдал за ним. Ибо после смерти наблюдаемого игрока, наблюдение переходит к убийце...
Я не могу отловить событие когда игрок из наблюдения переключается между игроками. Для того что-бы в момент переключения зафиксировать за кем игрок наблюдает и при спавне наблюдаемого игрока, снова устанавливать наблюдение за ним.
Я делал это на меню... Но это не удобно, да и игроки не понимают для чего оно открывается, ведь есть стандартные инструменты как наблюдать)))
Вот я и решил делать всё без менюшек.
Есть ещё идея! Запретить наблюдение, и создать полностью свою систему наблюдения за игроками, аналог стандартной. Тогда можно будет ловить любые события, но зачем пилить новый колхоз, если всего-лишь нужно перехватить событие нажатия мыши когда игрок в наблюдении.
Через "OnPlayerRunCmd" не реагирует. Заметил что когда в игре ставишь любую другую клавишу на действие ( bind "MOUSE1" "+attack" ) Мышью уже не сможешь переключаться между игроками. То-есть событие привязано к этому действию.
 

_wS_

Участник
Сообщения
383
Реакции
760
Хукнуть команды вроде можно spec_next/spec_prev/spec_mode. Только этого недостаточно, т.к. например, если наблюдаешь за A и он умирает, то автоматом начинаешь наблюдать за B, при этом spec_.. команды не используются. Ну и это как-то поможет:

PHP:
// client наблюдает за target

int target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
SetEntPropEnt(client, Prop_Send, "m_hObserverTarget", target);
 
Последнее редактирование:

gameuser425

Участник
Сообщения
30
Реакции
3
Хукнуть команды вроде можно spec_next/spec_prev/spec_mode. Только этого недостаточно, т.к. например, если наблюдаешь за A и он умирает, то автоматом начинаешь наблюдать за B, при этом spec_.. команды не используются. Ну и это как-то поможет:

PHP:
// client наблюдает за target

int target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
SetEntPropEnt(client, Prop_Send, "m_hObserverTarget", target);
Спасибо, это то что мне было нужно. Но всё же я не учёл один момент.

C-подобный:
AddCommandListener(GetPlayerButton, "spec_next");

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

Grey83

не пишу плагины с весны 2022
Сообщения
8,558
Реакции
5,055
@Anton173, тебе ещё spec_prev ловить нужно, как минимум.
Сообщения автоматически склеены:

Если не хукается переключение, то видимо придётся юзать что-то типа этого:
 
Сверху Снизу