Skip to content

Решитворк электрического стула: Месть шиткода - #1023

Open
KillMeINoobs wants to merge 2 commits into
space-syndicate:masterfrom
KillMeINoobs:FixThisShit
Open

Решитворк электрического стула: Месть шиткода#1023
KillMeINoobs wants to merge 2 commits into
space-syndicate:masterfrom
KillMeINoobs:FixThisShit

Conversation

@KillMeINoobs

Copy link
Copy Markdown

Описание PR

Полностью переработан шиткод электрического стула. Прошлая версия была написана ChatGPT-4o, текущая написана ChatGPT 5.6 Sol xhight с подключением MCP от Roslyn для изучения графов проекта и дополнительно дообученная на документации от оффов по SS14. Потрачено 50% недельных токенов подписки за 100 баксов. Это точно стоит записать в плюсы.

Основные изменения:

  • DeviceLink-порты On, Off и Toggle перенесены в прототип, теперь настроенные на замороженных картах подключения больше не будут теряться при инициализации, так что можно сразу маппить комнаты для казни с кнопкой.
  • Стул потребляет 1500 Вт только после получения сигнала включения. В выключенном состоянии нагрузка отключена. Раньше потреблял и в выключенном виде, да.
  • Электрошок переведён на штатную ElectrocutionSystem. Короче, теперь он бьёт током примерно как решётка под напряжением. Но он не бьёт током проходящих рядом или взаимодействующих с ним персонажей.

Неинтересные мелочи:

  • Реализованы отдельные состояния выключения, ожидания питания и готовности к работе.
  • При недостатке или потере питания стул выключается. После восстановления питания требуется повторная активация.
  • Самостоятельное отстёгивание занимает 30 секунд. Раньше было мгновенно, хз, обсуждабельно. На нексте вроде тоже было долго отстёгиваться.
  • Стул теперь нормально прикручивается к полу. И откручивается. Появляется сразу прикрученным, вау, нововведения, опубликуйте меня в ченджлоге.
  • Небольшой тайный сюрприз для IPC.

Изменения ограничены собственным кодом ExecutionChair. Ванильные системы, карты, кнопки и прочее не менялось.

Почему / Баланс

Потому что был шиткод, у которого не работала половина функционала. А если работала, то криво. А ещё параметр звука вместо звука менял урон, да. Шиткод был переписан в другой предположительный шиткод. Да и просто интересно сравнить развитие шиткодинга за полтора года разницы. Бтв, полтора года прошлый шиткод был на всех картах и ничо не падало.

Технические детали

Полный реворк.

Медиа

2321354124154321334552344214.mp4

Требования

Критические изменения

  • ID прототипа ExecutionChair сохранён, поэтому размещённые на картах сущности не требуют миграции.
  • Namespace системы и компонентов изменён на Content.Server._CorvaxGoob.ExecutionChair.
  • Существующие неподключенные станционные стулья автоматически не подключаются - DeviceLink-связи должны быть настроены при маппинге.

Тестирование

Прогнала все интеграционные тесты, ну так на всякий случай, 1636 пройдено.
А также все остальные тесты что есть в сборке, 3812 пройдено 1 пропущен (не виноватая я, он сам попустился)
Ну и ручками балду погоняла десяток тестов небольших, чисто чтобы убедиться в работоспособности.

Список изменений

Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs Outdated
Comment thread Content.Server/_CorvaxGoob/ExecutionChair/ExecutionChairSystem.cs
@Pok27

Pok27 commented Jul 30, 2026

Copy link
Copy Markdown

Часть системы может быть перенесена в Shared и предсказана, но я пологаю всем все равно тут

@kosticia

Copy link
Copy Markdown

не очень понимаю зачем надо было это ревьювить

@KillMeINoobs

KillMeINoobs commented Jul 30, 2026

Copy link
Copy Markdown
Author

не очень понимаю зачем надо было это ревьювить

Интересно, почему комментарии отсюда не идут в ветку гитхаба сборки.

@cfif126 cfif126 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

стоит удалить локаль (мне подсказал чат гпт 7)

@KillMeINoobs
KillMeINoobs requested a review from Pok27 July 31, 2026 00:12
Comment on lines +372 to +378
private bool TryGetChairComponents(
EntityUid uid,
[NotNullWhen(true)] out ApcPowerReceiverComponent? receiver,
[NotNullWhen(true)] out StrapComponent? strap,
[NotNullWhen(true)] out ElectrifiedComponent? electrified,
[NotNullWhen(true)] out TransformComponent? transform)
{

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Я не понимаю откуда нейронка взяла такой подход к работе с несколькими компонентами, это перегружает простую систему, обычно если нам нужен какой-то компонент, то при его отсутствии просто не работает какая-то логика, а не отключается вся система, это же относиться и к OnComponentRemoved (который можно удалить)

TurnOff(ent.Owner, true);
}

private void OnDamageModifyEvent(Entity<HumanoidAppearanceComponent> ent, ref DamageModifyEvent args)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Это злой подход, мы не должны реализовывать логику компонентов в системе не связанной с этим компонентом. Просто изначально не нужно поджаривать тех, кого не нужно

Comment on lines +221 to +230
private static bool IsBuckledTo(EntityUid target, StrapComponent strap)
{
foreach (var buckled in strap.BuckledEntities)
{
if (buckled == target)
return true;
}

return false;
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
private static bool IsBuckledTo(EntityUid target, StrapComponent strap)
{
foreach (var buckled in strap.BuckledEntities)
{
if (buckled == target)
return true;
}
return false;
}
private static bool IsBuckledTo(EntityUid target, StrapComponent strap)
{
return strap.BuckledEntities.Contains(target);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants