This commit is contained in:
2025-11-18 17:30:12 +08:00
parent 1934f02ca8
commit 6b94929803
11 changed files with 771 additions and 249 deletions

View File

@@ -220,7 +220,7 @@
<AbilityDef>
<defName>WULA_Spawn_BattleShip_Artillery</defName>
<label>呼叫全域封锁舰队</label>
<description>申请沿指定航道发起全域封锁,一整只乌拉帝国舰队将在大量战机编队的掩护下沿着航道行进,并使用所有的可用武器进行轰炸,以彻底粉碎一切抵抗。</description>
<description>申请沿指定航道发起全域封锁,一整只乌拉帝国舰队将在大量战机编队的掩护下沿着航道行进,并使用舰炮进行轰炸,以彻底粉碎一切抵抗。\n\n轰炸的范围几乎覆盖整张地图炮击会尽可能避免击中殖民地的人员和资产但是巨大的轰炸范围使得底下的一切都难逃厄运——尽可能不要在自己的殖民地上空呼叫。</description>
<iconPath>Wula/UI/Abilities/WULA_Spawn_Fighter_Drone_Laser</iconPath>
<cooldownTicksRange>1</cooldownTicksRange>
<hotKey>Misc12</hotKey>
@@ -238,18 +238,18 @@
</targetParams>
</verbProperties>
<comps>
<!-- <li Class="WulaFallenEmpire.CompProperties_AbilityResearchPrereq">
<li Class="WulaFallenEmpire.CompProperties_AbilityResearchPrereq">
<requiredResearch>WULA_Light_Fighter_Drone_Technology</requiredResearch>
</li> -->
<!-- <li Class="WulaFallenEmpire.CompProperties_AircraftStrike">
<requiredAircraftType>WULA_Fighter_Drone_Entity</requiredAircraftType>
<aircraftCooldownTicks>5000</aircraftCooldownTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_AircraftStrike">
<requiredAircraftType>WULA_MotherShip_Entity</requiredAircraftType>
<aircraftCooldownTicks>15000</aircraftCooldownTicks>
<aircraftsPerUse>1</aircraftsPerUse>
</li> -->
</li>
<li Class="WulaFallenEmpire.CompProperties_AbilitySpawnFlyOver">
<flyOverDef>WULA_MotherShip_Planet_Interdiction</flyOverDef>
<flyOverType>GroundStrafing</flyOverType>
<flightSpeed>0.005</flightSpeed>
<flightSpeed>0.02</flightSpeed>
<altitude>20</altitude>
<playFlyOverSound>true</playFlyOverSound>
<approachType>Perpendicular</approachType>

View File

