Skip to content

Life insurance program#345

Open
TryHardo7 wants to merge 22 commits into
SerbiaStrong-220:masterfrom
TryHardo7:life_insurance_program
Open

Life insurance program#345
TryHardo7 wants to merge 22 commits into
SerbiaStrong-220:masterfrom
TryHardo7:life_insurance_program

Conversation

@TryHardo7

@TryHardo7 TryHardo7 commented Jun 12, 2026

Copy link
Copy Markdown

Основано на https://discord.com/channels/1097181193939730453/1514516815512866826
Пока делал - решил связать это лорно с задуманными планами по добавлению контента для наймов (в целом - всех), там будет система квестов с качественным мочиловом, скандалами, интригами, расследованиями. В качестве главного антагониста/работодателя будет выступать НИОКР «НОСКЕ-ЭЙЕН».
Так что приурочил страхование к их постепенному появлению в секторе.
В будущем цена, количество страховок и прочие параметры будут зависеть от репутации с этой корпой.

Бейсикалли:

  1. На базе фракции находится мультиблок структура. Сканер, консоль, капсула клонирования.
  2. Пациент заходит/его запихивают в капсулу, доктер(второй игрок) в интерфейсе консоли нажимает "сохранить днк"
  3. Пациент вылезает, может посмотреть в интерфейсе консоли количество "клонирований" оставшееся и за бабки докупить. Можно добавлять другим, таким образом даря/оплачивая страховку.
  4. У госта появляется абилка с тремя зарядами максимум - нажимаешь и запускается процесс клонирования.
  5. Респаун с голой жопой из капсулы (с пояснениями в виде вылезшего окошка)

стоимость 1 страховки на данный момент - 250 тысяч
время клонирования - 3 минуты. (игрок появится голый, так что ни о каком "прыгнул в бой" речи не идёт)
страховку можно купить только если цель жива. (попросить в дискорде будучи гостом не выйдет)

Я вот думаю: если игрок зашёл за гострольку ему должно отбирать страховку? Сейчас не отбирает. По идее и ладно, раунды то долгие. Он может сдохнуть, пойти поесть, потренироваться, сходить в магазин, вернуться, забыть что есть страховка, зайти за мышь - сдохнуть и потом нормально клонироваться вернувшись в раунд основной куклой. Не душно. Могут и абузить условно как-то подводя в нужное место гострольного перса, но бля, это работа администраторов, всё можно абузить всегда, не хочется душнить жизнь нормальным игрокам из-за 2% абузеров.

image image

Короче я кое как по уродски добавил это дело на мапы, нормальные мапперы с руками не из жопы потом сделают адекватно.

Вот фалкон/
image

Вот Гелиос.
image

У тсф есть вендоры шмоток без доступов + телеком.
У дф даже фрак вендора нет, поставил наймовский с шмотками. Консоль у дф хоть убей не крутится, хз почему.
Придётся кого-то вызванивать в телеком чтобы открыли клонированных.
Ну или можно положить базовые наборы просто (джампсьют+карта+наушник там)
У ДФ нет источника карт, добавил в аплинк за ТК.

  • Основной функционал + тексты + интерфейс.
  • Тест логики в разных условиях, устранение уязвимостей.
  • Маппинг комнат для этой машины на базах фракций.
  • Баланс (цены, таймеры, доступы, заряды).
    Крутые спрайты машины. Мечты мечты.
  • Кто-то что-то попросит.
  • Сменить логику клонирования с тестовой на финальную.
  • Всё перепроверить, оптимизация.
  • Я прочитал(а) и следую Рекомендациям по оформлению Pull Request и Changelog.
  • Я добавил(а) медиафайлы к этому PR или он не требует демонстрации в игре.
  • Я подтверждаю, что мои изменения находятся под лицензией Exodus CLA и соглашаюсь с её условиями.

