diff --git a/Content.Client/White/CustomGhostSpriteSystem/CustomGhostVisualizer.cs b/Content.Client/White/CustomGhostSpriteSystem/CustomGhostVisualizer.cs index 634d80c513..801434956b 100644 --- a/Content.Client/White/CustomGhostSpriteSystem/CustomGhostVisualizer.cs +++ b/Content.Client/White/CustomGhostSpriteSystem/CustomGhostVisualizer.cs @@ -1,4 +1,4 @@ -using Content.Client.Ghost; +using Content.Shared.Ghost; using Content.Shared.White.CustomGhostSystem; using Robust.Client.GameObjects; diff --git a/Content.Client/White/Jukebox/JukeboxBUI.cs b/Content.Client/White/Jukebox/JukeboxBUI.cs index 7e5cda8b49..4e514af02e 100644 --- a/Content.Client/White/Jukebox/JukeboxBUI.cs +++ b/Content.Client/White/Jukebox/JukeboxBUI.cs @@ -11,16 +11,14 @@ public sealed class JukeboxBUI : BoundUserInterface private readonly SharedPopupSystem _sharedPopupSystem = default!; private JukeboxMenu? _window; - public JukeboxBUI(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) + public JukeboxBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { IoCManager.InjectDependencies(this); _sharedPopupSystem = _entityManager.System(); - var uid = owner.Owner; - - if (!_entityManager.TryGetComponent(uid, out var jukeboxComponent)) + if (!_entityManager.TryGetComponent(owner, out JukeboxComponent? jukeboxComponent)) { - _sharedPopupSystem.PopupEntity($"Тут нет JukeboxComponent, звоните кодерам", uid); + _sharedPopupSystem.PopupEntity($"Тут нет JukeboxComponent, звоните кодерам", owner); return; } diff --git a/Content.Client/White/Jukebox/JukeboxMenu.xaml.cs b/Content.Client/White/Jukebox/JukeboxMenu.xaml.cs index 959a969a6d..6cb49525b4 100644 --- a/Content.Client/White/Jukebox/JukeboxMenu.xaml.cs +++ b/Content.Client/White/Jukebox/JukeboxMenu.xaml.cs @@ -5,7 +5,6 @@ using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Timing; -using TerraFX.Interop.Windows; namespace Content.Client.White.Jukebox; diff --git a/Content.Client/White/Jukebox/JukeboxSystem.cs b/Content.Client/White/Jukebox/JukeboxSystem.cs index 5fe5f541f3..b62a733125 100644 --- a/Content.Client/White/Jukebox/JukeboxSystem.cs +++ b/Content.Client/White/Jukebox/JukeboxSystem.cs @@ -10,6 +10,8 @@ using Robust.Client.Physics; using Robust.Client.Player; using Robust.Client.ResourceManagement; using Robust.Shared.Audio; +using Robust.Shared.Audio.Components; +using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; using Robust.Shared.GameStates; @@ -67,18 +69,18 @@ public sealed class JukeboxSystem : EntitySystem private void OnComponentRemoved(EntityUid uid, JukeboxComponent component, ComponentRemove args) { if (!_playingJukeboxes.TryGetValue(component, out var playingData)) return; - playingData.PlayingStream.Stop(); + _audioSystem.Stop(playingData.PlayingStream, playingData.Component); _playingJukeboxes.Remove(component); } private void OnStopPlaying(JukeboxStopPlaying ev) { if (!ev.JukeboxUid.HasValue) return; - if(!TryComp(ev.JukeboxUid, out var jukeboxComponent)) return; + if(!TryComp(GetEntity(ev.JukeboxUid), out var jukeboxComponent)) return; if(!_playingJukeboxes.TryGetValue(jukeboxComponent, out var jukeboxAudio)) return; - jukeboxAudio.PlayingStream.Stop(); + _audioSystem.Stop(jukeboxAudio.PlayingStream, jukeboxAudio.Component); _playingJukeboxes.Remove(jukeboxComponent); } @@ -91,7 +93,7 @@ public sealed class JukeboxSystem : EntitySystem RaiseNetworkEvent(new JukeboxRequestSongPlay() { - Jukebox = component.Owner, + Jukebox = GetNetEntity(component.Owner), SongName = jukeboxSong.SongName, SongPath = jukeboxSong.SongPath, SongDuration = (float)songResource.AudioStream.Length.TotalSeconds @@ -128,11 +130,11 @@ public sealed class JukeboxSystem : EntitySystem { if(jukeboxXform.MapID != playerXform.MapID) continue; - if ((jukeboxXform.MapPosition.Position - playerXform.MapPosition.Position).Length > _maxAudioRange) continue; + if ((jukeboxXform.MapPosition.Position - playerXform.MapPosition.Position).Length() > _maxAudioRange) continue; if (_playingJukeboxes.TryGetValue(jukeboxComponent, out var jukeboxAudio)) { - if (jukeboxAudio.PlayingStream.Done) + if (!jukeboxAudio.Component.Playing) { HandleDoneStream(jukeboxAudio, jukeboxComponent); return; @@ -167,7 +169,7 @@ public sealed class JukeboxSystem : EntitySystem private void HandleSongChanged(JukeboxAudio jukeboxAudio, JukeboxComponent jukeboxComponent) { - jukeboxAudio.PlayingStream.Stop(); + _audioSystem.Stop(jukeboxAudio.PlayingStream, jukeboxAudio.Component); if (jukeboxComponent.PlayingSongData != null && jukeboxComponent.PlayingSongData.SongPath == jukeboxAudio.SongData.SongPath) { @@ -188,7 +190,7 @@ public sealed class JukeboxSystem : EntitySystem { if (!jukeboxComponent.Repeating) { - jukeboxAudio.PlayingStream.Stop(); + _audioSystem.Stop(jukeboxAudio.PlayingStream, jukeboxAudio.Component); _playingJukeboxes.Remove(jukeboxComponent); SetBarsLayerVisible(jukeboxComponent, false); return; @@ -234,25 +236,22 @@ public sealed class JukeboxSystem : EntitySystem MaxDistance = _maxAudioRange }; - AudioSystem.PlayingStream? playingStream = null!; + var playingStream = _audioSystem.PlayEntity(resourcePath.ToString()!, localSession, jukeboxComponent.Owner, audioParams); - playingStream = _audioSystem.PlayEntity(resourcePath.ToString()!, localSession, jukeboxComponent.Owner, audioParams) as AudioSystem.PlayingStream; - - if (playingStream == null) - return null!; - - return new JukeboxAudio(playingStream, audio!, jukeboxComponent.PlayingSongData); + return new JukeboxAudio(playingStream.Value.Entity, playingStream.Value.Component, audio!, jukeboxComponent.PlayingSongData); } private class JukeboxAudio { public PlayingSongData SongData { get; } - public AudioSystem.PlayingStream PlayingStream { get; } + public EntityUid PlayingStream { get; } + public AudioComponent Component { get; } public AudioResource AudioStream { get; } - public JukeboxAudio(AudioSystem.PlayingStream playingStream, AudioResource audioStream, PlayingSongData songData) + public JukeboxAudio(EntityUid playingStream, AudioComponent component, AudioResource audioStream, PlayingSongData songData) { PlayingStream = playingStream; + Component = component; AudioStream = audioStream; SongData = songData; } @@ -269,7 +268,7 @@ public sealed class JukeboxSystem : EntitySystem { foreach (var playingJukebox in _playingJukeboxes.Values) { - playingJukebox.PlayingStream.Stop(); + _audioSystem.Stop(playingJukebox.PlayingStream, playingJukebox.Component); } _playingJukeboxes.Clear(); diff --git a/Content.Client/White/Jukebox/TapeCreatorBUI.cs b/Content.Client/White/Jukebox/TapeCreatorBUI.cs index 047b7b568f..22a3b49976 100644 --- a/Content.Client/White/Jukebox/TapeCreatorBUI.cs +++ b/Content.Client/White/Jukebox/TapeCreatorBUI.cs @@ -11,16 +11,14 @@ public sealed class TapeCreatorBUI : BoundUserInterface private TapeCreatorMenu? _window; - public TapeCreatorBUI(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) + public TapeCreatorBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { IoCManager.InjectDependencies(this); _sharedPopupSystem = _entityManager.System(); - var uid = owner.Owner; - - if (!_entityManager.TryGetComponent(uid, out var tapeCreatorComponent)) + if (!_entityManager.TryGetComponent(owner, out var tapeCreatorComponent)) { - _sharedPopupSystem.PopupEntity($"Тут нет TapeCreatorComponent, звоните кодерам", uid); + _sharedPopupSystem.PopupEntity($"Тут нет TapeCreatorComponent, звоните кодерам", owner); return; } diff --git a/Content.Client/White/Jukebox/TapeCreatorMenu.xaml.cs b/Content.Client/White/Jukebox/TapeCreatorMenu.xaml.cs index b000b30b51..44eb86a535 100644 --- a/Content.Client/White/Jukebox/TapeCreatorMenu.xaml.cs +++ b/Content.Client/White/Jukebox/TapeCreatorMenu.xaml.cs @@ -67,7 +67,7 @@ public sealed partial class TapeCreatorMenu : DefaultWindow { SongName = songName, SongBytes = songBytes, - TapeCreatorUid = _component.Owner + TapeCreatorUid = _entityManager.GetNetEntity(_component.Owner) }; _huetaSystem.SendNetMessage(msg); diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index d7d0aaf1b9..1c5eb9b058 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -227,7 +227,7 @@ public sealed partial class StoreSystem UpdateUserInterface(buyer, uid, component); } - public void CloseSessionUi(EntityUid user, StoreComponent component) + public void CloseUi(EntityUid user, StoreComponent component) { if (!TryComp(user, out var actor)) return; diff --git a/Content.Server/White/CustomGhostSpriteSystem/CustomGhostSpriteSystem.cs b/Content.Server/White/CustomGhostSpriteSystem/CustomGhostSpriteSystem.cs index 3e6ae1f836..d9bc90fd92 100644 --- a/Content.Server/White/CustomGhostSpriteSystem/CustomGhostSpriteSystem.cs +++ b/Content.Server/White/CustomGhostSpriteSystem/CustomGhostSpriteSystem.cs @@ -1,7 +1,9 @@ using Content.Server.Ghost.Components; +using Content.Shared.Ghost; using Content.Shared.White.CustomGhostSystem; using Robust.Server.GameObjects; using Robust.Server.Player; +using Robust.Shared.Player; using Robust.Shared.Prototypes; namespace Content.Server.White.CustomGhostSpriteSystem; @@ -11,6 +13,7 @@ public sealed class CustomGhostSpriteSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly MetaDataSystem _metaData = default!; public override void Initialize() @@ -45,12 +48,12 @@ public sealed class CustomGhostSpriteSystem : EntitySystem if (customGhostPrototype.GhostName != string.Empty) { - MetaData(ghostUid).EntityName = customGhostPrototype.GhostName; + _metaData.SetEntityName(ghostUid, customGhostPrototype.GhostName); } if (customGhostPrototype.GhostDescription != string.Empty) { - MetaData(ghostUid).EntityDescription = customGhostPrototype.GhostDescription; + _metaData.SetEntityDescription(ghostUid, customGhostPrototype.GhostDescription); } return; diff --git a/Content.Server/White/Jukebox/JukeboxSystem.cs b/Content.Server/White/Jukebox/JukeboxSystem.cs index df9f4455a4..da7e9ca662 100644 --- a/Content.Server/White/Jukebox/JukeboxSystem.cs +++ b/Content.Server/White/Jukebox/JukeboxSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Verbs; using Content.Shared.White.Jukebox; +using Robust.Server.Audio; using Robust.Server.GameObjects; using Robust.Server.GameStates; using Robust.Shared.Containers; @@ -21,7 +22,7 @@ public sealed class JukeboxSystem : EntitySystem [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly PVSOverrideSystem _pvsOverrideSystem = default!; + [Dependency] private readonly PvsOverrideSystem _pvsOverrideSystem = default!; private readonly List _playingJukeboxes = new(); @@ -132,7 +133,7 @@ public sealed class JukeboxSystem : EntitySystem private void OnSongRequestPlay(JukeboxRequestSongPlay msg, EntitySessionEventArgs args) { - var jukebox = Comp(msg.Jukebox!.Value); + var jukebox = Comp(GetEntity(msg.Jukebox!.Value)); jukebox.Repeating = true; var songData = new PlayingSongData() diff --git a/Content.Server/White/Jukebox/TapeCreatorSystem.cs b/Content.Server/White/Jukebox/TapeCreatorSystem.cs index edc6512d4c..16e9e67aff 100644 --- a/Content.Server/White/Jukebox/TapeCreatorSystem.cs +++ b/Content.Server/White/Jukebox/TapeCreatorSystem.cs @@ -113,7 +113,7 @@ public sealed class TapeCreatorSystem : EntitySystem component.TapeContainer.Insert(args.Used); } - component.InsertedTape = tape.Owner; + component.InsertedTape = GetNetEntity(tape.Owner); Dirty(component); return; } @@ -130,7 +130,7 @@ public sealed class TapeCreatorSystem : EntitySystem private void OnSongUploaded(JukeboxSongUploadRequest ev) { - if(!TryComp(ev.TapeCreatorUid, out var tapeCreatorComponent)) return; + if(!TryComp(GetEntity(ev.TapeCreatorUid), out var tapeCreatorComponent)) return; if (!tapeCreatorComponent.InsertedTape.HasValue || tapeCreatorComponent.CoinBalance <= 0) { @@ -141,7 +141,7 @@ public sealed class TapeCreatorSystem : EntitySystem tapeCreatorComponent.CoinBalance -= 1; tapeCreatorComponent.Recording = true; - var tapeComponent = Comp(tapeCreatorComponent.InsertedTape.Value); + var tapeComponent = Comp(GetEntity(tapeCreatorComponent.InsertedTape.Value)); var songData = _songsSyncManager.SyncSongData(ev.SongName, ev.SongBytes); var song = new JukeboxSong() @@ -152,7 +152,7 @@ public sealed class TapeCreatorSystem : EntitySystem tapeComponent.Songs.Add(song); _popupSystem.PopupEntity($"Запись началась, примерное время ожидания: {_recordTime} секунд", tapeCreatorComponent.Owner); - Dirty(ev.TapeCreatorUid); + DirtyEntity(GetEntity(ev.TapeCreatorUid)); Dirty(tapeComponent); StartRecordDelayAsync(tapeCreatorComponent, _popupSystem, _containerSystem); } diff --git a/Content.Server/White/Loadout/LoadoutSystem.cs b/Content.Server/White/Loadout/LoadoutSystem.cs index df3379ff3b..4ad894e4eb 100644 --- a/Content.Server/White/Loadout/LoadoutSystem.cs +++ b/Content.Server/White/Loadout/LoadoutSystem.cs @@ -60,7 +60,11 @@ public sealed class LoadoutSystem : EntitySystem // Automatically search empty slot for clothes to equip string? firstSlotName = null; bool isEquiped = false; - foreach (var slot in _inventorySystem.GetSlots(ev.Mob)) + + if (!_inventorySystem.TryGetSlots(ev.Mob, out var slots)) + continue; + + foreach (var slot in slots) { if (!clothing.Slots.HasFlag(slot.SlotFlags)) continue; @@ -87,7 +91,7 @@ public sealed class LoadoutSystem : EntitySystem _inventorySystem.TryGetSlotEntity(ev.Mob, BackpackSlotId, out var backEntity) && _storageSystem.CanInsert(backEntity.Value, slotEntity.Value, out _)) { - _storageSystem.Insert(backEntity.Value, slotEntity.Value); + _storageSystem.Insert(backEntity.Value, slotEntity.Value, out _); } _inventorySystem.TryEquip(ev.Mob, entity, firstSlotName, true); } diff --git a/Content.Server/White/MeatyOre/MeatyOreStoreSystem.cs b/Content.Server/White/MeatyOre/MeatyOreStoreSystem.cs index 50e9c847eb..09db4c2993 100644 --- a/Content.Server/White/MeatyOre/MeatyOreStoreSystem.cs +++ b/Content.Server/White/MeatyOre/MeatyOreStoreSystem.cs @@ -107,7 +107,7 @@ public sealed class MeatyOreStoreSystem : EntitySystem var playerEntity = session.AttachedEntity; if(!playerEntity.HasValue) continue; - _storeSystem.CloseSessionUi(playerEntity.Value, meatyOreStoreData.Value); + _storeSystem.CloseUi(playerEntity.Value, meatyOreStoreData.Value); } } MeatyOrePanelEnabled = newValue; diff --git a/Content.Server/White/Other/EnergySword/DoubleSwordCraftComponent.cs b/Content.Server/White/Other/EnergySword/DoubleSwordCraftComponent.cs index 0889949221..c71380fae0 100644 --- a/Content.Server/White/Other/EnergySword/DoubleSwordCraftComponent.cs +++ b/Content.Server/White/Other/EnergySword/DoubleSwordCraftComponent.cs @@ -1,6 +1,6 @@ namespace Content.Server.White.Other.EnergySword; [RegisterComponent] -public sealed class DoubleSwordCraftComponent : Component +public sealed partial class DoubleSwordCraftComponent : Component { } diff --git a/Content.Server/White/Other/Lazy/EarsSpawnComponent.cs b/Content.Server/White/Other/Lazy/EarsSpawnComponent.cs index e43a788bf4..b6b97961f7 100644 --- a/Content.Server/White/Other/Lazy/EarsSpawnComponent.cs +++ b/Content.Server/White/Other/Lazy/EarsSpawnComponent.cs @@ -1,16 +1,13 @@ -using Content.Shared.Actions.ActionTypes; -using Robust.Shared.Utility; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.White.Other.Lazy; [RegisterComponent] -public sealed class EarsSpawnComponent : Component +public sealed partial class EarsSpawnComponent : Component { - [DataField("summonAction")] public InstantAction SummonAction = new() - { - Icon = new SpriteSpecifier.Texture(new ResPath("Clothing/Head/Hats/witch.rsi/icon.png")), - DisplayName = "summon cat ears", - Description = "meow!", - Event = new SummonActionEarsEvent() - }; + [DataField("summonAction", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string SummonAction = "ActionEarsSummon"; + + [DataField("summonActionEntity")] public EntityUid? SummonActionEntity; } diff --git a/Content.Server/White/Other/Lazy/EarsSpawnSystem.cs b/Content.Server/White/Other/Lazy/EarsSpawnSystem.cs index a678685c67..4c45104e67 100644 --- a/Content.Server/White/Other/Lazy/EarsSpawnSystem.cs +++ b/Content.Server/White/Other/Lazy/EarsSpawnSystem.cs @@ -3,7 +3,9 @@ using Content.Shared.Actions; using Content.Shared.Hands.EntitySystems; using Content.Shared.Popups; using Content.Shared.Verbs; +using Content.Shared.White.Events; using Robust.Server.GameObjects; +using Robust.Shared.Player; namespace Content.Server.White.Other.Lazy; @@ -79,10 +81,6 @@ public sealed class EarsSpawnSystem : EntitySystem private static void GetSummonAction(EntityUid uid, EarsSpawnComponent component, GetItemActionsEvent args) { - args.Actions.Add(component.SummonAction); + args.AddAction(ref component.SummonActionEntity, component.SummonAction); } } - -public sealed class SummonActionEarsEvent : InstantActionEvent -{ -} diff --git a/Content.Server/White/Other/OnDeath.cs b/Content.Server/White/Other/OnDeath.cs index 6bccbdb90c..0c41a10a21 100644 --- a/Content.Server/White/Other/OnDeath.cs +++ b/Content.Server/White/Other/OnDeath.cs @@ -1,8 +1,10 @@ using Content.Server.Chat.Systems; using Content.Server.Ghost.Components; +using Content.Shared.Ghost; using Content.Shared.Humanoid; using Content.Shared.Mobs; using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; using Robust.Shared.Random; namespace Content.Server.White.Other; @@ -19,7 +21,7 @@ public sealed class OnDeath : EntitySystem SubscribeLocalEvent(OnGhosted); } - private readonly Dictionary _playingStreams = new(); + private readonly Dictionary _playingStreams = new(); private static readonly SoundSpecifier DeathSounds = new SoundCollectionSpecifier("deathSounds"); private static readonly SoundSpecifier HeartSounds = new SoundCollectionSpecifier("heartSounds"); private static readonly string[] DeathGaspMessages = @@ -58,14 +60,11 @@ public sealed class OnDeath : EntitySystem { if (_playingStreams.TryGetValue(uid, out var currentStream)) { - currentStream.Stop(); + _audio.Stop(currentStream); } var newStream = _audio.PlayEntity(HeartSounds, uid, uid, AudioParams.Default.WithLoop(true)); - if (newStream != null) - { - _playingStreams[uid] = newStream; - } + _playingStreams[uid] = newStream.Value.Entity; } @@ -73,7 +72,7 @@ public sealed class OnDeath : EntitySystem { if (_playingStreams.TryGetValue(uid, out var currentStream)) { - currentStream.Stop(); + _audio.Stop(currentStream); _playingStreams.Remove(uid); } } @@ -85,7 +84,7 @@ public sealed class OnDeath : EntitySystem => Loc.GetString(message); private void SendDeathGaspMessage(EntityUid uid, string message) - => _chat.TrySendInGameICMessage(uid, message, InGameICChatType.Emote, false, force: true); + => _chat.TrySendInGameICMessage(uid, message, InGameICChatType.Emote, ChatTransmitRange.Normal, force: true); private void PlayDeathSound(EntityUid uid) => _audio.PlayEntity(DeathSounds, uid, uid, AudioParams.Default); diff --git a/Content.Shared/White/Events/ActionCatEarsSummonEvent.cs b/Content.Shared/White/Events/ActionCatEarsSummonEvent.cs new file mode 100644 index 0000000000..4a6f7e37fc --- /dev/null +++ b/Content.Shared/White/Events/ActionCatEarsSummonEvent.cs @@ -0,0 +1,7 @@ +using Content.Shared.Actions; + +namespace Content.Shared.White.Events; + +public sealed partial class SummonActionEarsEvent : InstantActionEvent +{ +} diff --git a/Content.Shared/White/Jukebox/JukeboxComponentsAndStuff.cs b/Content.Shared/White/Jukebox/JukeboxComponentsAndStuff.cs index 099cb3af53..2153b99744 100644 --- a/Content.Shared/White/Jukebox/JukeboxComponentsAndStuff.cs +++ b/Content.Shared/White/Jukebox/JukeboxComponentsAndStuff.cs @@ -22,7 +22,7 @@ public enum TapeCreatorUIKey : byte } [NetworkedComponent, RegisterComponent] -public class JukeboxComponent : Component +public sealed partial class JukeboxComponent : Component { public static string JukeboxContainerName = "jukebox_tapes"; @@ -46,7 +46,7 @@ public class JukeboxComponent : Component public PlayingSongData? PlayingSongData { get; set; } } -public class TapeContainerComponent : Component +public sealed partial class TapeContainerComponent : Component { public int MaxTapeCount = 1; public Container TapeContainer { get; set; } = new(); @@ -71,7 +71,7 @@ public class JukeboxComponentState : ComponentState } [Serializable, NetSerializable, DataDefinition] -public class JukeboxSong +public sealed partial class JukeboxSong { [DataField("songName")] public string? SongName; @@ -84,20 +84,20 @@ public class JukeboxRequestSongPlay : EntityEventArgs { public string? SongName { get; set; } public ResPath? SongPath { get; set; } - public EntityUid? Jukebox { get; set; } + public NetEntity? Jukebox { get; set; } public float SongDuration { get; set; } } [Serializable, NetSerializable] public class JukeboxRequestStop : EntityEventArgs { - public EntityUid? JukeboxUid { get; set; } + public NetEntity? JukeboxUid { get; set; } } [Serializable, NetSerializable] public class JukeboxStopPlaying : EntityEventArgs { - public EntityUid? JukeboxUid { get; set; } + public NetEntity? JukeboxUid { get; set; } } [Serializable, NetSerializable] @@ -105,7 +105,7 @@ public class JukeboxSongUploadRequest : EntityEventArgs { public string SongName = string.Empty; public List SongBytes = new(); - public EntityUid TapeCreatorUid = default!; + public NetEntity TapeCreatorUid = default!; } public class JukeboxSongUploadNetMessage : NetMessage diff --git a/Content.Shared/White/Jukebox/TapeComponent.cs b/Content.Shared/White/Jukebox/TapeComponent.cs index 78aaf5f284..c0708302bd 100644 --- a/Content.Shared/White/Jukebox/TapeComponent.cs +++ b/Content.Shared/White/Jukebox/TapeComponent.cs @@ -4,14 +4,14 @@ using Robust.Shared.Serialization; namespace Content.Shared.White.Jukebox; [RegisterComponent, NetworkedComponent] -public sealed class TapeComponent : Component +public sealed partial class TapeComponent : Component { [DataField("songs")] public List Songs { get; set; } = new(); } [Serializable, NetSerializable] -public sealed class TapeComponentState : ComponentState +public sealed partial class TapeComponentState : ComponentState { public List Songs { get; set; } = new(); } diff --git a/Content.Shared/White/Jukebox/TapeCreatorComponent.cs b/Content.Shared/White/Jukebox/TapeCreatorComponent.cs index 40b1a75315..ffa7741037 100644 --- a/Content.Shared/White/Jukebox/TapeCreatorComponent.cs +++ b/Content.Shared/White/Jukebox/TapeCreatorComponent.cs @@ -5,7 +5,7 @@ using Robust.Shared.Serialization; namespace Content.Shared.White.Jukebox; [RegisterComponent, NetworkedComponent] -public sealed class TapeCreatorComponent : Component +public sealed partial class TapeCreatorComponent : Component { [DataField("coins")] public int CoinBalance { get; set; } @@ -14,7 +14,7 @@ public sealed class TapeCreatorComponent : Component public bool Recording { get; set; } [ViewVariables(VVAccess.ReadOnly)] - public EntityUid? InsertedTape { get; set; } + public NetEntity? InsertedTape { get; set; } [ViewVariables(VVAccess.ReadOnly)] public Container TapeContainer { get; set; } = default!; @@ -25,5 +25,5 @@ public sealed class TapeCreatorComponentState : ComponentState { public int CoinBalance { get; set; } public bool Recording { get; set; } - public EntityUid? InsertedTape { get; set; } + public NetEntity? InsertedTape { get; set; } } diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml index 74d131379a..c990747bfc 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml @@ -25,7 +25,7 @@ underweart: ClothingUnderwearTopBraWhite # White-Underwear underwearb: ClothingUnderwearBottomPantiesWhite # White-Underwear inhand: - right hand: BriefcaseBrownFilled + - BriefcaseBrownFilled innerclothingskirt: ClothingUniformJumpskirtColorLightBrown satchel: ClothingBackpackSatchelLibrarianFilled duffelbag: ClothingBackpackDuffelLibrarianFilled diff --git a/Resources/Prototypes/White/Actions/catears.yml b/Resources/Prototypes/White/Actions/catears.yml new file mode 100644 index 0000000000..2ddc2ee27f --- /dev/null +++ b/Resources/Prototypes/White/Actions/catears.yml @@ -0,0 +1,10 @@ +- type: entity + id: ActionEarsSummon + name: summon cat ears + description: meow! + noSpawn: true + components: + - type: InstantAction + icon: { sprite: Clothing/Head/Hats/witch.rsi, state: icon } + event: !type:SummonActionEarsEvent {} + useDelay: 1