修bug,自动起飞组件

This commit is contained in:
2025-11-04 17:28:57 +08:00
parent ffb2689ac6
commit c1fe0f8d3e
12 changed files with 308 additions and 948 deletions

View File

@@ -63,7 +63,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Base_Technology</researchPrerequisite>
<recipeUsers>
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
</recipeMaker>
@@ -726,34 +725,10 @@
<recipeMaker>
<researchPrerequisite>WULA_Base_Technology</researchPrerequisite>
<recipeUsers>
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
</recipeMaker>
</ThingDef>
<HediffDef ParentName="ImplantHediffBase">
<defName>WULA_Addons_Antenna_Hediff_Base</defName>
<hediffClass>Hediff_Mechlink</hediffClass>
<label>机械指挥节点</label>
<description>安装于乌拉帝国合成人脑袋两侧的天线除了接收信号外,还能兼职控制其他低级机械体。</description>
<descriptionShort>一对可以控制低级机械体的天线。</descriptionShort>
<isBad>false</isBad>
<duplicationAllowed>false</duplicationAllowed>
<keepOnBodyPartRestoration>true</keepOnBodyPartRestoration>
<stages>
<li>
<statOffsets>
<MechBandwidth>2</MechBandwidth>
<MechControlGroups>1</MechControlGroups>
</statOffsets>
</li>
</stages>
<defaultInstallPart>WULA_Addons_Antenna_Bodypart</defaultInstallPart>
<!-- <spawnThingOnRemoved>WULA_Addons_Antenna_Base</spawnThingOnRemoved> -->
<comps>
<li Class="WulaFallenEmpire.HediffCompProperties_MakesMechanitor"/>
</comps>
</HediffDef>
<ThingDef ParentName="MechanitorImplantCraftableBase">
<defName>WULA_Addons_Antenna_Expansion</defName>
<label>上行链路天线-扩容插件</label>
@@ -1504,7 +1479,6 @@
<recipeMaker>
<unfinishedThingDef>UnfinishedHealthItemProsthetic</unfinishedThingDef>
<recipeUsers>
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<useIngredientsForColor>false</useIngredientsForColor>

View File

@@ -59,11 +59,6 @@
<thingDef>Chemfuel</thingDef>
<count>300</count>
</li>
<li Class="ScenPart_StartingThing_Defined">
<def>StartingThing_Defined</def>
<thingDef>WULA_MW_Mace</thingDef>
<stuff>Uranium</stuff>
</li>
<li Class="ScenPart_StartingThing_Defined">
<def>StartingThing_Defined</def>
<thingDef>WULA_RW_Base_AR</thingDef>
@@ -194,11 +189,6 @@
<thingDef>ComponentIndustrial</thingDef>
<count>50</count>
</li>
<li Class="ScenPart_StartingThing_Defined">
<def>StartingThing_Defined</def>
<thingDef>WULA_MW_Mace</thingDef>
<stuff>Uranium</stuff>
</li>
<li Class="ScenPart_StartingThing_Defined">
<def>StartingThing_Defined</def>
<thingDef>WULA_RW_Base_AR</thingDef>

View File

@@ -1,57 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThingDef ParentName="BuildingBase">
<defName>WULA_GlobalStorageSenderPod</defName>
<label>全局存储输送舱</label>
<description>一个一次性的物资输送装置,可以将装载的货物直接发射到全局存储网络中,而无需选择目标地点。发射后即告销毁。</description>
<graphicData>
<texPath>Things/Special/DropPod</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2,2)</drawSize>
</graphicData>
<size>(1,1)</size>
<rotatable>false</rotatable>
<tickerType>Normal</tickerType>
<altitudeLayer>BuildingOnTop</altitudeLayer>
<passability>PassThroughOnly</passability>
<castEdgeShadows>false</castEdgeShadows>
<designationHotKey>Misc12</designationHotKey>
<fillPercent>0.5</fillPercent>
<designationCategory>WULA_Buildings</designationCategory>
<uiOrder>2201</uiOrder> <!-- Slightly after the original -->
<terrainAffordanceNeeded>Medium</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
<WorkToBuild>1600</WorkToBuild>
<Flammability>0.5</Flammability>
</statBases>
<costList>
<Steel>60</Steel>
<ComponentIndustrial>1</ComponentIndustrial>
</costList>
<comps>
<li Class="CompProperties_Transporter">
<massCapacity>300</massCapacity>
<restEffectiveness>0.8</restEffectiveness>
<canChangeAssignedThingsAfterStarting>true</canChangeAssignedThingsAfterStarting>
</li>
<li Class="WulaFallenEmpire.CompProperties_Launchable_ToGlobalStorage">
<skyfallerLeaving>DropPodLeaving</skyfallerLeaving>
<requiresFuelingPort>false</requiresFuelingPort>
</li>
</comps>
<inspectorTabs>
<li>ITab_ContentsTransporter</li>
</inspectorTabs>
<placeWorkers>
<li>PlaceWorker_NotUnderRoof</li>
</placeWorkers>
<researchPrerequisites>
<li>TransportPod</li>
</researchPrerequisites>
<constructionSkillPrerequisite>6</constructionSkillPrerequisite>
<uiIconScale>0.65</uiIconScale>
</ThingDef>
</Defs>

View File

@@ -1056,7 +1056,6 @@
</graphicData>
<interactionCellOffset>(0,0,0)</interactionCellOffset>
<passability>Standable</passability>
<designationCategory>WULA_Buildings</designationCategory>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
<WorkToBuild>8000</WorkToBuild>
@@ -1118,4 +1117,14 @@
</li>
</comps>
</ThingDef>
<comps>
<li Class="WulaFallenEmpire.CompAutoLaunchHangar">
<aircraftDef>YourAircraftDef</aircraftDef>
<aircraftCount>1</aircraftCount>
<skyfallerLeaving>SkyfallerLeaving</skyfallerLeaving>
<launchDelayTicks>120</launchDelayTicks> <!-- 2秒延迟 -->
<requirePower>false</requirePower>
</li>
</comps>
</Defs>

View File

