使用W3x2Lni转换地图后,你可以点击“详情”按钮查看本次转换的报告。
而本文的目的便是对这些报告做进一步的详细说明,帮助你更好的调整你的地图,从而在转化(尤其是SLK)后有更好的效果。

严重错误

转换后可能无法正常游戏。

读取(XX/XX)个文件,还有XX个文件没有读取

这个错误的原因是你的地图没有完整的 (listfile) 文件,虽然工具尝试搜索了导入列表(war3map.imp)但文件依然不全。

  • 影响: 转换出来的地图丢失部分文件。
  • 原因: 你进行转换的地图已经被其他工具移除了 (listfile) 文件。(例如你曾经使用 Wc3MapMax++ 优化过地图,且优化选项没有选择 保留listfile文件)
  • 建议: 使用包含完整 (listfile) 文件的地图。

警告

转换前的地图与转换后的地图内容可能存在差异。

不支持的游戏数据设置

编辑器中你可以将地图的游戏数据设置为“1.07”、“自定义”或“最新版本”,这3种游戏数据在实际运行时会产生差异。例如:游戏数据设置为“1.07”时,无论用哪个版本的魔兽游玩此地图,冰霜巨龙的攻击类型均为“穿刺”;而将游戏数据设置为“最新版本”后,你使用1.07版本游玩,冰霜巨龙的攻击方式为“穿刺”,但你使用1.24版本游玩时,攻击方式却会变为“法术”。当你将地图进行SLK转换时,地图的版本便会固定在某个版本的数据。考虑到绝大部分地图都不是对战地图,游戏数据不应该根据魔兽版本的变化而变化,因此我们总是将地图固定在1.07版本。

  • 影响: 部分默认数据会发生变化。
  • 原因: 游戏数据设置为了“自定义”或“最新版本”。
  • 建议: 将游戏数据设置为“1.07”。(情节 –> 游戏选项 –> 游戏数据设置)

对象的ID冲突

每个对象都有一个4位的ID,你可以在编辑器中按下Ctrl+D来查看它们。当地图没有SLK化时,魔兽可以正确区分类型不同但ID相同的对象(如单位 H000 和魔法效果 H000),也能正确区分字母相同但大小写不同的的对象(如英雄单位 H000 和普通单位 h000)。然而一旦当地图转换为SLK格式后,魔兽遍无法区分这些情况了,这些对象的文本可能会发生错乱。

  • 影响: 文本可能错乱。
  • 原因: 这些对象的ID相同。(不考虑大小写)
  • 建议: 重建这些对象,保证他们的ID互不冲突。

文本不能包含字符”}” / 文本中的”}”被修改为了”|”

魔兽会将长文本在符号 } 处截断,例如你有个技能说明为“造成100点{火焰}伤害”,在魔兽中实际看到的则是“造成100点{火焰”。本工具会在转换地图时会尝试让这段文本正确显示,但在少数情况下还是需要修改这个符号才能正确显示。

  • 影响: 可能有部分文本显示不一样。(转换前的地图文本显示不全、转换后的地图符号 } 变成了 |
  • 原因: 长文本中使用了符号 }
  • 建议: 长文本中不要使用该符号。

没有SLK化的数据

SLK是一个适合游玩的格式,OBJ则是适合编辑的格式。魔兽加载SLK格式的速度要远快于加载OBJ格式的速度,这也是将地图转换为SLK格式的主要目的。然而在某些情况下,部分OBJ格式的数据无法转换为SLK格式,它们会继续以OBJ格式的形式留在你的地图里,从而拖慢地图的速度。一个优秀的地图作者应该尽量减少OBJ格式的数据。

数据超过了4级

部分对象(如技能)可以有多个等级,你可以定义一个数据在不同等级时的数值。不过SLK格式最只支持1到4级的数据(装饰物可以支持到10级),超过4级的数据就只能保留为OBJ格式。

  • 影响: 拖慢游戏速度。
  • 原因: 对象的等级超过4级。
  • 建议: 对象的等级不要太高。

字符串可以被转换为数字

部分SLK格式的字符串数据(如模型路径)如果可以转换为数字,那么魔兽将无法正确识别此字符串。为了保证该数据正确生效,我们只能将其保留为OBJ格式。

  • 影响: 拖慢游戏速度。
  • 原因: 字符串可以被转换为数字。(第一个字符是数字或 -,或者第一个字符是 . 且第二个字符是数字)
  • 建议: 修改这些字符串,保证其不符合上述转换规则。

文本内容和另一个对象冲突

前文说过,当对象的ID冲突时他们的文本内容可能会发生错乱。目前我们会将这些冲突对象中类型相同的对象进行处理,将部分文本数据保留为OBJ格式以保证他们的文本不会错乱。

  • 影响: 拖慢游戏速度。
  • 原因: 这些对象的ID相同。(不考虑大小写)
  • 建议: 重建这些对象,保证他们的ID互不冲突。

