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

Sync master up to 8/10 #132

Merged
merged 135 commits into from
Oct 9, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
8903e32
Fix mispredict when closing a crematorium you are standing over (#20541)
DrSmugleaf Sep 27, 2023
749d90d
Practice Ammunition Tech (#20331)
Nairodian Oct 1, 2023
1e4ffce
Automatic changelog update
PJBot Oct 1, 2023
d98082e
Fix for [20593] (#20663)
Jezithyr Oct 1, 2023
65d4173
Advanced treatment cyborg module for medical borg (#19667)
Nimfar11 Oct 1, 2023
15b460d
Sericulture fixes (#19193)
PixelTheKermit Oct 1, 2023
7ce3f6a
Automatic changelog update
PJBot Oct 1, 2023
b2f67d4
Adds vending restocks for ChefVend and Condiment Stations (#19305)
IamVelcroboy Oct 1, 2023
98af1e2
Automatic changelog update
PJBot Oct 1, 2023
ff872be
Remove SpreaderNodeGroup (#20230)
ElectroJr Oct 1, 2023
422a812
Fix prying door hacking protections (#20664)
chromiumboy Oct 1, 2023
c66db5c
Automatic changelog update
PJBot Oct 1, 2023
7e37959
Boot Smallarms (#20062)
Nairodian Oct 1, 2023
41062b9
Automatic changelog update
PJBot Oct 1, 2023
227cc0f
Electric grill (#20661)
deltanedas Oct 2, 2023
c178182
Automatic changelog update
PJBot Oct 2, 2023
d15b978
Packed records computer changes (#20667)
JustCone14 Oct 2, 2023
fe2e546
Replace paramedic with medical windoor (#20653)
TsjipTsjip Oct 2, 2023
b6773f3
Rename power infra on cluster (#20655)
TsjipTsjip Oct 2, 2023
2b9caf0
Rename power infra on omega station (#20654)
TsjipTsjip Oct 2, 2023
c54022e
Fix powered door prying popup (#20669)
chromiumboy Oct 2, 2023
2cf7681
New Kobold Ears marking for lizards (#20672)
UbaserB Oct 2, 2023
e9082af
Automatic changelog update
PJBot Oct 2, 2023
b8cca74
Fix sericulture (#20673)
metalgearsloth Oct 2, 2023
c0b7565
actually add jug to medfab (#20679)
deltanedas Oct 2, 2023
1c12ff8
Temperature refactor (#20662)
deltanedas Oct 2, 2023
37a1135
Revert "Northstar Gloves dmg reduced from 8 -> 7" (#20674)
JoeHammad1844 Oct 2, 2023
92d2aa1
Automatic changelog update
PJBot Oct 2, 2023
6b768b2
Make minigun weigh more (#20685)
BasedUser Oct 2, 2023
a3479d7
easiest bug fix of my life (#20686)
VasilisThePikachu Oct 2, 2023
1c43c75
Automatic changelog update
PJBot Oct 2, 2023
f583305
Add rolling pins for flattening dough (#20624)
deltanedas Oct 2, 2023
4db6fe0
Automatic changelog update
PJBot Oct 2, 2023
22dc5f9
Make forcing others into disposals take longer and more apparent (#20…
notquitehadouken Oct 2, 2023
eb2039c
Increase bluespace beaker capacity (#20680)
EmoGarbage404 Oct 2, 2023
6e9f619
Add names for power infrastructure on Packed (#20689)
JustCone14 Oct 2, 2023
8c424a5
Disable SSD indicators on LRP (#20021)
Chief-Engineer Oct 2, 2023
83b7f80
Give nukeops play time requirements (#20109)
deltanedas Oct 2, 2023
e68e4e8
Automatic changelog update
PJBot Oct 2, 2023
075d7bf
Play sound when filling ammo (#20691)
deltanedas Oct 2, 2023
1f33494
Box Power Infrastructure Names (#20693)
JustCone14 Oct 2, 2023
8abcefb
Revert "Disable SSD indicators on LRP (#20021)" (#20703)
Chief-Engineer Oct 3, 2023
f06fa64
Origin Station Update 22.09.2023 (remove mines, fix telecoms) (#20411)
brainfood1183 Oct 3, 2023
535ad68
Add names to unnamed SMES and Subs (#20712)
JustCone14 Oct 3, 2023
b7b7507
Fix plant species reagent mutations (#20702)
Doru991 Oct 3, 2023
80693d6
Automatic changelog update
PJBot Oct 3, 2023
b92d457
Fix omnitool not prying airlocks (#20697)
crazybrain23 Oct 4, 2023
de291f0
Automatic changelog update
PJBot Oct 4, 2023
c77617e
fix (#20719)
UbaserB Oct 4, 2023
edd19e8
fix borgs not being able to toggle flashlight (#20448)
EmoGarbage404 Oct 4, 2023
22e9c30
Automatic changelog update
PJBot Oct 4, 2023
91620e3
fix magboots equipped sprites (#20723)
deltanedas Oct 4, 2023
0f5e4d5
Add missing type argument from PopupClient to PopupEntity (#20725)
deltanedas Oct 4, 2023
313b29e
Add trading ship for future implementation (#20715)
UbaserB Oct 4, 2023
27ce56d
Space Ninja 3: an old enemy in a new environment (#20713)
Jackal298 Oct 4, 2023
a045891
Add clipboards (#20717)
nmajask Oct 4, 2023
6ead566
Automatic changelog update
PJBot Oct 4, 2023
b8d0ef3
Add ashwalker and gladiator starting gear sets (#20688)
Fromoriss Oct 4, 2023
0d919aa
emag inhand sprites (#20729)
notquitehadouken Oct 5, 2023
5237ff6
Revolutionaries (#18477)
coolmankid12345 Oct 5, 2023
e55c41a
Removes unnecessary message for defibbing a patient which has ghosted…
rbertoche Oct 5, 2023
324344a
Automatic changelog update
PJBot Oct 5, 2023
9e30c11
Adds clipboards to bureaucracy crate and replaces incorrectly credite…
nmajask Oct 5, 2023
b9c7b6e
Fix revolutionaries not being considered antags (#20739)
DrSmugleaf Oct 5, 2023
0b0f01d
Fix printing $username at round end for head revs when it doesn't hav…
DrSmugleaf Oct 5, 2023
6f148ee
Add "Two Strands" hair (#20730)
Bloody2372 Oct 5, 2023
dc6a026
Fix access for vehicles and mechs (#20737)
EmoGarbage404 Oct 5, 2023
bf9ed18
Automatic changelog update
PJBot Oct 5, 2023
13e0b86
Barratry seniors (#20720)
TsjipTsjip Oct 5, 2023
5a99f7c
give revs briefing (#20749)
deltanedas Oct 5, 2023
5f93ea1
Vulture server config preset (#20766)
PJB3005 Oct 5, 2023
5d1182b
Rock Anomaly (#20635)
brainfood1183 Oct 5, 2023
6c2deea
Automatic changelog update
PJBot Oct 5, 2023
2c8894a
Make slimes not rot (#20761)
notquitehadouken Oct 5, 2023
501a432
Automatic changelog update
PJBot Oct 5, 2023
5f8b5db
set leviathan pop cap to 60 (#19589)
Chief-Engineer Oct 5, 2023
b668bc6
shouldlength overeye hairstyle (#20757)
KingFroozy Oct 5, 2023
7492938
Power infra names for Barratry (#20760)
TsjipTsjip Oct 5, 2023
44c598e
Marathon Power Infrastructure Names (#20763)
JustCone14 Oct 5, 2023
ed24592
Fland Power Infrastructure Names (#20764)
JustCone14 Oct 5, 2023
af32e0a
Power infra names for Kettle (#20762)
TsjipTsjip Oct 5, 2023
73a90d9
Added onion rings (#20734)
dahnte Oct 5, 2023
8002bce
Automatic changelog update
PJBot Oct 5, 2023
99beed2
monkey gas mask! (#20683)
gusxyz Oct 5, 2023
7679a99
Automatic changelog update
PJBot Oct 5, 2023
b9491fd
Add rotation to tree (#20775)
TheShuEd Oct 6, 2023
a90327a
Automatic changelog update
PJBot Oct 6, 2023
989a820
Use construction graphs for hacking protections (#20265)
chromiumboy Oct 6, 2023
bc45276
Minor Rev changes (#20771)
coolmankid12345 Oct 6, 2023
df47de1
Make syndicate bombs collidable again (#20573)
gusxyz Oct 6, 2023
c2b7d14
Automatic changelog update
PJBot Oct 6, 2023
24e1a21
Remove extra white pixels (#20791)
coolmankid12345 Oct 6, 2023
d07c747
Four 'new' signs (#20792)
FluffiestFloof Oct 6, 2023
86f1a08
add (#20781)
UbaserB Oct 6, 2023
a5cd349
Automatic changelog update
PJBot Oct 6, 2023
1f26f01
bagel update (#20795)
Emisse Oct 6, 2023
5a84dad
New Signs to Packed (#20796)
JustCone14 Oct 6, 2023
eb17976
Lizard "Rework" (#20328)
LankLTE Oct 6, 2023
b9a3821
Automatic changelog update
PJBot Oct 6, 2023
c8e1482
Fix opening wire panels without WiresPanelSecurityComponent (#20798)
chromiumboy Oct 6, 2023
ec6561a
Automatic changelog update
PJBot Oct 6, 2023
df07176
Liquid anomaly (#20626)
TheShuEd Oct 7, 2023
edf3505
Automatic changelog update
PJBot Oct 7, 2023
0d9b6a7
make tinned foods use openable (#19884)
deltanedas Oct 7, 2023
9949469
Change ThrownItemComponent to be removed after flytime (#20700)
DrSmugleaf Oct 7, 2023
a4d1ab2
Automatic changelog update
PJBot Oct 7, 2023
0e46fa7
To weld the secret door (#20707)
Nimfar11 Oct 7, 2023
428de31
Automatic changelog update
PJBot Oct 7, 2023
95a87a1
Add mob retaliation (#19901)
EmoGarbage404 Oct 7, 2023
43dd73f
Automatic changelog update
PJBot Oct 7, 2023
e9ceacd
Misc mind tweaks and fixes (#20614)
ElectroJr Oct 7, 2023
7923212
Add test to load all config presets (#20705)
DrSmugleaf Oct 7, 2023
62e493f
Spiders inject toxin (#19497)
HerCoyote23 Oct 7, 2023
c5ea352
Automatic changelog update
PJBot Oct 7, 2023
94ee8ce
Tag tinned peaches and meat with Fruit and Meat, respectively (#20814)
arimah Oct 7, 2023
45d2375
Fix action-granting items not being predicted (#20778)
ElectroJr Oct 7, 2023
a952667
Fix sleeping action not working (#20813)
DrSmugleaf Oct 7, 2023
46aac0b
Automatic changelog update
PJBot Oct 7, 2023
219cb3a
Tweaked secret weights (#20807)
JoeHammad1844 Oct 7, 2023
94ab9d1
Automatic changelog update
PJBot Oct 7, 2023
f2b26e8
Give player species slight passive regen (#20638)
LankLTE Oct 7, 2023
50201da
Automatic changelog update
PJBot Oct 7, 2023
a372cba
Wow kudzu is back! (#20822)
EmoGarbage404 Oct 7, 2023
cd10208
Kettle update (#20808)
TsjipTsjip Oct 7, 2023
37bcd03
Automatic changelog update
PJBot Oct 7, 2023
549a7fe
DamageableSystem cleanup & performance improvements (#20820)
ElectroJr Oct 8, 2023
83f5481
Changes for SplitContainer Engine PR (#20383)
ElectroJr Oct 8, 2023
5f7a8ac
Update engine to v165.0.0 (#20837)
ElectroJr Oct 8, 2023
071e830
fix: Incendiary bullets no longer deal cold, acid, or shock damage th…
kerisargit Oct 8, 2023
fd1b9ce
Merge remote-tracking branch 'upstream/master' into merge-master-08/10
DebugOk Oct 8, 2023
e7e700d
Resolve GladiatorGear conflict
DebugOk Oct 8, 2023
97f9a81
Update meal_recipes.yml
DebugOk Oct 8, 2023
a34cf8c
Update edge.yml
DebugOk Oct 8, 2023
500c515
Update lathe.yml
DebugOk Oct 9, 2023
f940115
Update barratry.yml
Colin-Tel Oct 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions Content.Client/Antag/AntagStatusIconSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Robust.Shared.Prototypes;
using Content.Shared.Ghost;
using Robust.Client.Player;

namespace Content.Client.Antag;

/// <summary>
/// Used for assigning specified icons for antags.
/// </summary>
public abstract class AntagStatusIconSystem<T> : SharedStatusIconSystem
where T : Component
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IPlayerManager _player = default!;

/// <summary>
/// Will check if the local player has the same component as the one who called it and give the status icon.
/// </summary>
/// <param name="antagStatusIcon">The status icon that your antag uses</param>
/// <param name="args">The GetStatusIcon event.</param>
protected virtual void GetStatusIcon(string antagStatusIcon, ref GetStatusIconsEvent args)
{
var ent = _player.LocalPlayer?.ControlledEntity;

if (!HasComp<T>(ent) && !HasComp<GhostComponent>(ent))
return;

args.StatusIcons.Add(_prototype.Index<StatusIconPrototype>(antagStatusIcon));
}
}
2 changes: 1 addition & 1 deletion Content.Client/Popups/PopupSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ public override void PopupEntity(string message, EntityUid uid, Filter filter, b
public override void PopupClient(string message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small)
{
if (_timing.IsFirstTimePredicted)
PopupEntity(message, uid, recipient);
PopupEntity(message, uid, recipient, type);
}

public override void PopupEntity(string message, EntityUid uid, PopupType type = PopupType.Small)
Expand Down
35 changes: 35 additions & 0 deletions Content.Client/Revolutionary/RevolutionarySystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using Content.Shared.Revolutionary.Components;
using Content.Client.Antag;
using Content.Shared.StatusIcon.Components;

namespace Content.Client.Revolutionary;

/// <summary>
/// Used for the client to get status icons from other revs.
/// </summary>
public sealed class RevolutionarySystem : AntagStatusIconSystem<RevolutionaryComponent>
{
public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<RevolutionaryComponent, GetStatusIconsEvent>(GetRevIcon);
SubscribeLocalEvent<HeadRevolutionaryComponent, GetStatusIconsEvent>(GetHeadRevIcon);
}

/// <summary>
/// Checks if the person who triggers the GetStatusIcon event is also a Rev or a HeadRev.
/// </summary>
private void GetRevIcon(EntityUid uid, RevolutionaryComponent comp, ref GetStatusIconsEvent args)
{
if (!HasComp<HeadRevolutionaryComponent>(uid))
{
GetStatusIcon(comp.RevStatusIcon, ref args);
}
}

private void GetHeadRevIcon(EntityUid uid, HeadRevolutionaryComponent comp, ref GetStatusIconsEvent args)
{
GetStatusIcon(comp.HeadRevStatusIcon, ref args);
}
}
8 changes: 8 additions & 0 deletions Content.Client/Sericulture/SericultureSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Content.Shared.Sericulture;

namespace Content.Client.Sericulture;

/// <summary>
/// <inheritdoc/>
/// </summary>
public sealed partial class SericultureSystem : SharedSericultureSystem { }
24 changes: 0 additions & 24 deletions Content.Client/UserInterface/Controls/RecordedSplitContainer.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using System.Numerics;
using Robust.Client.UserInterface;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Input;

namespace Content.Client.UserInterface.Controls;

Expand All @@ -10,8 +8,6 @@ namespace Content.Client.UserInterface.Controls;
/// </summary>
public sealed class RecordedSplitContainer : SplitContainer
{
public Action<Vector2, Vector2>? OnSplitResizeFinish;

public double? DesiredSplitCenter;

protected override Vector2 ArrangeOverride(Vector2 finalSize)
Expand All @@ -30,24 +26,4 @@ protected override Vector2 ArrangeOverride(Vector2 finalSize)

return base.ArrangeOverride(finalSize);
}

protected override void KeyBindUp(GUIBoundKeyEventArgs args)
{
base.KeyBindUp(args);

if (args.Function != EngineKeyFunctions.UIClick)
{
return;
}

if (ChildCount != 2)
{
return;
}

var first = GetChild(0);
var second = GetChild(1);

OnSplitResizeFinish?.Invoke(first.Size, second.Size);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public SeparatedChatGameScreen()
SetAnchorAndMarginPreset(Hotbar, LayoutPreset.BottomWide, margin: 5);
SetAnchorAndMarginPreset(Alerts, LayoutPreset.CenterRight, margin: 10);

ScreenContainer.OnSplitResizeFinish += (first, second) =>
ScreenContainer.OnSplitResizeFinished += () =>
OnChatResized?.Invoke(new Vector2(ScreenContainer.SplitFraction, 0));
}

Expand Down
15 changes: 4 additions & 11 deletions Content.Client/Zombies/ZombieSystem.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
using System.Linq;
using System.Linq;
using Content.Client.Antag;
using Content.Shared.Humanoid;
using Content.Shared.StatusIcon;
using Content.Shared.StatusIcon.Components;
using Content.Shared.Zombies;
using Robust.Client.GameObjects;
using Robust.Client.Player;
using Robust.Shared.Prototypes;

namespace Content.Client.Zombies;

public sealed class ZombieSystem : SharedZombieSystem
public sealed class ZombieSystem : AntagStatusIconSystem<ZombieComponent>
{
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] private readonly IPrototypeManager _prototype = default!;

public override void Initialize()
{
Expand All @@ -38,9 +34,6 @@ private void OnStartup(EntityUid uid, ZombieComponent component, ComponentStartu

private void OnGetStatusIcon(EntityUid uid, ZombieComponent component, ref GetStatusIconsEvent args)
{
if (!HasComp<ZombieComponent>(_player.LocalPlayer?.ControlledEntity))
return;

args.StatusIcons.Add(_prototype.Index<StatusIconPrototype>(component.ZombieStatusIcon));
GetStatusIcon(component.ZombieStatusIcon, ref args);
}
}
8 changes: 8 additions & 0 deletions Content.IntegrationTests/Pair/TestPair.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
#nullable enable
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Content.Server.GameTicking;
using Content.Server.Players;
using Content.Shared.Mind;
using Content.Shared.Players;
using Robust.Server.Player;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Network;
Expand All @@ -25,6 +30,9 @@ public sealed partial class TestPair
public RobustIntegrationTest.ServerIntegrationInstance Server { get; private set; } = default!;
public RobustIntegrationTest.ClientIntegrationInstance Client { get; private set; } = default!;

public IPlayerSession? Player => (IPlayerSession?) Server.PlayerMan.Sessions.FirstOrDefault();
public PlayerData? PlayerData => Player?.Data.ContentData();

public PoolTestLogHandler ServerLogHandler { get; private set; } = default!;
public PoolTestLogHandler ClientLogHandler { get; private set; } = default!;

Expand Down
71 changes: 71 additions & 0 deletions Content.IntegrationTests/Tests/ConfigPresetTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using System.Collections.Generic;
using System.IO;
using Content.Server.Entry;
using Robust.Shared.Configuration;
using Robust.Shared.ContentPack;

namespace Content.IntegrationTests.Tests;

[TestFixture]
public sealed class ConfigPresetTests
{
[Test]
public async Task TestLoadAll()
{
var pair = await PoolManager.GetServerClient();
var server = pair.Server;

var resources = server.ResolveDependency<IResourceManager>();
var config = server.ResolveDependency<IConfigurationManager>();

await server.WaitPost(() =>
{
var originalCVars = new List<(string, object)>();
foreach (var cvar in config.GetRegisteredCVars())
{
var value = config.GetCVar<object>(cvar);
originalCVars.Add((cvar, value));
}

var originalCvarsStream = new MemoryStream();
config.SaveToTomlStream(originalCvarsStream, config.GetRegisteredCVars());
originalCvarsStream.Position = 0;

var presets = resources.ContentFindFiles(EntryPoint.ConfigPresetsDir);
Assert.Multiple(() =>
{
foreach (var preset in presets)
{
var stream = resources.ContentFileRead(preset);
Assert.DoesNotThrow(() => config.LoadDefaultsFromTomlStream(stream));
}
});

config.LoadDefaultsFromTomlStream(originalCvarsStream);

foreach (var originalCVar in originalCVars)
{
var (name, originalValue) = originalCVar;
var newValue = config.GetCVar<object>(name);
var originalValueType = originalValue.GetType();
var newValueType = newValue.GetType();
if (originalValueType.IsEnum || newValueType.IsEnum)
{
originalValue = Enum.ToObject(originalValueType, originalValue);
newValue = Enum.ToObject(originalValueType, newValue);
}

if (originalValueType == typeof(float) || newValueType == typeof(float))
{
originalValue = Convert.ToSingle(originalValue);
newValue = Convert.ToSingle(newValue);
}

if (!Equals(newValue, originalValue))
Assert.Fail($"CVar {name} was not reset to its original value.");
}
});

await pair.CleanReturnAsync();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#nullable enable
using Robust.Shared.Console;
using Robust.Shared.Map;

namespace Content.IntegrationTests.Tests.Minds;

[TestFixture]
public sealed partial class MindTests
{
[Test]
public async Task DeleteAllThenGhost()
{
var settings = new PoolSettings
{
Dirty = true,
DummyTicker = false,
Connected = true
};
await using var pair = await PoolManager.GetServerClient(settings);

// Client is connected with a valid entity & mind
Assert.That(pair.Client.EntMan.EntityExists(pair.Client.Player?.ControlledEntity));
Assert.That(pair.Server.EntMan.EntityExists(pair.PlayerData?.Mind));

// Delete **everything**
var conHost = pair.Server.ResolveDependency<IConsoleHost>();
await pair.Server.WaitPost(() => conHost.ExecuteCommand("entities delete"));
await pair.RunTicksSync(5);

Assert.That(pair.Server.EntMan.EntityCount, Is.EqualTo(0));
Assert.That(pair.Client.EntMan.EntityCount, Is.EqualTo(0));

// Create a new map.
int mapId = 1;
await pair.Server.WaitPost(() => conHost.ExecuteCommand($"addmap {mapId}"));
await pair.RunTicksSync(5);

// Client is not attached to anything
Assert.Null(pair.Client.Player?.ControlledEntity);
Assert.Null(pair.PlayerData?.Mind);

// Attempt to ghost
var cConHost = pair.Client.ResolveDependency<IConsoleHost>();
await pair.Client.WaitPost(() => cConHost.ExecuteCommand("ghost"));
await pair.RunTicksSync(10);

// Client should be attached to a ghost placed on the new map.
Assert.That(pair.Client.EntMan.EntityExists(pair.Client.Player?.ControlledEntity));
Assert.That(pair.Server.EntMan.EntityExists(pair.PlayerData?.Mind));
var xform = pair.Client.Transform(pair.Client.Player!.ControlledEntity!.Value);
Assert.That(xform.MapID, Is.EqualTo(new MapId(mapId)));

await pair.CleanReturnAsync();
}
}
22 changes: 22 additions & 0 deletions Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules;
using Content.Server.Zombies;
using Content.Shared.Administration;
Expand All @@ -8,6 +9,8 @@
using Content.Shared.Verbs;
using Robust.Server.GameObjects;
using Robust.Shared.Utility;
using Content.Server.GameTicking.Rules.Components;
using System.Linq;

namespace Content.Server.Administration.Systems;

Expand All @@ -17,7 +20,9 @@ public sealed partial class AdminVerbSystem
[Dependency] private readonly TraitorRuleSystem _traitorRule = default!;
[Dependency] private readonly NukeopsRuleSystem _nukeopsRule = default!;
[Dependency] private readonly PiratesRuleSystem _piratesRule = default!;
[Dependency] private readonly RevolutionaryRuleSystem _revolutionaryRule = default!;
[Dependency] private readonly SharedMindSystem _minds = default!;
[Dependency] private readonly GameTicker _gameTicker = default!;

// All antag verbs have names so invokeverb works.
private void AddAntagVerbs(GetVerbsEvent<Verb> args)
Expand Down Expand Up @@ -100,5 +105,22 @@ private void AddAntagVerbs(GetVerbsEvent<Verb> args)
Message = Loc.GetString("admin-verb-make-pirate"),
};
args.Verbs.Add(pirate);

//todo come here at some point dear lort.
Verb headRev = new()
{
Text = Loc.GetString("admin-verb-text-make-head-rev"),
Category = VerbCategory.Antag,
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/Misc/job_icons.rsi/HeadRevolutionary.png")),
Act = () =>
{
if (!_minds.TryGetMind(args.Target, out var mindId, out var mind))
return;
_revolutionaryRule.OnHeadRevAdmin(mindId, mind);
},
Impact = LogImpact.High,
Message = Loc.GetString("admin-verb-make-head-rev"),
};
args.Verbs.Add(headRev);
}
}
Loading