下面是与 暴雪官方 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 数据提取器 做出来吗?

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