暂存
This commit is contained in:
Binary file not shown.
61
1.6/1.6/Defs/JobDefs/ARA_Duties.xml
Normal file
61
1.6/1.6/Defs/JobDefs/ARA_Duties.xml
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<![CDATA[
|
||||
<DutyDef>
|
||||
<defName>ARA_DefendAndExpandHive</defName>
|
||||
<thinkNode Class="ThinkNode_Priority">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_HiveDefense">
|
||||
<needLOSToAcquireNonPawnTargets>true</needLOSToAcquireNonPawnTargets>
|
||||
<targetAcquireRadius>30</targetAcquireRadius>
|
||||
<chaseTarget>false</chaseTarget>
|
||||
</li>
|
||||
<li Class="ThinkNode_ChancePerHour_Constant">
|
||||
<mtbHours>2.5</mtbHours>
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.JobGiver_MaintainBuildings">
|
||||
<maintainableThingDefs>
|
||||
<li>ARA_InteractiveEggSac</li> <!-- 默认维护Hive -->
|
||||
</maintainableThingDefs>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.JobGiver_MaintainBuildings">
|
||||
<maintainableThingDefs>
|
||||
<li>ARA_InteractiveEggSac</li> <!-- 默认维护Hive -->
|
||||
</maintainableThingDefs>
|
||||
<onlyIfDamagingState>true</onlyIfDamagingState>
|
||||
</li>
|
||||
<li Class="ThinkNode_ConditionalBodySize">
|
||||
<min>0.7</min>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalHiveCanReproduce">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ChancePerHour_InsectDigChance">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_MineRandom" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_PrioritySorter">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_GetFood" />
|
||||
<li Class="JobGiver_GetRest" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="JobGiver_WanderHive">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</thinkNode>
|
||||
</DutyDef>
|
||||
]]>
|
||||
</Defs>
|
||||
@@ -4,7 +4,7 @@
|
||||
<JobDef>
|
||||
<defName>ARA_IncubateJob</defName>
|
||||
<driverClass>ArachnaeSwarm.JobDriver_Incubate</driverClass>
|
||||
<reportString>incubating TargetA.</reportString>
|
||||
<reportString>为 TargetA 注入信息素.</reportString>
|
||||
</JobDef>
|
||||
|
||||
</Defs>
|
||||
@@ -376,7 +376,7 @@
|
||||
<race>
|
||||
<!-- <fleshType>WULA_Fleshtype</fleshType> -->
|
||||
<!-- AI行为,勿改 -->
|
||||
<thinkTreeMain>Humanlike</thinkTreeMain>
|
||||
<thinkTreeMain>ARA_Humanlike</thinkTreeMain>
|
||||
<!-- 智力水平 -->
|
||||
<intelligence>Humanlike</intelligence>
|
||||
<!-- 血液,不流血 -->
|
||||
|
||||
@@ -599,7 +599,7 @@
|
||||
<body>ArachnaeQueen_Body</body>
|
||||
<fleshType>Normal</fleshType>
|
||||
<!-- AI行为,勿改 -->
|
||||
<thinkTreeMain>Humanlike</thinkTreeMain>
|
||||
<thinkTreeMain>ARA_Humanlike</thinkTreeMain>
|
||||
<!-- 智力水平 -->
|
||||
<intelligence>Humanlike</intelligence>
|
||||
<!-- 肉和皮革的定义 -->
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
<ThingDef ParentName="BuildingNaturalBase">
|
||||
<defName>ARA_InteractiveEggSac</defName>
|
||||
<label>阿拉克涅虫卵囊-休眠中</label>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质——可以通过阿拉克涅女皇种的交互完成激活进程。</description>
|
||||
<thingClass>ArachnaeSwarm.Building_Incubator</thingClass>
|
||||
<description>一个脆弱、易燃、黏滑的囊状物,是阿拉克涅女皇种所诞之卵,内含哺育一只新督虫所需的营养和遗传物质——可以通过阿拉克涅女皇种的交互完成激活进程。</description>
|
||||
<thingClass>Building</thingClass>
|
||||
<category>Building</category>
|
||||
<size>(1,1)</size>
|
||||
<minifiedDef>MinifiedThing</minifiedDef>
|
||||
@@ -53,9 +53,31 @@
|
||||
<whitelist>
|
||||
<li>ARA_ArachnaeQueen</li>
|
||||
</whitelist>
|
||||
<delay>300</delay> <!-- 5 seconds -->
|
||||
<pawnKindDelays>
|
||||
<li>
|
||||
<pawnKind>Megascarab</pawnKind>
|
||||
<delay>3000</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>Spelopede</pawnKind>
|
||||
<delay>3000</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>Megaspider</pawnKind>
|
||||
<delay>3000</delay>
|
||||
</li>
|
||||
<li>
|
||||
<pawnKind>ArachnaeNode_Race_Myrmecocystus</pawnKind>
|
||||
<delay>300</delay>
|
||||
</li>
|
||||
</pawnKindDelays>
|
||||
<destroyOnSpawn>true</destroyOnSpawn>
|
||||
</li>
|
||||
<li Class="CompProperties_Maintainable">
|
||||
<ticksHealthy>60000</ticksHealthy>
|
||||
<ticksNeedsMaintenance>60000</ticksNeedsMaintenance>
|
||||
<damagePerTickRare>10</damagePerTickRare>
|
||||
</li>
|
||||
<li Class="CompProperties_SpawnEffecterOnDestroy">
|
||||
<effect>CocoonDestroyed</effect>
|
||||
</li>
|
||||
|
||||
501
1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml
Normal file
501
1.6/1.6/Defs/ThinkTreeDefs/ARA_ThinkTrees.xml
Normal file
@@ -0,0 +1,501 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Defs>
|
||||
<ThinkTreeDef>
|
||||
<defName>ARA_Humanlike</defName> <!-- 更改defName以避免与原版Humanlike冲突 -->
|
||||
<thinkRoot Class="ThinkNode_Priority">
|
||||
<subNodes>
|
||||
|
||||
<!-- Do lovin' -->
|
||||
<li Class="ThinkNode_ConditionalLyingDown">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ChancePerHour_Lovin">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_DoLovin" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- If we HAVE to keep lying down... -->
|
||||
<li Class="ThinkNode_ConditionalMustKeepLyingDown">
|
||||
<subNodes>
|
||||
<!-- Do a queued job if possible (e.g. watch tv in bed) -->
|
||||
<li Class="ThinkNode_QueuedJob">
|
||||
<inBedOnly>true</inBedOnly>
|
||||
</li>
|
||||
|
||||
<!-- Get joy -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_PrioritySorter">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Priority_GetJoy">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_GetJoyInBed" />
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="JobGiver_MeditateInBed"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Keep lying down -->
|
||||
<li Class="JobGiver_KeepLyingDown" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>Downed</treeDef>
|
||||
</li>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>BurningResponse</treeDef>
|
||||
</li>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MentalStateCritical</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Escaping threats -->
|
||||
<li Class="ThinkNode_Subtree" MayRequire="Ludeon.RimWorld.Biotech">
|
||||
<treeDef>Abilities_Escape</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- React to close melee threat -->
|
||||
<li Class="JobGiver_ReactToCloseMeleeThreat" />
|
||||
|
||||
<!-- Mental state non critical -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MentalStateNonCritical</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Behavior when roped -->
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>RopedPawn</treeDef>
|
||||
</li>
|
||||
|
||||
<!-- Insertion hook for modders -->
|
||||
<li Class="ThinkNode_SubtreesByTag">
|
||||
<insertTag>Humanlike_PostMentalState</insertTag>
|
||||
</li>
|
||||
|
||||
<!-- Do a queued job -->
|
||||
<li Class="ThinkNode_QueuedJob" />
|
||||
|
||||
<!-- Wait if drafted -->
|
||||
<li Class="ThinkNode_ConditionalColonist">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>DraftedOrder</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_MoveToStandable" />
|
||||
<li Class="JobGiver_Orders" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Self-tend if you're an NPC -->
|
||||
<li Class="ThinkNode_ConditionalNPCCanSelfTendNow">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_SelfTend" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Lord directives (high priority) -->
|
||||
<li Class="ThinkNode_JoinVoluntarilyJoinableLord">
|
||||
<dutyHook>HighPriority</dutyHook>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>LordDuty</treeDef>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Insertion hook for modders -->
|
||||
<li Class="ThinkNode_SubtreesByTag">
|
||||
<insertTag>Humanlike_PostDuty</insertTag>
|
||||
</li>
|
||||
|
||||
<!-- JobGiver_MaintainBuildings start -->
|
||||
<li Class="ThinkNode_ChancePerHour_Constant">
|
||||
<mtbHours>2.5</mtbHours>
|
||||
<subNodes>
|
||||
<li Class="ArachnaeSwarm.JobGiver_MaintainBuildings">
|
||||
<maintainableThingDefs>
|
||||
<li>ARA_InteractiveEggSac</li> <!-- 默认维护Hive -->
|
||||
</maintainableThingDefs>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="ArachnaeSwarm.JobGiver_MaintainBuildings">
|
||||
<maintainableThingDefs>
|
||||
<li>ARA_InteractiveEggSac</li> <!-- 默认维护Hive -->
|
||||
</maintainableThingDefs>
|
||||
<onlyIfDamagingState>true</onlyIfDamagingState>
|
||||
</li>
|
||||
<!-- JobGiver_MaintainBuildings end -->
|
||||
|
||||
<!-- Prisoner -->
|
||||
<li Class="ThinkNode_ConditionalPrisoner">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
<subNodes>
|
||||
<!-- If it's the player home map... -->
|
||||
<li Class="ThinkNode_ConditionalInNonPlayerHomeMap">
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<!-- Wait instead of escaping if should -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PrisonerWaitInsteadOfEscaping">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Escape -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Escaping</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PrisonerEscape" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Exit map if released -->
|
||||
<li Class="ThinkNode_ConditionalReleased">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapBest">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>RestingForMedicalReasons</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PatientGoToBed" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>ChangingApparel</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PrisonerGetDressed" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_PrioritySorter">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="JobGiver_GetFood"/>
|
||||
<li Class="JobGiver_GetRest"/>
|
||||
<li Class="JobGiver_SatisfyChemicalNeed"/>
|
||||
<li Class="JobGiver_SatifyChemicalDependency" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="JobGiver_GetHemogen" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="JobGiver_GetDeathrest" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
<li Class="ThinkNode_Priority_GetJoy">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_GetJoy"/>
|
||||
<li Class="JobGiver_GetJoyInBed"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
<li Class="JobGiver_Meditate"/>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- If in non-PlayerHomeMap -->
|
||||
<li Class="ThinkNode_ConditionalInNonPlayerHomeMap">
|
||||
<subNodes>
|
||||
<!-- No colonist spawned in the map -->
|
||||
<li Class="ThinkNode_ConditionalAnyUndownedColonistSpawnedNearby">
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Escaping</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PrisonerEscape" />
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- Wander -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderColony">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderCurrentRoom">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_IdleError" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- If on colonist team, do forced and emergency work -->
|
||||
<li Class="ThinkNode_ConditionalColonist">
|
||||
<subNodes>
|
||||
<!-- Seek allowed area -->
|
||||
<li Class="JobGiver_SeekAllowedArea" />
|
||||
|
||||
<!-- Seek safe temperatures -->
|
||||
<li Class="JobGiver_BringBabyToSafety" />
|
||||
<li Class="JobGiver_SeekSafeTemperature" />
|
||||
|
||||
<!-- Drop unnused inventory -->
|
||||
<li Class="JobGiver_DropUnusedInventory" />
|
||||
|
||||
<!-- Emergency work -->
|
||||
<li Class="JobGiver_Work">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
<emergency>true</emergency>
|
||||
</li>
|
||||
|
||||
<!-- Get food (only if starving) -->
|
||||
<li Class="ThinkNode_ConditionalStarving">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>SatisfyingNeeds</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_GetFood">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Breastfeed -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_Autofeed" MayRequire="Ludeon.RimWorld.Biotech" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Lord directives (medium priority) -->
|
||||
<li Class="ThinkNode_JoinVoluntarilyJoinableLord">
|
||||
<dutyHook>MediumPriority</dutyHook>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>LordDuty</treeDef>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Pick up a weapon dropped while previously downed -->
|
||||
<li Class="JobGiver_PickupDroppedWeapon">
|
||||
<ignoreForbidden>true</ignoreForbidden>
|
||||
</li>
|
||||
|
||||
<!-- Optimize apparel -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>ChangingApparel</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_OptimizeApparel">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Look change -->
|
||||
<li MayRequire="Ludeon.RimWorld.Ideology" Class="ThinkNode_ConditionalWantsLookChange">
|
||||
<subNodes>
|
||||
<li Class="JobGiver_UseStylingStationAutomatic" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Dye hair -->
|
||||
<li MayRequire="Ludeon.RimWorld.Ideology" Class="JobGiver_DyeHair" />
|
||||
|
||||
<!-- Take for inventory stock -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>TakeForInventoryStock</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_TakeForInventoryStock">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Unload your inventory -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>UnloadingOwnInventory</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_UnloadYourInventory" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Pack food if not hungry-->
|
||||
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
||||
<need>Food</need>
|
||||
<threshold>0.6</threshold>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PackFood">
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Behavior from traits -->
|
||||
<li Class="ThinkNode_TraitBehaviors" />
|
||||
|
||||
<!-- Insertion hook for modders -->
|
||||
<li Class="ThinkNode_SubtreesByTag">
|
||||
<insertTag>Humanlike_PreMain</insertTag>
|
||||
</li>
|
||||
|
||||
<!-- Main colonist behavior core -->
|
||||
<li Class="ThinkNode_ConditionalColonist">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MainColonistBehaviorCore</treeDef>
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
<!-- Main wild man behavior core -->
|
||||
<li Class="ThinkNode_ConditionalPawnKind">
|
||||
<pawnKind>WildMan</pawnKind>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Subtree">
|
||||
<treeDef>MainWildManBehaviorCore</treeDef>
|
||||
<leaveJoinableLordIfIssuesJob>true</leaveJoinableLordIfIssuesJob>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Insertion hook for modders -->
|
||||
<li Class="ThinkNode_SubtreesByTag">
|
||||
<insertTag>Humanlike_PostMain</insertTag>
|
||||
</li>
|
||||
|
||||
<!-- Idle colonist -->
|
||||
<li Class="ThinkNode_ConditionalColonist">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<!-- Do random joy activity -->
|
||||
<li Class="ThinkNode_ConditionalNeedPercentageAbove">
|
||||
<need>Joy</need>
|
||||
<threshold>0.9</threshold>
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_IdleJoy" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Wander -->
|
||||
<li Class="JobGiver_WanderColony">
|
||||
<maxDanger>None</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Idle wild man -->
|
||||
<li Class="ThinkNode_ConditionalPawnKind">
|
||||
<pawnKind>WildMan</pawnKind>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<!-- Wander -->
|
||||
<li Class="JobGiver_WanderAnywhere">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
<ticksBetweenWandersRange>120~240</ticksBetweenWandersRange>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- If you're a neutral guest, if you're not hurt exit the map, otherwise use a medical bed -->
|
||||
<li Class="ThinkNode_ConditionalGuest">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_ConditionalNonPlayerNonHostileFactionOrFactionless">
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>RestingForMedicalReasons</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_PatientGoToBed" />
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapBest">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- Final backup: If you're just here for no apparent reason, and not a colonist, leave the map
|
||||
e.g. This happens for pawns who are downed during combat, then later self-heal -->
|
||||
<li Class="ThinkNode_ConditionalColonist">
|
||||
<invert>true</invert>
|
||||
<subNodes>
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Misc</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_ExitMapBest">
|
||||
<defaultLocomotion>Walk</defaultLocomotion>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<!-- If you can't leave, just wander -->
|
||||
<li Class="ThinkNode_Tagger">
|
||||
<tagToGive>Idle</tagToGive>
|
||||
<subNodes>
|
||||
<li Class="JobGiver_WanderAnywhere">
|
||||
<maxDanger>Deadly</maxDanger>
|
||||
</li>
|
||||
</subNodes>
|
||||
</li>
|
||||
|
||||
<li Class="JobGiver_IdleError" />
|
||||
</subNodes>
|
||||
</thinkRoot>
|
||||
</ThinkTreeDef>
|
||||
</Defs>
|
||||
@@ -83,7 +83,7 @@
|
||||
<Compile Include="HediffComp_HiveMindDrone.cs" />
|
||||
<Compile Include="CompAbilityEffect_BindDrone.cs" />
|
||||
<Compile Include="CompProperties_AbilityBindDrone.cs" />
|
||||
<Compile Include="Alert_UnlinkedHiveMindDrone.cs" />
|
||||
<Compile Include="JobGiver_MaintainBuildings.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
|
||||
@@ -9,7 +9,7 @@ namespace ArachnaeSwarm
|
||||
{
|
||||
public List<PawnKindDef> pawnKinds;
|
||||
public List<PawnKindDef> whitelist;
|
||||
public int delay = 0;
|
||||
public List<PawnKindDelay> pawnKindDelays;
|
||||
public bool destroyOnSpawn = false;
|
||||
public IntRange spawnCount = new IntRange(1, 1);
|
||||
public Type lordJob;
|
||||
@@ -32,4 +32,10 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PawnKindDelay
|
||||
{
|
||||
public PawnKindDef pawnKind;
|
||||
public int delay;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using Verse.AI;
|
||||
@@ -45,7 +46,8 @@ namespace ArachnaeSwarm
|
||||
public void StartIncubation()
|
||||
{
|
||||
spawningPawnKind = selectedPawnKind;
|
||||
spawnUntilTick = Find.TickManager.TicksGame + Props.delay;
|
||||
int delay = Props.pawnKindDelays?.FirstOrDefault(pkd => pkd.pawnKind == selectedPawnKind)?.delay ?? 0;
|
||||
spawnUntilTick = Find.TickManager.TicksGame + delay;
|
||||
}
|
||||
|
||||
public override void CompTick()
|
||||
|
||||
56
Source/ArachnaeSwarm/JobGiver_MaintainBuildings.cs
Normal file
56
Source/ArachnaeSwarm/JobGiver_MaintainBuildings.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
using System.Collections.Generic;
|
||||
using Verse;
|
||||
using RimWorld;
|
||||
using Verse.AI;
|
||||
using Verse.AI.Group;
|
||||
|
||||
namespace ArachnaeSwarm
|
||||
{
|
||||
public class JobGiver_MaintainBuildings : JobGiver_AIFightEnemies
|
||||
{
|
||||
private bool onlyIfDamagingState;
|
||||
|
||||
// 新增属性,用于存储可维护的ThingDef列表
|
||||
public List<ThingDef> maintainableThingDefs;
|
||||
|
||||
private static readonly float CellsInScanRadius = GenRadial.NumCellsInRadius(7.9f);
|
||||
|
||||
public override ThinkNode DeepCopy(bool resolve = true)
|
||||
{
|
||||
JobGiver_MaintainBuildings obj = (JobGiver_MaintainBuildings)base.DeepCopy(resolve);
|
||||
obj.onlyIfDamagingState = onlyIfDamagingState;
|
||||
obj.maintainableThingDefs = maintainableThingDefs; // 复制列表
|
||||
return obj;
|
||||
}
|
||||
|
||||
protected override Job TryGiveJob(Pawn pawn)
|
||||
{
|
||||
Room room = pawn.GetRoom();
|
||||
for (int i = 0; (float)i < CellsInScanRadius; i++)
|
||||
{
|
||||
IntVec3 intVec = pawn.Position + GenRadial.RadialPattern[i];
|
||||
if (!intVec.InBounds(pawn.Map) || intVec.GetRoom(pawn.Map) != room)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// 遍历可维护的ThingDef列表
|
||||
foreach (ThingDef thingDef in maintainableThingDefs)
|
||||
{
|
||||
// 查找指定ThingDef的建筑
|
||||
Thing targetThing = (Thing)pawn.Map.thingGrid.ThingAt(intVec, thingDef);
|
||||
|
||||
if (targetThing != null && pawn.CanReserve(targetThing))
|
||||
{
|
||||
CompMaintainable compMaintainable = targetThing.TryGetComp<CompMaintainable>();
|
||||
if (compMaintainable != null && compMaintainable.CurStage != 0 && (!onlyIfDamagingState || compMaintainable.CurStage == MaintainableStage.Damaging))
|
||||
{
|
||||
return JobMaker.MakeJob(JobDefOf.Maintain, targetThing);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user