From 17b20aafdf07ea0df82fc58d6d2c1a9584ff7fcf Mon Sep 17 00:00:00 2001 From: VigersRay Date: Thu, 13 Jun 2024 16:31:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B3=D0=BE=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B7=D0=BB=D0=BE=D0=B3=D0=BE=20=D0=B4?= =?UTF-8?q?=D0=B2=D0=BE=D0=B9=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_Sunrise/EvilTwin/EvilTwinSystem.cs | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/Content.Server/_Sunrise/EvilTwin/EvilTwinSystem.cs b/Content.Server/_Sunrise/EvilTwin/EvilTwinSystem.cs index bf3530e4ce..c1102e0f69 100644 --- a/Content.Server/_Sunrise/EvilTwin/EvilTwinSystem.cs +++ b/Content.Server/_Sunrise/EvilTwin/EvilTwinSystem.cs @@ -1,6 +1,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Server.DetailExaminable; +using Content.Server.Forensics; using Content.Server.GameTicking; using Content.Server.Humanoid; using Content.Server.Jobs; @@ -11,11 +12,13 @@ using Content.Server.Preferences.Managers; using Content.Server.Roles; using Content.Server.Roles.Jobs; using Content.Server.Station.Systems; +using Content.Shared.Clothing; using Content.Shared.Humanoid; using Content.Shared.Mind.Components; using Content.Shared.Objectives.Components; using Content.Shared.Objectives.Systems; using Content.Shared.Preferences; +using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; using Robust.Shared.Map; using Robust.Shared.Player; @@ -38,6 +41,8 @@ public sealed class EvilTwinSystem : EntitySystem [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; [Dependency] private readonly TargetObjectiveSystem _target = default!; [Dependency] private readonly SharedObjectivesSystem _objectives = default!; + [Dependency] private readonly LoadoutSystem _loadoutSystem = default!; + [ValidatePrototypeId] private const string EvilTwinRole = "EvilTwin"; @@ -49,8 +54,8 @@ public sealed class EvilTwinSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent<_Sunrise.EvilTwin.EvilTwinSpawnerComponent, PlayerAttachedEvent>(OnPlayerAttached); - SubscribeLocalEvent<_Sunrise.EvilTwin.EvilTwinComponent, MindAddedMessage>(OnMindAdded); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnMindAdded); SubscribeLocalEvent(OnRoundEnd); } @@ -70,9 +75,9 @@ public sealed class EvilTwinSystem : EntitySystem } } - private void OnMindAdded(EntityUid uid, _Sunrise.EvilTwin.EvilTwinComponent component, MindAddedMessage args) + private void OnMindAdded(EntityUid uid, EvilTwinComponent component, MindAddedMessage args) { - if (!TryComp<_Sunrise.EvilTwin.EvilTwinComponent>(uid, out var evilTwin) || + if (!TryComp(uid, out var evilTwin) || !_mindSystem.TryGetMind(uid, out var mindId, out var mind)) return; @@ -89,13 +94,13 @@ public sealed class EvilTwinSystem : EntitySystem private void OnRoundEnd(RoundEndTextAppendEvent ev) { - var twinsCount = EntityQuery<_Sunrise.EvilTwin.EvilTwinComponent>().Count(); + var twinsCount = EntityQuery().Count(); if (twinsCount == 0) return; var result = Loc.GetString("evil-twin-round-end-result", ("evil-twin-count", twinsCount)); - var query = EntityQueryEnumerator<_Sunrise.EvilTwin.EvilTwinComponent>(); + var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var twin)) { if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) @@ -218,6 +223,22 @@ public sealed class EvilTwinSystem : EntitySystem if (_jobSystem.MindTryGetJob(mindId, out _, out var jobProto) && jobProto.StartingGear != null) { + var jobLoadout = LoadoutSystem.GetJobPrototype(jobProto.ID); + + if (_prototype.TryIndex(jobLoadout, out RoleLoadoutPrototype? roleProto)) + { + pref.Loadouts.TryGetValue(jobLoadout, out var loadout); + + // Set to default if not present + if (loadout == null) + { + loadout = new RoleLoadout(jobLoadout); + loadout.SetDefault(_prototype); + } + + _stationSpawning.EquipRoleLoadout(twinUid, loadout, roleProto); + } + if (_prototype.TryIndex(jobProto.StartingGear, out var gear)) { _stationSpawning.EquipStartingGear(twinUid, gear); @@ -231,7 +252,13 @@ public sealed class EvilTwinSystem : EntitySystem } } - EnsureComp<_Sunrise.EvilTwin.EvilTwinComponent>(twinUid).TargetMindId = mindId; + if (TryComp(target, out var dnaComponent)) + { + var dna = EnsureComp(twinUid); + dna.DNA = dnaComponent.DNA; + } + + EnsureComp(twinUid).TargetMindId = mindId; return twinUid; }