// SPDX-FileCopyrightText: 2025 GoobBot // SPDX-FileCopyrightText: 2025 Solstice // SPDX-FileCopyrightText: 2025 SolsticeOfTheWinter // // SPDX-License-Identifier: AGPL-3.0-or-later using Content.Shared._Goobstation.Devil.Contract; using Content.Shared.Inventory; using Robust.Shared.Serialization; namespace Content.Shared._Goobstation.Devil; /// /// Raised on a devil when their power level changes. /// /// The Devil whos power level is changing /// The new level they are reaching. [ByRefEvent] public record struct PowerLevelChangedEvent(EntityUid User, DevilPowerLevel NewLevel); /// /// Raised on a devil when the amount of souls in their storage changes. /// /// The Devil gaining souls. /// The entity losing its soul. /// How many souls they are gaining. [ByRefEvent] public record struct SoulAmountChangedEvent(EntityUid User, EntityUid Victim, int Amount); /// /// Raised on an entity to see if their eyes are covered. /// This just checks for the identity blocker comp. /// /// public sealed class IsEyesCoveredCheckEvent : EntityEventArgs, IInventoryRelayEvent { public SlotFlags TargetSlots => SlotFlags.EYES | SlotFlags.MASK | SlotFlags.HEAD; public bool IsEyesProtected; } // Contract Events [ImplicitDataDefinitionForInheritors, DataDefinition] public abstract partial class BaseDevilContractEvent : EntityEventArgs { /// /// The contract using this event. /// public DevilContractComponent? Contract; /// /// The target affected by this contract. /// public EntityUid Target; } [DataDefinition, Serializable] public sealed partial class DevilContractSoulOwnershipEvent : BaseDevilContractEvent; [DataDefinition, Serializable] public sealed partial class DevilContractLoseHandEvent : BaseDevilContractEvent; [DataDefinition, Serializable] public sealed partial class DevilContractLoseLegEvent : BaseDevilContractEvent; [DataDefinition, Serializable] public sealed partial class DevilContractLoseOrganEvent : BaseDevilContractEvent; [DataDefinition, Serializable] public sealed partial class DevilContractChanceEvent : BaseDevilContractEvent;