🆑 Lanc

  • add: Корпорация НИОКР «НОСКЕ-ЭЙЕН» заключила контракт с ведущими фракциями сектора на поставку их новейшей разработки - машина страхования жизни. Разумеется вы не являетесь подопытными, использование абсолютно безопасно, репутация корпорации безупречна. Архитекторы фракционных аванпостов разместили машины в оборудованных помещениях.

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request introduces a new Life Insurance system, featuring a patient scanner, a cloning capsule, and a console that auto-link by proximity, complete with backup batteries, ghost activation abilities, and localization. The code review identified several critical logic and reliability issues: the return value of _container.Insert is not checked in both the cloner and scanner systems, which could leave entities orphaned on failure; the ghost activation ability lacks a GhostComponent check and does not dynamically sync charges when policies are bought or deleted; the console allows purchasing insurance when the cloner is unavailable and fails to check if the console is operational during insurance lookups; and a hardcoded multiplier in the battery system violates the style guide against magic numbers.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceClonerSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceGhostAbilitySystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceGhostAbilitySystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceConsoleSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceConsoleSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceScannerSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceBackupBatterySystem.cs Outdated
@TryHardo7

Copy link
Copy Markdown
Author

Потестирована и пофикшена куча разных абузов и дыр в логике. Перечислять даже смысла нет
Не сомневаюсь что когда игроки накинутся, что-нибудь да найдут, но как минимум это будет супер-крайний случай, всё что может придти в голову здравомыслящему человеку я закрыл.

@Surani1 Surani1 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.

  1. При нажатии кнопки респауна должно вылезать предупреждение о возрождении. Тут оно моментально тебе куклу спавнит.
  2. Какие либо ограничения, указанные в прототипе, не создают КД использования (у меня как минимум не сработало).
  3. Рассмотреть крафтовый предмет страховки. Можно его медикам отдать, либо что. Как вариант.
  4. Перенести из общего аплинка с биометрией на днк в структурный аплинк, в котором продаются ваучеры фракций. Сделать аналог для тсф.

Comment thread Resources/Prototypes/_Exodus/Catalogs/pdv_idcard_catalog.yml
Comment thread Content.Shared/_Exodus/CCVar/XCVars.cs Outdated
Comment thread Resources/Prototypes/_Exodus/Actions/life_insurance.yml
Comment thread Resources/Prototypes/_Exodus/Entities/Structures/Machines/life_insurance.yml Outdated
@Surani1

Surani1 commented Jun 14, 2026

Copy link
Copy Markdown

https://youtu.be/rlqtZ5o17_8

Не хочет жрать гитхаб этот видос, поэтому так.

@TryHardo7

Copy link
Copy Markdown
Author

Ну не готово же, я всё это и так исправил бы, логика пока тестовая.
Видишь галки нет?
image
Да госту табличку и не должно показывать я подумал.
Моментально - потому что тестовая логика щас, чтобы мне удобно было, потом заменю на минут 5-10.
image

Пока идёт процесс клонирования - машина всем возвращает фолс при запросе, то-есть 2 раза нажать и потерять х2 деньги нельзя, кто-либо другой тоже не сможет запустить своего клона пока она занята.

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

Жалуются что денег некуда тратить, вот типа пусть тратят.
Или ты считаешь что каждый встречный поперечный должен иметь страховку?

Щас я перепроверю что ДФ могут карты себе делать.
ТСФ может и без аплинка.

@Surani1

Surani1 commented Jun 14, 2026

Copy link
Copy Markdown

Ну не готово же, я всё это и так исправил бы, логика пока тестовая. Видишь галки нет?

ты ревью мне накинул, я его и сделал 🦡

По идеям крафта - в зависимости насколько ты хочешь чтобы оно было распространенно. Если по большей степени только у фракций - то цены в 250 000 - 400 000 достаточно.

@TryHardo7

TryHardo7 commented Jun 14, 2026

Copy link
Copy Markdown
Author

ты ревью мне накинул, я его и сделал 🦡

аэээ неа...
ааа
image
оно само, соре

А вот когда будет готово если всё потестишь прям шляпу сниму

@TryHardo7 TryHardo7 requested a review from Surani1 June 14, 2026 22:19
@TryHardo7

TryHardo7 commented Jun 14, 2026

Copy link
Copy Markdown
Author

