Реагенты
Реагенты — это вещества, из которых состоит раствор и которые могут реагировать, создавая новые реагенты.
Их определение состоит из:
type: Имя компонента. Всегда должен быть reagent.
id: Уникальный идентификатор этого реагента. Используется в реакциях и других местах для идентификации реагентов. Например Iodine или WeldingFuel. Они в PascalCase.
name: Идентификатор с пробелами для отображения во всплывающих подсказках. Например, iodine и welding fuel.
parent: От какого реагента наследовать свойства. Используется для таких вещей, как BaseDrink.
desc: Понятное человеку описание химического вещества.
color: Цвет реагента в hex. Используется для смешивания и отображения химического вещества в контейнерах.
spritePath: Спрайт, задающий иконку, используемую для реагента, начиная с Textures/Objects/Consumable/Drinks.
physicalDesc: Расплывчатое описание, потенциально полезное при его идентификации.
boilingPoint: Температура в градусах Цельсия, при которой реагент переходит из жидкости в газ.
meltingPoint: Температура в градусах Цельсия, при которой реагент переходит из твёрдого состояния в жидкое.
metabolisms: Словарь MetabolismGroup->List<ReagentEffect>, применяемый при потреблении реагента.
Пример определения реагента
- type: reagent
id: Lemonade
name: lemonade
parent: BaseDrink
desc: Drink using lemon juice, water, and a sweetener such as cane sugar or honey.
physicalDesc: tart
color: "#FFFF00"
spritePath: lemonadeglass.rsi
metabolisms:
Drink:
effects:
- !type:SatiateThirst
factor: 2
Дополнительную информацию смотрите: SS14 Content: папка реагентов или SS14 Content:ReagentPrototype.cs
Эффекты и условия реагентов
ReagentEffect описываются на C#. Например, SatiateThirst и HealthChange. Это позволяет легко переиспользовать код с похожими эффектами. Многие вещи используют эффекты реагентов — метаболизмы, метаболизмы растений и реакции сущностей-реагентов (эффекты на основе касания/инъекции). У ReagentEffect также есть поле prob — шанс, что эффект сработает, от 0 до 1. Причина, по которой они настолько обобщены, в том, что многие вещи, которым нужны эти данные, могут их использовать.
ReagentEffectCondition прикрепляются к каждому эффекту в списке метаболизатора. По умолчанию их нет, поэтому эффекты выполняются всегда. Однако можно легко добавить пользовательское поведение, чтобы определить, когда эффект действительно произойдёт. Например, ReagentThreshold позволяет очень легко задать поведение при передозировке. Вот метамфетамин:
metabolisms:
Poison:
effects:
- !type:HealthChange
damage:
types:
Poison: 2.5
- !type:HealthChange
conditions:
- !type:ReagentThreshold
min: 10
damage:
types:
Poison: 4 # это добавляется к базовому урону метамфетамина.
Narcotic:
effects:
- !type:MovespeedModifier
walkSpeedModifier: 1.3
sprintSpeedModifier: 1.3
Это означает, что поведение передозировки HealthChange срабатывает только когда в вашей системе как минимум 10u. У него две разные группы, «Poison» и «Narcotic». Обе они, как правило, метаболизируются сердцем.