From 560d78176ce47db9947b95bd2f800e271854371e Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 25 Feb 2026 20:45:49 +0500 Subject: [PATCH] =?UTF-8?q?QoL=20=D0=B3=D0=BE=D0=B2=D0=BD=D0=BE=20=D0=B8?= =?UTF-8?q?=20=D1=82=D0=B8=D0=BF=D0=B0=20=D1=82=D0=BE=D0=B3=D0=BE,=20?= =?UTF-8?q?=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=BA=D0=B8=20=D0=B2=20Razor,=20Paint=D0=B5=20?= =?UTF-8?q?=D0=B8=20Sharpening.=20=D0=98=20=D0=B5=D1=89=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B7=D0=B1=D0=BE=D1=80=20=D0=BF=D1=80=D0=B8=D1=87=D0=B8?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B2=20ghostkicke=20=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D0=B4=D0=B0=D1=87=D1=83.=20By=20rechka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Content.Server/GhostKick/GhostKickManager.cs | 8 +- Content.Server/_Sunrise/Paint/PaintSystem.cs | 108 +++++++------- Content.Server/_Sunrise/Razor/RazorSystem.cs | 141 +++++++----------- .../SharpeningSystem/SharpeningSystem.cs | 41 +++-- 4 files changed, 142 insertions(+), 156 deletions(-) diff --git a/Content.Server/GhostKick/GhostKickManager.cs b/Content.Server/GhostKick/GhostKickManager.cs index 61d8cf9b32..eade2678cc 100644 --- a/Content.Server/GhostKick/GhostKickManager.cs +++ b/Content.Server/GhostKick/GhostKickManager.cs @@ -56,16 +56,18 @@ public sealed class GhostKickCommand : LocalizedEntityCommands { if (args.Length < 1) { - shell.WriteError(Loc.GetString($"shell-need-exactly-one-argument")); + shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); return; } var playerName = args[0]; - var reason = args.Length > 1 ? args[1] : Loc.GetString($"cmd-ghostkick-default-reason"); + var reason = args.Length > 1 + ? string.Join(' ', args[1..]) + : Loc.GetString("cmd-ghostkick-default-reason"); if (!_playerManager.TryGetSessionByUsername(playerName, out var player)) { - shell.WriteError(Loc.GetString($"shell-target-player-does-not-exist")); + shell.WriteError(Loc.GetString("shell-target-player-does-not-exist")); return; } diff --git a/Content.Server/_Sunrise/Paint/PaintSystem.cs b/Content.Server/_Sunrise/Paint/PaintSystem.cs index 49659568e0..e71a69f3bf 100644 --- a/Content.Server/_Sunrise/Paint/PaintSystem.cs +++ b/Content.Server/_Sunrise/Paint/PaintSystem.cs @@ -46,7 +46,7 @@ public sealed class PaintSystem : SharedPaintSystem if (args.Target is not { Valid: true } target) return; - PrepPaint(uid, component, target, args.User); + TryStartPaint(uid, component, target, args.User); } private void OnPaintVerb(EntityUid uid, PaintComponent component, GetVerbsEvent args) @@ -60,7 +60,7 @@ public sealed class PaintSystem : SharedPaintSystem { Act = () => { - PrepPaint(uid, component, args.Target, args.User); + TryStartPaint(uid, component, args.Target, args.User); }, Text = paintText, @@ -68,7 +68,8 @@ public sealed class PaintSystem : SharedPaintSystem }; args.Verbs.Add(verb); } - private void PrepPaint(EntityUid uid, PaintComponent component, EntityUid target, EntityUid user) + + private void TryStartPaint(EntityUid uid, PaintComponent component, EntityUid target, EntityUid user) { var doAfterEventArgs = new DoAfterArgs(EntityManager, user, component.Delay, new PaintDoAfterEvent(), uid, target: target, used: uid) @@ -79,8 +80,7 @@ public sealed class PaintSystem : SharedPaintSystem BreakOnHandChange = true }; - if (!_doAfterSystem.TryStartDoAfter(doAfterEventArgs)) - return; + _doAfterSystem.TryStartDoAfter(doAfterEventArgs); } private void OnPaint(Entity entity, ref PaintDoAfterEvent args) @@ -106,63 +106,60 @@ public sealed class PaintSystem : SharedPaintSystem return; } - if (entity.Comp.Blacklist != null && _whitelist.IsValid(entity.Comp.Blacklist, target) || HasComp(target) || HasComp(target)) + if ((entity.Comp.Blacklist != null && _whitelist.IsValid(entity.Comp.Blacklist, target)) || + HasComp(target) || + HasComp(target)) { _popup.PopupEntity(Loc.GetString("paint-failure", ("target", args.Target)), args.User, args.User, PopupType.Medium); return; } - - if (TryPaint(entity, target)) - { - EnsureComp(target, out SprayPaintedComponent? paint); - EnsureComp(target); - - paint.Color = entity.Comp.Color; // set the target color to the color specified in the spray paint yml. - _audio.PlayPvs(entity.Comp.Spray, entity); - paint.Enabled = true; - - if (HasComp(target)) // Paint any clothing the target is wearing. - { - if (_inventory.TryGetSlots(target, out var slotDefinitions)) - { - foreach (var slot in slotDefinitions) - { - if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt)) - continue; - - if (slotEnt == null) - return; - - if (HasComp(slotEnt.Value) || entity.Comp.Blacklist != null && - _whitelist.IsValid(entity.Comp.Blacklist, - slotEnt.Value) - || HasComp(slotEnt.Value) || - HasComp( - slotEnt.Value)) - return; - - EnsureComp(slotEnt.Value, out SprayPaintedComponent? slotpaint); - EnsureComp(slotEnt.Value); - slotpaint.Color = entity.Comp.Color; - _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); - Dirty(slotEnt.Value, slotpaint); - } - } - } - - _popup.PopupEntity(Loc.GetString("paint-success", ("target", args.Target)), args.User, args.User, PopupType.Medium); - _appearanceSystem.SetData(target, PaintVisuals.Painted, true); - Dirty(target, paint); - args.Handled = true; - return; - } - if (!TryPaint(entity, target)) { _popup.PopupEntity(Loc.GetString("paint-empty", ("used", args.Used)), args.User, args.User, PopupType.Medium); return; } + + EnsureComp(target, out SprayPaintedComponent? paint); + EnsureComp(target); + + paint.Color = entity.Comp.Color; // set the target color to the color specified in the spray paint yml. + _audio.PlayPvs(entity.Comp.Spray, entity); + paint.Enabled = true; + + if (HasComp(target)) // Paint any clothing the target is wearing. + { + if (_inventory.TryGetSlots(target, out var slotDefinitions)) + { + foreach (var slot in slotDefinitions) + { + if (!_inventory.TryGetSlotEntity(target, slot.Name, out var slotEnt) || + slotEnt == null) + { + continue; + } + + if (HasComp(slotEnt.Value) || + (entity.Comp.Blacklist != null && _whitelist.IsValid(entity.Comp.Blacklist, slotEnt.Value)) || + HasComp(slotEnt.Value) || + HasComp(slotEnt.Value)) + { + continue; + } + + EnsureComp(slotEnt.Value, out SprayPaintedComponent? slotpaint); + EnsureComp(slotEnt.Value); + slotpaint.Color = entity.Comp.Color; + _appearanceSystem.SetData(slotEnt.Value, PaintVisuals.Painted, true); + Dirty(slotEnt.Value, slotpaint); + } + } + } + + _popup.PopupEntity(Loc.GetString("paint-success", ("target", args.Target)), args.User, args.User, PopupType.Medium); + _appearanceSystem.SetData(target, PaintVisuals.Painted, true); + Dirty(target, paint); + args.Handled = true; } private bool TryPaint(Entity reagent, EntityUid target) @@ -173,12 +170,9 @@ public sealed class PaintSystem : SharedPaintSystem if (_solutionContainer.TryGetSolution(reagent.Owner, reagent.Comp.Solution, out _, out var solution)) { var quantity = solution.RemoveReagent(reagent.Comp.Reagent, reagent.Comp.ConsumptionUnit); - if (quantity > 0)// checks quantity of solution is more than 0. - return true; - - if (quantity < 1) - return false; + return quantity > 0; // checks quantity of solution is more than 0. } + return false; } } diff --git a/Content.Server/_Sunrise/Razor/RazorSystem.cs b/Content.Server/_Sunrise/Razor/RazorSystem.cs index 7b5113d6d3..90e1943b67 100644 --- a/Content.Server/_Sunrise/Razor/RazorSystem.cs +++ b/Content.Server/_Sunrise/Razor/RazorSystem.cs @@ -9,7 +9,6 @@ using Content.Shared.Humanoid; using Content.Shared.Humanoid.Markings; using Content.Shared.Interaction; using Content.Shared._Sunrise.Razor; -using Robust.Packaging.AssetProcessing; using Robust.Shared.Audio.Systems; using Robust.Shared.Prototypes; @@ -17,6 +16,8 @@ namespace Content.Server._Sunrise.Razor; public sealed class RazorSystem : SharedRazorSystem { + private const string BarberChairPrototype = "ChairBarber"; + [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly MarkingManager _markings = default!; @@ -46,8 +47,7 @@ public sealed class RazorSystem : SharedRazorSystem if (component.Target is not { } target) return; - _doAfterSystem.Cancel(component.DoAfter); - component.DoAfter = null; + CancelCurrentDoAfter(component); var doAfter = new RazorSelectDoAfterEvent() { @@ -56,16 +56,7 @@ public sealed class RazorSystem : SharedRazorSystem Marking = message.Marking, }; - var time = component.AddSlotTime; - if (TryComp(component.Target, out var buckleComponent)) - { - if (buckleComponent.BuckledTo != null) - { - var proto = Prototype(buckleComponent.BuckledTo.Value); - if (proto is { ID: "ChairBarber" }) - time *= 0.5f; - } - } + var time = GetDoAfterTime(target, component.SelectSlotTime); _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, time, doAfter, uid, target: target, used: uid) { @@ -83,25 +74,16 @@ public sealed class RazorSystem : SharedRazorSystem private void OnSelectSlotDoAfter(EntityUid uid, RazorComponent component, RazorSelectDoAfterEvent args) { + component.DoAfter = null; + if (args.Handled || args.Target == null || args.Cancelled) return; if (component.Target != args.Target) return; - MarkingCategories category; - - switch (args.Category) - { - case RazorCategory.Hair: - category = MarkingCategories.Hair; - break; - case RazorCategory.FacialHair: - category = MarkingCategories.FacialHair; - break; - default: - return; - } + if (!TryGetMarkingCategory(args.Category, out var category)) + return; _humanoid.SetMarkingId(component.Target.Value, category, args.Slot, args.Marking); @@ -113,8 +95,7 @@ public sealed class RazorSystem : SharedRazorSystem if (component.Target is not { } target) return; - _doAfterSystem.Cancel(component.DoAfter); - component.DoAfter = null; + CancelCurrentDoAfter(component); var doAfter = new RazorRemoveSlotDoAfterEvent() { @@ -122,18 +103,7 @@ public sealed class RazorSystem : SharedRazorSystem Slot = message.Slot, }; - var time = component.AddSlotTime; - - Log.Debug($"id: {component.Target}"); - if (TryComp(component.Target, out var buckleComponent)) - { - if (buckleComponent.BuckledTo != null) - { - var proto = Prototype(buckleComponent.BuckledTo.Value); - if (proto is { ID: "ChairBarber" }) - time *= 0.5f; - } - } + var time = GetDoAfterTime(target, component.RemoveSlotTime); _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, time, doAfter, uid, target: target, used: uid) { @@ -150,25 +120,16 @@ public sealed class RazorSystem : SharedRazorSystem private void OnRemoveSlotDoAfter(EntityUid uid, RazorComponent component, RazorRemoveSlotDoAfterEvent args) { + component.DoAfter = null; + if (args.Handled || args.Target == null || args.Cancelled) return; if (component.Target != args.Target) return; - MarkingCategories category; - - switch (args.Category) - { - case RazorCategory.Hair: - category = MarkingCategories.Hair; - break; - case RazorCategory.FacialHair: - category = MarkingCategories.FacialHair; - break; - default: - return; - } + if (!TryGetMarkingCategory(args.Category, out var category)) + return; _humanoid.RemoveMarking(component.Target.Value, category, args.Slot); @@ -180,26 +141,14 @@ public sealed class RazorSystem : SharedRazorSystem if (component.Target == null) return; - _doAfterSystem.Cancel(component.DoAfter); - component.DoAfter = null; + CancelCurrentDoAfter(component); var doAfter = new RazorAddSlotDoAfterEvent() { Category = message.Category, }; - var time = component.AddSlotTime; - - Log.Debug($"id: {component.Target}"); - if (TryComp(component.Target, out var buckleComponent)) - { - if (buckleComponent.BuckledTo != null) - { - var proto = Prototype(buckleComponent.BuckledTo.Value); - if (proto is { ID: "ChairBarber" }) - time *= 0.5f; - } - } + var time = GetDoAfterTime(component.Target.Value, component.AddSlotTime); _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, message.Actor, time, doAfter, uid, target: component.Target.Value, used: uid) { @@ -215,31 +164,23 @@ public sealed class RazorSystem : SharedRazorSystem } private void OnAddSlotDoAfter(EntityUid uid, RazorComponent component, RazorAddSlotDoAfterEvent args) { - if (args.Handled || args.Target == null || args.Cancelled || !TryComp(component.Target, out HumanoidAppearanceComponent? humanoid)) + component.DoAfter = null; + + if (args.Handled || args.Target == null || args.Cancelled || component.Target != args.Target) return; - MarkingCategories category; - - switch (args.Category) - { - case RazorCategory.Hair: - category = MarkingCategories.Hair; - break; - case RazorCategory.FacialHair: - category = MarkingCategories.FacialHair; - break; - default: - return; - } + if (!TryGetMarkingCategory(args.Category, out var category) || + !TryComp(args.Target.Value, out var humanoid)) + return; var marking = _markings.MarkingsByCategoryAndSpecies(category, humanoid.Species).Keys.FirstOrDefault(); if (string.IsNullOrEmpty(marking)) return; - _humanoid.AddMarking(component.Target.Value, marking, Color.Black); + _humanoid.AddMarking(args.Target.Value, marking, Color.Black); - UpdateInterface(uid, component.Target.Value, component); + UpdateInterface(uid, args.Target.Value, component); } @@ -248,4 +189,38 @@ public sealed class RazorSystem : SharedRazorSystem ent.Comp.Target = null; Dirty(ent); } + + private void CancelCurrentDoAfter(RazorComponent component) + { + _doAfterSystem.Cancel(component.DoAfter); + component.DoAfter = null; + } + + private TimeSpan GetDoAfterTime(EntityUid target, TimeSpan baseTime) + { + if (!TryComp(target, out var buckleComponent) || + buckleComponent.BuckledTo == null) + { + return baseTime; + } + + var proto = Prototype(buckleComponent.BuckledTo.Value); + return proto is { ID: BarberChairPrototype } ? baseTime * 0.5f : baseTime; + } + + private static bool TryGetMarkingCategory(RazorCategory category, out MarkingCategories markingCategory) + { + switch (category) + { + case RazorCategory.Hair: + markingCategory = MarkingCategories.Hair; + return true; + case RazorCategory.FacialHair: + markingCategory = MarkingCategories.FacialHair; + return true; + default: + markingCategory = default; + return false; + } + } } diff --git a/Content.Server/_Sunrise/SharpeningSystem/SharpeningSystem.cs b/Content.Server/_Sunrise/SharpeningSystem/SharpeningSystem.cs index 638fa33d8a..b0ab26aa89 100644 --- a/Content.Server/_Sunrise/SharpeningSystem/SharpeningSystem.cs +++ b/Content.Server/_Sunrise/SharpeningSystem/SharpeningSystem.cs @@ -3,13 +3,16 @@ using Content.Shared.Interaction; using Content.Shared.Item; using Content.Shared.Popups; using Content.Shared.Weapons.Melee; -using Content.Shared.Weapons.Melee.Events; using Content.Shared.Damage; +using Content.Shared.Weapons.Melee.Events; namespace Content.Server._Sunrise.SharpeningSystem; public sealed class SharpeningSystem : EntitySystem { + private const string SlashDamageType = "Slash"; + private const string PiercingDamageType = "Piercing"; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; @@ -17,12 +20,12 @@ public sealed class SharpeningSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnSharping); + SubscribeLocalEvent(OnSharpening); SubscribeLocalEvent(OnMeleeHit); } - private void OnSharping(EntityUid uid, SharpenerComponent component, AfterInteractEvent args) + private void OnSharpening(EntityUid uid, SharpenerComponent component, AfterInteractEvent args) { if (!args.Target.HasValue) return; @@ -40,8 +43,7 @@ public sealed class SharpeningSystem : EntitySystem _popupSystem.PopupEntity(Loc.GetString("sharpening-failed"), target, args.User); return; } - /// Sunrise - Edit - if (!meleeWeaponComponent.Damage.DamageDict.ContainsKey("Slash") && !meleeWeaponComponent.Damage.DamageDict.ContainsKey("Piercing")) + if (!TryGetDamageBonus(component, meleeWeaponComponent, out var damageBonus)) { _popupSystem.PopupEntity(Loc.GetString("sharpening-failed-blade"), target, args.User); return; @@ -59,14 +61,6 @@ public sealed class SharpeningSystem : EntitySystem return; } - /// Sunrise - Edit - var damageBonus = new DamageSpecifier(); - - if (meleeWeaponComponent.Damage.DamageDict.ContainsKey("Piercing")) - damageBonus = component.PiercingDamageBonus; - else if (meleeWeaponComponent.Damage.DamageDict.ContainsKey("Slash")) - damageBonus = component.SlashDamageBonus; - EnsureComp(target).DamageBonus = damageBonus; component.Usages -= 1; @@ -96,4 +90,25 @@ public sealed class SharpeningSystem : EntitySystem _popupSystem.PopupEntity(Loc.GetString("sharpening-removed"), uid, args.User); RemCompDeferred(uid); } + + private static bool TryGetDamageBonus( + SharpenerComponent sharpener, + MeleeWeaponComponent meleeWeapon, + out DamageSpecifier damageBonus) + { + if (meleeWeapon.Damage.DamageDict.ContainsKey(PiercingDamageType)) + { + damageBonus = sharpener.PiercingDamageBonus; + return true; + } + + if (meleeWeapon.Damage.DamageDict.ContainsKey(SlashDamageType)) + { + damageBonus = sharpener.SlashDamageBonus; + return true; + } + + damageBonus = default!; + return false; + } }