From c719bf36ed51b962089d5fb719b3a1220d5b5149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Schr=C3=B6dinger?= <132720404+Schrodinger71@users.noreply.github.com> Date: Wed, 30 Oct 2024 23:22:54 +0000 Subject: [PATCH] New component (#713) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Описание PR Добавлен новый компонент "HideGhostWarpComponent". ## Причины изменения Данный компонент предотвращает возможность призраков (гостов) следовать за определёнными сущностями, чтобы избежать нежелательных конфликтов.... ## Техническая информация Компонент можно назначить на любую сущность. После его активации призраки не смогут телепортироваться к этой сущности, благодаря обновлению логику в функции return в коде компонента, мы будем выходить из OnGhostWarpToTargetRequest и не телепортироваться. ## Критические изменения Внесено одно условие в GhostSystem.cs в функции OnGhostWarpToTargetRequest, что блокирует телепортацию призраков к объектам с добавленным компонентом. ![image](https://github.com/user-attachments/assets/c48d7f1a-1fc3-448e-9fd0-ed12488db056) ## Требования - [x] Я прочитал(а) и следую [Руководство по созданию пулл реквестов](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). Я понимаю, что в противном случае мой ПР может быть закрыт по усмотрению мейнтейнера. - [x] Я добавил скриншоты/видео к этому пулл реквесту, демонстрирующие его изменения в игре, **или** этот пулл реквест не требует демонстрации в игре **Чейнджлог** # NO CL. NO FUN --------- Co-authored-by: FaDeOkno --- .../ADT/HideGhostWarp/HideGhostWarpComponent.cs | 9 +++++++++ Content.Server/Ghost/GhostSystem.cs | 8 ++++++++ 2 files changed, 17 insertions(+) create mode 100644 Content.Server/ADT/HideGhostWarp/HideGhostWarpComponent.cs diff --git a/Content.Server/ADT/HideGhostWarp/HideGhostWarpComponent.cs b/Content.Server/ADT/HideGhostWarp/HideGhostWarpComponent.cs new file mode 100644 index 0000000000..84fef1819b --- /dev/null +++ b/Content.Server/ADT/HideGhostWarp/HideGhostWarpComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.ADT.Ghost; + +/// +/// Вешаем на сущность, и к ней нельзя будет тепнуться через "Телепорт призрака". +/// +[RegisterComponent] +public sealed partial class HideGhostWarpComponent : Component +{ +} diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index f7c5cefd25..9723888abb 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -36,6 +36,7 @@ using System.Linq; using System.Numerics; using Content.Shared.ADT.OnGhostAttemtpDamage; +using Content.Server.ADT.Ghost; namespace Content.Server.Ghost { @@ -307,6 +308,9 @@ private void OnGhostWarpToTargetRequest(GhostWarpToTargetRequestEvent msg, Entit } var target = GetEntity(msg.Target); + if (HasComp(target)) return; // ADT TWEAK: НАХЕР ГОСТОВ ЗАЕБАЛИ, + // не сможет тепнуться к нему так как вышли из функции + // если цель "target" имеет HideGhostWarp Comp if (!Exists(target)) { @@ -366,6 +370,10 @@ private IEnumerable GetPlayerWarps(EntityUid except) if (attached == except) continue; + if (HasComp(attached)) continue; // ADT TWEAK: НАХЕР ГОСТОВ ЗАЕБАЛИ, + // не сможет тепнуться к нему так как вышли из функции + // если цель "attached" имеет HideGhostWarp Comp + TryComp(attached, out var mind); var jobName = _jobs.MindTryGetJobName(mind?.Mind);