详解Ares引擎【属性继承】正确的使用方式
GreatSword_高
编辑于 2025年05月22日 15:03
收录于文集
共14篇

在之前的专栏中,我们已经初步探讨了 【属性继承】 的基础用法。而本次,经过一段时间的深入学习与实战验证,我将为大家带来 稍显硬核的进阶技巧,希望大家能够学到一些东西,并且养成这样的习惯。

前排特别鸣谢: 感谢 @九千天华 与 @三个冲 两位技术大佬的悉心指导与经验分享,为本篇内容提供了关键思路!


先把“拆分读取规则一图流”放在这

拆分读取规则一图流 by九千天华与双杀步枪 ,出处:网页链接​ 

首先基于“拆分读取规则一图流”我们得知[#Include]下拆分的第一个子ini文件会被后续拆分的子ini优先读取,所以我们可以利用这个特性创建一个“核心继承模块ini文件”,以便后续所有子文件都可以随意继承其内模块。

代码块
JavaScript
自动换行
复制代码
Rulesmd.ini内
[#include]
0=InheritanceCore.ini			; 核心继承模块
+=List.ini						; 注册列表模块
+=AARules.ini					; 主体规则文件
;;名字自己起,不必和我一样,自己要能看得懂。
复制成功

当我们注册完成后进入核心继承模块"InheritanceCore.ini"去进行定义,以载具为例

代码块
JavaScript
自动换行
复制代码
InheritanceCore.ini(核心继承模块)内
[GeneralVehicleType]    					; 最基础的坦克模块

[AlliedVehicleType]:[GeneralVehicleType]	; 盟军基础坦克模块

[SovietVehicleType]:[GeneralVehicleType]	; 苏军基础坦克模块

[YuriVehicleType]:[GeneralVehicleType]		; 尤里基础坦克模块
复制成功

接下来我们定义一个白板犀牛坦克作为最基础的坦克模块

代码块
JavaScript
自动换行
复制代码
仅保留最基础的关键词条
[GeneralVehicleType]				; 最基础的坦克模块
Primary=120mm						; 主武器
Category=AFV						; 单位类型——战车
Turret=yes							; 单位有无炮塔
OpportunityFire=yes					; 移动时能否开火
Armor=heavy							; 护甲类型——重甲
Strength=400						; 生命值
TechLevel=2							; 科技等级
Sight=8								; 视野范围
Speed=6								; 移动速度
Cost=900							; 售价
Soylent=900							; 回收价格
ROT=5								; 转向速率
IsSelectableCombatant=yes			; 能否被N键选中
Size=3								; 载具内占用体积
Crusher=yes							; 是否可以碾压步兵
TooBigToFitUnderBridge=true			; 是否不能在桥下停留
IsTilter=yes						; 斜坡上是否会倾斜
Locomotor={4A582741-9839-11d1-B709-00A024DDAFD1}
MovementZone=Destroyer				; 寻路方式-陆地,并试图摧毁障碍物和碾压沙袋
ThreatPosed=40						; 威胁值
复制成功

然后我们给不同阵营加上阵营限制,并赋予专属工厂【该词条仅为演示方便】

代码块
JavaScript
自动换行
复制代码
增加所属国Owner,并设定独立的生产工厂。
[AlliedVehicleType]:[GeneralVehicleType]			;盟军基础坦克        
Owner=British,French,Germans,Americans,Alliance		; 所属国——盟军
BuiltAt=GAWEAP										; 只能从这里生产【Ares】狗屋

[SovietVehicleType]:[GeneralVehicleType]			;苏军基础坦克 
Owner=Russians,Confederation,Africans,Arabs			;所属国——苏军
BuiltAt=NAWEAP										; 只能从这里生产【Ares】狗屋

[YuriCtVehicleType]:[GeneralVehicleType]			;尤里基础坦克 
Owner=YuriCountry									; 所属国——尤里
BuiltAt=YAWEAP										; 只能从这里生产【Ares】狗屋
复制成功

为了方便演示,就以三阵营基础坦克为例

代码块
JavaScript
自动换行
复制代码
AARules.ini内					; 拆分的规则文件
[MTNK]:[AlliedVehicleType]		; 灰熊坦克
[HTNK]:[SovietVehicleType]		; 犀牛坦克
[LTNK]:[YuriCtVehicleType]		; 狂风坦克
; 这样继承之后,Rulesmd.ini内同词条的基础属性会被[GeneralVehicleType]内词条覆盖
; 更加趋向于模块化管理的特性。
复制成功

这样每个国家的特色坦克都只会从自己所属的重工产出了

建议有一定经验的人开始写modini时候就这么架构,之后可以通过直接在基础的坦克模块[GeneralVehicleType]增加词条实现一键修改所有载具,在[AlliedVehicleType][SovietVehicleType]以及[YuriCtVehicleType]分别写给不同阵营的载具增加效果

代码块
JavaScript
自动换行
复制代码
InheritanceCore.ini内						; 核心继承模块
[GeneralVehicleType]    					; 最基础的坦克模块
……											; 其它词条
HasRadialIndicator=yes						; 是否拥有攻击范围圆弧【ARES】支持所有类型
ProtectedDriver=no							; 驾驶员是否被保护【ARES】
CanBeDriven=yes								; 空载具能否被占领【ARES】

[AlliedVehicleType]:[GeneralVehicleType]	; 盟军基础坦克  
Speed=20									; 将速度改为20
	
[SovietVehicleType]:[GeneralVehicleType]	; 苏军基础坦克
Explodes=yes								; 死亡后爆炸
DeathWeapon=NukePayload            		 	; 死亡武器——核弹,需连用Explodes=yes

[YuriCtVehicleType]:[GeneralVehicleType]	; 尤里基础坦克
TurretSpins=yes                   			; 是否旋转炮台
复制成功

这样所有继承词条都由上至下继承了下来

全局的范围显示,时空加速的灰熊,内置核弹的犀牛,自娱自乐的狂风

以上只是示例,你可以给每个阵营单独设定不同军衔之类的属性。

当基础属性被继承下来之后,可以在[新单位块]内增删修改少量词条即可完成新单位的创建。


再深入用法是每个模块都整个通用模块用于接口,例如

代码块
JavaScript
自动换行
复制代码
InheritanceCore.ini内		; 核心继承模块
[GunType_Machine]			; 武器开火动画-机枪类
Anim=MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-NW	; 8向开火动画
OccupantAnim=UCFLASH		; 建筑内使用该武器开火的动画

AARules.ini内				; 拆分的规则文件
[M60]:[GunType_Machine]		; 大兵主武器
[Para]:[GunType_Machine]	; 大兵副武器
[MP5]:[GunType_Machine]		; 海豹主武器
复制成功

这样定义以后方便寻找合适的开火动画,直接继承[GunType_Machine]模块就可以实现

大兵蹲下的火舌是SHP中自带的

而且这些模块也相应自由,比如一键让所有该类武器弹头命中位置发光

代码块
JavaScript
自动换行
复制代码
[GunType_Machine]			; 武器开火动画-机枪类
Bright=yes					; 弹头命中点发光(覆盖弹头下同名设定值)
复制成功

这样一个基础模块就应运而生了

伤害不高,瞎眼性极强。

下面这个是16向动画,需要写16个动画。如果需要复用的话,最好还是建立一个相对完整的[喷火器继承块]为好。(当然,Ares最多支持32向的开火动画)

火焰动画为我本人制作,帅气的步兵来自艾木魁大佬


接下来就是常用模块,比如[载员逻辑块],具体教程请看链接→网页链接​

代码块
JavaScript
自动换行
复制代码
InheritanceCore.ini内					; 核心继承模块
[OpenToppedModule] 						; 载员逻辑模块
PipScale=Passengers 					; 单位格子种类-乘客
Passengers=5 							; 单位运兵数量,可以随便设置,
OpenTopped=yes 							; 载员可对外开火
SizeLimit=1 							; 限制载员最大体积
; ↑↑↑↑↑↑↑↑基础词条↑↑↑↑↑↑↑↑
; ↓↓↓↓↓↓↓↓关键词条↓↓↓↓↓↓↓↓
InitialPayload.Types=E1,E2				; 初始装载车乘客的注册名【Ares】
InitialPayload.Nums=1,1					; 初始装载车乘客的数量【Ares】
NoManualUnload=no						; 禁止手动卸载乘客【Ares】
NoManualEnter=no						; 禁止手动载入乘客【Ares】
; ↑↑↑↑↑↑↑↑关键词条↑↑↑↑↑↑↑↑
; 以下是一些不太重要的词条
EnterTransportSound=EnterTransport 		; 装载的声音
LeaveTransportSound=ExitTransport 		; 卸载的声音
Explodes=no								; 死亡后是否爆炸,若为yes则杀死所有乘客!
Survivor.RookiePassengerChance=75%		; 载员存活率【Ares】
Survivor.VeteranPassengerChance=85%		; 载员存活率【Ares】
Survivor.ElitePassengerChance=95%		; 载员存活率【Ares】
Promote.IncludePassengers=no			; 乘客始终保持与载具自身相同的等级【Ares】
Experience.PromotePassengers=yes 		; 载具满级后载员能否获得经验【Ares】
Experience.FromPassengers=yes			; 乘客开火载具能否得到经验【Ares】
Experience.PassengerModifier=1.0		; 乘客击杀,载具获得经验百分比,默认100%【Ares】 
复制成功

网页链接​需要引用时,只需要继承后再修改少量语句即可,同理的还有其它[基础兵种模块][自定义导弹模块],[基础无源超级武器模块](红色警戒INI基础教程——拔地而起的建筑群​等,当你把这些基础模块定义完善了以后,一个最初的MOD框架也基本完善了,未来如果哪个框架出了问题,一目了然,修改也更加便捷。

补充一点。一个[单位块]可继承多个块,最初的专栏也有示范。


那么本次教程就到此为止啦,有什么建议可以给我留言,我会进行详细补充,谢谢大家。

顺便推广一下我们的INI萌新交流群:796097515

期待您的点赞