Mod语法:修订间差异

来自RustedWarfare Wiki
添加的内容 删除的内容
(.)
标签移动版编辑 移动版网页编辑 高级移动版编辑
 
(未显示3个用户的43个中间版本)
第1行: 第1行:
{{欢迎编辑}}
{{欢迎编辑}}
== ini文件 ==
== .ini文件 ==
UTF-8纯文本文件。游戏通过读取以<code>.ini</code>为扩展名的文件来获得某个单位的参数信息。其内容主要由节(Section)和参数(Parameter)两部分组成。
'''ini文件'''一般是以ini为后缀名的用于决定一个自定义[[单位]]特性的纯文本格式文件。特别的,作为模板代码的ini文件后缀名可以是任意的。
=== 组成 ===
=== 格式 ===
<pre style="white-space:pre;overflow:auto;margin:0;padding:0;width:100%;">
ini文件由段落和注释组成,而段落又由属性组成。多样化的段落和属性组合使得ini文件能够描述多种多样的单位,甚至于使得单位彻底改变原版游戏玩法。
#节由两个半角方括号包裹,单独占一行
==== 段落 ====
[section]
段落以以形如[section]的文本开头,至另一段落开始或文件末尾结束。段落将功能不同的属性分成若干部分。
#参数由它的名称和它的值构成,名称和值使用半角冒号分隔,通常单独占一行
==== 属性 ====
name: value
属性是形如key:value的单行文本(或key:"""多行文本"""的多行文本),用于实现单位的各项功能。
</pre>
=== 基本语法 ===
<p style="font-size:12px;color:#888;margin-top:0px;"><nowiki>*</nowiki>另有部分代码存在不同的书写格式,待到具体代码再作讲解。</p>
打开[游戏目录]\assets\units,选择一个文件夹进入,你将看到一个以ini作为扩展名的文件以及其它文件。
打开这个ini文件后,一个描述单位信息的基本结构就会出现在你的记事本(或者其它文本编辑软件)里。
一个mod单位的ini文件基本可以这样表示:
[部分1]
[属性1]:[值1]
[部分2]
[属性2]:[值2]
举例,单位侦察者的ini文件是scout.ini,打开后,第一个看到的“部分”是[core],它描述单位的核心信息,例如血量、价格名称等等。
[core]以下直到[graphics](也即另一个“部分”)前的内容都属于[core]。
例如:
[core]
name: scout
在这段内容中,“name”属性用于指定单位的名称,当未指定单位显示什么名称时,游戏就以它的值(即“scout”)显示单位名称(如果游戏语言是英文)。


