存一下
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class CompAbilityEffect_EmergencyEnergyRestore : CompAbilityEffect
|
||||
{
|
||||
public new CompProperties_AbilityEmergencyEnergyRestore Props => (CompProperties_AbilityEmergencyEnergyRestore)props;
|
||||
|
||||
public override void Apply(LocalTargetInfo target, LocalTargetInfo dest)
|
||||
{
|
||||
base.Apply(target, dest);
|
||||
|
||||
Pawn caster = parent.pawn;
|
||||
if (caster == null) return;
|
||||
|
||||
// 检查是否是乌拉族
|
||||
if (!IsWulaRace(caster))
|
||||
{
|
||||
Messages.Message("只有乌拉族才能使用紧急能量恢复", MessageTypeDefOf.RejectInput, false);
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查是否倒地(如果需要的话)
|
||||
if (Props.requireDowned && !caster.Downed)
|
||||
{
|
||||
Messages.Message("只能在倒地时使用紧急能量恢复", MessageTypeDefOf.RejectInput, false);
|
||||
return;
|
||||
}
|
||||
|
||||
// 添加Hediff
|
||||
if (Props.hediffDef != null)
|
||||
{
|
||||
var hediff = HediffMaker.MakeHediff(Props.hediffDef, caster);
|
||||
caster.health.AddHediff(hediff);
|
||||
|
||||
Messages.Message($"{caster.LabelShort}激活了紧急能量恢复协议", MessageTypeDefOf.PositiveEvent, false);
|
||||
|
||||
if (Prefs.DevMode)
|
||||
{
|
||||
Log.Message($"[EmergencyEnergyRestore] Applied to {caster.LabelShort}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanApplyOn(LocalTargetInfo target, LocalTargetInfo dest)
|
||||
{
|
||||
bool canApply = base.CanApplyOn(target, dest) && IsWulaRace(parent.pawn);
|
||||
|
||||
if (Props.requireDowned)
|
||||
{
|
||||
canApply = canApply && parent.pawn.Downed;
|
||||
}
|
||||
|
||||
return canApply;
|
||||
}
|
||||
|
||||
private bool IsWulaRace(Pawn pawn)
|
||||
{
|
||||
if (pawn?.def == null) return false;
|
||||
return pawn.def.defName == "WulaSpecies";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class CompProperties_AbilityEmergencyEnergyRestore : CompProperties_AbilityEffect
|
||||
{
|
||||
public int durationTicks = 600; // 默认10秒
|
||||
public HediffDef hediffDef;
|
||||
public bool requireDowned = true; // 是否需要倒地才能使用
|
||||
|
||||
public CompProperties_AbilityEmergencyEnergyRestore()
|
||||
{
|
||||
compClass = typeof(CompAbilityEffect_EmergencyEnergyRestore);
|
||||
}
|
||||
}
|
||||
}
|
||||
71
Source/WulaFallenEmpire/Hediff_EmergencyEnergyRestore.cs
Normal file
71
Source/WulaFallenEmpire/Hediff_EmergencyEnergyRestore.cs
Normal file
@@ -0,0 +1,71 @@
|
||||
using RimWorld;
|
||||
using Verse;
|
||||
|
||||
namespace WulaFallenEmpire
|
||||
{
|
||||
public class Hediff_EmergencyEnergyRestore : HediffWithComps
|
||||
{
|
||||
private float originalEnergyLevel = 0f;
|
||||
private bool hasStoredOriginalLevel = false;
|
||||
|
||||
public override void PostAdd(DamageInfo? dinfo)
|
||||
{
|
||||
base.PostAdd(dinfo);
|
||||
|
||||
// 存储原始能量水平
|
||||
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed != null)
|
||||
{
|
||||
originalEnergyLevel = energyNeed.CurLevel;
|
||||
hasStoredOriginalLevel = true;
|
||||
|
||||
// 立即将能量设置为100%
|
||||
energyNeed.CurLevel = 1.0f;
|
||||
|
||||
if (Prefs.DevMode)
|
||||
{
|
||||
Log.Message($"[EmergencyEnergyRestore] Stored original energy: {originalEnergyLevel:F2}, set to 1.0");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void PostRemoved()
|
||||
{
|
||||
base.PostRemoved();
|
||||
|
||||
// 恢复原始能量水平
|
||||
if (hasStoredOriginalLevel)
|
||||
{
|
||||
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed != null)
|
||||
{
|
||||
energyNeed.CurLevel = originalEnergyLevel;
|
||||
|
||||
if (Prefs.DevMode)
|
||||
{
|
||||
Log.Message($"[EmergencyEnergyRestore] Restored energy to: {originalEnergyLevel:F2}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void Tick()
|
||||
{
|
||||
base.Tick();
|
||||
|
||||
// 确保能量保持在100%
|
||||
var energyNeed = pawn.needs?.TryGetNeed<Need_WulaEnergy>();
|
||||
if (energyNeed != null && energyNeed.CurLevel < 1.0f)
|
||||
{
|
||||
energyNeed.CurLevel = 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
public override void ExposeData()
|
||||
{
|
||||
base.ExposeData();
|
||||
Scribe_Values.Look(ref originalEnergyLevel, "originalEnergyLevel", 0f);
|
||||
Scribe_Values.Look(ref hasStoredOriginalLevel, "hasStoredOriginalLevel", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -77,6 +77,9 @@
|
||||
<Compile Include="CompUseEffect_WulaSkillTrainer.cs" />
|
||||
<Compile Include="Verb_ShootBeamExplosive.cs" />
|
||||
<Compile Include="VerbPropertiesExplosiveBeam.cs" />
|
||||
<Compile Include="Hediff_EmergencyEnergyRestore.cs" />
|
||||
<Compile Include="CompProperties_AbilityEmergencyEnergyRestore.cs" />
|
||||
<Compile Include="CompAbilityEffect_EmergencyEnergyRestore.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user