|
从本文起,我将开始定义一些术语(甚至英文术语),有些取自或是修改自现有的编程界术语,但绝大部分都将是全新的术语。这是为了让将来XML数据文件的研究能有一个确定的标准。
有一些新术语是我们在GA的SC2群里探讨得来,有一些是我新造的。当然此处的术语并不见得是死板或固定不变的,如有不妥部分,今后也会进行更改。
下文介绍术语时多以AbilData.xml为例子,但可以引申到MPQ包中GameData目录下所有的xml文件。
于是定义几个专有名词和术语。:
技能模板(Ability Template):从今天开始,将AbilData.xml中的定义的,以<CAbil*****>为标识来界定的每个元素称为一个技能模板。每个技能模板都完整地定义了一个技能。
由此引申出“模板(Template) ”这一概念,将MPQ包中GameData目录下所有xml文件中完整地定义了一个对象的整段元素称为一个模板。比如EffectData.xml文件中,由<CEffect*****>界定的每个元素,都称为一个效果模板。而BehaviorData.xml文件中,由<CBehavior*****>界定的每个元素,自然都称作行为模板。
属性(Property):我们将每个作为模板的xml元素所拥有的xml属性,及其子xml元素,通称为该模板的属性,注意该“属性”区别于xml术语中的属性。并用模板中的id这个xml属性的值来区分不同的模板。并可以直接用id的值来称呼该模板所定义的这类对象。但模板中名为id、default、value的xml属性一律不称为该模板的属性,它们在SC2的数据模板中有特殊涵义。id用来区分模板,default用来代表该模板是否可被继承,value用来给写成xml元素标识的模板属性赋值。
如:
[codes=xml]
<CAbilBuild default="1" id="TerranAddOns">
<EditorCategories value="Race:Terran,AbilityorEffectType:Units"/>
<Alert value="AddOnComplete"/>
<Type value="AddOn"/>
<FlagArray index="InstantPlacement" value="1"/>
<FlagArray index="PeonDisableAbils" value="1"/>
<FlagArray index="ShowProgress" value="1"/>
<InfoArray index="Build1" Unit="TechLab" Time="30">
<Resource index="Minerals" value="50"/>
<Resource index="Vespene" value="50"/>
<Button DefaultButtonFace="TechLabBarracks" State="Suppressed"/>
</InfoArray>
<InfoArray index="Build2" Unit="NuclearReactor" Time="40">
<Resource index="Minerals" value="50"/>
<Resource index="Vespene" value="50"/>
<Button DefaultButtonFace="NuclearReactor" State="Restricted"/>
</InfoArray>
</CAbilBuild>
[/codes]
这里定义的是TerranAddOns这个技能的模板,id用来做它的唯一标识,default=1代表它可以被继承,EditorCategories是它的一个属性。id的值为TerranAddOns,EditorCategories的值为Race:Terran,AbilityorEffectType:Units
此外,在同一个技能模板内有着相同标签的所有技能属性的集合称为一个属性数组(Property Array)。
如上面技能模板中的
<FlagArray index="InstantPlacement" value="1"/>
<FlagArray index="PeonDisableAbils" value="1"/>
<FlagArray index="ShowProgress" value="1"/>
这三个技能属性合称为一个FlagArray属性数组。也可省略标识中的Array,称其为Flag属性数组。
特别的,该模板中<InfoArray>标识所界定两个xml元素同样称为TerranAddOns技能的属性,将其下的子xml元素称为这些属性的子属性。也就是说,技能模板并不见只有一层属性。
实例(Instance):实例区别于模板,在UnitData.xml文件中定义了所有单位的模板,游戏创建单位是依照的就是这些模板。同一个模板,游戏却可以创造出多个相同类型的单位,我们将这些实际存在于游戏内的单位称为单位实例。类推可得技能实例、效果实例等等。我们将游戏通过模板而创建的实际对象通称为对象的实例。
在通常表述中,除非有必要,实例和模板可以不必区分。比如创造一个机枪兵的实例可说成是“创造一个机枪兵”,修改机枪兵的模板可以说成“修改一下机枪兵”。只要语境正确,不会产生歧义即可。
技能基础类(暂无英文名):每个技能模板都由一个以CAbil为开头的标识来界定,我们将这个标识其称为该技能模板的技能基础类。
如上例的话,TerranAddOns技能的基础类就是CAbilBuild
以此我们可以引申出“基础类”的概念,同理也就有效果基础类、行为基础类、单位基础类、需求基础类等等……
技能基础类是做什么的?这个很难定义,并不能简单地称它为技能的基本效果,因为SC2中的技能是由各种最基本的技能、效果、行为、动作、提示、按钮、目标、需求、需求节点、验证器、模型、光线、错误、动体的基础类以及他们的对应的属性构成的。
而技能、效果、行为这三类东西的定义也没有完全绝对的界限。
能明确说的一点是技能基础类定义的是最基础的执行技能的方式。也就是直接呈现给用户的最上层的XML数据。每一个技能模板都必须指定一个技能基础类。
明天我会写个帖子列出目前所有已知的技能基础类,并简单介绍我已经知道的那部分技能基础类的作用。 |
|