This commit is contained in:
2025-11-27 17:14:53 +08:00
parent 58249fb306
commit 0cca8b0516
30 changed files with 924 additions and 682 deletions

View File

@@ -1028,116 +1028,4 @@
</li>
</comps>
</AbilityDef>
<!-- 支援 -->
<AbilityDef>
<defName>WULA_Support_Holographic_Flag</defName>
<label>空投旗帜</label>
<description>从拒止舰队上扔一面全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。</description>
<iconPath>Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe</iconPath>
<cooldownTicksRange>1</cooldownTicksRange>
<hotKey>Misc12</hotKey>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<drawAimPie>false</drawAimPie>
<requireLineOfSight>false</requireLineOfSight>
<warmupTime>1</warmupTime>
<range>120</range>
<targetable>true</targetable>
<targetParams>
<canTargetSelf>false</canTargetSelf>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AbilityCallSkyfaller">
<delayTicks>0</delayTicks>
<skyfallerDef>WULA_Holographic_Flag_Building_Skyfaller</skyfallerDef>
<previewRadius>15</previewRadius>
<previewColor>(1,1,1,0.5)</previewColor>
</li>
<li Class="WulaFallenEmpire.CompProperties_RequireFlyOverFacility">
<requiredFacility>FactoryFacility</requiredFacility>
<facilityNotFoundMessage>需要拥有&lt;color=#BD2F31>&lt;i>支援设施&lt;/i>&lt;/color>设施的战舰在地图上才能进行轨道炮击支援</facilityNotFoundMessage>
</li>
<!-- <li Class="WulaFallenEmpire.CompProperties_AbilityResearchPrereq">
<requiredResearch>WULA_Firepower_Minigun_Technology</requiredResearch>
</li> -->
</comps>
</AbilityDef>
<AbilityDef>
<defName>WULA_Support_Shield_Projection</defName>
<label>护盾投射</label>
<description>从拒止舰队上扔一面附拒止护盾的全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。拒止护盾可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后该系统将自行烧毁。</description>
<iconPath>Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe</iconPath>
<cooldownTicksRange>1</cooldownTicksRange>
<hotKey>Misc12</hotKey>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<drawAimPie>false</drawAimPie>
<requireLineOfSight>false</requireLineOfSight>
<warmupTime>1</warmupTime>
<range>120</range>
<targetable>true</targetable>
<targetParams>
<canTargetSelf>false</canTargetSelf>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AbilityCallSkyfaller">
<delayTicks>0</delayTicks>
<skyfallerDef>WULA_Support_Shield_Projection_Skyfaller</skyfallerDef>
<previewRadius>12</previewRadius>
<previewColor>(0.6,0.8,0.8,0.5)</previewColor>
</li>
<li Class="WulaFallenEmpire.CompProperties_RequireFlyOverFacility">
<!-- <flyOverDef></flyOverDef> -->
<requiredFacility>FactoryFacility</requiredFacility>
<facilityNotFoundMessage>需要拥有&lt;color=#BD2F31>&lt;i>支援设施&lt;/i>&lt;/color>设施的战舰在地图上才能进行轨道炮击支援</facilityNotFoundMessage>
</li>
<!-- <li Class="WulaFallenEmpire.CompProperties_AbilityResearchPrereq">
<requiredResearch>WULA_Firepower_Minigun_Technology</requiredResearch>
</li> -->
</comps>
</AbilityDef>
<AbilityDef>
<defName>WULA_Support_AreaTeleporter</defName>
<label>区域传送器</label>
<description>从拒止舰队上扔一面附拒止护盾的全息旗帜到指定地点,激励附近的乌拉星人更英勇地战斗。拒止护盾可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后该系统将自行烧毁。</description>
<iconPath>Wula/UI/Abilities/WULA_Firepower_Minigun_Strafe</iconPath>
<cooldownTicksRange>1</cooldownTicksRange>
<hotKey>Misc12</hotKey>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>
<verbProperties>
<verbClass>Verb_CastAbility</verbClass>
<drawAimPie>false</drawAimPie>
<requireLineOfSight>false</requireLineOfSight>
<warmupTime>1</warmupTime>
<range>120</range>
<targetable>true</targetable>
<targetParams>
<canTargetSelf>false</canTargetSelf>
<canTargetLocations>true</canTargetLocations>
</targetParams>
</verbProperties>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AbilityCallSkyfaller">
<delayTicks>0</delayTicks>
<skyfallerDef>WULA_Support_AreaTeleporter_Skyfaller</skyfallerDef>
<previewRadius>20</previewRadius>
<previewColor>(0.6,0.8,0.8,0.5)</previewColor>
</li>
<li Class="WulaFallenEmpire.CompProperties_RequireFlyOverFacility">
<!-- <flyOverDef></flyOverDef> -->
<requiredFacility>FactoryFacility</requiredFacility>
<facilityNotFoundMessage>需要拥有&lt;color=#BD2F31>&lt;i>支援设施&lt;/i>&lt;/color>设施的战舰在地图上才能进行轨道炮击支援</facilityNotFoundMessage>
</li>
<!-- <li Class="WulaFallenEmpire.CompProperties_AbilityResearchPrereq">
<requiredResearch>WULA_Firepower_Minigun_Technology</requiredResearch>
</li> -->
</comps>
</AbilityDef>
</Defs>

View File

@@ -1055,6 +1055,25 @@
</spawnCategories>
</AlienRace.AlienBackstoryDef>
<AlienRace.AlienBackstoryDef>
<defName>WULA_Adult_Backstory_Legion_Escort</defName>
<slot>Adulthood</slot>
<title>断爪卫队</title>
<titleShort>断爪卫队</titleShort>
<description>[PAWN_nameDef]是断爪卫队的一员该卫队是乌拉帝国行星封锁机关总控AI「军团」的心腹和黑手套负责和其分体出席各种场合。</description>
<workDisables>AllWork</workDisables>
<bodyTypeGlobal>Thin</bodyTypeGlobal>
<bodyTypeFemale>Thin</bodyTypeFemale>
<bodyTypeMale>Thin</bodyTypeMale>
<skillGains>
<Melee>999</Melee>
<Shooting>999</Shooting>
</skillGains>
<spawnCategories>
<li>Wula_Backstory_Categories_Legion_Escort</li>
</spawnCategories>
</AlienRace.AlienBackstoryDef>
<!-- 乌拉反常网络固定背景 -->
<AlienRace.AlienBackstoryDef>
<defName>WULA_Adult_Backstory999</defName>

View File

@@ -93,7 +93,7 @@
<HediffDef ParentName="ImplantHediffBase">
<defName>WULA_AutoJumpdrive</defName>
<label>微型传送装置</label>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间或死亡时将其回收</description>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收</description>
<spawnThingOnRemoved>WULA_AutoJumpdrive</spawnThingOnRemoved>
<comps>
<li Class="WulaFallenEmpire.HediffCompProperties_DisappearWithEffect">
@@ -108,10 +108,10 @@
</li>
</comps>
</HediffDef>
<ThingDef ParentName="BodyPartBase">
<ThingDef Name="WULA_AutoJumpdrive_Thing" ParentName="BodyPartBase">
<defName>WULA_AutoJumpdrive</defName>
<label>death acidifier</label>
<description>A chest implant for preventing enemy use of captured equipment. Upon the user's death, it releases powerful chemicals that dissolve gear in contact with the user's body. It doesn't damage others.</description>
<label>微型传送装置</label>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收</description>
<techLevel>Spacer</techLevel>
<graphicData>
<texPath>Things/Item/Health/HealthItem</texPath>
@@ -151,4 +151,50 @@
</appliedOnFixedBodyParts>
<addsHediff>WULA_AutoJumpdrive</addsHediff>
</RecipeDef>
<HediffDef ParentName="ImplantHediffBase">
<defName>WULA_AutoJumpdrive_Week</defName>
<label>微型传送装置</label>
<description>安装在乌拉帝国合成人军团体内的微型跃迁引擎,会在合成人到达指定作战时间时将其回收</description>
<spawnThingOnRemoved>WULA_AutoJumpdrive</spawnThingOnRemoved>
<comps>
<li Class="WulaFallenEmpire.HediffCompProperties_DisappearWithEffect">
<disappearsAfterTicks>420000</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>
</HediffDef>
<ThingDef ParentName="WULA_AutoJumpdrive_Thing">
<defName>WULA_AutoJumpdrive_Week</defName>
</ThingDef>
<RecipeDef ParentName="SurgeryInstallImplantBase">
<defName>Install_WULA_AutoJumpdrive_Week</defName>
<label>install death acidifier</label>
<description>Install a death acidifier.</description>
<jobString>Installing death acidifier.</jobString>
<ingredients>
<li>
<filter>
<thingDefs>
<li>WULA_AutoJumpdrive_Week</li>
</thingDefs>
</filter>
<count>1</count>
</li>
</ingredients>
<fixedIngredientFilter>
<thingDefs>
<li>WULA_AutoJumpdrive_Week</li>
</thingDefs>
</fixedIngredientFilter>
<appliedOnFixedBodyParts>
<li>Torso</li>
</appliedOnFixedBodyParts>
<addsHediff>WULA_AutoJumpdrive_Week</addsHediff>
</RecipeDef>
</Defs>

View File

@@ -147,31 +147,4 @@
</li>
</comps>
</HediffDef>
<HediffDef>
<defName>Wula_FM_Switc_Construction</defName>
<label>调频(支援)</label>
<description>允许乌拉帝国的合成人呼叫舰队支援,包含一系列防御性能力和生产加速能力,一般需要有拒止舰队部署在轨道上才能启动。</description>
<hediffClass>Hediff_High</hediffClass>
<everCurableByItem>false</everCurableByItem>
<duplicationAllowed>false</duplicationAllowed>
<keepOnBodyPartRestoration>True</keepOnBodyPartRestoration>
<isBad>false</isBad>
<stages>
<li>
<becomeVisible>false</becomeVisible>
</li>
</stages>
<comps>
<li Class="HediffCompProperties_GiveAbility">
<abilityDefs>
<li>WULA_CallMotherShip</li>
<li>WULA_CallConstructionShip</li>
<li>WULA_ClearFlightPath</li>
<li>WULA_Support_Holographic_Flag</li>
<li>WULA_Support_Shield_Projection</li>
<li>WULA_Support_AreaTeleporter</li>
</abilityDefs>
</li>
</comps>
</HediffDef>
</Defs>

View File

