Как услышать войс вражеской команды в демке CS2
Услышите ли вы врагов в демке CS2, решает то, что записал сервер, а не ваша консоль. В каких демках есть их голос и какая маска нужна для одной стороны.
Во время матча вы не слышите противника. Это не мьют на вашей стороне - это сервер вообще не отправляет вам их голос. Демка это решение не отменяет, она его воспроизводит.
Поэтому вопрос распадается на два, и только второй касается консольных команд: попал ли голос противника в этот файл вообще, и если да, как выделить их из десяти?
Выделить одного игрока - более простая версия той же задачи, её разбирает статья как услышать войс в демке CS2, а остальная часть этой страницы про случай посложнее.
Нужно только число? Загрузите демку в калькулятор войса для демок CS2: он читает таблицу слотов и подписывает каждого игрока его командой, так что "другую пятёрку" вы выбираете кликом, а не угадываете.
Короткий ответ
Поставьте обе переменные на -1 перед воспроизведением, и вы услышите всех, кто есть в файле, включая противника:
tv_listen_voice_indices -1
tv_listen_voice_indices_h -1
Если противника после этого всё равно не слышно, дело не в пропущенной команде. Их голоса нет в демке, а остальная часть страницы о том, почему так и какой файл взять вместо этого.
Почему противника изначально нет
Голос в Counter-Strike маршрутизируется по командам. Переключатель - sv_alltalk, и что происходит при его включении, игра сама описывает так: игроки слышат голосовую связь всех остальных игроков без ограничений по командам.3 Соревновательные матчи идут с выключенным alltalk, и в этом весь смысл: вы не должны слышать колл по плэнту от тех, кто этот плэнт берёт.
Теперь доведите это до записи. POV-демка, та, что вы делаете сами через record, - это запись сетевого потока, который получал ваш клиент. При выключенном alltalk голосовых пакетов противника в этом потоке не было. Потом включать нечего, потому что ничего и не пришло.
SourceTV тоже слушатель, и в этом весь механизм
Демки, которые вы скачиваете, - запись не вашего клиента, а SourceTV. Отсюда тот же вопрос уровнем выше: что было разрешено слышать SourceTV?
В CS2 ответ по умолчанию - ничего. SourceTV не записывает голосовой чат игроков, если на сервере не стоит sv_alltalk 1, а комьюнити-плагин, созданный чтобы это исправить, работает так: он меняет голосовые флаги самого SourceTV, чтобы тот слышал голоса всех игроков.2 Не добавляет функцию записи, а выводит SourceTV из-под правил маршрутизации по командам, которые не пускали к нему половину матча.
В этом и всё объяснение, почему в демках FACEIT есть обе команды, а в вашей демке матчмейкинга нет.
В каких демках противник действительно есть
| Источник демки | Голос противника в файле? |
|---|---|
Ваша собственная POV-запись (record) | Нет - вашему клиенту его не отправляли |
| Матчмейкинг Valve | Нет - в файле вообще нет голоса |
| Premier Valve | Нет - то же самое |
| FACEIT | Да |
| ESEA и другие лиги | Да, если лига записывает войс |
| Комьюнити-сервер с SourceTV | Только если сервер это включил |
Две строки про Valve заслуживают отдельного пояснения, потому что причина там другая, чем в первой строке. В демках матчмейкинга и Premier нет вообще никаких голосовых данных: инструмент, который вытаскивает голосовые дорожки из демок Counter-Strike, держит это предупреждение в самом верху README, потому что из ММ-демки извлекать нечего.1 Вашей собственной команды там тоже нет. Дорожка пустая, так что маршрутизация по командам тут вообще ни при чём.
Так что если хотите разобрать, что коллила другая сторона, нужен файл этого матча с FACEIT, а не от Valve.
Как слышать только противника
-1 даёт вам всех десятерых, перебивающих друг друга: для одного момента сойдёт, а для разбора того, как соперник коллит посреди раунда, бесполезно. Чтобы выделить сторону, число придётся собрать самому.
Значение - это битовое поле: один бит на слот игрока, младшие 32 бита в tv_listen_voice_indices и старшие 32 в tv_listen_voice_indices_h. Именно так их делят инструменты для демок, когда генерируют эти команды за вас.4 В 5v5 задействована только младшая половина, так что вторая команда остаётся на 0, если только вы не включаете всех.
Пять слотов подряд дают два числа, которые стоит запомнить:
| Слоты | Биты | Значение |
|---|---|---|
| Первая пятёрка | 1 + 2 + 4 + 8 + 16 | 31 |
| Вторая пятёрка | 32 + 64 + 128 + 256 + 512 | 992 |
| Все десять | обе строки | 1023 |
992 - это противник, только если противник действительно занимает вторую пятёрку слотов, а это ничем не гарантировано. Порядок слотов берётся из порядка сущностей игроков, записанного в демке, и никак не связан ни с таблицей счёта, ни с командами. Когда в какой-то демке стороны случайно сгруппированы, 992 работает и начинает казаться правилом; а на демке, где двое ваших тиммейтов попали во вторую половину, вы потратите двадцать минут в уверенности, что команда сломана.
Проверьте, прежде чем доверять. Вручную это значит перебрать слоты и посмотреть, кто появляется:
spec_player 1
spec_player 2
spec_player 3
Игрок в spec_player N - это бит N-1, так что слот 6 даёт 32. Или пропустите перебор: калькулятор читает таблицу слотов прямо из демки, подписывает каждого игрока ником и командой, а кнопки Все T и Все CT собирают маску для целой стороны в один клик.
Командные алиасы врут после смены сторон
Если вы пользуетесь CS Demo Manager, в нём есть алиасы voice_ct и voice_t, плюс voice_STEAMID64 для одного игрока.5 Они удобные, но с одним острым углом: командные алиасы следуют за стартовой стороной каждого игрока, а не за той, за которую он играет сейчас.5
В большинстве случаев это мелочь. Здесь же это главное, потому что "противник" - движущаяся цель: после смены сторон voice_t выбирает пятерых, которые начинали за T, а теперь играют за CT. Половину матча алиас означает противоположное тому, что вы имели в виду. У маски, собранной по реальным слотам, этой проблемы нет, потому что слоты при смене сторон не меняются.
Как отличить "голоса нет" от "только одна сторона"
Стоит потратить тридцать секунд, прежде чем делать выводы, потому что у этих двух проблем разные решения.
Поставьте обе переменные на -1, запустите демку и перемотайте на конец раунда - самый разговорчивый момент в любом матче. Дальше:
- Никого не слышно вообще. В файле нет голосовой дорожки. Проверьте, кто записал демку; если это матчмейкинг или Premier, вот и ответ, и никакая команда его не изменит.
- Слышно пятерых, и все они ваши. Голосовая дорожка есть, но SourceTV получал только одну сторону. Это следствие настроек сервера, а не воспроизведения.
- Слышно десятерых. Обе стороны на месте. Теперь собирайте маску.
Общий чат - вторая запись
В файле есть не только голос:
tv_relaytextchat 2
2 показывает всё, включая общий чат, 0 скрывает чат полностью, и FACEIT выдаёт эту команду вместе с двумя голосовыми, когда объясняет игрокам, как разбирать демку.6 Здесь она особенно к месту: сообщения в общем чате во время матча шли обеим командам, поэтому они сохраняются в демках, где голоса противника нет. Когда голосовая дорожка односторонняя, лог чата часто единственное, что у вас есть от другой стороны.
Вводите все три команды до playdemo, а не во время воспроизведения.
Они каждый раз сбрасываются
Обе переменные возвращаются к 0, когда CS2 закрывается. Это ловушка "вчера вечером же работало": ничего не сломалось, просто сессия снова началась с тишины. Держите команды там, откуда их можно вставить.
В каком порядке делать
- Проверьте, кто записал демку. FACEIT или лига, а не матчмейкинг и не Premier.
- Вставьте
tv_listen_voice_indices -1,tv_listen_voice_indices_h -1иtv_relaytextchat 2до запуска демки. - Убедитесь, что слышите десять голосов, а не пять.
- Выясните, какие слоты занимает другая сторона, и сложите значения их битов.
- Поставьте
tv_listen_voice_indicesна это число,_hоставьте на0и запустите заново.
Шаги 3 и 4 калькулятор войса для демок CS2 берёт на себя: загрузите демку, посмотрите команды в списке слотов, нажмите Все T или Все CT и скопируйте две строки.
Шаг 1 решается сам собой, когда демка с FACEIT, который записывает обе стороны, - там важно не ошибиться только в одном: какой файл остаётся после матча на FACEIT.
Источники
Каждое число в этой статье подтверждено источником ниже. Утверждения, которые не удалось подтвердить, убраны, а не смягчены.
- Рецензируемый источникAkiVer
That Valve matchmaking demos contain no voice audio data at all, stated as a standing warning by the author of the tool that extracts voice tracks from CS:GO and CS2 demos.
- Рецензируемый источникb0ink
That CS2's SourceTV does not record player voice chat by default unless the server has sv_alltalk 1, and that the fix is a plugin that modifies SourceTV's own voice flags so it hears the voices of all players.
- Публикация в СМИFUNPLAY
The convar's own description string as shipped in CS2 - that sv_alltalk lets players hear all other players' voice communication with no team restrictions - which is the behaviour that is off during a normal match.
- ПервоисточникCS Demo Manager
That the value is one bitmap split into two 32-bit halves, the low one for ids 0 to 31 and the high one for ids 32 to 63, as implemented by the demo tool that generates these commands.
- ПервоисточникCS Demo Manager
The voice_ct, voice_t and voice_STEAMID64 aliases, and that the team aliases refer to each player's starting side rather than their current one.
- ПервоисточникFACEIT
The exact three-command recipe FACEIT tells players to paste when reviewing a FACEIT demo, and that FACEIT demos carry the voice comms that recipe unmutes.
Темы
Инструменты из статьи
- Калькулятор войса для демок CS2 - Слушайте нужных игроков в демке CS2 или FACEIT - загрузите демку, игроки подставятся сами, а вы получите команды tv_listen_voice_indices.
- CS2 Crosshair Code Decoder - Decode a CSGO-xxxxx crosshair share code into cl_crosshair console commands.
- CS2 Sensitivity Converter - Convert mouse sensitivity between CS2, Valorant, Apex and more, with eDPI and cm/360.
- SteamID Converter - Convert between SteamID64, STEAM_0:Y:Z, SteamID3 [U:1:W], account ID and profile URL.
Новые инструменты на почту
Новые инструменты и иногда подробный разбор, примерно раз в месяц. Без спама, адрес никому не передаем, отписка в один клик.