找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3350|回复: 4

关于RA3潜艇攻击更改Locomotor的尝试

[复制链接]
发表于 2022-4-15 09:21:03 | 显示全部楼层 |阅读模式
本帖最后由 Aurenshade 于 2022-4-15 09:21 编辑

第一次在RAAA区水贴,主要是分享一下关于潜艇(同样适用于其它类型的单位)攻击特定目标时调整自身Locomotor的功能(远古时代的帖子解决了潜艇潜射、瞬间下潜、下调攻击时自身高度的问题,但不能真正做到控制潜艇Locomotor)。
2L放主要代码,已知的问题或BUG写在3L。
鄙人水平不高,XML代码中若有冗余的部分请大佬们谅解。

 楼主| 发表于 2022-4-15 09:21:04 | 显示全部楼层
以阿库拉为例



单位代码:

<LocomotorSet> 部分(把Condition="ATTACKING"改成Condition="NORMAL_UPGRADED"
  1. <LocomotorSet
  2.     id="Surfaced_SubmarineLocomotor"
  3.     Locomotor="SovietAntiNavyShipTech2Locomotor_Attacking"
  4.     Condition="NORMAL_UPGRADED"
  5.     Speed="75.0" />
复制代码

<Draws> 部分(注意和Behaviors中的武器设置一致,但只需要设置主武器)
  1. <Draws>
  2.     <ScriptedModelDraw
  3.         id="ModuleTag_Draw"
  4.         OkToChangeModelColor="true" >
  5.         <ModelConditionState
  6.             ParseCondStateType="PARSE_DEFAULT">
  7.             <Model
  8.                 Name="SUAntiNavyShipTech2_SKN" />
  9.             <WeaponFireFXBone
  10.                 WeaponSlotID="1"
  11.                 WeaponSlotType="PRIMARY_WEAPON"
  12.                 BoneName="TurretFX_" />
  13.             <WeaponLaunchBone
  14.                 WeaponSlotID="1"
  15.                 WeaponSlotType="PRIMARY_WEAPON"
  16.                 BoneName="TurretFX_" />
  17.             <WeaponFireFXBone
  18.                 WeaponSlotID="2"
  19.                 WeaponSlotType="PRIMARY_WEAPON"
  20.                 BoneName="TurretFX_" />
  21.             <WeaponLaunchBone
  22.                 WeaponSlotID="2"
  23.                 WeaponSlotType="PRIMARY_WEAPON"
  24.                 BoneName="TurretFX_" />
  25.             <ParticleSysBone
  26.                 BoneName="IdleFX01"
  27.                 FXParticleSystemTemplate="SUKrakenBubblesIdle"
  28.                 FollowBone="true" />
  29.             <ParticleSysBone
  30.                 BoneName="IdleFX02"
  31.                 FXParticleSystemTemplate="SUKrakenBubblesIdle"
  32.                 FollowBone="true" />
  33.         </ModelConditionState>
复制代码
<Behaviors> 部分(重点在于新增的运动状态技能)
  1. <Behaviors>
  2.     <WeaponSetUpdate
  3.         id="ModuleTag_WeaponSetUpdate">
  4.         <WeaponSlotHardpoint
  5.             ID="1">
  6.             <Weapon
  7.                 Ordering="PRIMARY_WEAPON"
  8.                 Template="SovietAntiNavyShipTech2TorpedoForSubmerged"
  9.                 ObjectStatus="SUBMERGED"
  10.                 ForbiddenObjectStatus="SURFACED"
  11.                 ConquerMetricsAlwaysCount="true" />
  12.             <Weapon
  13.                 Ordering="SECONDARY_WEAPON"
  14.                 Template="SovietAntiNavyShipTech2DummyWeaponForSurfaced"
  15.                 ObjectStatus="SUBMERGED"
  16.                 ForbiddenObjectStatus="SURFACED" />
  17.         </WeaponSlotHardpoint>
  18.         <WeaponSlotHardpoint
  19.             ID="2">
  20.             <Weapon
  21.                 Ordering="PRIMARY_WEAPON"
  22.                 Template="SovietAntiNavyShipTech2TorpedoForSurfaced"
  23.                 ObjectStatus="SURFACED"
  24.                 ForbiddenObjectStatus="SUBMERGED"
  25.                 ConquerMetricsAlwaysCount="true" />
  26.             <Weapon
  27.                 Ordering="SECONDARY_WEAPON"
  28.                 Template="SovietAntiNavyShipTech2DummyWeaponForSubmerged"
  29.                 ObjectStatus="SURFACED"
  30.                 ForbiddenObjectStatus="SUBMERGED" />
  31.         </WeaponSlotHardpoint>
  32.         </WeaponSetUpdate>
复制代码
  1. <MovementSpecialPower
  2.             id="ModuleTag_SwitchLocomotorSpecialPower"
  3.             SpecialPowerTemplate="SpecialPower_SubSwitchSurfaceLocomotor"
  4.             UpdateModuleStartsAttack="false"
  5.             MovementType="NONE"
  6.             ObjectStatus="IS_ATTACKING"
  7.             Duration="2.5s"
  8.             LocomotorSet="NORMAL_UPGRADED"
  9.             CollisionBounceHeight="0.0"
  10.             CollisionBounceDistance="1.0"
  11.             CollisionBounceSpeedScalar="1.0" />
复制代码

武器代码:

  1. <WeaponTemplate
  2.                 id="SovietAntiNavyShipTech2DummyWeaponForSurfaced"
  3.                 AttackRange="175.0"
  4.                 WeaponSpeed="999999"
  5.                 CanFireWhileMoving="true"
  6.                 ClipSize="1"
  7.                 AcceptableAimDelta="5d"
  8.                 Flags="NOT_ATTRACTED_BY_MAGNETS"
  9.                 RequiredAntiMask="ANTI_WATER"
  10.                 ForbiddenAntiMask="ANTI_GROUND ANTI_SUBMERGED">
  11.                 <PreAttackDelay
  12.                         MinSeconds="0s"
  13.                         MaxSeconds="0s" />
  14.                 <FiringDuration
  15.                         MinSeconds="0.25s"
  16.                         MaxSeconds="0.25s" />
  17.                 <ClipReloadTime
  18.                         MinSeconds="2.0s"
  19.                         MaxSeconds="2.0s" />
  20.                 <Nuggets>
  21.                         <SpecialPowerNugget
  22.                                 id="SpecialPowerNugget"
  23.                                 SpecialPowerTemplate="SpecialPower_SubSwitchSurfaceLocomotor">
  24.                                 <SpecialObjectFilter
  25.                                         Rule="ALL"
  26.                                         Relationship="ALLIES ENEMIES NEUTRAL"
  27.                                         StatusBitFlags="OVER_WATER"
  28.                                         StatusBitFlagsExclude="AIRBORNE_TARGET SUBMERGED NOT_IN_WORLD" />
  29.                         </SpecialPowerNugget>
  30.                 </Nuggets>
  31.         </WeaponTemplate>

  32.         <WeaponTemplate
  33.                 id="SovietAntiNavyShipTech2TorpedoForSurfaced"
  34.                 AttackRange="175.0"
  35.                 WeaponSpeed="250"
  36.                 CanFireWhileMoving="true"
  37.                 ClipSize="2"
  38.                 FireSound="SOV_AkulaSub_WeaponFire_TorpedoMS"
  39.                 Flags="ATTACK_NEEDS_LINE_OF_SIGHT RELOAD_WHEN_ATTACK_STOPS"
  40.                 AcceptableAimDelta="5d"
  41.                 RequiredAntiMask="ANTI_WATER ANTI_STRUCTURE"
  42.                 ForbiddenAntiMask="ANTI_GROUND ANTI_SUBMERGED"
  43.                 FinishAttackOnceStarted="true">
  44.                 <FiringDuration
  45.                         MinSeconds="0.25s"
  46.                         MaxSeconds="0.25s" />
  47.                 <ClipReloadTime
  48.                         MinSeconds="2.50s"
  49.                         MaxSeconds="2.75s" />
  50.                 <Nuggets>
  51.                         <ProjectileNugget
  52.                                 id="SovietAntiNavyShipTech2TorpedoProjectileNugget"
  53.                                 ProjectileTemplate="SovietAntiNavyShipTech2TorpedoProjectile"
  54.                                 WarheadTemplate="SovietAntiNavyShipTech2TorpedoWarhead">
  55.                                 <VeterancyProjectiles
  56.                                   VeterancyLevel="HEROIC"
  57.                                    ProjectileTemplate="SovietAntiNavyShipTech2TorpedoProjectile_Veteran" />
  58.                         </ProjectileNugget>
  59.                         <SpecialPowerNugget
  60.                                 id="SpecialPowerNugget"
  61.                                 SpecialPowerTemplate="SpecialPower_SubSwitchSurfaceLocomotor">
  62.                                 <SpecialObjectFilter
  63.                                         Rule="ALL"
  64.                                         Relationship="ALLIES ENEMIES NEUTRAL"
  65.                                         StatusBitFlags="OVER_WATER"
  66.                                         StatusBitFlagsExclude="AIRBORNE_TARGET SUBMERGED NOT_IN_WORLD" />
  67.                         </SpecialPowerNugget>
  68.                         <InformTargetNugget />
  69.                 </Nuggets>
  70.         </WeaponTemplate>

  71.         <WeaponTemplate
  72.                 id="SovietAntiNavyShipTech2DummyWeaponForSubmerged"
  73.                 AttackRange="175.0"
  74.                 WeaponSpeed="999999"
  75.                 CanFireWhileMoving="true"
  76.                 ClipSize="1"
  77.                 AcceptableAimDelta="5d"
  78.                 Flags="NOT_ATTRACTED_BY_MAGNETS"
  79.                 RequiredAntiMask="ANTI_SUBMERGED ANTI_STRUCTURE"
  80.                 ForbiddenAntiMask="ANTI_GROUND ANTI_WATER">
  81.                 <PreAttackDelay
  82.                         MinSeconds="2.5s"
  83.                         MaxSeconds="2.5s" />
  84.                 <FiringDuration
  85.                         MinSeconds="0.5s"
  86.                         MaxSeconds="0.5s" />
  87.                 <ClipReloadTime
  88.                         MinSeconds="2.5s"
  89.                         MaxSeconds="2.5s" />
  90.                 <Nuggets>
  91.                         <DamageNugget
  92.                                 id="DummyWeaponDamageNugget"
  93.                                 Damage="1.0"
  94.                                 DamageType="CONCUSSIVE"
  95.                                 DeathType="EXPLODED" />
  96.                 </Nuggets>
  97.         </WeaponTemplate>
  98.        
  99.         <WeaponTemplate
  100.                 id="SovietAntiNavyShipTech2TorpedoForSubmerged"
  101.                 AttackRange="175.0"
  102.                 WeaponSpeed="250"
  103.                 CanFireWhileMoving="true"
  104.                 ClipSize="2"
  105.                 FireSound="SOV_AkulaSub_WeaponFire_TorpedoMS"
  106.                 Flags="ATTACK_NEEDS_LINE_OF_SIGHT RELOAD_WHEN_ATTACK_STOPS"
  107.                 AcceptableAimDelta="5d"
  108.                 RequiredAntiMask="ANTI_STRUCTURE ANTI_SUBMERGED"
  109.                 ForbiddenAntiMask="ANTI_WATER ANTI_GROUND"
  110.                 FinishAttackOnceStarted="true">
  111.                 <FiringDuration
  112.                         MinSeconds="0.25s"
  113.                         MaxSeconds="0.25s" />
  114.                 <ClipReloadTime
  115.                         MinSeconds="2.50s"
  116.                         MaxSeconds="2.75s" />
  117.                 <Nuggets>
  118.                         <ProjectileNugget
  119.                                 id="SovietAntiNavyShipTech2TorpedoProjectileNugget"
  120.                                 ProjectileTemplate="SovietAntiNavyShipTech2TorpedoProjectile"
  121.                                 WarheadTemplate="SovietAntiNavyShipTech2TorpedoWarhead">
  122.                                 <VeterancyProjectiles
  123.                                   VeterancyLevel="HEROIC"
  124.                                    ProjectileTemplate="SovietAntiNavyShipTech2TorpedoProjectile_Veteran"/>
  125.                         </ProjectileNugget>
  126.                         <InformTargetNugget />
  127.                 </Nuggets>
  128.         </WeaponTemplate>
复制代码


回复

使用道具 举报

 楼主| 发表于 2022-4-15 09:21:05 | 显示全部楼层
代码的效果:阿库拉在水下即可攻击潜艇,攻击水面单位或建筑时则必须浮出水面,在水面时失去目标、攻击水下单位或收到停止指令时将重新下潜。
已知问题:
1. 在强A地面(水面)时,潜艇无法接收指令;
2. 该单位可能无法正确使用自身的MovementSpecialAbility(如果你给它加了类似的技能的话)
3. 阿库拉浮出水面时,需要再次下达攻击指令才能攻击非敌对目标(友方和中立目标)
4. 给AI用这种单位会变得蠢蠢的。
回复

使用道具 举报

发表于 2022-4-16 20:12:04 | 显示全部楼层
哇,你这套设计好复杂……我之前做潜艇挨打上浮的时候也是用的MovementSpecialPower,后来也是发现了诸多不理想之后改用的Lua检测状态得失来赋予&移除升级配合LocomotorSetUpgrade来做的,我觉得你可以参考一下:发射鱼雷改成一个不需要任何条件限制的武器,然后另开一个slot来放根据指定状态的物体来返回自己的状态添加来改变loc
回复

使用道具 举报

 楼主| 发表于 2022-4-17 02:23:14 | 显示全部楼层
1145158638 发表于 2022-4-16 20:12
哇,你这套设计好复杂……我之前做潜艇挨打上浮的时候也是用的MovementSpecialPower,后来也是发现了诸多不 ...

这套确实很繁琐,LUA我还没怎么用过……你的方法应该更好,但MovementSpecialPower能拓展到其他单位上,比如做成日冕破军金甲的冲撞技能(本人比较菜,又尝试了1天还是没能完全解决之前所说的问题qwq)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛 |网站地图

GMT+8, 2026-6-11 14:04 , Processed in 0.065941 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表