@@ -616,6 +616,10 @@
<weaponMoney>0</weaponMoney>
<apparelAllowHeadgearChance>0</apparelAllowHeadgearChance>
<apparelMoney>99999~99999</apparelMoney>
<techHediffsRequired>
<li>WULA_AutoJumpdrive_Week</li>
<li>DeathAcidifier</li>
</techHediffsRequired>
</PawnKindDef>
<PawnKindDef>
<defName>Wula_PIA_Legion_Escort_Unit</defName>
@@ -664,6 +668,7 @@
<apparelMoney>999999~999999</apparelMoney>
<techHediffsMoney>999999~999999</techHediffsMoney>
<techHediffsRequired>
<li>WULA_AutoJumpdrive_Week</li>
<li>DeathAcidifier</li>
</techHediffsRequired>
<techHediffsTags>
@@ -671,12 +676,11 @@
<li>ImplantEmpireCommon</li>
</techHediffsTags>
<backstoryFiltersOverride>
<li>
<categories>
<li>Wula_Backstory_Categories</li>
</categories>
</li>
</backstoryFiltersOverride>
<fixedChildBackstories>
<li>WULA_Child_Backstory03</li>
</fixedChildBackstories>
<fixedAdultBackstories>
<li>WULA_Adult_Backstory_Legion_Escort</li>
</fixedAdultBackstories>
</PawnKindDef>
</Defs>

View File

