改动一大堆

This commit is contained in:
2025-09-20 12:00:15 +08:00
parent 5b231de977
commit feba171a2c
22 changed files with 620 additions and 217 deletions

Binary file not shown.

View File

@@ -545,7 +545,7 @@
<AbilityDef> <AbilityDef>
<defName>ARA_Ability_Smokepop</defName> <defName>ARA_Ability_Smokepop</defName>
<label>信息素浓雾释放</label> <label>信息素浓雾释放</label>
<description>浓雾种其腹部的大量释放阿拉克涅信息素烟雾,形成一大片以遮蔽虫族身形的烟雾,并防止敌方使用火焰武器点燃虫族集群。这些信息素会吸引附近的阿拉克涅辅虫破土而出支援虫群,沾染信息素的目标越多(无论敌我),前来支援的虫族就越多。</description> <description>浓雾种使用其腹部释放大量阿拉克涅信息素烟雾,形成一大片以遮蔽虫族身形和阻燃的烟雾。这些信息素会吸引附近的阿拉克涅辅虫破土而出支援虫群,沾染信息素的目标越多(无论敌我),前来支援的虫族就越多。</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Ability_Smokepop</iconPath> <iconPath>ArachnaeSwarm/UI/Abilities/ARA_Ability_Smokepop</iconPath>
<cooldownTicksRange>6000</cooldownTicksRange> <cooldownTicksRange>6000</cooldownTicksRange>
<targetRequired>false</targetRequired> <targetRequired>false</targetRequired>
@@ -593,7 +593,7 @@
<AbilityDef> <AbilityDef>
<defName>ARA_Ability_TrackingCharge</defName> <defName>ARA_Ability_TrackingCharge</defName>
<label>蛮力冲撞</label> <label>蛮力冲撞</label>
<description>阿拉克涅盾头种对目标发起蓄势冲撞,对路径上的一切造成伤害。在冲击中途经的距离越远,伤害越高。</description> <description>对目标发起蓄势冲撞,对路径上的一切造成伤害。在冲击中途经的距离越远,伤害越高。</description>
<iconPath>ArachnaeSwarm/UI/Abilities/ARA_Ability_TrackingCharge</iconPath> <!-- Placeholder Icon --> <iconPath>ArachnaeSwarm/UI/Abilities/ARA_Ability_TrackingCharge</iconPath> <!-- Placeholder Icon -->
<cooldownTicksRange>6000</cooldownTicksRange> <cooldownTicksRange>6000</cooldownTicksRange>
<charges>2</charges> <charges>2</charges>
@@ -646,4 +646,71 @@
<heightFactor>0</heightFactor> <heightFactor>0</heightFactor>
</pawnFlyer> </pawnFlyer>
</ThingDef> </ThingDef>
<AbilityDef>
<defName>ARA_PsychicBrainburn</defName>
<label>心灵烧灼</label>
<description>以强大的纯净灵能直接冲击目标,烧毁目标的中枢神经系统——这会直接杀死目标。</description>
<iconPath>UI/Abilities/Slaughter</iconPath>
<cooldownTicksRange>18000</cooldownTicksRange>
<aiCanUse>false</aiCanUse>
<displayOrder>300</displayOrder>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<showPsycastEffects>false</showPsycastEffects>
<sendMessageOnCooldownComplete>true</sendMessageOnCooldownComplete>
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<moteOffsetAmountTowardsTarget>0.5</moteOffsetAmountTowardsTarget>
<warmupMote>Mote_HoraxSmallSpellWarmup</warmupMote>
<warmupEffecter>HoraxianAbilityCasting</warmupEffecter>
<warmupSound>AnomalyAbilityWarmup</warmupSound>
<writeCombatLog>true</writeCombatLog>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<warmupTime>6</warmupTime>
<range>18</range>
<targetParams>
<canTargetPawns>true</canTargetPawns>
<canTargetBuildings>false</canTargetBuildings>
<canTargetSelf>false</canTargetSelf>
</targetParams>
</verbProperties>
<comps>
<li Class="ArachnaeSwarm.CompProperties_PsychicBrainburn">
<!-- 视觉效果 -->
<effecterDef>Skip_Entry</effecterDef>
<!-- 设为 true 则只能对血肉生物使用。设为 false 则也可以对机械体使用。 -->
<requiresFlesh>false</requiresFlesh>
</li>
</comps>
</AbilityDef>
<AbilityDef Name="LongJump">
<defName>ARA_NeuroSwarm_jump</defName>
<label>高空机动</label>
<description>增强用于使身体悬浮的力量快速进入较高的高度,然后飞到一处新的地点。</description>
<iconPath>UI/Abilities/Longjump</iconPath>
<cooldownTicksRange>5000</cooldownTicksRange>
<hostile>false</hostile>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<charges>1</charges>
<cooldownPerCharge>true</cooldownPerCharge>
<verbProperties>
<verbClass>Verb_CastAbilityJump</verbClass>
<label>jump</label>
<violent>false</violent>
<forceNormalTimeSpeed>false</forceNormalTimeSpeed>
<warmupTime>0</warmupTime>
<range>50</range>
<requireLineOfSight>true</requireLineOfSight>
<soundCast>Longjump_Jump</soundCast>
<soundLanding>Longjump_Land</soundLanding>
<targetParams>
<canTargetLocations>true</canTargetLocations>
<canTargetPawns>false</canTargetPawns>
<canTargetBuildings>false</canTargetBuildings>
</targetParams>
</verbProperties>
<jobDef>CastJump</jobDef>
</AbilityDef>
</Defs> </Defs>

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<AbilityDef>
<defName>ARA_PsychicBrainburn</defName>
<label>心灵烧灼</label>
<description>通过一次强力的心灵冲击,直接摧毁目标生物的意识核心,使其永久失去知觉。</description>
<iconPath>UI/Abilities/Slaughter</iconPath>
<cooldownTicksRange>5000</cooldownTicksRange>
<aiCanUse>false</aiCanUse>
<displayOrder>300</displayOrder>
<displayGizmoWhileUndrafted>true</displayGizmoWhileUndrafted>
<disableGizmoWhileUndrafted>false</disableGizmoWhileUndrafted>
<showPsycastEffects>false</showPsycastEffects>
<sendMessageOnCooldownComplete>true</sendMessageOnCooldownComplete>
<stunTargetWhileCasting>true</stunTargetWhileCasting>
<moteOffsetAmountTowardsTarget>0.5</moteOffsetAmountTowardsTarget>
<warmupMote>Mote_HoraxSmallSpellWarmup</warmupMote>
<warmupEffecter>HoraxianAbilityCasting</warmupEffecter>
<warmupSound>AnomalyAbilityWarmup</warmupSound>
<writeCombatLog>true</writeCombatLog>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<warmupTime>1.5</warmupTime>
<range>25</range>
<targetParams>
<canTargetPawns>true</canTargetPawns>
<canTargetBuildings>false</canTargetBuildings>
<canTargetSelf>false</canTargetSelf>
</targetParams>
</verbProperties>
<comps>
<li Class="ArachnaeSwarm.CompProperties_PsychicBrainburn">
<!-- 视觉效果 -->
<effecterDef>Skip_Entry</effecterDef>
<!-- 设为 true 则只能对血肉生物使用。设为 false 则也可以对机械体使用。 -->
<requiresFlesh>false</requiresFlesh>
</li>
</comps>
</AbilityDef>
</Defs>