@@ -45,6 +45,24 @@
</li>
</optionEffects>
</li>
<li>
<label>我们要申请支援!</label>
<useCustomColors>true</useCustomColors>
<normalColor>(255,255,255,255)</normalColor>
<hoverColor>(157,201,185,195)</hoverColor>
<textColor>(255,255,255,255)</textColor>
<textHoverColor>(255,255,255,255)</textHoverColor>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_30</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>再见</label>
<useCustomColors>true</useCustomColors>
@@ -62,6 +80,344 @@
</li>
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Legion_30</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_5</portraitPath>
<characterName>「军团」,P.I.A</characterName>
<descriptions>
<li>好的好的,那么,你们需要什么?</li>
<li>嗯嗯,你们遇到什么麻烦了?</li>
<li>希望你们没给我捅什么大篓子。</li>
</descriptions>
<immediateEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_SetVariable">
<name>Wula_Has_Receive_Silver_From_PIA</name>
<value>0</value>
<type>Int</type>
</li>
<li Class="WulaFallenEmpire.Effect_SetVariable">
<name>Wula_Has_Receive_MechWula_From_PIA</name>
<value>0</value>
<type>Int</type>
</li>
<li Class="WulaFallenEmpire.Effect_SetVariable">
<name>Wula_Has_Receive_Reinforcement_From_PIA</name>
<value>0</value>
<type>Int</type>
</li>
<!-- 获取好感 -->
<li Class="WulaFallenEmpire.Effect_ClearVariable">
<name>Wula_Goodwill_To_PIA</name>
</li>
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Wula_PIA_Legion_Faction</factionDef>
<variableName>Wula_Goodwill_To_PIA</variableName>
</li>
</effects>
</li>
</immediateEffects>
<options>
<li>
<label>我们需要资金支持</label>
<disabledReason>应急资金,我好像已经发给你们了?</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>Wula_Has_Receive_Silver_From_PIA</name>
<value>0</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_31</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>我们需要一只新的机械乌拉</label>
<disabledReason>你们不会自己去造吗?</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>Wula_Has_Receive_MechWula_From_PIA</name>
<value>0</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_32</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>我们需要直接的武力支援</label>
<disabledReason>我们的特遣队都在忙,请稍后再试——好吧我骗你们的,你们就不能自己搞两杆枪吗?</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableEquals">
<name>Wula_Has_Receive_Reinforcement_From_PIA</name>
<value>0</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Anisia_33</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>还有其他事情···</label>
<useCustomColors>true</useCustomColors>
<normalColor>(255,255,255,255)</normalColor>
<hoverColor>(157,201,185,195)</hoverColor>
<textColor>(255,255,255,255)</textColor>
<textHoverColor>(255,255,255,255)</textHoverColor>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Legion_31</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_5</portraitPath>
<characterName>「军团」,P.I.A</characterName>
<descriptions>
<li>原来是来要钱的嘛···我可以给你们调拨一轮紧急资金,但是这是有限的,并且仅能作殖民地发展之用。\n\n话说回来你们真的缺钱吗我怎么有点不信</li>
</descriptions>
<immediateEffects>
<li>
<effects>
<!-- 获取好感 -->
<li Class="WulaFallenEmpire.Effect_ClearVariable">
<name>Wula_Goodwill_To_PIA</name>
</li>
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Wula_PIA_Legion_Faction</factionDef>
<variableName>Wula_Goodwill_To_PIA</variableName>
</li>
</effects>
</li>
</immediateEffects>
<options>
<li>
<label>对的对的,我们是真穷!</label>
<disabledReason>殖民地的表现让P.I.A相当不满意不会为殖民地派出任何额外增援</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableGreaterThan">
<name>Wula_Goodwill_To_PIA</name>
<value>-75</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_GiveThing">
<thingDef>Silver</thingDef>
<count>3000</count>
</li>
<li Class="WulaFallenEmpire.Effect_ModifyVariable">
<name>Wula_Has_Receive_Silver_From_PIA</name>
<value>1</value>
<operation>Add</operation>
</li>
<li Class="WulaFallenEmpire.Effect_ShowMessage">
<message>P.I.A的紧急资金已经空投3000银</message>
<messageTypeDef>PositiveEvent</messageTypeDef>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>还是算了</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Anisia_32</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_2</portraitPath>
<characterName>「军团」,P.I.A</characterName>
<descriptions>
<li>唔,现在我手上确实有一台乌拉帝国合成人还没有分配殖民地,你们需要的话可以划拨给你们。但是下次你们得记得自己造——造合成人的材料是要花项目资金的。</li>
</descriptions>
<immediateEffects>
<li>
<effects>
<!-- 获取好感 -->
<li Class="WulaFallenEmpire.Effect_ClearVariable">
<name>Wula_Goodwill_To_PIA</name>
</li>
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Wula_PIA_Legion_Faction</factionDef>
<variableName>Wula_Goodwill_To_PIA</variableName>
</li>
</effects>
</li>
</immediateEffects>
<options>
<li>
<label>我们欣然接受</label>
<disabledReason>殖民地的表现让P.I.A相当不满意不会为殖民地派出任何额外增援</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableGreaterThan">
<name>Wula_Goodwill_To_PIA</name>
<value>-75</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_SpawnPawn">
<kindDef>Wula_PawnKind</kindDef>
<count>1</count>
<joinPlayerFaction>true</joinPlayerFaction>
<letterLabel>机械乌拉加入殖民地</letterLabel>
<letterText>一台乌拉帝国合成人受命加入了殖民地。</letterText>
</li>
<li Class="WulaFallenEmpire.Effect_ModifyVariable">
<name>Wula_Has_Receive_MechWula_From_PIA</name>
<value>1</value>
<operation>Add</operation>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>还是算了</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
<WulaFallenEmpire.EventDef>
<defName>Wula_UI_Anisia_33</defName>
<label>和P.I.A的通讯</label>
<portraitPath>Wula/Events/Portraits/WULA_Legion_1</portraitPath>
<characterName>「军团」,P.I.A</characterName>
<descriptions>
<li>遇到麻烦了?我可以把手上的特遣队丢下去,你们记得找好掩体。</li>
</descriptions>
<immediateEffects>
<li>
<effects>
<!-- 获取好感 -->
<li Class="WulaFallenEmpire.Effect_ClearVariable">
<name>Wula_Goodwill_To_PIA</name>
</li>
<li Class="WulaFallenEmpire.Effect_CheckFactionGoodwill">
<factionDef>Wula_PIA_Legion_Faction</factionDef>
<variableName>Wula_Goodwill_To_PIA</variableName>
</li>
</effects>
</li>
</immediateEffects>
<options>
<li>
<label>再不来我们要死完啦</label>
<disabledReason>殖民地的表现让P.I.A相当不满意不会为殖民地派出任何额外增援</disabledReason>
<hideWhenDisabled>false</hideWhenDisabled>
<conditions>
<li Class="WulaFallenEmpire.Condition_VariableGreaterThan">
<name>Wula_Goodwill_To_PIA</name>
<value>-75</value>
</li>
</conditions>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_ModifyVariable">
<name>Wula_Has_Receive_Reinforcement_From_PIA</name>
<value>1</value>
<operation>Add</operation>
</li>
<li Class="WulaFallenEmpire.Effect_TriggerRaid">
<points>6000</points>
<faction>Wula_PIA_Legion_Faction</faction>
<raidStrategy>ImmediateAttackFriendly</raidStrategy>
<raidArrivalMode>EdgeDropGroups</raidArrivalMode>
<groupKind>Combat</groupKind>
<pawnGroupMakers>
<li>
<kindDef>Combat</kindDef>
<commonality>100</commonality>
<options>
<Wula_PIA_Heavy_Unit>1</Wula_PIA_Heavy_Unit>
</options>
</li>
</pawnGroupMakers>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
<li>
<label>还是算了</label>
<optionEffects>
<li>
<effects>
<li Class="WulaFallenEmpire.Effect_OpenCustomUI">
<defName>Wula_UI_Legion_1</defName>
</li>
<li Class="WulaFallenEmpire.Effect_CloseDialog" />
</effects>
</li>
</optionEffects>
</li>
</options>
</WulaFallenEmpire.EventDef>
<!-- 乱丢垃圾 -->
<WulaFallenEmpire.EventDef>

