* fix borg (#719)
* Automatic changelog update
* Переводы снаряжения и прочей мелочи в стартовом меню (#720)
* Сумки, мешки и прочее
* Перевод снаряжения
* перевод черт персонажа
* Добавлено ничего
* Automatic changelog update
* Фикс отображения потери мастера для импланта подчинения (#721)
* фикс отображения
* brain damage is real
* я блять запустил райдер ради рефактора одного ифа
* а лучше даже так
* Automatic changelog update
* add coderabbitai config (#722)
* fix (#723)
* Шприц теперь является оружием массового поражения (#724)
* Automatic changelog update
* Пиздец (#725)
Я на это потратил 2 недели
* Automatic changelog update
* Honk FM (#136) (#726)
* Fix Cosmic Temperance и новые песенки в jukebox
* Новая музыка в jucebox x2
Co-authored-by: Vorge7 <vorge228@gmail.com>
* Automatic changelog update
* Флаф (fluff) мне (big_zi_348) (#727)
* Заработал
* brain damage
* fuck (#729)
* Automatic changelog update
* FUCKERS (#732)
* Удаление ненужных суффиксов (#731)
* Перевод захардкукоженной строки (#728)
* Пластырь поможет
* очапятка
* Перевод ревенанта
* Карповый перекат
* Create shakeable-component.ftl
* Криогеника
* Хранилища скафандров
* Update autotranslate-14.ftl
* Update Cyborgs.xml
* Комоды
* Кредиты
* Удалил дубликат
* Информация
* Пластырь миму и клоуну
* Переводы всего
* Перевод аплинка
* Удалил ненужные суффиксы
* Revert "Удалил ненужные суффиксы"
This reverts commit d82f05f30c37ec2c11e5736b91239fe9dd1a4d17.
* Удаление ненужных суффиксов
* Перевод реагентовых слизней
* Перевод аномалий
* Перевод маяков
* Перевод различной мелочи
* Automatic changelog update
* Переводы и правки Гайдов (#730)
* Automatic changelog update
* aaaaa (#733)
* Правка локализации (#737)
* Update ThirstSystem.cs (#736)
* AccessConfiguratorForBorgs (#735)
* Automatic changelog update
* Починил бесконечную сварку (#734)
* Automatic changelog update
* ShowManifestFeature (#738)
* Automatic changelog update
* I LOVE OPENSOURCE
* Изменение размеров милишек (#739)
* Фикс размеров
* Заготовку биты тоже
* Правка
* Automatic changelog update
* Время после взрыва нюки (#740)
* More Fun
* Автоформатирование
* Подкрутка
* Automatic changelog update
* Скальпель в армейские ботинки (#741)
* Automatic changelog update
* DoHeavyAttack stamina check (#742)
* Automatic changelog update
* aaaaaaaaaaaaaaaaaaaaaaaaaaaaa (#743)
* fix retarded code (#744)
* Automatic changelog update
* Локализация (#746)
* Правка мелочей
* Имя клоуну
* Перевод оповещений для РНД
* перевод занавесок
* перевод столов
* Automatic changelog update
* Перевод и обновление кода гипоспрея для боргов (#745)
* Я только хотел перевести...
* refactor
* ещё перевод
* Revert "refactor"
This reverts commit 355c2724c4ed9cd1357661e3ba889a88bdf17db7.
* инверсия условия для проверки наличия прототипа
* Automatic changelog update
* Больше вещей в пояса охраны (#748)
* Подкрутки и докрутки (#749)
* Automatic changelog update
* Добавил отображение защиты от горения и подправил описание защиты от взрывов (#747)
* Добавил отображение защиты от горения
* Update Content.Shared/Clothing/EntitySystems/FireProtectionSystem.cs
Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
* Update Resources/Locale/ru-RU/_white/info/fire-protection.ftl
Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
* Правки
* негативный ноль с плавающей точкой
---------
Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
* Automatic changelog update
* Фикс текстурок внешних шлюзов (#751)
* Микромелочь
* Ещё одна мелочь
* Починка прозрачности
* Automatic changelog update
* the fuck (#752)
* the fuck
* more logs
* avoooo (#753)
* nyaUpdate (#754)
* Merge pull request #756
* nya v1.2
* ahhhh ** всех закопает (#758)
* Ребаланс РНД (#750)
* Третий тир больше нас не остановит
* More less
* Ребаланс
* правочки подправочки
* СКОРАЯ!!! ПОМОГИТЕ!!!
* Automatic changelog update
* Конфета или жизнь (#757)
* Конфета или жизнь
* gremlins invasion
* Я ДОБАВИЛ БОЛЬШЕ МУСОРА НА СТАНЦИЮ!!!
* Переводы (много) (#755)
* Перевод технологий РНД
* Перевод действий поглаживающего характера
* Целая куча мелочей
* Ещё больше мелочей
* Слишком много мелочей
* маленькая мелочь
* unshit some ftl shit
* Automatic changelog update
* [Tweak] Random updates (#760)
* Security random updates
* Engineering random updates
* ERT random updates
* Really random
* Important random update
* Automatic changelog update
* Мелочёчки (#761)
* Automatic changelog update
* optimized network stack (#763)
* [Add] Pouches (#762)
* Add: Pouches base and sprites
* Add: Micro-resprite, pouches in secdrobe
* Minus suffix
* Automatic changelog update
* aaaaa (#765)
* Я как всегда кучу хуйни в один пакет сую (#766)
* Automatic changelog update
* а (#767)
* Automatic changelog update
* fix (#768)
* optimizaaaaaations (#769)
* Переводы (#770)
* Мелочёчки
* А когда ты будешь делать что-то полезное, кроме переводов?
* Я удалил НаноТрейзен
* Automatic changelog update
* fixed dumb shit that nobody cares (#772)
* Automatic changelog update
* Фикс взрывной ручки (#771)
* Automatic changelog update
* угу (#775)
* fix yaica (#773)
* Automatic changelog update
* Revert "fix yaica (#773)" (#776)
This reverts commit 9739d41607.
* fix retard (#777)
* fuck (#780)
* ВНИМАНИЕ!!! ОБНАРУЖЕНЫ УЛИТКИ!!! (#774)
* Automatic changelog update
* Локализация + ЕБУЧИЙ ПИКСЕЛЬ (#778)
* Перевод №1
* Перевод №2
* Пиксель
* сейфы
* сканер аномалий
* Перевод пИИ
* Перевод №3
* Перевод сканера здоровья
* Дионы
* Перевод экспедиций
* Automatic changelog update
* Фиксики работают сверхурочно (#781)
* Automatic changelog update
* Это заняло больше времени, чем я думал (#782)
* Automatic changelog update
---------
Co-authored-by: Jabak <163307958+Jabaks@users.noreply.github.com>
Co-authored-by: RavmorganButOnCocaine <valtos@nextmail.ru>
Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
Co-authored-by: Vorge7 <vorge228@gmail.com>
Co-authored-by: Valtos <valtos@spaces.ru>
Co-authored-by: haiwwkes <49613070+rhailrake@users.noreply.github.com>
Co-authored-by: keslik <114428094+keslik1313@users.noreply.github.com>
155 lines
6.8 KiB
C#
155 lines
6.8 KiB
C#
using Content.Shared._White.BuffedFlashGrenade;
|
|
using Content.Shared._White.Events;
|
|
using Content.Shared._White.StaminaProtection;
|
|
using Content.Shared.Changeling;
|
|
using Content.Shared.Chemistry;
|
|
using Content.Shared.Damage;
|
|
using Content.Shared.Electrocution;
|
|
using Content.Shared.Explosion;
|
|
using Content.Shared.Eye.Blinding.Systems;
|
|
using Content.Shared.IdentityManagement.Components;
|
|
using Content.Shared.Inventory.Events;
|
|
using Content.Shared.Movement.Systems;
|
|
using Content.Shared.Overlays;
|
|
using Content.Shared.Radio;
|
|
using Content.Shared.Slippery;
|
|
using Content.Shared.Strip.Components;
|
|
using Content.Shared.Temperature;
|
|
using Content.Shared.Verbs;
|
|
|
|
namespace Content.Shared.Inventory;
|
|
|
|
public partial class InventorySystem
|
|
{
|
|
public void InitializeRelay()
|
|
{
|
|
SubscribeLocalEvent<InventoryComponent, DamageModifyEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, ElectrocutionAttemptEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, SlipAttemptEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshMovementSpeedModifiersEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, BeforeStripEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, SeeIdentityAttemptEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, ModifyChangedTemperatureEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, AdjustTemperatureEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, StaminaDamageModifyEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, ChemRegenModifyEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, ChangelingRefundEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, EnergyDomeClothesTurnOffEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, GetFlashbangedEvent>(RelayInventoryEvent); // WD
|
|
SubscribeLocalEvent<InventoryComponent, GetDefaultRadioChannelEvent>(RelayInventoryEvent);
|
|
|
|
// by-ref events
|
|
SubscribeLocalEvent<InventoryComponent, GetExplosionResistanceEvent>(RefRelayInventoryEvent);
|
|
|
|
// Eye/vision events
|
|
SubscribeLocalEvent<InventoryComponent, CanSeeAttemptEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, GetEyeProtectionEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, GetBlurEvent>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, SolutionScanEvent>(RelayInventoryEvent);
|
|
|
|
// ComponentActivatedClientSystems
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowJobIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowHealthBarsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowHealthIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowHungerIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowThirstIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowMindShieldIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowAntagonistIconsComponent>>(RelayInventoryEvent);
|
|
SubscribeLocalEvent<InventoryComponent, RefreshEquipmentHudEvent<ShowCriminalRecordIconsComponent>>(RelayInventoryEvent);
|
|
|
|
SubscribeLocalEvent<InventoryComponent, GetVerbsEvent<EquipmentVerb>>(OnGetEquipmentVerbs);
|
|
}
|
|
|
|
protected void RefRelayInventoryEvent<T>(EntityUid uid, InventoryComponent component, ref T args) where T : IInventoryRelayEvent
|
|
{
|
|
RelayEvent((uid, component), ref args);
|
|
}
|
|
|
|
protected void RelayInventoryEvent<T>(EntityUid uid, InventoryComponent component, T args) where T : IInventoryRelayEvent
|
|
{
|
|
RelayEvent((uid, component), args);
|
|
}
|
|
|
|
public void RelayEvent<T>(Entity<InventoryComponent> inventory, ref T args) where T : IInventoryRelayEvent
|
|
{
|
|
if (args.TargetSlots == SlotFlags.NONE)
|
|
return;
|
|
|
|
// this copies the by-ref event if it is a struct
|
|
var ev = new InventoryRelayedEvent<T>(args);
|
|
var enumerator = new InventorySlotEnumerator(inventory, args.TargetSlots);
|
|
while (enumerator.NextItem(out var item))
|
|
{
|
|
RaiseLocalEvent(item, ev);
|
|
}
|
|
|
|
// and now we copy it back
|
|
args = ev.Args;
|
|
}
|
|
|
|
public void RelayEvent<T>(Entity<InventoryComponent> inventory, T args) where T : IInventoryRelayEvent
|
|
{
|
|
if (args.TargetSlots == SlotFlags.NONE)
|
|
return;
|
|
|
|
var ev = new InventoryRelayedEvent<T>(args);
|
|
var enumerator = new InventorySlotEnumerator(inventory, args.TargetSlots);
|
|
while (enumerator.NextItem(out var item))
|
|
{
|
|
RaiseLocalEvent(item, ev);
|
|
}
|
|
}
|
|
|
|
private void OnGetEquipmentVerbs(EntityUid uid, InventoryComponent component, GetVerbsEvent<EquipmentVerb> args)
|
|
{
|
|
// Automatically relay stripping related verbs to all equipped clothing.
|
|
var ev = new InventoryRelayedEvent<GetVerbsEvent<EquipmentVerb>>(args);
|
|
var enumerator = new InventorySlotEnumerator(component);
|
|
while (enumerator.NextItem(out var item, out var slotDef))
|
|
{
|
|
if (!slotDef.StripHidden || args.User == uid)
|
|
RaiseLocalEvent(item, ev);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Event wrapper for relayed events.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This avoids nested inventory relays, and makes it easy to have certain events only handled by the initial
|
|
/// target entity. E.g. health based movement speed modifiers should not be handled by a hat, even if that hat
|
|
/// happens to be a dead mouse. Clothing that wishes to modify movement speed must subscribe to
|
|
/// InventoryRelayedEvent<RefreshMovementSpeedModifiersEvent>
|
|
/// </remarks>
|
|
public sealed class InventoryRelayedEvent<TEvent> : EntityEventArgs
|
|
{
|
|
public TEvent Args;
|
|
|
|
public InventoryRelayedEvent(TEvent args)
|
|
{
|
|
Args = args;
|
|
}
|
|
}
|
|
|
|
public interface IClothingSlots
|
|
{
|
|
SlotFlags Slots { get; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Events that should be relayed to inventory slots should implement this interface.
|
|
/// </summary>
|
|
public interface IInventoryRelayEvent
|
|
{
|
|
/// <summary>
|
|
/// What inventory slots should this event be relayed to, if any?
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// In general you may want to exclude <see cref="SlotFlags.POCKET"/>, given that those items are not truly
|
|
/// "equipped" by the user.
|
|
/// </remarks>
|
|
public SlotFlags TargetSlots { get; }
|
|
}
|