可控机械族(未完成)

This commit is contained in:
2025-10-31 12:02:38 +08:00
parent 8fee1bcfba
commit 4c8821f3ae
7 changed files with 702 additions and 3 deletions

View File

@@ -1,6 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThingDef Abstract="True" Name="Wula_Human_Protect_Superclass" ParentName="BasePawn">
<!-- human的克隆防止其他mod修改human导致的不兼容 -->
<ThingDef Name="Wula_Human_Protect_Superclass" ParentName="BasePawn">
<defName>Human</defName>
<label>human</label>
<description>A baseline human, mostly unmodified by gene engineering and mostly unchanged by evolutionary pressures on non-Earth planets.</description>
<statBases>
<MarketValue>1750</MarketValue>
<MoveSpeed>4.6</MoveSpeed>
@@ -221,10 +225,16 @@
</li>
</comps>
</ThingDef>
<AlienRace.ThingDef_AlienRace Name="Race_Wula_Machine" ParentName="Wula_Human_Protect_Superclass">
<!-- 基础类希望对human的更改在此处应用 -->
<ThingDef Abstract="True" Name="Wula_Human_Base" ParentName="Wula_Human_Protect_Superclass">
<statBases>
<MarketValue>0</MarketValue>
</statBases>
</ThingDef>
<AlienRace.ThingDef_AlienRace Name="Race_Wula_Machine" ParentName="Wula_Human_Base">
<defName>WulaSpecies</defName>
<label>机械乌拉</label>
<description>乌拉星人是一个曾统治银河系的堕落帝国的主要种族,机械乌拉则是仿照她们样貌制作的合成人——随着帝国的衰颓,大量乌拉合成人流散各地。她们拥有近乎无限的寿命,并且拥有一部分机械体的特性。</description>
<description>诞生于乌拉帝国的机械生命体</description>
<uiIconPath>Wula/Things/WulaSpecies/WULA_Species_Icon</uiIconPath>
<alienRace>
@@ -1355,6 +1365,7 @@
<WastepacksPerRecharge MayRequire="Ludeon.RimWorld.Biotech">0</WastepacksPerRecharge>
</statBases>
<race>
<thinkTreeMain>WULA_AutonomousMech</thinkTreeMain>
<mechEnabledWorkTypes>
<li>Hauling</li>
<!-- <li>Mining</li> -->
@@ -1385,6 +1396,11 @@
</deathAction>
</race>
<comps>
<li Class="WulaFallenEmpire.CompProperties_AutonomousMech">
<enableAutonomousDrafting>true</enableAutonomousDrafting>
<enableAutonomousWork>true</enableAutonomousWork>
<requirePowerForAutonomy>true</requirePowerForAutonomy>
</li>
<!--
全局指挥组件 (Global Mech Command Component)
此组件通过Harmony补丁 MechanitorUtility_InMechanitorCommandRange_Patch.cs 来实现功能。

View File

@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8" ?>
<Defs>
<ThinkTreeDef>
<defName>WULA_AutonomousMech</defName>
<thinkRoot Class="ThinkNode_Priority">
<subNodes>
<!-- Despawned -->
<li Class="ThinkNode_Subtree">
<treeDef>Despawned</treeDef>
</li>
<!-- Deactivated -->
<li Class="ThinkNode_ConditionalDeactivated" MayRequire="Ludeon.RimWorld.Odyssey">
<subNodes>
<li Class="JobGiver_Deactivated" />
</subNodes>
</li>
<!-- Downed -->
<li Class="ThinkNode_Subtree">
<treeDef>Downed</treeDef>
</li>
<!-- Self-Shutdown -->
<li Class="ThinkNode_ConditionalLowEnergy" MayRequire="Ludeon.RimWorld.Biotech">
<subNodes>
<li Class="JobGiver_SelfShutdown" />
</subNodes>
</li>
<!-- Mental state -->
<li Class="ThinkNode_ConditionalMentalState">
<state>BerserkMechanoid</state>
<subNodes>
<li Class="ThinkNode_Priority">
<subNodes>
<li Class="JobGiver_Berserk" />
<li Class="JobGiver_WanderAnywhere">
<maxDanger>Deadly</maxDanger>
</li>
</subNodes>
</li>
</subNodes>
</li>
<!-- Do a queued job (支持右键强制高优先级工作) -->
<li Class="ThinkNode_QueuedJob" />
<!-- 征召行为:使用人类的条件节点 -->
<li Class="ThinkNode_ConditionalDrafted">
<subNodes>
<li Class="ThinkNode_Tagger">
<tagToGive>DraftedOrder</tagToGive>
<subNodes>
<li Class="JobGiver_MoveToStandable" />
<li Class="JobGiver_Orders" />
</subNodes>
</li>
</subNodes>
</li>
<!-- Lord -->
<li Class="ThinkNode_Subtree">
<treeDef>LordDuty</treeDef>
</li>
<!-- 自主机械族工作模式 -->
<li Class="WulaFallenEmpire.ThinkNode_ConditionalAutonomousMech">
<subNodes>
<li Class="ThinkNode_ConditionalNotFormingCaravan">
<subNodes>
<!-- Keep charging if we're already charging -->
<li Class="ThinkNode_ConditionalRecharging">
<subNodes>
<li Class="JobGiver_GetEnergy_Charger" />
</subNodes>
</li>
<!-- Work modes -->
<li Class="ThinkNode_ConditionalWorkMode" MayRequire="Ludeon.RimWorld.Biotech">
<workMode>Work</workMode>
<subNodes>
<li Class="JobGiver_SeekAllowedArea" />
<li Class="JobGiver_GetEnergy_Charger" />
<!-- 紧急工作 -->
<li Class="JobGiver_Work">
<emergency>true</emergency>
</li>
<!-- 常规工作 -->
<li Class="JobGiver_Work" />
<!-- 非战斗机械族的巡逻行为 -->
<li Class="ThinkNode_ConditionalWorkMech">
<invert>true</invert>
<subNodes>
<li Class="JobGiver_AIFightEnemies">
<targetAcquireRadius>65</targetAcquireRadius>
<targetKeepRadius>72</targetKeepRadius>
</li>
<li Class="ThinkNode_Tagger">
<tagToGive>MiscWork</tagToGive>
<subNodes>
<li Class="JobGiver_WanderColony">
<maxDanger>Deadly</maxDanger>
<reportStringOverride>Patrolling.</reportStringOverride>
</li>
</subNodes>
</li>
</subNodes>
</li>
</subNodes>
</li>
<!-- 充电模式 -->
<li Class="ThinkNode_ConditionalWorkMode" MayRequire="Ludeon.RimWorld.Biotech">
<workMode>Recharge</workMode>
<subNodes>
<li Class="JobGiver_SeekAllowedArea" />
<li Class="JobGiver_GetEnergy_Charger" />
<li Class="JobGiver_GetEnergy_SelfShutdown">
<forced>true</forced>
</li>
</subNodes>
</li>
<!-- 休眠模式 -->
<li Class="ThinkNode_ConditionalWorkMode" MayRequire="Ludeon.RimWorld.Biotech">
<workMode>SelfShutdown</workMode>
<subNodes>
<li Class="JobGiver_SeekAllowedArea" />
<li Class="JobGiver_SelfShutdown" />
</subNodes>
</li>
</subNodes>
</li>
</subNodes>
</li>
<!-- 非玩家控制机械族的战斗行为 -->
<li Class="ThinkNode_ConditionalPlayerControlledMech">
<invert>true</invert>
<subNodes>
<li Class="JobGiver_AIFightEnemies">
<targetAcquireRadius>30</targetAcquireRadius>
<targetKeepRadius>35</targetKeepRadius>
</li>
</subNodes>
</li>
<!-- 空闲时的行为 -->
<li Class="ThinkNode_Tagger">
<tagToGive>Idle</tagToGive>
<subNodes>
<li Class="JobGiver_WanderColony">
<maxDanger>None</maxDanger>
</li>
</subNodes>
</li>
<!-- Idle error -->
<li Class="JobGiver_IdleError"/>
</subNodes>
</thinkRoot>
</ThinkTreeDef>
</Defs>