代码更新2026年8月25日 GMT+8 07:42

CS2 更新(2026年8月25日)

CS2 为脚本地图加入实验性自定义 HUD 系统,扩展了炸弹与摄像机的脚本 API,并更新官方 cs_script 的 zoo 示例地图来展示这些新工具。

快速摘要

  • `custom_hud_layout` 实体与 CustomHudLayout API 允许脚本驱动带按钮、类与对话变量的简单 HUD。
  • 围绕放置/拆除炸弹、C4 控制、移动类型以及基于 Promise 的 `Instance.Delay` 的新脚本钩子,增强自定义游戏逻辑。
  • cs_script 的 zoo 示例地图增加了使用新 HUD 的欢迎对话,并将棋盘小游戏迁移到内置延迟辅助 `Instance.Delay`。
  • 引擎 schema、用户消息与工具链更新以支持 CustomHudClicked 事件和按玩家的自定义 HUD 状态网络同步。

本次 CS2 更新悄然引入了一个面向地图脚本的实验性自定义 HUD 系统,同时扩展了围绕炸弹与玩家摄像机的脚本 API——官方 cs_script 的 “zoo” 示例地图已更新以演示这些新工具。

实验性自定义 HUD 布局(脚本地图)

  • 新实体: Hammer 在 csgo.fgd 中加入了一个点实体 custom_hud_layout,允许地图制作者提供可由 cs_script 控制的 Panorama XML 布局。
  • 支持的 UI 元素: 新的脚本 API 指明自定义布局可以包含基本面板元素:
    • Panel(带 id、class、hittest)
    • Label(带 id、class、hittest、text)
    • Image(带 id、class、hittest、src、texturewidth、textureheight)
    • Button(带 id、class) 支持通过 CSS 进行样式化;但 HUD 内部不支持运行客户端侧的自定义 JS。
  • 服务器驱动的可视状态: 脚本现在可以:
    • 使用 CustomHudLayout.SetHasClass / SetHasClassForPlayer 在全局或按玩家切换面板的 CSS 类。
    • 使用 SetDialogVariableString / SetDialogVariableStringForPlayer 在全局或按玩家设置面板的对话变量(文本占位符)。 这意味着创作者可以仅用服务器逻辑驱动诸如“任务提示”、计时器或状态指示等 UI 行为。
  • 从 HUD 捕获输入: CustomHudLayout.SetInputCaptureEnabled(playerSlot, enabled) 为地图提供了临时抓取玩家鼠标以用于 UI 交互的能力。IsInputCaptureEnabled 可查询当前布局是否正在捕获输入。启用输入捕获时,玩家在所有捕获释放之前可能会失去正常的移动/鼠标控制。
  • 点击事件通过用户消息上报: 新的用户消息 CS_UM_CustomHudClicked 与脚本回调 Instance.OnCustomHudClicked 被添加。当玩家在 CustomHudLayout 中点击按钮时,服务器会收到哪个布局以及 buttonId 被点击的信息,使得菜单、对话框或小游戏的控制可以完全由服务端实现。
  • 引擎侧的 HUD 布局文件: 两个新的 Panorama 布局文件(hud/customhuds.xml 和 hud/infohudlayouts.xml)承担了引擎端的支撑作用。这些文件是内部骨架,玩家通常不会直接以默认 HUD 的形式看到它们,但它们为脚本化 HUD 功能提供了基础。
  • 实验性说明: 该 API 明确带有 @experimental 标注,可能会在未来发生破坏性修改。正在以其为基础开发重要项目的作者应预期对接口进行调整。

炸弹、摄像机与移动的脚本增强

