Merge branch 'main' of https://git.ra3battle.cn/Kalospacer/WulaFallenEmpireRW
This commit is contained in:
Binary file not shown.
@@ -196,6 +196,32 @@
|
|||||||
</weaponTags>
|
</weaponTags>
|
||||||
</PawnKindDef>
|
</PawnKindDef>
|
||||||
|
|
||||||
|
<PawnKindDef ParentName="HeavyMechanoidKind">
|
||||||
|
<defName>WULA_Mobile_Bunker</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
|
<label>BUk-1"地堡猫猫"</label>
|
||||||
|
<race>WULA_Mobile_Bunker</race>
|
||||||
|
<allowInMechClusters>false</allowInMechClusters>
|
||||||
|
<defaultFactionType>PlayerColony</defaultFactionType>
|
||||||
|
<canMeleeAttack>false</canMeleeAttack>
|
||||||
|
<combatPower>200</combatPower>
|
||||||
|
|
||||||
|
<lifeStages>
|
||||||
|
<li>
|
||||||
|
<bodyGraphicData>
|
||||||
|
<texPath>Wula/Things/WULA_Mobile_Bunker/Bodies/Naked_Thin</texPath>
|
||||||
|
<maskPath>Wula/Things/WULA_Cat/AllegianceOverlays/None</maskPath>
|
||||||
|
<shaderType>CutoutWithOverlay</shaderType>
|
||||||
|
<graphicClass>Graphic_Multi</graphicClass>
|
||||||
|
<drawSize>3.8</drawSize>
|
||||||
|
<shadowData>
|
||||||
|
<volume>(1.4, 1.8, 1.4)</volume>
|
||||||
|
</shadowData>
|
||||||
|
</bodyGraphicData>
|
||||||
|
</li>
|
||||||
|
</lifeStages>
|
||||||
|
|
||||||
|
<controlGroupPortraitZoom>0.7</controlGroupPortraitZoom>
|
||||||
|
</PawnKindDef>
|
||||||
<PawnKindDef ParentName="HeavyMechanoidKind">
|
<PawnKindDef ParentName="HeavyMechanoidKind">
|
||||||
<defName>Wula_Mech_Mobile_Factory</defName> <!-- 修改了defName以避免冲突 -->
|
<defName>Wula_Mech_Mobile_Factory</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
<label>MFm-2"陆行舰"</label>
|
<label>MFm-2"陆行舰"</label>
|
||||||
@@ -593,7 +619,7 @@
|
|||||||
</PawnKindDef>
|
</PawnKindDef>
|
||||||
<PawnKindDef>
|
<PawnKindDef>
|
||||||
<defName>Wula_PIA_Legion_Escort_Unit</defName>
|
<defName>Wula_PIA_Legion_Escort_Unit</defName>
|
||||||
<label>帝国冲锋队</label>
|
<label>断爪卫队</label>
|
||||||
<race>WulaSpecies</race>
|
<race>WulaSpecies</race>
|
||||||
<lifeStages>
|
<lifeStages>
|
||||||
<li>
|
<li>
|
||||||
@@ -614,23 +640,24 @@
|
|||||||
<combatPower>500</combatPower>
|
<combatPower>500</combatPower>
|
||||||
<initialWillRange>10~20</initialWillRange>
|
<initialWillRange>10~20</initialWillRange>
|
||||||
<initialResistanceRange>10~20</initialResistanceRange>
|
<initialResistanceRange>10~20</initialResistanceRange>
|
||||||
<itemQuality>Poor</itemQuality>
|
<itemQuality>Legendary</itemQuality>
|
||||||
<minApparelQuality>Poor</minApparelQuality>
|
<minApparelQuality>Legendary</minApparelQuality>
|
||||||
<maxApparelQuality>Poor</maxApparelQuality>
|
<maxApparelQuality>Legendary</maxApparelQuality>
|
||||||
|
<apparelIgnorePollution MayRequire="Ludeon.RimWorld.Biotech">true</apparelIgnorePollution>
|
||||||
|
<ignoreFactionApparelStuffRequirements>true</ignoreFactionApparelStuffRequirements>
|
||||||
<isFighter>true</isFighter>
|
<isFighter>true</isFighter>
|
||||||
|
<weaponStuffOverride>Plasteel</weaponStuffOverride>
|
||||||
<apparelTags>
|
<apparelTags>
|
||||||
<li>Wula_Armor_Light</li>
|
<li>Wula_Armor_Super_Heavy</li>
|
||||||
<li>Wula_Armor_Shield</li>
|
|
||||||
<li>WULA_Manpack_Loitering_Munition</li>
|
|
||||||
</apparelTags>
|
</apparelTags>
|
||||||
<weaponTags>
|
<weaponTags>
|
||||||
<li>Wula_Melee_Weapon_T2</li>
|
<li>WULA_MW_Twohanded_ChainBroadsword</li>
|
||||||
</weaponTags>
|
</weaponTags>
|
||||||
<apparelRequired>
|
<apparelRequired>
|
||||||
<li>WULA_Assault_Troop_PowerArmor</li>
|
<li>WULA_Heavy_Infantry_PowerArmor</li>
|
||||||
<li>WULA_Assault_Troop_Helmet</li>
|
<li>WULA_Heavy_Infantry_Helmet</li>
|
||||||
</apparelRequired>
|
</apparelRequired>
|
||||||
<weaponMoney>3000~8000</weaponMoney>
|
<weaponMoney>999999~999999</weaponMoney>
|
||||||
<biocodeWeaponChance>1</biocodeWeaponChance>
|
<biocodeWeaponChance>1</biocodeWeaponChance>
|
||||||
<apparelAllowHeadgearChance>1</apparelAllowHeadgearChance>
|
<apparelAllowHeadgearChance>1</apparelAllowHeadgearChance>
|
||||||
<techHediffsChance>1</techHediffsChance>
|
<techHediffsChance>1</techHediffsChance>
|
||||||
@@ -639,6 +666,10 @@
|
|||||||
<techHediffsRequired>
|
<techHediffsRequired>
|
||||||
<li>DeathAcidifier</li>
|
<li>DeathAcidifier</li>
|
||||||
</techHediffsRequired>
|
</techHediffsRequired>
|
||||||
|
<techHediffsTags>
|
||||||
|
<li>Advanced</li>
|
||||||
|
<li>ImplantEmpireCommon</li>
|
||||||
|
</techHediffsTags>
|
||||||
|
|
||||||
<backstoryFiltersOverride>
|
<backstoryFiltersOverride>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -155,7 +155,7 @@
|
|||||||
|
|
||||||
<!-- Get or generate guards -->
|
<!-- Get or generate guards -->
|
||||||
<li Class="QuestNode_LoopCount">
|
<li Class="QuestNode_LoopCount">
|
||||||
<loopCount>2</loopCount>
|
<loopCount>1</loopCount>
|
||||||
<node Class="QuestNode_GeneratePawn">
|
<node Class="QuestNode_GeneratePawn">
|
||||||
<faction>Wula_PIA_Legion_Faction</faction>
|
<faction>Wula_PIA_Legion_Faction</faction>
|
||||||
<kindDef>Wula_PIA_Legion_Escort_Unit</kindDef>
|
<kindDef>Wula_PIA_Legion_Escort_Unit</kindDef>
|
||||||
@@ -281,7 +281,7 @@
|
|||||||
<!-- Shuttle -->
|
<!-- Shuttle -->
|
||||||
<li Class="QuestNode_Set">
|
<li Class="QuestNode_Set">
|
||||||
<name>shuttleDelayTicks</name>
|
<name>shuttleDelayTicks</name>
|
||||||
<value>720000</value>
|
<value>360000</value>
|
||||||
</li>
|
</li>
|
||||||
<li Class="QuestNode_ShuttleDelay">
|
<li Class="QuestNode_ShuttleDelay">
|
||||||
<delayTicks>$shuttleDelayTicks</delayTicks>
|
<delayTicks>$shuttleDelayTicks</delayTicks>
|
||||||
|
|||||||
@@ -201,21 +201,10 @@
|
|||||||
<label>攻击舰队调配许可</label>
|
<label>攻击舰队调配许可</label>
|
||||||
<description>允许殖民地建立信标增加攻击舰队配额,并使得机械乌拉可以调频天线以申请舰队空中支援,包含2艘可以发起轨道炮击的巡洋舰和1艘可以提供航空器支援的航空舰。</description>
|
<description>允许殖民地建立信标增加攻击舰队配额,并使得机械乌拉可以调频天线以申请舰队空中支援,包含2艘可以发起轨道炮击的巡洋舰和1艘可以提供航空器支援的航空舰。</description>
|
||||||
<baseCost>600</baseCost>
|
<baseCost>600</baseCost>
|
||||||
<researchViewX>6.00</researchViewX>
|
<researchViewX>1.00</researchViewX>
|
||||||
<researchViewY>4.40</researchViewY>
|
<researchViewY>4.40</researchViewY>
|
||||||
<prerequisites>
|
<prerequisites>
|
||||||
<li>WULA_Colony_License_LV2_Technology</li>
|
<li>WULA_Colony_License_LV1_Technology</li>
|
||||||
</prerequisites>
|
|
||||||
</ResearchProjectDef>
|
|
||||||
<ResearchProjectDef ParentName="WULAtechBase">
|
|
||||||
<defName>WULA_ConstructionShip_Technology</defName>
|
|
||||||
<label>拒止舰队调配许可</label>
|
|
||||||
<description>允许殖民地建立信标增加拒止舰队配额,并使得机械乌拉可以调频天线以申请舰队空中支援,包含1艘可以提供轨道支援的拒止舰。</description>
|
|
||||||
<baseCost>600</baseCost>
|
|
||||||
<researchViewX>6.00</researchViewX>
|
|
||||||
<researchViewY>3.80</researchViewY>
|
|
||||||
<prerequisites>
|
|
||||||
<li>WULA_Colony_License_LV2_Technology</li>
|
|
||||||
</prerequisites>
|
</prerequisites>
|
||||||
</ResearchProjectDef>
|
</ResearchProjectDef>
|
||||||
<!-- 飞行器 -->
|
<!-- 飞行器 -->
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<ScenarioDef ParentName="ScenarioBase">
|
<ScenarioDef ParentName="ScenarioBase">
|
||||||
<defName>WULA_Start_Scenario</defName>
|
<defName>WULA_Start_Scenario</defName>
|
||||||
<label>乌拉帝国先遣队</label>
|
<label>乌拉帝国先遣队</label>
|
||||||
<description>乌拉帝国开发署的舰队已经抵达边缘世界,一支负责建立地面前哨站的边境殖民地</description>
|
<description>乌拉帝国开发署的舰队已经抵达边缘世界,一支负责建立地面前哨站的先遣队被部署到星球上。</description>
|
||||||
<scenario>
|
<scenario>
|
||||||
<summary>以三位机械乌拉为初始殖民者开始游戏。</summary>
|
<summary>以三位机械乌拉为初始殖民者开始游戏。</summary>
|
||||||
<playerFaction>
|
<playerFaction>
|
||||||
@@ -56,9 +56,20 @@
|
|||||||
</li>
|
</li>
|
||||||
<li Class="ScenPart_StartingThing_Defined">
|
<li Class="ScenPart_StartingThing_Defined">
|
||||||
<def>StartingThing_Defined</def>
|
<def>StartingThing_Defined</def>
|
||||||
<thingDef>WULA_RW_Base_AR</thingDef>
|
<thingDef>WULA_RW_Beam_Base_AR</thingDef>
|
||||||
<count>1</count>
|
<count>1</count>
|
||||||
</li>
|
</li>
|
||||||
|
<li Class="ScenPart_StartingThing_Defined">
|
||||||
|
<def>StartingThing_Defined</def>
|
||||||
|
<thingDef>WULA_RW_Fractal_RF</thingDef>
|
||||||
|
<count>1</count>
|
||||||
|
</li>
|
||||||
|
<li Class="ScenPart_StartingThing_Defined">
|
||||||
|
<def>StartingThing_Defined</def>
|
||||||
|
<thingDef>WULA_MW_Charge_Mace</thingDef>
|
||||||
|
<stuff>Plasteel</stuff>
|
||||||
|
<quality>Normal</quality>
|
||||||
|
</li>
|
||||||
<li Class="ScenPart_StartingThing_Defined">
|
<li Class="ScenPart_StartingThing_Defined">
|
||||||
<def>StartingThing_Defined</def>
|
<def>StartingThing_Defined</def>
|
||||||
<thingDef>WULA_MW_Charge_Mace</thingDef>
|
<thingDef>WULA_MW_Charge_Mace</thingDef>
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
</placeWorkers>
|
</placeWorkers>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="WulaFallenEmpire.CompProperties_CustomRadius">
|
<li Class="WulaFallenEmpire.CompProperties_CustomRadius">
|
||||||
<radius>21</radius> <!-- 半径大小 -->
|
<radius>28</radius> <!-- 半径大小 -->
|
||||||
<color>(1, 1, 1)</color> <!-- 绿色圆圈 -->
|
<color>(1, 1, 1)</color> <!-- 绿色圆圈 -->
|
||||||
<radiusOffset>0</radiusOffset> <!-- 半径偏移 -->
|
<radiusOffset>0</radiusOffset> <!-- 半径偏移 -->
|
||||||
<showInGUI>true</showInGUI>
|
<showInGUI>true</showInGUI>
|
||||||
@@ -212,6 +212,14 @@
|
|||||||
<maxTurrets>6</maxTurrets>
|
<maxTurrets>6</maxTurrets>
|
||||||
<turretSpacing>1.5</turretSpacing>
|
<turretSpacing>1.5</turretSpacing>
|
||||||
</li>
|
</li>
|
||||||
|
<li Class="WulaFallenEmpire.CompProperties_TransformAtFullCapacity">
|
||||||
|
<targetPawnKind>WULA_Mobile_Bunker</targetPawnKind>
|
||||||
|
<requiredCapacity>6</requiredCapacity>
|
||||||
|
<cooldownHours>0</cooldownHours>
|
||||||
|
<gizmoLabel>转换为BUk-1"地堡猫猫"</gizmoLabel>
|
||||||
|
<gizmoDesc>让地堡中的两只乌拉猫猫继续操纵地堡中的机枪,剩下的乌拉猫猫抬着地堡移动——虽然很难相信但是事实就是这样的。</gizmoDesc>
|
||||||
|
<gizmoIconPath>Wula/UI/Commands/WULA_TransformToPawn</gizmoIconPath>
|
||||||
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<ThingDef ParentName="BaseWeaponTurret">
|
<ThingDef ParentName="BaseWeaponTurret">
|
||||||
@@ -223,11 +231,10 @@
|
|||||||
<graphicClass>Graphic_Single</graphicClass>
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
</graphicData>
|
</graphicData>
|
||||||
<statBases>
|
<statBases>
|
||||||
<AccuracyTouch>0.5</AccuracyTouch>
|
<AccuracyTouch>0.8</AccuracyTouch>
|
||||||
<AccuracyShort>0.3</AccuracyShort>
|
<AccuracyShort>0.5</AccuracyShort>
|
||||||
<AccuracyMedium>0.25</AccuracyMedium>
|
<AccuracyMedium>0.35</AccuracyMedium>
|
||||||
<AccuracyLong>0.12</AccuracyLong>
|
<AccuracyLong>0.25</AccuracyLong>
|
||||||
<RangedWeapon_Cooldown>4.8</RangedWeapon_Cooldown>
|
|
||||||
<DeteriorationRate>0</DeteriorationRate>
|
<DeteriorationRate>0</DeteriorationRate>
|
||||||
<Mass>5</Mass>
|
<Mass>5</Mass>
|
||||||
<Flammability>0</Flammability>
|
<Flammability>0</Flammability>
|
||||||
@@ -236,14 +243,13 @@
|
|||||||
<li>
|
<li>
|
||||||
<verbClass>Verb_Shoot</verbClass>
|
<verbClass>Verb_Shoot</verbClass>
|
||||||
<defaultProjectile>Bullet_WULA_RW_Base_AR</defaultProjectile>
|
<defaultProjectile>Bullet_WULA_RW_Base_AR</defaultProjectile>
|
||||||
<warmupTime>0</warmupTime>
|
<range>28</range>
|
||||||
<range>21</range>
|
<ticksBetweenBurstShots>5</ticksBetweenBurstShots>
|
||||||
<ticksBetweenBurstShots>32</ticksBetweenBurstShots>
|
<burstShotCount>12</burstShotCount>
|
||||||
<burstShotCount>2</burstShotCount>
|
|
||||||
<soundCast>Shot_AssaultRifle</soundCast>
|
<soundCast>Shot_AssaultRifle</soundCast>
|
||||||
<soundCastTail>GunTail_Medium</soundCastTail>
|
<soundCastTail>GunTail_Medium</soundCastTail>
|
||||||
<muzzleFlashScale>9</muzzleFlashScale>
|
<muzzleFlashScale>9</muzzleFlashScale>
|
||||||
<consumeFuelPerShot>1</consumeFuelPerShot>
|
<defaultCooldownTime>4</defaultCooldownTime>
|
||||||
</li>
|
</li>
|
||||||
</verbs>
|
</verbs>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
|
|||||||
@@ -1210,9 +1210,9 @@
|
|||||||
<projectileDef>Bullet_WULA_Striker_A_Missile</projectileDef>
|
<projectileDef>Bullet_WULA_Striker_A_Missile</projectileDef>
|
||||||
<sectorAngle>60</sectorAngle> <!-- 扇形角度 -->
|
<sectorAngle>60</sectorAngle> <!-- 扇形角度 -->
|
||||||
<sectorRange>85</sectorRange> <!-- 射程 -->
|
<sectorRange>85</sectorRange> <!-- 射程 -->
|
||||||
<shotCount>2</shotCount> <!-- 发射次数 -->
|
<shotCount>4</shotCount> <!-- 发射次数 -->
|
||||||
<shotInterval>0.3</shotInterval> <!-- 发射间隔 -->
|
<shotInterval>0.3</shotInterval> <!-- 发射间隔 -->
|
||||||
<maxProjectiles>24</maxProjectiles><!-- 最大射弹数量限制-->
|
<maxProjectiles>48</maxProjectiles><!-- 最大射弹数量限制-->
|
||||||
|
|
||||||
<!-- 横向偏移配置(左右) -->
|
<!-- 横向偏移配置(左右) -->
|
||||||
<lateralOffsetDistance>13</lateralOffsetDistance>
|
<lateralOffsetDistance>13</lateralOffsetDistance>
|
||||||
@@ -1560,7 +1560,7 @@
|
|||||||
</angleCurve>
|
</angleCurve>
|
||||||
<explosionRadius>4</explosionRadius>
|
<explosionRadius>4</explosionRadius>
|
||||||
<explosionDamage>WULA_Firepower_Minigun_Strafe_Damage</explosionDamage>
|
<explosionDamage>WULA_Firepower_Minigun_Strafe_Damage</explosionDamage>
|
||||||
<explosionDamageFactor>1</explosionDamageFactor>
|
<explosionDamageFactor>2</explosionDamageFactor>
|
||||||
</skyfaller>
|
</skyfaller>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="WulaFallenEmpire.CompProperties_PlaySoundOnSpawn">
|
<li Class="WulaFallenEmpire.CompProperties_PlaySoundOnSpawn">
|
||||||
|
|||||||
@@ -573,7 +573,7 @@
|
|||||||
</graphicData>
|
</graphicData>
|
||||||
<projectile>
|
<projectile>
|
||||||
<damageDef>Flame</damageDef>
|
<damageDef>Flame</damageDef>
|
||||||
<damageAmountBase>20</damageAmountBase>
|
<damageAmountBase>35</damageAmountBase>
|
||||||
<speed>60</speed>
|
<speed>60</speed>
|
||||||
<explosionRadius>3.9</explosionRadius>
|
<explosionRadius>3.9</explosionRadius>
|
||||||
<armorPenetrationBase>1.5</armorPenetrationBase>
|
<armorPenetrationBase>1.5</armorPenetrationBase>
|
||||||
|
|||||||
@@ -299,6 +299,7 @@
|
|||||||
<equippedAngleOffset>25</equippedAngleOffset>
|
<equippedAngleOffset>25</equippedAngleOffset>
|
||||||
<weaponTags Inherit="False">
|
<weaponTags Inherit="False">
|
||||||
<li>Wula_Melee_Weapon_T3</li>
|
<li>Wula_Melee_Weapon_T3</li>
|
||||||
|
<li>WULA_MW_Twohanded_ChainBroadsword</li>
|
||||||
</weaponTags>
|
</weaponTags>
|
||||||
<uiIconScale>0.8</uiIconScale>
|
<uiIconScale>0.8</uiIconScale>
|
||||||
<techLevel>Spacer</techLevel>
|
<techLevel>Spacer</techLevel>
|
||||||
@@ -622,24 +623,20 @@
|
|||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<ThingDef Name="WULA_RW_Base_AR" ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
<ThingDef Name="WULA_RW_Base_AR" ParentName="BaseHumanMakeableGun">
|
||||||
<defName>WULA_RW_Base_AR</defName>
|
<defName>WULA_RW_Base_AR</defName>
|
||||||
<label>DLa-1"页岩"</label>
|
<label>DLa-1"页岩"</label>
|
||||||
<description>乌拉帝国的基础突击步枪,仍然使用可靠的导气式结构驱动自动射击构件,是一种便宜但好用的武器,通常派发给殖民地作自卫武器之用。它下挂了一个眩光弹发射器,可以发射一枚眩光弹击晕区域内的敌人。</description>
|
<description>乌拉帝国的基础突击步枪,仍然使用可靠的导气式结构驱动自动射击构件,是一种便宜但好用的武器,通常派发给殖民地作自卫武器之用。它下挂了一个眩光弹发射器,可以发射一枚眩光弹击晕区域内的敌人。</description>
|
||||||
<tickerType>Normal</tickerType>
|
<tickerType>Normal</tickerType>
|
||||||
<techLevel>Spacer</techLevel>
|
<techLevel>Spacer</techLevel>
|
||||||
|
<destroyOnDrop>true</destroyOnDrop>
|
||||||
|
<tradeability>None</tradeability>
|
||||||
<graphicData>
|
<graphicData>
|
||||||
<texPath>Wula/Weapon/WULA_RW_Base_AR</texPath>
|
<texPath>Wula/Weapon/WULA_RW_Base_AR</texPath>
|
||||||
<graphicClass>Graphic_Single</graphicClass>
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
</graphicData>
|
</graphicData>
|
||||||
<soundInteract>Interact_Rifle</soundInteract>
|
<soundInteract>Interact_Rifle</soundInteract>
|
||||||
<recipeMaker>
|
<recipeMaker Inherit="False" IsNull="True"/>
|
||||||
<recipeUsers Inherit="False">
|
|
||||||
<li>WULA_WeaponArmor_Productor</li>
|
|
||||||
</recipeUsers>
|
|
||||||
<researchPrerequisite>WULA_Synth_Weapon_1_Base_Technology</researchPrerequisite>
|
|
||||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
|
||||||
</recipeMaker>
|
|
||||||
<statBases>
|
<statBases>
|
||||||
<WorkToMake>1300</WorkToMake>
|
<WorkToMake>1300</WorkToMake>
|
||||||
<!-- <MarketValue>370</MarketValue> -->
|
<!-- <MarketValue>370</MarketValue> -->
|
||||||
@@ -669,7 +666,7 @@
|
|||||||
<ComponentIndustrial>2</ComponentIndustrial>
|
<ComponentIndustrial>2</ComponentIndustrial>
|
||||||
</costList>
|
</costList>
|
||||||
<weaponTags Inherit="False">
|
<weaponTags Inherit="False">
|
||||||
<li>Wula_Ranged_Weapon_T1</li>
|
<li>Wula_Assault_Cat_Weapon</li>
|
||||||
</weaponTags>
|
</weaponTags>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="CompProperties_EquippableAbilityReloadable">
|
<li Class="CompProperties_EquippableAbilityReloadable">
|
||||||
@@ -685,59 +682,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</modExtensions>
|
</modExtensions>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<!-- 给猫猫的特殊武器,扔在地上会消失、没有人格核心、没有闪光弹 -->
|
|
||||||
<ThingDef ParentName="WULA_RW_Base_AR">
|
|
||||||
<destroyOnDrop>true</destroyOnDrop>
|
|
||||||
<defName>WULA_RW_Base_AR_For_Cat</defName>
|
|
||||||
<label>DLa-2"页岩"</label>
|
|
||||||
<description>乌拉帝国的基础突击步枪,仍然使用可靠的导气式结构驱动自动射击构件,是一种便宜但好用的武器,通常派发给殖民地作自卫武器之用。</description>
|
|
||||||
<tickerType>Normal</tickerType>
|
|
||||||
<techLevel>Spacer</techLevel>
|
|
||||||
<graphicData>
|
|
||||||
<texPath>Wula/Weapon/WULA_RW_Base_AR</texPath>
|
|
||||||
<graphicClass>Graphic_Single</graphicClass>
|
|
||||||
</graphicData>
|
|
||||||
<soundInteract>Interact_Rifle</soundInteract>
|
|
||||||
<tradeability>None</tradeability>
|
|
||||||
<recipeMaker>
|
|
||||||
<recipeUsers Inherit="False">
|
|
||||||
<li>WULA_WeaponArmor_Productor</li>
|
|
||||||
</recipeUsers>
|
|
||||||
<researchPrerequisite>WULA_Synth_Weapon_1_Base_Technology</researchPrerequisite>
|
|
||||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
|
||||||
</recipeMaker>
|
|
||||||
<statBases>
|
|
||||||
<WorkToMake>1300</WorkToMake>
|
|
||||||
<!-- <MarketValue>370</MarketValue> -->
|
|
||||||
<Mass>3.5</Mass>
|
|
||||||
<AccuracyTouch>0.75</AccuracyTouch>
|
|
||||||
<AccuracyShort>0.75</AccuracyShort>
|
|
||||||
<AccuracyMedium>0.65</AccuracyMedium>
|
|
||||||
<AccuracyLong>0.45</AccuracyLong>
|
|
||||||
<RangedWeapon_Cooldown>1.2</RangedWeapon_Cooldown>
|
|
||||||
</statBases>
|
|
||||||
<verbs>
|
|
||||||
<li>
|
|
||||||
<verbClass>Verb_Shoot</verbClass>
|
|
||||||
<hasStandardCommand>true</hasStandardCommand>
|
|
||||||
<defaultProjectile>Bullet_WULA_RW_Base_AR</defaultProjectile>
|
|
||||||
<warmupTime>1</warmupTime>
|
|
||||||
<range>25</range>
|
|
||||||
<burstShotCount>5</burstShotCount>
|
|
||||||
<ticksBetweenBurstShots>5</ticksBetweenBurstShots>
|
|
||||||
<soundCast>Shot_AssaultRifle</soundCast>
|
|
||||||
<soundCastTail>GunTail_Medium</soundCastTail>
|
|
||||||
<muzzleFlashScale>7</muzzleFlashScale>
|
|
||||||
</li>
|
|
||||||
</verbs>
|
|
||||||
<costList Inherit="False">
|
|
||||||
<WULA_Alloy>40</WULA_Alloy>
|
|
||||||
<ComponentIndustrial>2</ComponentIndustrial>
|
|
||||||
</costList>
|
|
||||||
<weaponTags Inherit="False">
|
|
||||||
<li>Wula_Assault_Cat_Weapon</li>
|
|
||||||
</weaponTags>
|
|
||||||
</ThingDef>
|
|
||||||
<ThingDef ParentName="BaseBullet">
|
<ThingDef ParentName="BaseBullet">
|
||||||
<defName>Bullet_WULA_RW_Base_AR</defName>
|
<defName>Bullet_WULA_RW_Base_AR</defName>
|
||||||
<label>子弹</label>
|
<label>子弹</label>
|
||||||
@@ -806,6 +750,96 @@
|
|||||||
<explosionDelay>30</explosionDelay>
|
<explosionDelay>30</explosionDelay>
|
||||||
</projectile>
|
</projectile>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
|
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
||||||
|
<defName>WULA_RW_Fractal_RF</defName>
|
||||||
|
<label>SLr-14"蓝锥"</label>
|
||||||
|
<description>乌拉帝国的磁轨狙击枪,通过引导强大的动能发射钢针,射速较慢,但是在击中目标后仍能继续飞行,对路径上的多个敌人造成伤害。</description>
|
||||||
|
<techLevel>Spacer</techLevel>
|
||||||
|
<graphicData>
|
||||||
|
<texPath>Wula/Weapon/WULA_RW_Fractal_RF/WULA_RW_Fractal_RF</texPath>
|
||||||
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
|
<drawSize>1.4</drawSize>
|
||||||
|
</graphicData>
|
||||||
|
<!-- <uiIconScale>0.85</uiIconScale> -->
|
||||||
|
<soundInteract>Interact_Rifle</soundInteract>
|
||||||
|
<recipeMaker>
|
||||||
|
<!-- <WorkToMake>60000</WorkToMake> -->
|
||||||
|
<recipeUsers Inherit="False">
|
||||||
|
<li>WULA_WeaponArmor_Productor</li>
|
||||||
|
</recipeUsers>
|
||||||
|
<researchPrerequisite>WULA_Synth_Weapon_1_Base_Technology</researchPrerequisite>
|
||||||
|
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||||
|
</recipeMaker>
|
||||||
|
<statBases>
|
||||||
|
<WorkToMake>1200</WorkToMake>
|
||||||
|
<Mass>3.5</Mass>
|
||||||
|
<AccuracyTouch>0.3</AccuracyTouch>
|
||||||
|
<AccuracyShort>0.7</AccuracyShort>
|
||||||
|
<AccuracyMedium>1</AccuracyMedium>
|
||||||
|
<AccuracyLong>1</AccuracyLong>
|
||||||
|
<RangedWeapon_Cooldown>0.5</RangedWeapon_Cooldown>
|
||||||
|
</statBases>
|
||||||
|
<costList Inherit="False">
|
||||||
|
<WULA_Alloy>60</WULA_Alloy>
|
||||||
|
<ComponentIndustrial>3</ComponentIndustrial>
|
||||||
|
</costList>
|
||||||
|
<verbs>
|
||||||
|
<li>
|
||||||
|
<verbClass>WulaFallenEmpire.Verb_ShootWithOffset</verbClass>
|
||||||
|
<hasStandardCommand>true</hasStandardCommand>
|
||||||
|
<defaultProjectile>Bullet_WULA_RW_Fractal_RF</defaultProjectile>
|
||||||
|
<warmupTime>1.25</warmupTime>
|
||||||
|
<range>55</range>
|
||||||
|
<burstShotCount>1</burstShotCount>
|
||||||
|
<soundCast>WULA_RW_Railgun_Shootingsound</soundCast>
|
||||||
|
<soundCastTail>GunTail_Medium</soundCastTail>
|
||||||
|
<muzzleFlashScale>9</muzzleFlashScale>
|
||||||
|
</li>
|
||||||
|
</verbs>
|
||||||
|
<weaponTags Inherit="False">
|
||||||
|
<li>Wula_Ranged_Weapon_T1</li>
|
||||||
|
</weaponTags>
|
||||||
|
<comps>
|
||||||
|
<li Class="WulaFallenEmpire.CompProperties_WeaponRenderDynamic">
|
||||||
|
<TexturePath>Wula/Weapon/WULA_RW_Fractal_RF/WULA_RW_Fractal_RF_Anim</TexturePath>
|
||||||
|
<totalFrames>8</totalFrames>
|
||||||
|
<ticksPerFrame>8</ticksPerFrame>
|
||||||
|
</li>
|
||||||
|
</comps>
|
||||||
|
<modExtensions>
|
||||||
|
<li Class="WulaFallenEmpire.ModExtension_ShootWithOffset">
|
||||||
|
<offsets>
|
||||||
|
<li>(0, -1.0)</li>
|
||||||
|
</offsets>
|
||||||
|
</li>
|
||||||
|
</modExtensions>
|
||||||
|
</ThingDef>
|
||||||
|
<ThingDef ParentName="BaseBullet">
|
||||||
|
<defName>Bullet_WULA_RW_Fractal_RF</defName>
|
||||||
|
<label>蓝锥钢针弹</label>
|
||||||
|
<thingClass>WulaFallenEmpire.Projectile_WulaLineAttack</thingClass>
|
||||||
|
<modExtensions>
|
||||||
|
<li Class="WulaFallenEmpire.Wula_PathPierce_Extension">
|
||||||
|
<maxHits>-1</maxHits> <!-- 无限穿透 -->
|
||||||
|
<damageFalloff>0</damageFalloff> <!-- 无伤害衰减 -->
|
||||||
|
<preventFriendlyFire>true</preventFriendlyFire> <!-- 是否阻止友方火力 -->
|
||||||
|
<tailFleckDef>WULA_GunTail_Lighting</tailFleckDef> <!-- 拖尾特效定义 -->
|
||||||
|
</li>
|
||||||
|
</modExtensions>
|
||||||
|
<graphicData>
|
||||||
|
<texPath>Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red</texPath>
|
||||||
|
<graphicClass>Graphic_Single</graphicClass>
|
||||||
|
<shaderType>TransparentPostLight</shaderType>
|
||||||
|
<drawSize>1.4</drawSize>
|
||||||
|
</graphicData>
|
||||||
|
<projectile>
|
||||||
|
<damageDef>Bullet</damageDef>
|
||||||
|
<damageAmountBase>25</damageAmountBase>
|
||||||
|
<speed>230</speed>
|
||||||
|
<armorPenetrationBase>0.5</armorPenetrationBase>
|
||||||
|
<stoppingPower>5</stoppingPower>
|
||||||
|
</projectile>
|
||||||
|
</ThingDef>
|
||||||
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
||||||
<defName>WULA_RW_StarDrift_SG</defName>
|
<defName>WULA_RW_StarDrift_SG</defName>
|
||||||
<label>DCs-7"黑曜石"</label>
|
<label>DCs-7"黑曜石"</label>
|
||||||
@@ -892,101 +926,6 @@
|
|||||||
</li>
|
</li>
|
||||||
</modExtensions>
|
</modExtensions>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
|
||||||
<defName>WULA_RW_Fractal_RF</defName>
|
|
||||||
<label>SLr-14"蓝锥"</label>
|
|
||||||
<description>乌拉帝国的磁轨狙击枪,通过引导强大的动能发射钢针,射速较慢,但是在击中目标后仍能继续飞行,对路径上的多个敌人造成伤害。</description>
|
|
||||||
<techLevel>Spacer</techLevel>
|
|
||||||
<graphicData>
|
|
||||||
<texPath>Wula/Weapon/WULA_RW_Fractal_RF/WULA_RW_Fractal_RF</texPath>
|
|
||||||
<graphicClass>Graphic_Single</graphicClass>
|
|
||||||
<drawSize>1.4</drawSize>
|
|
||||||
</graphicData>
|
|
||||||
<!-- <uiIconScale>0.85</uiIconScale> -->
|
|
||||||
<soundInteract>Interact_Rifle</soundInteract>
|
|
||||||
<weaponClasses>
|
|
||||||
<li>LongShots</li>
|
|
||||||
<li>RangedHeavy</li>
|
|
||||||
</weaponClasses>
|
|
||||||
<recipeMaker>
|
|
||||||
<!-- <WorkToMake>60000</WorkToMake> -->
|
|
||||||
<recipeUsers Inherit="False">
|
|
||||||
<li>WULA_WeaponArmor_Productor</li>
|
|
||||||
</recipeUsers>
|
|
||||||
<researchPrerequisite>WULA_Synth_Weapon_2_Bullet_Technology</researchPrerequisite>
|
|
||||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
|
||||||
</recipeMaker>
|
|
||||||
<statBases>
|
|
||||||
<WorkToMake>2000</WorkToMake>
|
|
||||||
<Mass>3.5</Mass>
|
|
||||||
<AccuracyTouch>0.3</AccuracyTouch>
|
|
||||||
<AccuracyShort>0.7</AccuracyShort>
|
|
||||||
<AccuracyMedium>1</AccuracyMedium>
|
|
||||||
<AccuracyLong>1</AccuracyLong>
|
|
||||||
<RangedWeapon_Cooldown>0.8</RangedWeapon_Cooldown>
|
|
||||||
</statBases>
|
|
||||||
<costList Inherit="False">
|
|
||||||
<WULA_Alloy>60</WULA_Alloy>
|
|
||||||
<WULA_Charge_Cube>4</WULA_Charge_Cube>
|
|
||||||
<ComponentIndustrial>2</ComponentIndustrial>
|
|
||||||
</costList>
|
|
||||||
<verbs>
|
|
||||||
<li>
|
|
||||||
<verbClass>WulaFallenEmpire.Verb_ShootWithOffset</verbClass>
|
|
||||||
<hasStandardCommand>true</hasStandardCommand>
|
|
||||||
<defaultProjectile>Bullet_WULA_RW_Fractal_RF</defaultProjectile>
|
|
||||||
<warmupTime>4</warmupTime>
|
|
||||||
<range>85</range>
|
|
||||||
<burstShotCount>1</burstShotCount>
|
|
||||||
<soundCast>WULA_RW_Railgun_Shootingsound</soundCast>
|
|
||||||
<soundCastTail>GunTail_Medium</soundCastTail>
|
|
||||||
<muzzleFlashScale>9</muzzleFlashScale>
|
|
||||||
</li>
|
|
||||||
</verbs>
|
|
||||||
<weaponTags Inherit="False">
|
|
||||||
<li>Wula_Ranged_Weapon_T2</li>
|
|
||||||
</weaponTags>
|
|
||||||
<comps>
|
|
||||||
<li Class="WulaFallenEmpire.CompProperties_WeaponRenderDynamic">
|
|
||||||
<TexturePath>Wula/Weapon/WULA_RW_Fractal_RF/WULA_RW_Fractal_RF_Anim</TexturePath>
|
|
||||||
<totalFrames>8</totalFrames>
|
|
||||||
<ticksPerFrame>8</ticksPerFrame>
|
|
||||||
</li>
|
|
||||||
</comps>
|
|
||||||
<modExtensions>
|
|
||||||
<li Class="WulaFallenEmpire.ModExtension_ShootWithOffset">
|
|
||||||
<offsets>
|
|
||||||
<li>(0, -1.0)</li>
|
|
||||||
</offsets>
|
|
||||||
</li>
|
|
||||||
</modExtensions>
|
|
||||||
</ThingDef>
|
|
||||||
<ThingDef ParentName="BaseBullet">
|
|
||||||
<defName>Bullet_WULA_RW_Fractal_RF</defName>
|
|
||||||
<label>蓝锥钢针弹</label>
|
|
||||||
<thingClass>WulaFallenEmpire.Projectile_WulaLineAttack</thingClass>
|
|
||||||
<modExtensions>
|
|
||||||
<li Class="WulaFallenEmpire.Wula_PathPierce_Extension">
|
|
||||||
<maxHits>-1</maxHits> <!-- 无限穿透 -->
|
|
||||||
<damageFalloff>0</damageFalloff> <!-- 无伤害衰减 -->
|
|
||||||
<preventFriendlyFire>true</preventFriendlyFire> <!-- 是否阻止友方火力 -->
|
|
||||||
<tailFleckDef>WULA_GunTail_Lighting</tailFleckDef> <!-- 拖尾特效定义 -->
|
|
||||||
</li>
|
|
||||||
</modExtensions>
|
|
||||||
<graphicData>
|
|
||||||
<texPath>Wula/Projectile/WULA_Bullet_ChargeLanceShot_Red</texPath>
|
|
||||||
<graphicClass>Graphic_Single</graphicClass>
|
|
||||||
<shaderType>TransparentPostLight</shaderType>
|
|
||||||
<drawSize>1.4</drawSize>
|
|
||||||
</graphicData>
|
|
||||||
<projectile>
|
|
||||||
<damageDef>Bullet</damageDef>
|
|
||||||
<damageAmountBase>25</damageAmountBase>
|
|
||||||
<speed>230</speed>
|
|
||||||
<armorPenetrationBase>0.5</armorPenetrationBase>
|
|
||||||
<stoppingPower>5</stoppingPower>
|
|
||||||
</projectile>
|
|
||||||
</ThingDef>
|
|
||||||
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
<ThingDef ParentName="WULA_ExperienceCore_Weapon_Ranged">
|
||||||
<defName>WULA_RW_AutoCannon</defName>
|
<defName>WULA_RW_AutoCannon</defName>
|
||||||
<label>FLm-78"萤石"</label>
|
<label>FLm-78"萤石"</label>
|
||||||
@@ -1160,11 +1099,11 @@
|
|||||||
<recipeUsers Inherit="False">
|
<recipeUsers Inherit="False">
|
||||||
<li>WULA_WeaponArmor_Productor</li>
|
<li>WULA_WeaponArmor_Productor</li>
|
||||||
</recipeUsers>
|
</recipeUsers>
|
||||||
<researchPrerequisite>WULA_Synth_Weapon_2_Laser_Technology</researchPrerequisite>
|
<researchPrerequisite>WULA_Synth_Weapon_1_Base_Technology</researchPrerequisite>
|
||||||
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
<unfinishedThingDef>UnfinishedWeapon</unfinishedThingDef>
|
||||||
</recipeMaker>
|
</recipeMaker>
|
||||||
<statBases>
|
<statBases>
|
||||||
<WorkToMake>1500</WorkToMake>
|
<WorkToMake>1000</WorkToMake>
|
||||||
<!-- <MarketValue>370</MarketValue> -->
|
<!-- <MarketValue>370</MarketValue> -->
|
||||||
<Mass>3.5</Mass>
|
<Mass>3.5</Mass>
|
||||||
<AccuracyTouch>0.75</AccuracyTouch>
|
<AccuracyTouch>0.75</AccuracyTouch>
|
||||||
@@ -1179,7 +1118,7 @@
|
|||||||
<hasStandardCommand>true</hasStandardCommand>
|
<hasStandardCommand>true</hasStandardCommand>
|
||||||
<defaultProjectile>Bullet_WULA_RW_Penetrating_Rifle</defaultProjectile>
|
<defaultProjectile>Bullet_WULA_RW_Penetrating_Rifle</defaultProjectile>
|
||||||
<warmupTime>3</warmupTime>
|
<warmupTime>3</warmupTime>
|
||||||
<range>20</range>
|
<range>26</range>
|
||||||
<burstShotCount>3</burstShotCount>
|
<burstShotCount>3</burstShotCount>
|
||||||
<ticksBetweenBurstShots>12</ticksBetweenBurstShots>
|
<ticksBetweenBurstShots>12</ticksBetweenBurstShots>
|
||||||
<soundCast>Shot_BeamRepeater</soundCast>
|
<soundCast>Shot_BeamRepeater</soundCast>
|
||||||
@@ -1191,7 +1130,6 @@
|
|||||||
</verbs>
|
</verbs>
|
||||||
<costList Inherit="False">
|
<costList Inherit="False">
|
||||||
<WULA_Alloy>70</WULA_Alloy>
|
<WULA_Alloy>70</WULA_Alloy>
|
||||||
<WULA_Charge_Cube>6</WULA_Charge_Cube>
|
|
||||||
<ComponentIndustrial>2</ComponentIndustrial>
|
<ComponentIndustrial>2</ComponentIndustrial>
|
||||||
</costList>
|
</costList>
|
||||||
<weaponTags Inherit="False">
|
<weaponTags Inherit="False">
|
||||||
@@ -2048,7 +1986,7 @@
|
|||||||
<speed>25</speed>
|
<speed>25</speed>
|
||||||
<damageDef>Flame</damageDef>
|
<damageDef>Flame</damageDef>
|
||||||
<explosionRadius>7</explosionRadius>
|
<explosionRadius>7</explosionRadius>
|
||||||
<damageAmountBase>20</damageAmountBase>
|
<damageAmountBase>50</damageAmountBase>
|
||||||
<armorPenetrationBase>0.25</armorPenetrationBase>
|
<armorPenetrationBase>0.25</armorPenetrationBase>
|
||||||
<stoppingPower>10</stoppingPower>
|
<stoppingPower>10</stoppingPower>
|
||||||
</projectile>
|
</projectile>
|
||||||
@@ -2129,7 +2067,7 @@
|
|||||||
<ComponentIndustrial>8</ComponentIndustrial>
|
<ComponentIndustrial>8</ComponentIndustrial>
|
||||||
</costList>
|
</costList>
|
||||||
<weaponTags Inherit="False">
|
<weaponTags Inherit="False">
|
||||||
<li>Wula_Ranged_Weapon_T2</li>
|
<li>Wula_Ranged_Weapon_T1</li>
|
||||||
</weaponTags>
|
</weaponTags>
|
||||||
<comps>
|
<comps>
|
||||||
<li Class="CompProperties_EquippableAbilityReloadable">
|
<li Class="CompProperties_EquippableAbilityReloadable">
|
||||||
|
|||||||
@@ -660,6 +660,7 @@
|
|||||||
<specificMeatDef>Steel</specificMeatDef>
|
<specificMeatDef>Steel</specificMeatDef>
|
||||||
<!-- 身体类型 -->
|
<!-- 身体类型 -->
|
||||||
<body>WULA_Machine_Body</body>
|
<body>WULA_Machine_Body</body>
|
||||||
|
<baseBodySize>0.9</baseBodySize>
|
||||||
<!-- 年龄阶段 -->
|
<!-- 年龄阶段 -->
|
||||||
<!-- <lifeExpectancy>5000</lifeExpectancy> -->
|
<!-- <lifeExpectancy>5000</lifeExpectancy> -->
|
||||||
<lifeStageWorkSettings MayRequire="Ludeon.RimWorld.Biotech">
|
<lifeStageWorkSettings MayRequire="Ludeon.RimWorld.Biotech">
|
||||||
@@ -885,6 +886,8 @@
|
|||||||
<WastepacksPerRecharge MayRequire="Ludeon.RimWorld.Biotech">0</WastepacksPerRecharge>
|
<WastepacksPerRecharge MayRequire="Ludeon.RimWorld.Biotech">0</WastepacksPerRecharge>
|
||||||
</statBases>
|
</statBases>
|
||||||
<race>
|
<race>
|
||||||
|
<baseBodySize>0.5</baseBodySize>
|
||||||
|
<baseHealthScale>1.5</baseHealthScale>
|
||||||
<lifeStageAges>
|
<lifeStageAges>
|
||||||
<li>
|
<li>
|
||||||
<def>MechanoidFullyFormed</def>
|
<def>MechanoidFullyFormed</def>
|
||||||
@@ -917,12 +920,20 @@
|
|||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<ThingDef ParentName="Mech_WULA_Cat_Base">
|
<AlienRace.ThingDef_AlienRace ParentName="Mech_WULA_Cat_Base">
|
||||||
<defName>Mech_WULA_Cat</defName>
|
<defName>Mech_WULA_Cat</defName>
|
||||||
<label>CAt-11"猫猫"</label>
|
<label>CAt-11"猫猫"</label>
|
||||||
<description>乌拉帝国的一种小型自律机械体,无需监管者,可以执行包括搬运、烹饪、种植收割、清理、急救和灭火一类的简单工作,因为似猫的外形受到乌拉星人欢迎。</description>
|
<description>乌拉帝国的一种小型自律机械体,无需监管者,可以执行包括搬运、烹饪、种植收割、清理、急救和灭火一类的简单工作,因为似猫的外形受到乌拉星人欢迎。\n\n\n这种机械族可以在非征召状态下拾取地上的武器以供使用。</description>
|
||||||
<uiIconPath>Wula/Things/WULA_Cat/WULA_Cat_Thin_south</uiIconPath>
|
<uiIconPath>Wula/Things/WULA_Cat/WULA_Cat_Thin_south</uiIconPath>
|
||||||
|
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<statBases>
|
<statBases>
|
||||||
<MoveSpeed>6</MoveSpeed>
|
<MoveSpeed>6</MoveSpeed>
|
||||||
<FoodPoisonChance>0.001</FoodPoisonChance>
|
<FoodPoisonChance>0.001</FoodPoisonChance>
|
||||||
@@ -944,12 +955,21 @@
|
|||||||
<li>Firefighter</li>
|
<li>Firefighter</li>
|
||||||
</mechEnabledWorkTypes>
|
</mechEnabledWorkTypes>
|
||||||
</race>
|
</race>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
<ThingDef ParentName="Mech_WULA_Cat_Base">
|
<AlienRace.ThingDef_AlienRace ParentName="Mech_WULA_Cat_Base">
|
||||||
<defName>Mech_WULA_Cat_Constructor</defName>
|
<defName>Mech_WULA_Cat_Constructor</defName>
|
||||||
<label>CAt-86"猫猫劳工"</label>
|
<label>CAt-86"猫猫劳工"</label>
|
||||||
<description>乌拉帝国的一种小型自律机械体,无需监管者,只能执行建造和开采任务,可以跳起来用手上的HAm-1"装修锤"锤烂敌人的膝盖。</description>
|
<description>乌拉帝国的一种小型自律机械体,无需监管者,只能执行建造和开采任务,可以跳起来用手上的HAm-1"装修锤"锤烂敌人的膝盖。\n\n\n这种机械族可以在非征召状态下拾取地上的武器以供使用。</description>
|
||||||
<uiIconPath>Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south</uiIconPath>
|
<uiIconPath>Wula/Things/WULA_Constructor_Cat/WULA_Cat_Thin_south</uiIconPath>
|
||||||
|
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<race>
|
<race>
|
||||||
<mechEnabledWorkTypes Inherit="False">
|
<mechEnabledWorkTypes Inherit="False">
|
||||||
<li>Mining</li>
|
<li>Mining</li>
|
||||||
@@ -959,12 +979,21 @@
|
|||||||
<statBases>
|
<statBases>
|
||||||
<WorkSpeedGlobal>2</WorkSpeedGlobal>
|
<WorkSpeedGlobal>2</WorkSpeedGlobal>
|
||||||
</statBases>
|
</statBases>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
<ThingDef ParentName="Mech_WULA_Cat_Base">
|
<AlienRace.ThingDef_AlienRace ParentName="Mech_WULA_Cat_Base">
|
||||||
<defName>Mech_WULA_Cat_Assault</defName>
|
<defName>Mech_WULA_Cat_Assault</defName>
|
||||||
<label>CAt-46"猫猫冲锋队"</label>
|
<label>CAt-46"猫猫冲锋队"</label>
|
||||||
<description>乌拉帝国的一种小型自律机械体,无需监管者,可以执行搬运、狩猎和割除任务,身着轻甲,装备了一把DLa-1"页岩",可以给敌方造成不小的麻烦。</description>
|
<description>乌拉帝国的一种小型自律机械体,无需监管者,可以执行搬运、狩猎和割除任务,身着轻甲,装备了一把DLa-1"页岩",可以给敌方造成不小的麻烦。\n\n\n这种机械族可以在非征召状态下拾取地上的武器以供使用。</description>
|
||||||
<uiIconPath>Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south</uiIconPath>
|
<uiIconPath>Wula/Things/WULA_Assault_Cat/WULA_Cat_Thin_south</uiIconPath>
|
||||||
|
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<race>
|
<race>
|
||||||
<mechEnabledWorkTypes Inherit="False">
|
<mechEnabledWorkTypes Inherit="False">
|
||||||
<li>Hunting</li>
|
<li>Hunting</li>
|
||||||
@@ -973,19 +1002,157 @@
|
|||||||
</mechEnabledWorkTypes>
|
</mechEnabledWorkTypes>
|
||||||
</race>
|
</race>
|
||||||
<statBases>
|
<statBases>
|
||||||
<ArmorRating_Sharp>0.25</ArmorRating_Sharp>
|
<ArmorRating_Sharp>0.5</ArmorRating_Sharp>
|
||||||
<ArmorRating_Blunt>0.25</ArmorRating_Blunt>
|
<ArmorRating_Blunt>0.5</ArmorRating_Blunt>
|
||||||
<!-- <WorkSpeedGlobal>2</WorkSpeedGlobal> -->
|
<!-- <WorkSpeedGlobal>2</WorkSpeedGlobal> -->
|
||||||
<MoveSpeed>4</MoveSpeed>
|
<MoveSpeed>4</MoveSpeed>
|
||||||
</statBases>
|
</statBases>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
|
|
||||||
<!-- 大型机械族 -->
|
<!-- 大型机械族 -->
|
||||||
<ThingDef ParentName="WULA_BaseMechanoid">
|
<AlienRace.ThingDef_AlienRace ParentName="WULA_BaseMechanoid">
|
||||||
|
<defName>WULA_Mobile_Bunker</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
|
<label>BUk-1"地堡猫猫"</label>
|
||||||
|
<description>四只猫猫在抬着地堡移动,虽然很难相信但是事实就是这样的。在地堡的射击窗里还有另外的两只乌拉猫猫,它们会操纵地堡的机枪向外射击。\n\n猫猫可以放下地堡,然后一股脑地钻进去,这会让地堡重新变为建筑。</description>
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
|
<statBases>
|
||||||
|
<BandwidthCost>1</BandwidthCost>
|
||||||
|
<MoveSpeed>3</MoveSpeed>
|
||||||
|
</statBases>
|
||||||
|
<race>
|
||||||
|
<body>Mech_Warqueen</body>
|
||||||
|
<baseBodySize>5</baseBodySize>
|
||||||
|
<lifeStageAges>
|
||||||
|
<li>
|
||||||
|
<def>MechanoidFullyFormed</def>
|
||||||
|
<minAge>0</minAge>
|
||||||
|
<soundCall>Pawn_Wula_Mech_Mobile_Factory_Call</soundCall>
|
||||||
|
</li>
|
||||||
|
</lifeStageAges>
|
||||||
|
<baseHealthScale>2</baseHealthScale>
|
||||||
|
</race>
|
||||||
|
<tools Inherit="False">
|
||||||
|
<li>
|
||||||
|
<label>碾压</label>
|
||||||
|
<capacities>
|
||||||
|
<li>Blunt</li>
|
||||||
|
</capacities>
|
||||||
|
<power>360</power>
|
||||||
|
<cooldownTime>8</cooldownTime>
|
||||||
|
<linkedBodyPartsGroup>Torso</linkedBodyPartsGroup>
|
||||||
|
<ensureLinkedBodyPartsGroupAlwaysUsable>true</ensureLinkedBodyPartsGroupAlwaysUsable>
|
||||||
|
</li>
|
||||||
|
</tools>
|
||||||
|
<comps>
|
||||||
|
<li Class="CompProperties_Glower">
|
||||||
|
<glowRadius>6</glowRadius>
|
||||||
|
<glowColor>(120,240,252,0)</glowColor>
|
||||||
|
</li>
|
||||||
|
<li Class="WulaFallenEmpire.CompProperties_MultiTurretGun">
|
||||||
|
<ID>0</ID>
|
||||||
|
<turretDef>WULA_Cat_Bunker_TurretGun</turretDef>
|
||||||
|
<!-- <angleOffset>-90</angleOffset> -->
|
||||||
|
<renderNodeProperties>
|
||||||
|
<li>
|
||||||
|
<nodeClass>PawnRenderNode_TurretGun</nodeClass>
|
||||||
|
<workerClass>PawnRenderNodeWorker_TurretGun</workerClass>
|
||||||
|
<parentTagDef>Body</parentTagDef>
|
||||||
|
<overrideMeshSize>(2, 2)</overrideMeshSize>
|
||||||
|
<baseLayer>20</baseLayer>
|
||||||
|
<pawnType>Any</pawnType>
|
||||||
|
<drawData>
|
||||||
|
<dataNorth>
|
||||||
|
<rotationOffset>-90</rotationOffset>
|
||||||
|
<offset>(-1, 0, -1.45)</offset>
|
||||||
|
<flip>true</flip>
|
||||||
|
<layer>-5</layer>
|
||||||
|
</dataNorth>
|
||||||
|
<dataEast>
|
||||||
|
<rotationOffset>90</rotationOffset>
|
||||||
|
<layer>-5</layer>
|
||||||
|
<offset>(3.25, 0, -1)</offset>
|
||||||
|
</dataEast>
|
||||||
|
<dataSouth>
|
||||||
|
<rotationOffset>-90</rotationOffset>
|
||||||
|
<offset>(1.5, 0, -1.45)</offset>
|
||||||
|
</dataSouth>
|
||||||
|
<dataWest>
|
||||||
|
<rotationOffset>90</rotationOffset>
|
||||||
|
<offset>(-3.25, 0, -1)</offset>
|
||||||
|
</dataWest>
|
||||||
|
</drawData>
|
||||||
|
</li>
|
||||||
|
</renderNodeProperties>
|
||||||
|
</li>
|
||||||
|
<li Class="WulaFallenEmpire.CompProperties_MultiTurretGun">
|
||||||
|
<ID>1</ID>
|
||||||
|
<turretDef>WULA_Cat_Bunker_TurretGun</turretDef>
|
||||||
|
<!-- <angleOffset>-90</angleOffset> -->
|
||||||
|
<renderNodeProperties>
|
||||||
|
<li>
|
||||||
|
<nodeClass>PawnRenderNode_TurretGun</nodeClass>
|
||||||
|
<workerClass>PawnRenderNodeWorker_TurretGun</workerClass>
|
||||||
|
<parentTagDef>Body</parentTagDef>
|
||||||
|
<overrideMeshSize>(2, 2)</overrideMeshSize>
|
||||||
|
<baseLayer>20</baseLayer>
|
||||||
|
<pawnType>Any</pawnType>
|
||||||
|
<drawData>
|
||||||
|
<dataNorth>
|
||||||
|
<rotationOffset>-90</rotationOffset>
|
||||||
|
<offset>(1, 0, -1.45)</offset>
|
||||||
|
<layer>-5</layer>
|
||||||
|
</dataNorth>
|
||||||
|
<dataEast>
|
||||||
|
<rotationOffset>-90</rotationOffset>
|
||||||
|
<offset>(3.25, 0, -1)</offset>
|
||||||
|
</dataEast>
|
||||||
|
<dataSouth>
|
||||||
|
<rotationOffset>-90</rotationOffset>
|
||||||
|
<offset>(-1.6, 0, -1.45)</offset>
|
||||||
|
</dataSouth>
|
||||||
|
<dataWest>
|
||||||
|
<rotationOffset>90</rotationOffset>
|
||||||
|
<offset>(-3.25, 0, -1)</offset>
|
||||||
|
<layer>-5</layer>
|
||||||
|
</dataWest>
|
||||||
|
</drawData>
|
||||||
|
</li>
|
||||||
|
</renderNodeProperties>
|
||||||
|
</li>
|
||||||
|
<!-- 转换回建筑组件 -->
|
||||||
|
<li Class="WulaFallenEmpire.CompProperties_TransformIntoBuilding">
|
||||||
|
<targetBuildingDef>WULA_Cat_Bunker</targetBuildingDef>
|
||||||
|
<gizmoLabel>部署为乌拉猫猫地堡</gizmoLabel>
|
||||||
|
<gizmoDesc>乌拉猫猫们把地堡扔在地上然后钻进去,重新转变为建筑。每一次转变为建筑后,都会有24小时的冷却时间,在此期间不允许重新变为BUk-1"地堡猫猫"。</gizmoDesc>
|
||||||
|
<gizmoIconPath>Wula/UI/Commands/WULA_TransformToBuilding</gizmoIconPath>
|
||||||
|
</li>
|
||||||
|
</comps>
|
||||||
|
</AlienRace.ThingDef_AlienRace>
|
||||||
|
<AlienRace.ThingDef_AlienRace ParentName="WULA_BaseMechanoid">
|
||||||
<defName>Wula_AI_Heavy_Panzer</defName> <!-- 修改了defName以避免冲突 -->
|
<defName>Wula_AI_Heavy_Panzer</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
<label>HAp-6"战车"</label>
|
<label>HAp-6"战车"</label>
|
||||||
<description>乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,使用破坏力巨大的自动炮和车体臼炮打击敌方,是乌拉帝国前锋部队的中流砥柱。</description>
|
<description>乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,使用破坏力巨大的自动炮和车体臼炮打击敌方,是乌拉帝国前锋部队的中流砥柱。</description>
|
||||||
<uiIconPath>Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon</uiIconPath>
|
<uiIconPath>Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Heavy_Panzer_Icon</uiIconPath>
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<weaponList>
|
||||||
|
<li>Wula_AI_Heavy_Panzer_Main_Weapon</li>
|
||||||
|
</weaponList>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<statBases>
|
<statBases>
|
||||||
<BandwidthCost>1</BandwidthCost>
|
<BandwidthCost>1</BandwidthCost>
|
||||||
<MoveSpeed>2</MoveSpeed>
|
<MoveSpeed>2</MoveSpeed>
|
||||||
@@ -1001,8 +1168,8 @@
|
|||||||
<ComponentSpacer>2</ComponentSpacer>
|
<ComponentSpacer>2</ComponentSpacer>
|
||||||
</costList>
|
</costList>
|
||||||
<race>
|
<race>
|
||||||
<body>Mech_Warqueen</body>
|
<body>WULA_AI_Heavy_Panzer_Body</body>
|
||||||
<baseBodySize>30</baseBodySize>
|
<baseBodySize>20</baseBodySize>
|
||||||
<lifeStageAges>
|
<lifeStageAges>
|
||||||
<li>
|
<li>
|
||||||
<def>MechanoidFullyFormed</def>
|
<def>MechanoidFullyFormed</def>
|
||||||
@@ -1015,7 +1182,7 @@
|
|||||||
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
||||||
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
||||||
</race>
|
</race>
|
||||||
<tools>
|
<tools Inherit="False">
|
||||||
<li>
|
<li>
|
||||||
<label>碾压</label>
|
<label>碾压</label>
|
||||||
<capacities>
|
<capacities>
|
||||||
@@ -1093,12 +1260,24 @@
|
|||||||
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
<ThingDef ParentName="WULA_BaseMechanoid">
|
<AlienRace.ThingDef_AlienRace ParentName="WULA_BaseMechanoid">
|
||||||
<defName>Wula_AI_Rocket_Panzer</defName> <!-- 修改了defName以避免冲突 -->
|
<defName>Wula_AI_Rocket_Panzer</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
<label>HRp-3"喷火战车"</label>
|
<label>HRp-3"喷火战车"</label>
|
||||||
<description>乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,拥有车体臼炮和两具可以发射大量燃烧火箭弹的转轮导弹巢,但是未像其姊妹型号那样装备护盾。</description>
|
<description>乌拉帝国的中型战争机械,以悬浮的方式穿梭于战场之上,拥有车体臼炮和两具可以发射大量燃烧火箭弹的转轮导弹巢,但是未像其姊妹型号那样装备护盾。</description>
|
||||||
<uiIconPath>Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon</uiIconPath>
|
<uiIconPath>Wula/Things/Wula_AI_Heavy_Panzer/Wula_AI_Rocket_Panzer_Icon</uiIconPath>
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<weaponList>
|
||||||
|
<li>Wula_AI_Heavy_Panzer_Main_Weapon</li>
|
||||||
|
</weaponList>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<statBases>
|
<statBases>
|
||||||
<BandwidthCost>1</BandwidthCost>
|
<BandwidthCost>1</BandwidthCost>
|
||||||
<MoveSpeed>2</MoveSpeed>
|
<MoveSpeed>2</MoveSpeed>
|
||||||
@@ -1114,8 +1293,8 @@
|
|||||||
<ComponentSpacer>2</ComponentSpacer>
|
<ComponentSpacer>2</ComponentSpacer>
|
||||||
</costList>
|
</costList>
|
||||||
<race>
|
<race>
|
||||||
<body>Mech_Warqueen</body>
|
<body>WULA_AI_Heavy_Panzer_Body</body>
|
||||||
<baseBodySize>30</baseBodySize>
|
<baseBodySize>20</baseBodySize>
|
||||||
<lifeStageAges>
|
<lifeStageAges>
|
||||||
<li>
|
<li>
|
||||||
<def>MechanoidFullyFormed</def>
|
<def>MechanoidFullyFormed</def>
|
||||||
@@ -1128,7 +1307,7 @@
|
|||||||
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
||||||
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
||||||
</race>
|
</race>
|
||||||
<tools>
|
<tools Inherit="False">
|
||||||
<li>
|
<li>
|
||||||
<label>碾压</label>
|
<label>碾压</label>
|
||||||
<capacities>
|
<capacities>
|
||||||
@@ -1198,11 +1377,23 @@
|
|||||||
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
<ThingDef ParentName="WULA_BaseMechanoid">
|
<AlienRace.ThingDef_AlienRace ParentName="WULA_BaseMechanoid">
|
||||||
<defName>Wula_Mech_Mobile_Factory</defName> <!-- 修改了defName以避免冲突 -->
|
<defName>Wula_Mech_Mobile_Factory</defName> <!-- 修改了defName以避免冲突 -->
|
||||||
<label>MFm-2"陆行舰"</label>
|
<label>MFm-2"陆行舰"</label>
|
||||||
<description>乌拉帝国的大型战争机械,简直就是一座移动堡垒——它不仅装甲厚实、火炮林立,还能在战场上生产大量的辅助战争机械以形成坚实的弹性阵线,生来就是为了粉碎坚固的要塞和顽强的抵抗。</description>
|
<description>乌拉帝国的大型战争机械,简直就是一座移动堡垒——它不仅装甲厚实、火炮林立,还能在战场上生产大量的辅助战争机械以形成坚实的弹性阵线,生来就是为了粉碎坚固的要塞和顽强的抵抗。</description>
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<weaponList>
|
||||||
|
<li>WULA_RW_Unlimit_Penetrating_Beam_Cannon</li>
|
||||||
|
</weaponList>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<statBases>
|
<statBases>
|
||||||
<BandwidthCost>1</BandwidthCost>
|
<BandwidthCost>1</BandwidthCost>
|
||||||
<MoveSpeed>1</MoveSpeed>
|
<MoveSpeed>1</MoveSpeed>
|
||||||
@@ -1213,7 +1404,7 @@
|
|||||||
</statBases>
|
</statBases>
|
||||||
<race>
|
<race>
|
||||||
<body>Mech_Warqueen</body>
|
<body>Mech_Warqueen</body>
|
||||||
<baseBodySize>30</baseBodySize>
|
<baseBodySize>50</baseBodySize>
|
||||||
<lifeStageAges>
|
<lifeStageAges>
|
||||||
<li>
|
<li>
|
||||||
<def>MechanoidFullyFormed</def>
|
<def>MechanoidFullyFormed</def>
|
||||||
@@ -1226,7 +1417,7 @@
|
|||||||
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
||||||
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
||||||
</race>
|
</race>
|
||||||
<tools>
|
<tools Inherit="False">
|
||||||
<li>
|
<li>
|
||||||
<label>碾压</label>
|
<label>碾压</label>
|
||||||
<capacities>
|
<capacities>
|
||||||
@@ -1509,7 +1700,7 @@
|
|||||||
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
<toggleIconPath>Wula/UI/Commands/Wula_Mech_Mobile_Factory_AreaDamage</toggleIconPath>
|
||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
<ThingDef ParentName="BaseMechanoidWalker">
|
<ThingDef ParentName="BaseMechanoidWalker">
|
||||||
<defName>WULA_Mech_Flyer</defName>
|
<defName>WULA_Mech_Flyer</defName>
|
||||||
<label>CRm-51"兵蚁"</label>
|
<label>CRm-51"兵蚁"</label>
|
||||||
@@ -1602,11 +1793,23 @@
|
|||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</ThingDef>
|
||||||
<ThingDef ParentName="WULA_BaseMechanoid">
|
<AlienRace.ThingDef_AlienRace ParentName="WULA_BaseMechanoid">
|
||||||
<defName>Wula_Psi_Titan</defName>
|
<defName>Wula_Psi_Titan</defName>
|
||||||
<label>PAt-6"灵能泰坦"</label>
|
<label>PAt-6"灵能泰坦"</label>
|
||||||
<description>由乌拉帝国国教所主持开发的重型灵能机械体,以折跃优雅地穿梭于炮火间,并用强大的护盾抵挡敌方射弹侵袭。该机体的内部镌刻了无数的术式环路,这使其就像一个行走的灵能发射器,可以驱使各种强大的灵能能力。</description>
|
<description>由乌拉帝国国教所主持开发的重型灵能机械体,以折跃优雅地穿梭于炮火间,并用强大的护盾抵挡敌方射弹侵袭。该机体的内部镌刻了无数的术式环路,这使其就像一个行走的灵能发射器,可以驱使各种强大的灵能能力。</description>
|
||||||
<uiIconPath>Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon</uiIconPath>
|
<uiIconPath>Wula/Things/Wula_Psi_Titan/Wula_Psi_Titan_Icon</uiIconPath>
|
||||||
|
<alienRace>
|
||||||
|
<raceRestriction>
|
||||||
|
<weaponList>
|
||||||
|
<li>Wula_Psi_Titan_Beam</li>
|
||||||
|
</weaponList>
|
||||||
|
<onlyUseRaceRestrictedApparel>true</onlyUseRaceRestrictedApparel>
|
||||||
|
<onlyUseRaceRestrictedWeapons>true</onlyUseRaceRestrictedWeapons>
|
||||||
|
</raceRestriction>
|
||||||
|
<compatibility>
|
||||||
|
<isFlesh>false</isFlesh>
|
||||||
|
</compatibility>
|
||||||
|
</alienRace>
|
||||||
<statBases>
|
<statBases>
|
||||||
<BandwidthCost>1</BandwidthCost>
|
<BandwidthCost>1</BandwidthCost>
|
||||||
<MoveSpeed>1</MoveSpeed>
|
<MoveSpeed>1</MoveSpeed>
|
||||||
@@ -1620,7 +1823,7 @@
|
|||||||
</statBases>
|
</statBases>
|
||||||
<race>
|
<race>
|
||||||
<body>Mech_Warqueen</body>
|
<body>Mech_Warqueen</body>
|
||||||
<baseBodySize>30</baseBodySize>
|
<baseBodySize>50</baseBodySize>
|
||||||
<lifeStageAges>
|
<lifeStageAges>
|
||||||
<li>
|
<li>
|
||||||
<def>MechanoidFullyFormed</def>
|
<def>MechanoidFullyFormed</def>
|
||||||
@@ -1633,7 +1836,7 @@
|
|||||||
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
<flightStartChanceOnJobStart>1</flightStartChanceOnJobStart>
|
||||||
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
<!-- <thinkTreeConstant>WarUrchinConstant</thinkTreeConstant> -->
|
||||||
</race>
|
</race>
|
||||||
<tools>
|
<tools Inherit="False">
|
||||||
<li>
|
<li>
|
||||||
<label>碾压</label>
|
<label>碾压</label>
|
||||||
<capacities>
|
<capacities>
|
||||||
@@ -1707,7 +1910,7 @@
|
|||||||
<toggleIconPath>Wula/UI/Commands/Wula_Psi_Titan_AreaDamage</toggleIconPath>
|
<toggleIconPath>Wula/UI/Commands/Wula_Psi_Titan_AreaDamage</toggleIconPath>
|
||||||
</li>
|
</li>
|
||||||
</comps>
|
</comps>
|
||||||
</ThingDef>
|
</AlienRace.ThingDef_AlienRace>
|
||||||
|
|
||||||
<!-- 特殊单位 -->
|
<!-- 特殊单位 -->
|
||||||
<ThingDef ParentName="BaseMechanoidWalker">
|
<ThingDef ParentName="BaseMechanoidWalker">
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 254 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 247 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 259 KiB |
@@ -9,73 +9,29 @@ namespace WulaFallenEmpire
|
|||||||
{
|
{
|
||||||
public class Building_MechanoidRecycler : Building
|
public class Building_MechanoidRecycler : Building
|
||||||
{
|
{
|
||||||
// 翻译键定义
|
|
||||||
public static class TranslationKeys
|
|
||||||
{
|
|
||||||
// 消息文本
|
|
||||||
public const string NoRecyclableMechanoidsNearby = "WULA_NoRecyclableMechanoidsNearby";
|
|
||||||
public const string RecyclerStorageFull = "WULA_RecyclerStorageFull";
|
|
||||||
public const string CalledMechanoidsForRecycling = "WULA_CalledMechanoidsForRecycling";
|
|
||||||
public const string MechanoidRecycled = "WULA_MechanoidRecycled";
|
|
||||||
public const string NoMechanoidsAvailableForConversion = "WULA_NoMechanoidsAvailableForConversion";
|
|
||||||
public const string NotEnoughStoredMechanoids = "WULA_NotEnoughStoredMechanoids";
|
|
||||||
public const string ConvertingMechanoids = "WULA_ConvertingMechanoids";
|
|
||||||
|
|
||||||
// Gizmo 文本
|
|
||||||
public const string RecycleNearbyMechanoids = "WULA_RecycleNearbyMechanoids";
|
|
||||||
public const string RecycleNearbyMechanoidsDesc = "WULA_RecycleNearbyMechanoidsDesc";
|
|
||||||
public const string RecycleNearbyMechanoidsDisabled = "WULA_RecycleNearbyMechanoidsDisabled";
|
|
||||||
public const string ConvertMechanoids = "WULA_ConvertMechanoids";
|
|
||||||
public const string ConvertMechanoidsDesc = "WULA_ConvertMechanoidsDesc";
|
|
||||||
public const string ConvertMechanoidsDisabled = "WULA_ConvertMechanoidsDisabled";
|
|
||||||
|
|
||||||
// 检查字符串
|
|
||||||
public const string StoredInfo = "WULA_StoredInfo";
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompProperties_MechanoidRecycler Props => def.GetCompProperties<CompProperties_MechanoidRecycler>();
|
public CompProperties_MechanoidRecycler Props => def.GetCompProperties<CompProperties_MechanoidRecycler>();
|
||||||
|
|
||||||
// 存储的机械族列表
|
// 改为存储计数而不是Pawn实例
|
||||||
public List<Pawn> storedMechanoids = new List<Pawn>();
|
private int storedMechanoidCount = 0;
|
||||||
|
private int spawnTick; // 建筑生成的时间点
|
||||||
|
|
||||||
// 生成队列
|
// 生成队列(存储Pawn生成请求)
|
||||||
private Queue<PawnGenerationRequest> spawnQueue = new Queue<PawnGenerationRequest>();
|
private Queue<PawnGenerationRequest> spawnQueue = new Queue<PawnGenerationRequest>();
|
||||||
|
|
||||||
// 是否已经生成初始单位
|
|
||||||
private bool initialUnitsSpawned = false;
|
private bool initialUnitsSpawned = false;
|
||||||
|
|
||||||
public int StoredCount => storedMechanoids.Count;
|
public int StoredCount => storedMechanoidCount;
|
||||||
public int MaxStorage => Props.maxStorageCapacity;
|
public int MaxStorage => Props.maxStorageCapacity;
|
||||||
|
public bool IsCooldownActive => Find.TickManager.TicksGame - spawnTick < 24 * 2500; // 24小时冷却
|
||||||
|
|
||||||
|
// 生成初始单位(改为计数)
|
||||||
// 生成初始单位
|
|
||||||
private void SpawnInitialUnits()
|
private void SpawnInitialUnits()
|
||||||
{
|
{
|
||||||
if (initialUnitsSpawned || Props.initialUnits == null || Props.initialUnits.Count == 0)
|
if (initialUnitsSpawned || Props.initialUnits == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
foreach (var initialUnit in Props.initialUnits)
|
foreach (var initialUnit in Props.initialUnits)
|
||||||
{
|
{
|
||||||
if (storedMechanoids.Count >= MaxStorage)
|
storedMechanoidCount += initialUnit.count;
|
||||||
break;
|
|
||||||
|
|
||||||
// 生成初始机械族
|
|
||||||
PawnGenerationRequest request = new PawnGenerationRequest(
|
|
||||||
initialUnit.pawnKindDef,
|
|
||||||
Faction, // 使用当前建筑的派系
|
|
||||||
PawnGenerationContext.NonPlayer,
|
|
||||||
-1,
|
|
||||||
forceGenerateNewPawn: true,
|
|
||||||
allowDead: false,
|
|
||||||
allowDowned: false,
|
|
||||||
canGeneratePawnRelations: false,
|
|
||||||
mustBeCapableOfViolence: true
|
|
||||||
);
|
|
||||||
|
|
||||||
Pawn initialMech = PawnGenerator.GeneratePawn(request);
|
|
||||||
storedMechanoids.Add(initialMech);
|
|
||||||
|
|
||||||
Log.Message($"Mechanoid Recycler spawned initial unit: {initialMech.LabelCap} for faction: {Faction.Name}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
initialUnitsSpawned = true;
|
initialUnitsSpawned = true;
|
||||||
@@ -84,118 +40,48 @@ namespace WulaFallenEmpire
|
|||||||
public override void SpawnSetup(Map map, bool respawningAfterLoad)
|
public override void SpawnSetup(Map map, bool respawningAfterLoad)
|
||||||
{
|
{
|
||||||
base.SpawnSetup(map, respawningAfterLoad);
|
base.SpawnSetup(map, respawningAfterLoad);
|
||||||
|
spawnTick = Find.TickManager.TicksGame;
|
||||||
|
|
||||||
// 如果不是从存档加载,生成初始单位
|
|
||||||
if (!respawningAfterLoad)
|
if (!respawningAfterLoad)
|
||||||
{
|
{
|
||||||
SpawnInitialUnits();
|
SpawnInitialUnits();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 回收附近机械族
|
// 回收机械族(改为增加计数)
|
||||||
public void RecycleNearbyMechanoids()
|
public void AcceptMechanoid(Pawn mech)
|
||||||
{
|
{
|
||||||
if (!CanRecycleNow())
|
if (storedMechanoidCount >= Props.maxStorageCapacity)
|
||||||
return;
|
|
||||||
|
|
||||||
List<Pawn> nearbyMechs = FindNearbyRecyclableMechanoids();
|
|
||||||
|
|
||||||
if (nearbyMechs.Count == 0)
|
|
||||||
{
|
{
|
||||||
Messages.Message(TranslationKeys.NoRecyclableMechanoidsNearby.Translate(), MessageTypeDefOf.RejectInput);
|
Messages.Message("回收器已满", MessageTypeDefOf.RejectInput);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int assignedCount = 0;
|
storedMechanoidCount++;
|
||||||
foreach (Pawn mech in nearbyMechs)
|
mech.Destroy(); // 直接销毁,不存储实例
|
||||||
{
|
|
||||||
if (StartRecycleJob(mech))
|
|
||||||
{
|
|
||||||
assignedCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Messages.Message(TranslationKeys.CalledMechanoidsForRecycling.Translate(assignedCount), MessageTypeDefOf.PositiveEvent);
|
Messages.Message($"机械族 {mech.LabelCap} 已回收 (当前: {storedMechanoidCount}/{Props.maxStorageCapacity})",
|
||||||
|
MessageTypeDefOf.PositiveEvent);
|
||||||
|
|
||||||
|
// 通知转换组件存储更新
|
||||||
|
var transformComp = this.TryGetComp<CompTransformAtFullCapacity>();
|
||||||
|
transformComp?.NotifyStorageUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool CanRecycleNow()
|
// 消耗机械族计数
|
||||||
|
public bool ConsumeMechanoids(int count)
|
||||||
{
|
{
|
||||||
if (storedMechanoids.Count >= Props.maxStorageCapacity)
|
if (storedMechanoidCount < count)
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
|
||||||
|
storedMechanoidCount -= count;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Pawn> FindNearbyRecyclableMechanoids()
|
// 设置机械族计数(用于转换恢复)
|
||||||
|
public void SetMechanoidCount(int count)
|
||||||
{
|
{
|
||||||
List<Pawn> result = new List<Pawn>();
|
storedMechanoidCount = Mathf.Clamp(count, 0, Props.maxStorageCapacity);
|
||||||
CellRect searchRect = CellRect.CenteredOn(Position, Props.recycleRange);
|
|
||||||
|
|
||||||
foreach (Pawn pawn in Map.mapPawns.AllPawnsSpawned)
|
|
||||||
{
|
|
||||||
if (searchRect.Contains(pawn.Position) &&
|
|
||||||
IsRecyclableMechanoid(pawn) &&
|
|
||||||
!storedMechanoids.Contains(pawn) &&
|
|
||||||
!IsAlreadyGoingToRecycler(pawn) && // 检查是否已经在前往回收器
|
|
||||||
pawn.CanReach(this, PathEndMode.InteractionCell, Danger.Some))
|
|
||||||
{
|
|
||||||
result.Add(pawn);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsRecyclableMechanoid(Pawn pawn)
|
|
||||||
{
|
|
||||||
return pawn.RaceProps.IsMechanoid &&
|
|
||||||
Props.recyclableRaces.Contains(pawn.def) &&
|
|
||||||
!pawn.Downed &&
|
|
||||||
pawn.Faction == Faction; // 使用当前建筑的派系
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检查机械族是否已经在前往此回收器
|
|
||||||
private bool IsAlreadyGoingToRecycler(Pawn mech)
|
|
||||||
{
|
|
||||||
// 检查当前工作是否是前往此回收器
|
|
||||||
Job curJob = mech.CurJob;
|
|
||||||
if (curJob != null && curJob.def == Props.recycleJobDef && curJob.targetA.Thing == this)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool StartRecycleJob(Pawn mech)
|
|
||||||
{
|
|
||||||
// 防止重复分配
|
|
||||||
if (IsAlreadyGoingToRecycler(mech))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Job job = JobMaker.MakeJob(Props.recycleJobDef, this);
|
|
||||||
if (mech.jobs.TryTakeOrderedJob(job))
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 机械族进入建筑
|
|
||||||
public void AcceptMechanoid(Pawn mech)
|
|
||||||
{
|
|
||||||
if (storedMechanoids.Contains(mech))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (storedMechanoids.Count >= Props.maxStorageCapacity)
|
|
||||||
{
|
|
||||||
Messages.Message(TranslationKeys.RecyclerStorageFull.Translate(), MessageTypeDefOf.RejectInput);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
storedMechanoids.Add(mech);
|
|
||||||
mech.DeSpawn();
|
|
||||||
|
|
||||||
Messages.Message(TranslationKeys.MechanoidRecycled.Translate(mech.LabelCap), MessageTypeDefOf.PositiveEvent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Tick()
|
protected override void Tick()
|
||||||
@@ -212,9 +98,9 @@ namespace WulaFallenEmpire
|
|||||||
// 打开生成界面
|
// 打开生成界面
|
||||||
public void OpenSpawnInterface()
|
public void OpenSpawnInterface()
|
||||||
{
|
{
|
||||||
if (storedMechanoids.Count == 0)
|
if (storedMechanoidCount == 0)
|
||||||
{
|
{
|
||||||
Messages.Message(TranslationKeys.NoMechanoidsAvailableForConversion.Translate(), MessageTypeDefOf.RejectInput);
|
Messages.Message("没有可用的机械族进行转换", MessageTypeDefOf.RejectInput);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,7 +109,7 @@ namespace WulaFallenEmpire
|
|||||||
foreach (PawnKindDef kindDef in Props.spawnablePawnKinds)
|
foreach (PawnKindDef kindDef in Props.spawnablePawnKinds)
|
||||||
{
|
{
|
||||||
kindOptions.Add(new FloatMenuOption(
|
kindOptions.Add(new FloatMenuOption(
|
||||||
kindDef.LabelCap,
|
$"{kindDef.LabelCap}",
|
||||||
() => TrySpawnMechanoids(kindDef, 1)
|
() => TrySpawnMechanoids(kindDef, 1)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -233,27 +119,17 @@ namespace WulaFallenEmpire
|
|||||||
|
|
||||||
private void TrySpawnMechanoids(PawnKindDef kindDef, int count)
|
private void TrySpawnMechanoids(PawnKindDef kindDef, int count)
|
||||||
{
|
{
|
||||||
if (storedMechanoids.Count < count)
|
if (!ConsumeMechanoids(count))
|
||||||
{
|
{
|
||||||
Messages.Message(TranslationKeys.NotEnoughStoredMechanoids.Translate(), MessageTypeDefOf.RejectInput);
|
Messages.Message("机械族数量不足", MessageTypeDefOf.RejectInput);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 消耗存储的机械族并生成
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
if (storedMechanoids.Count > 0)
|
|
||||||
{
|
|
||||||
Pawn consumedMech = storedMechanoids[0];
|
|
||||||
storedMechanoids.RemoveAt(0);
|
|
||||||
|
|
||||||
if (consumedMech.Spawned)
|
|
||||||
consumedMech.Destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
PawnGenerationRequest request = new PawnGenerationRequest(
|
PawnGenerationRequest request = new PawnGenerationRequest(
|
||||||
kindDef,
|
kindDef,
|
||||||
Faction, // 使用当前建筑的派系
|
Faction,
|
||||||
PawnGenerationContext.NonPlayer,
|
PawnGenerationContext.NonPlayer,
|
||||||
-1,
|
-1,
|
||||||
forceGenerateNewPawn: true,
|
forceGenerateNewPawn: true,
|
||||||
@@ -267,7 +143,7 @@ namespace WulaFallenEmpire
|
|||||||
}
|
}
|
||||||
|
|
||||||
TrySpawnFromQueue();
|
TrySpawnFromQueue();
|
||||||
Messages.Message(TranslationKeys.ConvertingMechanoids.Translate(count, kindDef.LabelCap), MessageTypeDefOf.PositiveEvent);
|
Messages.Message($"正在转换 {count} 个机械族为 {kindDef.LabelCap}", MessageTypeDefOf.PositiveEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TrySpawnFromQueue()
|
private void TrySpawnFromQueue()
|
||||||
@@ -318,15 +194,15 @@ namespace WulaFallenEmpire
|
|||||||
// 回收附近机械族按钮
|
// 回收附近机械族按钮
|
||||||
Command_Action recycleCommand = new Command_Action
|
Command_Action recycleCommand = new Command_Action
|
||||||
{
|
{
|
||||||
defaultLabel = TranslationKeys.RecycleNearbyMechanoids.Translate(),
|
defaultLabel = "回收附近机械族",
|
||||||
defaultDesc = TranslationKeys.RecycleNearbyMechanoidsDesc.Translate(Props.recycleRange),
|
defaultDesc = $"命令附近 {Props.recycleRange} 格内的机械族前来回收",
|
||||||
icon = ContentFinder<Texture2D>.Get("Wula/UI/Commands/WULA_RecycleNearbyMechanoids"),
|
icon = ContentFinder<Texture2D>.Get("Wula/UI/Commands/WULA_RecycleNearbyMechanoids"),
|
||||||
action = RecycleNearbyMechanoids
|
action = RecycleNearbyMechanoids
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!CanRecycleNow())
|
if (storedMechanoidCount >= Props.maxStorageCapacity)
|
||||||
{
|
{
|
||||||
recycleCommand.Disable(TranslationKeys.RecycleNearbyMechanoidsDisabled.Translate());
|
recycleCommand.Disable("储存器已满");
|
||||||
}
|
}
|
||||||
|
|
||||||
yield return recycleCommand;
|
yield return recycleCommand;
|
||||||
@@ -334,19 +210,97 @@ namespace WulaFallenEmpire
|
|||||||
// 生成机械族按钮
|
// 生成机械族按钮
|
||||||
Command_Action spawnCommand = new Command_Action
|
Command_Action spawnCommand = new Command_Action
|
||||||
{
|
{
|
||||||
defaultLabel = TranslationKeys.ConvertMechanoids.Translate(),
|
defaultLabel = "转换机械族",
|
||||||
defaultDesc = TranslationKeys.ConvertMechanoidsDesc.Translate(storedMechanoids.Count, Props.maxStorageCapacity),
|
defaultDesc = $"将储存的机械族转换为其他单位 (当前: {storedMechanoidCount}/{Props.maxStorageCapacity})",
|
||||||
icon = ContentFinder<Texture2D>.Get("Wula/UI/Commands/WULA_ConvertMechanoids"),
|
icon = ContentFinder<Texture2D>.Get("Wula/UI/Commands/WULA_ConvertMechanoids"),
|
||||||
action = OpenSpawnInterface
|
action = OpenSpawnInterface
|
||||||
};
|
};
|
||||||
|
|
||||||
if (storedMechanoids.Count == 0)
|
if (storedMechanoidCount == 0)
|
||||||
{
|
{
|
||||||
spawnCommand.Disable(TranslationKeys.ConvertMechanoidsDisabled.Translate());
|
spawnCommand.Disable("没有可用的机械族");
|
||||||
}
|
}
|
||||||
|
|
||||||
yield return spawnCommand;
|
yield return spawnCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 回收附近机械族
|
||||||
|
public void RecycleNearbyMechanoids()
|
||||||
|
{
|
||||||
|
if (storedMechanoidCount >= Props.maxStorageCapacity)
|
||||||
|
{
|
||||||
|
Messages.Message("储存器已满", MessageTypeDefOf.RejectInput);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Pawn> nearbyMechs = FindNearbyRecyclableMechanoids();
|
||||||
|
|
||||||
|
if (nearbyMechs.Count == 0)
|
||||||
|
{
|
||||||
|
Messages.Message("附近没有可回收的机械族", MessageTypeDefOf.RejectInput);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int assignedCount = 0;
|
||||||
|
foreach (Pawn mech in nearbyMechs)
|
||||||
|
{
|
||||||
|
if (StartRecycleJob(mech))
|
||||||
|
{
|
||||||
|
assignedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Messages.Message($"已命令 {assignedCount} 个机械族前来回收", MessageTypeDefOf.PositiveEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Pawn> FindNearbyRecyclableMechanoids()
|
||||||
|
{
|
||||||
|
List<Pawn> result = new List<Pawn>();
|
||||||
|
CellRect searchRect = CellRect.CenteredOn(Position, Props.recycleRange);
|
||||||
|
|
||||||
|
foreach (Pawn pawn in Map.mapPawns.AllPawnsSpawned)
|
||||||
|
{
|
||||||
|
if (searchRect.Contains(pawn.Position) &&
|
||||||
|
IsRecyclableMechanoid(pawn) &&
|
||||||
|
!IsAlreadyGoingToRecycler(pawn) &&
|
||||||
|
pawn.CanReach(this, PathEndMode.InteractionCell, Danger.Some))
|
||||||
|
{
|
||||||
|
result.Add(pawn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsRecyclableMechanoid(Pawn pawn)
|
||||||
|
{
|
||||||
|
return pawn.RaceProps.IsMechanoid &&
|
||||||
|
Props.recyclableRaces.Contains(pawn.def) &&
|
||||||
|
!pawn.Downed &&
|
||||||
|
pawn.Faction == Faction;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsAlreadyGoingToRecycler(Pawn mech)
|
||||||
|
{
|
||||||
|
Job curJob = mech.CurJob;
|
||||||
|
if (curJob != null && curJob.def == Props.recycleJobDef && curJob.targetA.Thing == this)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool StartRecycleJob(Pawn mech)
|
||||||
|
{
|
||||||
|
if (IsAlreadyGoingToRecycler(mech))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Job job = JobMaker.MakeJob(Props.recycleJobDef, this);
|
||||||
|
if (mech.jobs.TryTakeOrderedJob(job))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public override string GetInspectString()
|
public override string GetInspectString()
|
||||||
{
|
{
|
||||||
@@ -358,27 +312,39 @@ namespace WulaFallenEmpire
|
|||||||
stringBuilder.Append(baseString);
|
stringBuilder.Append(baseString);
|
||||||
}
|
}
|
||||||
|
|
||||||
string storedInfo = TranslationKeys.StoredInfo.Translate(storedMechanoids.Count, Props.maxStorageCapacity);
|
string storedInfo = $"储存机械族: {storedMechanoidCount}/{Props.maxStorageCapacity}";
|
||||||
|
|
||||||
if (stringBuilder.Length > 0)
|
if (stringBuilder.Length > 0)
|
||||||
stringBuilder.AppendLine();
|
stringBuilder.AppendLine();
|
||||||
stringBuilder.Append(storedInfo);
|
stringBuilder.Append(storedInfo);
|
||||||
|
|
||||||
|
// 显示冷却状态
|
||||||
|
if (IsCooldownActive)
|
||||||
|
{
|
||||||
|
stringBuilder.AppendLine();
|
||||||
|
stringBuilder.Append($"转换冷却: {GetRemainingCooldownHours():F1} 小时");
|
||||||
|
}
|
||||||
|
|
||||||
return stringBuilder.ToString();
|
return stringBuilder.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float GetRemainingCooldownHours()
|
||||||
|
{
|
||||||
|
int remainingTicks = (24 * 2500) - (Find.TickManager.TicksGame - spawnTick);
|
||||||
|
return Mathf.Max(0, remainingTicks / 2500f);
|
||||||
|
}
|
||||||
|
|
||||||
public override void ExposeData()
|
public override void ExposeData()
|
||||||
{
|
{
|
||||||
base.ExposeData();
|
base.ExposeData();
|
||||||
|
|
||||||
Scribe_Collections.Look(ref storedMechanoids, "storedMechanoids", LookMode.Reference);
|
Scribe_Values.Look(ref storedMechanoidCount, "storedMechanoidCount", 0);
|
||||||
Scribe_Collections.Look(ref spawnQueue, "spawnQueue", LookMode.Deep);
|
Scribe_Values.Look(ref spawnTick, "spawnTick", 0);
|
||||||
Scribe_Values.Look(ref initialUnitsSpawned, "initialUnitsSpawned", false);
|
Scribe_Values.Look(ref initialUnitsSpawned, "initialUnitsSpawned", false);
|
||||||
|
Scribe_Collections.Look(ref spawnQueue, "spawnQueue", LookMode.Deep);
|
||||||
|
|
||||||
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
if (Scribe.mode == LoadSaveMode.PostLoadInit)
|
||||||
{
|
{
|
||||||
storedMechanoids?.RemoveAll(pawn => pawn == null);
|
|
||||||
|
|
||||||
if (spawnQueue == null)
|
if (spawnQueue == null)
|
||||||
spawnQueue = new Queue<PawnGenerationRequest>();
|
spawnQueue = new Queue<PawnGenerationRequest>();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,42 +1,35 @@
|
|||||||
|
|
||||||
|
// CompProperties_MechanoidRecycler.cs (简化)
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using RimWorld;
|
using RimWorld;
|
||||||
using Verse;
|
using Verse;
|
||||||
|
|
||||||
namespace WulaFallenEmpire
|
namespace WulaFallenEmpire
|
||||||
{
|
{
|
||||||
// 初始单位配置类
|
|
||||||
public class InitialUnitConfig
|
public class InitialUnitConfig
|
||||||
{
|
{
|
||||||
public PawnKindDef pawnKindDef;
|
public PawnKindDef pawnKindDef;
|
||||||
public int count = 1;
|
public int count = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CompProperties_MechanoidRecycler : CompProperties
|
public class CompProperties_MechanoidRecycler : CompProperties
|
||||||
{
|
{
|
||||||
// 回收相关
|
|
||||||
public List<ThingDef> recyclableRaces = new List<ThingDef>();
|
public List<ThingDef> recyclableRaces = new List<ThingDef>();
|
||||||
public int recycleRange = 15;
|
public int recycleRange = 15;
|
||||||
public JobDef recycleJobDef;
|
public JobDef recycleJobDef;
|
||||||
public int maxStorageCapacity = 5;
|
public int maxStorageCapacity = 5;
|
||||||
|
|
||||||
// 生成相关
|
|
||||||
public List<PawnKindDef> spawnablePawnKinds = new List<PawnKindDef>();
|
public List<PawnKindDef> spawnablePawnKinds = new List<PawnKindDef>();
|
||||||
|
|
||||||
// 初始单位配置
|
|
||||||
public List<InitialUnitConfig> initialUnits = new List<InitialUnitConfig>();
|
public List<InitialUnitConfig> initialUnits = new List<InitialUnitConfig>();
|
||||||
|
|
||||||
// 归属权配置
|
|
||||||
public Faction ownershipFaction = null; // 如果为null,则默认使用玩家派系
|
|
||||||
|
|
||||||
public CompProperties_MechanoidRecycler()
|
public CompProperties_MechanoidRecycler()
|
||||||
{
|
{
|
||||||
compClass = typeof(CompMechanoidRecycler);
|
compClass = typeof(CompMechanoidRecycler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 空的组件类,用于属性存储
|
|
||||||
public class CompMechanoidRecycler : ThingComp
|
public class CompMechanoidRecycler : ThingComp
|
||||||
{
|
{
|
||||||
// 组件逻辑主要在建筑类中实现
|
// 空组件,用于属性存储
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
// CompProperties_TransformAtFullCapacity.cs
|
||||||
|
using RimWorld;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace WulaFallenEmpire
|
||||||
|
{
|
||||||
|
public class CompProperties_TransformAtFullCapacity : CompProperties
|
||||||
|
{
|
||||||
|
public PawnKindDef targetPawnKind;
|
||||||
|
public int requiredCapacity = 5;
|
||||||
|
|
||||||
|
public string gizmoLabel = "转换为机械单位";
|
||||||
|
public string gizmoDesc = "将储存的机械族转换为一个强大的机械单位。";
|
||||||
|
public string gizmoIconPath;
|
||||||
|
|
||||||
|
public CompProperties_TransformAtFullCapacity()
|
||||||
|
{
|
||||||
|
compClass = typeof(CompTransformAtFullCapacity);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
// CompProperties_TransformIntoBuilding.cs
|
||||||
|
using RimWorld;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace WulaFallenEmpire
|
||||||
|
{
|
||||||
|
public class CompProperties_TransformIntoBuilding : CompProperties
|
||||||
|
{
|
||||||
|
public ThingDef targetBuildingDef;
|
||||||
|
|
||||||
|
public string gizmoLabel = "部署为建筑";
|
||||||
|
public string gizmoDesc = "转换为功能建筑形态。";
|
||||||
|
public string gizmoIconPath;
|
||||||
|
|
||||||
|
public CompProperties_TransformIntoBuilding()
|
||||||
|
{
|
||||||
|
compClass = typeof(CompTransformIntoBuilding);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,172 @@
|
|||||||
|
using RimWorld;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace WulaFallenEmpire
|
||||||
|
{
|
||||||
|
public class CompTransformAtFullCapacity : ThingComp
|
||||||
|
{
|
||||||
|
private CompProperties_TransformAtFullCapacity Props => (CompProperties_TransformAtFullCapacity)props;
|
||||||
|
|
||||||
|
// 存储转换前的计数,用于恢复
|
||||||
|
private int storedCountAtTransform = 0;
|
||||||
|
|
||||||
|
public Building_MechanoidRecycler Recycler => parent as Building_MechanoidRecycler;
|
||||||
|
public bool IsCooldownActive => Recycler?.IsCooldownActive ?? false;
|
||||||
|
public bool IsAtFullCapacity => Recycler?.StoredCount >= Props.requiredCapacity;
|
||||||
|
|
||||||
|
public override void Initialize(CompProperties props)
|
||||||
|
{
|
||||||
|
base.Initialize(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PostExposeData()
|
||||||
|
{
|
||||||
|
base.PostExposeData();
|
||||||
|
Scribe_Values.Look(ref storedCountAtTransform, "storedCountAtTransform", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<Gizmo> CompGetGizmosExtra()
|
||||||
|
{
|
||||||
|
if (parent.Faction == Faction.OfPlayer && Recycler != null)
|
||||||
|
{
|
||||||
|
Command_Action command = new Command_Action
|
||||||
|
{
|
||||||
|
defaultLabel = Props.gizmoLabel,
|
||||||
|
defaultDesc = GetGizmoDescription(),
|
||||||
|
icon = GetGizmoIcon(),
|
||||||
|
action = TransformToPawn
|
||||||
|
};
|
||||||
|
|
||||||
|
// 禁用条件
|
||||||
|
if (IsCooldownActive)
|
||||||
|
{
|
||||||
|
command.Disable($"建筑刚部署,需要等待 {Recycler.GetRemainingCooldownHours():F1} 小时后才能转换");
|
||||||
|
}
|
||||||
|
else if (!IsAtFullCapacity)
|
||||||
|
{
|
||||||
|
command.Disable($"需要储存 {Props.requiredCapacity} 个机械族,当前: {Recycler.StoredCount}/{Props.requiredCapacity}");
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return command;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetGizmoDescription()
|
||||||
|
{
|
||||||
|
string desc = Props.gizmoDesc;
|
||||||
|
if (IsCooldownActive)
|
||||||
|
{
|
||||||
|
desc += $"\n\n冷却时间剩余: {Recycler.GetRemainingCooldownHours():F1} 小时";
|
||||||
|
}
|
||||||
|
desc += $"\n目标单位: {Props.targetPawnKind.LabelCap}";
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Texture2D GetGizmoIcon()
|
||||||
|
{
|
||||||
|
if (!Props.gizmoIconPath.NullOrEmpty())
|
||||||
|
{
|
||||||
|
return ContentFinder<Texture2D>.Get(Props.gizmoIconPath);
|
||||||
|
}
|
||||||
|
return TexCommand.ReleaseAnimals;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void NotifyStorageUpdated()
|
||||||
|
{
|
||||||
|
// 当存储更新时,可以触发视觉效果
|
||||||
|
if (IsAtFullCapacity && !IsCooldownActive)
|
||||||
|
{
|
||||||
|
// 播放满容量提示效果
|
||||||
|
//MoteMaker.ThrowLightningGlow(parent.DrawPos, parent.Map, 2f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TransformToPawn()
|
||||||
|
{
|
||||||
|
if (Recycler == null || !parent.Spawned)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Map map = parent.Map;
|
||||||
|
IntVec3 position = parent.Position;
|
||||||
|
Faction faction = parent.Faction;
|
||||||
|
|
||||||
|
// 存储当前的机械族计数(用于恢复)
|
||||||
|
storedCountAtTransform = Recycler.StoredCount;
|
||||||
|
|
||||||
|
// 消耗存储的机械族
|
||||||
|
if (!Recycler.ConsumeMechanoids(Props.requiredCapacity))
|
||||||
|
{
|
||||||
|
Messages.Message("机械族数量不足", MessageTypeDefOf.RejectInput);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成目标Pawn
|
||||||
|
PawnGenerationRequest request = new PawnGenerationRequest(
|
||||||
|
Props.targetPawnKind,
|
||||||
|
faction,
|
||||||
|
PawnGenerationContext.NonPlayer,
|
||||||
|
-1,
|
||||||
|
forceGenerateNewPawn: true,
|
||||||
|
allowDead: false,
|
||||||
|
allowDowned: false,
|
||||||
|
canGeneratePawnRelations: false,
|
||||||
|
mustBeCapableOfViolence: true
|
||||||
|
);
|
||||||
|
|
||||||
|
Pawn newPawn = PawnGenerator.GeneratePawn(request);
|
||||||
|
|
||||||
|
// 添加转换组件并设置恢复数据
|
||||||
|
var transformComp = newPawn.GetComp<CompTransformIntoBuilding>();
|
||||||
|
if (transformComp != null)
|
||||||
|
{
|
||||||
|
transformComp.SetRestoreData(parent.def, storedCountAtTransform);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 动态添加组件
|
||||||
|
var compProps = new CompProperties_TransformIntoBuilding
|
||||||
|
{
|
||||||
|
targetBuildingDef = parent.def
|
||||||
|
};
|
||||||
|
transformComp = new CompTransformIntoBuilding();
|
||||||
|
transformComp.parent = newPawn;
|
||||||
|
transformComp.props = compProps;
|
||||||
|
newPawn.AllComps.Add(transformComp);
|
||||||
|
transformComp.Initialize(compProps);
|
||||||
|
transformComp.SetRestoreData(parent.def, storedCountAtTransform);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移除建筑
|
||||||
|
parent.DeSpawn(DestroyMode.Vanish);
|
||||||
|
|
||||||
|
// 生成Pawn
|
||||||
|
GenSpawn.Spawn(newPawn, position, map, WipeMode.Vanish);
|
||||||
|
|
||||||
|
// 选中新生成的Pawn
|
||||||
|
if (Find.Selector.IsSelected(parent))
|
||||||
|
{
|
||||||
|
Find.Selector.Select(newPawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
Messages.Message($"{parent.Label} 已转换为 {newPawn.LabelCap}", MessageTypeDefOf.PositiveEvent);
|
||||||
|
|
||||||
|
// 播放转换效果
|
||||||
|
PlayTransformEffects(position, map);
|
||||||
|
}
|
||||||
|
|
||||||
|
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.ThrowLightningGlow(position.ToVector3Shifted(), map, 2f);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//// 播放音效
|
||||||
|
//SoundDefOf.PsychicPulseGlobal.PlayOneShot(new TargetInfo(position, map));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
using RimWorld;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace WulaFallenEmpire
|
||||||
|
{
|
||||||
|
public class CompTransformIntoBuilding : ThingComp
|
||||||
|
{
|
||||||
|
private CompProperties_TransformIntoBuilding Props => (CompProperties_TransformIntoBuilding)props;
|
||||||
|
private Pawn Pawn => (Pawn)parent;
|
||||||
|
|
||||||
|
// 恢复数据
|
||||||
|
private ThingDef restoreBuildingDef;
|
||||||
|
private int restoreMechanoidCount;
|
||||||
|
|
||||||
|
public override void Initialize(CompProperties props)
|
||||||
|
{
|
||||||
|
base.Initialize(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PostExposeData()
|
||||||
|
{
|
||||||
|
base.PostExposeData();
|
||||||
|
Scribe_Defs.Look(ref restoreBuildingDef, "restoreBuildingDef");
|
||||||
|
Scribe_Values.Look(ref restoreMechanoidCount, "restoreMechanoidCount", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置恢复数据
|
||||||
|
public void SetRestoreData(ThingDef buildingDef, int mechanoidCount)
|
||||||
|
{
|
||||||
|
restoreBuildingDef = buildingDef;
|
||||||
|
restoreMechanoidCount = mechanoidCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<Gizmo> CompGetGizmosExtra()
|
||||||
|
{
|
||||||
|
if (parent.Faction == Faction.OfPlayer && Pawn != null)
|
||||||
|
{
|
||||||
|
Command_Action command = new Command_Action
|
||||||
|
{
|
||||||
|
defaultLabel = Props.gizmoLabel,
|
||||||
|
defaultDesc = GetGizmoDescription(),
|
||||||
|
icon = GetGizmoIcon(),
|
||||||
|
action = TransformToBuilding
|
||||||
|
};
|
||||||
|
|
||||||
|
// 检查是否可以转换
|
||||||
|
if (!CanTransformNow())
|
||||||
|
{
|
||||||
|
command.Disable("无法在当前位置转换");
|
||||||
|
}
|
||||||
|
|
||||||
|
yield return command;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetGizmoDescription()
|
||||||
|
{
|
||||||
|
string desc = Props.gizmoDesc;
|
||||||
|
if (restoreBuildingDef != null)
|
||||||
|
{
|
||||||
|
desc += $"\n\n将恢复为: {restoreBuildingDef.LabelCap}";
|
||||||
|
}
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Texture2D GetGizmoIcon()
|
||||||
|
{
|
||||||
|
if (!Props.gizmoIconPath.NullOrEmpty())
|
||||||
|
{
|
||||||
|
return ContentFinder<Texture2D>.Get(Props.gizmoIconPath);
|
||||||
|
}
|
||||||
|
return TexCommand.Install;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool CanTransformNow()
|
||||||
|
{
|
||||||
|
if (parent == null || !parent.Spawned)
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TransformToBuilding()
|
||||||
|
{
|
||||||
|
if (Pawn == null || !Pawn.Spawned)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Map map = Pawn.Map;
|
||||||
|
IntVec3 position = Pawn.Position;
|
||||||
|
Faction faction = Pawn.Faction;
|
||||||
|
|
||||||
|
// 确定要生成的建筑类型
|
||||||
|
ThingDef buildingDef = restoreBuildingDef ?? Props.targetBuildingDef;
|
||||||
|
if (buildingDef == null)
|
||||||
|
{
|
||||||
|
Messages.Message("无法确定目标建筑类型", MessageTypeDefOf.RejectInput);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移除Pawn
|
||||||
|
Pawn.DeSpawn(DestroyMode.Vanish);
|
||||||
|
|
||||||
|
// 生成建筑
|
||||||
|
Building newBuilding = (Building)GenSpawn.Spawn(buildingDef, position, map, WipeMode.Vanish);
|
||||||
|
newBuilding.SetFaction(faction);
|
||||||
|
|
||||||
|
// 恢复机械族计数
|
||||||
|
var recycler = newBuilding as Building_MechanoidRecycler;
|
||||||
|
if (recycler != null && restoreMechanoidCount > 0)
|
||||||
|
{
|
||||||
|
recycler.SetMechanoidCount(restoreMechanoidCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加建筑转换组件
|
||||||
|
var transformComp = newBuilding.TryGetComp<CompTransformAtFullCapacity>();
|
||||||
|
if (transformComp == null)
|
||||||
|
{
|
||||||
|
// 动态添加组件
|
||||||
|
var compProps = new CompProperties_TransformAtFullCapacity
|
||||||
|
{
|
||||||
|
targetPawnKind = Pawn.kindDef
|
||||||
|
};
|
||||||
|
transformComp = new CompTransformAtFullCapacity();
|
||||||
|
transformComp.parent = newBuilding;
|
||||||
|
transformComp.props = compProps;
|
||||||
|
newBuilding.AllComps.Add(transformComp);
|
||||||
|
transformComp.Initialize(compProps);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 选中新生成的建筑
|
||||||
|
if (Find.Selector.IsSelected(Pawn))
|
||||||
|
{
|
||||||
|
Find.Selector.Select(newBuilding);
|
||||||
|
}
|
||||||
|
|
||||||
|
Messages.Message($"{Pawn.LabelCap} 已部署为 {newBuilding.Label}", MessageTypeDefOf.PositiveEvent);
|
||||||
|
|
||||||
|
// 播放转换效果
|
||||||
|
PlayTransformEffects(position, map);
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
//}
|
||||||
|
|
||||||
|
//// 播放音效
|
||||||
|
//SoundDefOf.MechClusterDefeated.PlayOneShot(new TargetInfo(position, map));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -208,11 +208,8 @@ namespace WulaFallenEmpire
|
|||||||
yield return new DroneGizmo(this);
|
yield return new DroneGizmo(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更换武器按钮(仅当有装备武器时显示)
|
// 更换武器按钮
|
||||||
if (MechPawn.equipment?.Primary != null)
|
yield return CreateWeaponSwitchGizmo();
|
||||||
{
|
|
||||||
yield return CreateWeaponSwitchGizmo();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -122,6 +122,10 @@
|
|||||||
<Compile Include="BuildingComp\WULA_SkyfallerCaller\WulaSkyfallerWorldComponent.cs" />
|
<Compile Include="BuildingComp\WULA_SkyfallerCaller\WulaSkyfallerWorldComponent.cs" />
|
||||||
<Compile Include="BuildingComp\WULA_StorageTurret\CompProperties_StorageTurret.cs" />
|
<Compile Include="BuildingComp\WULA_StorageTurret\CompProperties_StorageTurret.cs" />
|
||||||
<Compile Include="BuildingComp\WULA_StorageTurret\CompStorageTurret.cs" />
|
<Compile Include="BuildingComp\WULA_StorageTurret\CompStorageTurret.cs" />
|
||||||
|
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompProperties_TransformAtFullCapacity.cs" />
|
||||||
|
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompProperties_TransformIntoBuilding.cs" />
|
||||||
|
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompTransformAtFullCapacity.cs" />
|
||||||
|
<Compile Include="BuildingComp\WULA_TransformAtFullCapacity\CompTransformIntoBuilding.cs" />
|
||||||
<Compile Include="EventSystem\CompOpenCustomUI.cs" />
|
<Compile Include="EventSystem\CompOpenCustomUI.cs" />
|
||||||
<Compile Include="EventSystem\Condition\ConditionBase.cs" />
|
<Compile Include="EventSystem\Condition\ConditionBase.cs" />
|
||||||
<Compile Include="EventSystem\Condition\Condition_FlagExists.cs" />
|
<Compile Include="EventSystem\Condition\Condition_FlagExists.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user