View File

@@ -6,7 +6,7 @@
<defName>ARA_Ability_Morph</defName> <defName>ARA_Ability_Morph</defName>
<label>织域形态</label> <label>织域形态</label>
<description>将自己转换为一个坚固的静态建筑形态,或从建筑形态恢复。</description> <description>将自己转换为一个坚固的静态建筑形态,或从建筑形态恢复。</description>
<iconPath>UI/Commands/EggSpew</iconPath> <!-- TODO: 替换为你的图标路径 --> <iconPath>UI/Commands/EggSpew</iconPath>
<cooldownTicksRange>6000</cooldownTicksRange> <cooldownTicksRange>6000</cooldownTicksRange>
<hotKey>Misc12</hotKey> <hotKey>Misc12</hotKey>
<targetRequired>false</targetRequired> <targetRequired>false</targetRequired>
@@ -98,7 +98,6 @@
<fuelGizmoLabel>虫蜜</fuelGizmoLabel> <fuelGizmoLabel>虫蜜</fuelGizmoLabel>
<outOfFuelMessage>没有营养</outOfFuelMessage> <outOfFuelMessage>没有营养</outOfFuelMessage>
</li> </li>
<li Class="CompProperties_AffectedByFacilities"> <li Class="CompProperties_AffectedByFacilities">
<linkableFacilities> <linkableFacilities>
<li>ARA_NutrientNetworkTower</li> <li>ARA_NutrientNetworkTower</li>

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<Defs> <Defs>
<!-- 翅膀飞行 -->
<AnimationDef> <AnimationDef>
<defName>ARA_FlyEast</defName> <defName>ARA_FlyEast</defName>
<durationTicks>60</durationTicks> <durationTicks>60</durationTicks>
@@ -30,7 +31,6 @@
</li> </li>
</keyframeParts> </keyframeParts>
</AnimationDef> </AnimationDef>
<AnimationDef> <AnimationDef>
<defName>ARA_FlyNorth</defName> <defName>ARA_FlyNorth</defName>
<durationTicks>60</durationTicks> <durationTicks>60</durationTicks>
@@ -61,7 +61,6 @@
</li> </li>
</keyframeParts> </keyframeParts>
</AnimationDef> </AnimationDef>
<AnimationDef> <AnimationDef>
<defName>ARA_FlySouth</defName> <defName>ARA_FlySouth</defName>
<durationTicks>60</durationTicks> <durationTicks>60</durationTicks>
@@ -92,4 +91,75 @@
</li> </li>
</keyframeParts> </keyframeParts>
</AnimationDef> </AnimationDef>
<!-- 灵能飞行 -->
<AnimationDef>
<defName>ARA_Psi_FlyEast</defName>
<durationTicks>60</durationTicks>
<keyframeParts>
<!-- <li>
<key>ARA_Flight_Attachment</key>
<value>
<keyframes>
<li><graphicState>ARA_FlyEast_0</graphicState><tick>6</tick></li>
<li><graphicState>ARA_FlyEast_1</graphicState><tick>12</tick></li>
</keyframes>
</value>
</li> -->
<li>
<key>Root</key>
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
</keyframes></value>
</li>
</keyframeParts>
</AnimationDef>
<AnimationDef>
<defName>ARA_Psi_FlyNorth</defName>
<durationTicks>60</durationTicks>
<keyframeParts>
<!-- <li>
<key>ARA_Flight_Attachment</key>
<value>
<keyframes>
<li><graphicState>ARA_FlyNorth_0</graphicState><tick>6</tick></li>
<li><graphicState>ARA_FlyNorth_1</graphicState><tick>12</tick></li>
</keyframes>
</value>
</li> -->
<li>
<key>Root</key>
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
</keyframes></value>
</li>
</keyframeParts>
</AnimationDef>
<AnimationDef>
<defName>ARA_Psi_FlySouth</defName>
<durationTicks>60</durationTicks>
<keyframeParts>
<!-- <li>
<key>ARA_Flight_Attachment</key>
<value>
<keyframes>
<li><graphicState>ARA_FlySouth_0</graphicState><tick>6</tick></li>
<li><graphicState>ARA_FlySouth_1</graphicState><tick>12</tick></li>
</keyframes>
</value>
</li> -->
<li>
<key>Root</key>
<value><workerType>AnimationWorker_Keyframes</workerType><keyframes>
<li><tick>0</tick><offset>(0,0,-0.05)</offset></li>
<li><tick>30</tick><offset>(0,0,0.05)</offset></li>
<li><tick>60</tick><offset>(0,0,-0.05)</offset></li>
</keyframes></value>
</li>
</keyframeParts>
</AnimationDef>
</Defs> </Defs>

View File