@@ -1,5 +1,59 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!-- 输送舱 -->
<ThingDef ParentName="BuildingBase">
<defName>WULA_GlobalStorageSenderPod</defName>
<label>全局存储输送舱</label>
<description>一个一次性的物资输送装置,可以将装载的货物直接发射到全局存储网络中,而无需选择目标地点。发射后即告销毁。</description>
<graphicData>
<texPath>Things/Special/DropPod</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(2,2)</drawSize>
</graphicData>
<size>(1,1)</size>
<rotatable>false</rotatable>
<tickerType>Normal</tickerType>
<altitudeLayer>BuildingOnTop</altitudeLayer>
<passability>PassThroughOnly</passability>
<castEdgeShadows>false</castEdgeShadows>
<designationHotKey>Misc12</designationHotKey>
<fillPercent>0.5</fillPercent>
<designationCategory>WULA_Buildings</designationCategory>
<uiOrder>2201</uiOrder> <!-- Slightly after the original -->
<terrainAffordanceNeeded>Medium</terrainAffordanceNeeded>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
<WorkToBuild>1600</WorkToBuild>
<Flammability>0.5</Flammability>
</statBases>
<costList>
<Steel>60</Steel>
<ComponentIndustrial>1</ComponentIndustrial>
</costList>
<comps>
<li Class="CompProperties_Transporter">
<massCapacity>300</massCapacity>
<restEffectiveness>0.8</restEffectiveness>
<canChangeAssignedThingsAfterStarting>true</canChangeAssignedThingsAfterStarting>
</li>
<li Class="WulaFallenEmpire.CompProperties_Launchable_ToGlobalStorage">
<skyfallerLeaving>DropPodLeaving</skyfallerLeaving>
<requiresFuelingPort>false</requiresFuelingPort>
</li>
</comps>
<inspectorTabs>
<li>ITab_ContentsTransporter</li>
</inspectorTabs>
<placeWorkers>
<li>PlaceWorker_NotUnderRoof</li>
</placeWorkers>
<researchPrerequisites>
<li>TransportPod</li>
</researchPrerequisites>
<constructionSkillPrerequisite>6</constructionSkillPrerequisite>
<uiIconScale>0.65</uiIconScale>
</ThingDef>
<!-- 服务器 -->
<ThingDef ParentName="BenchBase">
<defName>WULA_Synth_Server</defName>

View File

@@ -267,7 +267,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
@@ -312,7 +311,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
@@ -328,7 +326,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<displayPriority>105</displayPriority>
@@ -392,7 +389,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
@@ -408,7 +404,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<displayPriority>105</displayPriority>
@@ -474,7 +469,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<workSpeedStat>GeneralLaborSpeed</workSpeedStat>
@@ -701,7 +695,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
</recipeMaker>
@@ -729,7 +722,6 @@
<recipeMaker>
<researchPrerequisite>WULA_Synth_Clothes_Technology</researchPrerequisite>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
</recipeMaker>
@@ -1541,7 +1533,6 @@
</statBases>
<recipeMaker>
<recipeUsers Inherit="False">
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</recipeUsers>
<researchPrerequisite>WULA_Synth_Weapon_2_Missile_Technology</researchPrerequisite>

View File

@@ -8,7 +8,6 @@
<workType>Smithing</workType>
<priorityInType>75</priorityInType>
<fixedBillGiverDefs>
<li>WULA_Cube_Productor_BIO</li>
<li>WULA_Cube_Productor_Energy</li>
</fixedBillGiverDefs>
<verb>工作于</verb>

View File