View File

@@ -78,7 +78,7 @@
<canUseAvoidGrid>false</canUseAvoidGrid>
<techLevel>Ultra</techLevel>
<earliestRaidDays>999999</earliestRaidDays> <!-- 通过事件发动袭击,不走常规袭击 -->
<permanentEnemy>true</permanentEnemy>
<permanentEnemy>false</permanentEnemy>
<hostileToFactionlessHumanlikes>true</hostileToFactionlessHumanlikes>
<maxPawnCostPerTotalPointsCurve>
<points>
@@ -94,7 +94,7 @@
<kindDef>Combat</kindDef>
<commonality>30</commonality>
<options>
<Wula_PawnKind>10</Wula_PawnKind>
<Mech_WULA_Cat_Assault>10</Mech_WULA_Cat_Assault>
</options>
</li>
</pawnGroupMakers>

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<!--
这是作为炮塔的武器定义 (ThingDef)
它本身是一个不可装备、不可见的物品,仅作为 HediffComp 的数据源。
HediffComp_TopTurret 会从这里读取武器的属性 (verb)、射程、冷却时间等,
以及炮塔的图形 (graphicData)。
-->
</Defs>

View File

@@ -1318,66 +1318,6 @@
</recipeUsers>
</RecipeDef>
<!-- 抽魂 -->
<HediffDef ParentName="ImplantHediffBase">
<defName>WULA_Extract_Soul_Wedge_Hediff</defName>
<hediffClass>HediffWithComps</hediffClass>
<label>灵魂抽离</label>
<description>该生物的灵魂被人为的分离了。</description>
<descriptionShort>该生物的灵魂被人为的分离了,在这种状态下,目标不稳定的灵魂每过一段时间都可能导致目标无法行动、陷入昏迷甚至是直接死亡——这种症状没有固定的治愈时间,但是每天都将有一定几率自动消失,届时可再次开展提取手术。</descriptionShort>
<!-- <initialSeverity>0.5</initialSeverity> -->
<minSeverity>0.01</minSeverity>
<maxSeverity>1</maxSeverity>
<alwaysShowSeverity>true</alwaysShowSeverity>
<isBad>true</isBad>
<duplicationAllowed>true</duplicationAllowed>
<keepOnBodyPartRestoration>true</keepOnBodyPartRestoration> <!-- true -->
<defaultInstallPart>Brain</defaultInstallPart>
<comps>
<li Class="HediffCompProperties_ChanceToRemove">
<intervalTicks>60000</intervalTicks>
<chance>0.5</chance>
</li>
<li Class="HediffCompProperties_RandomizeStageWithInterval">
<ticksToRandomize>60000</ticksToRandomize>
<notifyMessage>{PAWN_labelShort} 的灵魂状态从 {1} 转变为 {2}.</notifyMessage>
</li>
<li Class="HediffCompProperties_DisappearsOnDeath"/>
</comps>
<stages>
<li>
<label>残缺</label>
<minSeverity>0.01</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0.5</setMax>
</li>
</capMods>
</li>
<li>
<label>破碎</label>
<minSeverity>0.3</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0.1</setMax>
</li>
</capMods>
</li>
<li>
<label>弥散</label>
<minSeverity>0.9</minSeverity>
<capMods>
<li>
<capacity>Consciousness</capacity>
<setMax>0</setMax>
</li>
</capMods>
</li>
</stages>
</HediffDef>
<!-- 关机 -->
<RecipeDef ParentName="SurgeryInstallBodyPartArtificialBase">
<defName>WULA_Shutdown_Synth</defName>
@@ -1466,4 +1406,66 @@
</li>
</stages>
</HediffDef>
<!-- 特殊-传送器 -->
<HediffDef>
<defName>WULA_AutoJumpdrive_Hediff</defName>
<label>微型传送装置</label>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间或死亡时将其回收</description>
<hediffClass>HediffWithComps</hediffClass>
<defaultLabelColor>(1,0,0.5)</defaultLabelColor>
<maxSeverity>1.0</maxSeverity>
<initialSeverity>0.0</initialSeverity>
<isBad>true</isBad>
<spawnThingOnRemoved>WULA_AutoJumpdrive</spawnThingOnRemoved>
<comps>
<li Class="HediffCompProperties_DissolveGearOnDeath">
<fleck>AcidCloud</fleck>
<moteCount>6</moteCount>
<moteOffsetRange>0.25~0.75</moteOffsetRange>
<filth>Filth_Slime</filth>
<sound>DeathAcidifier</sound>
<injuryCreatedOnDeath>ChemicalBurn</injuryCreatedOnDeath>
<injuryCount>3~6</injuryCount>
</li>
<li Class="HediffCompProperties_Disappears">
<disappearsAfterTicks>10000</disappearsAfterTicks> <!-- 2/3 RimWorld days -->
</li>
<li Class="WulaFallenEmpire.HediffCompProperties_DisappearWithEffect">
<disappearsAfterTicks>15000</disappearsAfterTicks>
<showRemainingTime>true</showRemainingTime>
<fleckDef>PsycastAreaEffect</fleckDef>
<fleckScale>2.5</fleckScale>
<dropEquipment>false</dropEquipment>
<destroyCorpse>true</destroyCorpse>
<playSound>true</playSound>
<messageOnDisappear>{0} 通过传送离开了殖民地</messageOnDisappear>
</li>
</comps>
<stages>
<li>
<label>微弱</label>
<minSeverity>0</minSeverity>
</li>
</stages>
</HediffDef>
<ThingDef ParentName="BodyPartBase">
<defName>WULA_AutoJumpdrive</defName>
<label>微型传送装置</label>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间或死亡时将其回收。</description>
<statBases>
<Mass>0.3</Mass>
<WorkToMake>1</WorkToMake>
</statBases>
<techHediffsTags>
<li>WULA_AutoJumpdrive</li>
</techHediffsTags>
<costList>
<ComponentIndustrial>1</ComponentIndustrial>
</costList>
<recipeMaker>
<soundWorking>Recipe_Smith</soundWorking>
<recipeUsers Inherit="False" IsNull="True"/>
</recipeMaker>
</ThingDef>
</Defs>