@@ -196,6 +196,4 @@
<li Class="HediffCompProperties_DisappearsOnDeath"/> <li Class="HediffCompProperties_DisappearsOnDeath"/>
</comps> </comps>
</HediffDef> </HediffDef>
</Defs> </Defs>

View File

@@ -85,6 +85,26 @@
<isBad>false</isBad> <isBad>false</isBad>
<scenarioCanAdd>false</scenarioCanAdd> <scenarioCanAdd>false</scenarioCanAdd>
<comps> <comps>
<li Class="ArachnaeSwarm.HediffCompProperties_GiveHediffsInRangeToRace">
<range>6</range>
<hediff>ARA_CreepyCrawly_Hediff</hediff>
<!-- 定义可以被影响的种族列表 -->
<targetRaces>
<li>Colonist</li>
</targetRaces>
<!-- 其他参数和原版一样 -->
<targetingParameters>
<canTargetBuildings>false</canTargetBuildings>
<canTargetAnimals>false</canTargetAnimals>
<canTargetMechs>false</canTargetMechs>
<canTargetSelf>false</canTargetSelf>
<onlyTargetColonists>true</onlyTargetColonists>
</targetingParameters>
<onlyPawnsInSameFaction>false</onlyPawnsInSameFaction>
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
</li>
</comps> </comps>
<stages> <stages>
<li> <li>
@@ -98,29 +118,116 @@
</HediffDef> </HediffDef>
<HediffDef> <HediffDef>
<defName>ARA_CreepyCrawly_Hediff</defName> <defName>ARA_TemperatureRegulation</defName>
<label>原始恐惧</label> <label>冷血动物</label>
<description>受不了了,快把这些虫子从我身边支开!</description> <description>阿拉克涅虫族是冷血动物,这代表着她们对外界的温度变化更加敏感——在适宜温度下她们将变得敏捷而致命,在不适温度下她们将难以行动。\n\n此类阿拉克涅虫族可以接受在16~26°C的温度下活动温度接近21°C时会获得额外的意识加成。</description>
<hediffClass>HediffWithComps</hediffClass> <hediffClass>Hediff_High</hediffClass>
<defaultLabelColor>(0.52, 1, 0.95)</defaultLabelColor> <defaultLabelColor>(0.6, 0.8, 0.9)</defaultLabelColor>
<maxSeverity>1.0</maxSeverity>
<minSeverity>-0.01</minSeverity>
<initialSeverity>0.5</initialSeverity>
<comps> <comps>
<li Class="HediffCompProperties_Disappears"> <li Class="ArachnaeSwarm.HediffCompProperties_Temperature">
<disappearsAfterTicks>30</disappearsAfterTicks> <minComfortableTemperature>16</minComfortableTemperature>
<showRemainingTime>false</showRemainingTime> <maxComfortableTemperature>26</maxComfortableTemperature>
<severityChangeIn>0.01</severityChangeIn>
<severityChangeOut>-0.01</severityChangeOut>
</li> </li>
<li Class="HediffCompProperties_DisappearsOnDeath"/> <li Class="ArachnaeSwarm.HediffCompProperties_GiveHediffsInRangeToRace">
<li Class="HediffCompProperties_Link"> <range>6</range>
<requireLinkOnOtherPawn>false</requireLinkOnOtherPawn> <hediff>ARA_CreepyCrawly_Hediff</hediff>
<mote>Mote_ARA_CreepyCrawly_HediffLinkLine</mote>
<!-- 定义可以被影响的种族列表 -->
<!-- <targetRaces>
<li>Human</li>
</targetRaces> -->
<!-- 其他参数和原版一样 -->
<targetingParameters>
<canTargetBuildings>false</canTargetBuildings>
<canTargetAnimals>false</canTargetAnimals>
<canTargetMechs>false</canTargetMechs>
<canTargetSelf>true</canTargetSelf>
<onlyTargetColonists>true</onlyTargetColonists>
</targetingParameters>
<onlyPawnsInSameFaction>false</onlyPawnsInSameFaction>
<hideMoteWhenNotDrafted>true</hideMoteWhenNotDrafted>
</li> </li>
</comps> </comps>
<stages>
<li>
<minSeverity>0</minSeverity>
<label>不适</label>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.5</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.4</minSeverity>
<label>适应</label>
</li>
<li>
<minSeverity>0.8</minSeverity>
<label>舒适</label>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>0.25</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
<HediffDef>
<defName>ARA_CreepyCrawly_Hediff</defName>
<label>原始恐惧</label>
<description>快把这些虫子从我身边支开!</description>
<defaultLabelColor>(0.52, 1, 0.95)</defaultLabelColor>
<hediffClass>HediffWithComps</hediffClass>
<isBad>false</isBad>
<debugLabelExtra>other</debugLabelExtra>
<initialSeverity>1</initialSeverity> <!-- 初始层数设置为10 -->
<maxSeverity>1</maxSeverity> <!-- 最大层数,可以根据需要调整 -->
<stages> <stages>
<li> <li>
<minSeverity>0</minSeverity> <minSeverity>0</minSeverity>
<becomeVisible>false</becomeVisible> <becomeVisible>false</becomeVisible>
</li> </li>
</stages> </stages>
<isBad>false</isBad> <comps>
<li Class="HediffCompProperties_Disappears">
<showRemainingTime>false</showRemainingTime>
</li>
<li Class="HediffCompProperties_DisappearsOnDeath"/>
<li Class="HediffCompProperties_Link">
<requireLinkOnOtherPawn>false</requireLinkOnOtherPawn>
<maxDistance>0</maxDistance>
<customMote>Mote_ARA_CreepyCrawly_HediffLinkLine</customMote>
</li>
</comps>
</HediffDef> </HediffDef>
<ThingDef ParentName="MoteBase">
<defName>Mote_ARA_CreepyCrawly_HediffLinkLine</defName>
<thingClass>MoteDualAttached</thingClass>
<altitudeLayer>MoteLow</altitudeLayer>
<mote>
<fadeInTime>0.1</fadeInTime>
<fadeOutTime>0.1</fadeOutTime>
<solidTime>999999</solidTime>
<needsMaintenance>True</needsMaintenance>
<rotateTowardsTarget>True</rotateTowardsTarget>
<scaleToConnectTargets>True</scaleToConnectTargets>
</mote>
<graphicData>
<shaderType>MoteGlow</shaderType>
<texPath>Things/Mote/WorkCommandLinkLine</texPath>
<color>(0,0,0,0)</color>
</graphicData>
</ThingDef>
<HediffDef> <HediffDef>
<defName>ARA_RaceBaseSwarmProduceSwitchHediff</defName> <defName>ARA_RaceBaseSwarmProduceSwitchHediff</defName>
@@ -131,4 +238,41 @@
<defaultLabelColor>(0.6, 0.6, 0.6)</defaultLabelColor> <defaultLabelColor>(0.6, 0.6, 0.6)</defaultLabelColor>
<scenarioCanAdd>false</scenarioCanAdd> <scenarioCanAdd>false</scenarioCanAdd>
</HediffDef> </HediffDef>
<HediffDef ParentName="AddedBodyPartBase">
<defName>ARA_Psi_Conductor</defName>
<label>灵能导体</label>
<description>一只阿拉克涅织域种将这个殖民者的所有灵能抽出来,转化为可以</description>
<descriptionHyperlinks>
<ThingDef>WULA_Addons_Antenna_Shotgun</ThingDef>
<ThingDef>WULA_Addons_Antenna_Shotgun_Turret</ThingDef>
<RecipeDef>Install_WULA_Addons_Antenna_Shotgun</RecipeDef>
</descriptionHyperlinks>
<spawnThingOnRemoved>WULA_Addons_Antenna_Shield</spawnThingOnRemoved>
<addedPartProps>
<!-- <partEfficiency>1.5</partEfficiency> -->
<betterThanNatural>true</betterThanNatural>
</addedPartProps>
<stages>
<li>
<statOffsets>
<MechBandwidth>-2</MechBandwidth>
<MechControlGroups>-1</MechControlGroups>
</statOffsets>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.1</offset>
</li>
</capMods>
</li>
</stages>
<comps>
<li Class="WulaFallenEmpire.HediffCompProperties_TopTurret">
<turretDef>WULA_Addons_Antenna_Shotgun_Turret</turretDef>
<angleOffset>0</angleOffset>
<autoAttack>true</autoAttack>
</li>
</comps>
</HediffDef>
</Defs> </Defs>