@@ -1,836 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThingDef Name="WULA_SP_Spear_Impale" ParentName="BaseHumanMakeableGun">
<defName>WULA_SP_Spear_Impale</defName>
<label>圣枪穿刺术式</label>
<description>这是乌拉星人所创造的最强大的进攻术式,来源于乌拉星人的泰坦和旗舰。这种术式发射的纯净灵能能量能绕过几乎所有防御,在敌人的集群中连续弹跳,瞬间烧穿无信之徒的可悲躯体。\n\n为法杖同时携带了一个需要魂楔充能的进攻型技可以从很远的地方发射灵能射弹轰炸目标区域。</description>
<techLevel>Archotech</techLevel>
<!-- <techLevel>Spacer</techLevel> -->
<relicChance>0</relicChance>
<graphicData>
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_Explosive</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>1.3</drawSize>
</graphicData>
<descriptionHyperlinks>
<ThingDef>WULA_Soul_Wedge</ThingDef>
</descriptionHyperlinks>
<uiIconPath>Wula/Weapon/WULA_SP_Spear_Impale</uiIconPath>
<weaponTags>
<li>Wula_Spell_Weapon_T3</li>
</weaponTags>
<useHitPoints>False</useHitPoints>
<uiIconScale>1</uiIconScale>
<soundInteract>Gorehulk_Spine_Launch</soundInteract>
<recipeMaker>
<recipeUsers Inherit="False"/>
<researchPrerequisite Inherit="False" />
</recipeMaker>
<costList Inherit="False">
<WULA_Soul_Wedge>2000</WULA_Soul_Wedge>
<WULA_Dark_Matter_Item>6</WULA_Dark_Matter_Item>
</costList>
<statBases>
<DeteriorationRate>0</DeteriorationRate>
<Flammability>0</Flammability>
<WorkToMake>40000</WorkToMake>
<Mass>0</Mass>
<AccuracyTouch>1</AccuracyTouch>
<AccuracyShort>1</AccuracyShort>
<AccuracyMedium>1</AccuracyMedium>
<AccuracyLong>1</AccuracyLong>
<RangedWeapon_Cooldown>0</RangedWeapon_Cooldown>
</statBases>
<verbs>
<li Class="WulaFallenEmpire.VerbProperties_Arc">
<verbClass>WulaFallenEmpire.Verb_ShootArc</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<damageDef>Wula_Psi_Damage</damageDef>
<damageAmount>30</damageAmount>
<EMPDamageAmount>0</EMPDamageAmount>
<warmupTime>4</warmupTime>
<range>56</range>
<affectedAngle>25</affectedAngle>
<armorPenetration>1000</armorPenetration>
<soundCast>AgonyPulse_Cast</soundCast>
<soundCastTail>GunTail_Medium</soundCastTail>
<muzzleFlashScale>9</muzzleFlashScale>
<isConductible>True</isConductible>
<conductFriendly>False</conductFriendly>
<conductNum>12</conductNum>
<beamMoteDef>WULA_SP_Spear_Impale_ArcBeam</beamMoteDef>
<aimingChargeMote>Mote_HellsphereCannon_Charge</aimingChargeMote>
</li>
</verbs>
<comps>
<!-- 心灵敏感度伤害缩放组件 -->
<li Class="WulaFallenEmpire.CompProperties_PsychicScaling">
<!--
伤害增幅系数:
当持有者心灵敏感度 > 1 时, 每高出1点, 伤害增加 1%。
例如: 200% (2.0) 敏感度 -> 伤害增加 (2.0 - 1.0) * 1 = 100%。
-->
<damageMultiplierPerSensitivityPoint>1</damageMultiplierPerSensitivityPoint>
<!--
伤害减免系数:
当持有者心灵敏感度 < 1 时, 每低1点, 伤害降低 100%。
例如: 50% (0.5) 敏感度 -> 伤害降低 (1.0 - 0.5) * 1.0 = 50%。
-->
<damageReductionMultiplierPerSensitivityPoint>1</damageReductionMultiplierPerSensitivityPoint>
</li>
<li Class="CompProperties_EquippableAbilityReloadable">
<abilityDef>WULA_MW_Scepter_Of_Explosive_Ability</abilityDef>
<maxCharges>10</maxCharges>
<soundReload>AnomalyAbilityWarmup</soundReload>
<chargeNoun>魂锲</chargeNoun>
<ammoDef>WULA_Soul_Wedge</ammoDef>
<ammoCountPerCharge>2</ammoCountPerCharge>
<baseReloadTicks>60</baseReloadTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_CustomUniqueWeapon" MayRequire="Ludeon.RimWorld.Odyssey">
<forcedTraits>
<li>WULA_DamagePsychicScaling</li>
<li>WULA_ExtraPsychicSkill</li>
</forcedTraits>
<numTraitsRange>
<min>2</min>
<max>2</max>
</numTraitsRange>
</li>
</comps>
<tradeability>None</tradeability>
<thingSetMakerTags>
<li>RewardStandardQualitySuper</li>
</thingSetMakerTags>
</ThingDef>
<AbilityDef>
<defName>WULA_MW_Scepter_Of_Explosive_Ability</defName>
<label>乌拉帝国法术:裂矢</label>
<description>发射魂烬裂矢,将目标区域烧成灰烬——这种以纯粹灵能作为驱动的射弹将无视所有的非护盾阻碍,发射时也不需要目标视线。</description>
<iconPath>Wula/UI/Abilities/WULA_MW_Scepter_Of_Explosive_Ability</iconPath>
<writeCombatLog>True</writeCombatLog>
<showPsycastEffects>False</showPsycastEffects>
<hotKey>Misc11</hotKey>
<!-- <cooldownTicksRange>120~240</cooldownTicksRange> -->
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<range>150</range>
<warmupTime>3</warmupTime>
<muzzleFlashScale>9</muzzleFlashScale>
<beamTargetsGround>true</beamTargetsGround>
<soundAiming>FleshmelterBolt_Charging</soundAiming>
<ai_IsWeapon>true</ai_IsWeapon>
<soundCast>PsychicShockLanceCast</soundCast>
<requireLineOfSight>false</requireLineOfSight>
<targetParams>
<canTargetLocations>true</canTargetLocations>
<canTargetSelf>false</canTargetSelf>
<canTargetPawns>true</canTargetPawns>
<canTargetBuildings>true</canTargetBuildings>
<canTargetPlants>true</canTargetPlants>
</targetParams>
</verbProperties>
<comps>
<li Class="CompProperties_AbilityLaunchProjectile">
<projectileDef>Bullet_WULA_MW_Scepter_Of_Explosive</projectileDef>
<psychic>True</psychic>
<screenShakeIntensity>0.5</screenShakeIntensity>
</li>
</comps>
</AbilityDef>
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_MW_Scepter_Of_Explosive</defName>
<label>魂烬裂矢</label>
<thingClass>Projectile_Explosive</thingClass>
<graphicData>
<texPath>Things/Projectile/FleshmelterBolt</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>Mote</shaderType>
<drawSize>(1.5, 3)</drawSize>
</graphicData>
<projectile>
<damageDef>Wula_Psi_Bomb</damageDef>
<damageAmountBase>50</damageAmountBase>
<speed>65</speed>
<soundAmbient>FleshmelterBolt_Launch</soundAmbient>
<explosionRadius>3.49</explosionRadius>
<screenShakeFactor>0.75</screenShakeFactor>
<explosionChanceToStartFire>0.75</explosionChanceToStartFire>
<armorPenetrationBase>0.5</armorPenetrationBase>
<!-- <flyOverhead>true</flyOverhead> -->
</projectile>
</ThingDef>
<ThingDef ParentName="MoteBase">
<defName>WULA_SP_Spear_Impale_ArcBeam</defName>
<thingClass>MoteDualAttached</thingClass>
<altitudeLayer>MoteOverhead</altitudeLayer>
<mote>
<fadeInTime>0</fadeInTime>
<fadeOutTime>1</fadeOutTime>
<solidTime>0.4</solidTime>
<needsMaintenance>False</needsMaintenance>
<rotateTowardsTarget>True</rotateTowardsTarget>
<scaleToConnectTargets>True</scaleToConnectTargets>
<fadeOutUnmaintained>False</fadeOutUnmaintained>
</mote>
<drawOffscreen>true</drawOffscreen>
<graphicData>
<texPath>Wula/Mote/WULA_Lighting_Beam</texPath>
<color>(200, 40, 40, 255)</color>
<graphicClass>Graphic_MoteWithAgeSecs</graphicClass>
<shaderType>MoteGlow</shaderType>
<drawSize>(1.5,1)</drawSize>
<shaderParameters>
<_ExtraTexA>/Things/Mote/BeamSecondaryNoise_A</_ExtraTexA>
<_ExtraTexB>/Things/Mote/BeamSecondaryNoise_B</_ExtraTexB>
<_ScrollSpeedA>-4 </_ScrollSpeedA>
<_ScrollSpeedB>3</_ScrollSpeedB>
<_Intensity>2</_Intensity>
</shaderParameters>
</graphicData>
</ThingDef>
<ThingDef ParentName="WULA_SP_Spear_Impale">
<defName>WULA_SP_Spear_Impale_For_Enermy</defName>
<destroyOnDrop>true</destroyOnDrop>
<weaponTags>
<li>WULA_SP_Spear_Impale_For_Enermy</li>
</weaponTags>
</ThingDef>
<ThingDef Name="WULA_SP_Cotton_Counter" ParentName="BaseHumanMakeableGun">
<defName>WULA_SP_Cotton_Counter</defName>
<label>飘絮反制术式</label>
<description>这是乌拉星人在舰船上用于反制敌方飞行器和导弹的特殊术式,核心在于高爆发性高追踪性的输出,通过快速吟唱汇聚的灵能能量使对方迅速失能。\n\n法杖同时携带了一个需要魂楔充能的辅助型技能允许将自身遮蔽起来以进入隐身状态。</description>
<techLevel>Archotech</techLevel>
<!-- <techLevel>Spacer</techLevel> -->
<relicChance>0</relicChance>
<graphicData>
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_CLoak</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>1.3</drawSize>
</graphicData>
<uiIconPath>Wula/Weapon/WULA_SP_Cotton_Counter</uiIconPath>
<descriptionHyperlinks>
<ThingDef>WULA_Soul_Wedge</ThingDef>
</descriptionHyperlinks>
<weaponTags>
<li>Wula_Spell_Weapon_T1</li>
</weaponTags>
<useHitPoints>False</useHitPoints>
<uiIconScale>1</uiIconScale>
<soundInteract>Heatspikes_Shot</soundInteract>
<recipeMaker>
<recipeUsers Inherit="False"/>
<researchPrerequisite Inherit="False" />
</recipeMaker>
<costList Inherit="False">
<WULA_Soul_Wedge>2000</WULA_Soul_Wedge>
<WULA_Dark_Matter_Item>4</WULA_Dark_Matter_Item>
</costList>
<statBases>
<DeteriorationRate>0</DeteriorationRate>
<Flammability>0</Flammability>
<WorkToMake>40000</WorkToMake>
<Mass>0</Mass>
<AccuracyTouch>2</AccuracyTouch>
<AccuracyShort>2</AccuracyShort>
<AccuracyMedium>2</AccuracyMedium>
<AccuracyLong>2</AccuracyLong>
<RangedWeapon_Cooldown>0</RangedWeapon_Cooldown>
</statBases>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>Bullet_WULA_SP_Cotton_Counter</defaultProjectile>
<warmupTime>0.2</warmupTime>
<range>52</range>
<burstShotCount>1</burstShotCount>
<soundCast>Heatspikes_Shot</soundCast>
<soundCastTail>Heatspikes_Tail</soundCastTail>
<muzzleFlashScale>9</muzzleFlashScale>
</li>
</verbs>
<comps>
<!-- 心灵敏感度伤害缩放组件 -->
<li Class="WulaFallenEmpire.CompProperties_PsychicScaling">
<!--
伤害增幅系数:
当持有者心灵敏感度 > 1 时, 每高出1点, 伤害增加 1%。
例如: 200% (2.0) 敏感度 -> 伤害增加 (2.0 - 1.0) * 1 = 100%。
-->
<damageMultiplierPerSensitivityPoint>1</damageMultiplierPerSensitivityPoint>
<!--
伤害减免系数:
当持有者心灵敏感度 < 1 时, 每低1点, 伤害降低 100%。
例如: 50% (0.5) 敏感度 -> 伤害降低 (1.0 - 0.5) * 1.0 = 50%。
-->
<damageReductionMultiplierPerSensitivityPoint>1</damageReductionMultiplierPerSensitivityPoint>
</li>
<li Class="CompProperties_EquippableAbilityReloadable">
<abilityDef>WULA_MW_Scepter_Of_CLoak_Ability</abilityDef>
<maxCharges>5</maxCharges>
<soundReload>AnomalyAbilityWarmup</soundReload>
<chargeNoun>魂锲</chargeNoun>
<ammoDef>WULA_Soul_Wedge</ammoDef>
<ammoCountPerCharge>2</ammoCountPerCharge>
<baseReloadTicks>60</baseReloadTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_CustomUniqueWeapon" MayRequire="Ludeon.RimWorld.Odyssey">
<forcedTraits>
<li>WULA_DamagePsychicScaling</li>
<li>WULA_ExtraPsychicSkill</li>
</forcedTraits>
<numTraitsRange>
<min>2</min>
<max>2</max>
</numTraitsRange>
</li>
</comps>
<tradeability>None</tradeability>
<thingSetMakerTags>
<li>RewardStandardQualitySuper</li>
</thingSetMakerTags>
</ThingDef>
<AbilityDef>
<defName>WULA_MW_Scepter_Of_CLoak_Ability</defName>
<label>乌拉帝国法术:隐身</label>
<description>使用灵能让一个目标短时间内被附近的其他生物忽略,从而获得隐身效果。\n\n装填需消耗魂楔。</description>
<iconPath>Wula/UI/Abilities/WULA_MW_Scepter_Of_CLoak_Ability</iconPath>
<writeCombatLog>True</writeCombatLog>
<hotKey>Misc12</hotKey>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<statBases>
<Ability_EntropyGain>0</Ability_EntropyGain>
<Ability_PsyfocusCost>-1</Ability_PsyfocusCost>
<Ability_Duration>15</Ability_Duration>
</statBases>
<verbProperties>
<verbClass>Verb_CastPsycast</verbClass>
<drawAimPie>false</drawAimPie>
<warmupTime>0.1</warmupTime>
<violent>false</violent>
<targetable>false</targetable>
<targetParams>
<canTargetSelf>true</canTargetSelf>
</targetParams>
<soundCast>DeadlifeRelease</soundCast>
</verbProperties>
<comps>
<li Class = "CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>PsychicInvisibility</hediffDef>
<psychic>True</psychic>
</li>
<li Class="CompProperties_AbilityFleckOnTarget">
<fleckDef>PsycastPsychicEffect</fleckDef>
</li>
</comps>
</AbilityDef>
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_SP_Cotton_Counter</defName>
<label>飘絮反制术式</label>
<thingClass>Beam</thingClass>
<graphicData>
<texPath>Things/Projectile/Bullet_Small</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<projectile>
<damageDef>Wula_Psi_Damage</damageDef>
<damageAmountBase>15</damageAmountBase>
<beamMoteDef>WULA_SP_Cotton_Counter_ArcBeam</beamMoteDef>
<beamStartOffset>0.5</beamStartOffset>
<armorPenetrationBase>1.5</armorPenetrationBase>
</projectile>
</ThingDef>
<ThingDef ParentName="MoteBase">
<defName>WULA_SP_Cotton_Counter_ArcBeam</defName>
<thingClass>MoteDualAttached</thingClass>
<altitudeLayer>MoteOverhead</altitudeLayer>
<mote>
<fadeInTime>0</fadeInTime>
<fadeOutTime>1</fadeOutTime>
<solidTime>0.4</solidTime>
<needsMaintenance>False</needsMaintenance>
<rotateTowardsTarget>True</rotateTowardsTarget>
<scaleToConnectTargets>True</scaleToConnectTargets>
<fadeOutUnmaintained>False</fadeOutUnmaintained>
</mote>
<drawOffscreen>true</drawOffscreen>
<graphicData>
<texPath>Wula/Mote/WULA_Lighting_Beam</texPath>
<color>(255, 255, 255, 255)</color>
<graphicClass>Graphic_MoteWithAgeSecs</graphicClass>
<shaderType>MoteGlow</shaderType>
<drawSize>(1.2,1)</drawSize>
<shaderParameters>
<_ExtraTexA>/Things/Mote/BeamSecondaryNoise_A</_ExtraTexA>
<_ExtraTexB>/Things/Mote/BeamSecondaryNoise_B</_ExtraTexB>
<_ScrollSpeedA>-4 </_ScrollSpeedA>
<_ScrollSpeedB>3</_ScrollSpeedB>
<_Intensity>2</_Intensity>
</shaderParameters>
</graphicData>
</ThingDef>
<ThingDef ParentName="WULA_SP_Cotton_Counter">
<defName>WULA_SP_Cotton_Counter_For_Enermy</defName>
<destroyOnDrop>true</destroyOnDrop>
<weaponTags>
<li>WULA_SP_Cotton_Counter_For_Enermy</li>
</weaponTags>
</ThingDef>
<ThingDef ParentName="BaseHumanMakeableGun">
<defName>WULA_SP_Live_Shelter</defName>
<label>生灵庇佑术式</label>
<description>这是乌拉星人用于救治伤者的法术,可以使用灵能诱发伤口以非常规的方式快速愈合,并且效果会在友方个体间弹跳。\n\n法杖同时携带了一个需要魂楔充能的生产型技能可以为大范围内的所有殖民者和机械体提供持续数天的额外移动速度和工作速度。</description>
<techLevel>Archotech</techLevel>
<!-- <techLevel>Spacer</techLevel> -->
<relicChance>0</relicChance>
<graphicData>
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_Feather</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>1.3</drawSize>
</graphicData>
<descriptionHyperlinks>
<ThingDef>WULA_Soul_Wedge</ThingDef>
</descriptionHyperlinks>
<uiIconPath>Wula/Weapon/WULA_SP_Live_Shelter</uiIconPath>
<weaponTags>
<li>Wula_Spell_Weapon_T1</li>
</weaponTags>
<useHitPoints>False</useHitPoints>
<uiIconScale>1</uiIconScale>
<soundInteract>Gorehulk_Spine_Launch</soundInteract>
<recipeMaker>
<recipeUsers Inherit="False"/>
<researchPrerequisite Inherit="False" />
</recipeMaker>
<costList Inherit="False">
<WULA_Soul_Wedge>2000</WULA_Soul_Wedge>
<WULA_Dark_Matter_Item>6</WULA_Dark_Matter_Item>
</costList>
<statBases>
<DeteriorationRate>0</DeteriorationRate>
<Flammability>0</Flammability>
<WorkToMake>40000</WorkToMake>
<Mass>0</Mass>
<AccuracyTouch>1</AccuracyTouch>
<AccuracyShort>1</AccuracyShort>
<AccuracyMedium>1</AccuracyMedium>
<AccuracyLong>1</AccuracyLong>
<RangedWeapon_Cooldown>0</RangedWeapon_Cooldown>
</statBases>
<verbs>
<li Class="WulaFallenEmpire.VerbProperties_Arc">
<verbClass>WulaFallenEmpire.Verb_ShootArc</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<damageDef>WULA_SP_Live_Shelter_Heal</damageDef>
<damageAmount>1</damageAmount>
<EMPDamageAmount>0</EMPDamageAmount>
<warmupTime>4</warmupTime>
<range>20</range>
<affectedAngle>25</affectedAngle>
<armorPenetration>1.5</armorPenetration>
<soundCast>AgonyPulse_Cast</soundCast>
<soundCastTail>GunTail_Medium</soundCastTail>
<muzzleFlashScale>9</muzzleFlashScale>
<isConductible>True</isConductible>
<conductFriendly>True</conductFriendly>
<conductHostile>false</conductHostile>
<conductNum>3</conductNum>
<beamMoteDef>WULA_SP_Live_Shelter_ArcBeam</beamMoteDef>
<aimingChargeMote>Mote_HellsphereCannon_Charge</aimingChargeMote>
</li>
</verbs>
<comps>
<li Class="CompProperties_EquippableAbilityReloadable">
<abilityDef>WULA_MW_Scepter_Of_Feather_Ability</abilityDef>
<maxCharges>10</maxCharges>
<soundReload>AnomalyAbilityWarmup</soundReload>
<chargeNoun>魂锲</chargeNoun>
<ammoDef>WULA_Soul_Wedge</ammoDef>
<ammoCountPerCharge>2</ammoCountPerCharge>
<baseReloadTicks>60</baseReloadTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_CustomUniqueWeapon" MayRequire="Ludeon.RimWorld.Odyssey">
<forcedTraits>
<li>WULA_DamagePsychicScaling</li>
<li>WULA_ExtraPsychicSkill</li>
</forcedTraits>
<numTraitsRange>
<min>2</min>
<max>2</max>
</numTraitsRange>
</li>
</comps>
<tradeability>None</tradeability>
<thingSetMakerTags>
<li>RewardStandardQualitySuper</li>
</thingSetMakerTags>
</ThingDef>
<ThingDef ParentName="MoteBase">
<defName>WULA_SP_Live_Shelter_ArcBeam</defName>
<thingClass>MoteDualAttached</thingClass>
<altitudeLayer>MoteOverhead</altitudeLayer>
<mote>
<fadeInTime>0</fadeInTime>
<fadeOutTime>1</fadeOutTime>
<solidTime>0.4</solidTime>
<needsMaintenance>False</needsMaintenance>
<rotateTowardsTarget>True</rotateTowardsTarget>
<scaleToConnectTargets>True</scaleToConnectTargets>
<fadeOutUnmaintained>False</fadeOutUnmaintained>
</mote>
<drawOffscreen>true</drawOffscreen>
<graphicData>
<texPath>Wula/Mote/WULA_Lighting_Beam</texPath>
<color>(38, 204, 66, 255)</color>
<graphicClass>Graphic_MoteWithAgeSecs</graphicClass>
<shaderType>MoteGlow</shaderType>
<drawSize>(1,1)</drawSize>
<shaderParameters>
<_ExtraTexA>/Things/Mote/BeamSecondaryNoise_A</_ExtraTexA>
<_ExtraTexB>/Things/Mote/BeamSecondaryNoise_B</_ExtraTexB>
<_ScrollSpeedA>-4 </_ScrollSpeedA>
<_ScrollSpeedB>3</_ScrollSpeedB>
<_Intensity>2</_Intensity>
</shaderParameters>
</graphicData>
</ThingDef>
<AbilityDef ParentName="PsycastBase">
<defName>WULA_MW_Scepter_Of_Feather_Ability</defName>
<label>乌拉帝国法术:激励</label>
<description>以自身为中心,为大范围内的所有殖民者和机械体提供持续数天的额外移动速度和工作速度。</description>
<iconPath>Wula/UI/Abilities/WULA_MW_Scepter_Of_Feather_Ability</iconPath>
<writeCombatLog>True</writeCombatLog>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<level>-1</level>
<statBases>
<Ability_EntropyGain>0</Ability_EntropyGain>
<Ability_PsyfocusCost>-1</Ability_PsyfocusCost>
<Ability_Duration>4000</Ability_Duration>
<Ability_EffectRadius>500</Ability_EffectRadius>
</statBases>
<verbProperties>
<warmupTime>5</warmupTime>
<range>60</range>
<drawAimPie>true</drawAimPie>
<requireLineOfSight>false</requireLineOfSight>
<nonInterruptingSelfCast>true</nonInterruptingSelfCast>
<soundCast>VoidTerrorCast</soundCast>
<targetable>false</targetable>
<targetParams>
<canTargetSelf>true</canTargetSelf>
</targetParams>
</verbProperties>
<comps>
<li Class = "CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>WULA_MW_Scepter_Of_Feather_Hediff</hediffDef>
<durationMultiplier>PsychicSensitivity</durationMultiplier>
<psychic>True</psychic>
</li>
<li Class="CompProperties_AbilityFleckOnTarget">
<fleckDef>PsycastPsychicEffect</fleckDef>
</li>
</comps>
</AbilityDef>
<HediffDef>
<defName>WULA_MW_Scepter_Of_Feather_Hediff</defName>
<label>乌拉帝国法术:激励</label>
<description>这个殖民者受到了乌拉帝国灵能法术的激励,行动和生产变得更加有效率了。</description>
<hediffClass>HediffWithComps</hediffClass>
<stages>
<li>
<statFactors>
<MoveSpeed>1.5</MoveSpeed>
<WorkSpeedGlobal>1.3</WorkSpeedGlobal>
</statFactors>
</li>
</stages>
<comps>
<li Class="HediffCompProperties_Disappears">
<disappearsAfterTicks>240000~240000</disappearsAfterTicks> <!-- 1~2 days -->
<showRemainingTime>true</showRemainingTime>
</li>
</comps>
</HediffDef>
<ThingDef ParentName="BaseHumanMakeableGun">
<defName>WULA_SP_Mist_Incinerator</defName>
<label>灰烬焚烧术式</label>
<description>乌拉星人所使用的压制性术式,能够在短时间的吟唱后喷出大量由灵能能量构成的火焰,这种击穿灵魂的火焰可以无视敌人的护甲,点燃敌人的躯体。\n\n法杖同时携带了一个需要魂楔充能的控制型技能使小范围内的敌人陷入心灵冲击状态从而失去战斗力。</description>
<relicChance>0</relicChance>
<graphicData>
<texPath>Wula/Weapon/WULA_MW_Scepter_Of_Heaven</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>1.3</drawSize>
</graphicData>
<uiIconPath>Wula/Weapon/WULA_SP_Mist_Incinerator</uiIconPath>
<techLevel>Archotech</techLevel>
<soundInteract>Metal_Drop</soundInteract>
<descriptionHyperlinks>
<ThingDef>WULA_Soul_Wedge</ThingDef>
</descriptionHyperlinks>
<weaponTags>
<li>Wula_Spell_Weapon_T1</li>
</weaponTags>
<useHitPoints>False</useHitPoints>
<statBases>
<DeteriorationRate>0</DeteriorationRate>
<Flammability>0</Flammability>
<WorkToMake>30000</WorkToMake>
<Mass>0</Mass>
<!-- <AccuracyTouch>1</AccuracyTouch>
<AccuracyShort>1</AccuracyShort>
<AccuracyMedium>1</AccuracyMedium>
<AccuracyLong>1</AccuracyLong> -->
<RangedWeapon_Cooldown>3</RangedWeapon_Cooldown>
</statBases>
<costList Inherit="False">
<WULA_Soul_Wedge>2000</WULA_Soul_Wedge>
<WULA_Dark_Matter_Item>2</WULA_Dark_Matter_Item>
</costList>
<recipeMaker>
<recipeUsers Inherit="False"/>
<researchPrerequisite Inherit="False" />
</recipeMaker>
<verbs>
<li>
<verbClass>Verb_ArcSprayIncinerator</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<warmupTime>0.5</warmupTime>
<range>22.9</range>
<minRange>5.9</minRange>
<beamFullWidthRange>11</beamFullWidthRange>
<burstShotCount>20</burstShotCount>
<showBurstShotStats>false</showBurstShotStats>
<requireLineOfSight>true</requireLineOfSight>
<beamWidth>6</beamWidth>
<ticksBetweenBurstShots>2</ticksBetweenBurstShots>
<beamDamageDef>Wula_Psi_Damage</beamDamageDef>
<soundCastTail>GunTail_Medium</soundCastTail>
<muzzleFlashScale>9</muzzleFlashScale>
<soundCastBeam>Flamethrower_Firing</soundCastBeam>
<beamGroundFleckDef>Fleck_IncineratorBeamBurn</beamGroundFleckDef>
<beamFleckChancePerTick>0.32</beamFleckChancePerTick>
<beamMaxDeviation>0.5</beamMaxDeviation>
<beamCurvature>0</beamCurvature>
<beamEndEffecterDef>IncineratorBeam_End</beamEndEffecterDef>
<beamChanceToStartFire>0.85</beamChanceToStartFire>
<beamFireSizeRange>0.55~0.85</beamFireSizeRange>
<beamStartOffset>.5</beamStartOffset>
<beamHitsNeighborCells>true</beamHitsNeighborCells>
<beamCantHitWithinMinRange>true</beamCantHitWithinMinRange>
<beamHitsNeighborCellsRequiresLOS>true</beamHitsNeighborCellsRequiresLOS>
<beamSetsGroundOnFire>true</beamSetsGroundOnFire>
<ai_BeamIsIncendiary>true</ai_BeamIsIncendiary>
<beamLineFleckDef>Fleck_IncineratorBeamSmoke</beamLineFleckDef>
<highlightColor>(58, 225, 225)</highlightColor>
<secondaryHighlightColor>(102, 200, 200)</secondaryHighlightColor>
<beamLineFleckChanceCurve>
<points>
<li>(0, 0)</li>
<li>(0.65, 0.02)</li>
<li>(1, .5)</li>
</points>
</beamLineFleckChanceCurve>
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
<flammabilityAttachFireChanceCurve>
<points>
<li>(0.6, 0)</li>
<li>(0.7, 0.2)</li>
<li>(1.2, 0.8)</li>
</points>
</flammabilityAttachFireChanceCurve>
<rangedFireRulepack>Combat_RangedFlamethrower</rangedFireRulepack>
</li>
</verbs>
<comps>
<li Class="CompProperties_EquippableAbilityReloadable">
<abilityDef>WULA_MW_Scepter_Of_Lost_Ability</abilityDef>
<maxCharges>1</maxCharges>
<soundReload>AnomalyAbilityWarmup</soundReload>
<chargeNoun>魂锲</chargeNoun>
<ammoDef>WULA_Soul_Wedge</ammoDef>
<ammoCountPerCharge>10</ammoCountPerCharge>
<baseReloadTicks>60</baseReloadTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_CustomUniqueWeapon" MayRequire="Ludeon.RimWorld.Odyssey">
<forcedTraits>
<li>WULA_DamagePsychicScaling</li>
<li>WULA_ExtraPsychicSkill</li>
</forcedTraits>
<numTraitsRange>
<min>2</min>
<max>2</max>
</numTraitsRange>
</li>
</comps>
<thingSetMakerTags>
<li>RewardStandardQualitySuper</li>
</thingSetMakerTags>
</ThingDef>
<AbilityDef ParentName="PsycastBase">
<defName>WULA_MW_Scepter_Of_Lost_Ability</defName>
<label>乌拉帝国法术:失能</label>
<description>使一小片范围内的生物直接陷入心灵冲击状态,从而失去战斗力。</description>
<iconPath>Wula/UI/Abilities/WULA_MW_Scepter_Of_Lost_Ability</iconPath>
<writeCombatLog>True</writeCombatLog>
<level>-1</level>
<statBases>
<Ability_EntropyGain>0</Ability_EntropyGain>
<Ability_PsyfocusCost>-1</Ability_PsyfocusCost>
<Ability_Duration>1500</Ability_Duration>
<Ability_EffectRadius>1.1</Ability_EffectRadius>
</statBases>
<verbProperties>
<warmupTime>5</warmupTime>
<range>14</range>
<targetParams>
<canTargetLocations>true</canTargetLocations>
<canTargetSelf>false</canTargetSelf>
<canTargetPawns>true</canTargetPawns>
</targetParams>
</verbProperties>
<comps>
<li Class = "CompProperties_AbilityGiveHediff">
<compClass>CompAbilityEffect_GiveHediff</compClass>
<hediffDef>PsychicShock</hediffDef>
<durationMultiplier>PsychicSensitivity</durationMultiplier>
<psychic>True</psychic>
<goodwillImpact>-15</goodwillImpact>
<applyGoodwillImpactToLodgers>False</applyGoodwillImpactToLodgers>
</li>
<li Class="CompProperties_AbilityFleckOnTarget">
<fleckDef>PsycastPsychicEffect</fleckDef>
</li>
</comps>
</AbilityDef>
<ThingDef ParentName="BaseHumanMakeableGun">
<defName>WULA_RW_Photon_Missile</defName>
<label>星光追猎术式</label>
<description>乌拉星人在舰船上用于代替导弹的一种特殊术式,现在则被镌刻在灵能泰坦上。当其被吟唱时,大量的灵能星光将倾巢而出追击轰炸敌军。\n\n当攻击某个单体的时候灵能星光将会追踪敌军并准确击中目标当攻击地面时灵能星光会分散以形成一片轰炸区。依托于纯净灵能能能量灵能星光可以穿越任何地形阻碍和护盾进行轰炸。</description>
<techLevel>Archotech</techLevel>
<tradeability>None</tradeability>
<!-- <techLevel>Spacer</techLevel> -->
<uiIconPath>Wula/Weapon/WULA_RW_Photon_Missile</uiIconPath>
<relicChance>0</relicChance>
<graphicData>
<texPath>Wula/Weapon/WULA_Weapon_Empty</texPath>
<graphicClass>Graphic_Single</graphicClass>
</graphicData>
<weaponTags>
<li>WULA_RW_Photon_Missile_Weapon</li>
</weaponTags>
<recipeMaker>
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
</recipeMaker>
<costList Inherit="False">
<Steel>380</Steel>
<Plasteel>60</Plasteel>
<ComponentSpacer>8</ComponentSpacer>
</costList>
<statBases>
<DeteriorationRate>0</DeteriorationRate>
<Flammability>0</Flammability>
<WorkToMake>40000</WorkToMake>
<Mass>0</Mass>
<AccuracyTouch>0.5</AccuracyTouch>
<AccuracyShort>0.5</AccuracyShort>
<AccuracyMedium>0.4</AccuracyMedium>
<AccuracyLong>0.3</AccuracyLong>
<RangedWeapon_Cooldown>0</RangedWeapon_Cooldown>
</statBases>
<recipeMaker>
<recipeUsers Inherit="False"/>
<researchPrerequisite Inherit="False" />
</recipeMaker>
<verbs>
<li>
<verbClass>Verb_Shoot</verbClass>
<hasStandardCommand>true</hasStandardCommand>
<defaultProjectile>Bullet_WULA_RW_Photon_Missile</defaultProjectile>
<forcedMissRadius>0.1</forcedMissRadius>
<warmupTime>4.5</warmupTime>
<burstShotCount>48</burstShotCount>
<ticksBetweenBurstShots>1</ticksBetweenBurstShots>
<isMortar>true</isMortar>
<requireLineOfSight>false</requireLineOfSight>
<minRange>4</minRange>
<range>48</range>
<soundCast>AgonyPulse_Cast</soundCast>
<muzzleFlashScale>12</muzzleFlashScale>
<aimingLineMote>Mote_FleshmelterBolt_Aim</aimingLineMote>
<aimingChargeMote>Mote_FleshmelterBolt_Charge</aimingChargeMote>
<aimingChargeMoteOffset>1.07</aimingChargeMoteOffset>
<aimingLineMoteFixedLength>15.9</aimingLineMoteFixedLength>
<aimingTargetMote>Mote_FleshmelterBolt_Target</aimingTargetMote>
<!-- <soundAiming>FleshmelterBolt_Charging</soundAiming> -->
<targetParams>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</li>
</verbs>
<comps>
<li Class="WulaFallenEmpire.CompProperties_CustomUniqueWeapon" MayRequire="Ludeon.RimWorld.Odyssey">
<forcedTraits>
<li>WULA_DamagePsychicScaling</li>
<li>WULA_PsychicIgnoreBlock</li>
<li>WULA_MissileLauncher</li>
</forcedTraits>
<numTraitsRange>
<min>3</min>
<max>3</max>
</numTraitsRange>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="BaseBullet">
<defName>Bullet_WULA_RW_Photon_Missile</defName>
<label>灵能星光</label>
<graphicData>
<texPath>Wula/Building/WULA_Charging_Station_Synth</texPath>
<!-- <texPath>Wula/Projectile/WULA_Photon_Missile</texPath> -->
<graphicClass>Graphic_Multi</graphicClass>
<shaderType>TransparentPostLight</shaderType>
</graphicData>
<thingClass>WulaFallenEmpire.Projectile_CruiseMissile</thingClass>
<modExtensions>
<li Class="WulaFallenEmpire.CruiseMissileProperties">
<customDamageDef>Bomb</customDamageDef>
<customDamageAmount>8</customDamageAmount>
<customExplosionRadius>1</customExplosionRadius>
<customSoundExplode>Pawn_Revenant_StartledScream</customSoundExplode>
<useSubExplosions>true</useSubExplosions>
<subExplosionCount>0</subExplosionCount>
<subExplosionRadius>1</subExplosionRadius>
<subExplosionDamage>5</subExplosionDamage>
<subExplosionSpread>6</subExplosionSpread>
<subDamageDef>Wula_Psi_Bomb</subDamageDef>
<subSoundExplode>MortarBomb_Explode</subSoundExplode>
</li>
</modExtensions>
<projectile>
<damageDef>Wula_Psi_Bomb</damageDef>
<damageAmountBase>1</damageAmountBase>
<speed>22</speed>
<explosionRadius>1.25</explosionRadius>
<armorPenetrationBase>1.5</armorPenetrationBase>
<flyOverhead>true</flyOverhead>
<soundHitThickRoof>Artillery_HitThickRoof</soundHitThickRoof>
<soundExplode>Pawn_Revenant_StartledScream</soundExplode>
<soundImpactAnticipate>MortarRound_PreImpact</soundImpactAnticipate>
<soundAmbient>MortarRound_Ambient</soundAmbient>
</projectile>
</ThingDef>
</Defs>