View File

@@ -277,4 +277,57 @@
<damageAmountBase>1</damageAmountBase>
</projectile>
</ThingDef>
<!-- 战斗类乌拉 -->
<PawnKindDef>
<defName>Wula_PIA_Heavy_Unit</defName>
<label>军团重装步兵</label>
<race>WulaSpecies</race>
<lifeStages>
<li>
<bodyGraphicData>
<texPath>Wula/Item/WULA_Species_Icon</texPath>
<maskPath>SRA/Pawn/Mechanoid/AllegianceOverlays/None</maskPath>
<shaderType>CutoutWithOverlay</shaderType>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>1.1</drawSize>
<shadowData>
<volume>(0.2, 0.3, 0.2)</volume>
</shadowData>
</bodyGraphicData>
</li>
</lifeStages>
<minGenerationAge>18</minGenerationAge>
<maxGenerationAge>20</maxGenerationAge>
<combatPower>500</combatPower>
<initialWillRange>10~20</initialWillRange>
<initialResistanceRange>10~20</initialResistanceRange>
<itemQuality>Poor</itemQuality>
<isFighter>true</isFighter>
<apparelTags>
<li>Wula_Armor_Super_Heavy</li>
</apparelTags>
<weaponTags>
<li>Wula_Melee_Weapon_T1</li>
<li>Wula_Melee_Weapon_T3</li>
<li>Wula_Ranged_Weapon_T2</li>
</weaponTags>
<abilities>
</abilities>
<weaponMoney>3000~8000</weaponMoney>
<apparelAllowHeadgearChance>1</apparelAllowHeadgearChance>
<apparelMoney>999999~999999</apparelMoney>
<techHediffsMoney>1000~2000</techHediffsMoney>
<techHediffsTags>
<li>WULA_AutoJumpdrive</li>
</techHediffsTags>
<backstoryFiltersOverride>
<li>
<categories>
<li>Wula_Backstory_Categories</li>
</categories>
</li>
</backstoryFiltersOverride>
</PawnKindDef>
</Defs>

View File