View File

@@ -1,47 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<HediffDef>
<defName>ARA_TemperatureRegulation</defName>
<label>冷血动物</label>
<description>阿拉克涅虫族是冷血动物,这代表着她们对外界的温度变化更加敏感——在适宜温度下她们将变得敏捷而致命,在不适温度下她们将难以行动。\n\n此类阿拉克涅虫族可以接受在16~26°C的温度下活动温度接近21°C时会获得额外的意识加成。</description>
<hediffClass>Hediff_High</hediffClass>
<defaultLabelColor>(0.6, 0.8, 0.9)</defaultLabelColor>
<maxSeverity>1.0</maxSeverity>
<minSeverity>-0.01</minSeverity>
<initialSeverity>0.5</initialSeverity>
<comps>
<li Class="ArachnaeSwarm.HediffCompProperties_Temperature">
<minComfortableTemperature>16</minComfortableTemperature>
<maxComfortableTemperature>26</maxComfortableTemperature>
<severityChangeIn>0.01</severityChangeIn>
<severityChangeOut>-0.01</severityChangeOut>
</li>
</comps>
<stages>
<li>
<minSeverity>0</minSeverity>
<label>不适</label>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>-0.5</offset>
</li>
</capMods>
</li>
<li>
<minSeverity>0.4</minSeverity>
<label>适应</label>
</li>
<li>
<minSeverity>0.8</minSeverity>
<label>舒适</label>
<capMods>
<li>
<capacity>Consciousness</capacity>
<offset>0.25</offset>
</li>
</capMods>
</li>
</stages>
</HediffDef>
</Defs>

View File

@@ -70,7 +70,7 @@
<forceNormalGearQuality>true</forceNormalGearQuality> <forceNormalGearQuality>true</forceNormalGearQuality>
<initialWillRange>99~99</initialWillRange> <initialWillRange>99~99</initialWillRange>
<initialResistanceRange>99~99</initialResistanceRange> <initialResistanceRange>99~99</initialResistanceRange>
<maxGenerationAge>0</maxGenerationAge> <maxGenerationAge>0.01</maxGenerationAge>
<minGenerationAge>0</minGenerationAge> <minGenerationAge>0</minGenerationAge>
<canBeScattered>false</canBeScattered> <canBeScattered>false</canBeScattered>
<xenotypeSet> <xenotypeSet>
@@ -285,7 +285,9 @@
</li> </li>
</backstoryFiltersOverride> </backstoryFiltersOverride>
<abilities> <abilities>
<li>ARA_PsychicBrainburn</li>
<li>ARA_Ability_Morph</li> <li>ARA_Ability_Morph</li>
<li>ARA_NeuroSwarm_jump</li>
</abilities> </abilities>
<apparelTags> <apparelTags>
</apparelTags> </apparelTags>
@@ -300,7 +302,7 @@
<forceNoDeathNotification>true</forceNoDeathNotification> <forceNoDeathNotification>true</forceNoDeathNotification>
<combatPower>75</combatPower> <combatPower>75</combatPower>
<ecoSystemWeight>0</ecoSystemWeight> <ecoSystemWeight>0</ecoSystemWeight>
<maxGenerationAge>0</maxGenerationAge> <maxGenerationAge>0.01</maxGenerationAge>
<minGenerationAge>0</minGenerationAge> <minGenerationAge>0</minGenerationAge>
<moveSpeedFactorByTerrainTag> <moveSpeedFactorByTerrainTag>
<li> <li>

View File

