mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-17 05:27:38 +03:00
<!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Check the changelog for the full list. --- # Changelog <!-- You can add an author after the `🆑` to change the name that appears in the changelog (ex: `🆑 Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> 🆑 - add: Added Holopads (unmapped) - add: Intellicards are now useful for removing/adding a Station AI's brain. - add: Added the Communications Console to Station AI actions. - add: AI now has a warp point. - add: Added more things for the AI to press. - add: More AI laws have been added. - fix: Fixed the mail system - fix: Fixed AI actions - fix: Fixed invalid spawns for station AI breaking and ruining your ability to play it. - fix: The Station AI's name will now properly send in "arrived to the station" announcements. - fix: Changed the CPR sound to simply not loop until fixed. - fix: Fixed unlocalized messages being sent for the random sentience event. --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Co-authored-by: Zachary Higgs <compgeek223@gmail.com> Co-authored-by: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com> Co-authored-by: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> (cherry picked from commit 3e8a7d9b00e19e160321eb81d69a884189dfa4e6)
86 lines
2.6 KiB
C#
86 lines
2.6 KiB
C#
using Content.Server.Explosion.EntitySystems;
|
|
using Content.Server.Sound.Components;
|
|
using Content.Shared.UserInterface;
|
|
using Content.Shared.Sound;
|
|
using Content.Shared.Sound.Components;
|
|
using Robust.Shared.Timing;
|
|
using Robust.Shared.Network;
|
|
|
|
namespace Content.Server.Sound;
|
|
|
|
public sealed class EmitSoundSystem : SharedEmitSoundSystem
|
|
{
|
|
[Dependency] private readonly IGameTiming _timing = default!;
|
|
[Dependency] private readonly INetManager _net = default!;
|
|
|
|
public override void Update(float frameTime)
|
|
{
|
|
base.Update(frameTime);
|
|
var query = EntityQueryEnumerator<SpamEmitSoundComponent>();
|
|
|
|
while (query.MoveNext(out var uid, out var soundSpammer))
|
|
{
|
|
if (!soundSpammer.Enabled)
|
|
continue;
|
|
|
|
if (_timing.CurTime >= soundSpammer.NextSound)
|
|
{
|
|
if (soundSpammer.PopUp != null)
|
|
Popup.PopupEntity(Loc.GetString(soundSpammer.PopUp), uid);
|
|
TryEmitSound(uid, soundSpammer, predict: false);
|
|
|
|
SpamEmitSoundReset((uid, soundSpammer));
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Initialize()
|
|
{
|
|
base.Initialize();
|
|
|
|
SubscribeLocalEvent<EmitSoundOnTriggerComponent, TriggerEvent>(HandleEmitSoundOnTrigger);
|
|
SubscribeLocalEvent<SpamEmitSoundComponent, MapInitEvent>(HandleSpamEmitSoundMapInit);
|
|
}
|
|
|
|
private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args)
|
|
{
|
|
TryEmitSound(uid, component, args.User, false);
|
|
args.Handled = true;
|
|
}
|
|
|
|
private void HandleSpamEmitSoundMapInit(Entity<SpamEmitSoundComponent> entity, ref MapInitEvent args)
|
|
{
|
|
SpamEmitSoundReset(entity);
|
|
|
|
// Prewarm so multiple entities have more variation.
|
|
entity.Comp.NextSound -= Random.Next(entity.Comp.MaxInterval);
|
|
Dirty(entity);
|
|
}
|
|
|
|
private void SpamEmitSoundReset(Entity<SpamEmitSoundComponent> entity)
|
|
{
|
|
if (_net.IsClient)
|
|
return;
|
|
|
|
entity.Comp.NextSound = _timing.CurTime + ((entity.Comp.MinInterval < entity.Comp.MaxInterval)
|
|
? Random.Next(entity.Comp.MinInterval, entity.Comp.MaxInterval)
|
|
: entity.Comp.MaxInterval);
|
|
|
|
Dirty(entity);
|
|
}
|
|
|
|
public override void SetEnabled(Entity<SpamEmitSoundComponent?> entity, bool enabled)
|
|
{
|
|
if (!Resolve(entity, ref entity.Comp, false))
|
|
return;
|
|
|
|
if (entity.Comp.Enabled == enabled)
|
|
return;
|
|
|
|
entity.Comp.Enabled = enabled;
|
|
|
|
if (enabled)
|
|
SpamEmitSoundReset((entity, entity.Comp));
|
|
}
|
|
}
|