收起左侧

[教程] 【修改教程】霰弹枪与喷火塔

[复制链接]
列虚子发表于 3 小时前
 本帖最后由 列虚子 于 2026-8-30 07:36 编辑 

关于圣典8-8章节已经讲述了连续射击的内容,但是这样的攻击是呈现点状的,就算你加上AOE可以实现击倒多个敌人,它在视觉上也不够壮观。因此这里是教你如何呈现“霰弹枪”的效果。
如图所示。这是我制作的霰弹枪民兵,它在打卡之后可以发射霰弹,我们直接观察它的<AnimFlie>文件就会发现,我也是利用圣典8-8模拟了多行射击、音效、烟雾。

<anim>
Volley_standing_attack
<assetreference type="GrannyAnim">
<file>animation_library\range\volley\volley_standing_fire</file>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.44</tag>
<tag type="Attack">0.43</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.42</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.43</tag>

<tag type="Attack">0.45</tag>
<tag type="Attack">0.44</tag>
<tag type="Attack">0.43</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.42</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.45</tag>
<tag type="Attack">0.43</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>

<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.44</tag>
<tag type="Particles" particlename="MusketShot">0.43</tag>
<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.41</tag>
<tag type="Particles" particlename="MusketShot">0.42</tag>
<tag type="Particles" particlename="MusketShot">0.40</tag>
<tag type="Particles" particlename="MusketShot">0.44</tag>
<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.38</tag>

<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.44</tag>
<tag type="Particles" particlename="MusketShot">0.43</tag>
<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.41</tag>
<tag type="Particles" particlename="MusketShot">0.42</tag>
<tag type="Particles" particlename="MusketShot">0.40</tag>
<tag type="Particles" particlename="MusketShot">0.44</tag>
<tag type="Particles" particlename="MusketShot">0.45</tag>
<tag type="Particles" particlename="MusketShot">0.38</tag>
</assetreference>
<component>ModelComp</component>
</anim>

所以答案显而易见,其实还是连续攻击只是间歇比较低,看上去就是同时发射了一堆弹丸。
而这么密集的攻击伤害太过于超标,所以一定需要在Tactics限制他的命中率
<action>
<name stringid="38127">VolleyRangedAttack</name>
<type>Attack</type>
<attackaction>1</attackaction>
<rangedlogic>1</rangedlogic>
<anim>Volley_standing_attack</anim>
<reloadanim>Volley_standing_reload</reloadanim>
<idleanim>Volley_standing_idle</idleanim>
<maxheight>0</maxheight>
<accuracy>0.7</accuracy>
<accuracyreductionfactor>0.5</accuracyreductionfactor>;参见圣典7-2命中率
<aimbonus>0</aimbonus>
<maxspread>180</maxspread>
<spreadfactor>5.25</spreadfactor>
<trackrating>12</trackrating>
<unintentionaldamagemultiplier>1.0</unintentionaldamagemultiplier>
<projectile>InvisibleProjectile</projectile>
<impacteffect>effects\impacts\gun</impacteffect>
<minrange>2</minrange>
<rate type="Unit">1.0</rate>
<throw>1</throw>
<damage>13.000000</damage>
<maxrange>12.000000</maxrange>
<rof>2.000000</rof>
<areasortmode>Directional</areasortmode>
<basedamagecap>-1</basedamagecap>
<numberbounces>1</numberbounces>
</action>