@@ -34,7 +34,6 @@
<baseBodySize>0.5</baseBodySize> <baseBodySize>0.5</baseBodySize>
<baseHealthScale>1</baseHealthScale> <baseHealthScale>1</baseHealthScale>
<useMeatFrom>Megaspider</useMeatFrom> <useMeatFrom>Megaspider</useMeatFrom>
<lifeExpectancy>0.1</lifeExpectancy>
<trainability>Advanced</trainability> <trainability>Advanced</trainability>
<!-- <hasCorpse>false</hasCorpse> --> <!-- <hasCorpse>false</hasCorpse> -->
<!-- <specialTrainables> <!-- <specialTrainables>

View File

@@ -21,7 +21,6 @@
<hasGenders>false</hasGenders> <hasGenders>false</hasGenders>
<hasCorpse>false</hasCorpse> <hasCorpse>false</hasCorpse>
<foodType>None</foodType> <foodType>None</foodType>
<lifeExpectancy>2500</lifeExpectancy>
<bloodDef>Filth_BloodInsect</bloodDef> <bloodDef>Filth_BloodInsect</bloodDef>
<disableIgniteVerb>true</disableIgniteVerb> <disableIgniteVerb>true</disableIgniteVerb>
<trainability>None</trainability> <trainability>None</trainability>
@@ -37,6 +36,14 @@
</tools> </tools>
<killedLeavings> <killedLeavings>
</killedLeavings> </killedLeavings>
<comps>
<li Class="CompProperties_MechPowerCell">
<totalPowerTicks>4400</totalPowerTicks> <!-- 2 hours -->
<labelOverride>寿命</labelOverride>
<tooltipOverride>这种特殊的阿拉克涅辅虫从出生起就走在死亡的道路上了——它们的寿命就是如此短暂。</tooltipOverride>
<showGizmoOnNonPlayerControlled>true</showGizmoOnNonPlayerControlled>
</li>
</comps>
</ThingDef> </ThingDef>
<ThingDef ParentName="ARA_BaseDroneSwarm"> <ThingDef ParentName="ARA_BaseDroneSwarm">
<defName>ArachnaeBase_Race_Acid</defName> <defName>ArachnaeBase_Race_Acid</defName>
@@ -61,14 +68,6 @@
<statBases> <statBases>
<MoveSpeed>6</MoveSpeed> <MoveSpeed>6</MoveSpeed>
</statBases> </statBases>
<comps>
<li Class="CompProperties_MechPowerCell">
<totalPowerTicks>4400</totalPowerTicks> <!-- 2 hours -->
<labelOverride>寿命</labelOverride>
<tooltipOverride>这种特殊的阿拉克涅辅虫从出生起就走在死亡的道路上了——它们的寿命就是如此短暂。</tooltipOverride>
<showGizmoOnNonPlayerControlled>true</showGizmoOnNonPlayerControlled>
</li>
</comps>
<tools Inherit="False"> <tools Inherit="False">
<li> <li>
<label>酸性巨颚</label> <label>酸性巨颚</label>
@@ -109,14 +108,6 @@
<MaxFlightTime>9999</MaxFlightTime> <MaxFlightTime>9999</MaxFlightTime>
<FlightCooldown>0</FlightCooldown> <FlightCooldown>0</FlightCooldown>
</statBases> </statBases>
<comps>
<li Class="CompProperties_MechPowerCell">
<totalPowerTicks>4400</totalPowerTicks> <!-- 2 hours -->
<labelOverride>寿命</labelOverride>
<tooltipOverride>这种特殊的阿拉克涅辅虫从出生起就走在死亡的道路上了——它们的寿命就是如此短暂。</tooltipOverride>
<showGizmoOnNonPlayerControlled>true</showGizmoOnNonPlayerControlled>
</li>
</comps>
<tools Inherit="False"> <tools Inherit="False">
<li> <li>
<label>巨颚</label> <label>巨颚</label>
@@ -130,11 +121,10 @@
</li> </li>
</tools> </tools>
</ThingDef> </ThingDef>
<ThingDef ParentName="ARA_BaseDroneSwarm"> <ThingDef ParentName="ARA_BaseDroneSwarm">
<defName>ArachnaeBase_Race_Acidling</defName> <defName>ArachnaeBase_Race_Acidling</defName>
<label>阿拉克涅爆种</label> <label>阿拉克涅爆</label>
<description>阿拉克涅辅虫之一,智力低下,一般被作为自杀式无人机打出,靠近敌人后就会引爆酸囊产生危险的酸性雾气。</description> <description>阿拉克涅辅虫之一,智力低下,一般以自杀式袭击的方式伤害敌军,靠近敌人后就会引爆酸囊产生危险的酸性雾气。</description>
<race> <race>
<thinkTreeConstant>HunterDroneConstant</thinkTreeConstant> <thinkTreeConstant>HunterDroneConstant</thinkTreeConstant>
<baseBodySize>0.5</baseBodySize> <baseBodySize>0.5</baseBodySize>
@@ -155,12 +145,6 @@
<MoveSpeed>6</MoveSpeed> <MoveSpeed>6</MoveSpeed>
</statBases> </statBases>
<comps> <comps>
<li Class="CompProperties_MechPowerCell">
<totalPowerTicks>4400</totalPowerTicks> <!-- 2 hours -->
<labelOverride>寿命</labelOverride>
<tooltipOverride>这种特殊的阿拉克涅辅虫从出生起就走在死亡的道路上了——它们的寿命就是如此短暂。</tooltipOverride>
<showGizmoOnNonPlayerControlled>true</showGizmoOnNonPlayerControlled>
</li>
<li Class="ArachnaeSwarm.CompProperties_HunterExplosion"> <li Class="ArachnaeSwarm.CompProperties_HunterExplosion">
<explosionRadius>3.9</explosionRadius> <!-- Mapped from smokeRadius --> <explosionRadius>3.9</explosionRadius> <!-- Mapped from smokeRadius -->
<explosionDamageType>ARA_AcidBurn</explosionDamageType> <explosionDamageType>ARA_AcidBurn</explosionDamageType>
@@ -185,6 +169,7 @@
</li> </li>
</tools> </tools>
</ThingDef> </ThingDef>
<ToolCapacityDef> <ToolCapacityDef>
<defName>ARA_AcidCut</defName> <defName>ARA_AcidCut</defName>
<label>酸性撕咬</label> <label>酸性撕咬</label>
@@ -202,7 +187,6 @@
<combatLogRulesMiss>Maneuver_Slash_MeleeMiss</combatLogRulesMiss> <combatLogRulesMiss>Maneuver_Slash_MeleeMiss</combatLogRulesMiss>
<combatLogRulesDodge>Maneuver_Slash_MeleeDodge</combatLogRulesDodge> <combatLogRulesDodge>Maneuver_Slash_MeleeDodge</combatLogRulesDodge>
</ManeuverDef> </ManeuverDef>
<ToolCapacityDef> <ToolCapacityDef>
<defName>ARA_Bite</defName> <defName>ARA_Bite</defName>
<label>撕咬</label> <label>撕咬</label>

