单位编辑:修订间差异

标签移动版编辑 移动版网页编辑
无编辑摘要
标签移动版编辑 移动版网页编辑
 
(未显示2个用户的14个中间版本)
第1行: 第1行:
== 创建单位 ==
游戏通过读取"Rusted Warfare\mods\units"目录下的mod文件来加载mod。<br>
先请按步骤将这个名为“hello”的单位加入到游戏中。
".rwmod"文件是mod的打包文件格式,实际游戏可通过直接读取目录下的mod文件夹来读取mod数据。<br>
1.打开游戏的mod文件路径,rustedWarfare/units或Rusted Warfare\mods\units。<br>
一个常规的mod文件夹目录结构如下所示:<br>
2.创建一个名为hello的文件夹。<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
3.在hello文件夹中创建一个名为hello.ini的文件。<br>
XX模组
4.用文本编辑器打开hello.ini文件。<br>
  |- 单位
5.复制以下代码到文本编辑器中。
      |- xx单位
<pre>
            |- xx单位.ini
[core]
            |- xx单位_身体.png
name:hello
            |- xx单位_炮塔.png
radius: 10
            |- xx单位_残骸.png
mass: 3000
            |- xx单位_开火.ogg
maxHp: 800
            |- xx单位_子弹.png
price: 1000
            |- xx单位_子弹飞行轨迹.png
 
      |- all-units.template
[graphics]
  |- 地图
image: SHARED:light_50.png
      |- xx.tmx
 
      |- xx_map.png
[attack]
  |- 音乐
canAttack: false
      |- xx.ogg
 
  |- mod-info.txt
[movement]
</pre>
movementType: LAND
如果我们要创建一个有效的mod,其目录结构至少应该为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
      |- all-units.template
  |- mod-info.txt
</pre>
其中,mod-info.txt包含了对该mod的声明信息,这里您可以提供mod的名称、介绍、可运行的最低版本要求等信息,如:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
[mod]
minVersion:v1.15
title:在这里编写你的标题MOD
description: 你的MOD简介
</pre>
</pre>
6.启动游戏,在主界面点击mods(或模组)进入mod管理界面。<br>
all-units.template文件是纯文本文件,其内容里声明的属性将自动应用到其所在目录的次级目录的所有.ini文件中,这通常用于省写某些通用于全mod的单位属性,如:<br>
7.勾选名为hello的项,点击Reload(或重新加载)按钮,完成后点击Save(或保存),回到主界面。<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
8.点击单人游戏-沙盒模式-开始,进入沙盒模式的对局。<br>
#这里声明了一种mod里的一种消耗性资源黄金,如果不使用all-units.template文件的功能,我们需要在每个单位的.ini文件中都写一段下面的声明
9.通过侧边栏找到hello单位并放置在战场上。<br>
[global_resource_gold]
10.试着选中这个单位,并下达移动指令,观察单位是否会进行转向和移动。<br>
displayName: 黄金
11.到这里你便成功在游戏中创建了一个新的单位。<br>
displayNameShort: 金
经过以上体验,我可以带点全知视角地帮你总结创建单位的思路:
displayColor: #ffd700
*在放置mod的文件路径下创建新单位的文件夹。
displayWhenZero: true
*为这个单位写一个ini文件,这个文件将包含这个单位的所有属性信息。
displayPos: 1
*将单位加载进游戏中,选择沙盒模式进行调试。
这里关键环节是在ini文件中填入有效的属性信息。
 
具体地,单位是一堆参数的集合,你要做的是为每个属性填写具体的值。比如单位的名称是什么你要填写“单位的名称是‘重型坦克’”,单位的生命值是多少,你要填写“单位是生命值是‘600’”,只不过现实情况是你需要将这些信息格式化地记录在ini文件中,其变成“name: 重型坦克”“maxHp: 600”,这里游戏给出的书写规则是maxHp表示单位的生命值上限,你需要遵从这些规则。此外游戏规定ini里的每个属性代码需要从属于某个节,即表现为:
<pre>
[turret_2]
image:
[projectile_1]
image:
</pre>
</pre>
这里节“turret_2”的“image”属性实际意义是炮塔2的贴图,节“projectile_1”的“image”属性的实际意义是炮弹1的贴图,两个“image”如果没有写在各自的节下面它是表达不出“这个贴图是谁的”这层意思的。
.ini文件是单位的参数配置文件,是纯文本文件。游戏里的一种单位对应一个.ini文件。我们在.ini文件中声明了一种单位所具有的属性,如单位的名称、生命值、攻击力等。下面我们将重点学习如何编辑单位的配置文件以及单位都可以由哪些属性。<br>
首先我们应该了解.ini文件是一种常见的配置文件格式,其为纯文本文件,使用特定的语法来存储声明信息。其语法结构上包含两部分:关键字和它的值(称为键值对)以及为不同功能划区的节。其具体语言格式为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
[sectionA]
key1: VALUE
key2: VALUE


