W3xTg — Warcraft III 地图开发一体化工具
TG 是一款专为《魔兽争霸 III》地图开发者打造的 VS Code / Trae 插件,集成地图解压 → 编辑 → 打包 → 测试全流程工作流,提供 3D 模型预览、SLK 数据表可视化编辑、触发器查看、Lua 悬停提示等丰富功能。
✨ 功能一览
�️ 地图开发全流程
| 功能 |
说明 |
| 打开地图 |
选择 .w3x / .w3m 文件,一键解压到当前工作区目录 |
| 保存地图 |
将工作区打包为 .w3x 地图文件 |
| 地图另存 |
另存为新的地图文件 |
| 加密 |
对地图 Lua 做自包含加密外壳(点开选 加密保存 / 加密另存 / 运行加密地图) |
| 测试地图 |
一键启动游戏测试,支持 KKWE 和 YDWE 两种启动方式 |
| 打开编辑器 |
用 KKWE / YDWE 编辑器打开当前地图 |
| 代码注入 |
配置 injectCode,保存时自动注入到 war3map.j 的 main 函数末尾 |
🎮 3D 模型预览 (MDX / MDL)
- 自定义编辑器:双击
.mdx / .mdl 文件即可在编辑器内预览 3D 模型
- 完整渲染引擎:基于 mdx-m3-viewer,支持动画、粒子、队伍色等
- 模型缩略图:自动生成并缓存模型缩略图,供悬停提示等场景使用
- 悬停实时预览:在 Lua 代码中悬停模型路径字符串,右侧 Beside 面板实时显示 3D 预览
- 本地资源管理:配置
localResourceDir,在模型选择器中浏览本地模型库
🖼️ 图片预览与格式转换
支持 BLP / TGA / PNG / JPG 四种格式的预览与互转:
- 自定义编辑器:双击图片文件直接预览
- Alpha 通道查看:一键切换「显示透明度」与「显示 Alpha 通道」模式
- 描边效果:为透明图标添加描边,支持多种颜色切换
- 格式互转:右键菜单一键转换为 PNG / TGA / BLP 格式
- BLP 图标缓存:从 WC3 安装目录的 MPQ 中批量提取技能/物品图标并缓存
📊 SLK 数据表可视化编辑器
告别枯燥的 INI 文本编辑,提供可视化的对象数据编辑器:
- 🏹 技能编辑器 (
ability.ini)
- 💊 Buff 编辑器 (
buff.ini)
- 🏗️ 可破坏物编辑器 (
destructable.ini)
- 🌳 装饰物编辑器 (
doodad.ini)
- 💎 物品编辑器 (
item.ini)
- ⚙️ 杂项编辑器 (
misc.ini)
- 👤 单位编辑器 (
unit.ini)
- ⬆️ 升级编辑器 (
upgrade.ini)
- 🎯 命令编辑器 (
order.ini)
双击对应 INI 文件即可打开可视化编辑器,模型/贴图字段支持选择器浏览与预览。
🔧 触发器查看器 (WTG)
- 双击
.wtg 文件,以结构化树形视图查看触发器内容
- 支持事件、条件、动作的分类展示
- 函数名与参数自动解析,关联 TriggerData 函数签名表
📋 地图信息查看器
- w3i.ini:地图信息可视化查看(玩家、队伍、地形等)
- imp.ini:导入文件列表查看
💻 Lua 悬停提示
在 Lua 代码中,鼠标悬停即可获得:
- 函数 / 常量中文说明:基于内置的
WorldEditStrings.txt 和 WorldEditGameStrings.txt
- 模型路径预览:悬停模型路径字符串,显示缩略图 + 「查看 3D 模型」链接
- 图标预览:悬停贴图路径,自动显示 BLP/TGA 图标预览
💾 本地存档编辑器
- 可视化编辑
dz_w3_plugin.ini(DzAPI 存档配置)
- 支持增 / 删 / 改键值对
- 自动定位存档文件路径(优先使用配置的
wc3Dir)
⌨️ 状态栏快捷按钮
扩展激活后,编辑器底部状态栏会出现一排快捷按钮:
📦 打开地图 💾 保存地图 💾 地图另存 🔒 加密 🧪 测试地图 ✏️ 打开编辑器
🚀 快速开始
安装
- 打开 VS Code / Trae 的插件市场
- 搜索 W3xTg
- 点击「安装」
首次配置
- 打开设置(
Ctrl+,),搜索 W3xTg
- 配置 Warcraft III 安装目录 (
W3xTg.wc3Dir),插件会自动检测常见路径
- 配置 KKWE 或 YDWE 路径(用于测试地图和打开编辑器)
- 可选:配置 本地资源根目录 (
W3xTg.localResourceDir),用于模型选择器浏览本地模型
使用流程
- 新建或打开一个工作区目录(作为地图解压后的工作目录)
- 点击状态栏「📦 打开地图」按钮,选择一张
.w3x 地图
- 等待解压完成,工作区中会出现地图的所有源文件
- 编辑:直接修改 Lua 脚本、INI 数据表等
- 保存:点击「💾 保存地图」打包回
.w3x
- 测试:点击「🧪 测试地图」一键启动游戏测试
⚙️ 配置项说明
| 配置项 |
类型 |
默认值 |
说明 |
W3xTg.wc3Dir |
string |
"" |
Warcraft III 安装目录(含 war3.mpq) |
W3xTg.localResourceDir |
string |
"" |
本地资源根目录,模型选择器「本地资源」页读取该目录下的模型 |
W3xTg.injectCode |
string |
"" |
注入到 war3map.j main 函数末尾的代码 |
W3xTg.useKKWE |
boolean |
true |
使用 KKWE 路径测试地图(否则使用 YDWE) |
W3xTg.kkwePath |
string |
"" |
KKWE 可执行文件路径 |
W3xTg.kkweWindowMode |
string |
"全屏模式" |
KKWE 测试窗口模式:全屏模式 / 窗口化全屏 / 适用分辨率窗口 |
W3xTg.kkweRenderingEngine |
string |
"Direct3D 8" |
KKWE 渲染引擎:Direct3D 8 / Direct3D 9 / OpenGL |
W3xTg.kkweTestMode |
string |
"单机测试" |
KKWE 测试模式:单机测试 / 单人局域 / 多人局域 |
W3xTg.kkweFastLoad |
boolean |
true |
KKWE 快速加载 |
W3xTg.kkweSLK |
boolean |
false |
KKWE 启用 SLK 优化格式 |
W3xTg.kkweWideScreen |
boolean |
true |
KKWE 宽屏支持 |
W3xTg.kkweLockMouse |
boolean |
false |
KKWE 锁定鼠标到窗口内 |
W3xTg.kkweDisableSecurity |
boolean |
false |
KKWE 禁用安全访问提示 |
W3xTg.ydwePath |
string |
"" |
YDWE 可执行文件路径 |
📚 Lua 函数库
专为 TG 插件设计的魔兽争霸 3 Lua 函数库,提供丰富的 Lua API,助力地图开发:
👉 TG_lua
🛠️ 命令列表
按 Ctrl+Shift+P 打开命令面板,输入 W3xTg 查看所有命令:
| 命令 |
说明 |
W3xTg.openMap |
打开地图 |
W3xTg.saveMap |
保存地图 |
W3xTg.saveMapAs |
地图另存 |
W3xTg.encryptMenu |
加密 Lua(弹窗选择:加密保存 / 加密另存 / 运行加密地图) |
W3xTg.testMap |
测试地图 |
W3xTg.openEditor |
打开编辑器 |
W3xTg.rebuildIconCache |
重建 BLP 图标缓存 |
W3xTg.viewImage |
查看图片 (BLP/TGA→PNG) |
W3xTg.convertToPng |
转换为 PNG |
W3xTg.convertToTga |
转换为 TGA |
W3xTg.convertToBlp |
转换为 BLP |
W3xTg.viewModel |
查看 3D 模型 (MDX/MDL) |
W3xTg.buildModelThumbnails |
生成模型缩略图 |
W3xTg.openModelPreview |
打开 3D 模型预览 |
W3xTg.openLocalSave |
本地存档 (dz_w3_plugin.ini) |
状态栏 $(lock) 加密 按钮或命令面板 W3xTg.encryptMenu 可对当前地图的 Lua 进行加密。直接打开 w3x2lni 工程目录(如 电炸园区)即可点击,无需先「打开地图」解压 .w3x。
注:加密只做一层——Lua 源码加密后由 w2l obj 打包成 .w3x。不再走 SLK 第二层(SLK 优化已废弃,避免二次处理)。
- Lua 加密(合并为单一加密 bundle,三层加固):把工作区内所有
.lua 的源码合并进一个加密文件 map/__w3xtg_bundle.lua(其余每个原 .lua 仅保留 2 行 stub)。引擎 require 优先查 package.preload 加载合并后的代码,加载顺序、全局变量、返回值、缓存语义与原「逐文件 require」完全一致——效果不变。在此基础上叠加三层防护:
- T1 字节码:每个模块先由同工具链的 Lua 5.4 编译器编译成去调试信息的字节码再加密。文件里不再有可读源码,反编译只能得到脏逻辑。
- T2 算法与密钥移入原生 DLL:xorshift128 密钥流与主密钥 KEK 整体移入编译好的
w3xtg_crypto.dll,TS 侧不再持有密钥常量或算法实现。每张地图生成完全不同的 Lua 解密器(KEK 以算术表达式出现、标识符带随机后缀、注入死代码),且解密器本身也编译为字节码嵌入,地图内无明文算法、无明文密钥。
- T3 逐图随机数据密钥:加密时生成逐图随机的 dataKey,由 DLL 内 KEK 包裹后嵌入外壳(XOR 自逆,解包裹用同一函数)。一张图的密钥被抠出不影响其他图。加解密使用非标准 xorshift128 密钥流 XOR(保留 4 字节小端长度头),无标准算法特征。
弹窗提供两种动作:
| 动作 |
行为 |
W3xTg加密保存 |
输出 原名_enc.w3x,与当前地图/工作区同目录(持久保存) |
运行W3xTg加密地图 |
先打包并保存为 原名_enc.w3x(同目录),再直接启动游戏测试该加密地图 |
注:运行W3xTg加密地图 用的就是落盘后的 原名_enc.w3x,不再使用临时文件——避免出现「地图路径没用到 / 加密 w3x 找不到」的问题。
重要约定:
- 工作区保持不动。加密前会把整个工作区复制到扩展的
globalStorage/encrypt_cache/<地图名> 缓存目录(如 C:\Users\<用户>\AppData\Roaming\Trae CN\User\globalStorage\tichy.w3xtg\encrypt_cache\电炸园区),所有操作都在缓存目录上进行。完成后可打开该目录查看:加密后的核心代码在 __w3xtg_bundle.lua,其余 .lua 为 stub。缓存移至扩展目录,可避免工程目录被 IDE 文件监视器/资源管理器锁定导致的 EBUSY 错误。
- 若某个
.lua 被其它文件以 io.open/loadfile/dofile("xxx.lua") 当作文本数据读取,则会自动跳过加密(保留明文),否则运行时按文本读取会崩溃。
- 这是「混淆」而非「绝对保密」:密钥随地图分发,逆向者仍可提取。
📝 说明
作者:Tichy
QQ:1663171114
群号:722748070
| |