View File

@@ -536,7 +536,6 @@
<baseHealthScale>1.5</baseHealthScale> <baseHealthScale>1.5</baseHealthScale>
<!-- 解剖产物 --> <!-- 解剖产物 -->
<leatherDef>ARA_Carapace</leatherDef> <leatherDef>ARA_Carapace</leatherDef>
<lifeExpectancy>300</lifeExpectancy>
<!-- 身体类型 --> <!-- 身体类型 -->
<body>Human</body> <body>Human</body>
<lifeStageWorkSettings MayRequire="Ludeon.RimWorld.Biotech"> <lifeStageWorkSettings MayRequire="Ludeon.RimWorld.Biotech">
@@ -631,13 +630,6 @@
<addChance>1.0</addChance> <addChance>1.0</addChance>
<allowDuplicates>false</allowDuplicates> <allowDuplicates>false</allowDuplicates>
</li> </li>
<li Class="CompProperties_CauseHediff_AoE">
<hediff>ARA_CreepyCrawly_Hediff</hediff>
<range>6</range>
<canTargetSelf>false</canTargetSelf>
<drawLines>true</drawLines>
<ignoreMechs>true</ignoreMechs>
</li>
<!--<li> <!--<li>
<compClass>FacialAnimation.EmotionControllerComp</compClass> <compClass>FacialAnimation.EmotionControllerComp</compClass>
</li> </li>
@@ -1766,23 +1758,22 @@
</recipes> </recipes>
<comps> <comps>
<li Class="CompProperties_CauseHediff_AoE">
<hediff>ARA_CreepyCrawly_Hediff</hediff>
<range>6</range>
<canTargetSelf>false</canTargetSelf>
<drawLines>true</drawLines>
<ignoreMechs>true</ignoreMechs>
</li>
<!-- Add our new flight component here --> <!-- Add our new flight component here -->
<li Class="ArachnaeSwarm.CompProperties_PawnFlight"> <!-- 2. 添加我们的飞行组件 --> <li Class="ArachnaeSwarm.CompProperties_PawnFlight"> <!-- 2. 添加我们的飞行组件 -->
<!-- 飞行触发条件:仅在征召时飞行 --> <!-- 飞行触发条件:仅在征召时飞行 -->
<flightCondition>Drafted</flightCondition> <flightCondition>Drafted</flightCondition>
<!-- 链接到我们刚刚创建的 AnimationDef --> <flyingAnimationNorth>ARA_Psi_FlyNorth</flyingAnimationNorth>
<!-- <flyingAnimationNorth>ARA_FlyNorth</flyingAnimationNorth> <flyingAnimationEast>ARA_Psi_FlyEast</flyingAnimationEast>
<flyingAnimationEast>ARA_FlyEast</flyingAnimationEast> <flyingAnimationSouth>ARA_Psi_FlySouth</flyingAnimationSouth>
<flyingAnimationSouth>ARA_FlySouth</flyingAnimationSouth> --> </li>
<li Class="ArachnaeSwarm.CompProperties_HediffGiver">
<hediffs>
<li>ARA_HiveMindDrone</li>
</hediffs>
<addChance>1.0</addChance>
<allowDuplicates>false</allowDuplicates>
</li> </li>
</comps> </comps>
</AlienRace.ThingDef_AlienRace> </AlienRace.ThingDef_AlienRace>

View File

@@ -16,7 +16,7 @@
<thinkTreeConstant>HumanlikeConstant</thinkTreeConstant> <thinkTreeConstant>HumanlikeConstant</thinkTreeConstant>
<intelligence>Humanlike</intelligence> <intelligence>Humanlike</intelligence>
<makesFootprints>true</makesFootprints> <makesFootprints>true</makesFootprints>
<lifeExpectancy>80</lifeExpectancy> <lifeExpectancy>300</lifeExpectancy>
<bloodDef>Filth_Blood</bloodDef> <bloodDef>Filth_Blood</bloodDef>
<bloodSmearDef>Filth_BloodSmear</bloodSmearDef> <bloodSmearDef>Filth_BloodSmear</bloodSmearDef>
<leatherDef>Leather_Human</leatherDef> <leatherDef>Leather_Human</leatherDef>
@@ -705,13 +705,6 @@
<addChance>1.0</addChance> <addChance>1.0</addChance>
<allowDuplicates>false</allowDuplicates> <allowDuplicates>false</allowDuplicates>
</li> </li>
<li Class="CompProperties_CauseHediff_AoE">
<hediff>ARA_CreepyCrawly_Hediff</hediff>
<range>6</range>
<canTargetSelf>false</canTargetSelf>
<drawLines>true</drawLines>
<ignoreMechs>true</ignoreMechs>
</li>
</comps> </comps>
</AlienRace.ThingDef_AlienRace> </AlienRace.ThingDef_AlienRace>
</Defs> </Defs>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 KiB

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 389 KiB

After

Width:  |  Height:  |  Size: 338 KiB

View File