@@ -133,8 +133,8 @@
<li Class="QuestNode_Letter">
<inSignal>faction.BecameHostileToPlayer</inSignal>
<label TKey="LetterLabelFactionBecameHostile">LetterLabelFactionBecameHostile</label>
<text TKey="LetterTextFactionBecameHostile">LetterTextFactionBecameHostile</text>
<label TKey="LetterLabelFactionBecameHostile">任务失败:[resolvedQuestName]</label>
<text TKey="LetterTextFactionBecameHostile">[faction_name]开始敌视你。</text>
</li>
<li Class="QuestNode_End">
<inSignal>faction.BecameHostileToPlayer</inSignal>
@@ -237,9 +237,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleDestroyed">Shuttle destroyed</label>
<label TKey="LetterLabelShuttleDestroyed">穿梭机被破坏</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextShuttleDestroyed">The shuttle sent to drop off [pawnsLabelDef] has been destroyed. You have failed the quest '[resolvedQuestName]'.\n\nYour relations with [asker_faction_name] have changed by [goodwillChangeOnShuttleDestroyed].</text>
<text TKey="LetterTextShuttleDestroyed">被派遣来运输[asker_nameDef]的穿梭机已被破坏。</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -262,9 +262,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestDied">Guest died: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestDied">宾客{SUBJECT_definite}死亡</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestDied">{SUBJECT_definite}, who you were charged to protect, has died. [failLetterEndingCommon]</text>
<text TKey="LetterTextGuestDied">需要你护卫的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]</text>
<signalListenMode>OngoingOrNotYetAccepted</signalListenMode>
</li>
<li Class="QuestNode_End">
@@ -302,8 +302,8 @@
<inspectString TKey="InspectStringDepartShuttle">应该乘坐穿梭机离开</inspectString>
</li>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleArrived">Shuttle arrived</label>
<text TKey="LetterTextShuttleArrived">The shuttle has arrived to collect the [asker_faction_leaderTitle].\n\nAll of you can accompany the [asker_faction_leaderTitle] on the shuttle and travel to the Imperial flotilla to begin a new life.</text>
<label TKey="LetterLabelShuttleArrived">穿梭机已抵达</label>
<text TKey="LetterTextShuttleArrived">穿梭机已经前来迎接[asker_nameDef]。</text>
<lookTargets>$pickupShipThing</lookTargets>
</li>
@@ -355,9 +355,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelSubjectUnhappy">{SUBJECT_bestRoyalTitle} unhappy</label>
<label TKey="LetterLabelSubjectUnhappy">{SUBJECT_bestRoyalTitle}情绪低落</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextSubjectUnhappy">{SUBJECT_definite}, who you were charged to protect and keep happy, has been below the minimum mood of [lodgersMoodThreshold] too long. [failLetterEndingCommon]</text>
<text TKey="LetterTextSubjectUnhappy">需要你护卫和满足需求的{SUBJECT_definite},其情绪值已经长时间低于最低限度[lodgersMoodThreshold][failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -372,9 +372,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestCaptured">Guest captured: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestCaptured">宾客{SUBJECT_definite}被俘</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestCaptured">{SUBJECT_definite}, who you were charged to protect, has been arrested. [failLetterEndingCommon]</text>
<text TKey="LetterTextGuestCaptured">需要你护卫的{SUBJECT_definite}已经被俘虏。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -392,9 +392,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelUnauthorizedSurgery">Unauthorized surgery: {SUBJECT_definite}</label>
<label TKey="LetterLabelUnauthorizedSurgery">未授权手术:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextUnauthorizedSurgery">Unauthorized, violating surgery has been performed on {SUBJECT_definite}, who you were charged to protect. [failLetterEndingCommon]</text>
<text TKey="LetterTextUnauthorizedSurgery">需要你护卫的{SUBJECT_definite}接受了一场未授权的多余手术。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -412,9 +412,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label>Xenogerm absorbed: {SUBJECT_definite}</label>
<label>异种胚芽被吸收</label>
<letterDef>NegativeEvent</letterDef>
<text>{SUBJECT_definite}, who you were charged to protect, has had {SUBJECT_possessive} xenogerm forcibly absorbed. [failLetterEndingCommon]</text>
<text>指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -432,9 +432,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestLost">Guest lost: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestLost">宾客失踪:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestLost">{SUBJECT_definite}, who you were charged to protect, has left the assigned settlement. [failLetterEndingCommon]</text>
<text TKey="LetterTextGuestLost">需要你护卫的{SUBJECT_definite}失踪在你的殖民地。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -452,9 +452,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleDestroyed">Shuttle destroyed</label>
<label TKey="LetterLabelShuttleDestroyed">穿梭机已被毁</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextShuttleDestroyed">The shuttle sent to collect the [asker_faction_leaderTitle] has been destroyed. [failLetterEndingCommon]</text>
<text TKey="LetterTextShuttleDestroyed">前来迎接[asker_faction_leaderTitle]的穿梭机被摧毁了。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -472,9 +472,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelLodgerRanWild">Guest lost: {SUBJECT_definite}</label>
<label TKey="LetterLabelLodgerRanWild">宾客失踪:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextLodgerRanWild">{SUBJECT_definite}, who you were charged to protect, has run wild. [failLetterEndingCommon]</text>
<text TKey="LetterTextLodgerRanWild">需要你护卫的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -510,9 +510,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleSentUnsatisfied">Quest failed: [resolvedQuestName]</label>
<label TKey="LetterLabelShuttleSentUnsatisfied">任务失败:[resolvedQuestName]</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextShuttleSentUnsatisfied">The shuttle sent to collect the [asker_faction_leaderTitle] has departed without [asker_objective]. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]</text>
<text TKey="LetterTextShuttleSentUnsatisfied">前来迎接[asker_faction_leaderTitle]的穿梭机没有接到[asker_objective][asker_pronoun]现在只能走回去。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>

View File

@@ -125,8 +125,8 @@
<points>$points</points>
<enemyFaction>$enemyFaction</enemyFaction>
<walkInSpot>$walkInSpot</walkInSpot>
<customLetterLabel TKey="LetterLabelChasing">{BASELABEL} chasing [../asker_nameDef]</customLetterLabel>
<customLetterText TKey="LetterTextChasing">{BASETEXT}\nThe [enemyFaction_pawnsPlural] have come to get [../asker_nameDef].</customLetterText>
<customLetterLabel TKey="LetterLabelChasing">{BASELABEL} 追捕[../asker_nameDef]</customLetterLabel>
<customLetterText TKey="LetterTextChasing">{BASETEXT}\n\n[enemyFaction_pawnsPlural]来此追捕[../asker_nameDef]</customLetterText>
</parms>
</node>
<!-- 不允许暴力则生成温和动物 -->
@@ -151,12 +151,12 @@
<!-- 选中指定对象时显示自定义的检查信息 -->
<li Class="QuestNode_InspectString">
<targets>$asker</targets>
<inspectString TKey="InspectStringDepartShuttle">Should depart on shuttle</inspectString>
<inspectString TKey="InspectStringDepartShuttle">应该乘坐穿梭机出发</inspectString>
</li>
<!-- 信封 -->
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleArrived">Shuttle arrived</label>
<text TKey="LetterTextShuttleArrived">The shuttle has arrived to collect [asker_nameDef].</text>
<label TKey="LetterLabelShuttleArrived">穿梭机已抵达</label>
<text TKey="LetterTextShuttleArrived">前来迎接[asker_nameDef]的穿梭机已抵达。</text>
<lookTargets>$pickupShipThing</lookTargets>
</li>
</nodes>
@@ -191,9 +191,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestDied">Guest died: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestDied">宾客已死亡:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestDied">{SUBJECT_definite}, who you were charged to protect, has died. [failLetterEndingCommon]</text>
<text TKey="LetterTextGuestDied">需要你小心保护的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -210,7 +210,7 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestDied">Guest left behind: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestDied">宾客被遗弃:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestDied">{SUBJECT_definite}, who you were charged to protect, has been left behind. [failLetterEndingCommon]</text>
</li>
@@ -229,9 +229,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelUnauthorizedSurgery">Unauthorized surgery: {SUBJECT_definite}</label>
<label TKey="LetterLabelUnauthorizedSurgery">未授权手术:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextUnauthorizedSurgery">Unauthorized, violating surgery has been performed on {SUBJECT_definite}, who you were charged to protect. Because of this violation, [asker_pronoun] will now attempt to leave. [failLetterEndingCommon]</text>
<text TKey="LetterTextUnauthorizedSurgery">需要你小心保护的{SUBJECT_definite}接受了一次未授权的额外手术。因为你违规在先,[asker_pronoun]将要离开此处。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -248,9 +248,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label>Xenogerm absorbed: {SUBJECT_definite}</label>
<label>异种胚芽被吸收:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text>{SUBJECT_definite}, who you were charged to protect, has had {SUBJECT_possessive} xenogerm forcibly absorbed. Because of this violation, {SUBJECT_pronoun} will now attempt to leave. [failLetterEndingCommon]</text>
<text>指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。这是一种侵犯行为,{SUBJECT_pronoun}现在将会直接离开[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -267,9 +267,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelCaptured">Captured: {SUBJECT_definite}</label>
<label TKey="LetterLabelCaptured">已被俘:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextCaptured">{SUBJECT_definite}, who you were charged to host, has been arrested. [failLetterEndingCommon]</text>
<text TKey="LetterTextCaptured">需要你小心保护的{SUBJECT_definite}已被俘虏。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -286,9 +286,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelGuestLost">Guest lost: {SUBJECT_definite}</label>
<label TKey="LetterLabelGuestLost">宾客失踪:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextGuestLost">{SUBJECT_definite}, who you were charged to protect, has left the designated settlement. [failLetterEndingCommon]</text>
<text TKey="LetterTextGuestLost">需要你小心保护的{SUBJECT_definite}在你的殖民地失踪了。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -305,9 +305,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelLodgerRanWild">Guest lost: {SUBJECT_definite}</label>
<label TKey="LetterLabelLodgerRanWild">宾客失踪:{SUBJECT_definite}</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextLodgerRanWild">{SUBJECT_definite}, who you were charged to protect, has run wild. [failLetterEndingCommon]</text>
<text TKey="LetterTextLodgerRanWild">需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -324,9 +324,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleDestroyed">Shuttle destroyed</label>
<label TKey="LetterLabelShuttleDestroyed">穿梭机被毁</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextShuttleDestroyed">The shuttle sent to collect [asker_nameDef] has been destroyed. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]</text>
<text TKey="LetterTextShuttleDestroyed">前来迎接[asker_nameDef]的穿梭机已被毁。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -343,9 +343,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelShuttleDestroyed">Shuttle left behind</label>
<label TKey="LetterLabelShuttleDestroyed">穿梭机被遗弃</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextShuttleDestroyed">The shuttle sent to collect [asker_nameDef] has been left behind. [asker_pronoun] will now leave on foot.</text>
<text TKey="LetterTextShuttleDestroyed">前来迎接[asker_nameDef]的穿梭机已被遗弃。[asker_pronoun]现在只能走回去了。</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>
@@ -390,9 +390,9 @@
<node Class="QuestNode_Sequence">
<nodes>
<li Class="QuestNode_Letter">
<label TKey="LetterLabelQuestFailed">Quest failed: [resolvedQuestName]</label>
<label TKey="LetterLabelQuestFailed">任务失败:[resolvedQuestName]</label>
<letterDef>NegativeEvent</letterDef>
<text TKey="LetterTextQuestFailed">The shuttle sent to collect [asker_nameDef] has departed without [asker_objective]. [asker_pronoun] will now leave on foot. [failLetterEndingCommon]</text>
<text TKey="LetterTextQuestFailed">前来迎接[asker_nameDef]的穿梭机在离开时因为一些原因落下了[asker_objective][asker_pronoun]现在只能走回去了。[failLetterEndingCommon]</text>
</li>
<li Class="QuestNode_End">
<outcome>Fail</outcome>

View File

@@ -202,7 +202,7 @@
<description>允许殖民地建立信标增加攻击舰队配额并使得机械乌拉可以调频天线以申请舰队空中支援包含2艘可以发起轨道炮击的巡洋舰和1艘可以提供航空器支援的航空舰。</description>
<baseCost>600</baseCost>
<researchViewX>1.00</researchViewX>
<researchViewY>4.40</researchViewY>
<researchViewY>5.60</researchViewY>
<prerequisites>
<li>WULA_Colony_License_LV1_Technology</li>
</prerequisites>

View File

@@ -521,10 +521,10 @@
<drawGUIOverlay>true</drawGUIOverlay>
<!-- <defaultPlacingRot>South</defaultPlacingRot> -->
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<pathCost>42</pathCost>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>0.5</fillPercent>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<canOverlapZones>false</canOverlapZones>
<statBases>
<MaxHitPoints>250</MaxHitPoints>
@@ -1283,7 +1283,6 @@
<ComponentIndustrial>1</ComponentIndustrial>
</costList>
<altitudeLayer>Building</altitudeLayer>
<fillPercent>0.5</fillPercent>
<useHitPoints>True</useHitPoints>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<statBases>
@@ -1293,8 +1292,10 @@
</statBases>
<size>(1,1)</size>
<uiOrder>2120</uiOrder>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<hasInteractionCell>True</hasInteractionCell>
<interactionCellOffset>(0,0,-1)</interactionCellOffset>
<surfaceType>Item</surfaceType>
@@ -1359,11 +1360,12 @@
</damageData>
</graphicData>
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<pathCost>0</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<rotatable>false</rotatable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>

View File

@@ -665,58 +665,6 @@
<thingClass>Thing</thingClass>
</ThingDef>
<!-- 装饰品 -->
<ThingDef ParentName="BuildingBase">
<defName>WULA_Wall_Flag_Building</defName>
<label>P.I.A旗帜</label>
<description>乌拉帝国行星封锁机关的旗帜,没什么用但是可以宣示乌拉帝国的主权。</description>
<thingClass>Building</thingClass>
<category>Building</category>
<passability>PassThroughOnly</passability>
<designationCategory>WULA_Buildings</designationCategory>
<selectable>true</selectable>
<fillPercent>0.20</fillPercent>
<pathCost>14</pathCost>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<soundImpactDefault>BulletImpact_Metal</soundImpactDefault>
<uiIconPath>Wula/Building/Flag/WULA_Flag_Building_B_north</uiIconPath>
<noRightClickDraftAttack>true</noRightClickDraftAttack>
<rotatable>true</rotatable>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_B</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(0.7,0.75)</drawSize>
<drawOffsetNorth>(0,0,0.7)</drawOffsetNorth>
<drawOffsetSouth>(0,0,-0.7)</drawOffsetSouth>
<drawOffsetWest>(-0.6,0,0.1)</drawOffsetWest>
<drawOffsetEast>(0.6,0,0.1)</drawOffsetEast>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<altitudeLayer>BuildingOnTop</altitudeLayer>
<statBases>
<MaxHitPoints>50</MaxHitPoints>
<Flammability>1.0</Flammability>
<WorkToBuild>330</WorkToBuild>
<Mass>2</Mass>
</statBases>
<uiOrder>2991</uiOrder>
<passability>Standable</passability>
<terrainAffordanceNeeded IsNull="True" />
<pathCost>0</pathCost>
<overrideMinifiedRot>North</overrideMinifiedRot>
<minifiedDrawOffset>(0, 0, 0.2)</minifiedDrawOffset>
<building>
<isEdifice>false</isEdifice>
<isAttachment>true</isAttachment>
</building>
<placeWorkers>
<li>Placeworker_AttachedToWall</li>
</placeWorkers>
</ThingDef>
<!-- 装饰品 -->
<ThingDef ParentName="BuildingBase">
<defName>WULA_Sky_Lock</defName>
<label>天锁</label>

View File

@@ -135,11 +135,12 @@
</shadowData>
</graphicData>
<altitudeLayer>Building</altitudeLayer>
<passability>PassThroughOnly</passability>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<castEdgeShadows>false</castEdgeShadows>
<fillPercent>0.5</fillPercent>
<canOverlapZones>false</canOverlapZones>
<pathCost>42</pathCost>
<hasInteractionCell>false</hasInteractionCell>
<!-- <interactionCellOffset>(0,0,-2)</interactionCellOffset> -->
<resourcesFractionWhenDeconstructed>0</resourcesFractionWhenDeconstructed>
@@ -217,7 +218,7 @@
<requiredCapacity>6</requiredCapacity>
<gizmoLabel>转换为BUk-1"地堡猫猫"</gizmoLabel>
<gizmoDesc>让地堡中的两只乌拉猫猫继续操纵地堡中的机枪,剩下的乌拉猫猫抬着地堡移动——虽然很难相信但是事实就是这样的。</gizmoDesc>
<gizmoIconPath>Wula/UI/Commands/WULA_TransformToPawn</gizmoIconPath>
<gizmoIconPath>Wula/UI/Commands/WULA_BunkerCat</gizmoIconPath>
</li>
</comps>
</ThingDef>
@@ -406,9 +407,10 @@
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<tickerType>Normal</tickerType>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<hasTooltip>true</hasTooltip>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<building>
@@ -683,9 +685,10 @@
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<tickerType>Normal</tickerType>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<hasTooltip>true</hasTooltip>
<building>
<combatPower>640</combatPower>
@@ -960,9 +963,10 @@
</costList>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<tickerType>Normal</tickerType>
<passability>PassThroughOnly</passability>
<pathCost>50</pathCost>
<fillPercent>0.5</fillPercent>
<passability>Impassable</passability>
<blockWind>true</blockWind>
<fillPercent>1</fillPercent>
<blockLight>false</blockLight>
<hasTooltip>true</hasTooltip>
<building>
<combatPower>450</combatPower>
@@ -1090,4 +1094,292 @@
</li>
</modExtensions>
</ThingDef>
<!-- 旗帜 -->
<ThingDef ParentName="BuildingBase">
<defName>WULA_Wall_Flag_Building</defName>
<label>P.I.A旗帜</label>
<description>乌拉帝国行星封锁机关的旗帜,没什么用但是可以宣示乌拉帝国的主权。</description>
<thingClass>Building</thingClass>
<category>Building</category>
<passability>PassThroughOnly</passability>
<designationCategory>WULA_Buildings</designationCategory>
<selectable>true</selectable>
<fillPercent>0.20</fillPercent>
<pathCost>14</pathCost>
<leaveResourcesWhenKilled>false</leaveResourcesWhenKilled>
<soundImpactDefault>BulletImpact_Metal</soundImpactDefault>
<uiIconPath>Wula/Building/Flag/WULA_Flag_Building_B_north</uiIconPath>
<noRightClickDraftAttack>true</noRightClickDraftAttack>
<rotatable>true</rotatable>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_B</texPath>
<graphicClass>Graphic_Multi</graphicClass>
<drawSize>(0.7,0.75)</drawSize>
<drawOffsetNorth>(0,0,0.7)</drawOffsetNorth>
<drawOffsetSouth>(0,0,-0.7)</drawOffsetSouth>
<drawOffsetWest>(-0.6,0,0.1)</drawOffsetWest>
<drawOffsetEast>(0.6,0,0.1)</drawOffsetEast>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<altitudeLayer>BuildingOnTop</altitudeLayer>
<statBases>
<MaxHitPoints>50</MaxHitPoints>
<Flammability>1.0</Flammability>
<WorkToBuild>330</WorkToBuild>
<Mass>2</Mass>
</statBases>
<uiOrder>2991</uiOrder>
<passability>Standable</passability>
<terrainAffordanceNeeded IsNull="True" />
<pathCost>0</pathCost>
<overrideMinifiedRot>North</overrideMinifiedRot>
<minifiedDrawOffset>(0, 0, 0.2)</minifiedDrawOffset>
<building>
<isEdifice>false</isEdifice>
<isAttachment>true</isAttachment>
</building>
<placeWorkers>
<li>Placeworker_AttachedToWall</li>
</placeWorkers>
</ThingDef>
<ThingDef Name="WULA_Holographic_Flag_Skyfaller" ParentName="SkyfallerBase">
<defName>WULA_Holographic_Flag_Building_Skyfaller</defName>
<label>P.I.A全息旗帜落地中</label>
<size>(1,1)</size>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_Mount_Incoming</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>MoteGlow</shaderType>
<drawSize>(1,1)</drawSize>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<skyfaller>
<movementType>Accelerate</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>1</motesPerCell>
<cameraShake>1</cameraShake>
<angleCurve>
<points>
<li>(0,0)</li>
<li>(1, 1)</li>
</points>
</angleCurve>
<spawnThing>WULA_Holographic_Flag_Building</spawnThing>
</skyfaller>
<comps>
<li Class="CompProperties_Effecter">
<effecterDef>Smoke_Joint</effecterDef>
</li>
</comps>
</ThingDef>
<ThingDef Name="WULA_Holographic_Flag_Building" ParentName="BuildingBase">
<defName>WULA_Holographic_Flag_Building</defName>
<label>P.I.A全息旗帜</label>
<description>乌拉帝国行星封锁机关的全息旗帜投影,能激励附近的乌拉星人更加凶狠地战斗。这台投影仪的底座附带了一个拒止护盾,可以反射大部分的敌方射弹,己方的开火不受影响。</description>
<thingClass>WulaFallenEmpire.Building_ExtraGraphics</thingClass>
<preventDroppingThingsOn>true</preventDroppingThingsOn>
<altitudeLayer>Building</altitudeLayer>
<pathCost>50</pathCost>
<blockWind>true</blockWind>
<passability>PassThroughOnly</passability>
<fillPercent>1</fillPercent>
<size>(1,1)</size>
<drawHighlight>true</drawHighlight>
<tradeability>None</tradeability>
<highlightColor>(0.56, 0.62, 0.9)</highlightColor>
<uiIconPath>Wula/Building/Flag/WULA_Flag_Building_A</uiIconPath>
<rotatable>false</rotatable>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_Mount</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(1,1)</drawSize>
</graphicData>
<costList>
<WULA_Alloy>4</WULA_Alloy>
</costList>
<statBases>
<MaxHitPoints>50</MaxHitPoints>
<Flammability>0.5</Flammability>
<WorkToBuild>1000</WorkToBuild>
<Mass>5</Mass>
</statBases>
<tickerType>Normal</tickerType>
<canOverlapZones>true</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<defaultPlacingRot>North</defaultPlacingRot>
<selectable>true</selectable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<soundImpactDefault>BulletImpact_Metal</soundImpactDefault>
<preventSkyfallersLandingOn>true</preventSkyfallersLandingOn>
<drawerType>RealtimeOnly</drawerType>
<repairEffect>ConstructMetal</repairEffect>
<forceDebugSpawnable>true</forceDebugSpawnable>
<!-- <designationCategory>WULA_Buildings</designationCategory> -->
<building>
<expandHomeArea>false</expandHomeArea>
<destroySound>BuildingDestroyed_Metal_Big</destroySound>
<paintable>true</paintable>
<isInert>true</isInert>
</building>
<modExtensions>
<li Class="WulaFallenEmpire.ExtraGraphicsExtension">
<globalHoverSpeed>0</globalHoverSpeed>
<globalHoverIntensity>0</globalHoverIntensity>
<graphicLayers>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_A</texturePath>
<shaderName>MoteGlow</shaderName>
<scale>(3,3)</scale>
<drawOrder>0</drawOrder>
<offset>(0,1,2)</offset>
<hoverSpeed>1.5</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0.2</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_Mount</texturePath>
<shaderName>Transparent</shaderName>
<scale>(1,1)</scale>
<drawOrder>1</drawOrder>
<offset>(0,1,0)</offset>
<hoverSpeed>0</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
</graphicLayers>
</li>
</modExtensions>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AreaShield">
<radius>12</radius>
<baseHitPoints>200</baseHitPoints>
<rechargeDelay>2400</rechargeDelay>
<rechargeHitPointsIntervalTicks>30</rechargeHitPointsIntervalTicks>
<!-- 效果器配置 -->
<absorbEffecter>Interceptor_BlockedProjectile</absorbEffecter>
<interceptEffecter>Interceptor_BlockedProjectile</interceptEffecter>
<breakEffecter>Shield_Break</breakEffecter>
<reactivateEffecter>BulletShieldGenerator_Reactivate</reactivateEffecter>
<color>(0.9, 0.2, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
<!-- 拦截设置 -->
<interceptGroundProjectiles>true</interceptGroundProjectiles>
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles>
<interceptAirProjectiles>true</interceptAirProjectiles>
<!-- 反射设置 -->
<canReflect>true</canReflect>
<reflectChance>0.5</reflectChance>
<reflectAngleRange>30</reflectAngleRange>
<reflectCost>0</reflectCost>
<reflectEffecter>Interceptor_BlockedProjectile</reflectEffecter>
</li>
<li Class="WulaFallenEmpire.CompProperties_GiveHediffsInRange">
<range>15</range>
<hediff>Wula_Holographic_Flag_Hediff</hediff>
<initialSeverity>0.5</initialSeverity>
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
<checkIntervalTicks>120</checkIntervalTicks>
<hediffDurationTicks>125</hediffDurationTicks>
<allowedRaces>
<li>WulaSpecies</li>
</allowedRaces>
<affectAllies>true</affectAllies>
<affectEnemies>false</affectEnemies>
<affectNeutrals>false</affectNeutrals>
</li>
<li Class="WulaFallenEmpire.CompProperties_FactionSetter">
<!-- <factionDef>Mechanoid</factionDef> 不写默认玩家派系-->
<usePlayerFactionIfNull>true</usePlayerFactionIfNull>
<overrideExistingFaction>false</overrideExistingFaction>
</li>
<li Class="CompProperties_Glower">
<glowRadius>3</glowRadius>
<glowColor>(120,240,252,0)</glowColor>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Skyfaller">
<defName>WULA_Support_AreaTeleporter_Skyfaller</defName>
<label>P.I.A全息旗帜附区域传送器落地中</label>
<skyfaller>
<spawnThing>WULA_Support_AreaTeleporter</spawnThing>
</skyfaller>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Building">
<defName>WULA_Support_AreaTeleporter</defName>
<label>P.I.A全息旗帜附区域传送器</label>
<description>乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个区域传送器,可以使得机械乌拉在旗帜区域内传送。\n\n在工作一段时间后该系统将自行烧毁。</description>
<modExtensions Inherit="False">
<li Class="WulaFallenEmpire.ExtraGraphicsExtension">
<globalHoverSpeed>0</globalHoverSpeed>
<globalHoverIntensity>0</globalHoverIntensity>
<graphicLayers>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_C</texturePath>
<shaderName>MoteGlow</shaderName>
<scale>(3,3)</scale>
<drawOrder>0</drawOrder>
<offset>(0,1,2)</offset>
<hoverSpeed>1.5</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0.2</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_Mount</texturePath>
<shaderName>Transparent</shaderName>
<scale>(1,1)</scale>
<drawOrder>1</drawOrder>
<offset>(0,1,0)</offset>
<hoverSpeed>0</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
</graphicLayers>
</li>
</modExtensions>
<comps>
<li Class="WulaFallenEmpire.CompProperties_CustomRadius">
<radius>20</radius> <!-- 半径大小 -->
<color>(1, 1, 1)</color> <!-- 绿色圆圈 -->
<radiusOffset>0</radiusOffset> <!-- 半径偏移 -->
<showInGUI>true</showInGUI>
<label>传送范围</label>
<description>区域传送器提供的传送范围</description>
<defaultVisible>true</defaultVisible>
</li>
<li Class="CompProperties_Lifespan">
<lifespanTicks>3600</lifespanTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaTeleporter">
<teleportRadius>20</teleportRadius>
<stunTicks>60</stunTicks>
<allowedRaces>
<li>WulaSpecies</li>
</allowedRaces>
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
<entryEffecter>Skip_Entry</entryEffecter>
<exitEffecter>Skip_Exit</exitEffecter>
<teleportSound>Psycast_Skip_Entry</teleportSound>
</li>
</comps>
</ThingDef>
</Defs>

View File

@@ -2176,290 +2176,4 @@
</li>
</comps>
</ThingDef>
<ThingDef Name="WULA_Holographic_Flag_Skyfaller" ParentName="SkyfallerBase">
<defName>WULA_Holographic_Flag_Building_Skyfaller</defName>
<label>P.I.A全息旗帜落地中</label>
<size>(1,1)</size>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_Mount_Incoming</texPath>
<graphicClass>Graphic_Single</graphicClass>
<shaderType>MoteGlow</shaderType>
<drawSize>(1,1)</drawSize>
<damageData>
<enabled>false</enabled>
</damageData>
</graphicData>
<skyfaller>
<movementType>Accelerate</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>1</motesPerCell>
<cameraShake>1</cameraShake>
<angleCurve>
<points>
<li>(0,0)</li>
<li>(1, 1)</li>
</points>
</angleCurve>
<spawnThing>WULA_Holographic_Flag_Building</spawnThing>
</skyfaller>
<comps>
<li Class="CompProperties_Effecter">
<effecterDef>Smoke_Joint</effecterDef>
</li>
</comps>
</ThingDef>
<ThingDef Name="WULA_Holographic_Flag_Building" ParentName="BuildingBase">
<defName>WULA_Holographic_Flag_Building</defName>
<label>P.I.A全息旗帜</label>
<description>乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。</description>
<thingClass>WulaFallenEmpire.Building_ExtraGraphics</thingClass>
<preventDroppingThingsOn>true</preventDroppingThingsOn>
<altitudeLayer>Building</altitudeLayer>
<pathCost>50</pathCost>
<blockWind>true</blockWind>
<passability>PassThroughOnly</passability>
<fillPercent>1</fillPercent>
<size>(1,1)</size>
<drawHighlight>true</drawHighlight>
<tradeability>None</tradeability>
<highlightColor>(0.56, 0.62, 0.9)</highlightColor>
<uiIconPath>Wula/Building/Flag/WULA_Flag_Building_A</uiIconPath>
<rotatable>false</rotatable>
<graphicData>
<texPath>Wula/Building/Flag/WULA_Flag_Building_Mount</texPath>
<graphicClass>Graphic_Single</graphicClass>
<drawSize>(1,1)</drawSize>
</graphicData>
<costList>
<Steel>1</Steel>
</costList>
<statBases>
<MaxHitPoints>50</MaxHitPoints>
<Flammability>0.5</Flammability>
<WorkToBuild>1000</WorkToBuild>
<Mass>5</Mass>
</statBases>
<tickerType>Normal</tickerType>
<canOverlapZones>true</canOverlapZones>
<hasInteractionCell>false</hasInteractionCell>
<defaultPlacingRot>North</defaultPlacingRot>
<selectable>true</selectable>
<terrainAffordanceNeeded>Light</terrainAffordanceNeeded>
<soundImpactDefault>BulletImpact_Metal</soundImpactDefault>
<preventSkyfallersLandingOn>true</preventSkyfallersLandingOn>
<drawerType>RealtimeOnly</drawerType>
<repairEffect>ConstructMetal</repairEffect>
<forceDebugSpawnable>true</forceDebugSpawnable>
<!-- <designationCategory>WULA_Buildings</designationCategory> -->
<building>
<expandHomeArea>false</expandHomeArea>
<destroySound>BuildingDestroyed_Metal_Big</destroySound>
<paintable>true</paintable>
<isInert>true</isInert>
</building>
<modExtensions>
<li Class="WulaFallenEmpire.ExtraGraphicsExtension">
<globalHoverSpeed>0</globalHoverSpeed>
<globalHoverIntensity>0</globalHoverIntensity>
<graphicLayers>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_A</texturePath>
<shaderName>MoteGlow</shaderName>
<scale>(3,3)</scale>
<drawOrder>0</drawOrder>
<offset>(0,1,2)</offset>
<hoverSpeed>1.5</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0.2</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_Mount</texturePath>
<shaderName>Transparent</shaderName>
<scale>(1,1)</scale>
<drawOrder>1</drawOrder>
<offset>(0,1,0)</offset>
<hoverSpeed>0</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
</graphicLayers>
</li>
</modExtensions>
<comps>
<li Class="WulaFallenEmpire.CompProperties_GiveHediffsInRange">
<range>15</range>
<hediff>Wula_Holographic_Flag_Hediff</hediff>
<initialSeverity>0.5</initialSeverity>
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
<checkIntervalTicks>120</checkIntervalTicks>
<hediffDurationTicks>125</hediffDurationTicks>
<allowedRaces>
<li>WulaSpecies</li>
</allowedRaces>
<affectAllies>true</affectAllies>
<affectEnemies>false</affectEnemies>
<affectNeutrals>false</affectNeutrals>
</li>
<li Class="WulaFallenEmpire.CompProperties_FactionSetter">
<!-- <factionDef>Mechanoid</factionDef> 不写默认玩家派系-->
<usePlayerFactionIfNull>true</usePlayerFactionIfNull>
<overrideExistingFaction>false</overrideExistingFaction>
</li>
<li Class="CompProperties_Glower">
<glowRadius>3</glowRadius>
<glowColor>(120,240,252,0)</glowColor>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Skyfaller">
<defName>WULA_Support_Shield_Projection_Skyfaller</defName>
<label>P.I.A全息旗帜附拒止护盾落地中</label>
<skyfaller>
<spawnThing>WULA_Support_Shield</spawnThing>
</skyfaller>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Building">
<defName>WULA_Support_Shield</defName>
<label>P.I.A全息旗帜附拒止护盾</label>
<description>乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个大型拒止护盾,可以反射所有的敌方射弹,己方的开火不受影响。\n\n在工作一段时间后该系统将自行烧毁。</description>
<modExtensions Inherit="False">
<li Class="WulaFallenEmpire.ExtraGraphicsExtension">
<globalHoverSpeed>0</globalHoverSpeed>
<globalHoverIntensity>0</globalHoverIntensity>
<graphicLayers>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_B</texturePath>
<shaderName>MoteGlow</shaderName>
<scale>(3,3)</scale>
<drawOrder>0</drawOrder>
<offset>(0,1,2)</offset>
<hoverSpeed>1.5</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0.2</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_Mount</texturePath>
<shaderName>Transparent</shaderName>
<scale>(1,1)</scale>
<drawOrder>1</drawOrder>
<offset>(0,1,0)</offset>
<hoverSpeed>0</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
</graphicLayers>
</li>
</modExtensions>
<comps>
<li Class="CompProperties_Lifespan">
<lifespanTicks>3600</lifespanTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaShield">
<radius>12</radius>
<baseHitPoints>150000</baseHitPoints>
<rechargeDelay>2400</rechargeDelay>
<rechargeHitPointsIntervalTicks>30</rechargeHitPointsIntervalTicks>
<!-- 效果器配置 -->
<absorbEffecter>Interceptor_BlockedProjectile</absorbEffecter>
<interceptEffecter>Interceptor_BlockedProjectile</interceptEffecter>
<breakEffecter>Shield_Break</breakEffecter>
<reactivateEffecter>BulletShieldGenerator_Reactivate</reactivateEffecter>
<color>(0.9, 0.2, 0.2, 0.5)</color> <!-- 护盾气泡的颜色 (RGBA) -->
<!-- 拦截设置 -->
<interceptGroundProjectiles>true</interceptGroundProjectiles>
<interceptNonHostileProjectiles>false</interceptNonHostileProjectiles>
<interceptAirProjectiles>true</interceptAirProjectiles>
<!-- 反射设置 -->
<canReflect>true</canReflect>
<reflectChance>1</reflectChance>
<reflectAngleRange>30</reflectAngleRange>
<reflectCost>0</reflectCost>
<reflectEffecter>Interceptor_BlockedProjectile</reflectEffecter>
</li>
</comps>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Skyfaller">
<defName>WULA_Support_AreaTeleporter_Skyfaller</defName>
<label>P.I.A全息旗帜附区域传送器落地中</label>
<skyfaller>
<spawnThing>WULA_Support_AreaTeleporter</spawnThing>
</skyfaller>
</ThingDef>
<ThingDef ParentName="WULA_Holographic_Flag_Building">
<defName>WULA_Support_AreaTeleporter</defName>
<label>P.I.A全息旗帜附区域传送器</label>
<description>乌拉帝国行星封锁机关的全息旗帜,除了宣誓主权外,也能激励附近的乌拉星人更加凶狠地战斗。这面旗帜的底座附带了一个区域传送器,可以使得机械乌拉在旗帜区域内传送。\n\n在工作一段时间后该系统将自行烧毁。</description>
<modExtensions Inherit="False">
<li Class="WulaFallenEmpire.ExtraGraphicsExtension">
<globalHoverSpeed>0</globalHoverSpeed>
<globalHoverIntensity>0</globalHoverIntensity>
<graphicLayers>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_C</texturePath>
<shaderName>MoteGlow</shaderName>
<scale>(3,3)</scale>
<drawOrder>0</drawOrder>
<offset>(0,1,2)</offset>
<hoverSpeed>1.5</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0.2</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
<li>
<texturePath>Wula/Building/Flag/WULA_Flag_Building_Mount</texturePath>
<shaderName>Transparent</shaderName>
<scale>(1,1)</scale>
<drawOrder>1</drawOrder>
<offset>(0,1,0)</offset>
<hoverSpeed>0</hoverSpeed> <!-- 比全局慢 -->
<hoverIntensity>0</hoverIntensity> <!-- 比全局弱 -->
<hoverPhase>0</hoverPhase>
</li>
</graphicLayers>
</li>
</modExtensions>
<comps>
<li Class="WulaFallenEmpire.CompProperties_CustomRadius">
<radius>20</radius> <!-- 半径大小 -->
<color>(1, 1, 1)</color> <!-- 绿色圆圈 -->
<radiusOffset>0</radiusOffset> <!-- 半径偏移 -->
<showInGUI>true</showInGUI>
<label>传送范围</label>
<description>区域传送器提供的传送范围</description>
<defaultVisible>true</defaultVisible>
</li>
<li Class="CompProperties_Lifespan">
<lifespanTicks>3600</lifespanTicks>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaTeleporter">
<teleportRadius>20</teleportRadius>
<stunTicks>60</stunTicks>
<allowedRaces>
<li>WulaSpecies</li>
</allowedRaces>
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
<entryEffecter>Skip_Entry</entryEffecter>
<exitEffecter>Skip_Exit</exitEffecter>
<teleportSound>Psycast_Skip_Entry</teleportSound>
</li>
</comps>
</ThingDef>
</Defs>

View File

@@ -1132,7 +1132,7 @@
<targetBuildingDef>WULA_Cat_Bunker</targetBuildingDef>
<gizmoLabel>部署为乌拉猫猫地堡</gizmoLabel>
<gizmoDesc>乌拉猫猫们把地堡扔在地上然后钻进去重新转变为建筑。每一次转变为建筑后都会有24小时的冷却时间在此期间不允许重新变为BUk-1"地堡猫猫"。</gizmoDesc>
<gizmoIconPath>Wula/UI/Commands/WULA_TransformToBuilding</gizmoIconPath>
<gizmoIconPath>Wula/UI/Commands/WULA_BunkerCat</gizmoIconPath>
</li>
</comps>
</AlienRace.ThingDef_AlienRace>
@@ -1699,6 +1699,21 @@
<toggleDescription>MFm-2"陆行舰"可以将舰身稍微下沉一些并创造低压区,以碾压靠近的敌军——这同时会使得它伤害附近所有的散落物品。</toggleDescription>
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
</li>
<li Class="WulaFallenEmpire.CompProperties_AreaTeleporter">
<teleportRadius>20</teleportRadius>
<stunTicks>60</stunTicks>
<allowedRaces>
<li>WulaSpecies</li>
</allowedRaces>
<onlyPawnsInSameFaction>true</onlyPawnsInSameFaction>
<entryEffecter>Skip_Entry</entryEffecter>
<exitEffecter>Skip_Exit</exitEffecter>
<teleportSound>Psycast_Skip_Entry</teleportSound>
</li>
</comps>
</AlienRace.ThingDef_AlienRace>
<ThingDef ParentName="BaseMechanoidWalker">

View File

@@ -6,33 +6,4 @@
<WULA_Colony_Promotion.questDescriptionRules.rulesStrings>
<li>questDescription->殖民地已经承接了视察任务。\n\n行星封锁机关的总控AI已经派遣了自己的一个分体和护卫队抵达殖民地。考察持续12天她会检查殖民地方方面面的运转情况你需要确保其心情始终高于25%。考察完成后,她和卫队会搭乘穿梭机离开,如果一切顺利你们将获得殖民地晋升的机会,以解锁更多的许可科技。\n\n小心附近的敌对派系已经知道了殖民地来了一个大人物这些劫掠者会尝试袭击殖民地并抓住这个分体你可能需要面对大量袭击</li>
</WULA_Colony_Promotion.questDescriptionRules.rulesStrings>
<WULA_Colony_Promotion.LetterLabelFactionBecameHostile.slateRef>任务失败:[resolvedQuestName]</WULA_Colony_Promotion.LetterLabelFactionBecameHostile.slateRef>
<WULA_Colony_Promotion.InspectStringDepartShuttle.slateRef>应该乘坐穿梭机离开</WULA_Colony_Promotion.InspectStringDepartShuttle.slateRef>
<WULA_Colony_Promotion.LetterTextFactionBecameHostile.slateRef>[faction_name]开始敌视你。</WULA_Colony_Promotion.LetterTextFactionBecameHostile.slateRef>
<WULA_Colony_Promotion.LetterLabelShuttleDestroyed.slateRef>穿梭机被破坏</WULA_Colony_Promotion.LetterLabelShuttleDestroyed.slateRef>
<WULA_Colony_Promotion.LetterTextShuttleDestroyed.slateRef>被派遣来运输[asker_nameDef]的穿梭机已被破坏。</WULA_Colony_Promotion.LetterTextShuttleDestroyed.slateRef>
<WULA_Colony_Promotion.LetterLabelAskerArrived.slateRef>[asker_nameDef]已抵达</WULA_Colony_Promotion.LetterLabelAskerArrived.slateRef>
<WULA_Colony_Promotion.LetterTextAskerArrived.slateRef>[asker_nameDef]的分体和她的卫队已经抵达殖民地。\n\n你必须在穿梭机抵达前[shuttleDelayTicks_duration]内为[asker_objective]提供护卫并且满足[asker_possessive]各种需求。</WULA_Colony_Promotion.LetterTextAskerArrived.slateRef>
<WULA_Colony_Promotion.LetterLabelGuestDied.slateRef>宾客{SUBJECT_definite}死亡。</WULA_Colony_Promotion.LetterLabelGuestDied.slateRef>
<WULA_Colony_Promotion.LetterTextGuestDied.slateRef>需要你护卫的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextGuestDied.slateRef>
<WULA_Colony_Promotion.LetterLabelShuttleArrived.slateRef>穿梭机已抵达</WULA_Colony_Promotion.LetterLabelShuttleArrived.slateRef>
<WULA_Colony_Promotion.LetterTextShuttleArrived.slateRef>穿梭机已经前来迎接[asker_nameDef]。</WULA_Colony_Promotion.LetterTextShuttleArrived.slateRef>
<WULA_Colony_Promotion.LetterLabelSubjectUnhappy.slateRef>{SUBJECT_bestRoyalTitle}情绪低落</WULA_Colony_Promotion.LetterLabelSubjectUnhappy.slateRef>
<WULA_Colony_Promotion.LetterTextSubjectUnhappy.slateRef>需要你护卫和满足需求的{SUBJECT_definite},其情绪值已经长时间低于最低限度[lodgersMoodThreshold]。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextSubjectUnhappy.slateRef>
<WULA_Colony_Promotion.LetterLabelGuestCaptured.slateRef>宾客{SUBJECT_definite}被俘。</WULA_Colony_Promotion.LetterLabelGuestCaptured.slateRef>
<WULA_Colony_Promotion.LetterTextGuestCaptured.slateRef>需要你护卫的{SUBJECT_definite}已经被俘虏。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextGuestCaptured.slateRef>
<WULA_Colony_Promotion.LetterLabelUnauthorizedSurgery.slateRef>未授权手术:{SUBJECT_definite}</WULA_Colony_Promotion.LetterLabelUnauthorizedSurgery.slateRef>
<WULA_Colony_Promotion.LetterTextUnauthorizedSurgery.slateRef>需要你护卫的{SUBJECT_definite}接受了一场未授权的多余手术。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextUnauthorizedSurgery.slateRef>
<WULA_Colony_Promotion.root.nodes.lodgersXenogermAbsorbed.node.nodes.Letter.label.slateRef>异种胚芽被吸收</WULA_Colony_Promotion.root.nodes.lodgersXenogermAbsorbed.node.nodes.Letter.label.slateRef>
<WULA_Colony_Promotion.root.nodes.lodgersXenogermAbsorbed.node.nodes.Letter.text.slateRef>指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。[failLetterEndingCommon]</WULA_Colony_Promotion.root.nodes.lodgersXenogermAbsorbed.node.nodes.Letter.text.slateRef>
<WULA_Colony_Promotion.LetterLabelGuestLost.slateRef>宾客失踪:{SUBJECT_definite}</WULA_Colony_Promotion.LetterLabelGuestLost.slateRef>
<WULA_Colony_Promotion.LetterTextGuestLost.slateRef>需要你护卫的{SUBJECT_definite}失踪在你的殖民地。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextGuestLost.slateRef>
<WULA_Colony_Promotion.LetterLabelShuttleDestroyed.slateRef>穿梭机已被毁</WULA_Colony_Promotion.LetterLabelShuttleDestroyed.slateRef>
<WULA_Colony_Promotion.LetterTextShuttleDestroyed.slateRef>前来迎接[asker_faction_leaderTitle]的穿梭机被摧毁了。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextShuttleDestroyed.slateRef>
<WULA_Colony_Promotion.LetterLabelLodgerRanWild.slateRef>宾客失踪:{SUBJECT_definite}</WULA_Colony_Promotion.LetterLabelLodgerRanWild.slateRef>
<WULA_Colony_Promotion.LetterTextLodgerRanWild.slateRef>需要你护卫的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextLodgerRanWild.slateRef>
<WULA_Colony_Promotion.LetterLabelShuttleSentUnsatisfied.slateRef>任务失败:[resolvedQuestName]</WULA_Colony_Promotion.LetterLabelShuttleSentUnsatisfied.slateRef>
<WULA_Colony_Promotion.LetterTextShuttleSentUnsatisfied.slateRef>前来迎接[asker_faction_leaderTitle]的穿梭机没有接到[asker_objective]。[asker_pronoun]现在只能走回去。[failLetterEndingCommon]</WULA_Colony_Promotion.LetterTextShuttleSentUnsatisfied.slateRef>
</LanguageData>

View File

@@ -6,30 +6,5 @@
<WULA_Intro_Spy.questDescriptionRules.rulesStrings>
<li>questDescription->乌拉帝国行星封锁机关的总控AI向殖民地发送了一个请求。一位乌拉帝国密探已经暴露正在遭受其他派系追杀——密探手无寸铁且携带重要信息殖民地需要掩护它直到乌拉帝国的穿梭机抵达并将其接走。虽然对方未透露更多信息不过她指明袭击不会太剧烈密探已经甩掉了大部分敌人。</li>
</WULA_Intro_Spy.questDescriptionRules.rulesStrings>
<WULA_Intro_Spy.LetterLabelChasing.slateRef>{BASELABEL} 追捕[../asker_nameDef]</WULA_Intro_Spy.LetterLabelChasing.slateRef>
<WULA_Intro_Spy.LetterTextChasing.slateRef>{BASETEXT}\n\n[enemyFaction_pawnsPlural]来此追捕[../asker_nameDef]。</WULA_Intro_Spy.LetterTextChasing.slateRef>
<WULA_Intro_Spy.InspectStringDepartShuttle.slateRef>应该乘坐穿梭机出发</WULA_Intro_Spy.InspectStringDepartShuttle.slateRef>
<WULA_Intro_Spy.LetterLabelShuttleArrived.slateRef>穿梭机已抵达</WULA_Intro_Spy.LetterLabelShuttleArrived.slateRef>
<WULA_Intro_Spy.LetterTextShuttleArrived.slateRef>前来迎接[asker_nameDef]的穿梭机已抵达。</WULA_Intro_Spy.LetterTextShuttleArrived.slateRef>
<WULA_Intro_Spy.LetterLabelGuestDied.slateRef>宾客已死亡:{SUBJECT_definite}</WULA_Intro_Spy.LetterLabelGuestDied.slateRef>
<WULA_Intro_Spy.LetterTextGuestDied.slateRef>需要你小心保护的{SUBJECT_definite}已经死亡。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextGuestDied.slateRef>
<WULA_Intro_Spy.root.nodes.askerLeftBehind.node.nodes.Letter.label.slateRef>宾客被遗弃:{SUBJECT_definite}</WULA_Intro_Spy.root.nodes.askerLeftBehind.node.nodes.Letter.label.slateRef>
<WULA_Intro_Spy.root.nodes.askerLeftBehind.node.nodes.Letter.text.slateRef>需要你小心保护的{SUBJECT_definite}被遗弃。[failLetterEndingCommon]</WULA_Intro_Spy.root.nodes.askerLeftBehind.node.nodes.Letter.text.slateRef>
<WULA_Intro_Spy.LetterLabelUnauthorizedSurgery.slateRef>未授权手术:{SUBJECT_definite}</WULA_Intro_Spy.LetterLabelUnauthorizedSurgery.slateRef>
<WULA_Intro_Spy.LetterTextUnauthorizedSurgery.slateRef>需要你小心保护的{SUBJECT_definite}接受了一次未授权的额外手术。因为你违规在先,[asker_pronoun]将要离开此处。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextUnauthorizedSurgery.slateRef>
<WULA_Intro_Spy.root.nodes.askerXenogermAbsorbed.node.nodes.Letter.label.slateRef>异种胚芽被吸收:{SUBJECT_definite}</WULA_Intro_Spy.root.nodes.askerXenogermAbsorbed.node.nodes.Letter.label.slateRef>
<WULA_Intro_Spy.root.nodes.askerXenogermAbsorbed.node.nodes.Letter.text.slateRef>指定由你保护的{SUBJECT_definite}在你的殖民地被吸收了异种胚芽。这是一种侵犯行为,{SUBJECT_pronoun}现在将会直接离开[failLetterEndingCommon]。</WULA_Intro_Spy.root.nodes.askerXenogermAbsorbed.node.nodes.Letter.text.slateRef>
<WULA_Intro_Spy.LetterLabelCaptured.slateRef>已被俘:{SUBJECT_definite}</WULA_Intro_Spy.LetterLabelCaptured.slateRef>
<WULA_Intro_Spy.LetterTextCaptured.slateRef>需要你小心保护的{SUBJECT_definite}已被俘虏。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextCaptured.slateRef>
<WULA_Intro_Spy.LetterLabelGuestLost.slateRef>宾客失踪:{SUBJECT_definite}</WULA_Intro_Spy.LetterLabelGuestLost.slateRef>
<WULA_Intro_Spy.LetterTextGuestLost.slateRef>需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextGuestLost.slateRef>
<WULA_Intro_Spy.LetterLabelLodgerRanWild.slateRef>宾客失踪:{SUBJECT_definite}</WULA_Intro_Spy.LetterLabelLodgerRanWild.slateRef>
<WULA_Intro_Spy.LetterTextLodgerRanWild.slateRef>需要你小心保护的{SUBJECT_definite}在你的殖民地回归自然。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextLodgerRanWild.slateRef>
<WULA_Intro_Spy.LetterLabelShuttleDestroyed.slateRef>穿梭机被毁</WULA_Intro_Spy.LetterLabelShuttleDestroyed.slateRef>
<WULA_Intro_Spy.LetterTextShuttleDestroyed.slateRef>前来迎接[asker_nameDef]的穿梭机已被毁。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextShuttleDestroyed.slateRef>
<WULA_Intro_Spy.root.nodes.pickupShipThingLeftBehind.node.nodes.Letter.label.slateRef>穿梭机被遗弃</WULA_Intro_Spy.root.nodes.pickupShipThingLeftBehind.node.nodes.Letter.label.slateRef>
<WULA_Intro_Spy.root.nodes.pickupShipThingLeftBehind.node.nodes.Letter.text.slateRef>前来迎接[asker_nameDef]的穿梭机已被遗弃。[asker_pronoun]现在只能走回去了。</WULA_Intro_Spy.root.nodes.pickupShipThingLeftBehind.node.nodes.Letter.text.slateRef>
<WULA_Intro_Spy.LetterLabelQuestFailed.slateRef>任务失败:[resolvedQuestName]</WULA_Intro_Spy.LetterLabelQuestFailed.slateRef>
<WULA_Intro_Spy.LetterTextQuestFailed.slateRef>前来迎接[asker_nameDef]的穿梭机在离开时因为一些原因落下了[asker_objective]。[asker_pronoun]现在只能走回去了。[failLetterEndingCommon]</WULA_Intro_Spy.LetterTextQuestFailed.slateRef>
</LanguageData>

View File

@@ -306,4 +306,9 @@
<WULA_SwitchWeapon_Desc>扔掉当前武器,并装备该单位的初始武器</WULA_SwitchWeapon_Desc>
<WULA_WeaponSwitched>{0} 更换了武器为 {1}</WULA_WeaponSwitched>
<WULA_NoWeaponAvailable>{0} 没有可用的武器类型</WULA_NoWeaponAvailable>
<WULA_HideAreaShieldLabel>隐藏区域反射盾</WULA_HideAreaShieldLabel>
<WULA_ShowAreaShieldLabel>显示区域反射盾</WULA_ShowAreaShieldLabel>
<WULA_HideAreaShieldDesc>隐藏该单位的区域反射盾,这不会影响其实际功能,仅影响视觉效果</WULA_HideAreaShieldDesc>
<WULA_ShowAreaShieldDesc>显示该单位的区域反射盾,这不会影响其实际功能,仅影响视觉效果</WULA_ShowAreaShieldDesc>
</LanguageData>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 KiB

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 KiB

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -2,6 +2,7 @@ using RimWorld;
using System.Collections.Generic;
using UnityEngine;
using Verse;
using System.Text;
namespace WulaFallenEmpire
{
@@ -14,6 +15,11 @@ namespace WulaFallenEmpire
private ThingDef restoreBuildingDef;
private int restoreMechanoidCount;
// 缓存校验结果
private bool? lastValidationResult = null;
private string lastValidationReason = null;
private int lastValidationTick = 0;
public override void Initialize(CompProperties props)
{
base.Initialize(props);
@@ -46,9 +52,12 @@ namespace WulaFallenEmpire
};
// 检查是否可以转换
if (!CanTransformNow())
string failReason;
bool canTransform = CanTransformNow(out failReason);
if (!canTransform)
{
command.Disable("无法在当前位置转换");
command.Disable(failReason);
}
yield return command;
@@ -57,12 +66,38 @@ namespace WulaFallenEmpire
private string GetGizmoDescription()
{
string desc = Props.gizmoDesc;
StringBuilder sb = new StringBuilder();
sb.Append(Props.gizmoDesc);
if (restoreBuildingDef != null)
{
desc += $"\n\n将恢复为: {restoreBuildingDef.LabelCap}";
sb.AppendLine();
sb.AppendLine();
sb.Append($"将恢复为: {restoreBuildingDef.LabelCap}");
if (restoreMechanoidCount > 0)
{
sb.AppendLine();
sb.Append($"恢复机械族储存: {restoreMechanoidCount}");
}
}
return desc;
// 添加空间校验信息
string failReason;
bool isValid = CanTransformNow(out failReason);
sb.AppendLine();
sb.AppendLine();
if (isValid)
{
sb.Append("<color=green>✓ 当前位置可以放置建筑</color>");
}
else
{
sb.Append($"<color=red>✗ {failReason}</color>");
}
return sb.ToString();
}
private Texture2D GetGizmoIcon()
@@ -74,25 +109,84 @@ namespace WulaFallenEmpire
return TexCommand.Install;
}
private bool CanTransformNow()
/// <summary>
/// 检查是否可以转换(带详细失败原因)
/// </summary>
private bool CanTransformNow(out string failReason)
{
if (parent == null || !parent.Spawned)
return false;
failReason = null;
// 检查空间是否足够
if (parent == null || !parent.Spawned)
{
failReason = "单位未生成或已销毁";
return false;
}
// 确定要生成的建筑类型
ThingDef buildingDef = restoreBuildingDef ?? Props.targetBuildingDef;
if (buildingDef == null)
return false;
foreach (IntVec3 cell in GenAdj.CellsOccupiedBy(Pawn.Position, Rot4.North, buildingDef.Size))
{
if (!cell.InBounds(Pawn.Map) || !cell.Walkable(Pawn.Map) || cell.GetEdifice(Pawn.Map) != null)
failReason = "无法确定目标建筑类型";
return false;
}
// 使用缓存优化性能每60 tick检查一次
if (lastValidationResult.HasValue && Find.TickManager.TicksGame - lastValidationTick < 60)
{
failReason = lastValidationReason;
return lastValidationResult.Value;
}
// 执行完整的空间校验排除被转换的Pawn本身
bool isValid = TransformValidationUtility.CanPlaceBuildingAt(
buildingDef,
Pawn.Position,
Pawn.Map,
Pawn.Faction,
Pawn, // 排除被转换的Pawn本身
out failReason
);
// 更新缓存
lastValidationResult = isValid;
lastValidationReason = failReason;
lastValidationTick = Find.TickManager.TicksGame;
return isValid;
}
/// <summary>
/// 查找最近的可用位置
/// </summary>
private bool TryFindNearbyValidPosition(out IntVec3 validPosition, out string failReason)
{
validPosition = IntVec3.Invalid;
failReason = null;
ThingDef buildingDef = restoreBuildingDef ?? Props.targetBuildingDef;
if (buildingDef == null)
{
failReason = "无法确定目标建筑类型";
return false;
}
// 在周围搜索可用位置
for (int radius = 1; radius <= 5; radius++)
{
foreach (IntVec3 cell in GenRadial.RadialPatternInRadius(radius))
{
return false;
IntVec3 checkPos = Pawn.Position + cell;
if (TransformValidationUtility.CanPlaceBuildingAt(buildingDef, checkPos, Pawn.Map, Pawn.Faction, Pawn, out failReason))
{
validPosition = checkPos;
return true;
}
}
}
return true;
failReason = "周围没有找到合适的放置位置";
return false;
}
public void TransformToBuilding()
@@ -101,7 +195,7 @@ namespace WulaFallenEmpire
return;
Map map = Pawn.Map;
IntVec3 position = Pawn.Position;
IntVec3 desiredPosition = Pawn.Position;
Faction faction = Pawn.Faction;
// 确定要生成的建筑类型
@@ -112,11 +206,29 @@ namespace WulaFallenEmpire
return;
}
// 最终校验排除被转换的Pawn本身
string failReason;
if (!TransformValidationUtility.CanPlaceBuildingAt(buildingDef, desiredPosition, map, faction, Pawn, out failReason))
{
// 尝试寻找附近的位置
IntVec3 alternativePosition;
if (TryFindNearbyValidPosition(out alternativePosition, out failReason))
{
desiredPosition = alternativePosition;
Messages.Message($"将在附近位置 {desiredPosition} 部署建筑", MessageTypeDefOf.NeutralEvent);
}
else
{
Messages.Message($"无法部署建筑: {failReason}", MessageTypeDefOf.RejectInput);
return;
}
}
// 移除Pawn
Pawn.DeSpawn(DestroyMode.Vanish);
// 生成建筑
Building newBuilding = (Building)GenSpawn.Spawn(buildingDef, position, map, WipeMode.Vanish);
Building newBuilding = (Building)GenSpawn.Spawn(buildingDef, desiredPosition, map, WipeMode.Vanish);
newBuilding.SetFaction(faction);
// 恢复机械族计数
@@ -151,20 +263,33 @@ namespace WulaFallenEmpire
Messages.Message($"{Pawn.LabelCap} 已部署为 {newBuilding.Label}", MessageTypeDefOf.PositiveEvent);
// 播放转换效果
PlayTransformEffects(position, map);
PlayTransformEffects(desiredPosition, map);
// 清除缓存
lastValidationResult = null;
lastValidationReason = null;
}
private void PlayTransformEffects(IntVec3 position, Map map)
{
//// 播放转换视觉效果
// 播放转换视觉效果
//for (int i = 0; i < 3; i++)
//{
// MoteMaker.ThrowSmoke(position.ToVector3Shifted() + new Vector3(0, 0, 0.5f), map, 1.5f);
// MoteMaker.ThrowMicroSparks(position.ToVector3Shifted(), map);
//}
}
// 每tick更新校验状态用于实时反馈
public override void CompTick()
{
base.CompTick();
//// 播放音效
//SoundDefOf.MechClusterDefeated.PlayOneShot(new TargetInfo(position, map));
// 每60 tick清除一次缓存确保校验结果实时更新
if (Find.TickManager.TicksGame % 60 == 0)
{
lastValidationResult = null;
}
}
}
}

