This commit is contained in:
2025-09-04 17:34:23 +08:00
parent aab5e225c1
commit 5643623725
3 changed files with 54 additions and 33 deletions

Binary file not shown.

View File

@@ -78,15 +78,13 @@
<level>8</level> <level>8</level>
</li> </li>
</skillLevels> --> </skillLevels> -->
<instantTrainables> <trainables>
<!-- <li>ARA_Sowing</li> <li>
<li>Dig</li> --> <trainable>Haul</trainable>
<li>Haul</li> <trainInstantly>true</trainInstantly>
<!-- 救援 --> <setWanted>true</setWanted>
<!-- <li>Rescue</li> --> </li>
<!-- 觅食 --> </trainables>
<!-- <li>Forage</li> -->
</instantTrainables>
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 --> <disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
</li> </li>
</comps> </comps>
@@ -102,9 +100,13 @@
</race> </race>
<comps> <comps>
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining"> <li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
<instantTrainables> <trainables>
<li>ARA_Sowing</li> <li>
</instantTrainables> <trainable>ARA_Sowing</trainable>
<trainInstantly>true</trainInstantly>
<setWanted>true</setWanted>
</li>
</trainables>
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 --> <disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
</li> </li>
</comps> </comps>
@@ -121,10 +123,18 @@
</race> </race>
<comps> <comps>
<li Class="ArachnaeSwarm.CompProperties_AdvancedTraining"> <li Class="ArachnaeSwarm.CompProperties_AdvancedTraining">
<instantTrainables> <trainables>
<li>Dig</li> <li>
<li>AttackTarget</li> <trainable>Dig</trainable>
</instantTrainables> <trainInstantly>true</trainInstantly>
<setWanted>true</setWanted>
</li>
<li>
<trainable>AttackTarget</trainable>
<trainInstantly>true</trainInstantly>
<setWanted>true</setWanted>
</li>
</trainables>
<disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 --> <disableAllSkillDecay>true</disableAllSkillDecay> <!-- 阻止这个动物的所有技能衰减 -->
</li> </li>
</comps> </comps>

View File

@@ -9,8 +9,8 @@ namespace ArachnaeSwarm
// 1. 用于设置固定技能等级 // 1. 用于设置固定技能等级
public List<SkillLevelEntry> skillLevels = new List<SkillLevelEntry>(); public List<SkillLevelEntry> skillLevels = new List<SkillLevelEntry>();
// 2. 用于指定生成时立即完成的训练 // 2. 用于配置训练项目
public List<TrainableDef> instantTrainables = new List<TrainableDef>(); public List<TrainableEntry> trainables = new List<TrainableEntry>();
// 3. 全局开关:是否阻止所有技能衰减 // 3. 全局开关:是否阻止所有技能衰减
public bool disableAllSkillDecay = false; public bool disableAllSkillDecay = false;
@@ -25,12 +25,17 @@ namespace ArachnaeSwarm
{ {
public SkillDef skill; public SkillDef skill;
public int level = 0; public int level = 0;
// 这里的 disableDecay 字段现在是冗余的,因为我们有全局的 disableAllSkillDecay
// 但为了兼容性或未来可能的需求,可以保留。
// 在当前方案中,它的值将被忽略。
public bool disableDecay = true; public bool disableDecay = true;
} }
// 新增:用于定义训练项目的条目
public class TrainableEntry
{
public TrainableDef trainable;
public bool trainInstantly = false; // 是否立即完成训练
public bool setWanted = false; // 是否默认启用
}
public class CompAdvancedTraining : ThingComp public class CompAdvancedTraining : ThingComp
{ {
public CompProperties_AdvancedTraining Props => (CompProperties_AdvancedTraining)this.props; public CompProperties_AdvancedTraining Props => (CompProperties_AdvancedTraining)this.props;
@@ -53,22 +58,28 @@ namespace ArachnaeSwarm
if (skillRecord != null) if (skillRecord != null)
{ {
skillRecord.Level = entry.level; skillRecord.Level = entry.level;
// 注意: 激情 (passion) 影响学习速度,不直接阻止衰减。
// 实际的衰减阻止逻辑在 TrainingSystem_Patcher.cs 中处理。
// 默认情况下,我们不改变 passion除非有特殊需求。
} }
} }
} }
} }
// --- 2. 执行瞬间训练 (只在初次生成时) --- // --- 2. 处理训练项目 (只在初次生成时) ---
if (!respawningAfterLoad && pawn.training != null && !Props.instantTrainables.NullOrEmpty()) if (!respawningAfterLoad && pawn.training != null && !Props.trainables.NullOrEmpty())
{ {
foreach (var trainable in Props.instantTrainables) foreach (var entry in Props.trainables)
{ {
if (trainable != null && !pawn.training.HasLearned(trainable)) if (entry.trainable == null) continue;
// 2a. 立即完成训练
if (entry.trainInstantly && !pawn.training.HasLearned(entry.trainable))
{ {
pawn.training.Train(trainable, null, complete: true); pawn.training.Train(entry.trainable, null, complete: true);
}
// 2b. 设置为默认启用
if (entry.setWanted)
{
pawn.training.SetWantedRecursive(entry.trainable, true);
} }
} }
} }