using Content.Shared.Speech.EntitySystems; using Content.Shared.StatusEffect; using Content.Shared.Traits.Assorted; using Robust.Shared.Prototypes; namespace Content.Shared.Drunk; public abstract class SharedDrunkSystem : EntitySystem { public static readonly ProtoId DrunkKey = "Drunk"; [Dependency] private readonly StatusEffectsSystem _statusEffectsSystem = default!; [Dependency] private readonly SharedSlurredSystem _slurredSystem = default!; public void TryApplyDrunkenness(EntityUid uid, float boozePower, bool applySlur = true, StatusEffectsComponent? status = null) { if (!Resolve(uid, ref status, false)) return; if (TryComp(uid, out var trait)) boozePower *= trait.BoozeStrengthMultiplier; if (applySlur) { _slurredSystem.DoSlur(uid, TimeSpan.FromSeconds(boozePower), status); } if (!_statusEffectsSystem.HasStatusEffect(uid, DrunkKey, status)) { _statusEffectsSystem.TryAddStatusEffect(uid, DrunkKey, TimeSpan.FromSeconds(boozePower), true, status); } else { _statusEffectsSystem.TryAddTime(uid, DrunkKey, TimeSpan.FromSeconds(boozePower), status); } } public void TryRemoveDrunkenness(EntityUid uid) { _statusEffectsSystem.TryRemoveStatusEffect(uid, DrunkKey); } public void TryRemoveDrunkenessTime(EntityUid uid, double timeRemoved) { _statusEffectsSystem.TryRemoveTime(uid, DrunkKey, TimeSpan.FromSeconds(timeRemoved)); } }