Ajimu 发表于 2023-7-28 23:13:34

【基础教程】Ajimu特调:战术系统

本帖最后由 Ajimu 于 2023-7-28 23:13 编辑

战术系统,包括舰船的F和部分舰船的右键。
F系统很好理解,即ship_data.csv中的system id一列。
右键系统,又称特殊系统,是shield type设置为PHASE后,在defense id一列填写的系统。
在原版的例子有先锋级的阻尼、所有的相位以及096新增的不败的右键罐式。这些系统和F没有区别,但是又存在一些细微的区别,我会在下文讲到。
但首先还是从添加一个系统开始。
如何添加一个战术系统
你需要准备以下内容:system文件,ship_systems.csv,#scripts(*.java),#ai(*.java)
其中带有#的内容并非是必须的。
System文件
system文件用于告诉游戏,系统的id是什么,是什么类型的系统,具体的运作(即上述script),具体的ai(即上述ai)。
我们打开一个原版的system文件ammofeed.system
<div style="text-align: left;">
<div>{
<span style="white-space:pre">        </span>"id":"ammofeed",//和ship_system.csv中的id保持一致
<span style="white-space:pre">        </span>"type":"STAT_MOD",//类型
<span style="white-space:pre">        </span>"aiType":"WEAPON_BOOST",//ai类型,填写为custom可以提供一个aiScript来使用自定义的ai
<span style="white-space:pre">        </span>
<span style="white-space:pre">        </span>"statsScript":"data.shipsystems.scripts.AmmoFeedStats",//运行的文件
<span style="white-space:pre">        </span>
<span style="white-space:pre">        </span>"weaponGlowColor":,
<span style="white-space:pre">        </span>"weaponTypes":,
<span style="white-space:pre">        </span>
<span style="white-space:pre">        </span>"useSound":"system_ammo_feeder",
<span style="white-space:pre">        </span>"outOfUsesSound":"gun_out_of_ammo",
}</div></div>系统类型有很多种,modding使用较多的是STAT_MOD,需要提供一个script来运行。
此外还有ENGINE_MOD,只有ENGINE_MOD可以激活平时不使用的专属系统引擎,这些引擎contrailSize一栏为128,只有在ENGINE_MOD启用时才会启动,例如极光-级的两个前侧小引擎。需要提供一个script来运行。
WEAPON,在启动时会从船上所有的SYSTEM槽位进行一次开火,武器为填写的武器。
DRONE_LAUNCHER,无人机系统。涉猎不深因此不能给出教学。

PHASE_CLOAK,相位系统。额外提供类似原版相位线圈的渲染,你也可以不使用。需要提供一个script来运行。

SHIP_SYSTEMS.CSV
用来填写系统其他参数的文件。需要使用专门的csv编辑器打开,另请注意编码格式。

name:名称;id:system文件中的id;
flux/sec:系统每秒消耗的幅能;
flux/use:系统每次使用消耗的幅能;
base rate:基于幅能耗散速度计算,填写乘数。例如0.01指1%幅散;
base cap:基于幅容计算,填写乘数。例如0.01指1%幅容;
cr/u:系统每次使用消耗的战备值;
max uses:最大使用次数;
regen:使用次数恢复速度,单位为次/秒。例如0.05指20秒恢复一次;
charge up:前摇,对应State.IN;
active:激活,对应State.ACTIVE;
down:后摇,对应State.OUT;
cooldown:冷却时间;
toggle:是否是切换系统,例如相位或堡垒盾;
noDissipation:不允许耗散;
noHardDissipation:不允许耗散硬幅能;
hardFlux:系统造成硬幅能而不是软幅能;
noFiring:禁止开火;
noTurning:禁止转向;
noStrafing:禁止侧向移动;
noAccel:禁止加速;
noShield:禁止开盾;
noVent:禁止v排(以防止强制打断);
isPhasecloak:不确定具体应用,似乎用于PHASE_CLOAK系统;
tags:标签,无实际用途;
icon:图标,由于游戏中的图片需要提前加载。尽管一般不会使用战术系统的图标,但是如果在其他某处需要使用一张代表此系统的图片,可以作为图标填写在这里,例如原版的各种左下角statusdata,或者mod中存在的与船插互动等等。


SCRIPT
一份java代码,以实现系统的效果。建议以extends BaseShipSystemScript来实现你的系统。
<div style="text-align: left;">public class BaseShipSystemScript implements ShipSystemStatsScriptAdvanced {</div><div style="text-align: left;">public void apply(MutableShipStatsAPI stats, String id, State state, float effectLevel) {</div><div style="text-align: left;">}//这里通常是系统主要的部分,每帧运作一次。</div><div style="text-align: left;">//state表示系统的状态。</div><div style="text-align: left;">//effectlevel是0-1的数,在IN阶段,effectlevel从0提高到1,在ACTIVE阶段保持为1,在OUT阶段从1降低至0,匀速。</div><div style="text-align: left;">//不包含时间,但是如果你一定要用,可以使用CombatEngineAPI中的方法获取上一帧的时长。</div><div style="text-align: left;">
</div><div style="text-align: left;">public void unapply(MutableShipStatsAPI stats, String id) {</div><div style="text-align: left;">}</div><div style="text-align: left;">//这里是系统结束时需要做的操作,一般将船重置回初始状态。</div><div style="text-align: left;">//自动调用,但也可以在system文件里禁止自动调用。</div><div style="text-align: left;">//注意,unapply通常会在舰船出生的一瞬间被调用一次,因此参数应当在unapply中先初始化,以避免出现各种问题。</div><div style="text-align: left;">
</div><div style="text-align: left;">//其他部分请自行翻译,通常来说非主要功能</div><div style="text-align: left;">}</div>

AI
你可以使用原版AI,但是可能会因为系统不同而出现无法初始化或是不能正确工作的问题。
如果要自行设计AI,可以参考原版shipsystems文件夹中的ai文件夹。里面有一个被留下当范例的ai。
对于单F的舰船来说没有太大问题,对于可能出现的双系统船,需要注意原版的绝大多数系统ai不支持放在右键。仅有原版可以放在右键的ai才能放在右键。如果要设计双系统舰船,请自行设计ai。
你可以通过AIFlags来传递需要战术系统使用的坐标或是目标。






社爆传说 发表于 2023-7-28 23:31:47

说起来霸主新出的那个板砖就是双战术系统,一个是F测距开火,另一个热诱弹是什么按键?

Ajimu 发表于 2023-7-29 09:58:03

社爆传说 发表于 2023-7-28 23:31
说起来霸主新出的那个板砖就是双战术系统,一个是F测距开火,另一个热诱弹是什么按键? ...

右键,以及那个是罐式高射炮,和蝎尾狮同款

江板桐 发表于 2023-7-29 10:09:43

社爆传说 发表于 2023-7-28 23:31
说起来霸主新出的那个板砖就是双战术系统,一个是F测距开火,另一个热诱弹是什么按键? ...

板砖不是教会的嘛,和霸主啥关系
页: [1]
查看完整版本: 【基础教程】Ajimu特调:战术系统