@@ -719,17 +719,6 @@
<alwaysHaulable>false</alwaysHaulable>
<altitudeLayer>MetaOverlays</altitudeLayer>
<comps>
<li Class="WulaFallenEmpire.CompProperties_ShipArtillery">
<ticksBetweenAttacks>300</ticksBetweenAttacks>
<attackDurationTicks>30</attackDurationTicks>
<attackRadius>65</attackRadius>
<skyfallerDef>WULA_Firepower_Primary_Cannon_Strafe_Skyfaller</skyfallerDef>
<shellsPerVolley>3</shellsPerVolley>
<!-- 新增派系甄别配置 -->
<useFactionDiscrimination>true</useFactionDiscrimination>
<useMicroTracking>true</useMicroTracking>
</li>
<!-- 入场信封信息 -->
<li Class="WulaFallenEmpire.CompProperties_SendLetterAfterTicks">
<ticksDelay>60</ticksDelay> <!-- 2秒后发送 -->
@@ -740,58 +729,13 @@
<requireOnMap>true</requireOnMap>
<destroyAfterSending>false</destroyAfterSending> <!-- 发送后销毁flyover -->
</li>
<!-- 伴飞 -->
<li Class="WulaFallenEmpire.CompProperties_FlyOverEscort">
<escortFlyOverDef>WULA_BattleShip_Planet_Interdiction</escortFlyOverDef>
<!-- 生成配置 -->
<spawnIntervalTicks>0</spawnIntervalTicks> <!-- 5秒 -->
<maxEscorts>5</maxEscorts>
<spawnCount>1</spawnCount>
<!-- 位置配置 -->
<spawnDistance>0</spawnDistance>
<lateralOffset>40</lateralOffset>
<verticalOffset>5</verticalOffset>
<useRandomOffset>true</useRandomOffset>
<minSafeDistanceBetweenEscorts>10</minSafeDistanceBetweenEscorts> <!-- 伴飞物之间的距离 -->
<minSafeDistanceFromMain>70</minSafeDistanceFromMain> <!-- 与主飞行物的距离检查 -->
<!-- 飞行配置 -->
<escortSpeedMultiplier>1</escortSpeedMultiplier> <!-- 比主舰稍快 -->
<escortAltitudeOffset>10</escortAltitudeOffset> <!-- 比主舰稍高 -->
<mirrorMovement>false</mirrorMovement>
<!-- 行为配置 -->
<spawnOnStart>true</spawnOnStart>
<destroyWithParent>false</destroyWithParent>
<continuousSpawning>true</continuousSpawning>
<!-- 外观配置 -->
<useParentRotation>true</useParentRotation>
<!-- 缩放区间配置 -->
<escortScaleRange>
<min>0.4</min>
<max>0.6</max>
</escortScaleRange>
<!-- 高度遮罩配置 -->
<useHeightMask>true</useHeightMask>
<heightMaskAlphaRange>
<min>0.6</min>
<max>0.8</max>
</heightMaskAlphaRange>
<heightMaskColor>(0.7,0.85,1.0,1.0)</heightMaskColor>
<heightMaskScaleMultiplier>1.3</heightMaskScaleMultiplier>
</li>
<li Class="WulaFallenEmpire.CompProperties_FlyOverEscort">
<escortFlyOverDef>WULA_Striker_Escort</escortFlyOverDef>
<!-- 生成配置 -->
<spawnIntervalTicks>1000</spawnIntervalTicks> <!-- 5秒 -->
<maxEscorts>20</maxEscorts>
<spawnCount>1</spawnCount>
<maxEscorts>30</maxEscorts>
<spawnCount>2</spawnCount>
<!-- 位置配置 -->
<spawnDistance>0</spawnDistance>
@@ -802,7 +746,7 @@
<minSafeDistanceFromMain>70</minSafeDistanceFromMain> <!-- 与主飞行物的距离检查 -->
<!-- 飞行配置 -->
<escortSpeedMultiplier>25</escortSpeedMultiplier> <!-- 比主舰稍快 -->
<escortSpeedMultiplier>50</escortSpeedMultiplier> <!-- 比主舰稍快 -->
<escortAltitudeOffset>10</escortAltitudeOffset> <!-- 比主舰稍高 -->
<mirrorMovement>false</mirrorMovement>
@@ -830,23 +774,23 @@
<heightMaskScaleMultiplier>1.3</heightMaskScaleMultiplier>
</li>
<li Class="WulaFallenEmpire.CompProperties_FlyOverEscort">
<escortFlyOverDef>WULA_Bomber_Escort</escortFlyOverDef>
<escortFlyOverDef>WULA_BattleShip_Planet_Interdiction</escortFlyOverDef>
<!-- 生成配置 -->
<spawnIntervalTicks>1350</spawnIntervalTicks> <!-- 5秒 -->
<maxEscorts>10</maxEscorts>
<maxEscorts>4</maxEscorts>
<spawnCount>1</spawnCount>
<!-- 位置配置 -->
<spawnDistance>0</spawnDistance>
<lateralOffset>130</lateralOffset>
<lateralOffset>60</lateralOffset>
<verticalOffset>5</verticalOffset>
<useRandomOffset>true</useRandomOffset>
<minSafeDistanceBetweenEscorts>10</minSafeDistanceBetweenEscorts> <!-- 伴飞物之间的距离 -->
<minSafeDistanceFromMain>70</minSafeDistanceFromMain> <!-- 与主飞行物的距离检查 -->
<minSafeDistanceBetweenEscorts>30</minSafeDistanceBetweenEscorts> <!-- 伴飞物之间的距离 -->
<minSafeDistanceFromMain>60</minSafeDistanceFromMain> <!-- 与主飞行物的距离检查 -->
<!-- 飞行配置 -->
<escortSpeedMultiplier>10</escortSpeedMultiplier> <!-- 比主舰稍快 -->
<escortSpeedMultiplier>30</escortSpeedMultiplier> <!-- 比主舰稍快 -->
<escortAltitudeOffset>10</escortAltitudeOffset> <!-- 比主舰稍高 -->
<mirrorMovement>false</mirrorMovement>
@@ -931,108 +875,6 @@
<useFactionDiscrimination>true</useFactionDiscrimination>
<useMicroTracking>true</useMicroTracking>
</li>
<li Class="WulaFallenEmpire.CompProperties_ShipArtillery">
<ticksBetweenAttacks>300</ticksBetweenAttacks>
<attackDurationTicks>30</attackDurationTicks>
<attackRadius>25</attackRadius>
<skyfallerDef>WULA_Planet_Interdiction_EnergyLance_Skyfaller</skyfallerDef>
<shellsPerVolley>1</shellsPerVolley>
<!-- 新增派系甄别配置 -->
<useRandomTargets>true</useRandomTargets>
<useFactionDiscrimination>true</useFactionDiscrimination>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="SkyfallerBase">
<defName>WULA_Planet_Interdiction_EnergyLance_Skyfaller</defName>
<label>光矛监视信标</label>
<size>(1,1)</size>
<graphicData>
<texPath>Wula/Weapon/WULA_Weapon_Empty</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>TransparentPostLight</shaderType>
<drawSize>(1,1)</drawSize>
<color>(255,255,255,150)</color>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<skyfaller>
<movementType>Decelerate</movementType>
<shadow>Things/Skyfaller/SkyfallerShadowDropPod</shadow>
<shadowSize>(0, 0)</shadowSize>
<anticipationSound>DropPod_Fall</anticipationSound>
<anticipationSoundTicks>100</anticipationSoundTicks>
<!-- <impactSound>Explosion_Vaporize</impactSound> -->
<moteSpawnTime>0.05</moteSpawnTime>
<motesPerCell>0</motesPerCell>
<cameraShake>0</cameraShake>
<angleCurve>
<points>
<li>(0,0)</li>
<li>(1, 1)</li>
</points>
</angleCurve>
<spawnThing>WULA_Planet_Interdiction_EnergyLance_Beacon</spawnThing>
</skyfaller>
</ThingDef>
<ThingDef ParentName="BuildingBase">
<defName>WULA_Planet_Interdiction_EnergyLance_Beacon</defName>
<label>光矛监视信标</label>
<description>一枚标定监视区的轰炸信标,进入此处的敌对势力都会被乌拉帝国舰队的舰炮狠狠打击。</description>
<uiIconPath>Wula/Building/WULA_WeaponArmor_Productor</uiIconPath>
<tickerType>Normal</tickerType>
<selectable>false</selectable>
<useHitPoints>false</useHitPoints>
<size>(1,1)</size>
<graphicData>
<texPath>Wula/Weapon/WULA_Weapon_Empty</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>TransparentPostLight</shaderType>
<drawSize>(72,72)</drawSize>
<color>(255,255,255,150)</color>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<altitudeLayer>Building</altitudeLayer>
<passability>Standable</passability>
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<pathCost>0</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<statBases>
<WorkToBuild>1</WorkToBuild>
<Mass>0</Mass>
<Flammability>0</Flammability>
</statBases>
<resourcesFractionWhenDeconstructed>0</resourcesFractionWhenDeconstructed>
<building>
<expandHomeArea>false</expandHomeArea>
<destroySound>BuildingDestroyed_Metal_Small</destroySound>
</building>
<comps>
<li Class="WulaFallenEmpire.CompProperties_EnergyLanceTurret">
<energyLanceDef>WULA_EnergyLance_Surveillance</energyLanceDef>
<energyLanceDuration>600</energyLanceDuration>
<energyLanceMoveDistance>25</energyLanceMoveDistance>
<detectionRange>36</detectionRange>
<targetUpdateInterval>30</targetUpdateInterval>
<targetSwitchRange>20</targetSwitchRange>
<warmupTicks>45</warmupTicks>
<cooldownTicks>180</cooldownTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_FactionSetter">
<!-- <factionDef>Mechanoid</factionDef> 不写默认玩家派系-->
<usePlayerFactionIfNull>true</usePlayerFactionIfNull>
<overrideExistingFaction>false</overrideExistingFaction>
</li>
<li Class="CompProperties_Lifespan">
<lifespanTicks>600</lifespanTicks>
</li>
</comps>
</ThingDef>