这些属性和从属于哪个节官方文档(我们习惯称为代码表)都有给出。你应该大致读几遍代码表,了解每个代码什么功能,熟悉后,你就可以独自读ini文件增删单位的属性了。
[sectionB]
 
key1: VALUE
== 调试单位 ==
看了前面的理论,你可能完全无感,接下来我会引导你改进一下最开始的单位,来充实细节。
 
我们先来注释每行代码的作用。
<pre>
 
#在行首使用#使该行内容不会被游戏读取为有效内容


[sectionC]
key1: VALUE
key2: VALUE
key3: VALUE
</pre>
游戏定义了许多单位属性的关键字,如我们要声明一个单位的名称为“小坦克”,碰撞半径为“11”,重量为“3000”,生命值上限为“210”,移动方式为“陆地”,移动速度为“1,1”,转向速度为“4.1”,这样写:
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
[core]
[core]
#单位的真名
name: tank_custom
name:hello
displayName: 小坦克
#单位的碰撞半径
radius: 11
radius: 10
#单位的重量
mass: 3000
mass: 3000
#单位的生命值上限
maxHp: 210
maxHp: 800
#单位的造价
price: 1000
 
[graphics]
#单位的主体图像,这样的写的值表示使用游戏自带的shared文件夹里light_50.png文件作为单位主体贴图
image: SHARED:light_50.png
 
[attack]
#单位是否可攻击,false表示否,true表示是
canAttack: false


[movement]
[movement]
#移动类型,陆地,这个移动类型的单位只能在无属性地块上移动,不能到达在水上岩浆上陡崖上
movementType: LAND
movementType: LAND
moveSpeed: 1.1
maxTurnSpeed: 4.1
</pre>
</pre>
我们观察到这个单位移动时转向过慢,移动过于僵硬,请在movement节下做如下修改(可以不抄注释):
所有这些关键字和功能描述都可以在[https://docs.google.com/spreadsheets/d/1aeP3pUic0IutZlgGix_cM8xR7LEH44gS4itAxETK954 官方文档]中查找。<br>
<pre>
接下来我们将从游戏开发的角度了解游戏为单位定义了哪些属性。<br>
[movement]
movementType: LAND


#设置了单位的移动速度为1
注册名称<br>
moveSpeed: 1
使用[core]name关键字为单位确定名称,当其他地方要用到这个单位时,我们会引用该名称。单位名称通常用英文字母和下划线命名。<br>
#下面两个分别是单位开始移动时的加速幅度和结束移动时的减速幅度,这样让其移动显得自然
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
moveAccelerationSpeed: 0.05
#
moveDecelerationSpeed: 0.05
[core]
 
name: medium_tank
#把转向速度设置成一个极端的值,让它看起来没有转向的过程
maxTurnSpeed: 360
#这是转向的加速度,设置成0也是为了让它看起来没有转向过程
turnAcceleration: 0
</pre>
ctrl + s保存修改后,直接在沙盒模式的操作栏点击重新加载按钮来改变游戏中的单位属性。(后面不再提示)
 
现在单位移动不那么卡顿了。接下来我们把单位想象成一个可以远程发射光球的进攻性兵种。根据以下代码在对应的节下修改。(后面不再提示)
<pre>
[attack]
#由不可攻击改成可以攻击
canAttack: true
#可对地
canAttackLandUnits: true
#可对空
canAttackFlyingUnits: true
#可反潜
canAttackUnderwaterUnits: false
#最大攻击范围
maxAttackRange: 210
 
[turret_1]
#炮塔的相对位置
x: 0
y: 0
#炮塔的贴图,用了透明的贴图替代
image: SHARED:blank.png
#炮塔旋转速度,我想让它很快
turnSpeed: 360
turnSpeedAcceleration: 0
#炮塔发射那种炮弹
projectile: 1
#炮弹出现的位置
size: 0
#发射间隔,这里是1秒
delay: 60
 
[projectile_1]
#炮弹的贴图
image: SHARED:beam1_start.png
#炮弹的最大存在时长,这里是4秒
life: 240
#炮弹的飞行速度
speed: 3
#炮弹的伤害
directDamage: 10
</pre>
现在单位具有对空对地的攻击能力了。再增加一些修饰性特效。
<pre>
</pre>
</pre>
=== 重新加载单位 ===
通常情况下,每次进入铁锈时,模组会被自动加载。单击主界面中“模组”按钮后,找到“重载数据”按钮,单击即可重新加载模组数据。
如果你正在沙盒中进行模组调试,在actions、all和modded中可以找到“Reload units”,单击此按钮铁锈将会重新加载所有单位。如果你只是更改了单位的数据,也可以在modded中单击“Quick Reload”,此时铁锈会以很快的速度重新加载单位。
=== Debug按钮 ===
在沙盒的actions中,有一个“Debug”选项,默认为关闭,打开此选项后,单击任意单位的血量都会看到“--Debug--”字样和当前单位的信息。
{{折叠|Debug可以显示的信息|* 单位name
* 单位id
* x
* y
* 高度
* 角度
* 图层
* 自定义资源
* 自定义内存(memory数组中的值不能显示)
* 自定义目标(customTarget1)}}
如果你的单位使用了自动触发(AutoTrigger),在打开“Debug”选项后,还可以打开“Trigger Debug”选项,打开此选项后,选中任意单位将能够看到它们的自动触发,并且能够看到自动触发中单个条件的值。<references />
== 相关链接 ==
*[[模组导入]]
*基础
# [[变量|宏]]
# [[自定义内存]]
# [[数组]]
*特殊
# [[随机数]]
# [[概率与随机偏移]]
[[分类:模组制作]]

2024年12月29日 (日) 13:42的最新版本

游戏通过读取"Rusted Warfare\mods\units"目录下的mod文件来加载mod。
".rwmod"文件是mod的打包文件格式,实际游戏可通过直接读取目录下的mod文件夹来读取mod数据。
一个常规的mod文件夹目录结构如下所示:

XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
            |- xx单位_身体.png
            |- xx单位_炮塔.png
            |- xx单位_残骸.png
            |- xx单位_开火.ogg
            |- xx单位_子弹.png
            |- xx单位_子弹飞行轨迹.png
      |- all-units.template
  |- 地图
      |- xx.tmx
      |- xx_map.png
  |- 音乐
      |- xx.ogg
  |- mod-info.txt

如果我们要创建一个有效的mod,其目录结构至少应该为:

XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
      |- all-units.template
  |- mod-info.txt

其中,mod-info.txt包含了对该mod的声明信息,这里您可以提供mod的名称、介绍、可运行的最低版本要求等信息,如:

[mod]
minVersion:v1.15
title:在这里编写你的标题MOD
description: 你的MOD简介

all-units.template文件是纯文本文件,其内容里声明的属性将自动应用到其所在目录的次级目录的所有.ini文件中,这通常用于省写某些通用于全mod的单位属性,如:

#这里声明了一种mod里的一种消耗性资源黄金,如果不使用all-units.template文件的功能,我们需要在每个单位的.ini文件中都写一段下面的声明
[global_resource_gold]
displayName: 黄金
displayNameShort: 金
displayColor: #ffd700
displayWhenZero: true
displayPos: 1

.ini文件是单位的参数配置文件,是纯文本文件。游戏里的一种单位对应一个.ini文件。我们在.ini文件中声明了一种单位所具有的属性,如单位的名称、生命值、攻击力等。下面我们将重点学习如何编辑单位的配置文件以及单位都可以由哪些属性。
首先我们应该了解.ini文件是一种常见的配置文件格式,其为纯文本文件,使用特定的语法来存储声明信息。其语法结构上包含两部分:关键字和它的值(称为键值对)以及为不同功能划区的节。其具体语言格式为:

[sectionA]
key1: VALUE
key2: VALUE

[sectionB]
key1: VALUE

[sectionC]
key1: VALUE
key2: VALUE
key3: VALUE

游戏定义了许多单位属性的关键字,如我们要声明一个单位的名称为“小坦克”,碰撞半径为“11”,重量为“3000”,生命值上限为“210”,移动方式为“陆地”,移动速度为“1,1”,转向速度为“4.1”,这样写:

[core]
name: tank_custom
displayName: 小坦克
radius: 11
mass: 3000
maxHp: 210

[movement]
movementType: LAND
moveSpeed: 1.1
maxTurnSpeed: 4.1

所有这些关键字和功能描述都可以在官方文档中查找。
接下来我们将从游戏开发的角度了解游戏为单位定义了哪些属性。

注册名称
使用[core]name关键字为单位确定名称,当其他地方要用到这个单位时,我们会引用该名称。单位名称通常用英文字母和下划线命名。

#
[core]
name: medium_tank