@@ -3,16 +3,8 @@
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\", "WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
"Documents": [ "Documents": [
{ {
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_abilityswitch\\compabilityeffect_giveswitchhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", "AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_abilityswitch\\compabilityeffect_giveswitchhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" "RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:hediffs\\ara_hediffcomp_topturret\\hediffcomp_topturret.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_abilityswitch\\compabilityeffect_removeswitchhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_abilityswitch\\compabilityeffect_removeswitchhediff.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\abilities\\ara_abilityswitch\\weaponswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:abilities\\ara_abilityswitch\\weaponswitch.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
} }
], ],
"DocumentGroupContainers": [ "DocumentGroupContainers": [
@@ -22,50 +14,24 @@
"DocumentGroups": [ "DocumentGroups": [
{ {
"DockedWidth": 200, "DockedWidth": 200,
"SelectedChildIndex": 3, "SelectedChildIndex": 0,
"Children": [ "Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "WeaponSwitch.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\WeaponSwitch.cs",
"RelativeDocumentMoniker": "Abilities\\ARA_AbilitySwitch\\WeaponSwitch.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\WeaponSwitch.cs",
"RelativeToolTip": "Abilities\\ARA_AbilitySwitch\\WeaponSwitch.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAhAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-19T06:39:20.978Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "CompAbilityEffect_RemoveSwitchHediff.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_RemoveSwitchHediff.cs",
"RelativeDocumentMoniker": "Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_RemoveSwitchHediff.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_RemoveSwitchHediff.cs",
"RelativeToolTip": "Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_RemoveSwitchHediff.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAXAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-19T06:39:18.492Z",
"EditorCaption": ""
},
{ {
"$type": "Document", "$type": "Document",
"DocumentIndex": 0, "DocumentIndex": 0,
"Title": "CompAbilityEffect_GiveSwitchHediff.cs", "Title": "HediffComp_TopTurret.cs",
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_GiveSwitchHediff.cs", "DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs",
"RelativeDocumentMoniker": "Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_GiveSwitchHediff.cs", "RelativeDocumentMoniker": "Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs",
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_GiveSwitchHediff.cs", "ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs",
"RelativeToolTip": "Abilities\\ARA_AbilitySwitch\\CompAbilityEffect_GiveSwitchHediff.cs", "RelativeToolTip": "Hediffs\\ARA_HediffComp_TopTurret\\HediffComp_TopTurret.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAXAAAAAAAAAA==", "ViewState": "AgIAAIUAAAAAAAAAAAAswAoAAAAFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-09-19T06:39:09.674Z", "WhenOpened": "2025-09-20T03:55:47.292Z",
"EditorCaption": "" "EditorCaption": ""
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
} }
] ]
} }

View File

@@ -133,6 +133,7 @@
<Compile Include="Hediffs\ARA_ConfigurableMutant\HediffComp_NecroticTransformation.cs" /> <Compile Include="Hediffs\ARA_ConfigurableMutant\HediffComp_NecroticTransformation.cs" />
<Compile Include="Hediffs\ARA_ConfigurableMutant\HediffComp_Symbiosis.cs" /> <Compile Include="Hediffs\ARA_ConfigurableMutant\HediffComp_Symbiosis.cs" />
<Compile Include="Hediffs\ARA_ConfigurableMutant\NecroticTransformationUtility.cs" /> <Compile Include="Hediffs\ARA_ConfigurableMutant\NecroticTransformationUtility.cs" />
<Compile Include="Hediffs\ARA_HediffComp_TopTurret\HediffComp_TopTurret.cs" />
<Compile Include="Hediffs\ARA_HiveMind\CompAbilityEffect_BindDrone.cs" /> <Compile Include="Hediffs\ARA_HiveMind\CompAbilityEffect_BindDrone.cs" />
<Compile Include="Hediffs\ARA_HiveMind\CompProperties_AbilityBindDrone.cs" /> <Compile Include="Hediffs\ARA_HiveMind\CompProperties_AbilityBindDrone.cs" />
<Compile Include="Hediffs\ARA_HiveMind\Hediff_HiveMindDrone.cs" /> <Compile Include="Hediffs\ARA_HiveMind\Hediff_HiveMindDrone.cs" />

View File

@@ -0,0 +1,268 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using Verse;
using Verse.AI;
using RimWorld;
namespace ArachnaeSwarm
{
public class HediffCompProperties_TopTurret : HediffCompProperties
{
public HediffCompProperties_TopTurret()
{
this.compClass = typeof(HediffComp_TopTurret);
}
public ThingDef turretDef;
public float angleOffset;
public bool autoAttack = true;
}
[StaticConstructorOnStartup]
public class HediffComp_TopTurret : HediffComp, IAttackTargetSearcher
{
public Thing Thing
{
get
{
return this.Pawn;
}
}
private HediffCompProperties_TopTurret Props
{
get
{
return (HediffCompProperties_TopTurret)this.props;
}
}
public Verb CurrentEffectiveVerb
{
get
{
return this.AttackVerb;
}
}
public LocalTargetInfo LastAttackedTarget
{
get
{
return this.lastAttackedTarget;
}
}
public int LastAttackTargetTick
{
get
{
return this.lastAttackTargetTick;
}
}
public CompEquippable GunCompEq
{
get
{
return this.gun.TryGetComp<CompEquippable>();
}
}
public Verb AttackVerb
{
get
{
return this.GunCompEq.PrimaryVerb;
}
}
private bool WarmingUp
{
get
{
return this.burstWarmupTicksLeft > 0;
}
}
private bool CanShoot
{
get
{
Pawn pawn;
if ((pawn = (this.Pawn)) != null)
{
if (!pawn.Spawned || pawn.Downed || pawn.Dead || !pawn.Awake())
{
return false;
}
if (pawn.stances.stunner.Stunned)
{
return false;
}
if (this.TurretDestroyed)
{
return false;
}
if (pawn.IsColonyMechPlayerControlled && !this.fireAtWill)
{
return false;
}
}
CompCanBeDormant compCanBeDormant = this.Pawn.TryGetComp<CompCanBeDormant>();
return compCanBeDormant == null || compCanBeDormant.Awake;
}
}
public bool TurretDestroyed
{
get
{
Pawn pawn;
return (pawn = (this.Pawn)) != null && this.AttackVerb.verbProps.linkedBodyPartsGroup != null && this.AttackVerb.verbProps.ensureLinkedBodyPartsGroupAlwaysUsable && PawnCapacityUtility.CalculateNaturalPartsAverageEfficiency(pawn.health.hediffSet, this.AttackVerb.verbProps.linkedBodyPartsGroup) <= 0f;
}
}
private Material TurretMat
{
get
{
if (this.turretMat == null)
{
this.turretMat = MaterialPool.MatFrom(this.Props.turretDef.graphicData.texPath);
}
return this.turretMat;
}
}
public bool AutoAttack
{
get
{
return this.Props.autoAttack;
}
}
public override void CompPostMake()
{
base.CompPostMake();
this.MakeGun();
}
private void MakeGun()
{
this.gun = ThingMaker.MakeThing(this.Props.turretDef, null);
this.UpdateGunVerbs();
}
private void UpdateGunVerbs()
{
List<Verb> allVerbs = this.gun.TryGetComp<CompEquippable>().AllVerbs;
for (int i = 0; i < allVerbs.Count; i++)
{
Verb verb = allVerbs[i];
verb.caster = this.Pawn;
verb.castCompleteCallback = delegate ()
{
this.burstCooldownTicksLeft = this.AttackVerb.verbProps.defaultCooldownTime.SecondsToTicks();
};
}
}
public override void CompPostTick(ref float severityAdjustment)
{
base.CompPostTick(ref severityAdjustment);
if (!this.CanShoot)
{
return;
}
if (this.currentTarget.IsValid)
{
this.curRotation = (this.currentTarget.Cell.ToVector3Shifted() - this.Pawn.DrawPos).AngleFlat() + this.Props.angleOffset;
}
this.AttackVerb.VerbTick();
if (this.AttackVerb.state != VerbState.Bursting)
{
if (this.WarmingUp)
{
this.burstWarmupTicksLeft--;
if (this.burstWarmupTicksLeft == 0)
{
this.AttackVerb.TryStartCastOn(this.currentTarget, false, true, false, true);
this.lastAttackTargetTick = Find.TickManager.TicksGame;
this.lastAttackedTarget = this.currentTarget;
return;
}
}
else
{
if (this.burstCooldownTicksLeft > 0)
{
this.burstCooldownTicksLeft--;
}
if (this.burstCooldownTicksLeft <= 0 && this.Pawn.IsHashIntervalTick(10))
{
this.currentTarget = (Thing)AttackTargetFinder.BestShootTargetFromCurrentPosition(this, TargetScanFlags.NeedThreat | TargetScanFlags.NeedAutoTargetable, null, 0f, 9999f);
if (this.currentTarget.IsValid)
{
this.burstWarmupTicksLeft = 1;
return;
}
this.ResetCurrentTarget();
}
}
}
}
private void ResetCurrentTarget()
{
this.currentTarget = LocalTargetInfo.Invalid;
this.burstWarmupTicksLeft = 0;
}
public override void CompExposeData()
{
base.CompExposeData();
Scribe_Values.Look<int>(ref this.burstCooldownTicksLeft, "burstCooldownTicksLeft", 0, false);
Scribe_Values.Look<int>(ref this.burstWarmupTicksLeft, "burstWarmupTicksLeft", 0, false);
Scribe_TargetInfo.Look(ref this.currentTarget, "currentTarget");
Scribe_Deep.Look<Thing>(ref this.gun, "gun", Array.Empty<object>());
Scribe_Values.Look<bool>(ref this.fireAtWill, "fireAtWill", true, false);
if (Scribe.mode == LoadSaveMode.PostLoadInit)
{
if (this.gun == null)
{
Log.Error("CompTurrentGun had null gun after loading. Recreating.");
this.MakeGun();
return;
}
this.UpdateGunVerbs();
}
}
private const int StartShootIntervalTicks = 10;
private static readonly CachedTexture ToggleTurretIcon = new CachedTexture("UI/Gizmos/ToggleTurret");
public Thing gun;
protected int burstCooldownTicksLeft;
protected int burstWarmupTicksLeft;
protected LocalTargetInfo currentTarget = LocalTargetInfo.Invalid;
private bool fireAtWill = true;
private LocalTargetInfo lastAttackedTarget = LocalTargetInfo.Invalid;
private int lastAttackTargetTick;
private float curRotation;
[Unsaved(false)]
public Material turretMat;
}
}

View File

@@ -31,11 +31,22 @@ namespace ArachnaeSwarm
IReadOnlyList<Pawn> pawns = ((!Props.onlyPawnsInSameFaction || parent.pawn.Faction == null) ? parent.pawn.Map.mapPawns.AllPawnsSpawned : parent.pawn.Map.mapPawns.SpawnedPawnsInFaction(parent.pawn.Faction)); IReadOnlyList<Pawn> pawns = ((!Props.onlyPawnsInSameFaction || parent.pawn.Faction == null) ? parent.pawn.Map.mapPawns.AllPawnsSpawned : parent.pawn.Map.mapPawns.SpawnedPawnsInFaction(parent.pawn.Faction));
foreach (Pawn pawn in pawns) foreach (Pawn pawn in pawns)
{ {
// 修改点:检查种族是否在我们的目标列表中如果列表为空或null则不进行任何操作 // 检查种族是否在我们的目标列表中如果列表为空或null则不进行任何操作
if ((Props.targetRaces.NullOrEmpty() || !Props.targetRaces.Contains(pawn.def)) || pawn.Dead || pawn.health == null || pawn == parent.pawn || !(pawn.Position.DistanceTo(parent.pawn.Position) <= Props.range) || !Props.targetingParameters.CanTarget(pawn)) if ( pawn.Dead || pawn.health == null || pawn == parent.pawn || !(pawn.Position.DistanceTo(parent.pawn.Position) <= Props.range) || !Props.targetingParameters.CanTarget(pawn))
{ {
continue; continue;
} }
else
{
// 如果列表是空的或null则默认对所有的pawn进行操作
if (Props.targetRaces.NullOrEmpty())
{
}
else if (!Props.targetRaces.Contains(pawn.def))
{
continue;
}
}
Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediff); Hediff hediff = pawn.health.hediffSet.GetFirstHediffOfDef(Props.hediff);
if (hediff == null) if (hediff == null)
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB