Files
OldThink/Content.Server/_White/Implants/Mindslave/MindslaveSystem.cs
Jabak ace45578a3 Upstream (#143)
* fix borg (#719)

* Automatic changelog update

* Переводы снаряжения и прочей мелочи в стартовом меню (#720)

* Сумки, мешки и прочее

* Перевод снаряжения

* перевод черт персонажа

* Добавлено ничего

* Automatic changelog update

* Фикс отображения потери мастера для импланта подчинения (#721)

* фикс отображения

* brain damage is real

* я блять запустил райдер ради рефактора одного ифа

* а лучше даже так

* Automatic changelog update

* add coderabbitai config (#722)

* fix (#723)

* Шприц теперь является оружием массового поражения (#724)

* Automatic changelog update

* Пиздец (#725)

Я на это потратил 2 недели

* Automatic changelog update

* Honk FM (#136) (#726)

* Fix Cosmic Temperance и новые песенки в jukebox

* Новая музыка в jucebox x2

Co-authored-by: Vorge7 <vorge228@gmail.com>

* Automatic changelog update

* Флаф (fluff) мне (big_zi_348) (#727)

* Заработал

* brain damage

* fuck (#729)

* Automatic changelog update

* FUCKERS (#732)

* Удаление ненужных суффиксов (#731)

* Перевод захардкукоженной строки (#728)

* Пластырь поможет

* очапятка

* Перевод ревенанта

* Карповый перекат

* Create shakeable-component.ftl

* Криогеника

* Хранилища скафандров

* Update autotranslate-14.ftl

* Update Cyborgs.xml

* Комоды

* Кредиты

* Удалил дубликат

* Информация

* Пластырь миму и клоуну

* Переводы всего

* Перевод аплинка

* Удалил ненужные суффиксы

* Revert "Удалил ненужные суффиксы"

This reverts commit d82f05f30c37ec2c11e5736b91239fe9dd1a4d17.

* Удаление ненужных суффиксов

* Перевод реагентовых слизней

* Перевод аномалий

* Перевод маяков

* Перевод различной мелочи

* Automatic changelog update

* Переводы и правки Гайдов (#730)

* Automatic changelog update

* aaaaa (#733)

---------

Co-authored-by: RavmorganButOnCocaine <valtos@nextmail.ru>
Co-authored-by: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com>
Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
Co-authored-by: Vorge7 <vorge228@gmail.com>
Co-authored-by: Valtos <valtos@spaces.ru>
Co-authored-by: haiwwkes <49613070+rhailrake@users.noreply.github.com>
2024-10-13 19:11:01 +03:00

106 lines
3.8 KiB
C#

using Content.Server.Chat.Managers;
using Content.Server.Roles;
using Content.Server.Roles.Jobs;
using Content.Shared._White.Implants.Mindslave;
using Content.Shared._White.Implants.Mindslave.Components;
using Content.Shared.Chat;
using Content.Shared.Implants;
using Content.Shared.Implants.Components;
namespace Content.Server._White.Implants.Mindslave;
public sealed class MindslaveSystem : SharedMindslaveSystem
{
[Dependency] private readonly RoleSystem _role = default!;
[Dependency] private readonly IChatManager _chatManager = default!;
[Dependency] private readonly JobSystem _job = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SubdermalImplantComponent, SubdermalImplantInserted>(OnMindslaveInserted);
SubscribeLocalEvent<SubdermalImplantComponent, SubdermalImplantRemoved>(OnMindslaveRemoved);
}
private void OnMindslaveInserted(Entity<SubdermalImplantComponent> ent, ref SubdermalImplantInserted args)
{
if (!Tag.HasTag(ent.Owner, MindslaveTag))
{
return;
}
var slaveComponent = EnsureComp<MindSlaveComponent>(args.Target);
slaveComponent.Slaves.Add(GetNetEntity(args.Target));
slaveComponent.Master = GetNetEntity(args.User);
var masterComponent = EnsureComp<MindSlaveComponent>(args.User);
masterComponent.Slaves.Add(GetNetEntity(args.Target));
masterComponent.Master = GetNetEntity(args.User);
Dirty(args.User, masterComponent);
Dirty(args.Target, slaveComponent);
if (!Mind.TryGetMind(args.Target, out var targetMindId, out var targetMind) || targetMind.Session is null)
{
return;
}
var jobName = _job.MindTryGetJobName(args.User);
// send message to chat
var message = Loc.GetString("mindslave-chat-message", ("player", args.User), ("role", jobName));
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
_chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false,
targetMind.Session.Channel, Color.FromHex("#5e9cff"));
// add briefing in character menu
if (TryComp<RoleBriefingComponent>(targetMindId, out var roleBriefing))
{
roleBriefing.Briefing += Loc.GetString("mindslave-briefing", ("player", args.User), ("role", jobName));
Dirty(targetMindId, roleBriefing);
}
else
{
_role.MindAddRole(targetMindId, new RoleBriefingComponent
{
Briefing = Loc.GetString("mindslave-briefing", ("player", args.User), ("role", jobName))
}, targetMind);
}
}
private void OnMindslaveRemoved(Entity<SubdermalImplantComponent> ent, ref SubdermalImplantRemoved args)
{
if (!Tag.HasTag(ent.Owner, MindslaveTag))
{
return;
}
if (!TryComp(args.Target, out MindSlaveComponent? mindslave))
{
return;
}
var master = GetEntity(mindslave.Master);
if (Mind.TryGetMind(args.Target, out var mindId, out _))
{
_role.MindTryRemoveRole<RoleBriefingComponent>(mindId);
var popupNoMaster = master == EntityUid.Invalid
? Loc.GetString("mindslave-freed-no-master")
: Loc.GetString("mindslave-freed", ("player", master));
Popup.PopupEntity(popupNoMaster, args.Target, args.Target);
}
if (TryComp(master, out MindSlaveComponent? masterMindslave))
{
masterMindslave.Slaves.Remove(GetNetEntity(args.Target));
if (masterMindslave.Slaves.Count == 0)
RemComp<MindSlaveComponent>(master);
}
RemComp<MindSlaveComponent>(args.Target);
}
}