文本内容同时包含了逗号和双引号

由于转义符的原因,魔兽无法正确识别一个既包含符号 , 又包含符号 的SLK格式文本,所以这些文本也只能保留为OBJ格式了。

  • 影响: 拖慢游戏速度。
  • 原因: 文本同时包含 ,
  • 建议: 修改这些文本。

简化

转换为SLK格式时,无论是用到的还是没用到的对象都会保存到地图里。而简化的目的则是将没有用到的对象删掉,将用到的对象留下。为了达成这个目的,我们会通过引用链来分析地图中有哪些对象是有用到的(即“引用分析”),这个分析过程比较复杂,因此我们提供了详细的报告供作者确认引用分析是否正确。特别说明的是,引用分析无法分析动态引用(例如根据输入的聊天信息创建任意单位)。如果你发现有些你需要的对象被意外删除了,你需要通过别的方式表明你对它的引用,例如:创建一个无用的触发器,将你需要的对象在里面提到一下。

保留市场物品

当你使用了以“市场”(nmrk)为模板的单位后,魔兽便会定期向这个单位添加“可被市场出售”的物品,因此所有设置了“可被市场出售”的物品都会被留下。

  • 建议: 如果你不需要市场的特性,请使用其他单位作为模板重建此对象。

简化时没有找到对象

在进行引用分析时,我们发现某个需要留下的对象根本不存在。一些常见的情况有:

  • 你曾经给单位的技能列表中添加了某个技能,但后来把这个技能删了。
  • 触发器创建对象的时候写错了ID。
  • 物编中按住shift填写的对象ID错误。注意,即使你填写了“ALOC”或是“Aloc123”,编辑器中依然会显示为“蝗虫”,但实际上该值是无效的。

  • 建议: 删掉无效引用,改正错误引用。

引用未分类对象

引用了一个没有定义仅有文本的对象。

  • 建议: 用一个有定义的对象来替代它。

简化掉的对象数 XXX/YYY

报告一下地图中一共有 YYY 个对象,其中 XXX 个对象由于没有引用到而被删除。

保留的默认对象数 XXX/YYY

地图中有 XXX 个默认对象被保留了下来。这里的默认对象指的是魔兽自带的,且完全没有修改过的对象。之后的报告会显示部分对象以及它们的引用来源。事实上绝大部分保留下来的默认对象并不会也不希望被用到,因此你需要想办法切断引用链。一个最代表性的例子:青蛙被某个马甲单位引用,这个马甲单位是从兽族苦工上复制出来的。具体引用链为:马甲单位-可建造建筑 –> 风暴祭坛-训练单位 –> 暗影猎手-技能 –> 妖术-变形单位 –> 青蛙。显然你需要把这个马甲单位的 可建造建筑 清空,因为它引用了一万个无用的默认对象。

  • 建议: 尽可能减少保留的默认对象,切断无用的引用链。

简化掉的自定义对象数 XXX/YYY

地图中有 XXX 个自定义对象被移除了。这里的自定义对象包括魔兽自带,但被你修改过的对象。当地图历经多个版本的变迁后难免会出现以前有用但后来被废弃的对象,你可以参考该报告来移除不需要的对象,从而加快地图开发效率。

  • 建议: 移除不需要的自定义对象。

公式计算失败

部分文本中可以使用诸如 的形式来引用一个数据,转换为SLK格式后数据的值会被替换到文本中。

  • 影响: 文本显示不正确。
  • 原因:
    • 对象不存在,例如 ,但地图里并没有 A000 这个对象。
    • 语法不正确,例如
    • 误用了 < 符号,例如“对目标造成100点<火焰>伤害”。
  • 建议: 修改错误的语法,替换掉误用的 < 符号。

无效的物编数据

OBJ数据里有一些无效的数据,一般是因为曾经使用过奇怪的工具生成过物编,或是使用的编辑器里有一些错误设置。

保存到wts中的文本

编辑器会将长文本保存到 war3map.wts 文件中,而这正是导致地图加载速度缓慢的主要原因。使用此工具转换地图时会尽可能的将长文本放回到脚本或物编里,但由于有字符数限制,一些过长的文本还是只能保留在wts里。

  • 影响: 拖慢地图加载速度。
  • 原因: 文本长度过长。
  • 建议: 减少这些文本的长度。

其它

物编信息不完整,强制读取slk文件

  • 影响: 会读取地图内的slk文件。
  • 原因: 转换前的地图是SLK格式的地图。

没有找到字符串定义

  • 影响: 长文本显示为空字符串。
  • 原因: 地图的 war3map.wts 文件被修改过。