* 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>
106 lines
3.8 KiB
C#
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);
|
|
}
|
|
}
|