ты ревью мне накинул, я его и сделал 🦡

Вот теперь реально запрашиваю ревью)
Я не знаю как и почему оно прошлый раз тебя дёрнуло, автоматика.

Короче я для твоего удобства оставил тестовую логику:

  1. сканирование автоматом когда ты залез в капсулу
  2. быстрое клонирование

Если хочешь по хардкору - я это уберу, пингани в дисе а то тут могу не заметить во время.

По геймдизайно ещё скажу.
Я пока не добавил никаких штрафов за многочисленное использование (появится голым и запертым и так накидывает проблем игрокам)
И не хочу ещё как-то сверх текущих требований ограничивать, я бы посмотрел сначала как оно приживётся вообще и фидбек игроков всосал.

А да и ещё ты говорил про хардкод цену - я хз как иначе, её нельзя сунуть в компонент, потому что она нужна до момента выдачи этого компонента госту

@Surani1

Surani1 commented Jun 15, 2026

Copy link
Copy Markdown

Вот теперь реально запрашиваю ревью) Я не знаю как и почему оно прошлый раз тебя дёрнуло, автоматика.

Хорошо, сегодня завтра сделаю его. Пока что очень занят.

@TryHardo7

Copy link
Copy Markdown
Author

@TryHardo7 чет я сильно задушился по сессии. Пытался совмещать, но щас уже совсем прижимают, поэтому недели 2 меня точно не будет по ревью. Остается локи, поэтому только его ревью ждать и желательно только на конечном этапе, чтобы меньше ему работы было.

Лады, отбивайся и спасибо за то что уже сделал, успехов на сессии!
Сам всё оттестирую, всё будет красиво.

@TryHardo7

Copy link
Copy Markdown
Author

/gemini review

@TryHardo7

Copy link
Copy Markdown
Author

Не слушается, всё вроде готово, тогда Ваш выход, месье @Lokilife

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

👁️ Взор Ouro обращен на Ваше творение... Данный пулреквест привносит в мир систему страхования жизни Nosske-Eien, включающую консоль управления, капсулы сканирования и клонирования, а также резервные батареи для работы при отключении питания. В ходе анализа были обнаружены критические разрывы цикла: спавн клона в мировых координатах вместо сетки грида, что грозит выбросом игрока в космос, а также безвозвратное удаление страховок при перезаходе в лобби. Кроме того, выявлены дисгармонии в виде дублирования логики применения трейтов, неоптимального поиска сущностей и использования устаревших сигнатур обработчиков событий и типов данных времени. Направьте свои усилия на исправление этих несовершенств, чтобы восстановить гармонию кода.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceClonerSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceConsoleSystem.cs
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceClonerSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceClonerSystem.cs Outdated
Comment thread Content.Shared/_Exodus/LifeInsurance/Components/LifeInsuranceClonerComponent.cs Outdated
Comment thread Content.Shared/_Exodus/LifeInsurance/Components/LifeInsuranceClonerComponent.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceConsoleSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceScannerSystem.cs Outdated
@github-actions

Copy link
Copy Markdown

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@TryHardo7

Copy link
Copy Markdown
Author

Потестировал, работает.
Пока оставлю тестовую логику, а то ещё что-то чинить после ревью, потом снова тестировать.

@TryHardo7 TryHardo7 changed the title [WIP] Life insurance program Life insurance program Jun 16, 2026
@ytkaed

ytkaed commented Jun 20, 2026

Copy link
Copy Markdown

А кпб тоже клонируются?
images-11

@Lokilife Lokilife 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.

Растёшь 👍

Заметка: требуется тестирование перед мерджем

Comment thread Content.Client/_Exodus/LifeInsurance/UI/LifeInsuranceWakeUpEui.cs Outdated
Comment thread Content.Client/_Exodus/LifeInsurance/UI/LifeInsuranceWakeUpWindow.cs Outdated
Comment thread Content.Shared/_Exodus/LifeInsurance/LifeInsuranceUi.cs
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceBackupBatterySystem.cs Outdated
/// Builds the clone body from the pending profile, applying appearance, traits, company and the
/// mind's job specials. Returns null if the pending profile is missing or invalid.
/// </summary>
private EntityUid? SpawnBody(EntityUid uid, LifeInsuranceClonerComponent comp)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

