CS2 脚本与自定义 HUD 更新(2026年8月26日)
CS2 推出官方 `cs_script` 示例插件、完整的 JavaScript API 参考,以及由脚本控制的自定义 Panorama HUD 布局,为地图制作者带来强大工具。
快速摘要
- 新增官方 `cs_script` 示例插件,包含示例地图、脚本与自定义 UI。
- 提供完整的 TypeScript 声明文件,记录面向 `point_script` 实体的 `cs_script` JavaScript API。
- 多个示例脚本展示了追踪、投掷物训练、模型变换、输入调试与自定义欢迎 UI。
- 允许自定义 Panorama 游戏 UI,并引入新的搜索路径以加载自定义 HUD 布局与样式。
- 编辑器提示与 zoo 欢迎界面更新,改为引导创作者使用新的 `cs_script_demo` 插件。
- 客户端与服务器版本号上调,并做了少量内部 schema 与引擎调整。
本次 CS2 更新以脚本和自定义 UI 为重心:Valve 推出了官方 cs_script 示例插件、面向地图脚本的完整 JavaScript API 参考,以及由脚本控制的自定义 Panorama HUD 布局支持。此更新主要面向地图作者、模组制作者和创意工坊创作者,普通玩家可见的变化较少。
官方 cs_script 示例插件与示例地图
- 新增示例插件: 在
csgo_addons下新增了名为cs_script_demo的插件,addoninfo.txt指向一个cs_script_demo地图。这看起来像是官方随工具一同提供的示例包。 - 示例地图内容: 插件清单列出
cs_script_demo.vmap地图,以及多个已编译的脚本文件(.vjs)和一个自定义 Panorama 布局与样式。由此可推测该示例会端到端演示cs_script的功能:玩法逻辑、追踪工具、定制 HUD 与脚本交互。 - 访问方式: 欢迎文本明确写到“cs_script demo 已移至
csgo_addons/cs_script_demo,请使用 workshop tools 启动”。这强烈暗示该示例意在通过创意工坊/工具环境打开,而不是通过常规匹配进入。
对于不使用工具的玩家,这些内容可能不会直接出现在常规游玩中,但它能让创作者更容易上手脚本系统并制作更高质量的自定义地图。
面向 cs_script 的完整 JavaScript API 参考
-
新增
point_scriptTypeScript 声明: 在cs_script_demo/maps/scripts下添加了大型point_script.d.ts文件,记录了通过模块名"cs_script/point_script"暴露给附着在point_script实体上的脚本的 JavaScript API。 -
编辑器集成: 注释说明将
point_script.d.ts与配套的tsconfig.json放在脚本旁可以让编辑器提供 IntelliSense、类型检查与工具支持,这将显著改善创作者的脚本工作流程。 -
核心 API 面向: 声明文件暴露了一个中心
Instance对象,包含回调与辅助函数,覆盖:- 游戏生命周期:
OnActivate、OnPlayerConnect、OnPlayerActivate、OnPlayerDisconnect、OnRoundStart、OnRoundEnd、回合重启钩子、炸弹种植/拆除事件等。 - 战斗与伤害:
OnModifyPlayerDamage(可修改伤害、标记或取消命中)、OnPlayerDamage、OnPlayerKill、OnGunFire、OnGunReload、OnBulletImpact、近战攻击、手榴弹投掷与弹跳等。 - 玩家交互:聊天回调(
OnPlayerChat)、标记(OnPlayerPing)、跳跃与落地、武器拾取与丢弃等。 - 追踪与物理查询:
TraceLine、TraceSphere、TraceBox、TracePlayer与TraceBullet,并提供结构化的结果类型。 - 世界交互:触发实体输入(
EntFireAtName、EntFireAtTarget)、通过ConnectOutput/DisconnectOutput监听输出,以及实体搜索辅助(FindEntityByName、FindEntitiesByClass等)。 - 定时工具:think 系统(
SetThink、SetNextThink)、Delaypromise,以及用于安全后物理修改的QueueAfterThinks。 - 游戏状态查询:回合时间、热身/冻结状态、游戏类型/模式、地图名与回合计数,并能控制剩余回合时间。
- 命令接口:
ClientCommand、ServerCommand与RegisterCheatCommand,用于脚本驱动的控制台工具。 - 持久数据:
SetSaveData与GetSaveData,用于插件关联的保存字符串。
- 游戏生命周期:
-
实体与玩家类: 声明包括
Entity、BaseModelEntity、CSWeaponBase、CSPlantedC4、CSGrenadeProjectileBase、CSPlayerPawn、CSPlayerController、CSObserverPawn、CustomHudLayout、CSPlayerCamera、PointTemplate等类,分别提供运动、模型、生命、武器、护甲、金钱、摄像机控制与自定义 HUD 行为的聚焦 API。 -
枚举与数据结构: 广泛记录了枚举(移动类型、武器类型、伤害类型与标志、命中分区、输入标志、手雷类型、装备槽等)与数据接口(子弹追踪、玩家追踪、伤害事件、手雷弹跳与炸弹事件)。
-
弃用项提示: 若干方法与重载被标记为
@deprecated,并标注会在未来移除,提醒脚本作者迁移以避免依赖老旧辅助函数,例如OnBeforePlayerDamage、旧的调试绘制重载与特定伤害辅助函数。
总体而言,该文件将许多地图制作者正在试验的脚本接口形式化,使 cs_script 的使用减少盲猜、对大型创作项目更加稳定。
示例脚本:追踪、输入、投掷物、模型与 UI
多个具体的 JavaScript 示例被打包在 cs_script_demo 中,用以展示如何在真实地图逻辑中使用 API,作为参考非常有价值。
追踪与子弹可视化(trace.js)
- 调试追踪的作弊命令:
script_zoo_trace切换不同追踪模式:line、sphere、box、player或bullet。 - 线/球/盒追踪: 脚本获取首位玩家的视点位置与朝向,根据模式执行不同类型的追踪(线、球或轴对齐盒),必要时忽略该玩家本身,并用
DebugSphere、DebugBox与DebugLine绘制命中点与表面法线。 - 玩家碰撞追踪:
TracePlayer示例展示随玩家移动碰撞体的行为,使用 pawn 的蹲下高度来调整盒子的尺寸。 - 子弹模拟:
TraceBullet示例使用当前武器的射程、伤害、距离衰减与穿透值来模拟子弹飞行与穿透,按命中类型为世界命中、低伤害、正常伤害与高伤害上不同颜色标记,头部命中用小球标识,其他命中用小盒子标记。
该脚本演示了如何为移动、碰撞与子弹行为构建可视化工具,非常适合训练地图制作与自定义机制调试。
投掷物训练小模式(grenadetraining.js)
- 轮换目标选择: 脚本记录回合数、命中数与当前目标索引,然后:
- 从多个目标中随机选择,带简单的防重复规则。
- 根据回合数调整难度。
- 使用实体输入(
cover.*、tele.*与 world text 实体)揭示下一个目标并重置玩家。
- 训练流程: 自定义脚本输入管理状态机:
ResetAndCleanUp重置触发器、计时器、文本、声音与遮挡道具,关闭无限弹药,销毁玩家武器,并强制为手雷槽。StartTraining启动模式:启用无限弹药,给予玩家一个 HE 手雷,开始倒计时与计时器,并重置回合/命中计数。GrenadeHit增加命中计数、播放声音、更新 UI 文本,并在存在时移除被追踪的投掷物实体。SetNextTarget由计时器驱动,最多轮换 10 轮后清理并播放结束音。
- 实时弹道绘制: 在
OnGrenadeThrow中追踪抛出的弹体,并在每个 tick 绘制其后方的连续调试线,直至实体消失,以可视化弹道。
该示例展示如何用脚本与实体一起构建完整的、有 UI 支持的训练模式,而不只依赖传统 Hammer 的逻辑链。
模型变更与发光效果(mdlchange.js)
- 动态模型: 脚本查找名为
mdlchange.prop_dyn的道具,展示如何:- 使用
SetModel在运行时把模型切换为多个示例模型之一。 - 通过
SetModelScale和简单乘法随时间缩放模型。
- 使用
- 发光切换:
GlowToggle脚本输入演示使用Glow、Unglow与IsGlowing让道具突出显示,便于在地图中标示可交互对象或目标。
玩家输入检查(input.js)
- 输入调试命令:
script_zoo_showinput切换被观察的玩家 pawn(首个控制器的 pawn)。 - 屏显输入状态: 每个 tick,脚本为被观察 pawn 打印三行调试 HUD 文本:
- 当前按下的输入(
IsInputPressed)。 - 本 tick 刚按下的输入(
WasInputJustPressed)。 - 本 tick 刚释放的输入(
WasInputJustReleased)。
- 当前按下的输入(
此示例展示了如何实时内省并可视化玩家输入标志,对移动分析或教学地图尤为有用。
欢迎流程、机器人与伤害调整(setup.js)
- 服务器启动配置: 脚本加载时启用了
sv_cheats、离线热身以及暂停热身计时,使实验环境安全便于测试。 - 首位玩家自动设置: 在首次
OnPlayerActivate事件中,脚本:- 强制玩家加入队伍
2。 - 停止所有机器人并添加一个机器人,作为训练目标。
- 向该玩家显示欢迎 UI。
- 强制玩家加入队伍
- 伤害修改: 通过
OnModifyPlayerDamage与OnPlayerDamage:- 对机器人造成的伤害被标记为
CSDamageFlags.PREVENT_DEATH,使机器人成为不死目标。 - 对于挥砍类伤害(如刀击),在伤害后安排一次速度调整,通过修改速度向量并用
Teleport使受害者向上弹起,制造趣味效果。
- 对机器人造成的伤害被标记为
- 自定义欢迎对话: 脚本将名为
welcome_layout的CustomHudLayout实体接入:- 使用
SetHasClassForPlayer与SetInputCaptureEnabled向加入玩家显示对话。 - 通过
OnCustomHudClicked监听 id 为dismiss_button的按钮点击以隐藏对话。
- 使用
- 手动重现命令:
script_zoo_show_welcome作弊命令可为所有已连接控制器重新显示欢迎对话。
该示例将玩家生命周期事件、伤害钩子、实体运动、机器人与自定义 HUD 控制结合,形成完整的教程式体验。
最小的 Hello World(hello.js)
- 基本输出: 最简单的示例仅导入
Instance并向控制台打印"Hello cs_script!",作为创作者验证环境的第一步样例。
自定义 HUD 与游戏 UI 支持
-
启用自定义游戏 UI: 核心游戏配置将
AllowCustomGameUI设为1,表明引擎允许自定义 Panorama UI 在游戏/地图中生效,之前此项是禁用的。 -
自定义布局的搜索路径: 主游戏信息配置新增了以下资源搜索路径:
"panorama/layout/custom_game""panorama/styles/custom_game"
这意味着放在这些位置的布局与样式可以被游戏加载。
-
自定义 HUD 实体文档:
csgo.fgd中对custom_hud_layout的定义仍描述为“可被cs_script控制的 Panorama UI”。编辑器帮助文本中移除了对dev_report_info_hud_layout命令的引用,简化了提示。该实体依然使用layout(resource:xml)字段指定 Panorama 布局。 -
欢迎界面内容更新: 编辑器 zoo 地图的
welcome.xml与welcome.css做了调整:- 对话框变宽且稍高(从 350x200 调整到 520x220),为文本留出更多空间。
- 文本改为提示“cs_script demo 已移至
csgo_addons/cs_script_demo。使用 workshop tools 启动以查看。”明确将创作者引导至基于插件的新示例,而非旧的内置地图。
创作者现在可以结合 CustomHudLayout、自定义 Panorama 布局与新目录下的 CSS,从脚本中设计更丰富的 HUD 与对话。
编辑器与脚本资源工具链改变
- 资源类型可见性: 共享资产类型配置不再将某些与脚本相关的资产类型对零售环境隐藏。具体来说,对部分基于 KV3 的 Panorama 布局/样式资源类型移除了
m_HideForRetailMods = [ "csgo" ]的引用,这可能让这些资源在工具链中被更广泛识别,而非仅作为编辑器专用。 - zoo 编辑器脚本更新: 编译后的
welcome布局/样式资源(welcome.vxml_c/welcome.vcss_c)在编辑器 zoo 地图的游戏包清单中重新列出,表明它们仍是工具集的一部分并随文本与尺寸更新一起被替换。 - 编辑器存根中的移动枚举清理: 用于
zoo地图的编辑器版point_script.d.ts从CSMoveType中移除了两个移动枚举条目(FLY、PUSH),使其与示例插件中新的官方 API 保持一致,减少编辑器存根与正式 API 之间的混淆。
这些调整主要影响工具中的资源呈现与识别,而非普通玩法,但有助于保持脚本与 UI 管线的一致性。
底层与版本变更
- 客户端与服务器版本上调:
steam.inf显示客户端与服务器版本由2000888提升至2000891,并更新了源修订与构建时间,表明发布了新构建,但除脚本/UI 外玩法变化不明显。 - 引擎与 schema 微调: 对字符串表与一对与动态音高/音量相关的内部 schema 头文件(
dynpitchvol_*)做了小改动,这些看起来是基础性的调整而非直接面向用户的新功能。
综合影响
对于普通玩家而言,此次更新较为低调:你不太可能看到重大的玩法或平衡改动。最明显的可见变化是旧编辑器 zoo 的欢迎面板现在会提示使用新的 cs_script_demo 插件。
对于地图作者、模组与创意工坊创作者来说,这次构建意义重大:
- 你将获得官方且强类型的
cs_scriptAPI 参考,使基于 JavaScript 的地图逻辑更容易编写与维护。 - 得到一个完整的示例插件,包含多个示例脚本,演示如何使用伤害钩子、追踪、子弹与手雷、机器人、自定义 HUD、实体模型与玩家输入等功能。
- 引擎现在似乎完整支持由
cs_script控制的自定义 Panorama HUD 布局,为更丰富的训练地图、场景与定制 UI 打开了可能性。
总体来看,此次更新把 cs_script 从一个较为实验性的特性推向更成熟的脚本环境基础,有助于社区创作更复杂的内容。
