add: Система зависимостей от алкоголя, никотина и наркотиков, трайты и лечение - #419
add: Система зависимостей от алкоголя, никотина и наркотиков, трайты и лечение#419ultradyper wants to merge 2 commits into
Conversation
📝 WalkthroughSummary by CodeRabbit
WalkthroughДобавлена система зависимости от алкоголя, никотина и наркотиков. Она создаёт каналы зависимости, изменяет их уровни, запускает стадии абстиненции и поддерживает лечение детоксином. Добавлены компоненты, эффекты, прототипы, трейты, локализация и руководство. ChangesМеханика зависимостей
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant Игрок
participant AddictionSystem
participant AddictionComponent
participant AddictionSymptomsSystem
participant StatusEffectWithdrawalWeakness
Игрок->>AddictionSystem: употребляет отслеживаемый реагент
AddictionSystem->>AddictionComponent: обновляет канал зависимости
AddictionSystem->>AddictionComponent: снижает уровень при воздержании
AddictionSystem->>AddictionSymptomsSystem: публикует AddictionSymptomsChangedEvent
AddictionSymptomsSystem->>StatusEffectWithdrawalWeakness: применяет эффект симптома
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: bea1de41-dc7f-4df6-b61b-0e2efe7b486e
📒 Files selected for processing (12)
Content.Server/_Ganimed/Addiction/AddictionSystem.csContent.Server/_Ganimed/Addiction/AdjustAddictionLevelEffectSystem.csContent.Shared/_Ganimed/Addiction/AddictionComponent.csContent.Shared/_Ganimed/Addiction/Effects/AdjustAddictionLevel.csResources/Locale/ru-RU/_Ganimed/addictions.ftlResources/Prototypes/Reagents/narcotics.ymlResources/Prototypes/_Ganimed/Entities/StatusEffects/addictions.ymlResources/Prototypes/_Ganimed/Guidebook/addictions.ymlResources/Prototypes/_Ganimed/Reagents/medicine.ymlResources/Prototypes/_Ganimed/Recipes/Reactions/medicine.ymlResources/Prototypes/_Ganimed/Traits/addictions.ymlResources/ServerInfo/_Ganimed/Guidebook/Addictions.xml
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML Linter
- GitHub Check: check-maps
- GitHub Check: YAML map schema validator
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-01-28T21:02:49.548Z
Learnt from: HyperB1
Repo: ss14-ganimed/Ganimed14 PR: 350
File: Resources/Locale/en-US/_Harmony/game-ticking/game-presets/preset-conspirator.ftl:14-14
Timestamp: 2026-01-28T21:02:49.548Z
Learning: Verify that locale FTl files under Resources/Locale maintain consistency with control keycodes. If a fork modifies a keycode (e.g., 'o' → 'г' in radio_channels.yml for a specific channel), the English (en-US) locale should be updated to reflect the intended behavior or explicitly document the exception. Ensure the English instruction uses the same keycode as the default/original behavior unless the fork’s logic requires a deliberate change, to avoid localization discrepancies.
Applied to files:
Resources/Locale/ru-RU/_Ganimed/addictions.ftl
| /// Спад уровня в секунду. 100 за ~50 минут воздержания. | ||
| /// </summary> | ||
| [DataField] | ||
| public float DecayRate = 100f / 3000f; |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Согласуйте спад уровня с длительностями стадий ломки.
При DecayRate = 100 / 3000 уровень канала, ограниченный значением 100, достигнет Threshold = 50 через 25 минут. Тяжёлая стадия начинается только через 30 минут: 10 минут задержки и две стадии по 10 минут. Условие излечения сработает раньше, поэтому третья стадия и галлюцинации недостижимы.
Content.Shared/_Ganimed/Addiction/AddictionComponent.cs#L27-L30: уменьшитеDecayRateили измените порог и длительности так, чтобы уровень оставался вышеThresholdпри входе в тяжёлую стадию.Content.Server/_Ganimed/Addiction/AddictionSystem.cs#L93-L106: синхронизируйте условие излечения с длительностями стадий и добавьте проверки границ стадий.Resources/ServerInfo/_Ganimed/Guidebook/Addictions.xml#L24-L27: обновите указанное время лечения после выбора итогового баланса.
📍 Affects 3 files
Content.Shared/_Ganimed/Addiction/AddictionComponent.cs#L27-L30(this comment)Content.Server/_Ganimed/Addiction/AddictionSystem.cs#L93-L106Resources/ServerInfo/_Ganimed/Guidebook/Addictions.xml#L24-L27
|
Зачем так много щиткода, переводи константы в компонент. Вместо float пробуй TimeSpan. Прямые вызовы тоже перебор, лучше через событие. |
Исправлю. |
…омпонент, TimeSpan вместо float, симптомы через событие - константы (статус-эффекты, длительности, амплитуды дрожи, группы метаболизма) переведены в DataField компонента Addiction - длительности симптомов теперь TimeSpan - симптомы ломки применяет отдельная AddictionSymptomsSystem по событию AddictionSymptomsChangedEvent, пересчёт по всем каналам - стартовые каналы из трайтов получают WasAddicted, поп-апы выздоровления и подсадки не врут - DecayRate снижен (100/6000): тяжёлая стадия ломки теперь достижима - гайдбук эффекта показывает модуль снижения, без минуса
|
Исправлено: константы переведены в компонент (DataField), длительности в TimeSpan, симптомы ломки применяются через событие AddictionSymptomsChangedEvent отдельной системой с пересчётом по всем каналам. Заодно поправлен баланс спада, чтобы тяжёлая стадия была достижима. |
There was a problem hiding this comment.
Actionable comments posted: 1
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 6df7b461-ab9d-4c9f-b0c1-833066b88f95
📒 Files selected for processing (5)
Content.Server/_Ganimed/Addiction/AddictionSymptomsSystem.csContent.Server/_Ganimed/Addiction/AddictionSystem.csContent.Shared/_Ganimed/Addiction/AddictionComponent.csContent.Shared/_Ganimed/Addiction/AddictionSymptomsChangedEvent.csContent.Shared/_Ganimed/Addiction/Effects/AdjustAddictionLevel.cs
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Shared/_Ganimed/Addiction/Effects/AdjustAddictionLevel.cs
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
- GitHub Check: check-maps
- GitHub Check: Test Packaging
- GitHub Check: YAML RGA schema validator
- GitHub Check: YAML Linter
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML map schema validator
🔇 Additional comments (4)
Content.Shared/_Ganimed/Addiction/AddictionComponent.cs (1)
5-8: LGTM!Also applies to: 31-35, 67-144, 185-205
Content.Shared/_Ganimed/Addiction/AddictionSymptomsChangedEvent.cs (1)
1-12: LGTM!Content.Server/_Ganimed/Addiction/AddictionSystem.cs (1)
20-20: LGTM!Also applies to: 54-67, 83-88, 105-106, 122-126, 145-145, 164-165, 176-204
Content.Server/_Ganimed/Addiction/AddictionSymptomsSystem.cs (1)
1-120: LGTM!Also applies to: 125-139
|
Раундстарт алкоголизм и в особенности наркомания должны блокировать некоторые роли по моему мнению. Моё мнение по балансу (окончательное решение за руководством) - убрать черту наркозависимости и заблокировать алкашам некоторые роли (капитана, ГСБ, ГВ, КЦК и ОСЩ допустим). |
Да. |




Описание PR
Система привыкания и зависимости от алкоголя, никотина и наркотиков:
Технические детали
Медиа
Скриншоты будут добавлены отдельным комментарием.
Чек-лист
Список изменений
🆑 ultradyper