Files
OldThink/Content.Shared/Inventory/InventorySystem.Relay.cs
BIGZi0348 aabdcec60c Не должно ебануть (#170)
* 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>
2024-11-12 20:33:05 +03:00

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&lt;RefreshMovementSpeedModifiersEvent&gt;
/// </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; }
}