参数从属于节,要想具体参数从属于具体节,需将节写在参数行的上方;不同参数的值有不同类型,且规定有取值区间。
事实上,在[[Rusted Warfare]]中,也存在不以ini为后缀名的ini文件,它们的主要作用是作为[[模板代码]]被一般的ini文件调用。
=== 注释 ===
=== 节的类型 ===
截至<u>1.15</u>版本,节的类型有:
注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。注释只是为了提高可读性,不会被计算机编译。
<pre style="white-space:pre;overflow:auto;margin:0;padding:0;width:100%;">
[core]--基础节,涉及单位的名称、生命值、体积大小、是建筑与否等基本设置。
[canBuild_NAME]--可建造节,涉及单位能建造生产那些单位,建造方式和条件等设置。
[graphics]--图像节,涉及单位主体贴图等设置。
[attack]--攻击节,涉及单位能攻击与否、最大攻击范围等设置。
[turret_NAME]--炮塔节,涉及单位炮塔的贴图、旋转速度、攻击间隔等设置。
[projectile_NAME]--炮弹节,涉及单位炮塔发射的弹丸的贴图、寿命、飞行速度、伤害等设置。
[movement]--移动节,涉及单位的移动类型、速度、转向速度等设置。
[ai]--AI节,涉及AI玩家对该单位的建造、升级概率以及部分单位特性等设置。
[arm_#]--臂节,涉及单位臂装饰物的位置、贴图等设置。
[leg_#]--腿节,同上。
[attachment_NAME]--附属节,涉及单位的子附属单位的位置、能攻击与否等设置。
[action_NAME]--操作节,涉及单位的资源手动添加、手动升级按钮、添加路径点等设置。
[hiddenAction_NAME]--隐藏的操作节,同上。
[effect_NAME]--特效节,涉及单位炮塔开火,弹丸飞行、爆炸等生成的特效的设置。
[animation_NAME]--动画节,涉及单位移动、部署、攻击等时机播放的帧动画的设置。
[placementRule_NAME]--放置规则节,单位建造时放置的规则的设置。
[global_resource_NAME]--全局资源节,队伍内单位通用的自定义资源的名称、样式设置。
[resource_NAME]--资源节,具体单位自用的自定义资源的名称样式设置
[template_NAME]--模板节,节之间复制参数时选用。
[comment_NAME]--注释节,用于大篇幅注释。
[decal_NAME]--贴花节,单位身上的贴花、伪3D等设置。
</pre>
部分节可以自行添加名称或序号,如上面的"NAME"要求填写名称,"#"要求填写序号(1-20),这样得到的同类型不同名称的节,在应用时是各自独立的;允许重复书写一个节使其分布在文档的不同位置。


=== 参数的类型 ===
铁锈战争的<code>.ini</code>文件语法在注释方面提供了三种方式:
参数是文档中真正起作用的部分,每行参数必然关联者一个功能;参数(行)必须跟随在某个节的后面,以从属该节;节会因缺少必要参数而报错;部分参数有默认值,即使不写出也会起作用。<br />
有关具体参数的参考请移步至[[mod参数]]。


=== 书写建议 ===
(1)用<code>#</code>进行单行的注释
规范书写是为了方便阅读,在你使用眼睛查找某个参数时心中越多的筛选条件你找的就会越快,而我们直觉上会对写过的代码进行功能上的归类,所以你节之间插入两个以上的空行,几行参数组合形成的功能块你也可以在它们上下各空一行与其他参数进行分隔;而参数名称和值之间只有冒号未免拥挤,你可以在冒号后加入一个空格。


== mod-info.txt文件 ==
在行的开头加上<code>#</code>意味着计算机不会编译该行内容。
UTF-8纯文本文件。游戏通过读取位于mod文件夹根目录下<code>mod-info.txt</code>这样命名的文件来获得由mod作者提供的mod的描述信息。
<pre>
[projectile_1]
#directDamage: 20
#有人反映单发伤害太低,这里改成了30
directDamage: 30
</pre>


格式:
(2)用<code>"""</code>和<code>"""</code>的组合进行多行注释
<pre style="white-space:pre;overflow:auto;margin:0;padding:0;width:100%;">
[mod]
#告诉游戏能够支持该mod运行的最低游戏版本。若不满足要求的最低版本,提示后仍可加载,但除地图外不可用,同时不提供代码错误的报错提醒。
minVersion: 1.15p7
#该mod在游戏中显示的标题
title: Mega Builders
#该mod在游戏中显示的描述。使用"\n"使其在显示时换行(pc版尚不能换行显示)
description: Example mod which replaces builders with Mega Builders.


#在游戏中播放mod里的.ogg或.wav音频文件作为背景音乐
在行头使用<code>"""</code>作为起始,在之后的任意位置使用<code>"""</code>作为结束。在其之间的内容均不会被编译。
[music]
<pre>
#填音乐文件夹的路径
sourceFolder: soundtrack
#当使用该mod的单位时特别播放该mod的音乐,填"true"或"false"
whenUsingUnitsFromThisMod_playExclusively: true
#加入音乐播放列表,填"true"或"false"
addToNormalPlaylist: false

#该文件支持单行注释
"""
"""
这是三个英文引号
多行
实际上这个组合还有个功能,就是用它引住key: value的value使value可以换行输入如:
注释
builtFrom_1_name: airFactory
可以是
builtFrom_1_name: """airF
actory"""
可是有一种情况,你用多行注释注释掉了有换行输入的内容它显然就会混乱,也就是目前的情况
"""
"""
</pre>
</pre>


== all-units.template文件 ==
(3)用<code>[comment_NAME]</code>进行成节的注释
UTF-8纯文本文件。内容格式与<code>.ini</code>文件一致。游戏程序会识别<code>all-units.template</code>这样命名的文件,将其内容自动应用到同级及以下级的所有<code>.ini</code>文件中(效果与使用<code>core</code>节下的<code>copyFrom</code>一致)。若存在代码错误,报错不会指向其本身,而是其所应用的<code>.ini</code>文件。另外,若两文件同一参数的值存在冲突,下级的<code>all-units.template</code>会覆盖上级的<code>all-units.template</code>。

该节之后的行直到下一个节前一行均不会被编译。
<pre>
[comment_hiddenAction_1]
autoTriggerOnEvent: created
addGlobalTeamTags: 计时
[comment_1]
maxHp: 2000
[core]
#[comment_NAME]节下的东西是不会被编译的,去引用它会提示找不到任何key
@copyFromSection: comment_1
</pre>


=== 模板语法 ===
(待补充)
=== 代码表 ===
为了方便Mod开发者进行代码的编写,一种被称作代码表的工具被制作出来,用于对照代码与其作用。

具体的代码表可以参考[https://www.rustedwarfare.com/index.php?c=app&a=puyuetian_htmlpage:index&htmlname=dm 这里]
== mod-info.txt文件 ==
(待补充)
== all-units.template文件 ==
(待补充)

2023年8月5日 (六) 15:39的最新版本

.ini文件

UTF-8纯文本文件。游戏通过读取以.ini为扩展名的文件来获得某个单位的参数信息。其内容主要由节(Section)和参数(Parameter)两部分组成。

格式

#节由两个半角方括号包裹,单独占一行
[section]
#参数由它的名称和它的值构成,名称和值使用半角冒号分隔,通常单独占一行
name: value

*另有部分代码存在不同的书写格式,待到具体代码再作讲解。

参数从属于节,要想具体参数从属于具体节,需将节写在参数行的上方;不同参数的值有不同类型,且规定有取值区间。

节的类型

截至1.15版本,节的类型有:

[core]--基础节,涉及单位的名称、生命值、体积大小、是建筑与否等基本设置。
[canBuild_NAME]--可建造节,涉及单位能建造生产那些单位,建造方式和条件等设置。
[graphics]--图像节,涉及单位主体贴图等设置。
[attack]--攻击节,涉及单位能攻击与否、最大攻击范围等设置。
[turret_NAME]--炮塔节,涉及单位炮塔的贴图、旋转速度、攻击间隔等设置。
[projectile_NAME]--炮弹节,涉及单位炮塔发射的弹丸的贴图、寿命、飞行速度、伤害等设置。
[movement]--移动节,涉及单位的移动类型、速度、转向速度等设置。
[ai]--AI节,涉及AI玩家对该单位的建造、升级概率以及部分单位特性等设置。
[arm_#]--臂节,涉及单位臂装饰物的位置、贴图等设置。
[leg_#]--腿节,同上。
[attachment_NAME]--附属节,涉及单位的子附属单位的位置、能攻击与否等设置。
[action_NAME]--操作节,涉及单位的资源手动添加、手动升级按钮、添加路径点等设置。
[hiddenAction_NAME]--隐藏的操作节,同上。
[effect_NAME]--特效节,涉及单位炮塔开火,弹丸飞行、爆炸等生成的特效的设置。
[animation_NAME]--动画节,涉及单位移动、部署、攻击等时机播放的帧动画的设置。
[placementRule_NAME]--放置规则节,单位建造时放置的规则的设置。
[global_resource_NAME]--全局资源节,队伍内单位通用的自定义资源的名称、样式设置。
[resource_NAME]--资源节,具体单位自用的自定义资源的名称样式设置
[template_NAME]--模板节,节之间复制参数时选用。
[comment_NAME]--注释节,用于大篇幅注释。
[decal_NAME]--贴花节,单位身上的贴花、伪3D等设置。

部分节可以自行添加名称或序号,如上面的"NAME"要求填写名称,"#"要求填写序号(1-20),这样得到的同类型不同名称的节,在应用时是各自独立的;允许重复书写一个节使其分布在文档的不同位置。

参数的类型

参数是文档中真正起作用的部分,每行参数必然关联者一个功能;参数(行)必须跟随在某个节的后面,以从属该节;节会因缺少必要参数而报错;部分参数有默认值,即使不写出也会起作用。
有关具体参数的参考请移步至mod参数

书写建议

规范书写是为了方便阅读,在你使用眼睛查找某个参数时心中越多的筛选条件你找的就会越快,而我们直觉上会对写过的代码进行功能上的归类,所以你节之间插入两个以上的空行,几行参数组合形成的功能块你也可以在它们上下各空一行与其他参数进行分隔;而参数名称和值之间只有冒号未免拥挤,你可以在冒号后加入一个空格。

mod-info.txt文件

UTF-8纯文本文件。游戏通过读取位于mod文件夹根目录下mod-info.txt这样命名的文件来获得由mod作者提供的mod的描述信息。

格式:

[mod]
#告诉游戏能够支持该mod运行的最低游戏版本。若不满足要求的最低版本,提示后仍可加载,但除地图外不可用,同时不提供代码错误的报错提醒。
minVersion: 1.15p7
#该mod在游戏中显示的标题
title: Mega Builders
#该mod在游戏中显示的描述。使用"\n"使其在显示时换行(pc版尚不能换行显示)
description: Example mod which replaces builders with Mega Builders.

#在游戏中播放mod里的.ogg或.wav音频文件作为背景音乐
[music]
#填音乐文件夹的路径
sourceFolder: soundtrack
#当使用该mod的单位时特别播放该mod的音乐,填"true"或"false"
whenUsingUnitsFromThisMod_playExclusively: true
#加入音乐播放列表,填"true"或"false"
addToNormalPlaylist: false

#该文件支持单行注释
"""
和
多行
注释
"""

all-units.template文件

UTF-8纯文本文件。内容格式与.ini文件一致。游戏程序会识别all-units.template这样命名的文件,将其内容自动应用到同级及以下级的所有.ini文件中(效果与使用core节下的copyFrom一致)。若存在代码错误,报错不会指向其本身,而是其所应用的.ini文件。另外,若两文件同一参数的值存在冲突,下级的all-units.template会覆盖上级的all-units.template