找回密码
 点一下
查看: 1721|回复: 16

War3 Mod的数据对象ID命名规则(一)

[复制链接]
发表于 2015-1-28 13:38:27 | 显示全部楼层 |阅读模式
由于War3 Mod眼看着这两周就要发布了,所以我打算开始慢慢写一些方便地图作者们使用这个Mod的教程和小提示。


为了能最大限度照顾从war3编辑器转来的同学的习惯,War3 Mod尽了最大可能为每个来自War3的对象使用了War3引擎中的四字符格式内部ID

例如,若是按照SC2的命名习惯,步兵的内部ID通常会是其英文名Footman。但是在我这个War3 Mod中,对象内部ID用的却是war3的步兵四字符ID:hfoo,而“步兵”作为其显示名同时赋予这个单位。



这样做有哪些具体的好处呢?



例如,地图作者们在调试模式下运行搭载了War3 Mod的地图时,可以随时使用SC2本身的调试作弊码来创建自己想要的单位,而不需要回到编辑器里去编写脚本或者放置单位。而目前的命名方式能极大地利用这一引擎优势。

如在聊天框中输入


MakeUnit 步兵

即可在鼠标位置创建一个步兵。没错,这个调试码是支持中文的,因此你就算不知道一个兵种的英文名或内部ID,也可以随时随地创建它们用来测试你的地图。MakeUnit 凯尔就可以创建一个凯尔萨斯。



对于战役英雄,直接在MakeUnit后面输入它们的名字即可创建他们,对于非战役英雄,由于它们有许多随机名字,因此我在这里设置的规则是需要在Makeunit后面跟英雄职业,比如MakeUnit 吉安娜会创建吉安娜,而MakeUnit 大法师则会创建一个大法师对战英雄。


更方便的是,你甚至不需要输入单位的全名即可使这个调试码生效,例如MakeUnit 阿尔,或者MakeUnit 阿就能创建阿尔萨斯。系统会自动查找所有以“阿尔”或“阿”开头单位,并列出所有符合条件的单位列表,然后创建列表中的第一个单位。



好了,你现在可能会想问,如果遇到名字一样的单位怎么办呢?

我们从上图中可以发现,这个War3 Mod和魔兽3编辑器一样,数据库里有三个阿尔萨斯!分别是拿锤子版、拿剑版(霜之哀伤)和死亡骑士版,那么究竟要如何指定哪个阿尔萨斯呢?

其实,MakeUnit作弊码除了可以用单位中文/英文名外,还可以直接用单位内部ID来创建单位。大家可以注意到,图中下方屏幕提示的三个阿尔萨斯后面都跟了个括号,每个括号里都是四个字母,Harf,Hart,Uear.这对没接触过War3编辑器人来说,这几个字符的含义可能会让一般人摸不着头脑,但是只要是对War3编辑器曾有过较深入的了解的话,就能立刻看出这四个字符分别是三个版本的阿尔萨斯的内部ID。Harf是霜之哀伤版(Human Arthas w/ Frostmourne),Hart是普通的拿锤子版(Human Arthas),Uear是死亡骑士版(Undead Evil Arthas)。

因此如果你想要创建死亡骑士版本的阿尔萨斯,那么就只需要输入MakeUnit Uear就可以了,由于单位内部ID永远是唯一的,因此只要你输全了,就不可能出现创建了另一个单位的问题。

MakeUnit hfoo

该指令同样会创建步兵,因为hfoo就是步兵的内部ID。




用惯了War3编辑器的同学们肯定对大部分War3常用单位的ID都记熟了,但是就算你是SC2才进门的地图作者,也完全不用担心记忆单位ID的问题。且不说War3里面重名的单位其实并不多,就算真的遇到了,你也可以不管三七二十一,先用单位的中文名来创建了再说。就像上面的那几张图显示的那样,系统会在屏幕上列出所有同名单位的ID(在单位名字后面的括号中),因此就算记不住ID,也可以直接照着屏幕上的抄,都创建一遍总有一个对的吧。

注:MakeUnit作弊码不仅仅可用于创建单位,物品,飞弹,可破坏物都等等对象都可以用它来创建。我在制作这些对象时同样使用了War3的对象ID,因此你可以用MakeUnit + 他们的中文/英文名或是他们在War3中的内部ID来方便地创建他们。

同时,在编辑器中,你也可以像和在war3编辑器里一样,通过按下Ctrl+D来显示每个对象的内部ID(再按一次即可恢复)。(左图为搭载了war3 mod的sc2编辑器,右图为war3编辑器)





与War3统一内部ID的作用远远不止于方便测试这种细节(虽然这些个窍门确实会非常有用)。最重要的是,这一命名规则还直接关系到War3 Mod的一个后续强化项目:Jass-Galaxy

Jass-Galaxy系统仍然在开发中,但它是作为War3 Mod的一个强化功能存在的,因此War3 Mod并不需要等它完成,而是一年前就是随时可以发布开测的状态。

我以后会专门写一篇帖子说明Jass-Galaxy系统的细节,但要要简单地说明的话,Jass-Galaxy就是在SC2的脚本环境下直接模拟War3的脚本环境和API,并通过这一点来实现War3地图脚本到SC2脚本的直接转换!——简单来说就是把以前的War3地图转换基于War3 Mod的SC2地图,并能在SC2下正常运作。

出于现实考虑,由于Jass脚本中存在各种“Bug写法”,最终想要实现100%转换多半是做不到的,但是目前的测试表明,对每张地图Jass-Galaxy至少可以实现90%的转换。

于此同时,作为War3复刻的一部分,Jass-Galaxy还将提供与War3的Jass脚本一致的API(简单来说就是把War3的脚本API用同名函数全部实现一遍。)

例如,在war3中,下面这句Jass脚本在会在地图的正中心创建一个步兵:
CreateNUnitsAtLoc( 1, 'hfoo', Player(0), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )

而在Jass-Galaxy中,你将可以通过完全一样的语句在War3 Mod(SC2)里实现完全相同的效果。

由此,War3 Mod与War3原版统一对象内部ID就变得更为重要了。因为War3的Jass脚本中充斥了各种各样以对象类型为参数的操作。创建单位,禁止技能,摧毁可破坏物等等。若不使两边的对象ID一致的话,当然就会出现无法正常解析的问题了。







好了,关于这个对象ID命名的事情暂时先写到这里。之后我会找时间说明War3 Mod之间的各种不同对象是如何关联起来的。



您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-22 09:14 , Processed in 0.120223 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表