Files
space-station-14/Content.Server/Silicons/StationAi/StationAiFixerConsoleSystem.cs
chromiumboy 7444c8ea4a The station AI can be destroyed (#39588)
* Initial commit

* Fixing merge conflict

* Merge conflict fixed

* Anchorable entities can now be marked as 'unanchorable'

* Revert "Anchorable entities can now be marked as 'unanchorable'"

This reverts commit 6a502e62a703cf06bd36ed3bdefe655fc074cfc5

This functionality will be made into a separate PR

* Error sprite

* Update AI core appearance with sustained damage, spawn scrap on destroyed

* Added intellicard sprite

* AI damage overlays

* Added fixtures

* AI core accent changes when damaged or low on power

* Bug fix and pop up messages for inserting AIs into inoperable cores

* Updated 'dead' sprite

* Destroying the AI core reduces the number of AI job slots available

* AI battery duration set to 10 minutes

* Initial commit

* Allow MMIs used in the construction of AI cores to take them over

* Initial resources commit

* Initial code commit

* Sprite update

* Bug fixes and updates

* Basic console UI

* Code refactor

* Added lock screen

* Added all outstanding UI features

* Added purge sprites

* Better appearance handling

* Fixed issue with purge sprite

* Finalized UI design

* Major components finalized

* Bit of clean up

* Removed some code that was used for testing

* Tweaked some text

* Removed extra space

* Added the circuitboard to the RD's locker

* Addressed reviewer comments plus tweaks

* Addressed reviewer comments plus tweaks

* Removed instances of granular damage

* Various improvements

* Removed testing code

* Fixed issue with disabled buttons

* Finalized code

* Addressed review comments

* Added a spare Station AI core electronics to the research director's locker

* Fixing build failure

* Addressed review comments

* Addressed review comments

* Added reverse path for construction graph

* Removed unneeded reference

* Parts can be purchased through cargo

* Fixing merge conflict

* Merge conflict resolved

* Fixing merge conflict

* Code update

* Code updates

* Increased AI core health and gave it a sell price to fix test fail

* Added screen static sprite

* Added better support for ghosted AI players plus code tweaks

* Various improvements and clean up

* Increased purge duration to 60 seconds

* Fixed needless complication

* Addressed reviewer comments part 1

* Addressed reviewer comments part 2

* Further fixes

* Trying lower battery values to see if it fixes the test fail

* Adjusted power values again

* Addressed review comments

* Addressed review comments

* Fixed test fail

* Fixed bug with endless rebooting. Using rejuvenation on an AI core revives the AI inside.

* Added pop up text

* Bug fix

* Tweaks and fixes

* Fixed restoration console not updating when the AI finishes rebooting

* Update SharedStationAiSystem.Held.cs

---------

Co-authored-by: ScarKy0 <scarky0@onet.eu>
2025-09-15 16:18:32 +02:00

65 lines
2.4 KiB
C#

using Content.Shared.Silicons.StationAi;
using Content.Server.EUI;
using Content.Server.Ghost;
using Content.Server.Mind;
using Robust.Shared.Audio.Systems;
using Robust.Server.Player;
using Content.Shared.Popups;
namespace Content.Server.Silicons.StationAi;
public sealed partial class StationAiFixerConsoleSystem : SharedStationAiFixerConsoleSystem
{
[Dependency] private readonly EuiManager _eui = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly MindSystem _mind = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
protected override void FinalizeAction(Entity<StationAiFixerConsoleComponent> ent)
{
if (IsActionInProgress(ent) && ent.Comp.ActionTarget != null)
{
switch (ent.Comp.ActionType)
{
case StationAiFixerConsoleAction.Repair:
// Send message to disembodied player that they are being revived
if (_mind.TryGetMind(ent.Comp.ActionTarget.Value, out _, out var mind) &&
mind.IsVisitingEntity &&
_player.TryGetSessionById(mind.UserId, out var session))
{
_eui.OpenEui(new ReturnToBodyEui(mind, _mind, _player), session);
_popup.PopupEntity(Loc.GetString("station-ai-fixer-console-repair-finished"), ent);
}
else
{
_popup.PopupEntity(Loc.GetString("station-ai-fixer-console-repair-successful"), ent);
}
// TODO: make predicted once a user is not required
if (ent.Comp.RepairFinishedSound != null)
{
_audio.PlayPvs(ent.Comp.RepairFinishedSound, ent);
}
break;
case StationAiFixerConsoleAction.Purge:
_popup.PopupEntity(Loc.GetString("station-ai-fixer-console-purge-successful"), ent);
// TODO: make predicted once a user is not required
if (ent.Comp.PurgeFinishedSound != null)
{
_audio.PlayPvs(ent.Comp.PurgeFinishedSound, ent);
}
break;
}
}
base.FinalizeAction(ent);
}
}