对 content/csgo/maps/editor/zoo/scripts/point_script.d.ts 的更新扩展了 cs_script 在自定义或社区地图上的能力:

  • 基于 Promise 的定时器:
    • 新增内置异步延迟 Instance.Delay(delay: number): Promise<void>,可取代手写的 think 队列,简化长时间运行的脚本序列。
  • 更细化的炸弹生命周期事件:
    • 新的回调将炸弹交互拆分为开始/中止/完成阶段:
      • OnBombPlantStart、OnBombPlantAbort、OnBombPlant
      • OnBombDefuseStart、OnBombDefuseAbort、OnBombDefuse,以及 OnBombExplode
    • 引入了 BombPlantEvent 与 BombDefuseEvent 类型,其中部分字段被标记为已弃用以便未来清理。 这些调整让脚本地图或模组可以更精确地响应部分完成的放置/拆除动作,例如用于教学覆盖或自定义胜利条件。
  • C4 武器脚本 API:
    • 新的脚本类 C4(继承自 CSWeaponBase)提供:
      • GetPlantStartTime() / GetPlantFinishTime()
      • AbortPlant()
    • CSPlayerPawn 现在可以通过 GetC4() 获取玩家携带的 C4 武器,并通过 GetDefuseTarget() 访问正在拆除的已放置炸弹。 这些工具针对更高级的炸弹训练地图或游戏模式场景。
  • 玩家状态与 UI 钩子:
    • CSPlayerPawn.IsBuyMenuOpen() 让脚本得知玩家是否处于购枪界面。
    • CSPlayerPawn.GetCamera() 暴露出每名玩家对应的 CSPlayerCamera 实体。
  • 新的摄像机控制实体:
    • CSPlayerCamera 是一个实验性的可脚本化实体,代表玩家的视角。
    • 脚本可以启用/禁用它并调用 SetIsControllingAngles(controlling: boolean);当不控制视角角度时,玩家可以在摄像机位置自由查看。 这有助于制作更精致的脚本摄像机,用于过场、回放或训练视角。
  • 移动与插值辅助:
    • 新增 CSMoveType 枚举,脚本可通过 GetMoveType() / SetMoveType() 检查或改变实体的移动类型(行走、飞行、穿墙、梯子等)。
    • 添加了 Move({...}),作为 Teleport 的并列方法,描述为在不重置客户端插值历史的情况下移动实体,从而可实现更平滑的视觉重定位。
  • 实用项与类型调整:
    • Instance.IsDedicatedServer() 可让脚本在 listen 与 dedicated 服务器间分支。
    • 若干事件字段(如 OnPlayerChat、OnBulletImpact、ModifyPlayerDamageEvent.inflictor 等)被放宽为可选(?),使脚本在不存在相关实体时更健壮。

这些脚本扩展通过官方提供给地图作者的类型定义暴露出来,旨在用于自定义内容中并可实际运行,而不仅限于 Valve 的内部示例。

Zoo 示例地图:脚本欢迎对话与更简洁的棋盘逻辑

Valve 的 editor/zoo cs_script 示例地图已扩展以展示新的 HUD 与定时 API。

  • 新的欢迎弹窗 UI:
    • 一个 Panorama 布局 welcome.xml 与样式 welcome.css 定义了一个居中的简单对话框:
      • 文本:“Welcome to the cs_script zoo map!”
      • 一个 Dismiss 按钮
      • 一个通过将不透明度设为 0 实现淡出效果的 Dismissed CSS 类
    • 当玩家生成(OnPlayerActivate)时会调用 ShowWelcome(playerSlot):
      • 为该玩家清除 Dismissed 类以显示对话框。
      • 使用 SetInputCaptureEnabled 启用输入捕获,允许玩家点击对话按钮。
    • Instance.OnCustomHudClicked 监听点击事件:
      • 若被点击的布局是 welcome_layout 且 buttonId 为 dismiss_button,HideWelcome 会重新添加 Dismissed 并禁用输入捕获,将控制权还给玩家。
    • 一个调试/作弊命令 script_zoo_show_welcome 会对所有玩家再次显示对话框,示范了地图作者如何按需重新触发自定义 HUD 流程。
  • 棋盘脚本迁移到 Instance.Delay:
    • 原先棋盘小游戏脚本中自实现的定时队列与基于 Instance.SetNextThink 的 Delay() 辅助已被移除。
    • 所有异步等待(例如 RunChess 内、棋子滑动动画、棋子死亡动画与 AI 的 minimax 搜索限速)现在都使用 await Instance.Delay(0)。 这展示了内置延迟 API 如何简化长期运行的异步游戏逻辑。

玩家在更新后的 zoo 地图中首次生成时应会看到一个小的欢迎窗口,直观演示自定义 HUD 布局的外观与行为。

支撑新 HUD 工具的引擎与协议改动

