Dota 2 标准路径
Steam 安装的基础文件夹:
C:\Program Files (x86)\Steam\steamapps\common\dota 2 beta\game\dota\
其中包含子文件夹:maps、scripts、cfg。默认情况下用户没有什么可以往里写 —— Dota 2 只执行 Valve 签名的文件。
自定义游戏(创意工坊)
如果你在开发自己的创意工坊地图,工作目录是:
...\dota 2 beta\game\dota_addons\your_mod\scripts\vscripts\
带 .lua 扩展名的文件会在比赛加载时由引擎执行。它们通过 require() 加载,或按命名约定自动加载(例如 addon_game_mode.lua)。
添加文件后请重启 Tools(DotaToolGame),否则引擎不会识别新脚本。
开发者 addon 模式
无需创意工坊即可测试 addon 模式:
- 打开 Steam → 库 → 工具 → 启动 Dota 2 Workshop Tools。
- 在 DotaToolGame 中创建一个新 addon —— 文件夹会出现在
game\dota_addons\中。 - 在这里加载 .lua 文件。热重载通过控制台命令
script_reload实现。
调试集成请使用搭配 Dota Lua 扩展的 VSCode。通过 print() 将控制台输出打印到 Tools 窗口。
Umbrella —— 云端配置
第三方软件 Umbrella 的工作方式不同。游戏文件夹里没有 .lua 文件:
- 所有模块设置(maphack、脚本、绑定)都存储在云端的 Umbrella 服务器上。
- 配置加载 —— 通过 Loader 界面 → Cloud → Add By Code。
- 磁盘上的游戏文件夹 —— 空的。反作弊扫描器找不到任何可疑文件。
为每个英雄准备好绑定的现成预设 —— 在 CFG 页面。凭代码一键导入。
这是一个根本性的区别:传统作弊(例如 AHK 脚本)会把 .lua 或 .cfg 文件放到游戏目录里 —— Valve 通过扫描器很容易检测到它们。Umbrella 通过内存注入工作,磁盘上不留痕迹。
找不到文件 —— 怎么办
- 检查扩展名。Windows 会隐藏 .lua 扩展名 —— 你的文件实际可能是
script.lua.txt。在文件夹选项中启用文件扩展名显示。 - 编码:UTF-8 不带 BOM。用 Notepad++ 或 VSCode 保存并指定 UTF-8。BOM 会破坏解析器。
- 写入权限。
Program Files文件夹需要管理员权限。把游戏文件夹移到用户盘,或使用 Tools。 - 文件名仅用拉丁字符。脚本名中的非拉丁字符会导致 Lua 引擎出问题。
- 重启 Tools。并非所有热重载都是即时的 —— 有时需要完全退出 DotaToolGame。
常见问题
能在普通(非 addon)Dota 2 里运行 .lua 吗?
不能。标准 Dota 2 客户端只执行 Valve 签名的脚本。自定义 .lua 请用 Workshop Tools 或 addon 模式。
技能快捷键绑定存在哪里?
在 Dota 2 内部:设置 → 快捷键。保存在 Steam 云端,与账号绑定。磁盘上 —— 以加密形式存于 userdata\STEAMID\570\local\cfg\。
addon_game_mode.lua 是什么?
任何自定义游戏的必备入口文件。它包含模式初始化、事件注册和单位生成。没有它,创意工坊不会接受你的地图。
Umbrella 支持 .lua 脚本吗?
不支持。所有模块逻辑都内置于软件核心。自定义绑定通过可视化的 Combo Builder 制作 —— 无需编写代码。