以及Protoy中也要做一定的伤害削减
<ProtoAction>
<Name>DefendRangedAttack</Name>
<Damage>2.000000</Damage>
<DamageType>Ranged</DamageType>
<accuracy>0.5</accuracy>
<accuracyreductionfactor>0.5</accuracyreductionfactor>
<instantballistics>0</instantballistics>
<MinRange>1.000000</MinRange>
<MaxRange>12.000000</MaxRange>
<ROF>3.000000</ROF>
<DamageBonus type ='AbstractPet'>2.000000</DamageBonus>
<DamageBonus type ='AbstractHeavyInfantry'>2.000000</DamageBonus>
<DamageBonus type ='AbstractLightCavalry'>2.000000</DamageBonus>
<DamageBonus type ='xpEagleKnight'>2.000000</DamageBonus>
<DamageBonus type ='AbstractCavalry'>0.750000</DamageBonus>
<DamageBonus type ='xpCoyoteMan'>0.750000</DamageBonus>
<DamageBonus type ='Guardian'>2.000000</DamageBonus>
</ProtoAction>
————————
而喷火塔的实现则更加简单,首先在建筑物的<AnimFlie>上新增
<anim>
Bombard_ranged_attack;这是一会儿要在Tactics里使用的战术名称
<assetreference type="GrannyAnim">
<file>animation_library\building\ranged_attack</file>
<tag type="Attack">0.45</tag>
<tag type="SpecificSoundSet" checkvisible="1" set="FlameThrower">1.00</tag>
<!-- 在攻击时间点0.45,同时触发三套完全独立的粒子 -->
<tag type="Particles" particlename="flamethrower">0.45</tag>
<tag type="Particles" particlename="flamethrower1">0.45</tag>
<tag type="Particles" particlename="flamethrower2">0.45</tag>
</assetreference>
<component>SPC_Fort_Tower</component>
<simskeleton>
<model>buildings\spc\fort\spc_fort_tower_damaged</model>
<damagetemplate>buildings\spc\fort\spc_fort_tower.dmg</damagetemplate>
</simskeleton>

<!--炮口 bone_s1 -->
<attach a="smokey" frombone="bone_s1" tobone="bone_s1" syncanims="0"/>
<attach a="flamethrower" frombone="bone_s1" tobone="bone_s1" syncanims="0"/>

<!--炮口 bone_s2 -->
<attach a="smokey1" frombone="bone_s2" tobone="bone_s2" syncanims="0"/>
<attach a="flamethrower1" frombone="bone_s2" tobone="bone_s2" syncanims="0"/>

<!--炮口 bone_s3 -->
<attach a="smokey2" frombone="bone_s3" tobone="bone_s3" syncanims="0"/>
<attach a="flamethrower2" frombone="bone_s3" tobone="bone_s3" syncanims="0"/>

</anim>
这样写的目的很简单,就是模拟一个喷火动画,让它看起来美观,我加入了浓烟来掩盖发射物本身的单薄
甚至往四面八方喷火都可以,看你写几根枪管。
然后在战术文件里加上
<action>
<name stringid="99512">FlameAttack</name>;战术名称
<reloadanim>Bombard_reload</reloadanim>;战术动画名称
<type>Attack</type>
<maxrange>9</maxrange>
<attackaction>1</attackaction>
;<handlogic>1</handlogic>
<rangedlogic>1</rangedlogic>
<anim>Bombard_ranged_attack</anim>
<idleanim>Bombard_ranged_idle</idleanim>
<boredanim>Bombard_bored</boredanim>
<maxheight>1</maxheight>

<active>0</active>

<accuracy>1.0</accuracy>
<aimbonus>0</aimbonus>
<maxspread>5</maxspread>
<spreadfactor>0.25</spreadfactor>
<trackrating>999</trackrating>
<unintentionaldamagemultiplier>1.0</unintentionaldamagemultiplier>
<impacteffect>effects\impacts\torch</impacteffect>
<rate type="All">1.0</rate>
<perfectaccuracy>1</perfectaccuracy>
<projectile>Hoop</projectile>;因为我是制作的马耳他喷火塔,所以发射物是火环
</action>

然后利用科技启用这个战术就行
<Effect type ='Data' action ='FlameAttack' amount ='1.00' subtype ='ActionEnable' relativity ='Absolute'>
<Target type ='ProtoUnit'>shaota</Target></Effect>
<Effect type ='Data' amount ='0.00' subtype ='UpdateVisual' unittype ='shaota' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>你也可以设置为直接开启,不需要科技启用

