Звук издается игроком, но меня смущает то, что в случае мультиплеера этот звук будет слышен всем игрокам, а нужно чтобы его слышал только клиент. Как это сделать?
Aynekko писал: нужно чтобы его слышал только клиент
C++ Source Code:
gEngfuncs.pfnPlaySoundByName
gEngfuncs.pfnPlaySoundByIndex
gEngfuncs.pfnPlaySoundByNameAtLocation
gEngfuncs.pfnPlaySoundVoiceByName
gEngfuncs.pfnPlaySoundByNameAtPitch
Целая куча клиентских функций для воспроизведения звука. Не знаю, какие точно из них есть в ксаше. Но связка мессага на клиент + воспроизведение на клиенте точно поможет скрыть звук от других игроков.
Aynekko писал: Звук издается игроком, но меня смущает то, что в случае мультиплеера этот звук будет слышен всем игрокам, а нужно чтобы его слышал только клиент. Как это сделать?
в энгфунксах есть BUILD_SOUND_MSG, через него можно посылать звуки, которые услышит только один игрок.
Я его под ксашем толком не проверял, но должно работать.
блин а чо вначале вычисляется деление-умножение как в школе? Я думал комп втупую по порядку идёт, ну кроме скобок. Или это может отличаться в более новых студиях?
Можно ли узнать view origin игрока на сервере? Мне нужно сделать там проверку с использованием именно view оригина, а не самого оригина игрока. Связано это с триггер_камерой. А она делает SET_VIEW и все. Может как-то можно достать с клиента это?
Добавлено 04-08-2021 в 13:53:
Пробовал делать копию оригина в vuser4, а он почему-то все равно всегда нулевой. Я по ксашмоду прошелся, он там где-то используется. Можно конечно воткнуть еще один entvars но это уже крайние меры
Если бы было все так просто. Я этот EyePosition выводил в prethink игрока, координаты остаются теми же, когда я включаю камеру. Ведь оригин игрока-то не меняется, только взгляд.
Сейчас попробовал в самой триггер_камере брать ее индекс, давать это число игроку, а дальше считается нужное мне расстояние от энтити по этому индексу (то есть как раз там где сейчас взгляд). Вот только после сейврестора индекс поменялся, так что опять мимо
Добавлено 04-08-2021 в 15:34:
Попробовал передавать игроку вместо индекса оригин энтити из которой смотрим - уже почти то, что нужно. При переключении на другую камеру правда он не сбрасывается, т.к. сброс идет в stop. Надо подумать.
Aynekko писал: Мне нужно на сервере сделать проверку расстояния между энтитей и камерой игрока
Заведи в классе игрока какой-нибудь EHANDLE m_hViewEnt;
внутри вызова UTIL_SetView записывай туда объект камеры и дальше, если он не равен нулю спокойно ищи дистанцию. Ну и в сейв не забудь сохранить.
Спасибо. Я примерно так и сделал, но не в сетвью, а прямо в камере. Копирую в игрока оригин и имя камеры.
Параллельно получился еще и фикс - камера теперь проверяет, какое имя камеры у игрока записано (когда она работает), если не совпало - выключается. А раньше как было - можно активировать одну камеру, затем вторую, а затем выключить вторую. А первая как think'ала, так и будет think'ать! Вот так вот
В общем, сделал что хотел и даже больше.
Ох, у меня к этим вьюриджинам и вьюанглсам давняя нелюбовь. Вроде бы в коде всё прозрачно, а на выходе имеем не то, что хотели. Но я всё-таки разобрался. Даже написал особую энтить, которая захватывает взгляд игрока. Для катсцен от первого лица, чтобы игрок смотрел туда, куда задумано. Осталось добавить этой энтите функционал, чтобы она захватывала управление и вела игрока по патч_корнерам, и будет прямо как в современных играх. Побочкой появился код для заглядывания в мониторы. Если буду делать транспорт (есть пара мыслей где его применить), то это же будет кодом входа/выхода из него.
Цитата:
Aynekko писал: А первая как think'ала, так и будет think'ать!
При деактивации камеры делается вызов SET_VIEW на игрока и m_flReturnTime камеры приравнивается к gpGlobals->time. Можно там в условие сунуть SetThink(NULL), чтобы не тчинкала.