44 lines
1.3 KiB
C#
44 lines
1.3 KiB
C#
using Content.Shared.StatusEffect;
|
|
using Robust.Shared.Prototypes;
|
|
|
|
namespace Content.Shared._DV.Addictions;
|
|
|
|
public abstract class SharedAddictionSystem : EntitySystem
|
|
{
|
|
[Dependency] private readonly StatusEffectsSystem _statusEffects = default!;
|
|
|
|
public ProtoId<StatusEffectPrototype> StatusEffectKey = "Addicted";
|
|
|
|
protected abstract void UpdateTime(EntityUid uid);
|
|
|
|
public virtual void TryApplyAddiction(EntityUid uid, float addictionTime, StatusEffectsComponent? status = null)
|
|
{
|
|
if (!Resolve(uid, ref status, false))
|
|
return;
|
|
|
|
UpdateTime(uid);
|
|
|
|
if (!_statusEffects.HasStatusEffect(uid, StatusEffectKey, status))
|
|
{
|
|
_statusEffects.TryAddStatusEffect<AddictedComponent>(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), true, status);
|
|
}
|
|
else
|
|
{
|
|
_statusEffects.TryAddTime(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), status);
|
|
}
|
|
}
|
|
|
|
public virtual void TrySuppressAddiction(EntityUid uid, float duration)
|
|
{
|
|
if (!TryComp<AddictedComponent>(uid, out var comp))
|
|
return;
|
|
|
|
var ent = new Entity<AddictedComponent>(uid, comp);
|
|
UpdateAddictionSuppression(ent, duration);
|
|
}
|
|
|
|
protected virtual void UpdateAddictionSuppression(Entity<AddictedComponent> ent, float duration)
|
|
{
|
|
}
|
|
}
|