View File

@@ -0,0 +1,218 @@
using RimWorld;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using Verse;
using System.Linq;
namespace WulaFallenEmpire
{
public static class TransformValidationUtility
{
/// <summary>
/// 检查位置是否可以放置目标建筑(通用版本)
/// </summary>
public static bool CanPlaceBuildingAt(ThingDef buildingDef, IntVec3 center, Map map, Faction faction, out string failReason)
{
return CanPlaceBuildingAt(buildingDef, center, map, faction, null, out failReason);
}
/// <summary>
/// 检查位置是否可以放置目标建筑(带忽略物体版本)
/// </summary>
public static bool CanPlaceBuildingAt(ThingDef buildingDef, IntVec3 center, Map map, Faction faction, Thing thingToIgnore, out string failReason)
{
failReason = null;
// 1. 检查建筑定义
if (buildingDef == null)
{
failReason = "目标建筑定义为空";
return false;
}
// 2. 检查建筑尺寸是否为奇数(根据您的需求)
if (!IsOddSizedBuilding(buildingDef))
{
failReason = $"建筑 {buildingDef.LabelCap} 的尺寸不是奇数,不符合放置要求";
return false;
}
// 3. 检查地图边界
if (!IsWithinMapBounds(buildingDef, center, map, out failReason))
return false;
// 4. 检查地形affordance
if (!HasValidTerrainAffordance(buildingDef, center, map, out failReason))
return false;
// 5. 检查其他建筑挤占(排除要忽略的物体)
if (!IsAreaClearOfBlockingBuildings(buildingDef, center, map, thingToIgnore, out failReason))
return false;
// 6. 检查特殊放置条件(如不可放置在水上等)
if (!MeetsSpecialPlacementConditions(buildingDef, center, map, out failReason))
return false;
// 7. 使用RimWorld原生的放置检查最终验证
if (!GenConstruct.CanPlaceBlueprintAt(buildingDef, center, Rot4.North, map, false, null, null, null))
{
failReason = "该位置不符合建筑放置要求";
return false;
}
return true;
}
/// <summary>
/// 检查建筑尺寸是否为奇数
/// </summary>
public static bool IsOddSizedBuilding(ThingDef buildingDef)
{
return buildingDef.Size.x % 2 == 1 && buildingDef.Size.z % 2 == 1;
}
/// <summary>
/// 检查地图边界
/// </summary>
private static bool IsWithinMapBounds(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
{
CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
if (!occupiedRect.InBounds(map))
{
failReason = "建筑超出地图边界";
return false;
}
failReason = null;
return true;
}
/// <summary>
/// 检查地形affordance
/// </summary>
private static bool HasValidTerrainAffordance(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
{
TerrainAffordanceDef requiredAffordance = buildingDef.terrainAffordanceNeeded;
if (requiredAffordance == null)
{
// 如果没有指定affordance要求则跳过检查
failReason = null;
return true;
}
CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
foreach (IntVec3 cell in occupiedRect)
{
if (!cell.InBounds(map))
continue;
TerrainDef terrain = map.terrainGrid.TerrainAt(cell);
if (terrain == null || !terrain.affordances.Contains(requiredAffordance))
{
failReason = $"地形 {terrain?.LabelCap ?? ""} 不支持放置 {buildingDef.LabelCap}";
return false;
}
}
failReason = null;
return true;
}
/// <summary>
/// 检查区域是否被其他建筑阻挡(排除指定物体)
/// </summary>
private static bool IsAreaClearOfBlockingBuildings(ThingDef buildingDef, IntVec3 center, Map map, Thing thingToIgnore, out string failReason)
{
CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
List<Thing> blockingThings = new List<Thing>();
foreach (IntVec3 cell in occupiedRect)
{
if (!cell.InBounds(map))
continue;
// 检查该单元格上的所有建筑
List<Thing> thingList = map.thingGrid.ThingsListAt(cell);
foreach (Thing thing in thingList)
{
// 跳过要忽略的物体如被转换的Pawn本身
if (thing == thingToIgnore)
continue;
if (thing.def.category == ThingCategory.Building || thing.def.category == ThingCategory.Pawn)
{
// 忽略蓝图和框架
if (thing.def.IsBlueprint || thing.def.IsFrame)
continue;
// 忽略被转换的Pawn本身
if (thing == thingToIgnore)
continue;
blockingThings.Add(thing);
}
}
}
if (blockingThings.Count > 0)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("以下物体阻挡了建筑放置:");
foreach (Thing thing in blockingThings)
{
sb.AppendLine($" - {thing.LabelCap}");
}
failReason = sb.ToString().TrimEnd();
return false;
}
failReason = null;
return true;
}
/// <summary>
/// 检查特殊放置条件
/// </summary>
private static bool MeetsSpecialPlacementConditions(ThingDef buildingDef, IntVec3 center, Map map, out string failReason)
{
CellRect occupiedRect = GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size);
// 检查是否在水体上
foreach (IntVec3 cell in occupiedRect)
{
if (!cell.InBounds(map))
continue;
TerrainDef terrain = map.terrainGrid.TerrainAt(cell);
if (terrain != null && (terrain.IsWater || terrain.defName.Contains("Water")))
{
failReason = "无法在水体上放置建筑";
return false;
}
// 检查是否在不可建造的地形上
if (terrain != null && !terrain.BuildableByPlayer)
{
failReason = $"地形 {terrain.LabelCap} 不可建造";
return false;
}
}
failReason = null;
return true;
}
/// <summary>
/// 获取建筑占用的所有单元格
/// </summary>
public static List<IntVec3> GetOccupiedCells(ThingDef buildingDef, IntVec3 center)
{
return GenAdj.OccupiedRect(center, Rot4.North, buildingDef.Size).Cells.ToList();
}
}
}

