*暴雪官方 World Editor(WE)** 的完整功能对比
下面是与 暴雪官方 World Editor(WE) 的完整功能对比:
一、地形编辑模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 高度画笔(多种形状/大小) | 圆形笔刷,支持+/-/平滑/纹理 | ⚠️ 基础版 |
| 纹理画笔(多纹理混合) | 单纹理绘制 | ⚠️ 基础版 |
| 悬崖自动连接 | 无 | ❌ |
| 水面高度/深度编辑 | 无(只有布尔值水域标记) | ❌ |
| 装饰物放置(树木/岩石/建筑) | 无 | ❌ |
| 地形随机化 | 无 | ❌ |
| 导入高度图(Heightmap) | 无 | ❌ |
| 路径图编辑(可通行/阻挡) | 无 | ❌ |
二、单位模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 单位放置(拖拽) | 点击地图放置 + 侧边栏选择 | ✅ |
| 单位删除/移动 | 右键删除,无法移动已有单位 | ⚠️ |
| 单位朝向/缩放调整 | 朝向箭头可见,缩放固定 | ⚠️ |
| 英雄等级/属性/技能设置 | doo解析支持,GUI未展示 | ⚠️ |
| 单位携带物品设置 | doo解析支持,GUI未展示 | ⚠️ |
| 物品掉落集设置 | doo解析支持,GUI未展示 | ⚠️ |
| 随机单位组 | 无 | ❌ |
| 开始位置(Start Location)标记 | 无 | ❌ |
三、装饰物模块(Doodads)
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 装饰物放置(树木/建筑/栅栏等) | 无 | ❌ |
| 装饰物变体选择 | 无 | ❌ |
| 可破坏物(Destructables) | 无 | ❌ |
| 地形装饰物(特殊地形块) | 无 | ❌ |
| 装饰物缩放/旋转 | 无 | ❌ |
装饰物是最大缺口之一。WE 中装饰物占了地图视觉的 50% 以上(树木、建筑、岩石、栅栏、灯柱等),我们完全缺失。
四、对象编辑模块(Object Editor)
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 单位属性编辑 | 112个属性内置字典,CLI交互编辑 | ⚠️ |
| 物品属性编辑 | 同上 | ⚠️ |
| 技能属性编辑 | 同上 | ⚠️ |
| 升级/科技编辑 | 无 | ❌ |
| 装饰物属性编辑 | 无 | ❌ |
| 从 SLK 读取完整默认值 | 无(手工内置,非从War3读取) | ❌ |
| 对象数据搜索/筛选 | 无 | ❌ |
| 对象分类浏览(按种族/类型) | 无 | ❌ |
关键缺口:没有从 War3 的 SLK 文件读取数据,属性覆盖不全;缺少升级/科技/装饰物对象编辑。
五、触发器模块(Trigger Editor)
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| GUI 触发器编辑(事件/条件/动作) | 无 | ❌ |
| 变量管理(全局/局部) | 无 | ❌ |
| 自定义脚本(JASS/Lua) | 只能读取,无法编辑 | ❌ |
| 触发器调试 | 无 | ❌ |
触发器是 War3 地图的"灵魂"。没有触发器 = 只能做静态地图,无法做 TD、RPG、战役等。
六、区域与相机模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 矩形区域(Region)创建/编辑 | 无 | ❌ |
| 区域命名和触发器关联 | 无 | ❌ |
| 游戏相机位置设置 | 无 | ❌ |
| 相机边界(Camera Bounds) | w3i解析中有数据,GUI未展示 | ⚠️ |
七、地图属性模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 玩家设置(数量/颜色/种族/队伍) | w3i解析基础信息,无法编辑 | ⚠️ |
| 队伍设置 | 无 | ❌ |
| 开始资源(黄金/木材/人口) | 无 | ❌ |
| 游戏规则(英雄上限/经验率等) | 无 | ❌ |
| 加载画面(图片/文本) | w3i解析标题/副标题 | ⚠️ |
| 全局天气 | w3i解析天气字符串 | ⚠️ |
| 迷雾/战争阴影设置 | 无 | ❌ |
八、导入管理模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 导入自定义模型(.mdx) | 无 | ❌ |
| 导入自定义贴图(.blp) | 无 | ❌ |
| 导入自定义声音 | 无 | ❌ |
| 导入自定义脚本/数据 | 无 | ❌ |
| 文件路径管理 | 无 | ❌ |
九、声音与音乐模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| 背景音乐设置 | 无 | ❌ |
| 环境音效放置 | 无 | ❌ |
| 声音区域触发 | 无 | ❌ |
十、AI 与测试模块
| WE 功能 | 我们的编辑器 | 状态 |
|---|---|---|
| AI 脚本编辑 | 无 | ❌ |
| 在 War3 中启动测试 | 无 | ❌ |
| 地图验证/检查 | 无 | ❌ |
总结:核心缺失(按优先级排序)
| 优先级 | 模块 | 影响 |
|---|---|---|
| 🔴 P0 | 装饰物系统 | 地图视觉上"空" |
| 🔴 P0 | 触发器编辑器 | 地图无法有逻辑 |
| 🟡 P1 | 完整 SLK 数据库 | 对象编辑不专业 |
| 🟡 P1 | 区域/相机系统 | RPG/战役必备 |
| 🟡 P1 | 导入管理 | 自定义内容 |
| 🟢 P2 | 路径图编辑 | 导航/碰撞 |
| 🟢 P2 | 升级/科技编辑 | 完整对象编辑 |
| 🟢 P2 | JASS/Lua 脚本编辑 | 高级地图开发 |
一句话总结
我们的编辑器 ≈ WE 的 “地形面板 + 单位面板” 的简化版,缺失了装饰物、触发器、区域、导入管理、完整对象数据库等核心模块。
最接近 WE 完整体验的下一步:先补 装饰物系统(G) + 触发器解析(E),这样地图既有"场景感"又有"逻辑"。
====================================================================================
绝大多数可以,但有 3 个硬限制。
技术可行性总表
| 模块 | Lua 能做吗? | 限制说明 |
|---|---|---|
| 装饰物系统 | ⚠️ 部分 | 能解析 war3map.doo,能放置/删除,但无法渲染真实 3D 模型(.mdx),只能用彩色方块/图标代替 |
| 触发器编辑器 | ⚠️ 部分 | 能解析 war3map.wtg/wct,能展示/编辑文本,但 GUI 触发器需要上千个函数签名数据库(手工维护量巨大) |
| SLK 完整数据库 | ⚠️ 部分 | 能解析 SLK 格式,但需要用户本机有 War3 安装才能读取原始数据 |
| 区域/相机系统 | ✅ 可以 | 解析 + 2D 矩形框可视化,完全可行 |
| 导入管理 | ✅ 可以 | 文件复制 + MPQ 打包,完全可行 |
| 路径图编辑 | ✅ 可以 | 解析 + 网格叠加 + 笔刷编辑,完全可行 |
| 升级/科技编辑 | ✅ 可以 | 格式与 w3u 类似,复用现有编辑器 |
| JASS/Lua 脚本编辑 | ⚠️ 部分 | 文本编辑 ✅,但 LÖVE2D 里做语法高亮非常复杂 |
3 个硬限制(无法突破)
❶ 无法渲染 3D 模型(.mdx)
LÖVE2D 是纯 2D 引擎,不支持 War3 的 .mdx 模型格式。
| WE 中看到的 | 我们能做到的 |
|---|---|
| 真实的圣骑士 3D 模型 | 金色菱形 |
| 真实的树木/建筑模型 | 棕色方块 |
| 真实的技能特效 | 无法显示 |
结论:单位和装饰物永远只能是"简化图标",做不到 WE 那种真实模型预览。
❷ 无法渲染 War3 贴图(.blp)
War3 使用 .blp 贴图格式(Blizzard 私有格式),LÖVE2D 不支持。
这意味着:
- 无法显示真实地形纹理(只能用纯色方块近似)
- 无法显示单位头像/图标(除非预先转换为 .png)
❸ 触发器函数库过于庞大
WE 的 GUI 触发器有 ~1200+ 个内置函数,每个函数有特定的参数类型、返回值、分类。
例如:
CreateUnit(player, unitId, x, y, face) → unit
SetUnitState(unit, state, value) → nothing
TriggerRegisterTimerEvent(trig, timeout, periodic) → event
要做 GUI 触发器编辑器,需要维护一个完整的"函数签名数据库"。这在 Lua 中技术上可行,但需要手工录入几千条数据,维护成本极高。
一句话总结
Lua 能做 ≈ 80% 的功能:所有数据解析、2D 可视化、文件管理、属性编辑都可以。
做不到的 ≈ 20%:3D 模型渲染、真实贴图、专业级语法高亮。
如果接受"简化图标替代 3D 模型"这个前提,那么上面列出的所有模块都可以用 Lua 开发。
====================================================================================
完全可以,下面按限制逐个说明替代方案:
❶ 3D 模型渲染(.mdx)
方案 A:TypeScript + WebGL(最成熟)
工具:war3-model(开源,MIT 协议)
| 能力 | 状态 |
|---|---|
| MDX/MDL 解析 | ✅ 100% 支持 Classic + Reforged |
| WebGL 渲染 | ✅ 骨骼动画、粒子、团队颜色 |
| BLP1 解码 | ✅ 可转 PNG |
| 在线预览 | ✅ 浏览器直接打开 |
用法:在项目中嵌入一个 Web 预览窗口(Electron 或本地浏览器),调用 war3-model 渲染选中的单位和装饰物。
npm install war3-model
方案 B:C++ + OpenGL(性能最强)
参考项目:HiveWE(GitHub 开源)
HiveWE 本身是用 C++20 + OpenGL 写的完整 War3 编辑器,已解决:
- MDX 模型加载和渲染
- BLP/DDS 贴图解码
- 骨骼动画、粒子系统
- 地形渲染、装饰物渲染
如果愿意用 C++ 重写核心,HiveWE 的源码就是最佳参考。
方案 C:Python + PyOpenGL/Panda3D
适合快速原型,但 MDX 解析需要自己写或绑定 C 库。
❷ 真实贴图渲染(.blp)
最简方案:预先批量转换
工具:war3-model 的 Node.js CLI
npm install -g war3-model
# BLP → PNG
npx war3-model blp-to-png input.blp output.png
在 Lua 编辑器中只使用 PNG,导入地图时再用脚本把 PNG 转回 BLP。
Python 方案
# 使用 war3-model 的 BLP 解码逻辑(纯 Python 实现也有)
from PIL import Image
# BLP 解码后直接用 PIL 保存为 PNG
❸ 专业级语法高亮(JASS/Lua)
方案 A:VS Code 插件(最实用)
不用自己写编辑器,直接做一个 VS Code 扩展:
- JASS 语法高亮
- Lua 语法高亮(内置)
- War3 API 自动补全
- 一键打包 .w3x
这是现代 War3 地图开发的主流方式(类似 WTS 插件)。
方案 B:Electron + Monaco Editor
如果一定要在自建 GUI 中实现:
// Electron 窗口内嵌 Monaco(VS Code 同款编辑器)
const { MonacoEditor } = require('@monaco-editor/react');
// JASS 语法定义
monaco.languages.setMonarchTokensProvider('jass', { ... });
方案 C:LÖVE2D 内嵌(不推荐)
LÖVE2D 没有文本编辑组件,手写语法高亮需要:
- 自己实现光标、选择、滚动
- 自己实现 Token 解析和着色
工作量巨大,效果远不如专业编辑器。
推荐的整体技术架构
┌─────────────────────────────────────────────────┐
│ Lua CLI 编辑器 │
│ (解析/编辑/打包 — 已完成 ✅) │
├─────────────────────────────────────────────────┤
│ LÖVE2D 2D 可视化器 │
│ (地形/单位/装饰物简化图标 — 已完成 ✅) │
├─────────────────────────────────────────────────┤
│ Python / Node.js 辅助脚本层(新增) │
│ • BLP → PNG 转换器 │
│ • SLK 数据提取器(从 War3 安装目录) │
│ • MPQ 文件操作增强 │
├─────────────────────────────────────────────────┤
│ 浏览器 / Electron 3D 预览层(新增) │
│ • war3-model (TypeScript + WebGL) │
│ • 查看真实 MDX 模型和动画 │
├─────────────────────────────────────────────────┤
│ VS Code 插件层(新增) │
│ • JASS/Lua 语法高亮 + 自动补全 │
│ • 一键调用 Lua CLI 打包 │
└─────────────────────────────────────────────────┘
一句话总结
| 做不到的功能 | 推荐工具/语言 | 工作量 |
|---|---|---|
| 3D 模型渲染 | TypeScript + war3-model |
中等(集成到浏览器窗口) |
| 真实贴图 | Node.js CLI 批量 BLP→PNG | 很小 |
| 语法高亮 | VS Code 插件 | 中等 |
| 完整 3D 编辑器 | C++ HiveWE(直接用或参考) | 极大 |
最现实的路线:保留 Lua 核心,用 Python/Node.js 做辅助脚本,用 浏览器做 3D 预览,用 VS Code 做脚本编辑。
需要我先把 BLP→PNG 转换脚本 或 SLK 数据提取器 做出来吗?
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)