Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix Evil Twin #1581

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Content.Server/Corvax/EvilTwin/EvilTwinSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using Content.Server.Roles.Jobs;
using Content.Server.Station.Systems;
using Content.Shared.Humanoid;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Objectives.Components;
using Content.Shared.Objectives.Systems;
Expand Down Expand Up @@ -64,12 +65,11 @@ private void OnPlayerAttached(EntityUid uid, EvilTwinSpawnerComponent component,
if (spawnedTwin != null &&
_mindSystem.TryGetMind(args.Player, out var mindId, out var mind))
{
Del(uid);
mind.CharacterName = MetaData(spawnedTwin.Value).EntityName;
_mindSystem.TransferTo(mindId, spawnedTwin);
Comment on lines +68 to 70
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Удаление должно быть последним шагом, используя QueueDel

Copy link
Contributor Author

@VigersRay VigersRay Nov 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В таком случае при удалении спавнера игрок будет кинут в госты. Почему я в душе не чаю, очень странная штука, с аналогичным спавнером допустим беглеца у меня всё работает. Тут или оффы опять поломали что-то, или волшебство.
Почему-то даже после _mindSystem.TransferTo(mindId, spawnedTwin); внутри MindComponent спавнера остается записано mindId игрока.
Есть еще вариант не удалять спавнер а просто убрать у него компоненты призрак роли, чтобы новые игроки не заходили.
Впрочем я много вариантов пробывал и это пожалуй эдиный рабочий, удалить спавнер перед переносом сознания.
Кстати попытаться просто выкинуть создание через _mindSystem.TransferTo(mindId, null); тоже ничего не дает.

Copy link
Member

@Morb0 Morb0 Nov 23, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В таком случае при удалении спавнера игрок будет кинут в госты.

Я не разбирался, но предположу, что возможно uid указывает на session.AttachedEntity и вызов QueueDel ставит удаление в очередь на следующий тик, в котором session.AttachedEntity уже будет тело двойника.

}
}

QueueDel(uid);
}

private void OnMindAdded(EntityUid uid, EvilTwinComponent component, MindAddedMessage args)
Expand All @@ -85,8 +85,8 @@ private void OnMindAdded(EntityUid uid, EvilTwinComponent component, MindAddedMe
_roleSystem.MindAddRole(mindId, role, mind);
_mindSystem.TryAddObjective(mindId, mind, EscapeObjective);
_mindSystem.TryAddObjective(mindId, mind, KillObjective);
if (TryComp<TargetObjectiveComponent>(uid, out var targetObj))
_target.SetTarget(uid, evilTwin.TargetMindId, targetObj);
if (_mindSystem.TryGetObjectiveComp<TargetObjectiveComponent>(uid, out var obj))
_target.SetTarget(uid, evilTwin.TargetMindId, obj);
}

private void OnRoundEnd(RoundEndTextAppendEvent ev)
Expand Down
Loading