暂存能量改动
This commit is contained in:
82
Source/WulaFallenEmpire/CompUseEffect_WulaSkillTrainer.cs
Normal file
82
Source/WulaFallenEmpire/CompUseEffect_WulaSkillTrainer.cs
Normal file
@@ -0,0 +1,82 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class CompProperties_UseEffect_WulaSkillTrainer : CompProperties_UseEffect
|
||||
{
|
||||
public SkillDef skill; // 目标技能
|
||||
public float xpGainAmount = 50000f; // 目标技能学习量,默认值与原版一致
|
||||
public float baseLossAmount; // 非目标技能基础减少量
|
||||
public float noPassionLossFactor; // 无火技能减少乘数
|
||||
public float minorPassionLossFactor; // 小火技能减少乘数
|
||||
|
||||
public CompProperties_UseEffect_WulaSkillTrainer()
|
||||
{
|
||||
compClass = typeof(CompUseEffect_WulaSkillTrainer);
|
||||
}
|
||||
}
|
||||
|
||||
public class CompUseEffect_WulaSkillTrainer : CompUseEffect
|
||||
{
|
||||
public CompProperties_UseEffect_WulaSkillTrainer Props => (CompProperties_UseEffect_WulaSkillTrainer)props;
|
||||
|
||||
public override void DoEffect(Pawn usedBy)
|
||||
{
|
||||
base.DoEffect(usedBy);
|
||||
|
||||
if (usedBy.skills == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 获取目标技能
|
||||
SkillDef targetSkill = Props.skill;
|
||||
|
||||
// 遍历所有技能
|
||||
foreach (SkillRecord skillRecord in usedBy.skills.skills)
|
||||
{
|
||||
if (skillRecord.def == targetSkill)
|
||||
{
|
||||
// 目标技能:增加经验
|
||||
skillRecord.Learn(Props.xpGainAmount, true);
|
||||
Messages.Message("WULA_SkillTrainer_TargetSkillGained".Translate(usedBy.LabelShort, skillRecord.def.label), usedBy, MessageTypeDefOf.PositiveEvent);
|
||||
}
|
||||
else
|
||||
{
|
||||
// 非目标技能:减少经验
|
||||
float experienceLoss = Props.baseLossAmount;
|
||||
if (skillRecord.passion == Passion.None)
|
||||
{
|
||||
experienceLoss *= Props.noPassionLossFactor;
|
||||
}
|
||||
else if (skillRecord.passion == Passion.Minor)
|
||||
{
|
||||
experienceLoss *= Props.minorPassionLossFactor;
|
||||
}
|
||||
// 大火的技能掉得最少,保持默认值
|
||||
|
||||
skillRecord.Learn(-experienceLoss, true); // 减少经验
|
||||
Messages.Message("WULA_SkillTrainer_OtherSkillLost".Translate(usedBy.LabelShort, skillRecord.def.label), usedBy, MessageTypeDefOf.NegativeEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanBeUsedBy(Pawn p, out string failReason)
|
||||
{
|
||||
if (p.skills == null)
|
||||
{
|
||||
failReason = "PawnHasNoSkills".Translate(p.LabelShort);
|
||||
return false;
|
||||
}
|
||||
if (Props.skill == null)
|
||||
{
|
||||
failReason = "SkillTrainerHasNoSkill".Translate(parent.LabelShort);
|
||||
return false;
|
||||
}
|
||||
failReason = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user