Обновление CS2 (25 авг. 2026 г.)
В CS2 добавлена экспериментальная система пользовательских HUD для `cs_script`‑карт, расширены API для бомбы и камер, и примерная карта `cs_script` (zoo) обновлена для демонстрации новых возможностей.
Кратко
- Экспериментальная сущность `custom_hud_layout` и API `CustomHudLayout` позволяют скриптам управлять простыми HUD с кнопками, классами и переменными диалога.
- Новые скриптовые хуки для начала/отмены/завершения закладки и обезвреживания, класс `C4`, камера `CSPlayerCamera`, `CSMoveType` и промис‑ориентированный `Instance.Delay` расширяют возможности логики карт.
- Примерная карта `cs_script` (zoo) получила скриптовый приветственный диалог, использующий новый HUD, а шахматная мини‑игра переведена на встроенный `Instance.Delay`.
- Движок, схемы и user message‑протокол обновлены для поддержки событий `CustomHudClicked` и сетевого состояния пользовательских HUD по игрокам.
В очередном обновлении CS2 добавлена экспериментальная система пользовательских HUD для карт на cs_script, расширены скриптовые возможности вокруг бомбы и камер, а официальная примерная карта cs_script («zoo») обновлена, чтобы продемонстрировать новые инструменты.
Экспериментальные пользовательские HUD для карт со скриптами
- Новая сущность
custom_hud_layout: вcsgo.fgdв Hammer появился точечный энтитиcustom_hud_layout, который позволяет авторам карт указывать Panorama XML‑макет, управляемый изcs_script. - Поддерживаемые элементы UI: в документации скриптов указано, что макеты могут содержать базовые панели:
Panelсid,class,hittestLabelсid,class,hittest,textImageсid,class,hittest,src,texturewidth,textureheightButtonсid,classПоддерживается стилизация через CSS; клиентский JS внутри HUD не разрешён.
- Визуальное состояние, управляемое сервером: скрипты теперь могут:
- Переключать CSS‑классы у панелей глобально или для отдельных игроков через
CustomHudLayout.SetHasClass/SetHasClassForPlayer. - Устанавливать переменные диалога (текстовые токены) для отдельных панелей глобально или для игрока через
SetDialogVariableString/SetDialogVariableStringForPlayer. Это даёт возможность реализовать серверно‑управляемые подсказки, таймеры или индикаторы состояния.
- Переключать CSS‑классы у панелей глобально или для отдельных игроков через
- Перехват ввода из HUD:
CustomHudLayout.SetInputCaptureEnabled(playerSlot, enabled)позволяет временно захватить мышь игрока для взаимодействия с UI.IsInputCaptureEnabledсообщает, захвачен ли ввод в данный момент. Пока ввод захвачен, игрок может потерять обычный контроль движения/мыши, пока все захваты не будут сняты. - События кликов через user message: добавлены новый user message
CS_UM_CustomHudClickedи скриптовый колбекInstance.OnCustomHudClicked. Когда игрок нажимает кнопку вCustomHudLayout, сервер получает, какой макет иbuttonIdбыли нажаты — это позволяет реализовать меню, диалоги или мини‑игры целиком на серверной стороне. - Панорама‑файлы для бэкенда HUD: в движке появились два новых Panorama‑макета:
hud/customhuds.xmlиhud/infohudlayouts.xml, которые, по‑видимому, служат каркасом для внутренней стороны пользовательских макетов. Игроки, скорее всего, не увидят новый HUD по‑умолчанию, но эти файлы необходимы для работы функциональности. - Экспериментальный статус: API помечено как
@experimentalи может меняться. Разработчикам серьёзных проектов стоит ожидать возможных изменений в будущих сборках.
Обновления скриптинга для бомбы, камер и движения
Изменения в content/csgo/maps/editor/zoo/scripts/point_script.d.ts расширяют возможности cs_script для кастомных карт:
- Асинхронный таймер на Promise:
Instance.Delay(delay: number): Promise<void>— встроенная асинхронная задержка. Это заменяет самописную очередь таймеров в шахматном скрипте зоопарка и упрощает длительные последовательности.
- Более подробные события жизненного цикла бомбы:
- Новые колбеки разделяют взаимодействия с бомбой на фазы начала/отмены/завершения:
OnBombPlantStart,OnBombPlantAbort,OnBombPlantOnBombDefuseStart,OnBombDefuseAbort,OnBombDefuse, а такжеOnBombExplode
- Введены типы
BombPlantEventиBombDefuseEvent, некоторые поля помечены как deprecated для будущей чистки. Это позволит скриптам точнее реагировать на частичные закладки/обезвреживания — например, для обучающих подсказок или пользовательских условий победы.
- Новые колбеки разделяют взаимодействия с бомбой на фазы начала/отмены/завершения:
- API для C4:
- Новый скриптовый класс
C4(наследуетCSWeaponBase) включает:GetPlantStartTime()/GetPlantFinishTime()AbortPlant()
- У
CSPlayerPawnпоявилсяGetC4()для получения C4 у игрока иGetDefuseTarget()для доступа к бомбе, которую он обезвреживает. Эти инструменты пригодятся для продвинутых тренировочных карт и режимов, связанных с бомбой.
- Новый скриптовый класс
- Хуки состояния игрока и UI:
CSPlayerPawn.IsBuyMenuOpen()сообщает, открыт ли у игрока магазин.CSPlayerPawn.GetCamera()возвращаетCSPlayerCameraдля каждого игрока.
- Новая сущность для управления камерой:
CSPlayerCamera— экспериментальная скриптовая сущность, представляющая вид игрока.- Скрипты могут включать/отключать её и вызывать
SetIsControllingAngles(controlling: boolean). Когда контроль углов не захвачен, игрок может свободно смотреть вокруг из позиции камеры. Это даёт потенциал для более качественных скриптовых камер (катсцены, повторы, обучающие ракурсы).
- Помощники по движению и интерполяции:
- Новый
CSMoveTypeenum позволяет инспектировать или менять способ передвижения сущности (walk, fly, noclip, ladder и т.д.) черезGetMoveType()иSetMoveType(). Move({...})добавлен как соседTeleportи описан как перемещение сущности без сброса клиентской истории интерполяции — это позволяет более плавно визуально перемещать объекты.
- Новый
- Утилиты и уточнения типов:
Instance.IsDedicatedServer()помогает разделять логику для listen‑ и dedicated‑серверов.- Несколько полей событий (например, в
OnPlayerChat,OnBulletImpact,ModifyPlayerDamageEvent.inflictorи др.) сделаны опциональными (?), что повышает устойчивость скриптов, когда сущность отсутствует.
Все эти дополнения представлены в официальных type‑определениях для авторов карт, то есть предназначены для использования в пользовательском контенте, а не только во внутренних примерах Valve.
Примерная карта zoo: всплывающий диалог и упрощённая логика шахмат
Официальная примерная карта editor/zoo была расширена, чтобы показать новые HUD и таймеры.
- Новый всплывающий приветственный UI:
- Panorama‑макет
welcome.xmlиwelcome.cssопределяют простой центрированный диалог с текстом «Welcome to the cs_script zoo map!», кнопкойDismissи CSS‑классомDismissed, который плавно скрывает диалог через opacity. - При появлении игрока (
OnPlayerActivate) вызываетсяShowWelcome(playerSlot):- Удаляет класс
Dismissedдля данного игрока, чтобы диалог показался. - Включает перехват ввода через
SetInputCaptureEnabled, чтобы игрок мог нажать кнопку.
- Удаляет класс
Instance.OnCustomHudClickedслушает клики:- Если клик пришёл из
welcome_layoutсbuttonId=dismiss_button,HideWelcomeснова добавляетDismissedи отключает перехват ввода, возвращая управление игроку.
- Если клик пришёл из
- Отладочная команда
script_zoo_show_welcomeперебирает всех игроков и заново показывает диалог — это демонстрирует, как авторы могут повторно вызывать пользовательские HUD‑потоки по требованию.
- Panorama‑макет
- Шахматный скрипт переведён на
Instance.Delay:- Ранее мини‑игра шахмат использовала собственную очередь таймеров и самописный
Delay()на базеInstance.SetNextThink. - Самодельная очередь и реализация
Delayполностью удалены. - Все асинхронные паузы (в
RunChess, анимациях передвижения и смерти фигур, ограничении поиска минимакс у AI) теперь используютawait Instance.Delay(0). Это показывает, как встроенныйDelayупрощает длительную асинхронную игровую логику.
- Ранее мини‑игра шахмат использовала собственную очередь таймеров и самописный
Игроки, заглянувшие на карту zoo после обновления, увидят небольшое приветственное окно при первом спавне — прямую демонстрацию того, как выглядят и работают пользовательские HUD‑макеты.
Движок и протоколы, стоящие за новыми HUD-инструментами
За видимыми изменениями стоит набор движковых и схемных обновлений, обеспечивающих работу новых функций:
- Сетевые структуры пользовательских HUD:
- Появились новые схемные типы (
CCSCustomHudLayout,CCSCustomHudLayoutState,HUDPanelHasClass_t,HUDPanelDialogVariableString_t,EHudPanelClassStatus_t) на клиенте и сервере. Они покрывают:- Имя ресурса макета.
- Глобальное и per‑player состояние макета (какие классы и диалоговые переменные применены к панелям).
- Захват ввода для конкретного игрока.
- Появились новые схемные типы (
- Сущность камеры игрока:
CCSPlayerCameraдобавлен на клиенте и сервере с полями, ссылающимися на pawn handle и флагами включения и контроля прицела.
- User message и enum‑интеграция:
- В
ECstrike15UserMessagesдобавленCS_UM_CustomHudClicked = 390, что встраивает уведомление о клике HUD в существующий pipeline user messages. - Соответствующее протокольное сообщение
CCSUsrMsg_CustomHudClickedпередаёт идентификатор макета иbuttonIdна сервер.
- В
- Инструменты и строковые таблицы:
- Обновлены внутренние инструменты и таблицы строк (сервер, клиент, Panorama, VScript, resource compiler и т.д.). Среди них — новые структуры строк, связанные с HUD (
HUDPanelHasClass_t, вектора переменных диалога) и обновлённая поддержка V8‑скриптинга. Эти изменения в основном «под капотом» и вряд ли напрямую заметны игрокам, но необходимы для надёжной работы новых скриптовых функций.
- Обновлены внутренние инструменты и таблицы строк (сервер, клиент, Panorama, VScript, resource compiler и т.д.). Среди них — новые структуры строк, связанные с HUD (
Общее влияние
Обновление ориентировано прежде всего на создателей контента и скриптеров, а не на базовую соревновательную механику:
- Авторы карт получают экспериментальный, официально поддерживаемый способ создавать простые интерактивные HUD, управляемые из
cs_script, с per‑player состоянием, обработкой кликов и перехватом ввода. - Скриптовые хуки, связанные с бомбой, стали заметно богаче — это может быть полезно для тренировочных карт, туториалов и пользовательских режимов.
CSPlayerCamera, инструменты для движения и Promise‑ориентированныйInstance.Delayупростят реализацию продвинутых скриптовых сцен (камеры, мини‑игры, плавные перемещения).
Для большинства игроков в обычном матчмейкинге изменения будут малозаметны. Со временем же эти инструменты могут привести к более качественным пользовательским картам, удобным тренировочным утилитам и новым творческим режимам сообщества на базе скриптов CS2.