然后单位信息是
<ProtoAction>
<Name>FlameAttack</Name>
<Damage>5.000000</Damage>
<DamageType>Siege</DamageType>
<MinRange>0.000000</MinRange>
<MaxRange>14.000000</MaxRange>
<ROF>0.500000</ROF>
<DamageCap>20.000000</DamageCap>
<DamageArea>3.000000</DamageArea>
<DamageBonus type ='AbstractInfantry'>6.000000</DamageBonus>
<DamageArea>1.000000</DamageArea>
<DamageFlags>GAIAEnemy</DamageFlags>
<DamageBonus type ='Ship'>6.000000</DamageBonus>
<DamageBonus type ='AbstractArtillery'>3.000000</DamageBonus>
<DamageBonus type ='AbstractLightInfantry'>0.600000</DamageBonus>
<DamageBonus type ='AbstractCavalry'>3.000000</DamageBonus>
</ProtoAction>————————
这个方法同时也可以用在人类和船只身上,比如船只是:
<anim>
Bombard_ranged_attack
<assetreference type="GrannyAnim">
<file>units\asians\naval\war_junk\war_junk_idle</file>
<tag type="Attack">0.70</tag>
<tag type="SpecificSoundSet" set="FlameThrower" checkvisible="1">0.00</tag>
<tag type="Particles" particlename="flamethrower">0.10</tag>
<tag type="Particles" particlename="flamethrower">0.20</tag>
<tag type="Particles" particlename="flamethrower">0.30</tag>
<tag type="Particles" particlename="flamethrower">0.40</tag>
<tag type="Particles" particlename="flamethrower">0.50</tag>
<tag type="Particles" particlename="flamethrower">0.60</tag>
<tag type="Particles" particlename="flamethrower">0.70</tag>
<tag type="Particles" particlename="flamethrower">0.80</tag>
<tag type="Particles" particlename="flamethrower">0.90</tag>
<tag type="Particles" particlename="flamethrower">1.00</tag>
</assetreference>
<component>ModelComp</component>
<simskeleton>
<model>units\asians\naval\war_junk\war_junk_damge</model>
<damagetemplate>units\asians\naval\war_junk\war_junk_damge_0.dmg</damagetemplate>
</simskeleton>
<attach a="Pirate_flag_top" frombone="ATTACHPOINT" tobone="bone_f_top_02" syncanims="0"/>
<attach a="Pirata_flag_mid" frombone="ATTACHPOINT" tobone="bone_f_mid_01" syncanims="0"/>
<attach a="Pirata_flag_mid" frombone="ATTACHPOINT" tobone="bone_f_mid_02" syncanims="0"/>
<attach a="Pirata_flag_mid" frombone="ATTACHPOINT" tobone="bone_f_mid_03" syncanims="0"/>
<attach a="Pirata_flag_mid" frombone="ATTACHPOINT" tobone="bone_f_mid_04" syncanims="0"/>
<attach a="Pirate_flag_back" frombone="ATTACHPOINT" tobone="bone_f_rear_left" syncanims="0"/>
<attach a="Pirate_flag_back" frombone="ATTACHPOINT" tobone="bone_f_rear_right" syncanims="0"/>
</anim>以及Tactics

<action>
<name stringid="70308">FlameAttack</name>
<reloadanim>Bombard_reload</reloadanim>
<type>Attack</type>
<maxrange>9</maxrange>
<attackaction>1</attackaction>
<handlogic>1</handlogic>
<anim>Bombard_ranged_attack</anim>
<idleanim>Bombard_ranged_idle</idleanim>
<boredanim>Bombard_bored</boredanim>
<maxheight>1</maxheight>
<accuracy>1.0</accuracy>
<aimbonus>0</aimbonus>
<maxspread>5</maxspread>
<spreadfactor>0.25</spreadfactor>
<trackrating>12</trackrating>
<unintentionaldamagemultiplier>1.0</unintentionaldamagemultiplier>
<impacteffect>effects\impacts\torch</impacteffect>
<rate type="All">1.0</rate>
<perfectaccuracy>1</perfectaccuracy>
</action>
如果你要模拟火焰,记住火焰的攻击频率一定要高,这样它的声效和动画过度看起来才自然,相应的攻击力就应该低一些。
P.S.一定要记住,无论哪种攻击在Tactics中都要在最后战术Action上,不然你写再多也白搭。
<action priority="100">AntiShipAttack</action>
<action priority="75">FlameAttack</action>
<action priority="50">CannonAttack</action>
<action priority="25">RangedAttack</action>

QQ20260830-070227.png
QQ20260830-070126.png
QQ20260830-070405.png
QQ20260830-070352.png
QQ20260830-070423.png
列虚子发表于 3 小时前
终于荣升“渣渣”可以快乐的编辑帖子了
跳转到