This commit is contained in:
2025-09-11 21:35:47 +08:00
parent 8cbd09e036
commit a114b6f037
5 changed files with 30 additions and 7 deletions

Binary file not shown.

View File

@@ -7,7 +7,7 @@
<label>织域形态</label>
<description>将自己转换为一个坚固的静态建筑形态,或从建筑形态恢复。</description>
<iconPath>UI/Commands/EggSpew</iconPath> <!-- TODO: 替换为你的图标路径 -->
<cooldownTicksRange>600</cooldownTicksRange>
<cooldownTicksRange>6000</cooldownTicksRange>
<hotKey>Misc12</hotKey>
<targetRequired>false</targetRequired>
<casterMustBeCapableOfViolence>false</casterMustBeCapableOfViolence>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LanguageData>
<!-- CompAbilityEffect_Transform -->
<PawnTransformer_SpaceBlocked>{PAWN_labelShort} 无法变形:空间不足或有障碍物。</PawnTransformer_SpaceBlocked>
<AbilityCannotBeUsedOnOthers>此能力只能对自己施放。</AbilityCannotBeUsedOnOthers>
<!-- Building_Morphable -->
<StoredPawn>织域者</StoredPawn>
<Activity>活动</Activity>
<Researching>研究中</Researching>
<Idle>空闲中</Idle>
<Sleeping>睡眠中</Sleeping>
<PawnTransformer_OutOfFuel>{PAWN_labelShort} 因营养耗尽而被强制弹出!</PawnTransformer_OutOfFuel>
<PawnTransformer_ForcedRevert>{PAWN_labelShort} 因受到攻击而被强制弹出!</PawnTransformer_ForcedRevert>
<PawnTransformer_BuildingDestroyed>{PAWN_labelShort} 从被摧毁的 {BUILDING_label} 中弹出!</PawnTransformer_BuildingDestroyed>
</LanguageData>

View File

@@ -1,6 +1,7 @@
using RimWorld;
using System.Text;
using System.Collections.Generic;
using UnityEngine;
using Verse;
namespace ArachnaeSwarm
@@ -42,8 +43,6 @@ namespace ArachnaeSwarm
Pawn pawn = compMorphable.StoredPawn;
pawn.needs?.NeedsTrackerTickInterval(1);
var needs = pawn.needs;
if (needs == null)
{
@@ -81,17 +80,23 @@ namespace ArachnaeSwarm
TimeAssignmentDef assignment = pawn.timetable?.CurrentAssignment ?? TimeAssignmentDefOf.Anything;
if (forceSleep || (assignment != TimeAssignmentDefOf.Work && assignment != TimeAssignmentDefOf.Anything))
if (forceSleep || assignment == TimeAssignmentDefOf.Sleep || assignment == TimeAssignmentDefOf.Joy)
{
// 休眠期
// 休眠期 (只有在强制休眠或日程为睡眠/娱乐时才恢复)
if (needs.rest != null)
{
needs.rest.CurLevel += Need_Rest.BaseRestGainPerTick * 2f;
virtualRest = Mathf.Min(VirtualRestMax, virtualRest + (Need_Rest.BaseRestGainPerTick * 2f)); // 乘以2模拟床的效率
}
StopResearchEffect();
}
else // 工作时间
else // 工作或任意时间 (只要不在休息/娱乐,就下降)
{
// 使用固定的、预估的下降率
if (virtualRest > 0)
{
virtualRest -= (0.66f / 60000f);
}
ResearchProjectDef currentProj = Find.ResearchManager.GetProject();
if (currentProj != null)
{