View File

@@ -0,0 +1,243 @@
using RimWorld;
using Verse;
using System.Collections.Generic;
namespace WulaFallenEmpire
{
public class CompProperties_AutoLaunchHangar : CompProperties
{
public ThingDef aircraftDef; // 对应的战机定义
public int aircraftCount = 1; // 起飞后提供的战机数量
public ThingDef skyfallerLeaving; // 起飞时的天空坠落者效果
public int launchDelayTicks = 60; // 延迟启动的ticks默认1秒
public bool requirePower = true; // 是否需要电力才能启动
public CompProperties_AutoLaunchHangar()
{
compClass = typeof(CompAutoLaunchHangar);
}
}
public class CompAutoLaunchHangar : ThingComp
{
public CompProperties_AutoLaunchHangar Props => (CompProperties_AutoLaunchHangar)props;
private bool hasLaunched = false;
private int spawnTick = -1;
private CompPowerTrader powerComp;
private CompRefuelable refuelableComp;
public override void PostSpawnSetup(bool respawningAfterLoad)
{
base.PostSpawnSetup(respawningAfterLoad);
if (!respawningAfterLoad)
{
// 记录生成时间
spawnTick = Find.TickManager.TicksAbs;
hasLaunched = false;
// 缓存其他组件
powerComp = parent.GetComp<CompPowerTrader>();
refuelableComp = parent.GetComp<CompRefuelable>();
Log.Message($"AutoLaunchHangar spawned at tick {spawnTick}, will launch in {Props.launchDelayTicks} ticks");
}
}
public override void PostExposeData()
{
base.PostExposeData();
Scribe_Values.Look(ref hasLaunched, "hasLaunched", false);
Scribe_Values.Look(ref spawnTick, "spawnTick", -1);
}
public override void CompTick()
{
base.CompTick();
if (hasLaunched || spawnTick == -1)
return;
int currentTick = Find.TickManager.TicksAbs;
if (currentTick - spawnTick >= Props.launchDelayTicks)
{
if (CanAutoLaunch())
{
AutoLaunchAircraft();
}
}
}
private bool CanAutoLaunch()
{
// 检查建筑是否完好
if (parent.HitPoints <= 0)
{
Log.Message("AutoLaunch: Hangar is damaged, cannot launch");
return false;
}
// 检查电力需求
if (Props.requirePower && powerComp != null && !powerComp.PowerOn)
{
Log.Message("AutoLaunch: No power, cannot launch");
return false;
}
// 检查燃料需求
if (refuelableComp != null && !refuelableComp.HasFuel)
{
Log.Message("AutoLaunch: No fuel, cannot launch");
return false;
}
// 检查地图是否有效
if (parent.Map == null)
{
Log.Message("AutoLaunch: Map is null, cannot launch");
return false;
}
return true;
}
private void AutoLaunchAircraft()
{
Log.Message($"AutoLaunch: Starting aircraft launch sequence for {parent.Label}");
// 获取全局战机管理器
WorldComponent_AircraftManager aircraftManager = Find.World.GetComponent<WorldComponent_AircraftManager>();
if (aircraftManager == null)
{
Log.Error("AutoLaunch: AircraftManager not found");
hasLaunched = true;
return;
}
try
{
// 立即向全局管理器注册战机
aircraftManager.AddAircraft(Props.aircraftDef, Props.aircraftCount, parent.Faction);
// 显示消息
Messages.Message("AircraftAutoLaunched".Translate(Props.aircraftCount, Props.aircraftDef.LabelCap),
parent, MessageTypeDefOf.PositiveEvent);
Log.Message($"AutoLaunch: Successfully added {Props.aircraftCount} {Props.aircraftDef.LabelCap} to global manager");
// 创建起飞效果
if (Props.skyfallerLeaving != null)
{
CreateAutoTakeoffEffect();
}
else
{
// 如果没有定义 Skyfaller直接销毁建筑
parent.Destroy();
}
hasLaunched = true;
}
catch (System.Exception ex)
{
Log.Error($"AutoLaunch error: {ex}");
hasLaunched = true; // 标记为已启动,避免重复尝试
}
}
private void CreateAutoTakeoffEffect()
{
try
{
// 创建起飞效果
Thing chemfuel = ThingMaker.MakeThing(ThingDefOf.Chemfuel);
chemfuel.stackCount = 1;
Skyfaller skyfaller = SkyfallerMaker.MakeSkyfaller(Props.skyfallerLeaving, chemfuel);
IntVec3 takeoffPos = parent.Position;
if (parent.Map == null)
{
Log.Error("AutoLaunch: Map is null during takeoff effect creation");
parent.Destroy();
return;
}
// 生成 Skyfaller
GenSpawn.Spawn(skyfaller, takeoffPos, parent.Map);
Log.Message($"AutoLaunch: Takeoff effect created at {takeoffPos}");
// 销毁原建筑
parent.Destroy(DestroyMode.Vanish);
}
catch (System.Exception ex)
{
Log.Error($"AutoLaunch takeoff effect error: {ex}");
// 如果Skyfaller创建失败直接销毁建筑
parent.Destroy(DestroyMode.Vanish);
}
}
// 可选提供手动触发的Gizmo如果自动触发失败
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
if (!hasLaunched)
{
Command_Action manualLaunch = new Command_Action
{
defaultLabel = "ManualLaunchAircraft".Translate(),
defaultDesc = "ManualLaunchAircraftDesc".Translate(),
icon = TexCommand.Attack,
action = () =>
{
if (CanAutoLaunch())
{
AutoLaunchAircraft();
}
else
{
Messages.Message("CannotManualLaunch".Translate(), MessageTypeDefOf.RejectInput);
}
}
};
// 禁用条件检查
if (parent.HitPoints <= 0)
{
manualLaunch.Disable("HangarDamaged".Translate());
}
else if (Props.requirePower && powerComp != null && !powerComp.PowerOn)
{
manualLaunch.Disable("NoPower".Translate());
}
else if (refuelableComp != null && !refuelableComp.HasFuel)
{
manualLaunch.Disable("NoFuel".Translate());
}
yield return manualLaunch;
}
}
public override string CompInspectStringExtra()
{
if (!hasLaunched)
{
int remainingTicks = Props.launchDelayTicks - (Find.TickManager.TicksAbs - spawnTick);
if (remainingTicks > 0)
{
return "AutoLaunchIn".Translate(remainingTicks.ToStringTicksToPeriod());
}
else
{
return "AutoLaunchReady".Translate();
}
}
return null;
}
}
}

View File

@@ -95,6 +95,7 @@
<Compile Include="Flyover\WULA_AircraftHangar\CompAbilityEffect_AircraftStrike.cs" />
<Compile Include="Flyover\WULA_AircraftHangar\CompAircraftHangar.cs" />
<Compile Include="Flyover\WULA_AircraftHangar\WorldComponent_AircraftManager.cs" />
<Compile Include="Flyover\WULA_AutoLaunchHangar\CompProperties_AutoLaunchHangar.cs" />
<Compile Include="Flyover\WULA_FlyOverDropPod\CompProperties_FlyOverDropPod.cs" />
<Compile Include="Flyover\WULA_FlyOverEscort\CompFlyOverEscort.cs" />
<Compile Include="Flyover\WULA_FlyOverEscort\CompProperties_FlyOverEscort.cs" />

View File

@@ -1,12 +0,0 @@
{
"TextureModID": "tourswen.wulafallenempiretest",
"ItemDefName": "WULA_MW_Mace",
"ItemType": "ThingDef",
"ItemTypeNamespace": "Verse",
"ScaleX": 0.8,
"ScaleY": 0.8,
"HandsMode": 1,
"BladeStart": 0.31609267,
"BladeEnd": -0.318965524,
"MeleeWeaponType": 8
}