View File

@@ -110,7 +110,7 @@
<shaderType>CutoutComplex</shaderType>
</graphicData>
<weaponTags>
<li>Wula_Melee_Weapon_T2</li>
<li>Wula_Melee_Weapon_T1</li>
</weaponTags>
<equippedAngleOffset>-65</equippedAngleOffset>
<techLevel>Spacer</techLevel>

View File

@@ -0,0 +1,279 @@
using RimWorld;
using Verse;
using Verse.Sound;
namespace WulaFallenEmpire
{
// HediffCompProperties 定义
public class HediffCompProperties_DisappearWithEffect : HediffCompProperties_Disappears
{
public FleckDef fleckDef; // 要播放的特效
public float fleckScale = 1f; // 特效缩放
public bool dropEquipment = false; // 是否掉落装备false = 直接销毁)
public bool destroyCorpse = true; // 是否销毁尸体
public bool playSound = true; // 是否播放音效
public SoundDef soundDef; // 自定义音效
public HediffCompProperties_DisappearWithEffect()
{
compClass = typeof(HediffComp_DisappearWithEffect);
}
}
// HediffComp 实现
public class HediffComp_DisappearWithEffect : HediffComp
{
public HediffCompProperties_DisappearWithEffect Props =>
(HediffCompProperties_DisappearWithEffect)props;
private int ticksUntilDisappear = -1;
private bool triggered = false;
public override void CompPostMake()
{
base.CompPostMake();
if (Props.disappearsAfterTicks != null)
{
ticksUntilDisappear = Props.disappearsAfterTicks.RandomInRange;
}
}
// 重写 CompPostTick 方法,在到达指定 tick 时触发效果
public override void CompPostTick(ref float severityAdjustment)
{
base.CompPostTick(ref severityAdjustment);
if (triggered || Pawn == null || Pawn.Destroyed) return;
// 检查是否到达消失时间
if (ticksUntilDisappear > 0)
{
ticksUntilDisappear--;
if (ticksUntilDisappear <= 0)
{
TriggerDisappearEffect();
}
}
// 如果 pawn 已经死亡,立即触发效果
else if (Pawn.Dead)
{
TriggerDisappearEffect();
}
}
// 处理 pawn 死亡事件 - 修复参数问题
public override void Notify_PawnDied(DamageInfo? dinfo, Hediff culprit = null)
{
base.Notify_PawnDied(dinfo, culprit);
if (!triggered)
{
TriggerDisappearEffect();
}
}
// 触发消失效果的核心方法
private void TriggerDisappearEffect()
{
if (triggered || Pawn == null || Pawn.Map == null || Pawn.Destroyed)
return;
triggered = true;
try
{
// 记录位置
IntVec3 position = Pawn.Position;
Map map = Pawn.Map;
// 1. 清除所有装备
ClearAllEquipment(map);
// 2. 播放特效
PlayFleckEffect(position, map);
// 3. 播放音效
PlaySoundEffect(position, map);
// 4. 发送消失消息(如果配置了)
SendDisappearMessage();
// 5. 删除 pawn
DestroyPawn();
Log.Message($"[DisappearWithEffect] Pawn {Pawn.LabelCap} disappeared at {position}");
}
catch (System.Exception ex)
{
Log.Error($"[DisappearWithEffect] Error in TriggerDisappearEffect: {ex}");
}
}
// 清除所有装备 - 修复参数问题
private void ClearAllEquipment(Map map)
{
if (Pawn.equipment == null && Pawn.apparel == null && Pawn.inventory == null)
return;
// 清除装备(武器)
if (Pawn.equipment != null)
{
var allEquipment = Pawn.equipment.AllEquipmentListForReading.ListFullCopy();
foreach (var thing in allEquipment)
{
if (Props.dropEquipment)
{
// 掉落装备 - 修复类型转换问题
ThingWithComps droppedWeapon;
Pawn.equipment.TryDropEquipment(thing, out droppedWeapon, Pawn.Position, true);
}
else
{
// 直接销毁装备
thing.Destroy(DestroyMode.Vanish);
}
}
}
// 清除 apparel服装
if (Pawn.apparel != null)
{
var wornApparel = Pawn.apparel.WornApparel.ListFullCopy();
foreach (var apparel in wornApparel)
{
if (Props.dropEquipment)
{
// 掉落服装
Apparel droppedApparel;
Pawn.apparel.TryDrop(apparel, out droppedApparel, Pawn.Position, true);
}
else
{
// 直接销毁服装
apparel.Destroy(DestroyMode.Vanish);
}
}
}
// 清除 inventory物品栏
if (Pawn.inventory != null)
{
var innerContainer = Pawn.inventory.innerContainer.InnerListForReading.ListFullCopy();
foreach (var thing in innerContainer)
{
if (Props.dropEquipment)
{
// 掉落物品
Thing droppedThing;
Pawn.inventory.innerContainer.TryDrop(thing, Pawn.Position, map, ThingPlaceMode.Near, out droppedThing);
}
else
{
// 直接销毁物品
thing.Destroy(DestroyMode.Vanish);
}
}
}
}
// 播放特效
private void PlayFleckEffect(IntVec3 position, Map map)
{
FleckDef fleckToUse = Props.fleckDef ?? FleckDefOf.PsycastAreaEffect;
// 在 pawn 位置播放特效
FleckMaker.Static(position, map, fleckToUse, Props.fleckScale);
// 额外在周围格子上播放特效,增强视觉效果
for (int i = 0; i < 8; i++)
{
IntVec3 nearbyCell = position + GenAdj.AdjacentCells[i];
if (nearbyCell.InBounds(map))
{
FleckMaker.Static(nearbyCell, map, fleckToUse, Props.fleckScale * 0.7f);
}
}
}
// 播放音效 - 修复音效播放问题
private void PlaySoundEffect(IntVec3 position, Map map)
{
if (!Props.playSound) return;
SoundDef soundToUse = Props.soundDef ?? SoundDefOf.PsycastPsychicPulse;
// 使用 SoundStarter 播放音效
SoundInfo soundInfo = SoundInfo.InMap(new TargetInfo(position, map));
soundToUse.PlayOneShot(soundInfo);
}
// 发送消失消息
private void SendDisappearMessage()
{
var disappearProps = props as HediffCompProperties_Disappears;
if (disappearProps?.messageOnDisappear != null)
{
Messages.Message(disappearProps.messageOnDisappear.Translate(Pawn.LabelShort),
Pawn, MessageTypeDefOf.NeutralEvent);
}
if (disappearProps?.letterLabelOnDisappear != null &&
disappearProps?.letterTextOnDisappear != null &&
Pawn.Faction == Faction.OfPlayer)
{
Find.LetterStack.ReceiveLetter(
disappearProps.letterLabelOnDisappear.Translate(Pawn.LabelShort),
disappearProps.letterTextOnDisappear.Translate(Pawn.LabelShort),
LetterDefOf.NeutralEvent,
new LookTargets(Pawn)
);
}
}
// 删除 pawn
private void DestroyPawn()
{
if (Pawn.Dead && Props.destroyCorpse)
{
// 如果是尸体,直接销毁
Pawn.Destroy();
}
else if (!Pawn.Dead)
{
// 如果是活着的 pawn先杀死再销毁
Pawn.Kill(null, this.parent);
if (Props.destroyCorpse)
{
Pawn.Destroy();
}
}
}
// 重写 CompTipStringExtra 显示额外信息
public override string CompTipStringExtra
{
get
{
if (ticksUntilDisappear > 0 && Props.showRemainingTime)
{
return "DisappearWithEffect_TimeRemaining".Translate(
ticksUntilDisappear.ToStringTicksToPeriod(Props.canUseDecimalsShortForm));
}
return null;
}
}
// 重写 CompDebugString 用于调试
public override string CompDebugString()
{
return $"Will disappear in: {ticksUntilDisappear} ticks (Triggered: {triggered})";
}
// 序列化数据
public override void CompExposeData()
{
base.CompExposeData();
Scribe_Values.Look(ref ticksUntilDisappear, "ticksUntilDisappear", -1);
Scribe_Values.Look(ref triggered, "triggered", false);
}
}
}

View File

@@ -160,6 +160,7 @@
<Compile Include="HarmonyPatches\WULA_AutonomousMech\Patch_CaravanFormingUtility_AllSendablePawns.cs" />
<Compile Include="HarmonyPatches\WULA_AutonomousMech\Patch_Pawn_ThreatDisabled.cs" />
<Compile Include="HarmonyPatches\WULA_AutonomousMech\Patch_UncontrolledMechDrawPulse.cs" />
<Compile Include="HediffComp\HediffCompProperties_DisappearWithEffect .cs" />
<Compile Include="HediffComp\HediffCompProperties_NanoRepair.cs" />
<Compile Include="HediffComp\HediffCompProperties_SwitchableHediff.cs" />
<Compile Include="HediffComp\WULA_HediffDamgeShield\DRMDamageShield.cs" />