虽然这些改动多数对普通玩法不可见,但为新 HUD 功能提供了必要的引擎层与协议支持:

  • 自定义 HUD 的网络结构:
    • 新的 schema 类型(CCSCustomHudLayout、CCSCustomHudLayoutState、HUDPanelHasClass_t、HUDPanelDialogVariableString_t 与 EHudPanelClassStatus_t)在客户端与服务器端出现,涵盖:
      • 布局资源名。
      • 按玩家与全局的布局状态(哪些类与对话变量应用于哪些面板)。
      • 布局是否对某个玩家捕获输入。
  • 玩家摄像机实体:
    • 客户端与服务器端新增 CCSPlayerCamera,包含与 pawn handle 的关联字段以及跟踪是否启用和是否控制玩家瞄准的布尔值。
  • 用户消息与枚举联动:
    • ECstrike15UserMessages 枚举增加了 CS_UM_CustomHudClicked = 390,将新的 HUD 点击通知接入现有的用户消息管线。
    • 对应的协议消息 CCSUsrMsg_CustomHudClicked 将布局标识符与按钮 ID 传到服务器。
  • 工具链与字符串更新:
    • 多项内部工具与字符串表(服务端、客户端、Panorama、VScript、资源编译器等)被刷新,包含新的 HUD 相关字符串结构与更新的 V8 脚本支持。
    • 这些更改大多是底层改进,玩家通常不会直接感知,但对新脚本功能的稳定运行至关重要。

总体影响

此次更新主要面向创作者与脚本作者,而非直接改变核心竞技体验:

  • 地图作者获得了一种实验性且官方支持的方式来构建可由 cs_script 驱动的简单交互式 HUD,支持按玩家状态、点击处理与输入捕获。
  • 与炸弹相关的脚本钩子变得更为丰富,有利于训练地图、教学或以放置/拆除为核心的自定义模式。
  • 新的 CSPlayerCamera、移动辅助与基于 Promise 的 Instance.Delay 可简化高级脚本体验(自定义摄像机、小游戏、更平滑的移动实体)的实现。

对于大多数在标准匹配中的玩家来说,短期内感受到的变化会比较细微。但随着时间推移,这些工具可能促成更精致的自定义地图、更好的训练工具以及社区创造的更多创意游戏模式。

返回更新列表

最近更新

代码更新2026年10月9日 GMT+8 06:39

CS2 更新(2026年10月9日)

换弹后可开火窗口缩短、服务器网络限值放宽、武器音频混合调整,并对协议、着色器与工具进行大规模清理与改进——同时包含宠物相机的小型 UI 本地化修补。

  • 将某把武器的换弹后不可开火时长缩短,使换弹感觉更紧凑。
  • 服务器端的客户端消息 CPU 保护与接收缓冲上限放宽并迁移到发布配置,减少短时流量导致的误踢。
  • 调整武器音频混合参数,使枪声在声场中更易被听见。
  • 对 Game Coordinator 的 econ 消息与 schema 进行大规模清理,弃用许多旧消息并加入更通用的道具操作。
  • 玩家 Pawn 增加了一个新的可网络同步字段 `m_flModifier0`,可能用于未来的同步玩法或视觉修饰。
  • 宠物摄影亭的提示改为本地化 token,并对多语言及宠物图鉴素材进行重打包。
  • 大量 Vulkan 着色器文件调整命名与参数绑定,改善 VFX 与创作工具的鲁棒性。
  • ModelDoc 新增 Strip Morphs 网格操作;Asset Browser 提供快速跳转到选中资源的快捷键。
  • `rush_001` 地图包与缩略图被重建,表明有小幅视觉或打包调整而非大规模布局改变。
  • 客户端、服务器、匹配以及引擎等二进制重建为 `PatchVersion=1.41.9.0`,表明常规稳定性与协议更新。
查看详情
官方更新2026年10月9日 GMT+8 06:36

Counter-Strike 2 更新(2026年10月9日)

本次更新包含武器装填、音效、地图裁剪、本地化与稳定性方面的修复与改动。

  • 为掉落的 `defuse kit` 添加了 ping 图标
  • `AUG` 装填时间减少半秒
  • 修复 `Desert Eagle` 无声装填时的音效事件
  • 修复演示回放期间的一处嗡嗡声景音效问题
  • 修复 `Rush` 地图的裁剪问题
  • 本地化更新
  • 稳定性更新
查看详情