А переиспользовать код из оригинальной клонёрки совсем не вариант?
Ибо по ощущению, тут происходит дубликация логики, и если в клонёрке что-то в будущем изменится, то хотелось бы, чтобы клонирование одинаково отработало и тут.

@TryHardo7 TryHardo7 Jun 21, 2026

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Ну я думал об этом, различий просто много:

  1. тут клонируется не "тело" а снапшот HumanoidCharacterProfile - он срабатывает если тело уничтожено.
  2. заряды страховки гейтят клонирование, там ничего такого нет
  3. может поломаться если оффы что-то сделают с клонёркой

Можно конечно переплести, смешать систему а потом разграничить компонентами.
Ну как то не хочется если честно, принципиальные изменения в логику и тут можно внести если основная клонёрка прямо сильно изменится, зато в моменте не поломается.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Ну я думал об этом, различий просто много:

  1. тут клонируется не "тело" а снапшот HumanoidCharacterProfile - он срабатывает если тело уничтожено.
  2. заряды страховки гейтят клонирование, там ничего такого нет
  3. может поломаться если оффы что-то сделают с клонёркой

Можно конечно переплести, смешать систему а потом разграничить компонентами. Ну как то не хочется если честно, принципиальные изменения в логику и тут можно внести если основная клонёрка прямо сильно изменится, зато в моменте не поломается.

Сам процесс создания тела должен быть одинаковым для обоих систем - оба делают одно и то же, просто код вызывающий создание нового тела другой. Один сначала выполняет проверки на наличие биомассы, другой деньги списывает.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

типа так?

Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceScannerSystem.cs Outdated
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceScannerSystem.cs
Comment thread Content.Server/_Exodus/LifeInsurance/LifeInsuranceScannerSystem.cs Outdated
Comment thread Content.Shared/_Exodus/LifeInsurance/Components/LifeInsuranceClonerComponent.cs Outdated
Comment thread Content.Shared/_Exodus/LifeInsurance/Components/LifeInsuranceConsoleComponent.cs Outdated
@Lokilife

Copy link
Copy Markdown

Линтер упал, но не по твоей вине. Можешь на эту ошибку забить.

@TryHardo7

TryHardo7 commented Jun 21, 2026

Copy link
Copy Markdown
Author

Растёшь 👍

Заметка: требуется тестирование перед мерджем

Спасибо 🤙

Фиксы сделал, собрал, потестил:

  1. скан - смерть - с госта клонировался (бабки, заряды списались, при 0 ошибка как задумано)
  2. скан - гост - с госта не даёт клонироваться (ориг тело живо)
  3. залез в химеру/азакима - не даёт сканировать (задуманная ошибка с текстом)
  4. всякая гострольная животина типа собак кошек не может быть засунута в контейнер сканера
  5. Закрыл смешной эксплойт с борером который мог захватить сознание и теоретически быть отсканирован -> клонирован. Теперь если боррер захватил сознание и его сканировать то выдаёт ошибку. Если просто борер в теле то сканируется нормально и клонируется именно носитель, как должно быть.
  6. проверил новую схему расчёта питания - работает отлично, ~15 минут без питания, на UI выводит корректно
  7. уничтоженные части машины восстанавливаются с СРД и подключаются друг к другу как надо
  8. потеря питания в процессе клонирования корректно запускает последовательность "кровавый супчик -> 30 сек -> вылезает враждебный моб, выливается кровища на пол
  9. стереть чужие записи можно уничтожив консоль, либо точечно доступом полкана/визиря
  10. Откручивать части машины нельзя, существует 2 сета: Гелиос и Фалька.

Тестовую логику заменил на рабочую

Вроде всё?

@github-actions

Copy link
Copy Markdown

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@Surani1 Surani1 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.

lgtm, посмотрим как быстро найдут абузы

Comment thread Content.Server/Traits/TraitSystem.cs Outdated
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