View File

@@ -10,12 +10,16 @@ namespace WulaFallenEmpire
[StaticConstructorOnStartup]
public class ThingComp_AreaShield : ThingComp
{
// 现有的字段保持不变...
private int lastInterceptTicks = -999999;
public int ticksToReset = 0;
public int currentHitPoints;
private bool wasNotAtFullHp = false;
private bool wasActiveLastCheck = false;
// 新增:绘制控制字段
private bool drawShield = true;
// 视觉效果变量
private float lastInterceptAngle;
private bool drawInterceptCone;
@@ -43,30 +47,51 @@ namespace WulaFallenEmpire
private const float TextureActualRingSizeFactor = 1.1601562f;
private static readonly Color InactiveColor = new Color(0.2f, 0.2f, 0.2f);
// 护盾绘制方法 - 参考原版实现
// 新增:检查是否应该显示绘制控制按钮
public bool ShouldShowDrawToggleGizmo
{
get
{
// 条件1装备且穿戴在己方pawn身上
if (IsEquipment && Wearer != null && Wearer.Faction == Faction.OfPlayer)
return true;
// 条件2固定物品且属于己方派系
if (IsStandalone && parent.Faction == Faction.OfPlayer)
return true;
return false;
}
}
// 护盾绘制方法 - 修改:添加绘制控制检查
public override void CompDrawWornExtras()
{
base.CompDrawWornExtras();
if (!IsEquipment) return; // 只有装备使用这个方法
if (!IsEquipment || !drawShield) return; // 新增绘制控制检查
DrawShield();
}
public override void PostDraw()
{
base.PostDraw();
if (IsEquipment) return; // 装备使用 CompDrawWornExtras
if (IsEquipment || !drawShield) return; // 新增绘制控制检查
DrawShield();
}
/// <summary>
/// 统一的护盾绘制方法 - 参考原版实现
/// 统一的护盾绘制方法 - 修改:添加绘制控制检查
/// </summary>
private void DrawShield()
{
if (!Active || Holder?.Map == null || Holder.Destroyed)
if (!drawShield || !Active || Holder?.Map == null || Holder.Destroyed) // 新增绘制控制检查
return;
Vector3 drawPos = GetHolderDrawPos();
drawPos.y = AltitudeLayer.MoteOverhead.AltitudeFor();
float currentAlpha = GetCurrentAlpha();
@@ -96,9 +121,8 @@ namespace WulaFallenEmpire
Graphics.DrawMesh(MeshPool.plane10, matrix, ForceFieldConeMat, 0, null, 0, MatPropertyBlock);
}
}
/// <summary>
/// 获取当前透明度 - 参考原版的多状态叠加
/// </summary>
// 现有的其他方法保持不变...
private float GetCurrentAlpha()
{
// 多个透明度来源叠加,取最大值
@@ -113,9 +137,7 @@ namespace WulaFallenEmpire
0.1f // 最小透明度
);
}
/// <summary>
/// 空闲状态透明度
/// </summary>
private float GetCurrentAlpha_Idle()
{
if (!Active) return 0f;
@@ -144,9 +166,7 @@ namespace WulaFallenEmpire
return 0f;
}
/// <summary>
/// 被选中状态透明度 - 参考原版实现
/// </summary>
private float GetCurrentAlpha_Selected()
{
// 如果被选中,显示更高的透明度
@@ -158,17 +178,13 @@ namespace WulaFallenEmpire
return 0f;
}
/// <summary>
/// 最近拦截状态透明度
/// </summary>
private float GetCurrentAlpha_RecentlyIntercepted()
{
int ticksSinceIntercept = Find.TickManager.TicksGame - lastInterceptTicks;
return Mathf.Clamp01(1f - (float)ticksSinceIntercept / 40f) * 0.3f;
}
/// <summary>
/// 拦截锥形透明度
/// </summary>
private float GetCurrentConeAlpha()
{
if (!drawInterceptCone) return 0f;
@@ -176,9 +192,7 @@ namespace WulaFallenEmpire
int ticksSinceIntercept = Find.TickManager.TicksGame - lastInterceptTicks;
return Mathf.Clamp01(1f - (float)ticksSinceIntercept / 40f) * 0.82f;
}
/// <summary>
/// 获取持有者绘制位置(回退机制)
/// </summary>
private Vector3 GetHolderDrawPos()
{
if (Holder is Pawn pawn)
@@ -224,6 +238,7 @@ namespace WulaFallenEmpire
{
base.PostPostMake();
currentHitPoints = HitPointsMax;
drawShield = true; // 默认启用绘制
}
public override void PostExposeData()
@@ -232,6 +247,7 @@ namespace WulaFallenEmpire
Scribe_Values.Look(ref lastInterceptTicks, "lastInterceptTicks", -999999);
Scribe_Values.Look(ref ticksToReset, "ticksToReset", 0);
Scribe_Values.Look(ref currentHitPoints, "currentHitPoints", 0);
Scribe_Values.Look(ref drawShield, "drawShield", true); // 新增:保存绘制状态
}
public override void CompTick()
@@ -273,6 +289,56 @@ namespace WulaFallenEmpire
}
}
// 新增绘制控制Gizmo
private Gizmo CreateDrawToggleGizmo()
{
Command_Toggle toggle = new Command_Toggle
{
defaultLabel = drawShield ? "WULA_HideAreaShieldLabel".Translate() : "WULA_ShowAreaShieldLabel".Translate(),
defaultDesc = drawShield ? "WULA_HideAreaShieldDesc".Translate() : "WULA_ShowAreaShieldDesc".Translate(),
icon = ContentFinder<Texture2D>.Get("Wula/UI/Commands/WULA_HideAreaShield"),
isActive = () => drawShield,
toggleAction = () => drawShield = !drawShield
};
return toggle;
}
public override IEnumerable<Gizmo> CompGetWornGizmosExtra()
{
EnsureInitialized();
// 原有的状态显示Gizmo
if (IsEquipment && Wearer != null && Find.Selector.SingleSelectedThing == Wearer)
{
yield return new Gizmo_AreaShieldStatus { shield = this };
// 新增:绘制控制按钮(只在符合条件的装备上显示)
if (ShouldShowDrawToggleGizmo)
{
yield return CreateDrawToggleGizmo();
}
}
}
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
EnsureInitialized();
// 原有的状态显示Gizmo
if (IsStandalone && Find.Selector.SingleSelectedThing == parent)
{
yield return new Gizmo_AreaShieldStatus { shield = this };
// 新增:绘制控制按钮(只在符合条件的固定物品上显示)
if (ShouldShowDrawToggleGizmo)
{
yield return CreateDrawToggleGizmo();
}
}
}
// 现有的其他方法保持不变...
private void ApplyCosts(int cost = 1)
{
currentHitPoints -= cost;
@@ -566,6 +632,7 @@ namespace WulaFallenEmpire
return false;
}
}
private void EnsureInitialized()
{
if (initialized) return;
@@ -579,27 +646,6 @@ namespace WulaFallenEmpire
initialized = true;
}
public override IEnumerable<Gizmo> CompGetWornGizmosExtra()
{
EnsureInitialized();
if (IsEquipment && Wearer != null && Find.Selector.SingleSelectedThing == Wearer)
{
yield return new Gizmo_AreaShieldStatus { shield = this };
}
}
public override IEnumerable<Gizmo> CompGetGizmosExtra()
{
EnsureInitialized();
// 固定物品也显示护盾状态
if (IsStandalone && Find.Selector.SingleSelectedThing == parent)
{
yield return new Gizmo_AreaShieldStatus { shield = this };
}
}
public override void Notify_Equipped(Pawn pawn)
{
base.Notify_Equipped(pawn);

View File

@@ -509,14 +509,14 @@ namespace WulaFallenEmpire
try
{
// 绘制当前传送器范围
GenDraw.DrawRadiusRing(parent.Position, Props.teleportRadius, Color.blue);
GenDraw.DrawRadiusRing(parent.Position, Props.teleportRadius, new Color(0.3f, 0.7f, 1, 0.3f));
// 绘制网络范围(所有传送器的范围)
foreach (var teleporter in GetNetworkTeleporters())
{
if (teleporter != this && teleporter.parent.Spawned)
{
GenDraw.DrawRadiusRing(teleporter.parent.Position, teleporter.Props.teleportRadius, new Color(0, 0, 1, 0.3f));
GenDraw.DrawRadiusRing(teleporter.parent.Position, teleporter.Props.teleportRadius, new Color(0.3f, 0.7f, 1, 0.3f));
}
}
}

View File

@@ -126,6 +126,7 @@
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompProperties_TransformIntoBuilding.cs" />
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompTransformAtFullCapacity.cs" />
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompTransformIntoBuilding.cs" />
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\TransformValidationUtility.cs" />
<Compile Include="EventSystem\CompOpenCustomUI.cs" />
<Compile Include="EventSystem\Condition\ConditionBase.cs" />
<Compile Include="EventSystem\Condition\Condition_FlagExists.cs" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB