1
This commit is contained in:
Binary file not shown.
@@ -587,6 +587,535 @@
|
|||||||
</parts>
|
</parts>
|
||||||
</corePart>
|
</corePart>
|
||||||
</BodyDef>
|
</BodyDef>
|
||||||
|
<BodyDef>
|
||||||
|
<defName>ArachnaeQueen_Neurotyrant_Body</defName>
|
||||||
|
<label>阿拉克涅灵吸种</label>
|
||||||
|
<corePart>
|
||||||
|
<def>Torso</def>
|
||||||
|
<height>Middle</height>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<!-- 背部组织,仅包含骨骼和甲片 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Dorsum</def>
|
||||||
|
<coverage>0.14</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<!-- 甲片,防御作用 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Chitin_Shell</def>
|
||||||
|
<customLabel>背部甲片</customLabel>
|
||||||
|
<coverage>0.02</coverage>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 背部外骨骼,承担托举四肢和代替脊椎 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Exoskeleton_Dorsum</def>
|
||||||
|
<coverage>0.016</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<!-- 胸部组织,包含骨骼和各类重点维生器官 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Sternum</def>
|
||||||
|
<coverage>0.15</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<!-- 胸部外骨骼,代替肋骨,因为没有甲片所以是外露的 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Exoskeleton_Sternum</def>
|
||||||
|
<coverage>0.015</coverage>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 心脏 -->
|
||||||
|
<li>
|
||||||
|
<def>Heart</def>
|
||||||
|
<coverage>0.020</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 胃部 -->
|
||||||
|
<li>
|
||||||
|
<def>Stomach</def>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 肺,4个 -->
|
||||||
|
<li>
|
||||||
|
<def>Lung</def>
|
||||||
|
<customLabel>左肺(其一)</customLabel>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Lung</def>
|
||||||
|
<customLabel>左肺(其二)</customLabel>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Lung</def>
|
||||||
|
<customLabel>右肺(其一)</customLabel>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Lung</def>
|
||||||
|
<customLabel>右肺(其二)</customLabel>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 肾脏,2个 -->
|
||||||
|
<li>
|
||||||
|
<def>Kidney</def>
|
||||||
|
<customLabel>左肾</customLabel>
|
||||||
|
<coverage>0.017</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Kidney</def>
|
||||||
|
<customLabel>右肾</customLabel>
|
||||||
|
<coverage>0.017</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 肝脏,2个 -->
|
||||||
|
<li>
|
||||||
|
<def>Liver</def>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<customLabel>肝脏(其一)</customLabel>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Liver</def>
|
||||||
|
<customLabel>肝脏(其二)</customLabel>
|
||||||
|
<coverage>0.025</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<!-- 尾部组织群 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Tail</def>
|
||||||
|
<height>Bottom</height>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<coverage>0.15</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
<li>Legs</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<!-- 甲片,防御作用 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Chitin_Shell</def>
|
||||||
|
<customLabel>尾部甲片</customLabel>
|
||||||
|
<coverage>0.01</coverage>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>Torso</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 性腺 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Gonad</def>
|
||||||
|
<coverage>0.005</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Genitalias</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 卵巢 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Ovary</def>
|
||||||
|
<coverage>0.01</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Genitalias</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<!-- 脖子往上头部 -->
|
||||||
|
<li>
|
||||||
|
<def>Neck</def>
|
||||||
|
<coverage>0.075</coverage>
|
||||||
|
<height>Top</height>
|
||||||
|
<groups>
|
||||||
|
<li>Neck</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Head</def>
|
||||||
|
<coverage>0.80</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
<li>HeadAttackTool</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<!-- 甲片,防御作用 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Chitin_Shell</def>
|
||||||
|
<customLabel>头部甲片</customLabel>
|
||||||
|
<coverage>0.02</coverage>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<!-- 神经束群 -->
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第一神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第二神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第三神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第四神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第四神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第五神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第六四神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第七神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>ARA_Psy_Nerve_Tract</def>
|
||||||
|
<customLabel>第八神经束</customLabel>
|
||||||
|
<coverage>0.05</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>ARA_Psy_Nerve_Tracts</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<def>Skull</def>
|
||||||
|
<coverage>0.18</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
<li>Eyes</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Brain</def>
|
||||||
|
<coverage>0.8</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
<li>Eyes</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Eye</def>
|
||||||
|
<customLabel>left eye</customLabel>
|
||||||
|
<coverage>0.07</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>FullHead</li>
|
||||||
|
<li>Eyes</li>
|
||||||
|
</groups>
|
||||||
|
<woundAnchorTag>LeftEye</woundAnchorTag>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<visibleHediffRots>
|
||||||
|
<li>South</li>
|
||||||
|
<li>West</li>
|
||||||
|
</visibleHediffRots>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Eye</def>
|
||||||
|
<customLabel>right eye</customLabel>
|
||||||
|
<coverage>0.07</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>FullHead</li>
|
||||||
|
<li>Eyes</li>
|
||||||
|
</groups>
|
||||||
|
<woundAnchorTag>RightEye</woundAnchorTag>
|
||||||
|
<visibleHediffRots>
|
||||||
|
<li>South</li>
|
||||||
|
<li>East</li>
|
||||||
|
</visibleHediffRots>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Ear</def>
|
||||||
|
<customLabel>left ear</customLabel>
|
||||||
|
<coverage>0.07</coverage>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Ear</def>
|
||||||
|
<customLabel>right ear</customLabel>
|
||||||
|
<coverage>0.07</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>UpperHead</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Nose</def>
|
||||||
|
<coverage>0.10</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Jaw</def>
|
||||||
|
<coverage>0.15</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Teeth</li>
|
||||||
|
<li>FullHead</li>
|
||||||
|
<li>Mouth</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Tongue</def>
|
||||||
|
<coverage>0.001</coverage>
|
||||||
|
<depth>Inside</depth>
|
||||||
|
<groups>
|
||||||
|
<li>FullHead</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<!-- 左右副肢体 -->
|
||||||
|
<li>
|
||||||
|
<def>Shoulder</def>
|
||||||
|
<customLabel>左副肢关节</customLabel>
|
||||||
|
<coverage>0.12</coverage>
|
||||||
|
<woundAnchorTag>LeftShoulder</woundAnchorTag>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Shoulders</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Clavicle</def>
|
||||||
|
<customLabel>左副肢外骨骼</customLabel>
|
||||||
|
<coverage>0.09</coverage>
|
||||||
|
<height>Top</height>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Shoulders</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Arm</def>
|
||||||
|
<customLabel>左副肢</customLabel>
|
||||||
|
<coverage>0.77</coverage>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Arms</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Hand</def>
|
||||||
|
<customLabel>左鳌钳</customLabel>
|
||||||
|
<coverage>0.14</coverage>
|
||||||
|
<height>Bottom</height>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Hands</li>
|
||||||
|
<li>HeadClaw</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Finger</def>
|
||||||
|
<customLabel>右鳌钳口</customLabel>
|
||||||
|
<coverage>0.14</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Hands</li>
|
||||||
|
<li>LeftHand</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Shoulder</def>
|
||||||
|
<customLabel>右副肢关节</customLabel>
|
||||||
|
<coverage>0.12</coverage>
|
||||||
|
<woundAnchorTag>LeftShoulder</woundAnchorTag>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Shoulders</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Clavicle</def>
|
||||||
|
<customLabel>右副肢外骨骼</customLabel>
|
||||||
|
<coverage>0.09</coverage>
|
||||||
|
<height>Top</height>
|
||||||
|
<depth>Outside</depth>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Shoulders</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<def>Arm</def>
|
||||||
|
<customLabel>右副肢</customLabel>
|
||||||
|
<coverage>0.77</coverage>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Arms</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Hand</def>
|
||||||
|
<customLabel>右鳌钳</customLabel>
|
||||||
|
<coverage>0.14</coverage>
|
||||||
|
<height>Bottom</height>
|
||||||
|
<flipGraphic>true</flipGraphic>
|
||||||
|
<groups>
|
||||||
|
<li>Hands</li>
|
||||||
|
<li>HeadClaw</li>
|
||||||
|
</groups>
|
||||||
|
<parts>
|
||||||
|
<li>
|
||||||
|
<def>Finger</def>
|
||||||
|
<customLabel>右鳌钳口</customLabel>
|
||||||
|
<coverage>0.14</coverage>
|
||||||
|
<groups>
|
||||||
|
<li>Hands</li>
|
||||||
|
<li>RightHand</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</li>
|
||||||
|
<!-- 腰尾链接 -->
|
||||||
|
<li>
|
||||||
|
<def>Waist</def>
|
||||||
|
<customLabel>体节分界</customLabel>
|
||||||
|
<coverage>0</coverage>
|
||||||
|
<height>Bottom</height>
|
||||||
|
<groups>
|
||||||
|
<li>Waist</li>
|
||||||
|
</groups>
|
||||||
|
</li>
|
||||||
|
</parts>
|
||||||
|
</corePart>
|
||||||
|
</BodyDef>
|
||||||
<BodyPartDef>
|
<BodyPartDef>
|
||||||
<defName>ARA_Dorsum</defName>
|
<defName>ARA_Dorsum</defName>
|
||||||
<label>背部组织群</label>
|
<label>背部组织群</label>
|
||||||
@@ -709,6 +1238,9 @@
|
|||||||
<skinCovered>true</skinCovered>
|
<skinCovered>true</skinCovered>
|
||||||
<solid>false</solid>
|
<solid>false</solid>
|
||||||
<bleedRate>0</bleedRate>
|
<bleedRate>0</bleedRate>
|
||||||
|
<tags>
|
||||||
|
<li>ARA_Psy_Source</li>
|
||||||
|
</tags>
|
||||||
</BodyPartDef>
|
</BodyPartDef>
|
||||||
<BodyPartDef>
|
<BodyPartDef>
|
||||||
<defName>ARA_Pouch</defName>
|
<defName>ARA_Pouch</defName>
|
||||||
|
|||||||
9
1.6/1.6/Defs/PawnCapacityDefs/ARA_PawnCapacity.xml
Normal file
9
1.6/1.6/Defs/PawnCapacityDefs/ARA_PawnCapacity.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<Defs>
|
||||||
|
<PawnCapacityDef>
|
||||||
|
<defName>ARA_PsychicStange</defName>
|
||||||
|
<label>虫群灵能强度</label>
|
||||||
|
<listOrder>60</listOrder>
|
||||||
|
<workerClass>ArachnaeSwarm.PawnCapacityWorker_PsychicStange</workerClass>
|
||||||
|
</PawnCapacityDef>
|
||||||
|
</Defs>
|
||||||
@@ -662,8 +662,8 @@
|
|||||||
<lifeStages>
|
<lifeStages>
|
||||||
<li>
|
<li>
|
||||||
<bodyGraphicData>
|
<bodyGraphicData>
|
||||||
<texPath>ArachnaeSwarm/Things/ARA_Baneling/BodiesEmp/Naked_Thin</texPath>
|
<texPath>ArachnaeSwarm/Things/ARA_Acidcut/Bodies/Naked_Thin</texPath>
|
||||||
<drawSize>1</drawSize>
|
<drawSize>1.75</drawSize>
|
||||||
<shadowData>
|
<shadowData>
|
||||||
<volume>(0.4, 0.5, 0.37)</volume>
|
<volume>(0.4, 0.5, 0.37)</volume>
|
||||||
<offset>(0,0,-0.15)</offset>
|
<offset>(0,0,-0.15)</offset>
|
||||||
|
|||||||
@@ -877,7 +877,7 @@
|
|||||||
</statBases>
|
</statBases>
|
||||||
|
|
||||||
<race>
|
<race>
|
||||||
<body>ArachnaeQueen_Body</body>
|
<body>ArachnaeQueen_Neurotyrant_Body</body>
|
||||||
<baseBodySize>5</baseBodySize>
|
<baseBodySize>5</baseBodySize>
|
||||||
<baseHealthScale>4</baseHealthScale>
|
<baseHealthScale>4</baseHealthScale>
|
||||||
<canFlyInVacuum>true</canFlyInVacuum>
|
<canFlyInVacuum>true</canFlyInVacuum>
|
||||||
|
|||||||
Binary file not shown.
@@ -2,6 +2,10 @@
|
|||||||
"Version": 1,
|
"Version": 1,
|
||||||
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
"WorkspaceRootPath": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\",
|
||||||
"Documents": [
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawncapacityworker\\pawncapacityworker_psychicstange.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
|
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawncapacityworker\\pawncapacityworker_psychicstange.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
"AbsoluteMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|d:\\steamlibrary\\steamapps\\common\\rimworld\\mods\\arachnaeswarm\\source\\arachnaeswarm\\pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||||
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
"RelativeMoniker": "D:0:0:{EAE0DB6B-E282-C812-7F5A-6D13E9D24581}|ArachnaeSwarm.csproj|solutionrelative:pawn_comps\\ara_swarmspellholder\\gizmo_swarmspellstatus.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||||
@@ -42,7 +46,7 @@
|
|||||||
"DocumentGroups": [
|
"DocumentGroups": [
|
||||||
{
|
{
|
||||||
"DockedWidth": 200,
|
"DockedWidth": 200,
|
||||||
"SelectedChildIndex": 2,
|
"SelectedChildIndex": 1,
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"$type": "Bookmark",
|
"$type": "Bookmark",
|
||||||
@@ -50,7 +54,20 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 4,
|
"DocumentIndex": 0,
|
||||||
|
"Title": "PawnCapacityWorker_PsychicStange.cs",
|
||||||
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||||
|
"RelativeDocumentMoniker": "PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||||
|
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||||
|
"RelativeToolTip": "PawnCapacityWorker\\PawnCapacityWorker_PsychicStange.cs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAABMAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
|
"WhenOpened": "2026-02-03T07:42:21.662Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 5,
|
||||||
"Title": "CompProperties_AbilityPsychicLoadCost.cs",
|
"Title": "CompProperties_AbilityPsychicLoadCost.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
||||||
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompProperties_AbilityPsychicLoadCost.cs",
|
||||||
@@ -62,20 +79,20 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 0,
|
"DocumentIndex": 1,
|
||||||
"Title": "Gizmo_SwarmSpellStatus.cs",
|
"Title": "Gizmo_SwarmSpellStatus.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||||
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
"ToolTip": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||||
"RelativeToolTip": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
"RelativeToolTip": "Pawn_Comps\\ARA_SwarmSpellHolder\\Gizmo_SwarmSpellStatus.cs",
|
||||||
"ViewState": "AgIAAGcAAAAAAAAAAAAMwHMAAABAAAAAAAAAAA==",
|
"ViewState": "AgIAAGcAAAAAAAAAAAAMwHwAAAAgAAAAAAAAAA==",
|
||||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||||
"WhenOpened": "2026-01-30T08:20:07.463Z",
|
"WhenOpened": "2026-01-30T08:20:07.463Z",
|
||||||
"EditorCaption": ""
|
"EditorCaption": ""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 2,
|
"DocumentIndex": 3,
|
||||||
"Title": "CompAbilityEffect_PsychicLoadCost.cs",
|
"Title": "CompAbilityEffect_PsychicLoadCost.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
||||||
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
"RelativeDocumentMoniker": "Abilities\\ARA_PsychicLoadCost\\CompAbilityEffect_PsychicLoadCost.cs",
|
||||||
@@ -87,7 +104,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 5,
|
"DocumentIndex": 6,
|
||||||
"Title": "CompAbilityEffect_PsychicBrainburn.cs",
|
"Title": "CompAbilityEffect_PsychicBrainburn.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
||||||
"RelativeDocumentMoniker": "Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
"RelativeDocumentMoniker": "Abilities\\PsychicBrainburn\\CompAbilityEffect_PsychicBrainburn.cs",
|
||||||
@@ -99,7 +116,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 1,
|
"DocumentIndex": 2,
|
||||||
"Title": "ARA_DefOf.cs",
|
"Title": "ARA_DefOf.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_DefOf.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\ARA_DefOf.cs",
|
||||||
"RelativeDocumentMoniker": "ARA_DefOf.cs",
|
"RelativeDocumentMoniker": "ARA_DefOf.cs",
|
||||||
@@ -111,7 +128,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 3,
|
"DocumentIndex": 4,
|
||||||
"Title": "Comp_SwarmSpellHolder.cs",
|
"Title": "Comp_SwarmSpellHolder.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
||||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\Comp_SwarmSpellHolder.cs",
|
||||||
@@ -123,7 +140,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 6,
|
"DocumentIndex": 7,
|
||||||
"Title": "SwarmSpellUtility.cs",
|
"Title": "SwarmSpellUtility.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
||||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_SwarmSpellHolder\\SwarmSpellUtility.cs",
|
||||||
@@ -135,7 +152,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$type": "Document",
|
"$type": "Document",
|
||||||
"DocumentIndex": 7,
|
"DocumentIndex": 8,
|
||||||
"Title": "CompAutoMechCarrier.cs",
|
"Title": "CompAutoMechCarrier.cs",
|
||||||
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
"DocumentMoniker": "D:\\SteamLibrary\\steamapps\\common\\RimWorld\\Mods\\ArachnaeSwarm\\Source\\ArachnaeSwarm\\Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
||||||
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
"RelativeDocumentMoniker": "Pawn_Comps\\ARA_AutoMechCarrier\\CompAutoMechCarrier.cs",
|
||||||
|
|||||||
@@ -332,6 +332,7 @@
|
|||||||
<Compile Include="MentalState\MentalState_HiveMindCascade.cs" />
|
<Compile Include="MentalState\MentalState_HiveMindCascade.cs" />
|
||||||
<Compile Include="Needs\Need_ChitinArmor.cs" />
|
<Compile Include="Needs\Need_ChitinArmor.cs" />
|
||||||
<Compile Include="Needs\Need_HoneyProduction.cs" />
|
<Compile Include="Needs\Need_HoneyProduction.cs" />
|
||||||
|
<Compile Include="PawnCapacityWorker\PawnCapacityWorker_PsychicStange.cs" />
|
||||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompAutoMechCarrier.cs" />
|
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompAutoMechCarrier.cs" />
|
||||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProducedByMechCarrier.cs" />
|
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProducedByMechCarrier.cs" />
|
||||||
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProperties_AutoMechCarrier.cs" />
|
<Compile Include="Pawn_Comps\ARA_AutoMechCarrier\CompProperties_AutoMechCarrier.cs" />
|
||||||
|
|||||||
@@ -0,0 +1,354 @@
|
|||||||
|
using RimWorld;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Verse;
|
||||||
|
|
||||||
|
namespace ArachnaeSwarm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 灵能稳定性(Psychic Stange)的能力计算器
|
||||||
|
/// 基于ARA_Psy_Source标签的部件效率和意识水平
|
||||||
|
/// </summary>
|
||||||
|
public class PawnCapacityWorker_PsychicStange : PawnCapacityWorker
|
||||||
|
{
|
||||||
|
#region 字段
|
||||||
|
// 定义我们需要的BodyPartTagDef
|
||||||
|
private static BodyPartTagDef PsySourceTagDef = null;
|
||||||
|
|
||||||
|
// 用于缓存的Consciousness容量Def
|
||||||
|
private static PawnCapacityDef ConsciousnessDef = null;
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 初始化
|
||||||
|
/// <summary>
|
||||||
|
/// 确保标签Def已初始化
|
||||||
|
/// </summary>
|
||||||
|
private void EnsureTagDefsInitialized()
|
||||||
|
{
|
||||||
|
if (PsySourceTagDef == null)
|
||||||
|
{
|
||||||
|
// 尝试从DefDatabase获取标签定义
|
||||||
|
PsySourceTagDef = DefDatabase<BodyPartTagDef>.GetNamedSilentFail("ARA_Psy_Source");
|
||||||
|
|
||||||
|
if (PsySourceTagDef == null)
|
||||||
|
{
|
||||||
|
Log.Warning("[虫群术法] 未找到ARA_Psy_Source的BodyPartTagDef定义");
|
||||||
|
// 创建一个临时的标签定义以避免空引用
|
||||||
|
PsySourceTagDef = new BodyPartTagDef
|
||||||
|
{
|
||||||
|
defName = "ARA_Psy_Source",
|
||||||
|
label = "Psychic Source"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ConsciousnessDef == null)
|
||||||
|
{
|
||||||
|
ConsciousnessDef = DefDatabase<PawnCapacityDef>.GetNamedSilentFail("Consciousness");
|
||||||
|
if (ConsciousnessDef == null)
|
||||||
|
{
|
||||||
|
// 如果找不到Consciousness,使用默认的
|
||||||
|
ConsciousnessDef = PawnCapacityDefOf.Consciousness;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 主要计算方法
|
||||||
|
/// <summary>
|
||||||
|
/// 计算灵能稳定性容量水平
|
||||||
|
/// </summary>
|
||||||
|
public override float CalculateCapacityLevel(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors = null)
|
||||||
|
{
|
||||||
|
// 确保标签Def已初始化
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
// 如果没有意识能力,直接返回0
|
||||||
|
if (!diffSet.pawn.health.capacities.CapableOf(ConsciousnessDef))
|
||||||
|
{
|
||||||
|
// 如果有传入impactors,记录影响因子
|
||||||
|
if (impactors != null)
|
||||||
|
{
|
||||||
|
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||||
|
{
|
||||||
|
capacity = ConsciousnessDef
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取意识水平
|
||||||
|
float consciousnessLevel = diffSet.pawn.health.capacities.GetLevel(ConsciousnessDef);
|
||||||
|
if (consciousnessLevel <= 0f)
|
||||||
|
{
|
||||||
|
if (impactors != null)
|
||||||
|
{
|
||||||
|
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||||
|
{
|
||||||
|
capacity = ConsciousnessDef
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 计算ARA_Psy_Source标签部件的平均效率
|
||||||
|
float psySourceEfficiency = CalculatePsySourceEfficiency(diffSet, impactors);
|
||||||
|
|
||||||
|
// 最终容量 = 灵能源效率 × 意识水平
|
||||||
|
float finalCapacity = psySourceEfficiency * consciousnessLevel;
|
||||||
|
|
||||||
|
// 如果有传入impactors,记录最终影响
|
||||||
|
if (impactors != null && finalCapacity < 1f)
|
||||||
|
{
|
||||||
|
// 如果灵能源效率不是100%,记录它
|
||||||
|
if (psySourceEfficiency < 1f)
|
||||||
|
{
|
||||||
|
// 注意:这里我们需要使用自定义的CapacityImpactor来记录灵能源的影响
|
||||||
|
// 由于PawnCapacityUtility.CalculateTagEfficiency不直接返回影响器列表,
|
||||||
|
// 我们需要自己创建影响器
|
||||||
|
RecordPsySourceImpactors(diffSet, impactors);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果意识水平不是100%,记录它
|
||||||
|
if (consciousnessLevel < 1f)
|
||||||
|
{
|
||||||
|
impactors.Add(new PawnCapacityUtility.CapacityImpactorCapacity
|
||||||
|
{
|
||||||
|
capacity = ConsciousnessDef
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalCapacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 计算灵能源标签部件的效率
|
||||||
|
/// </summary>
|
||||||
|
private float CalculatePsySourceEfficiency(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors = null)
|
||||||
|
{
|
||||||
|
if (PsySourceTagDef == null)
|
||||||
|
return 0f;
|
||||||
|
|
||||||
|
// 使用PawnCapacityUtility.CalculateTagEfficiency计算标签部件的平均效率
|
||||||
|
// 这里我们使用默认的最大值和范围
|
||||||
|
float efficiency = PawnCapacityUtility.CalculateTagEfficiency(
|
||||||
|
diffSet,
|
||||||
|
PsySourceTagDef,
|
||||||
|
maximum: float.MaxValue,
|
||||||
|
lerp: default(FloatRange),
|
||||||
|
impactors: impactors
|
||||||
|
);
|
||||||
|
|
||||||
|
return efficiency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 记录灵能源部件的影响器
|
||||||
|
/// </summary>
|
||||||
|
private void RecordPsySourceImpactors(HediffSet diffSet, List<PawnCapacityUtility.CapacityImpactor> impactors)
|
||||||
|
{
|
||||||
|
if (diffSet == null || diffSet.pawn == null || diffSet.pawn.RaceProps?.body == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 获取所有带有ARA_Psy_Source标签的部件
|
||||||
|
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||||
|
|
||||||
|
foreach (var part in partsWithTag)
|
||||||
|
{
|
||||||
|
// 检查部件是否缺失或受损
|
||||||
|
if (diffSet.PartIsMissing(part))
|
||||||
|
{
|
||||||
|
// 部件缺失
|
||||||
|
impactors.Add(new PawnCapacityUtility.CapacityImpactorBodyPartHealth
|
||||||
|
{
|
||||||
|
bodyPart = part
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 检查部件的健康百分比
|
||||||
|
float partHealth = diffSet.GetPartHealth(part);
|
||||||
|
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||||
|
float healthPercent = partHealth / partMaxHealth;
|
||||||
|
|
||||||
|
if (healthPercent < 1f)
|
||||||
|
{
|
||||||
|
// 部件受损
|
||||||
|
impactors.Add(new PawnCapacityUtility.CapacityImpactorBodyPartHealth
|
||||||
|
{
|
||||||
|
bodyPart = part
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 容量可用性检查
|
||||||
|
/// <summary>
|
||||||
|
/// 检查身体定义是否可以拥有此容量
|
||||||
|
/// 只有当身体拥有ARA_Psy_Source标签的部件时才显示
|
||||||
|
/// </summary>
|
||||||
|
public override bool CanHaveCapacity(BodyDef body)
|
||||||
|
{
|
||||||
|
// 确保标签Def已初始化
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
if (PsySourceTagDef == null || body == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// 检查身体是否拥有带有ARA_Psy_Source标签的部件
|
||||||
|
return body.HasPartWithTag(PsySourceTagDef);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 工具方法
|
||||||
|
/// <summary>
|
||||||
|
/// 获取详细的能力影响描述
|
||||||
|
/// </summary>
|
||||||
|
public string GetDetailedCapacityInfo(HediffSet diffSet)
|
||||||
|
{
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
if (!CanHaveCapacity(diffSet.pawn.RaceProps.body))
|
||||||
|
{
|
||||||
|
return "此单位没有灵能源部件,无法拥有灵能稳定性能力。";
|
||||||
|
}
|
||||||
|
|
||||||
|
float consciousnessLevel = diffSet.pawn.health.capacities.GetLevel(ConsciousnessDef);
|
||||||
|
float psySourceEfficiency = CalculatePsySourceEfficiency(diffSet, null);
|
||||||
|
float finalCapacity = psySourceEfficiency * consciousnessLevel;
|
||||||
|
|
||||||
|
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||||
|
int totalParts = 0;
|
||||||
|
int functionalParts = 0;
|
||||||
|
int missingParts = 0;
|
||||||
|
int damagedParts = 0;
|
||||||
|
|
||||||
|
foreach (var part in partsWithTag)
|
||||||
|
{
|
||||||
|
totalParts++;
|
||||||
|
|
||||||
|
if (diffSet.PartIsMissing(part))
|
||||||
|
{
|
||||||
|
missingParts++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float partHealth = diffSet.GetPartHealth(part);
|
||||||
|
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||||
|
|
||||||
|
if (partHealth < partMaxHealth)
|
||||||
|
{
|
||||||
|
damagedParts++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
functionalParts++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string result = $"灵能稳定性: {finalCapacity:P0}\n";
|
||||||
|
result += $" 意识水平: {consciousnessLevel:P0}\n";
|
||||||
|
result += $" 灵能源效率: {psySourceEfficiency:P0}\n";
|
||||||
|
result += $" 灵能源部件: {totalParts}个 (正常: {functionalParts}, 受损: {damagedParts}, 缺失: {missingParts})";
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检查是否所有灵能源部件都完整
|
||||||
|
/// </summary>
|
||||||
|
public bool AreAllPsySourcesIntact(HediffSet diffSet)
|
||||||
|
{
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||||
|
|
||||||
|
foreach (var part in partsWithTag)
|
||||||
|
{
|
||||||
|
if (diffSet.PartIsMissing(part))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
float partHealth = diffSet.GetPartHealth(part);
|
||||||
|
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||||
|
|
||||||
|
if (partHealth < partMaxHealth)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取灵能源部件的总健康百分比
|
||||||
|
/// </summary>
|
||||||
|
public float GetTotalPsySourceHealthPercent(HediffSet diffSet)
|
||||||
|
{
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||||
|
return 0f;
|
||||||
|
|
||||||
|
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||||
|
|
||||||
|
if (partsWithTag.Count == 0)
|
||||||
|
return 0f;
|
||||||
|
|
||||||
|
float totalHealth = 0f;
|
||||||
|
float totalMaxHealth = 0f;
|
||||||
|
|
||||||
|
foreach (var part in partsWithTag)
|
||||||
|
{
|
||||||
|
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||||
|
totalMaxHealth += partMaxHealth;
|
||||||
|
|
||||||
|
if (!diffSet.PartIsMissing(part))
|
||||||
|
{
|
||||||
|
float partHealth = diffSet.GetPartHealth(part);
|
||||||
|
totalHealth += partHealth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (totalMaxHealth <= 0f)
|
||||||
|
return 0f;
|
||||||
|
|
||||||
|
return totalHealth / totalMaxHealth;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取功能正常的灵能源部件数量
|
||||||
|
/// </summary>
|
||||||
|
public int GetFunctionalPsySourceCount(HediffSet diffSet)
|
||||||
|
{
|
||||||
|
EnsureTagDefsInitialized();
|
||||||
|
|
||||||
|
if (PsySourceTagDef == null || diffSet.pawn.RaceProps?.body == null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
var partsWithTag = diffSet.pawn.RaceProps.body.GetPartsWithTag(PsySourceTagDef);
|
||||||
|
int functionalCount = 0;
|
||||||
|
|
||||||
|
foreach (var part in partsWithTag)
|
||||||
|
{
|
||||||
|
if (!diffSet.PartIsMissing(part))
|
||||||
|
{
|
||||||
|
float partHealth = diffSet.GetPartHealth(part);
|
||||||
|
float partMaxHealth = part.def.GetMaxHealth(diffSet.pawn);
|
||||||
|
|
||||||
|
if (partHealth >= partMaxHealth)
|
||||||
|
{
|
||||||
|
functionalCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return functionalCount;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user