Skip to content

Commit

Permalink
Merge remote-tracking branch 'wizard/master' into upstream-sync
Browse files Browse the repository at this point in the history
  • Loading branch information
Rxup committed Feb 17, 2024
2 parents 7a0a978 + dbf2c64 commit b32d1de
Show file tree
Hide file tree
Showing 11 changed files with 94 additions and 24 deletions.
1 change: 1 addition & 0 deletions Content.Server/Botany/Systems/PlantHolderSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,7 @@ public void Update(EntityUid uid, PlantHolderComponent? component = null)
RemovePlant(uid, component);
component.ForceUpdate = true;
Update(uid, component);
return;
}

CheckHealth(uid, component);
Expand Down
14 changes: 11 additions & 3 deletions Content.Server/Explosion/EntitySystems/TriggerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
using Robust.Shared.Physics.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
using Robust.Shared.Player;
using Content.Shared.Coordinates;

namespace Content.Server.Explosion.EntitySystems
{
Expand Down Expand Up @@ -103,9 +105,15 @@ public override void Initialize()

private void OnSoundTrigger(EntityUid uid, SoundOnTriggerComponent component, TriggerEvent args)
{
_audio.PlayPvs(component.Sound, uid);
if (component.RemoveOnTrigger)
RemCompDeferred<SoundOnTriggerComponent>(uid);
if (component.RemoveOnTrigger) // if the component gets removed when it's triggered
{
var xform = Transform(uid);
_audio.PlayPvs(component.Sound, xform.Coordinates); // play the sound at its last known coordinates
}
else // if the component doesn't get removed when triggered
{
_audio.PlayPvs(component.Sound, uid); // have the sound follow the entity itself
}
}

private void OnAnchorTrigger(EntityUid uid, AnchorOnTriggerComponent component, TriggerEvent args)
Expand Down
21 changes: 21 additions & 0 deletions Content.Server/GameTicking/GameTicker.Replays.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
using Robust.Shared;
using Robust.Shared.ContentPack;
using Robust.Shared.Replays;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Value;
using Robust.Shared.Utility;

namespace Content.Server.GameTicking;
Expand All @@ -10,12 +14,15 @@ public sealed partial class GameTicker
{
[Dependency] private readonly IReplayRecordingManager _replays = default!;
[Dependency] private readonly IResourceManager _resourceManager = default!;
[Dependency] private readonly ISerializationManager _serialman = default!;


private ISawmill _sawmillReplays = default!;

private void InitializeReplays()
{
_replays.RecordingFinished += ReplaysOnRecordingFinished;
_replays.RecordingStopped += ReplaysOnRecordingStopped;
}

/// <summary>
Expand Down Expand Up @@ -108,6 +115,20 @@ private void ReplaysOnRecordingFinished(ReplayRecordingFinished data)
data.Directory.Rename(data.Path, state.MoveToPath.Value);
}

private void ReplaysOnRecordingStopped(MappingDataNode metadata)
{
// Write round info like map and round end summery into the replay_final.yml file. Useful for external parsers.

metadata["map"] = new ValueDataNode(_gameMapManager.GetSelectedMap()?.MapName);
metadata["gamemode"] = new ValueDataNode(CurrentPreset != null ? Loc.GetString(CurrentPreset.ModeTitle) : string.Empty);
metadata["roundEndPlayers"] = _serialman.WriteValue(_replayRoundPlayerInfo);
metadata["roundEndText"] = new ValueDataNode(_replayRoundText);
metadata["server_id"] = new ValueDataNode(_configurationManager.GetCVar(CCVars.ServerId));
// These should be set to null to prepare them for the next round.
_replayRoundPlayerInfo = null;
_replayRoundText = null;
}

private ResPath GetAutoReplayPath()
{
var cfgValue = _cfg.GetCVar(CCVars.ReplayAutoRecordName);
Expand Down
10 changes: 10 additions & 0 deletions Content.Server/GameTicking/GameTicker.RoundFlow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,10 @@ public sealed partial class GameTicker
[ViewVariables]
private GameRunLevel _runLevel;

private RoundEndMessageEvent.RoundEndPlayerInfo[]? _replayRoundPlayerInfo;

private string? _replayRoundText;

[ViewVariables]
public GameRunLevel RunLevel
{
Expand Down Expand Up @@ -373,11 +377,14 @@ public void ShowRoundEndScoreboard(string text = "")
PlayerOOCName = contentPlayerData?.Name ?? "(IMPOSSIBLE: REGISTERED MIND WITH NO OWNER)",
// Character name takes precedence over current entity name
PlayerICName = playerIcName,
PlayerGuid = userId,
PlayerNetEntity = GetNetEntity(entity),
Role = antag
? roles.First(role => role.Antagonist).Name
: roles.FirstOrDefault().Name ?? Loc.GetString("game-ticker-unknown-role"),
Antag = antag,
JobPrototypes = roles.Where(role => !role.Antagonist).Select(role => role.Prototype).ToArray(),
AntagPrototypes = roles.Where(role => role.Antagonist).Select(role => role.Prototype).ToArray(),
Observer = observer,
Connected = connected
};
Expand All @@ -391,6 +398,9 @@ public void ShowRoundEndScoreboard(string text = "")
RaiseNetworkEvent(new RoundEndMessageEvent(gamemodeTitle, roundEndText, roundDuration, RoundId,
listOfPlayerInfoFinal.Length, listOfPlayerInfoFinal, LobbySong, sound));
RaiseLocalEvent(new RoundEndedEvent(RoundId, roundDuration)); // Corvax

_replayRoundPlayerInfo = listOfPlayerInfoFinal;
_replayRoundText = roundEndText;
}

private async void SendRoundEndDiscordMessage()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
using Content.Server.Mind;
using Content.Shared.Species.Components;
using Content.Shared.Body.Events;
using Content.Shared.Mind;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;

namespace Content.Shared.Species;
namespace Content.Server.Species.Systems;

public sealed partial class NymphSystem : EntitySystem
{
[Dependency] protected readonly IPrototypeManager _protoManager = default!;
[Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly IPrototypeManager _protoManager= default!;
[Dependency] private readonly MindSystem _mindSystem = default!;
[Dependency] private readonly IGameTiming _timing = default!;

public override void Initialize()
Expand All @@ -31,11 +31,11 @@ private void OnRemovedFromPart(EntityUid uid, NymphComponent comp, RemovedFromPa
return;

var coords = Transform(uid).Coordinates;
var nymph = EntityManager.SpawnEntity(entityProto.ID, coords);
var nymph = EntityManager.SpawnAtPosition(entityProto.ID, coords);

if (comp.TransferMind == true && _mindSystem.TryGetMind(args.OldBody, out var mindId, out var mind))
_mindSystem.TransferTo(mindId, nymph, mind: mind);

EntityManager.QueueDeleteEntity(uid);
QueueDel(uid);
}
}
5 changes: 5 additions & 0 deletions Content.Shared/Administration/AdminFlags.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ public enum AdminFlags : uint
/// </summary>
EditNotes = 1 << 14,

/// <summary>
/// Lets you Massban, on SS14.Admin
/// </summary>
MassBan = 1 << 15,

/// <summary>
/// Dangerous host permissions like scsi.
/// </summary>
Expand Down
28 changes: 24 additions & 4 deletions Content.Shared/GameTicking/SharedGameTicker.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Shared.Roles;
using Robust.Shared.Network;
using Robust.Shared.Replays;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Markdown.Mapping;
Expand Down Expand Up @@ -144,18 +145,37 @@ public TickerJobsAvailableEvent(Dictionary<NetEntity, string> stationNames, Dict
}
}

[Serializable, NetSerializable]
public sealed class RoundEndMessageEvent : EntityEventArgs
[Serializable, NetSerializable, DataDefinition]
public sealed partial class RoundEndMessageEvent : EntityEventArgs
{
[Serializable, NetSerializable]
public struct RoundEndPlayerInfo
[Serializable, NetSerializable, DataDefinition]
public partial struct RoundEndPlayerInfo
{
[DataField]
public string PlayerOOCName;

[DataField]
public string? PlayerICName;

[DataField, NonSerialized]
public NetUserId? PlayerGuid;

public string Role;

[DataField, NonSerialized]
public string[] JobPrototypes;

[DataField, NonSerialized]
public string[] AntagPrototypes;

public NetEntity? PlayerNetEntity;

[DataField]
public bool Antag;

[DataField]
public bool Observer;

public bool Connected;
}

Expand Down
3 changes: 2 additions & 1 deletion Content.Shared/Roles/MindGetAllRolesEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ namespace Content.Shared.Roles;
/// <param name="Name">Name of the role.</param>
/// <param name="Antagonist">Whether or not this role makes this player an antagonist.</param>
/// <param name="PlayTimeTrackerId">The <see cref="PlayTimeTrackerPrototype"/> id associated with the role.</param>
public readonly record struct RoleInfo(Component Component, string Name, bool Antagonist, string? PlayTimeTrackerId);
/// <param name="Prototype">The prototype ID of the role</param>
public readonly record struct RoleInfo(Component Component, string Name, bool Antagonist, string? PlayTimeTrackerId, string Prototype);
8 changes: 6 additions & 2 deletions Content.Shared/Roles/SharedRoleSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,30 +27,34 @@ public override void Initialize()
private void OnJobGetAllRoles(EntityUid uid, JobComponent component, ref MindGetAllRolesEvent args)
{
var name = "game-ticker-unknown-role";
var prototype = "";
string? playTimeTracker = null;
if (component.Prototype != null && _prototypes.TryIndex(component.Prototype, out JobPrototype? job))
{
name = job.Name;
prototype = job.ID;
playTimeTracker = job.PlayTimeTracker;
}

name = Loc.GetString(name);

args.Roles.Add(new RoleInfo(component, name, false, playTimeTracker));
args.Roles.Add(new RoleInfo(component, name, false, playTimeTracker, prototype));
}

protected void SubscribeAntagEvents<T>() where T : AntagonistRoleComponent
{
SubscribeLocalEvent((EntityUid _, T component, ref MindGetAllRolesEvent args) =>
{
var name = "game-ticker-unknown-role";
var prototype = "";
if (component.PrototypeId != null && _prototypes.TryIndex(component.PrototypeId, out AntagPrototype? antag))
{
name = antag.Name;
prototype = antag.ID;
}
name = Loc.GetString(name);

args.Roles.Add(new RoleInfo(component, name, true, null));
args.Roles.Add(new RoleInfo(component, name, true, null, prototype));
});

SubscribeLocalEvent((EntityUid _, T _, ref MindIsAntagonistEvent args) => args.IsAntagonist = true);
Expand Down
14 changes: 7 additions & 7 deletions Resources/Changelog/Changelog.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
Entries:
- author: Emisse
changes:
- message: The Grand Lottery now has much more prizes in store!
type: Tweak
id: 5456
time: '2023-12-27T12:31:03.0000000+00:00'
url: https://api.github.com/repos/space-wizards/space-station-14/pulls/23048
- author: TheShuEd
changes:
- message: The thief will temporarily not steal structures for the time being, as
Expand Down Expand Up @@ -3877,3 +3870,10 @@
id: 5955
time: '2024-02-17T05:02:12.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/25326
- author: Dygon
changes:
- message: Diona nymphs aren't deleted immediately after spawning anymore.
type: Fix
id: 5956
time: '2024-02-17T16:38:21.0000000+00:00'
url: https://github.com/space-wizards/space-station-14/pull/25344
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
sprite: Objects/Weapons/Grenades/flashbang.rsi
- type: FlashOnTrigger
range: 7
- type: EmitSoundOnTrigger
- type: SoundOnTrigger
sound:
path: "/Audio/Effects/flash_bang.ogg"
- type: DeleteOnTrigger
Expand Down

0 comments on commit b32d1de

Please sign in to comment.