Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ups #739

Closed
wants to merge 83 commits into from
Closed

Ups #739

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
c2ffc25
Adds kitchen/botany-locked maints airlock (#34116)
IamVelcroboy Dec 29, 2024
3842850
[Maps] Map pool (#2891)
Ko4ergaPunk Dec 29, 2024
608b433
Added ID entry for captain on Bagel (#34120)
DylanWhittingham Dec 29, 2024
4acfec8
Amber Station Overhaul (#34113)
southbridge-fur Dec 30, 2024
26af689
[Maps] Glacier hotfix #5 (#2894)
NotSoDana Dec 30, 2024
3fb7ee4
Box Station - Dechristmassified (#34135)
southbridge-fur Dec 30, 2024
def73da
Marathon Station - Dechristmassified (#34136)
southbridge-fur Dec 30, 2024
a1c8ac3
Loop Station Decal and maints additions (#34103)
TytosB Dec 30, 2024
ff08fb3
Rename cryobed yml file (#34134)
Booblesnoot42 Dec 30, 2024
b31a183
Cog update (not very merry) (#34144)
Spessmann Dec 31, 2024
494cb18
bagel update (#34145)
Emisse Dec 31, 2024
94422e2
Add hair pulato (#34117)
DreamlyJack Dec 31, 2024
b51f750
Automatic changelog update
PJBot Dec 31, 2024
c1c4b1c
Holopad UI tweak for incoming calls (#34137)
chromiumboy Dec 31, 2024
8545c3a
Holopads no longer log broadcasted speech and emotes in the chat (#34…
chromiumboy Dec 31, 2024
dc90fab
Automatic changelog update
PJBot Dec 31, 2024
9158d76
Fixes borgs not being able to check their laws in crit (#34133)
PopGamer45 Dec 31, 2024
b69212b
Add contraband parent to laser gun safe (#34132)
crazybrain23 Dec 31, 2024
bdea33d
Automatic changelog update
PJBot Dec 31, 2024
adaa584
Add Holopad Circuit Board to A/V Communication Technology (#34150)
amatwiedle Dec 31, 2024
cba500c
Automatic changelog update
PJBot Dec 31, 2024
ad0d790
Fix disposal signal routers sprites (#34139)
justdie12 Dec 31, 2024
59b86d4
Automatic changelog update
PJBot Dec 31, 2024
17c1adf
[Maps] Pearl rework (#2895)
Ko4ergaPunk Dec 31, 2024
b080c6f
Meta station overhaul (#33506)
Nox38 Dec 31, 2024
ed2d784
Standardize shotgun ammo in storagefills (#34156)
ArtisticRoomba Dec 31, 2024
c5e3f86
Automatic changelog update
PJBot Dec 31, 2024
fe8eee6
meta update (#34158)
Emisse Jan 1, 2025
017bf48
Респрайт большинства ID-карт. (#993)
CatBackGround Jan 1, 2025
372beed
Automatic changelog update
Jan 1, 2025
10d94ad
Amber Station Adjustments (#34126)
southbridge-fur Jan 1, 2025
588e8c1
Fix friendly vent spiders (#34153)
Booblesnoot42 Jan 1, 2025
6b95494
Removed UseDelay component from RCD (#34149)
Booblesnoot42 Jan 1, 2025
88d1304
Automatic changelog update
PJBot Jan 1, 2025
2828441
Decrease hp for rusted walls (#34043)
lzk228 Jan 1, 2025
5afa961
Automatic changelog update
PJBot Jan 1, 2025
4f2d609
FIX: Thief beacon doubled steal targets (#33750)
ReeZer2 Jan 1, 2025
863dfcd
Automatic changelog update
PJBot Jan 1, 2025
b5f8343
remove nukemass song (#34066)
Errant-4 Jan 1, 2025
7261b86
Automatic changelog update
PJBot Jan 1, 2025
1a632b2
Corrected all ghost role names to title case. (#34155)
Alpaccalypse Jan 1, 2025
cf1fcce
[Tweak] something weird (#988)
nomad0260 Jan 1, 2025
2e888c2
Packed Update (Remove Christmas & New Evac) (#34168)
spanky-spanky Jan 1, 2025
1bda739
Omega Update (Remove Christmas) (#34174)
spanky-spanky Jan 2, 2025
3b9334e
Hardhats resprite (#2892)
Belay5 Jan 2, 2025
f4e60ff
Renamed "Irish Car Bomb" drink to "Irish Slammer" (#34107)
Alpaccalypse Jan 2, 2025
1391449
Automatic changelog update
PJBot Jan 2, 2025
df487ea
Bugfix for the AI player's eye getting stuck when their broadcast is …
chromiumboy Jan 2, 2025
59a87ef
Speech is relayed by holopad holograms (#33978)
chromiumboy Jan 2, 2025
6f9d61f
Make JPEG a PNG (#34176)
Aeshus Jan 2, 2025
083d812
Removed Undesirable Ion Storm Verbs (#34175)
Aeshus Jan 2, 2025
9af4e63
added basic admin logs for PDA notekeeper notes (#34118)
DylanWhittingham Jan 2, 2025
64a5473
Automatic changelog update
PJBot Jan 2, 2025
1a5be80
Sprites defined for all non-generic computer boards. Added new syndic…
Alpaccalypse Jan 2, 2025
39ee853
Added pricegun sound (#34119)
DylanWhittingham Jan 2, 2025
65a463e
Automatic changelog update
PJBot Jan 2, 2025
ecdcc9f
Separate Tables n' Counters (#32673)
ps3moira Jan 2, 2025
34960c5
Automatic changelog update
PJBot Jan 2, 2025
21351df
Add Chameleon PDA (#30514)
SlamBamActionman Jan 2, 2025
c98a4b9
Automatic changelog update
PJBot Jan 2, 2025
edaf0a3
Add some ion storm actions to replace removed ones (#34180)
FairlySadPanda Jan 2, 2025
a13076b
Automatic changelog update
PJBot Jan 2, 2025
83244e0
Add Ai announcements sound (#2742)
Zekins3366 Jan 2, 2025
6adc922
Automatic changelog update
IanComradeBot Jan 2, 2025
ff8c618
[Maps] Pearl fix (#2899)
Ko4ergaPunk Jan 3, 2025
a033abb
Amber Station and Science Spawner Tweaks (#34187)
southbridge-fur Jan 3, 2025
26f63c0
Map pool tweak (#2900)
Ko4ergaPunk Jan 3, 2025
b165df8
Add telephone tts (#2888)
lzk228 Jan 3, 2025
55ad6a7
Core update (#34201)
UbaserB Jan 3, 2025
03b34f0
Elkridge Depot (The station formerly known as Cell) (#34085)
Deerstop Jan 3, 2025
519753c
Merge remote-tracking branch 'upstream/master' into upstream-sync
Rxup Jan 3, 2025
6e6b806
Merge remote-tracking branch 'wizard/master' into upstream-sync
Rxup Jan 3, 2025
850a876
upstream update
Rxup Jan 4, 2025
45a8d5d
Merge pull request #995 from Rxup/upstream-sync
Rxup Jan 4, 2025
a074a70
Automatic changelog update
Jan 4, 2025
f9bcbdc
suns
CrimeMoot Jan 4, 2025
ea9544d
suns
CrimeMoot Jan 4, 2025
db1fccd
suns
CrimeMoot Jan 4, 2025
1ae0ba3
fix
CrimeMoot Jan 4, 2025
192ae62
fix?
CrimeMoot Jan 4, 2025
f629264
test
CrimeMoot Jan 4, 2025
44e2c4d
fix?
CrimeMoot Jan 4, 2025
83949bf
fix?
CrimeMoot Jan 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Content.Client/Cargo/Systems/ClientPriceGunSystem.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Shared.Cargo.Components;
using Content.Shared.Timing;
using Content.Shared.Cargo.Systems;

Expand All @@ -10,9 +11,9 @@ public sealed class ClientPriceGunSystem : SharedPriceGunSystem
{
[Dependency] private readonly UseDelaySystem _useDelay = default!;

protected override bool GetPriceOrBounty(EntityUid priceGunUid, EntityUid target, EntityUid user)
protected override bool GetPriceOrBounty(Entity<PriceGunComponent> entity, EntityUid target, EntityUid user)
{
if (!TryComp(priceGunUid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((priceGunUid, useDelay)))
if (!TryComp(entity, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity, useDelay)))
return false;

// It feels worse if the cooldown is predicted but the popup isn't! So only do the cooldown reset on the server.
Expand Down
10 changes: 10 additions & 0 deletions Content.Client/Clothing/Systems/ChameleonClothingSystem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Linq;
using Content.Client.PDA;
using Content.Shared.Clothing.Components;
using Content.Shared.Clothing.EntitySystems;
using Content.Shared.Inventory;
Expand Down Expand Up @@ -51,6 +52,15 @@ protected override void UpdateSprite(EntityUid uid, EntityPrototype proto)
{
sprite.CopyFrom(otherSprite);
}

// Edgecase for PDAs to include visuals when UI is open
if (TryComp(uid, out PdaBorderColorComponent? borderColor)
&& proto.TryGetComponent(out PdaBorderColorComponent? otherBorderColor, _factory))
{
borderColor.BorderColor = otherBorderColor.BorderColor;
borderColor.AccentHColor = otherBorderColor.AccentHColor;
borderColor.AccentVColor = otherBorderColor.AccentVColor;
}
}

/// <summary>
Expand Down
28 changes: 26 additions & 2 deletions Content.Client/Clothing/UI/ChameleonBoundUserInterface.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
using Content.Client.Clothing.Systems;
using Content.Client.Clothing.Systems;
using Content.Shared.Clothing.Components;
using Content.Shared.Tag;
using Content.Shared.Prototypes;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;
using Robust.Shared.Prototypes;

namespace Content.Client.Clothing.UI;

[UsedImplicitly]
public sealed class ChameleonBoundUserInterface : BoundUserInterface
{
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
private readonly ChameleonClothingSystem _chameleon;
private readonly TagSystem _tag;

[ViewVariables]
private ChameleonMenu? _menu;

public ChameleonBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
_chameleon = EntMan.System<ChameleonClothingSystem>();
_tag = EntMan.System<TagSystem>();
}

protected override void Open()
Expand All @@ -34,7 +41,24 @@ protected override void UpdateState(BoundUserInterfaceState state)
return;

var targets = _chameleon.GetValidTargets(st.Slot);
_menu?.UpdateState(targets, st.SelectedId);
if (st.RequiredTag != null)
{
var newTargets = new List<string>();
foreach (var target in targets)
{
if (string.IsNullOrEmpty(target) || !_proto.TryIndex(target, out EntityPrototype? proto))
continue;

if (!proto.TryGetComponent(out TagComponent? tag, _factory) || !_tag.HasTag(tag, st.RequiredTag))
continue;

newTargets.Add(target);
}
_menu?.UpdateState(newTargets, st.SelectedId);
} else
{
_menu?.UpdateState(targets, st.SelectedId);
}
}

private void OnIdSelected(string selectedId)
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Holopad/HolopadWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
<Label Name="CallStatusText" Margin="10 5 10 0" ReservesSpace="False"/>
<BoxContainer Name="CallerIdContainer" Orientation="Vertical" ReservesSpace="False">
<RichTextLabel Name="CallerIdText" HorizontalAlignment="Center" Margin="0 0 0 0"/>
<Label Text="{Loc 'holopad-window-relay-label'}" Margin="10 5 10 0" ReservesSpace="False"/>
<Label Text="{Loc 'holopad-window-relay-label'}" Margin="10 10 10 0" ReservesSpace="False"/>
<RichTextLabel Name="HolopadIdText" HorizontalAlignment="Center" Margin="0 0 0 10"/>
</BoxContainer>
</BoxContainer>
Expand Down
5 changes: 5 additions & 0 deletions Content.Client/PDA/PdaMenu.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@ public void UpdateState(PdaUpdateState state)
_pdaOwner = state.PdaOwnerInfo.ActualOwnerName;
PdaOwnerLabel.SetMarkup(Loc.GetString("comp-pda-ui-owner",
("actualOwnerName", _pdaOwner)));
PdaOwnerLabel.Visible = true;
}
else
{
PdaOwnerLabel.Visible = false;
}


Expand Down
40 changes: 0 additions & 40 deletions Content.Client/PDA/PdaSystem.cs
Original file line number Diff line number Diff line change
@@ -1,48 +1,8 @@
using Content.Shared.PDA;
using Content.Shared.Light;
using Robust.Client.GameObjects;

namespace Content.Client.PDA;

public sealed class PdaSystem : SharedPdaSystem
{
public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<PdaComponent, AppearanceChangeEvent>(OnAppearanceChange);
}

private void OnAppearanceChange(EntityUid uid, PdaComponent component, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;

if (Appearance.TryGetData<bool>(uid, UnpoweredFlashlightVisuals.LightOn, out var isFlashlightOn, args.Component))
args.Sprite.LayerSetVisible(PdaVisualLayers.Flashlight, isFlashlightOn);

if (Appearance.TryGetData<bool>(uid, PdaVisuals.IdCardInserted, out var isCardInserted, args.Component))
args.Sprite.LayerSetVisible(PdaVisualLayers.IdLight, isCardInserted);
}

protected override void OnComponentInit(EntityUid uid, PdaComponent component, ComponentInit args)
{
base.OnComponentInit(uid, component, args);

if (!TryComp<SpriteComponent>(uid, out var sprite))
return;

if (component.State != null)
sprite.LayerSetState(PdaVisualLayers.Base, component.State);

sprite.LayerSetVisible(PdaVisualLayers.Flashlight, component.FlashlightOn);
sprite.LayerSetVisible(PdaVisualLayers.IdLight, component.IdSlot.StartingItem != null);
}

public enum PdaVisualLayers : byte
{
Base,
Flashlight,
IdLight
}
}
30 changes: 30 additions & 0 deletions Content.Client/PDA/PdaVisualizerSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using Content.Shared.Light;
using Content.Shared.PDA;
using Robust.Client.GameObjects;

namespace Content.Client.PDA;

public sealed class PdaVisualizerSystem : VisualizerSystem<PdaVisualsComponent>
{
protected override void OnAppearanceChange(EntityUid uid, PdaVisualsComponent comp, ref AppearanceChangeEvent args)
{
if (args.Sprite == null)
return;

if (AppearanceSystem.TryGetData<string>(uid, PdaVisuals.PdaType, out var pdaType, args.Component))
args.Sprite.LayerSetState(PdaVisualLayers.Base, pdaType);

if (AppearanceSystem.TryGetData<bool>(uid, UnpoweredFlashlightVisuals.LightOn, out var isFlashlightOn, args.Component))
args.Sprite.LayerSetVisible(PdaVisualLayers.Flashlight, isFlashlightOn);

if (AppearanceSystem.TryGetData<bool>(uid, PdaVisuals.IdCardInserted, out var isCardInserted, args.Component))
args.Sprite.LayerSetVisible(PdaVisualLayers.IdLight, isCardInserted);
}

public enum PdaVisualLayers : byte
{
Base,
Flashlight,
IdLight
}
}
14 changes: 14 additions & 0 deletions Content.Client/PDA/PdaVisualsComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace Content.Client.PDA;

/// <summary>
/// Used for visualizing PDA visuals.
/// </summary>
[RegisterComponent]
public sealed partial class PdaVisualsComponent : Component
{
public string? BorderColor;

public string? AccentHColor;

public string? AccentVColor;
}
80 changes: 80 additions & 0 deletions Content.IntegrationTests/Tests/Backmen/Body/HandsTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using System.Linq;
using Content.Server.Body.Systems;
using Content.Server.Hands.Systems;
using Content.Shared.Body.Part;
using Content.Shared.Humanoid.Prototypes;
using Robust.Shared.GameObjects;
using Robust.Shared.Prototypes;

namespace Content.IntegrationTests.Tests.Backmen.Body;

[TestFixture]
public sealed class HandsTest
{
[Test]
public async Task AllSpeciesHaveLegs()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
Connected = true,
InLobby = false,
});

var server = pair.Server;
var bodySys = server.EntMan.System<BodySystem>();

foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>())
{
var dummy = EntityUid.Invalid;
await server.WaitAssertion(() =>
{
dummy = server.EntMan.Spawn(speciesPrototype.Prototype);
});
await server.WaitIdleAsync();
await server.WaitRunTicks(2);
await server.WaitAssertion(() =>
{
Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid));
var handCount = bodySys.GetBodyPartCount(dummy, BodyPartType.Leg);
Assert.That(handCount, Is.GreaterThanOrEqualTo(2), $"legs {speciesPrototype.ID}({speciesPrototype.Prototype})");
});

}

await pair.CleanReturnAsync();
}
[Test]
public async Task AllSpeciesHaveHands()
{
await using var pair = await PoolManager.GetServerClient(new PoolSettings
{
Dirty = true,
Connected = true,
InLobby = false,
});

var server = pair.Server;
var handsSys = server.EntMan.System<HandsSystem>();

foreach (var speciesPrototype in server.ProtoMan.EnumeratePrototypes<SpeciesPrototype>())
{
var dummy = EntityUid.Invalid;
await server.WaitAssertion(() =>
{
dummy = server.EntMan.Spawn(speciesPrototype.Prototype);
});
await server.WaitIdleAsync();
await server.WaitRunTicks(2);
await server.WaitAssertion(() =>
{
Assert.That(dummy, Is.Not.EqualTo(EntityUid.Invalid));
var handCount = handsSys.EnumerateHands(dummy).Count();
Assert.That(handCount, Is.GreaterThanOrEqualTo(2), $"hands {speciesPrototype.ID}({speciesPrototype.Prototype})");
});

}

await pair.CleanReturnAsync();
}
}
3 changes: 2 additions & 1 deletion Content.IntegrationTests/Tests/PostMapInitTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,8 @@ public sealed class PostMapInitTest
"Cog",
"Gate",
"Amber",
"Loop"
"Loop",
"Elkridge"
};

/// <summary>
Expand Down
17 changes: 12 additions & 5 deletions Content.Server/Cargo/Systems/PriceGunSystem.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using Content.Server.Popups;
using Content.Shared.Cargo.Components;
using Content.Shared.IdentityManagement;
using Content.Shared.Timing;
using Content.Shared.Cargo.Systems;
using Robust.Shared.Audio.Systems;

namespace Content.Server.Cargo.Systems;

Expand All @@ -11,12 +13,12 @@ public sealed class PriceGunSystem : SharedPriceGunSystem
[Dependency] private readonly PricingSystem _pricingSystem = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly CargoSystem _bountySystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;

protected override bool GetPriceOrBounty(EntityUid priceGunUid, EntityUid target, EntityUid user)
protected override bool GetPriceOrBounty(Entity<PriceGunComponent> entity, EntityUid target, EntityUid user)
{
if (!TryComp(priceGunUid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((priceGunUid, useDelay)))
if (!TryComp(entity.Owner, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity.Owner, useDelay)))
return false;

// Check if we're scanning a bounty crate
if (_bountySystem.IsBountyComplete(target, out _))
{
Expand All @@ -25,10 +27,15 @@ protected override bool GetPriceOrBounty(EntityUid priceGunUid, EntityUid target
else // Otherwise appraise the price
{
var price = _pricingSystem.GetPrice(target);
_popupSystem.PopupEntity(Loc.GetString("price-gun-pricing-result", ("object", Identity.Entity(target, EntityManager)), ("price", $"{price:F2}")), user, user);
_popupSystem.PopupEntity(Loc.GetString("price-gun-pricing-result",
("object", Identity.Entity(target, EntityManager)),
("price", $"{price:F2}")),
user,
user);
}

_useDelay.TryResetDelay((priceGunUid, useDelay));
_audio.PlayPvs(entity.Comp.AppraisalSound, entity.Owner);
_useDelay.TryResetDelay((entity.Owner, useDelay));
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using Content.Server.Administration.Logs;
using Content.Shared.CartridgeLoader;
using Content.Shared.CartridgeLoader.Cartridges;
using Content.Shared.Database;

namespace Content.Server.CartridgeLoader.Cartridges;

public sealed class NotekeeperCartridgeSystem : EntitySystem
{
[Dependency] private readonly CartridgeLoaderSystem? _cartridgeLoaderSystem = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;

public override void Initialize()
{
Expand Down Expand Up @@ -36,16 +39,19 @@ private void OnUiMessage(EntityUid uid, NotekeeperCartridgeComponent component,
if (message.Action == NotekeeperUiAction.Add)
{
component.Notes.Add(message.Note);
_adminLogger.Add(LogType.PdaInteract, LogImpact.Low,
$"{ToPrettyString(args.Actor)} added a note to PDA: '{message.Note}' contained on: {ToPrettyString(uid)}");
}
else
{
component.Notes.Remove(message.Note);
_adminLogger.Add(LogType.PdaInteract, LogImpact.Low,
$"{ToPrettyString(args.Actor)} removed a note from PDA: '{message.Note}' was contained on: {ToPrettyString(uid)}");
}

UpdateUiState(uid, GetEntity(args.LoaderUid), component);
}


private void UpdateUiState(EntityUid uid, EntityUid loaderUid, NotekeeperCartridgeComponent? component)
{
if (!Resolve(uid, ref component))
Expand Down
Loading
Loading