From 74d9298c91d0b92e8a0609fc0c6eddc3801db1c9 Mon Sep 17 00:00:00 2001 From: Ed <145219878+jungarikjan@users.noreply.github.com> Date: Sat, 17 Aug 2024 15:18:35 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=9D=D0=BE=D1=87=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D1=80=D0=B5=D0=BD=D0=B8=D0=B5,=20baby=20(#282)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Медиа** **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [ ] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: - add: Добавлено ночное зрение визору ниндзя + сама система taken from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 --- .../ADT/NightVision/NightVisionOverlay.cs | 117 ++++++++++ .../ADT/NightVision/NightVisionSystem.cs | 84 ++++++++ .../ADT/NightVision/NightVisionSystem.cs | 7 + .../ADTNightVisionVisibleComponent.cs | 25 +++ .../ADT/NightVision/NightVisionComponent.cs | 36 ++++ .../NightVision/NightVisionItemComponent.cs | 28 +++ .../ADT/NightVision/NightVisionItemVisuals.cs | 11 + .../NightVision/SharedNightVisionSystem.cs | 201 ++++++++++++++++++ .../ADT/NightVision/ToggleNightVision.cs | 13 ++ .../Prototypes/ADT/Actions/nightvision.yml | 16 ++ .../Entities/Clothing/Eyes/glasses.yml | 8 + 11 files changed, 546 insertions(+) create mode 100644 Content.Client/ADT/NightVision/NightVisionOverlay.cs create mode 100644 Content.Client/ADT/NightVision/NightVisionSystem.cs create mode 100644 Content.Server/ADT/NightVision/NightVisionSystem.cs create mode 100644 Content.Shared/ADT/NightVision/ADTNightVisionVisibleComponent.cs create mode 100644 Content.Shared/ADT/NightVision/NightVisionComponent.cs create mode 100644 Content.Shared/ADT/NightVision/NightVisionItemComponent.cs create mode 100644 Content.Shared/ADT/NightVision/NightVisionItemVisuals.cs create mode 100644 Content.Shared/ADT/NightVision/SharedNightVisionSystem.cs create mode 100644 Content.Shared/ADT/NightVision/ToggleNightVision.cs create mode 100644 Resources/Prototypes/ADT/Actions/nightvision.yml diff --git a/Content.Client/ADT/NightVision/NightVisionOverlay.cs b/Content.Client/ADT/NightVision/NightVisionOverlay.cs new file mode 100644 index 00000000000..108a88c46a9 --- /dev/null +++ b/Content.Client/ADT/NightVision/NightVisionOverlay.cs @@ -0,0 +1,117 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using System.Numerics; +using Content.Shared.ADT.NightVision; +// using Content.Shared._RMC14.Xenonids; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Enums; +using Robust.Shared.Map; + +namespace Content.Client.ADT.NightVision; + +public sealed class NightVisionOverlay : Overlay +{ + [Dependency] private readonly IEntityManager _entity = default!; + [Dependency] private readonly IPlayerManager _players = default!; + + private readonly ContainerSystem _container; + private readonly TransformSystem _transform; + // private readonly EntityQuery _xenoQuery; + + public override OverlaySpace Space => OverlaySpace.WorldSpace; + + private readonly List _entries = new(); + + public NightVisionOverlay() + { + IoCManager.InjectDependencies(this); + + _container = _entity.System(); + _transform = _entity.System(); + // _xenoQuery = _entity.GetEntityQuery(); + } + + protected override void Draw(in OverlayDrawArgs args) + { + if (!_entity.TryGetComponent(_players.LocalEntity, out NightVisionComponent? nightVision) || + nightVision.State == NightVisionState.Off) + { + return; + } + + var handle = args.WorldHandle; + var eye = args.Viewport.Eye; + var eyeRot = eye?.Rotation ?? default; + + _entries.Clear(); + var entities = _entity.EntityQueryEnumerator(); + while (entities.MoveNext(out var uid, out var visible, out var sprite, out var xform)) + { + _entries.Add(new NightVisionRenderEntry((uid, sprite, xform), + eye?.Position.MapId, + eyeRot, + nightVision.SeeThroughContainers, + visible.Priority, + visible.Transparency)); + } + + _entries.Sort(SortPriority); + + foreach (var entry in _entries) + { + Render(entry.Ent, + entry.Map, + handle, + entry.EyeRot, + entry.NightVisionSeeThroughContainers, + entry.Transparency); + } + + handle.SetTransform(Matrix3x2.Identity); + } + + private static int SortPriority(NightVisionRenderEntry x, NightVisionRenderEntry y) + { + return x.Priority.CompareTo(y.Priority); + } + + private void Render(Entity ent, + MapId? map, + DrawingHandleWorld handle, + Angle eyeRot, + bool seeThroughContainers, + float? transparency) + { + var (uid, sprite, xform) = ent; + if (xform.MapID != map) + return; + + var seeThrough = seeThroughContainers; // && !_xenoQuery.HasComp(uid); + if (!seeThrough && _container.IsEntityOrParentInContainer(uid, xform: xform)) + return; + + var (position, rotation) = _transform.GetWorldPositionRotation(xform); + + var colorCache = sprite.Color; + if (transparency != null) + { + var color = sprite.Color * Color.White.WithAlpha(transparency.Value); + sprite.Color = color; + } + sprite.Render(handle, eyeRot, rotation, position: position); + if (transparency != null) + { + sprite.Color = colorCache; + } + } +} + +public record struct NightVisionRenderEntry( + (EntityUid, SpriteComponent, TransformComponent) Ent, + MapId? Map, + Angle EyeRot, + bool NightVisionSeeThroughContainers, + int Priority, + float? Transparency); diff --git a/Content.Client/ADT/NightVision/NightVisionSystem.cs b/Content.Client/ADT/NightVision/NightVisionSystem.cs new file mode 100644 index 00000000000..d69b4338c9a --- /dev/null +++ b/Content.Client/ADT/NightVision/NightVisionSystem.cs @@ -0,0 +1,84 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Content.Shared.ADT.NightVision; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Player; + +namespace Content.Client.ADT.NightVision; + +public sealed class NightVisionSystem : SharedNightVisionSystem +{ + [Dependency] private readonly ILightManager _light = default!; + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IPlayerManager _player = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnNightVisionAttached); + SubscribeLocalEvent(OnNightVisionDetached); + } + + private void OnNightVisionAttached(Entity ent, ref LocalPlayerAttachedEvent args) + { + NightVisionChanged(ent); + } + + private void OnNightVisionDetached(Entity ent, ref LocalPlayerDetachedEvent args) + { + Off(); + } + + protected override void NightVisionChanged(Entity ent) + { + if (ent != _player.LocalEntity) + return; + + switch (ent.Comp.State) + { + case NightVisionState.Off: + Off(); + break; + case NightVisionState.Half: + Half(ent); + break; + case NightVisionState.Full: + Full(ent); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + protected override void NightVisionRemoved(Entity ent) + { + if (ent != _player.LocalEntity) + return; + + Off(); + } + + private void Off() + { + _overlay.RemoveOverlay(new NightVisionOverlay()); + _light.DrawLighting = true; + } + + private void Half(Entity ent) + { + if (ent.Comp.Overlay) + _overlay.AddOverlay(new NightVisionOverlay()); + + _light.DrawLighting = true; + } + + private void Full(Entity ent) + { + if (ent.Comp.Overlay) + _overlay.AddOverlay(new NightVisionOverlay()); + + _light.DrawLighting = false; + } +} diff --git a/Content.Server/ADT/NightVision/NightVisionSystem.cs b/Content.Server/ADT/NightVision/NightVisionSystem.cs new file mode 100644 index 00000000000..5f6a3602a1c --- /dev/null +++ b/Content.Server/ADT/NightVision/NightVisionSystem.cs @@ -0,0 +1,7 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Content.Shared.ADT.NightVision; + +namespace Content.Server.ADT.NightVision; + +public sealed class NightVisionSystem : SharedNightVisionSystem; diff --git a/Content.Shared/ADT/NightVision/ADTNightVisionVisibleComponent.cs b/Content.Shared/ADT/NightVision/ADTNightVisionVisibleComponent.cs new file mode 100644 index 00000000000..6c5a997453e --- /dev/null +++ b/Content.Shared/ADT/NightVision/ADTNightVisionVisibleComponent.cs @@ -0,0 +1,25 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.NightVision; + +/// +/// For rendering sprites on top of FOV when the user has a . +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class NightVisionVisibleComponent : Component +{ + /// + /// Priority for rendering order. + /// Rendered from lowest to highest, which means higher numbers will be rendered above lower numbers. + /// + [DataField, AutoNetworkedField] + public int Priority = 0; + + /// + /// Transparency of the rendered sprite. + /// + [DataField, AutoNetworkedField] + public float? Transparency = null; +} diff --git a/Content.Shared/ADT/NightVision/NightVisionComponent.cs b/Content.Shared/ADT/NightVision/NightVisionComponent.cs new file mode 100644 index 00000000000..f51be334412 --- /dev/null +++ b/Content.Shared/ADT/NightVision/NightVisionComponent.cs @@ -0,0 +1,36 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Content.Shared.Alert; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.ADT.NightVision; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] +[Access(typeof(SharedNightVisionSystem))] +public sealed partial class NightVisionComponent : Component +{ + [DataField] + public ProtoId? Alert; + + [DataField, AutoNetworkedField] + public NightVisionState State = NightVisionState.Full; + + [DataField, AutoNetworkedField] + public bool Overlay; + + [DataField, AutoNetworkedField] + public bool Innate; + + [DataField, AutoNetworkedField] + public bool SeeThroughContainers; +} + +[Serializable, NetSerializable] +public enum NightVisionState +{ + Off, + Half, + Full +} diff --git a/Content.Shared/ADT/NightVision/NightVisionItemComponent.cs b/Content.Shared/ADT/NightVision/NightVisionItemComponent.cs new file mode 100644 index 00000000000..887d94c0a5a --- /dev/null +++ b/Content.Shared/ADT/NightVision/NightVisionItemComponent.cs @@ -0,0 +1,28 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Content.Shared.Inventory; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ADT.NightVision; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(SharedNightVisionSystem))] +public sealed partial class NightVisionItemComponent : Component +{ + [DataField, AutoNetworkedField] + public EntProtoId ActionId = "ActionToggleNinjaNightVision"; + + [DataField, AutoNetworkedField] + public EntityUid? Action; + + [DataField, AutoNetworkedField] + public EntityUid? User; + + [DataField, AutoNetworkedField] + public bool Toggleable = true; + + // Only allows for a single slotflag right now because some code uses strings and some code uses enums to determine slots :( + [DataField, AutoNetworkedField] + public SlotFlags SlotFlags { get; set; } = SlotFlags.EYES; +} diff --git a/Content.Shared/ADT/NightVision/NightVisionItemVisuals.cs b/Content.Shared/ADT/NightVision/NightVisionItemVisuals.cs new file mode 100644 index 00000000000..a0602cd1910 --- /dev/null +++ b/Content.Shared/ADT/NightVision/NightVisionItemVisuals.cs @@ -0,0 +1,11 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Robust.Shared.Serialization; + +namespace Content.Shared.ADT.NightVision; + +[Serializable, NetSerializable] +public enum NightVisionItemVisuals +{ + Active, +} diff --git a/Content.Shared/ADT/NightVision/SharedNightVisionSystem.cs b/Content.Shared/ADT/NightVision/SharedNightVisionSystem.cs new file mode 100644 index 00000000000..85a7bff3663 --- /dev/null +++ b/Content.Shared/ADT/NightVision/SharedNightVisionSystem.cs @@ -0,0 +1,201 @@ +// taken and adapted from https://github.com/RMC-14/RMC-14?ysclid=lzx00zxd6e53093995 + +using Content.Shared.Actions; +using Content.Shared.Alert; +using Content.Shared.Inventory.Events; +using Content.Shared.Rounding; +using Content.Shared.Toggleable; +using Robust.Shared.Timing; + +namespace Content.Shared.ADT.NightVision; + +public abstract class SharedNightVisionSystem : EntitySystem +{ + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnNightVisionStartup); + SubscribeLocalEvent(OnNightVisionMapInit); + SubscribeLocalEvent(OnNightVisionAfterHandle); + SubscribeLocalEvent(OnNightVisionRemove); + + SubscribeLocalEvent(OnNightVisionItemGetActions); + SubscribeLocalEvent(OnNightVisionItemToggle); + SubscribeLocalEvent(OnNightVisionItemGotEquipped); + SubscribeLocalEvent(OnNightVisionItemGotUnequipped); + SubscribeLocalEvent(OnNightVisionItemActionRemoved); + SubscribeLocalEvent(OnNightVisionItemRemove); + SubscribeLocalEvent(OnNightVisionItemTerminating); + } + + private void OnNightVisionStartup(Entity ent, ref ComponentStartup args) + { + NightVisionChanged(ent); + } + + private void OnNightVisionAfterHandle(Entity ent, ref AfterAutoHandleStateEvent args) + { + NightVisionChanged(ent); + } + + private void OnNightVisionMapInit(Entity ent, ref MapInitEvent args) + { + UpdateAlert(ent); + } + + private void OnNightVisionRemove(Entity ent, ref ComponentRemove args) + { + if (ent.Comp.Alert is { } alert) + _alerts.ClearAlert(ent, alert); + + NightVisionRemoved(ent); + } + + private void OnNightVisionItemGetActions(Entity ent, ref GetItemActionsEvent args) + { + if (args.InHands || !ent.Comp.Toggleable) + return; + + if (ent.Comp.SlotFlags != args.SlotFlags) + return; + + args.AddAction(ref ent.Comp.Action, ent.Comp.ActionId); + } + + private void OnNightVisionItemToggle(Entity ent, ref ToggleActionEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + ToggleNightVisionItem(ent, args.Performer); + } + + private void OnNightVisionItemGotEquipped(Entity ent, ref GotEquippedEvent args) + { + if (ent.Comp.SlotFlags != args.SlotFlags) + return; + + EnableNightVisionItem(ent, args.Equipee); + } + + private void OnNightVisionItemGotUnequipped(Entity ent, ref GotUnequippedEvent args) + { + if (ent.Comp.SlotFlags != args.SlotFlags) + return; + + DisableNightVisionItem(ent, args.Equipee); + } + + private void OnNightVisionItemActionRemoved(Entity ent, ref ActionRemovedEvent args) + { + DisableNightVisionItem(ent, ent.Comp.User); + } + + private void OnNightVisionItemRemove(Entity ent, ref ComponentRemove args) + { + DisableNightVisionItem(ent, ent.Comp.User); + } + + private void OnNightVisionItemTerminating(Entity ent, ref EntityTerminatingEvent args) + { + DisableNightVisionItem(ent, ent.Comp.User); + } + + public void Toggle(Entity ent) + { + if (!Resolve(ent, ref ent.Comp)) + return; + + ent.Comp.State = ent.Comp.State switch + { + NightVisionState.Off => NightVisionState.Half, + NightVisionState.Half => NightVisionState.Full, + NightVisionState.Full => NightVisionState.Off, + _ => throw new ArgumentOutOfRangeException(), + }; + + Dirty(ent); + UpdateAlert((ent, ent.Comp)); + } + + private void UpdateAlert(Entity ent) + { + if (ent.Comp.Alert is { } alert) + { + var level = MathF.Max((int) NightVisionState.Off, (int) ent.Comp.State); + var max = _alerts.GetMaxSeverity(alert); + var severity = max - ContentHelpers.RoundToLevels(level, (int) NightVisionState.Full, max + 1); + _alerts.ShowAlert(ent, alert, (short) severity); + } + + NightVisionChanged(ent); + } + + private void ToggleNightVisionItem(Entity item, EntityUid user) + { + if (item.Comp.User == user && item.Comp.Toggleable) + { + DisableNightVisionItem(item, item.Comp.User); + return; + } + + EnableNightVisionItem(item, user); + } + + private void EnableNightVisionItem(Entity item, EntityUid user) + { + DisableNightVisionItem(item, item.Comp.User); + + item.Comp.User = user; + Dirty(item); + + _appearance.SetData(item, NightVisionItemVisuals.Active, true); + + if (!_timing.ApplyingState) + { + var nightVision = EnsureComp(user); + nightVision.State = NightVisionState.Full; + Dirty(user, nightVision); + } + + _actions.SetToggled(item.Comp.Action, true); + } + + protected virtual void NightVisionChanged(Entity ent) + { + } + + protected virtual void NightVisionRemoved(Entity ent) + { + } + + protected void DisableNightVisionItem(Entity item, EntityUid? user) + { + _actions.SetToggled(item.Comp.Action, false); + + item.Comp.User = null; + Dirty(item); + + _appearance.SetData(item, NightVisionItemVisuals.Active, false); + + if (TryComp(user, out NightVisionComponent? nightVision) && + !nightVision.Innate) + { + RemCompDeferred(user.Value); + } + } + + public void SetSeeThroughContainers(Entity ent, bool see) + { + if (!Resolve(ent, ref ent.Comp, false)) + return; + + ent.Comp.SeeThroughContainers = see; + Dirty(ent); + } +} diff --git a/Content.Shared/ADT/NightVision/ToggleNightVision.cs b/Content.Shared/ADT/NightVision/ToggleNightVision.cs new file mode 100644 index 00000000000..d7b3a10f064 --- /dev/null +++ b/Content.Shared/ADT/NightVision/ToggleNightVision.cs @@ -0,0 +1,13 @@ +using Content.Shared.Alert; + +namespace Content.Shared.ADT.NightVision; + +[DataDefinition] +public sealed partial class ToggleNightVision : IAlertClick +{ + public void AlertClicked(EntityUid player) + { + var entities = IoCManager.Resolve(); + entities.System().Toggle(player); + } +} diff --git a/Resources/Prototypes/ADT/Actions/nightvision.yml b/Resources/Prototypes/ADT/Actions/nightvision.yml new file mode 100644 index 00000000000..d22c98b6cf7 --- /dev/null +++ b/Resources/Prototypes/ADT/Actions/nightvision.yml @@ -0,0 +1,16 @@ +- type: entity + id: ActionToggleNinjaNightVision + categories: [HideSpawnMenu] + name: Toggle ninja visor nightvision + description: Allows you to see even in complete darkness. + components: + - type: InstantAction + icon: + sprite: Clothing/Eyes/Glasses/ninjavisor.rsi + state: icon + iconOn: + sprite: Clothing/Eyes/Glasses/ninjavisor.rsi + state: icon + event: !type:ToggleActionEvent + useDelay: 0.25 + diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index d5200747445..c8c03b0237e 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -243,3 +243,11 @@ - type: Clothing sprite: Clothing/Eyes/Glasses/ninjavisor.rsi - type: FlashImmunity + - type: NightVisionItem + - type: Appearance + - type: GenericVisualizer + visuals: + enum.NightVisionItemVisuals.Active: + icon: + True: { state: icon } + False: { state: icon } From 2e30d882f952c779b9231ea240de4bc7a6cb4223 Mon Sep 17 00:00:00 2001 From: FaDeOkno <143940725+FaDeOkno@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:23:13 +0400 Subject: [PATCH 2/8] =?UTF-8?q?=D0=9B=D1=8E=D1=82=D1=8B=D0=B9=20=D0=BD?= =?UTF-8?q?=D1=91=D1=80=D1=84=20=D1=84=D0=B0=D0=BD=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=20(#286)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR Сильно понёрфил фантома Иллюми жопа. А я просто фиговый дизайнер антагов. **Медиа** **Проверки** - [ ] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [x] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: Котя - tweak: Теперь фантом может перехватывать контроль тела только если цель является сосудом. - tweak: Фантом больше не может использовать способности выше 1 уровня на персонажах, имеющих имплант защиты разума. - tweak: Стоимость крафтов защиты от фантома снизилась в несколько раз. - tweak: Психо-эпидемия теперь заканчивается, если молчать и не слышать никого 15 секунд. - tweak: Фантом получает новые цели одновременно с созданием сосудов. - tweak: Речь фантома теперь видна для призракам. - tweak: Проклятые умирают вместе с фантомом. - tweak: После смерти фантома сосуды и проклятые теряют этот статус. - fix: Исправлено игнорирование фантомом МЩ. --- .../Systems/HallucinationsSystem.cs | 8 + .../Phantom/EntitySystems/PhantomSystem.cs | 169 +++++++++++------- .../ADT/Phantom/EntitySystems/VesselSystem.cs | 4 +- .../ADT/Phantom/Role/PhantomRuleComponent.cs | 3 +- .../ADT/Phantom/Role/PhantomRuleSystem.cs | 54 +++++- .../KillPhantomImmunePersonConditionSystem.cs | 16 +- .../MakeTargetVesselConditionComponent.cs | 4 +- .../PhantomNightmareStartedConditionSystem.cs | 4 +- .../PhantomReincarnateConditionSystem.cs | 4 +- .../Systems/PhantomTyranyConditionSystem.cs | 6 +- .../HallucinationsDiseaseComponent.cs | 3 + .../Phantom/Components/PhantomComponent.cs | 6 +- Content.Shared/ADT/Phantom/SharedPhantom.cs | 43 ++--- .../Phantom/Systems/SharedPhantomSystem.cs | 7 + .../SharedRevolutionarySystem.cs | 15 ++ .../Locale/ru-RU/ADT/Phantom/game-rule.ftl | 1 + .../Locale/ru-RU/ADT/Phantom/phantom.ftl | 3 + .../ADT/Entities/Mobs/Player/phantom.yml | 2 +- .../ADT/Phantom/objective_groups.yml | 4 +- .../ADT/Recipes/Lathes/paranormal.yml | 14 +- 20 files changed, 237 insertions(+), 133 deletions(-) diff --git a/Content.Server/ADT/Hallucinations/Systems/HallucinationsSystem.cs b/Content.Server/ADT/Hallucinations/Systems/HallucinationsSystem.cs index 2e32c6e3feb..693b318e926 100644 --- a/Content.Server/ADT/Hallucinations/Systems/HallucinationsSystem.cs +++ b/Content.Server/ADT/Hallucinations/Systems/HallucinationsSystem.cs @@ -141,6 +141,8 @@ public bool StartEpidemicHallucinations(EntityUid target, string proto) return false; var hallucinations = EnsureComp(target); + hallucinations.EndTime = _timing.CurTime + TimeSpan.FromSeconds(15); + hallucinations.Proto = prototype; hallucinations.Spawns = prototype.Entities; hallucinations.Range = prototype.Range; @@ -224,6 +226,12 @@ public override void Update(float frameTime) var diseaseQuery = EntityQueryEnumerator(); while (diseaseQuery.MoveNext(out var uid, out var stat, out var xform)) { + if (_timing.CurTime >= stat.EndTime) + { + RemCompDeferred(uid); + continue; + } + if (_timing.CurTime < stat.NextSecond) continue; var rate = stat.SpawnRate; diff --git a/Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs b/Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs index ff19e4c79df..4d0d32c975e 100644 --- a/Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs +++ b/Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs @@ -57,7 +57,7 @@ using Content.Shared.Weapons.Melee; using Content.Shared.CombatMode; using Content.Server.Cuffs; -using Content.Server.Humanoid; +using Robust.Server.Player; using Content.Shared.Preferences; using Content.Shared.Ghost; using Content.Shared.Tag; @@ -75,6 +75,7 @@ using Content.Shared.Mobs.Components; using Content.Shared.ADT.Silicon.Components; using Content.Server.Singularity.Events; +using Content.Server.GameTicking.Rules; namespace Content.Server.ADT.Phantom.EntitySystems; @@ -85,10 +86,8 @@ public sealed partial class PhantomSystem : SharedPhantomSystem [Dependency] private readonly StatusEffectsSystem _status = default!; [Dependency] private readonly SharedActionsSystem _action = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedControlledSystem _controlled = default!; - [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly SharedContainerSystem _container = default!; [Dependency] private readonly AlertsSystem _alerts = default!; [Dependency] private readonly IRobustRandom _random = default!; @@ -123,6 +122,9 @@ public sealed partial class PhantomSystem : SharedPhantomSystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly HandsSystem _handsSystem = default!; [Dependency] private readonly CuffableSystem _cuffable = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly PhantomRuleSystem _phantomGameRule = default!; + #endregion public override void Initialize() @@ -131,8 +133,8 @@ public override void Initialize() // Startup SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStatusAdded); SubscribeLocalEvent(OnStatusEnded); @@ -569,14 +571,14 @@ private void OnMakeVessel(EntityUid uid, PhantomComponent component, MakeVesselA if (!HasComp(target)) { - var selfMessage = Loc.GetString("changeling-dna-fail-nohuman", ("target", Identity.Entity(target, EntityManager))); + var selfMessage = Loc.GetString("phantom-fail-nohuman", ("target", Identity.Entity(target, EntityManager))); _popup.PopupEntity(selfMessage, uid, uid); return; } if (HasComp(target)) { - var selfMessage = Loc.GetString("phantom-vessel-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); + var selfMessage = Loc.GetString("phantom-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); _popup.PopupEntity(selfMessage, uid, uid); return; } @@ -616,6 +618,13 @@ private void OnParalysis(EntityUid uid, PhantomComponent component, ParalysisAct var target = args.Target; + if (HasComp(target)) + { + var selfMessage = Loc.GetString("phantom-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); + return; + } + if (!TryUseAbility(uid, target)) return; @@ -766,7 +775,7 @@ private void OnBreakdown(EntityUid uid, PhantomComponent component, BreakdownAct _apcSystem.ApcToggleBreaker(target, apc); success = true; } - if (HasComp(target) && HasComp(target)) //&& _status.TryAddStatusEffect(target, "SeeingStatic", timeStatic, false)) + if (HasComp(target) && HasComp(target) && _status.TryAddStatusEffect(target, "SeeingStatic", timeStatic, false)) { _status.TryAddStatusEffect(target, "KnockedDown", time, false); _status.TryAddStatusEffect(target, "Stun", time, false); @@ -790,7 +799,7 @@ private void OnBreakdown(EntityUid uid, PhantomComponent component, BreakdownAct _apcSystem.ApcToggleBreaker(entity, entApc); success = true; } - if (HasComp(entity) && HasComp(entity)) //&& _status.TryAddStatusEffect(entity, "SeeingStatic", timeStatic, false)) + if (HasComp(entity) && HasComp(entity) && _status.TryAddStatusEffect(entity, "SeeingStatic", timeStatic, false)) { _status.TryAddStatusEffect(entity, "KnockedDown", time, false); _status.TryAddStatusEffect(entity, "Stun", time, false); @@ -1193,6 +1202,13 @@ private void OnBlinding(EntityUid uid, PhantomComponent component, BloodBlinding return; } + if (HasComp(target)) + { + var selfMessage = Loc.GetString("phantom-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); + return; + } + UpdateEctoplasmSpawn(uid); args.Handled = true; @@ -1272,58 +1288,41 @@ private void OnPsychoEpidemic(EntityUid uid, PhantomComponent component, PsychoE if (args.Handled) return; - if (!component.EpidemicActive) + List list = new(); + foreach (var (ent, humanoid) in _lookup.GetEntitiesInRange(Transform(uid).Coordinates, 150f)) { - List list = new(); - foreach (var (ent, humanoid) in _lookup.GetEntitiesInRange(Transform(uid).Coordinates, 150f)) - { - if (_mindSystem.TryGetMind(ent, out _, out _) && TryComp(ent, out var state) && state.CurrentState == Shared.Mobs.MobState.Alive) - list.Add(ent); - } - - if (list.Count <= 0) - { - var failMessage = Loc.GetString("phantom-epidemic-fail"); - _popup.PopupEntity(failMessage, uid, uid); - return; - } - - var (target, _) = _random.Pick(_lookup.GetEntitiesInRange(Transform(uid).Coordinates, 150f)); - - if (!_hallucinations.StartEpidemicHallucinations(target, component.HallucinationsPrototype)) - { - var failMessage = Loc.GetString("phantom-epidemic-fail"); - _popup.PopupEntity(failMessage, uid, uid); - return; - } - - if (_mindSystem.TryGetMind(uid, out _, out var mind) && mind.Session != null) - _audio.PlayGlobal(component.PsychoSound, mind.Session); + if ( + _mindSystem.TryGetMind(ent, out _, out _) && + TryComp(ent, out var state) && + state.CurrentState == Shared.Mobs.MobState.Alive && + !HasComp(ent)) + list.Add(ent); + } - var selfMessage = Loc.GetString("phantom-epidemic-success", ("name", Identity.Entity(target, EntityManager))); - _popup.PopupEntity(selfMessage, uid, uid); + if (list.Count <= 0) + { + var failMessage = Loc.GetString("phantom-epidemic-fail"); + _popup.PopupEntity(failMessage, uid, uid); + return; + } - component.EpidemicActive = true; + var (target, _) = _random.Pick(_lookup.GetEntitiesInRange(Transform(uid).Coordinates, 150f)); - UpdateEctoplasmSpawn(uid); - args.Handled = true; - } - else + if (!_hallucinations.StartEpidemicHallucinations(target, component.HallucinationsPrototype)) { - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var mob, out var comp)) - { - RemComp(mob); - } + var failMessage = Loc.GetString("phantom-epidemic-fail"); + _popup.PopupEntity(failMessage, uid, uid); + return; + } - var selfMessage = Loc.GetString("phantom-epidemic-end"); - _popup.PopupEntity(selfMessage, uid, uid); + if (_mindSystem.TryGetMind(uid, out _, out var mind) && mind.Session != null) + _audio.PlayGlobal(component.PsychoSound, mind.Session); - component.EpidemicActive = false; + var selfMessage = Loc.GetString("phantom-epidemic-success", ("name", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); - UpdateEctoplasmSpawn(uid); - args.Handled = true; - } + UpdateEctoplasmSpawn(uid); + args.Handled = true; } private void OnHelpingHand(EntityUid uid, PhantomComponent component, PhantomHelpingHelpActionEvent args) @@ -1379,6 +1378,20 @@ private void OnControl(EntityUid uid, PhantomComponent component, PhantomControl return; } + if (!HasComp(target)) + { + var selfMessage = Loc.GetString("phantom-puppeter-fail-notvessel", ("target", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); + return; + } + + if (HasComp(target)) + { + var selfMessage = Loc.GetString("phantom-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); + return; + } + if (_mindSystem.TryGetMind(uid, out _, out var mind))// && //_mindSystem.TryGetMind(target, out _, out var targetMind)) { @@ -1413,6 +1426,13 @@ private void OnNightmare(EntityUid uid, PhantomComponent component, NightmareFin } var target = component.Holder; + if (HasComp(target)) + { + var selfMessage = Loc.GetString("phantom-fail-mindshield", ("target", Identity.Entity(target, EntityManager))); + _popup.PopupEntity(selfMessage, uid, uid); + return; + } + if (!TryUseAbility(uid, target)) return; @@ -1480,6 +1500,20 @@ public void OnTrySpeak(EntityUid uid, PhantomComponent component, AlternativeSpe { args.Cancel(); + foreach (var ghost in _playerManager.Sessions) + { + var ent = ghost.AttachedEntity; + if (!HasComp(ent)) + continue; + var wrappedMessage = Loc.GetString("chat-manager-entity-say-wrap-message", + ("entityName", Identity.Entity(uid, EntityManager)), + ("verb", "шепчет"), + ("fontType", "Default"), + ("fontSize", 12), + ("message", args.Message)); + + _chatManager.ChatMessageToOne(ChatChannel.Local, args.Message, wrappedMessage, uid, false, ghost.Channel); + } if (args.Radio) { var popupMessage = Loc.GetString("phantom-say-target"); @@ -1644,7 +1678,7 @@ private void OnTryMove(EntityUid uid, PhantomComponent component, UpdateCanMoveE args.Cancel(); } - private void OnLevelChanged(EntityUid uid, PhantomComponent component, RefreshPhantomLevelEvent args) + private void OnLevelChanged(EntityUid uid, PhantomComponent component, ref RefreshPhantomLevelEvent args) { SelectStyle(uid, component, component.CurrentStyle, true); _alerts.ShowAlert(uid, _proto.Index(component.VesselCountAlert), (short) Math.Clamp(component.Vessels.Count, 0, 10)); @@ -1746,7 +1780,7 @@ public bool TryRevive(EntityUid uid, PhantomComponent component) if (allowedVessels.Count < 1) { var ev = new PhantomDiedEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); return false; } @@ -1863,8 +1897,8 @@ public void Haunt(EntityUid uid, EntityUid target, PhantomComponent component) holderComp.Phantom = uid; _actionBlocker.UpdateCanMove(uid); - var eye = EnsureComp(uid); - _eye.SetDrawFov(uid, true, eye); + // var eye = EnsureComp(uid); + // _eye.SetDrawFov(uid, true, eye); _appearance.SetData(uid, PhantomVisuals.Haunting, true); var xform = Transform(uid); @@ -1942,8 +1976,8 @@ public void StopHaunt(EntityUid uid, EntityUid holder, PhantomComponent? compone _alerts.ClearAlert(uid, component.HauntedAlert); //_action.RemoveAction(uid, component.PhantomStopHauntActionEntity); - var eye = EnsureComp(uid); - _eye.SetDrawFov(uid, false, eye); + // var eye = EnsureComp(uid); + // _eye.SetDrawFov(uid, false, eye); _appearance.SetData(uid, PhantomVisuals.Haunting, false); Dirty(holder, holderComp); @@ -2046,7 +2080,7 @@ public void MakePuppet(EntityUid target, PhantomComponent component) /// Phantom uid /// Phantom component /// Is there are any altars - public bool CheckAltars(EntityUid uid, PhantomComponent component) + public bool CheckAltars(EntityUid uid, PhantomComponent? component = null) { var xformQuery = GetEntityQuery(); @@ -2087,14 +2121,11 @@ public void OnHelpingHandAccept(EntityUid target, PhantomComponent component) /// Target uid (nullable) /// Phantom component /// Is phantom able to use this ability - private bool TryUseAbility(EntityUid uid, EntityUid? trgt = null, PhantomComponent? comp = null) + private bool TryUseAbility(EntityUid uid, EntityUid? trgt = null) { - if (!Resolve(uid, ref comp)) - return false; - if (trgt == null) { - if (CheckAltars(uid, comp)) + if (CheckAltars(uid)) return false; return true; } @@ -2384,7 +2415,7 @@ public void Nightmare(EntityUid uid, PhantomComponent component) return; var ev = new PhantomNightmareEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); var list = new List(); foreach (var vessel in component.Vessels) @@ -2427,7 +2458,7 @@ public void Tyrany(EntityUid uid, PhantomComponent component) return; var ev = new PhantomTyranyEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); _alertLevel.SetLevel(stationUid.Value, "delta", false, false, true, true); _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("phantom-tyrany-announcement"), Loc.GetString("phantom-announcer"), true, component.TyranySound, Color.DarkCyan); @@ -2523,7 +2554,7 @@ public void Oblivion(EntityUid uid, PhantomComponent component) { _mindSystem.TransferTo(mindId, human); var ev = new PhantomReincarnatedEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); QueueDel(uid); _euiManager.OpenEui(new PhantomAmnesiaEui(), selfMind.Session); _audio.PlayGlobal(component.OblivionSong, selfMind.Session); @@ -2574,7 +2605,7 @@ public void Deathmatch(EntityUid uid, PhantomComponent component) { _mindSystem.TransferTo(selfMindId, human); var ev = new PhantomReincarnatedEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); QueueDel(uid); } } @@ -2606,7 +2637,7 @@ public void Blessing(EntityUid uid, PhantomComponent component) { _mindSystem.TransferTo(selfMindId, human); var ev = new PhantomReincarnatedEvent(); - RaiseLocalEvent(uid, ev); + RaiseLocalEvent(uid, ref ev); QueueDel(uid); _audio.PlayGlobal(component.HelpSong, selfMind.Session); } diff --git a/Content.Server/ADT/Phantom/EntitySystems/VesselSystem.cs b/Content.Server/ADT/Phantom/EntitySystems/VesselSystem.cs index 706cb35c48b..e4344e80410 100644 --- a/Content.Server/ADT/Phantom/EntitySystems/VesselSystem.cs +++ b/Content.Server/ADT/Phantom/EntitySystems/VesselSystem.cs @@ -40,7 +40,7 @@ private void OnShutdown(EntityUid uid, VesselComponent component, ComponentShutd phantom.Vessels.Remove(uid); var ev = new RefreshPhantomLevelEvent(); - RaiseLocalEvent(component.Phantom, ev); + RaiseLocalEvent(component.Phantom, ref ev); _phantom.PopulateVesselMenu(component.Phantom); if (phantom.Holder == uid) @@ -104,7 +104,7 @@ private void OnDeleted(EntityUid uid, VesselComponent component, EntityTerminati phantom.Vessels.Remove(uid); var ev = new RefreshPhantomLevelEvent(); - RaiseLocalEvent(component.Phantom, ev); + RaiseLocalEvent(component.Phantom, ref ev); if (phantom.Holder == uid) _phantom.StopHaunt(component.Phantom, uid, phantom); diff --git a/Content.Server/ADT/Phantom/Role/PhantomRuleComponent.cs b/Content.Server/ADT/Phantom/Role/PhantomRuleComponent.cs index f258a311d03..9dc68c11173 100644 --- a/Content.Server/ADT/Phantom/Role/PhantomRuleComponent.cs +++ b/Content.Server/ADT/Phantom/Role/PhantomRuleComponent.cs @@ -4,6 +4,7 @@ using Content.Shared.Random; using Robust.Shared.Audio; using Content.Shared.Dataset; +using Content.Shared.Mind; namespace Content.Server.GameTicking.Rules.Components; @@ -63,7 +64,7 @@ public sealed partial class PhantomRuleComponent : Component [DataField] public Dictionary OperativeMindPendingData = new(); - public EntityUid PhantomMind = new(); + public Entity PhantomMind = new(); [DataField] public ProtoId ObjectiveGroup = "PhantomObjectiveGroups"; diff --git a/Content.Server/ADT/Phantom/Role/PhantomRuleSystem.cs b/Content.Server/ADT/Phantom/Role/PhantomRuleSystem.cs index 16ef1344fde..2e52bf05724 100644 --- a/Content.Server/ADT/Phantom/Role/PhantomRuleSystem.cs +++ b/Content.Server/ADT/Phantom/Role/PhantomRuleSystem.cs @@ -19,6 +19,8 @@ using Content.Server.Revolutionary.Components; using Content.Shared.Mind; using Content.Shared.GameTicking.Components; +using Content.Shared.Stunnable; +using Content.Shared.Damage; namespace Content.Server.GameTicking.Rules; @@ -33,6 +35,8 @@ public sealed class PhantomRuleSystem : GameRuleSystem [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private readonly ObjectivesSystem _objectives = default!; + [Dependency] private readonly SharedStunSystem _sharedStun = default!; + [Dependency] private readonly DamageableSystem _damage = default!; private ISawmill _sawmill = default!; @@ -46,6 +50,8 @@ public override void Initialize() SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnMindAdded); + SubscribeLocalEvent(OnNewLevelReached); + SubscribeLocalEvent(OnCommandMobStateChanged); SubscribeLocalEvent(OnTyranyAttempt); @@ -101,8 +107,25 @@ protected override void AppendRoundEndText(EntityUid uid, PhantomRuleComponent c } } - private void OnMobStateChanged(EntityUid uid, PhantomComponent component, PhantomDiedEvent args) + private void OnMobStateChanged(EntityUid uid, PhantomComponent component, ref PhantomDiedEvent args) { + foreach (var vessel in component.Vessels) + { + var stunTime = TimeSpan.FromSeconds(4); + RemComp(uid); + _sharedStun.TryParalyze(vessel, stunTime, true); + } + foreach (var cursed in component.CursedVessels) + { + var damage = new DamageSpecifier(); + damage.DamageDict.Add("Blunt", 200); + damage.DamageDict.Add("Cellular", 200); + _damage.TryChangeDamage(cursed, damage, true); + RemComp(uid); + } + if (HasComp(component.Holder)) + RemCompDeferred(component.Holder); + var ruleQuery = QueryActiveRules(); while (ruleQuery.MoveNext(out _, out _, out var phantom, out _)) { @@ -113,7 +136,7 @@ private void OnMobStateChanged(EntityUid uid, PhantomComponent component, Phanto } } - private void OnTyranyAttempt(EntityUid uid, PhantomComponent component, PhantomTyranyEvent args) + private void OnTyranyAttempt(EntityUid uid, PhantomComponent component, ref PhantomTyranyEvent args) { var ruleQuery = QueryActiveRules(); while (ruleQuery.MoveNext(out _, out _, out var phantom, out _)) @@ -123,7 +146,7 @@ private void OnTyranyAttempt(EntityUid uid, PhantomComponent component, PhantomT } } - private void OnNightmareAttempt(EntityUid uid, PhantomComponent component, PhantomNightmareEvent args) + private void OnNightmareAttempt(EntityUid uid, PhantomComponent component, ref PhantomNightmareEvent args) { var ruleQuery = QueryActiveRules(); while (ruleQuery.MoveNext(out _, out _, out var phantom, out _)) @@ -133,7 +156,7 @@ private void OnNightmareAttempt(EntityUid uid, PhantomComponent component, Phant } } - private void OnReincarnation(EntityUid uid, PhantomComponent component, PhantomReincarnatedEvent args) + private void OnReincarnation(EntityUid uid, PhantomComponent component, ref PhantomReincarnatedEvent args) { var ruleQuery = QueryActiveRules(); while (ruleQuery.MoveNext(out _, out _, out var phantom, out _)) @@ -155,9 +178,13 @@ private void OnMindAdded(EntityUid uid, PhantomComponent component, MindAddedMes while (query.MoveNext(out _, out _, out var nukeops, out _)) { _roles.MindAddRole(mindId, new PhantomRoleComponent { PrototypeId = "Phantom" }); - AddObjectives(mindId, mind, nukeops); + var finObjective = _objectives.GetRandomObjective(mindId, mind, nukeops.FinalObjectiveGroup, 10f); + if (finObjective == null) + return; + + _mind.AddObjective(mindId, mind, finObjective.Value); nukeops.OperativeMindPendingData.Remove(uid); - nukeops.PhantomMind = mindId; + nukeops.PhantomMind = (mindId, mind); _antagSelection.SendBriefing(mind.Session, Loc.GetString("phantom-welcome"), Color.BlueViolet, component.GreetSoundNotification); if (mind.Session is not { } playerSession) @@ -168,6 +195,21 @@ private void OnMindAdded(EntityUid uid, PhantomComponent component, MindAddedMes } } + private void OnNewLevelReached(EntityUid uid, PhantomComponent component, ref PhantomLevelReachedEvent args) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out _, out var phantom, out _)) + { + var objective = _objectives.GetRandomObjective(phantom.PhantomMind.Owner, phantom.PhantomMind.Comp, phantom.ObjectiveGroup, _cfg.GetCVar(CCVars.PhantomMaxDifficulty)); + if (objective == null) + continue; + + _mind.AddObjective(phantom.PhantomMind.Owner, phantom.PhantomMind.Comp, objective.Value); + var adding = Comp(objective.Value).Difficulty; + Log.Debug($"Added objective {ToPrettyString(objective):objective} with {adding} difficulty"); + } + } + private void SetWinType(EntityUid uid, PhantomWinType type, PhantomRuleComponent? component = null, bool endRound = true) { if (!Resolve(uid, ref component)) diff --git a/Content.Server/Objectives/Systems/KillPhantomImmunePersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPhantomImmunePersonConditionSystem.cs index 91e3080c93d..d1529cc50d2 100644 --- a/Content.Server/Objectives/Systems/KillPhantomImmunePersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPhantomImmunePersonConditionSystem.cs @@ -8,7 +8,7 @@ using Robust.Shared.Random; using Content.Shared.ADT.Phantom.Components; -namespace Content.Server.Objectives.Systems; +namespace Content.Server.Objectives.Systems; // ADT file /// /// Handles kill person condition logic and picking random kill targets. @@ -59,9 +59,19 @@ private void OnPersonAssigned(EntityUid uid, PickPhantomImmunePersonComponent co args.Cancelled = true; return; } + var resultList = new List(); + + foreach (var item in allHumans) // Don't pick heads because they may be tyrany targets + { + if (_job.MindTryGetJob(item, out _, out var prototype) && prototype.RequireAdminNotify) // Why is it named RequireAdminNotify? Anyway, this checks if this mind is a command staff + continue; + resultList.Add(item); + } + var pickedTarget = _random.Pick(resultList); + + if (TryComp(pickedTarget, out var mind) && mind.OwnedEntity != null) + EnsureComp(mind.OwnedEntity.Value); - var pickedTarget = _random.Pick(allHumans); - EnsureComp(pickedTarget); _target.SetTarget(uid, pickedTarget, target); } diff --git a/Content.Server/Objectives/Systems/MakeTargetVesselConditionComponent.cs b/Content.Server/Objectives/Systems/MakeTargetVesselConditionComponent.cs index 947f694a98a..1d4d8bfc381 100644 --- a/Content.Server/Objectives/Systems/MakeTargetVesselConditionComponent.cs +++ b/Content.Server/Objectives/Systems/MakeTargetVesselConditionComponent.cs @@ -8,10 +8,10 @@ using Robust.Shared.Random; using Content.Shared.ADT.Phantom.Components; -namespace Content.Server.Objectives.Systems; +namespace Content.Server.Objectives.Systems; // ADT filt /// -/// Handles kill person condition logic and picking random kill targets. +/// Handles turning person into a vessel /// public sealed class MakeTargetVesselConditionSystem : EntitySystem { diff --git a/Content.Server/Objectives/Systems/PhantomNightmareStartedConditionSystem.cs b/Content.Server/Objectives/Systems/PhantomNightmareStartedConditionSystem.cs index d9fcf804b91..66fe25fe848 100644 --- a/Content.Server/Objectives/Systems/PhantomNightmareStartedConditionSystem.cs +++ b/Content.Server/Objectives/Systems/PhantomNightmareStartedConditionSystem.cs @@ -8,10 +8,10 @@ using Robust.Shared.Random; using Content.Shared.ADT.Phantom.Components; -namespace Content.Server.Objectives.Systems; +namespace Content.Server.Objectives.Systems; // ADT file /// -/// Handles kill person condition logic and picking random kill targets. +/// Final phantom objective /// public sealed class PhantomNightmareStartedConditionSystem : EntitySystem { diff --git a/Content.Server/Objectives/Systems/PhantomReincarnateConditionSystem.cs b/Content.Server/Objectives/Systems/PhantomReincarnateConditionSystem.cs index 79ba4971577..d7355b54383 100644 --- a/Content.Server/Objectives/Systems/PhantomReincarnateConditionSystem.cs +++ b/Content.Server/Objectives/Systems/PhantomReincarnateConditionSystem.cs @@ -8,10 +8,10 @@ using Robust.Shared.Random; using Content.Shared.ADT.Phantom.Components; -namespace Content.Server.Objectives.Systems; +namespace Content.Server.Objectives.Systems; // ADT file /// -/// Handles kill person condition logic and picking random kill targets. +/// Final phantom objective /// public sealed class PhantomReincarnateConditionSystem : EntitySystem { diff --git a/Content.Server/Objectives/Systems/PhantomTyranyConditionSystem.cs b/Content.Server/Objectives/Systems/PhantomTyranyConditionSystem.cs index e9ec5f02b0d..43aaf91d3b3 100644 --- a/Content.Server/Objectives/Systems/PhantomTyranyConditionSystem.cs +++ b/Content.Server/Objectives/Systems/PhantomTyranyConditionSystem.cs @@ -13,10 +13,10 @@ using Content.Shared.Mobs.Components; using Content.Server.Revolutionary.Components; -namespace Content.Server.Objectives.Systems; +namespace Content.Server.Objectives.Systems; // ADT file /// -/// Handles kill person condition logic and picking random kill targets. +/// Final phantom objective /// public sealed class PhantomTyranyConditionSystem : EntitySystem { @@ -76,6 +76,6 @@ private float GetProgress(EntityUid? uid) } } - return Math.Clamp(dead / commandList.Count, 0f, 1f); + return Math.Clamp(dead / commandList.Count, 0f, component.TyranyStarted ? 1f : 0.8f); } } diff --git a/Content.Shared/ADT/Hallucinations/Components/HallucinationsDiseaseComponent.cs b/Content.Shared/ADT/Hallucinations/Components/HallucinationsDiseaseComponent.cs index e78a2a74d94..a669c4524d6 100644 --- a/Content.Shared/ADT/Hallucinations/Components/HallucinationsDiseaseComponent.cs +++ b/Content.Shared/ADT/Hallucinations/Components/HallucinationsDiseaseComponent.cs @@ -38,6 +38,9 @@ public sealed partial class HallucinationsDiseaseComponent : Component [DataField, ViewVariables(VVAccess.ReadWrite)] public float CurChance = 0.1f; + [DataField, ViewVariables(VVAccess.ReadWrite)] + public TimeSpan? EndTime; + public List Spawns = new(); [DataField] diff --git a/Content.Shared/ADT/Phantom/Components/PhantomComponent.cs b/Content.Shared/ADT/Phantom/Components/PhantomComponent.cs index b800e000bed..03bba9d56ba 100644 --- a/Content.Shared/ADT/Phantom/Components/PhantomComponent.cs +++ b/Content.Shared/ADT/Phantom/Components/PhantomComponent.cs @@ -310,9 +310,6 @@ public sealed partial class PhantomComponent : Component [ViewVariables(VVAccess.ReadWrite)] public Container HelpingHand = default!; - [ViewVariables(VVAccess.ReadWrite)] - public bool EpidemicActive = false; - [DataField] public int HelpingHandDuration = 10; public int HelpingHandTimer = 0; @@ -330,6 +327,9 @@ public sealed partial class PhantomComponent : Component [DataField] public bool IgnoreLevels = false; + + [DataField] + public int MaxReachedLevel = 0; #region Finale [DataField] public bool FinalAbilityUsed = false; diff --git a/Content.Shared/ADT/Phantom/SharedPhantom.cs b/Content.Shared/ADT/Phantom/SharedPhantom.cs index 0a440c683a5..0040676050b 100644 --- a/Content.Shared/ADT/Phantom/SharedPhantom.cs +++ b/Content.Shared/ADT/Phantom/SharedPhantom.cs @@ -145,40 +145,23 @@ public sealed partial class PuppeterDoAfterEvent : SimpleDoAfterEvent #endregion #region Events -public sealed class RefreshPhantomLevelEvent : EntityEventArgs -{ - public RefreshPhantomLevelEvent() - { - } -} +[ByRefEvent] +public record struct RefreshPhantomLevelEvent(); -public sealed class PhantomReincarnatedEvent : EntityEventArgs -{ - public PhantomReincarnatedEvent() - { - } -} +[ByRefEvent] +public record struct PhantomReincarnatedEvent(); -public sealed class PhantomDiedEvent : EntityEventArgs -{ - public PhantomDiedEvent() - { - } -} +[ByRefEvent] +public record struct PhantomDiedEvent(); -public sealed class PhantomTyranyEvent : EntityEventArgs -{ - public PhantomTyranyEvent() - { - } -} +[ByRefEvent] +public record struct PhantomTyranyEvent(); -public sealed class PhantomNightmareEvent : EntityEventArgs -{ - public PhantomNightmareEvent() - { - } -} +[ByRefEvent] +public record struct PhantomNightmareEvent(); + +[ByRefEvent] +public record struct PhantomLevelReachedEvent(int Level); [DataDefinition] public sealed partial class EctoplasmHitscanHitEvent : EntityEventArgs diff --git a/Content.Shared/ADT/Phantom/Systems/SharedPhantomSystem.cs b/Content.Shared/ADT/Phantom/Systems/SharedPhantomSystem.cs index 1593c5d9890..b85d612c995 100644 --- a/Content.Shared/ADT/Phantom/Systems/SharedPhantomSystem.cs +++ b/Content.Shared/ADT/Phantom/Systems/SharedPhantomSystem.cs @@ -62,6 +62,13 @@ public void SelectStyle(EntityUid uid, PhantomComponent component, string style, if (level > 9 && curseds > 1) AddFromList(uid, component, proto.Lvl5Actions); component.CurrentStyle = style; + + if (component.MaxReachedLevel < level) + { + var ev = new PhantomLevelReachedEvent(level); + component.MaxReachedLevel = level; + RaiseLocalEvent(uid, ref ev); + } } /// diff --git a/Content.Shared/Revolutionary/SharedRevolutionarySystem.cs b/Content.Shared/Revolutionary/SharedRevolutionarySystem.cs index bbf91193cc3..f6cf9e5ffa4 100644 --- a/Content.Shared/Revolutionary/SharedRevolutionarySystem.cs +++ b/Content.Shared/Revolutionary/SharedRevolutionarySystem.cs @@ -6,6 +6,7 @@ using Robust.Shared.GameStates; using Robust.Shared.Player; using Content.Shared.Antag; +using Content.Shared.ADT.Phantom.Components; namespace Content.Shared.Revolutionary; @@ -45,6 +46,20 @@ private void MindShieldImplanted(EntityUid uid, MindShieldComponent comp, MapIni _sharedStun.TryParalyze(uid, stunTime, true); _popupSystem.PopupEntity(Loc.GetString("rev-break-control", ("name", name)), uid); } + // who and why have done it THIS way + // ADT phantom start + if (HasComp(uid)) + { + if (HasComp(uid)) + RemCompDeferred(uid); + else + { + var stunTime = TimeSpan.FromSeconds(4); + RemComp(uid); + _sharedStun.TryParalyze(uid, stunTime, true); + } + } + // ADT phantom end } /// diff --git a/Resources/Locale/ru-RU/ADT/Phantom/game-rule.ftl b/Resources/Locale/ru-RU/ADT/Phantom/game-rule.ftl index aa20446c602..127603829c4 100644 --- a/Resources/Locale/ru-RU/ADT/Phantom/game-rule.ftl +++ b/Resources/Locale/ru-RU/ADT/Phantom/game-rule.ftl @@ -20,5 +20,6 @@ phantom-cond-maxphantomlevelreached = Фантом достиг максимал phantom-welcome = Вы - неупокоенный дух, способный воздействовать на реальность. Пути к выполнению ваших целей могут быть любыми, ограничивает вас лишь фантазия. + Ваши цели будут появляться по мере создания СОСУДОВ, потому следите за их списком. objective-issuer-phantom = [color=#6505ff]Фантом[/color] diff --git a/Resources/Locale/ru-RU/ADT/Phantom/phantom.ftl b/Resources/Locale/ru-RU/ADT/Phantom/phantom.ftl index 2f5400d3862..60839f45c55 100644 --- a/Resources/Locale/ru-RU/ADT/Phantom/phantom.ftl +++ b/Resources/Locale/ru-RU/ADT/Phantom/phantom.ftl @@ -100,6 +100,9 @@ phantom-claws-disappear-self = Призрачные когти исчезают. phantom-fail-nohuman = {CAPITALIZE($target)} не гуманоид. +phantom-fail-mindshield = Имплант защиты разума {CAPITALIZE($target)} не позволяет это сделать. + +phantom-vessel-removed = {CAPITALIZE($target)} больше не является сосудом. # Alerts diff --git a/Resources/Prototypes/ADT/Entities/Mobs/Player/phantom.yml b/Resources/Prototypes/ADT/Entities/Mobs/Player/phantom.yml index 213bc3e5cb3..0841b2cb927 100644 --- a/Resources/Prototypes/ADT/Entities/Mobs/Player/phantom.yml +++ b/Resources/Prototypes/ADT/Entities/Mobs/Player/phantom.yml @@ -44,7 +44,7 @@ #- type: TTS # voice: Kelthuzad - type: Eye - drawFov: false + drawFov: true visMask: - Normal - Ghost diff --git a/Resources/Prototypes/ADT/Phantom/objective_groups.yml b/Resources/Prototypes/ADT/Phantom/objective_groups.yml index 6769eed22d1..85a47928066 100644 --- a/Resources/Prototypes/ADT/Phantom/objective_groups.yml +++ b/Resources/Prototypes/ADT/Phantom/objective_groups.yml @@ -13,7 +13,7 @@ id: PhantomSocialObjectives weights: PhantomKeepAliveObjective: 1 - PhantomEscapeShuttleObjective: 1 + # PhantomEscapeShuttleObjective: 1 - type: weightedRandom id: PhantomFinalObjectiveGroup @@ -25,4 +25,4 @@ weights: PhantomStartNightmareObjective: 1 PhantomReincarnateObjective: 1 - + PhantomTyranyObjective: 1 diff --git a/Resources/Prototypes/ADT/Recipes/Lathes/paranormal.yml b/Resources/Prototypes/ADT/Recipes/Lathes/paranormal.yml index 627a271a370..747e5d9946d 100644 --- a/Resources/Prototypes/ADT/Recipes/Lathes/paranormal.yml +++ b/Resources/Prototypes/ADT/Recipes/Lathes/paranormal.yml @@ -27,7 +27,7 @@ Silver: 250 Gold: 250 Uranium: 1500 - Ectoplasm: 500 + Ectoplasm: 300 - type: latheRecipe id: EctoPistol @@ -40,7 +40,7 @@ Silver: 50 Gold: 1000 Uranium: 500 - Ectoplasm: 500 + Ectoplasm: 150 - type: latheRecipe id: PsiShield @@ -53,7 +53,7 @@ Silver: 50 Gold: 1000 Uranium: 500 - Ectoplasm: 2000 + Ectoplasm: 400 - type: latheRecipe id: PhantomHud @@ -64,7 +64,7 @@ Glass: 1500 Silver: 500 Gold: 100 - Ectoplasm: 2000 + Ectoplasm: 200 - type: latheRecipe id: EctoShield @@ -75,7 +75,7 @@ Plastic: 500 Silver: 500 Gold: 1000 - Ectoplasm: 1000 + Ectoplasm: 300 - type: latheRecipe id: EctoBatterySmall @@ -84,7 +84,7 @@ materials: Steel: 300 Glass: 300 - Ectoplasm: 100 + Ectoplasm: 50 - type: latheRecipe id: EctoBattery @@ -93,4 +93,4 @@ materials: Steel: 500 Glass: 500 - Ectoplasm: 200 + Ectoplasm: 100 From f74f43b14bd646033c0aa1dcddd6bacc64b92449 Mon Sep 17 00:00:00 2001 From: FaDeOkno <143940725+FaDeOkno@users.noreply.github.com> Date: Sat, 17 Aug 2024 17:28:47 +0400 Subject: [PATCH 3/8] =?UTF-8?q?=D0=94=D0=BB=D0=B8=D0=BD=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20(#287)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR Увеличил лимит символов в имени **Медиа** **Проверки** - [ ] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [ ] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [ ] Я запускал локальный сервер со своими изменениями и всё протестировал. - [ ] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: Котя - tweak: Снова можно делать длинные имена --- Content.Shared/Preferences/HumanoidCharacterProfile.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Shared/Preferences/HumanoidCharacterProfile.cs b/Content.Shared/Preferences/HumanoidCharacterProfile.cs index b0579b09797..e6873680a47 100644 --- a/Content.Shared/Preferences/HumanoidCharacterProfile.cs +++ b/Content.Shared/Preferences/HumanoidCharacterProfile.cs @@ -30,7 +30,7 @@ public sealed partial class HumanoidCharacterProfile : ICharacterProfile private static readonly Regex RestrictedNameRegex = new("[^А-Яа-яёЁ0-9' -]"); // Corvax-Localization private static readonly Regex ICNameCaseRegex = new(@"^(?\w)|\b(?\w)(?=\w*$)"); - public const int MaxNameLength = 32; + public const int MaxNameLength = 96; // ну тип ADT public const int MaxDescLength = 512; /// From 42bfac1349c0c4619ff8f9b1eeb1dd2295c52bdb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 18:18:41 +0400 Subject: [PATCH 4/8] Auto CL update (#239) No cl, no fun Co-authored-by: github-actions[bot] --- Resources/Changelog/ChangelogADT.yml | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/Resources/Changelog/ChangelogADT.yml b/Resources/Changelog/ChangelogADT.yml index 8f3c304674f..972b4d25145 100644 --- a/Resources/Changelog/ChangelogADT.yml +++ b/Resources/Changelog/ChangelogADT.yml @@ -2210,3 +2210,72 @@ Entries: type: Fix} time: '2024-08-13T18:21:15Z' id: 239 + - author: Котя + changes: + - {message: Исправлено проигрывание барков на дальних дистанциях, type: Fix} + - {message: Исправлена видимость призраков при галлюцинациях, type: Fix} + - {message: Исправлены пустые сообщения, type: Fix} + time: '2024-08-14T14:37:39Z' + id: 240 + - author: Котя + changes: + - {message: Исправлен спавн КПБ без ключей шифрования, type: Fix} + time: '2024-08-14T14:38:48Z' + id: 241 + - author: Darki255 + changes: + - {message: 'Добавлены рога, кастомизация', type: Add} + time: '2024-08-14T20:49:52Z' + id: 242 + - author: FaDeOkno + changes: + - {message: Фикс языков фантома, type: Fix} + time: '2024-08-15T10:43:24Z' + id: 243 + - author: KashRas2 + changes: + - {message: 'Временно отключил ттс у вендоматов, чтоб зря не нагружали наши + 4 запроса в секунду.', type: Tweak} + time: '2024-08-15T20:09:22Z' + id: 244 + - author: FaDeOkno + changes: + - {message: Фикс галлюцинаций фантома, type: Fix} + time: '2024-08-15T20:10:03Z' + id: 245 + - author: AserCreator + changes: + - {message: Средний ракетный двигатель. Занимает 2х2 тайла., type: Add} + - {message: Большой ракетный двигатель. Занимает 3х3 тайлов., type: Add} + - {message: У старых спрайтов двигателей была ассиметрия. Больше нет., type: Fix} + - {message: Коллизия двигателей подогнана под размеры. Ставим 2+ тайла перед + двигателем вместо 1 под ним., type: Fix} + time: '2024-08-17T12:16:42Z' + id: 246 + - author: jungarikjan + changes: + - {message: Добавлено ночное зрение визору ниндзя + сама система, type: Add} + time: '2024-08-17T12:18:52Z' + id: 247 + - author: Котя + changes: + - {message: Теперь фантом может перехватывать контроль тела только если цель + является сосудом., type: Tweak} + - {message: 'Фантом больше не может использовать способности выше 1 уровня на + персонажах, имеющих имплант защиты разума.', type: Tweak} + - {message: Стоимость крафтов защиты от фантома снизилась в несколько раз., + type: Tweak} + - {message: 'Психо-эпидемия теперь заканчивается, если молчать и не слышать + никого 15 секунд.', type: Tweak} + - {message: Фантом получает новые цели одновременно с созданием сосудов., type: Tweak} + - {message: Речь фантома теперь видна для призракам., type: Tweak} + - {message: Проклятые умирают вместе с фантомом., type: Tweak} + - {message: После смерти фантома сосуды и проклятые теряют этот статус., type: Tweak} + - {message: Исправлено игнорирование фантомом МЩ., type: Fix} + time: '2024-08-17T13:23:30Z' + id: 248 + - author: Котя + changes: + - {message: Снова можно делать длинные имена, type: Tweak} + time: '2024-08-17T13:29:04Z' + id: 249 From a8aa9629608ee9703b4297b19d744d8ca3c5d672 Mon Sep 17 00:00:00 2001 From: PyotrIgn <131798882+PyotrIgn@users.noreply.github.com> Date: Sat, 17 Aug 2024 19:26:18 +0400 Subject: [PATCH 5/8] =?UTF-8?q?=D0=A3=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=81=D0=B8=D0=BB=D1=83=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D1=80=D1=8B=D0=B2=D0=B0=20=D1=82=D0=BE=D0=BF=D0=BB=D0=B8=D0=B2?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20(#288)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Уменьшаем мощь подрыва топливника, набегаторы плаки плаки :cl: - tweak: Уменьшена сила подрыва топливных резервуаров --- .../Prototypes/Entities/Structures/Storage/Tanks/tanks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml index b9a77aa8faa..4c450569674 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Tanks/tanks.yml @@ -32,7 +32,7 @@ - type: PacifismDangerousAttack - type: Explosive explosionType: Default - totalIntensity: 60 # Mediocre explosion. Not enough to do any meaningful structural damage to anything other then windows, provided you're only using one tank. + totalIntensity: 30 # ADT-Tweak - type: entity id: WeldingFuelTankFull @@ -74,7 +74,7 @@ maxVol: 5000 - type: Explosive explosionType: Default - totalIntensity: 120 + totalIntensity: 60 #ADT-Tweak # Water From 507c73e98b2b36a289784bfb486c70ab9c68254b Mon Sep 17 00:00:00 2001 From: PyotrIgn <131798882+PyotrIgn@users.noreply.github.com> Date: Sat, 17 Aug 2024 19:26:30 +0400 Subject: [PATCH 6/8] =?UTF-8?q?=D0=9E=D0=B1=D0=BC=D0=BE=D1=82=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=BE=D0=B3=20(#289)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Возвращаем обмотки для ног :cl: - add: Добавлены наши старые обмотки для ног в ОдеждоМат --- .../Entities/Clothing/Shoes/specific.ftl | 23 ++++++ .../ADT/Entities/Clothing/Shoes/specific.yml | 71 ++++++++++++++++++ .../Catalog/Cargo/cargo_vending.yml | 2 +- .../Inventories/clothesmate.yml | 8 ++ .../equipped-FEET-reptilian.png | Bin 0 -> 456 bytes .../black_footwraps.rsi/equipped-FEET.png | Bin 0 -> 447 bytes .../Specific/black_footwraps.rsi/icon.png | Bin 0 -> 498 bytes .../black_footwraps.rsi/inhand-left.png | Bin 0 -> 423 bytes .../black_footwraps.rsi/inhand-right.png | Bin 0 -> 423 bytes .../Specific/black_footwraps.rsi/meta.json | 30 ++++++++ .../equipped-FEET-reptilian.png | Bin 0 -> 504 bytes .../blackhigh_footwraps.rsi/equipped-FEET.png | Bin 0 -> 492 bytes .../Specific/blackhigh_footwraps.rsi/icon.png | Bin 0 -> 498 bytes .../blackhigh_footwraps.rsi/inhand-left.png | Bin 0 -> 423 bytes .../blackhigh_footwraps.rsi/inhand-right.png | Bin 0 -> 423 bytes .../blackhigh_footwraps.rsi/meta.json | 30 ++++++++ .../equipped-FEET-reptilian.png | Bin 0 -> 483 bytes .../brown_footwraps.rsi/equipped-FEET.png | Bin 0 -> 462 bytes .../Specific/brown_footwraps.rsi/icon.png | Bin 0 -> 435 bytes .../brown_footwraps.rsi/inhand-left.png | Bin 0 -> 423 bytes .../brown_footwraps.rsi/inhand-right.png | Bin 0 -> 429 bytes .../Specific/brown_footwraps.rsi/meta.json | 30 ++++++++ .../equipped-FEET-reptilian.png | Bin 0 -> 537 bytes .../brownhigh_footwraps.rsi/equipped-FEET.png | Bin 0 -> 525 bytes .../Specific/brownhigh_footwraps.rsi/icon.png | Bin 0 -> 435 bytes .../brownhigh_footwraps.rsi/inhand-left.png | Bin 0 -> 423 bytes .../brownhigh_footwraps.rsi/inhand-right.png | Bin 0 -> 429 bytes .../brownhigh_footwraps.rsi/meta.json | 30 ++++++++ .../equipped-FEET-reptilian.png | Bin 0 -> 456 bytes .../white_footwraps.rsi/equipped-FEET.png | Bin 0 -> 459 bytes .../Specific/white_footwraps.rsi/icon.png | Bin 0 -> 567 bytes .../white_footwraps.rsi/inhand-left.png | Bin 0 -> 438 bytes .../white_footwraps.rsi/inhand-right.png | Bin 0 -> 435 bytes .../Specific/white_footwraps.rsi/meta.json | 30 ++++++++ .../equipped-FEET-reptilian.png | Bin 0 -> 582 bytes .../whitehigh_footwraps.rsi/equipped-FEET.png | Bin 0 -> 522 bytes .../Specific/whitehigh_footwraps.rsi/icon.png | Bin 0 -> 567 bytes .../whitehigh_footwraps.rsi/inhand-left.png | Bin 0 -> 438 bytes .../whitehigh_footwraps.rsi/inhand-right.png | Bin 0 -> 435 bytes .../whitehigh_footwraps.rsi/meta.json | 30 ++++++++ 40 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 Resources/Locale/ru-RU/ADT/prototypes/Entities/Clothing/Shoes/specific.ftl create mode 100644 Resources/Prototypes/ADT/Entities/Clothing/Shoes/specific.yml create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/equipped-FEET-reptilian.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/equipped-FEET.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/inhand-left.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/inhand-right.png create mode 100644 Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/meta.json diff --git a/Resources/Locale/ru-RU/ADT/prototypes/Entities/Clothing/Shoes/specific.ftl b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Clothing/Shoes/specific.ftl new file mode 100644 index 00000000000..61e77a0e63a --- /dev/null +++ b/Resources/Locale/ru-RU/ADT/prototypes/Entities/Clothing/Shoes/specific.ftl @@ -0,0 +1,23 @@ +ent-ADTClothingFootWrapsBlack = черные обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } + +ent-ADTClothingFootWrapsWhite = белые обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } + +ent-ADTClothingFootWrapsHighBlack = черные высокие обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } + +ent-ADTClothingFootWrapsHighWhite = белые высокие обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } + +ent-ADTClothingFootWrapsBrown = коричневые обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } + +ent-ADTClothingFootWrapsHighBrown = коричневые высокие обмотки для ног + .desc = Пара кусков ткани для тех, кому некомфортно в обычных человеческих ботинках. + .suffix = { "" } diff --git a/Resources/Prototypes/ADT/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/ADT/Entities/Clothing/Shoes/specific.yml new file mode 100644 index 00000000000..97307bee2bc --- /dev/null +++ b/Resources/Prototypes/ADT/Entities/Clothing/Shoes/specific.yml @@ -0,0 +1,71 @@ +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsWhite + name: white footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/white_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/white_footwraps.rsi #спрайты от floppo4ka + +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsBlack + name: black footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/black_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/black_footwraps.rsi #спрайты от floppo4ka + +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsHighBlack + name: high black footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi #спрайты от floppo4ka + +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsHighWhite + name: high white footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi #спрайты от floppo4ka + +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsBrown + name: brown footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/brown_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/brown_footwraps.rsi #спрайты от floppo4ka + +- type: entity + parent: ClothingShoesBaseButcherable + id: ADTClothingFootWrapsHighBrown + name: brown white footwraps + description: Pair of pieces of clothing for those who are uncomfortable with ordinary shoes. + components: + - type: Sprite + sprite: ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi #спрайты от floppo4ka + state: icon + - type: Clothing + sprite: ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi #спрайты от floppo4ka diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml index e202d2482b7..c04f6892ecc 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_vending.yml @@ -33,7 +33,7 @@ sprite: Objects/Specific/Service/vending_machine_restock.rsi state: base product: CrateVendingMachineRestockClothesFilled - cost: 2400 + cost: 2500 #ADT_Tweak category: cargoproduct-category-name-service group: market diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml index 6d387eb8777..09bb73d1f06 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/clothesmate.yml @@ -54,6 +54,14 @@ ClothingUniformJumpsuitCasualRed: 2 ClothingUniformJumpskirtCasualRed: 2 # DO NOT ADD MORE, USE UNIFORM DYING + # ADT бельё/обмотки/плащи начало + ADTClothingFootWrapsWhite: 2 + ADTClothingFootWrapsHighWhite: 2 + ADTClothingFootWrapsBlack: 2 + ADTClothingFootWrapsHighBlack: 2 + ADTClothingFootWrapsBrown: 2 + ADTClothingFootWrapsHighBrown: 2 + # ADT бельё/обмотки/плащи конец ClothingShoesColorBlack: 8 ClothingShoesColorBrown: 4 ClothingShoesColorWhite: 3 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/equipped-FEET-reptilian.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/equipped-FEET-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..b9539e97931ba1c1ee5b93e083e8c279f047a707 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z8$4YcLn`9l zM(yTncHq%w?s=nA!}$NdY7HZ|wK7kLo#xfAs!V&eCO*HEKH zou#m$t7n#@?a@F6|En7wII%~pc*i-J??VVLw_Zs@>#KPNFUgje67W|(zPZ0*>Y+VP z8vKnJZ*N<={;2yA?>EXncdeVBCRFfl=1zu(g`FFCyc66U*pvWnj|$jt#!h$K?rOLe7%>c(F}qPEKS-C94zJx_n0~ulmucJT@-dOeh_nD z0V?3K={sP+6Mnrka$W8H&);{g>wI_l{U^!0>(^>O+>$$cyKUcN?)^1t2g3#DE_GJ9x8$DpzkO0}ZwvW1O=NNG>5B52ebe5p z7INTvRB6ld;f^eKUO_|asdQL$C-w-x;zj%1_ap{ePx$s!2paR9HvtlwFI0Koo{wqYu}t5QQQNT-}JEqA0rV5BEp94%#5du$vZwu4;p7 zmNS$n6phr<%^Z+KW_+J{&PfGtF6GVnkO0zvG$0MU%z$m%Ec{XPJWuG|LW}NwEyJOM z!6341JRU;?A{GDz{;b!aqZW%rxULJ+G=t#HX2b94*?$0V#p!e!j4@QJRrLG)$f>UY zaUetuuui9gTrLMiQLx=^v0N@uE|>Xrt3)k41km*?v+YmnCr+mmQmGWr({&w*L<04C zJ;)EY<7F+-G?h8d7v}RhGMNl^yB$eCs3o;pjRRCF6&QvQ zz>tZnozZA?_n;3AT;9lN>Pb0OGMVH+G!Mh!Fk)b}^0D9lzODsf0J9^>i_?|e6S-0Een@Xip5a@Xe#0?EAivvJI$mkzHbv~bAS>{vWaSh!3;5_>< omVsx(Zta%<(ttGZb_0K}H=ZFeri6q50000Px$VM#=nJOKC!q6N?b#tEPWj0XUx09pVoV4MJ2z<2;~ z3ZMnJTcGdzZ5Rd*c7LCu!@1Tkef9*9=^*xa-2LskzM^%?^5WO&y4%Nl0Gk5yZvd*Q z+S;~twE3pFdfjPyMnRy>@4qDo<2bryS)xH6!D3&K1Oo&zUDtIofO(!B!8~j8bFM~|9*ZNfLJ3^?*o7oc`dp~fR;)~`9K1s$ZOF>0<=^@$_El4MP7?8 z5}>6LQa+FXDe_u$kpL}~kn({9NRii~iv(z?gp>~?K#IH;T_iwDC8T^H0aE0(=w_V& zj`@LX0dUO^WC?(CejsZA9P@F3COW(oSw}m;0*ykZ$WVY R>8$_&002ovPDHLkV1kp_sxANk literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..47ee0f62bab40b69e5e1eb23f10bafb1c6cc424e GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z6FglULn`9l z&NAd`b`Wv7ZYJmOfnnKahGpNbT>HpS_K~59-C%8^xS5V(mv)WBcYiI#lh4o3mejp= zM&p0Vsjt#Z2~1Oj6IiFPH<&wyHHZfI0kIr|9cu(*n1dw{S2Fw%Nnrh^bz$4vTcvZG zMdFmNtCc-J%kt!B?pCMS&puv#ow$Jc!|$(uFURVgt`2^FUw_SyRl9cE_dh=EDA9KC z%x9kXnTs^8?ON9>DxYGS@rHmexz zE?xRA%``!+$8J8SL%Bzly_&-;gI_gj40jb@{++>)dFaLGnG7ZEOTH&FE#X{zKAq`; z?4*1BoOm_(t15isk&`@>$q;vCqVbO>3`gc2RA)cH)n(c2FVxU3(6#$fHOumMj3@ez ty>nyOcqHhzt?-0di#JwXQGdYv{!x)5=gqSLz<_7)boFyt=akUI006;bv-1D| literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/meta.json new file mode 100644 index 00000000000..7c9206782b1 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Shoes/Specific/black_footwraps.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by discord:floppo4ka for Adventure Time MRP Server", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "equipped-FEET-reptilian", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/equipped-FEET-reptilian.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/equipped-FEET-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..2fdceef21b173f9d1f469e14a655e7168d1e7b9a GIT binary patch literal 504 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zH+s4_hE&A8 zjWXB4&4mw4Jo>^c1Fi`qdCN&Hirs81*YBKoO6f-^+xh(q z7)l%pSZ^>L#5mT01Q>saC2((GZPEq`BCrZTq7FxgZ-SQhD41$gy zRDYKIy@VOe&EDc|pJYOB`koMUm&GdcLr_pft|1wV&Q+PPrfBaMdTSrG*b znRPscd>OZ4|Oo^RO8cKY4FBxh4O=U{IoTc0D&6HrJ)5*OcO=YcW zrHH=k0l8(DcNi?ZHg9bm1A{wX#P!noV%eNAoyV8#ShXtr(aY~#w?69$`t9f1xp?2S x9I5%cKAd}QIi1B~_SO5I9>3pgxA?>O~LGj3ssQrH0!U^@`apt~Tm zaouY<-^(JecP%^qtWqzt_g&@OYbNPgN$(GYPqg*^)-y#-)Ax<+4}0zdok9=&`5x@G zj&b-=8mqo{TW)pnf;*QV{MTt%bH#v%U#Ky<;f;M?^0i1Q_Aj;bZ}qw+)cDQ2wmdWF zV*smh#qDjKCpPIU-E&=Kvh?W+_nLoeZOy$IbUU6`a6H&)C3fcl1NT(hf03dgUwOk!Uu)*|`%@|LL6irx&f_=+F#tdR7~_MCULSTLi1+2xX_ zJ}Wk}SQH=F_dYY~PydsBa~*{rty&e=dHTKRKHKU$=aqE!bM0KTZ`zuk>3VxURr*b1 lD01^(vPP?3(EtDd literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc3b24b14efd4f2c42d1f5d525b89bd94f1f07c GIT binary patch literal 498 zcmVPx$s!2paR9HvtlwFI0Koo{wqYu}t5QQQNT-}JEqA0rV5BEp94%#5du$vZwu4;p7 zmNS$n6phr<%^Z+KW_+J{&PfGtF6GVnkO0zvG$0MU%z$m%Ec{XPJWuG|LW}NwEyJOM z!6341JRU;?A{GDz{;b!aqZW%rxULJ+G=t#HX2b94*?$0V#p!e!j4@QJRrLG)$f>UY zaUetuuui9gTrLMiQLx=^v0N@uE|>Xrt3)k41km*?v+YmnCr+mmQmGWr({&w*L<04C zJ;)EY<7F+-G?h8d7v}RhGMNl^yB$eCs3o;pjRRCF6&QvQ zz>tZnozZA?_n;3AT;9lN>Pb0OGMVH+G!Mh!Fk)b}^0D9lzODsf0J9^>i_?|e6S-0Een@Xip5a@Xe#0?EAivvJI$mkzHbv~bAS>{vWaSh!3;5_>< omVsx(Zta%<(ttGZb_0K}H=ZFeri6q50000Px$VM#=nJOKC!q6N?b#tEPWj0XUx09pVoV4MJ2z<2;~ z3ZMnJTcGdzZ5Rd*c7LCu!@1Tkef9*9=^*xa-2LskzM^%?^5WO&y4%Nl0Gk5yZvd*Q z+S;~twE3pFdfjPyMnRy>@4qDo<2bryS)xH6!D3&K1Oo&zUDtIofO(!B!8~j8bFM~|9*ZNfLJ3^?*o7oc`dp~fR;)~`9K1s$ZOF>0<=^@$_El4MP7?8 z5}>6LQa+FXDe_u$kpL}~kn({9NRii~iv(z?gp>~?K#IH;T_iwDC8T^H0aE0(=w_V& zj`@LX0dUO^WC?(CejsZA9P@F3COW(oSw}m;0*ykZ$WVY R>8$_&002ovPDHLkV1kp_sxANk literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/inhand-right.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..47ee0f62bab40b69e5e1eb23f10bafb1c6cc424e GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z6FglULn`9l z&NAd`b`Wv7ZYJmOfnnKahGpNbT>HpS_K~59-C%8^xS5V(mv)WBcYiI#lh4o3mejp= zM&p0Vsjt#Z2~1Oj6IiFPH<&wyHHZfI0kIr|9cu(*n1dw{S2Fw%Nnrh^bz$4vTcvZG zMdFmNtCc-J%kt!B?pCMS&puv#ow$Jc!|$(uFURVgt`2^FUw_SyRl9cE_dh=EDA9KC z%x9kXnTs^8?ON9>DxYGS@rHmexz zE?xRA%``!+$8J8SL%Bzly_&-;gI_gj40jb@{++>)dFaLGnG7ZEOTH&FE#X{zKAq`; z?4*1BoOm_(t15isk&`@>$q;vCqVbO>3`gc2RA)cH)n(c2FVxU3(6#$fHOumMj3@ez ty>nyOcqHhzt?-0di#JwXQGdYv{!x)5=gqSLz<_7)boFyt=akUI006;bv-1D| literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/meta.json new file mode 100644 index 00000000000..7c9206782b1 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Shoes/Specific/blackhigh_footwraps.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by discord:floppo4ka for Adventure Time MRP Server", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "equipped-FEET-reptilian", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/equipped-FEET-reptilian.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/equipped-FEET-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..b568df084cb080d98444716324318d3fbb9ed676 GIT binary patch literal 483 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zXM4IhhE&A8 zjWWzS>>yxc*=o3?aH?K{$87N(-cR*^wElBiRZ{7A%RwP_l?mJ9LspxGwD}s(&NDf? z>9O0iEwkp%o;$T`uNv!r(}UONYcR+P#4v7iC}94edO|FLnUOH{SyO7tnm1qk=jZKj#k3#%zOI(7q+0gl)ZyCR?UObfnaY$QxP?K> zr}A!-reP@4i$hN|_`5Y8|F81x3lo}VaW?qaw4cYX>&{4HT$3R8ctPkQ20qaR%rauU zUNiX`PQ4W9;VXzR(MYvo&|2l@FUyH{lQJ<0zSkAIg7Fz^|yWAHk#gYkoq3+Dos9_gOd5<+8VXqhn2zx_ z1T&}t1tF>mxE8Pg1w~)PFx_6teYsG$uD`eN=3Kf{y{E}K=2!i80lwrv zhnH6$S)Cnc&3=sgU6`GLfbi}4&KIL%JA-5%7S(i}|Ns1xhSJ`7{8>uNqn|#$Z#i4D zH+7H5{Po4xb%hkfU5ag3F3geT%qwVUIW^1h0mIpw6Cbd#d#qR^$;?NtgoC_RaJ$8F z)wP_PPcXjpVc5Fr{(Q%~y6=*UbF%~5D@@kZ8FPNz<8XWP%fCv8Y=j*S*ld|_d-{3R zS;s!FVJJQ!+wA?1b;Fn$<3UHx3vIVChP008SQ BzPJDY literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd7ddf601a4720e660313f3542a4a2d8b7e55bd GIT binary patch literal 435 zcmV;k0ZjghP)Px$Ye_^wR9Hvtl(A03Fc5}+J8e_iLev4IN`M&Hn0W)8-lNA6M@Bt{#Q8d)d`?};Qagw0Kq^o d5Da_+kBXHc|IyPx$VM#X%+AQp1{sqctUSs=LtN3kV-2N0(M!MNHC4X zE)!>l`Bo|1{eR#5pEMhT^Ivp+{r~_-fO7(rAbL%k~fLtR|{|5jm@>+C}04{)JkRq=|7YWcZ2`L{)fE0Nxx=4VQNl5uX0;I@m(KVd_ zj{5^<0dU>sL&I~>cMNDfNJ~4a{NMVg&e98jEj1Qt4L=#x22m>*DLq22Jg7r-8 zYfF!Jb5FQ+e`5CJUB&54-=rV!xe)rXR^^ZbyTJF|*BzTIV|TCqC*B~wf6n_d)Y&cs6@z|d##boFyt=akUIzyJV}Nw6CL literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/meta.json new file mode 100644 index 00000000000..7c9206782b1 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Shoes/Specific/brown_footwraps.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by discord:floppo4ka for Adventure Time MRP Server", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "equipped-FEET-reptilian", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET-reptilian.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..079fb8f12bec430aa8199634826c3f727abe7933 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zFM7H-hE&A8 zjWYB*;=psqmaD~uQB;tz>lnPC&X90s9@9;YU<lmUHb};@BOW@wX+N2E> z$Ya>YdV?va@c|c5K)NBHaT~)Wrs>O9%DjF4w`n5)oScqjXd4B87B6u?MeorXJpV|AQj?iF>!xJ-7Ft-tEvT zcUU~HgIkTWpm2}Ycm3Dr-WC1$TB*mi}skHdV6TNzlUSnFpajWT4UDe;!46|n3 zVGVG(`EPA@k-Rt8&G0$DW=hpp*S@;hJ!uZtE6qNpidAi_;#LQoO8sY)G%U}GC|Jm> z6Y{;qlbt+?>1ym(l8Y33`BbKRlw?Hp%)6`7;L~ne$m-&DN#o?c3f-nRFH0iSuDrPU zftl&T^M>{BL(O&FIJX=*y`-W%eXr-9e{qbq>pKhnhMti58n~&n=ItTN`Oi%_4NO+g jpDgg}O^{3-!^7{V9P^4I{sUv0!PC{xWt~$(69WSPJX`5T literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/equipped-FEET.png new file mode 100644 index 0000000000000000000000000000000000000000..246f8e0049b2bc574584dca99cbeccb402789048 GIT binary patch literal 525 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%zk9xW|hE&A8 zjWYCNaTJ(i$t=iYVie309G_4&G5$kq-N6%Q#Ak3VnmLiJN#aiL7q8PB&TR}Y_P%^! z>&1IH??XyUzvf<;9Q;9>{k(l3gO$P#rkutHY!BuuL^tRP#4v7iC}94eeLyUMnou(>CNBOOLi~+8N0yA z{~@>e5!Pt#fYnvSGrO5IH{L#eX{&gU?!l`+4EL>DY_rQFey$#y694+wG53{EemSOf zPa?j4@$WLuhNgPx$Ye_^wR9Hvtl(A03Fc5}+J8e_iLev4IN`M&Hn0W)8-lNA6M@Bt{#Q8d)d`?};Qagw0Kq^o d5Da_+kBXHc|IyPx$VM#X%+AQp1{sqctUSs=LtN3kV-2N0(M!MNHC4X zE)!>l`Bo|1{eR#5pEMhT^Ivp+{r~_-fO7(rAbL%k~fLtR|{|5jm@>+C}04{)JkRq=|7YWcZ2`L{)fE0Nxx=4VQNl5uX0;I@m(KVd_ zj{5^<0dU>sL&I~>cMNDfNJ~4a{NMVg&e98jEj1Qt4L=#x22m>*DLq22Jg7r-8 zYfF!Jb5FQ+e`5CJUB&54-=rV!xe)rXR^^ZbyTJF|*BzTIV|TCqC*B~wf6n_d)Y&cs6@z|d##boFyt=akUIzyJV}Nw6CL literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/meta.json b/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/meta.json new file mode 100644 index 00000000000..7c9206782b1 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Shoes/Specific/brownhigh_footwraps.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Created by discord:floppo4ka for Adventure Time MRP Server", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "equipped-FEET-reptilian", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/equipped-FEET-reptilian.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/equipped-FEET-reptilian.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b9a65dd6ccde0a61a6f7b346f8a0965cd3a138 GIT binary patch literal 456 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D%z8$DedLn`9l zMjhmBcHn8Y?>Qi~<^aQ)gC=JVGORfu)x%J)rR=(BMgNy7)rpVl_+o?K6ut11SVui99}tqwSq`p+n7Se_SAu#j0N)JJGl}H?XN!D$j4r{)k@PlqjG6} z8q=y(TJwY$+wXt>o2$my>oe2aLyY15LqlbS_pc4bCmi;@Rh52d2Uq`U>F14m()$wT zrk}Il`T6;I1qPW1F^nz;b~1iY@8D2iIw$JDGDn&rpV5UuuwWg7(t|q;72FC;9Sy~- z0*ueu4n#8u0u^X~uwXj9DJC?Ob?3KQ{`vE#)W`S3LIo*pe=NCEN4GFRHGW{xtD@xZ{0w;93#J4Bceoe}8SZ&f|I+5;W_z zV#BgqVjCYYbjMzN!or@hDp!!3Z^I2yU%vu!B^u0kIZ03168Ot)?Q+w5heRg+%U4^V z(X}R1Dsb;|{J5Fu-6F2S12j&vKDo4GxIe&nW!{F)a=d#Wzp@{(i D(V@Qr literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..29ea38f36b0d4ca2f036a2d2537ecf3f2144b0c5 GIT binary patch literal 567 zcmV-70?7S|P)Px$@JU2LR9Hu2WEfz;IKcKZj5=U61V%$(Gz6#?0?QUp`v3p`KX|zo9alh<*+ePA zRa&lDG5tRS6B7dq3k!p~hAsmO3mXF?BLlPKu>4&e~^RJHMAI1 zR8-+^Q&H82v+vx#NPPzs<)?rx1_2RKQ3eHhDF#C$a|UFKVe$;n`BWW;di&MgKjD_fKh zxO(Lr!_S{Th)RGUjRd2hxG?pc|f<2r+okO0HKe}5U6nOPWESy>sx z#3dPS-@L*Q6-%XT2#W$x2!NbxY-|kn@s%r=z_gZzDg!$wH-n{>3p^w~e0;@l>i7Yo zLV;iifJ_BBA~YHPoz literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/white_footwraps.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5098034bc1d2276b4d074e409d4857d8deda05 GIT binary patch literal 438 zcmV;n0ZIOeP)Px$Zb?KzRCr$PnlTQ7KoCWjGZ+hxKy0kM1{NGaX-zzci7k2r3b}@r4dDnD#xr1s z1Vc;=Su!}YnNLLm?Em}b58F)Sj9-!Q{W}0a0*n(t3m6Xoeu8KLw19B}XaVB^z$t(h zKnoZrfEF+w0GtA70qz#4t6LK<*Dcuo{TLn2wSMWdCxA?MV&^<>Z;z*ox6Wa|ZP(dl z*~fbab_~qF0Vs;RS;i|zn@=`Lt6N@6F9@{x{h^p04efXbddlpm5}m*1W1wBqKgD*sf3gdBtVM17F{Gj zOC_XyAOTY3wde+&0FL>AU;%K=4+IH-bABLb037oJK?2~M9|#fv=LrG;oHRpR3ke9Z gYMh?UC*Td33U5K@b0rc00000zPVRvoGa5RM@(HVz%(E;&i5OyM2>e^FIGseEqNk`-AV+qOH4aWX{jEs;^5tsvqwC z{rT&suM|SQ-d%IuvL^M^ri@J`d24=bYt!S{%P?3*pP%DS~ccV!-W@p&dgN&AxT$xKT)7oSgOx*$90UO(pqwH~|qoDSt4 zRrYEQvkZRKs4?7CeED|H$nLY^I zdUWiE+`$Fa44W1&+%4#!vGGRTd6py3GFHfa<*ZPx%07*naRCr$PS|P5&KoH$J46=p<2}c0O6*vHAKvq^Ek(_}8^a?mQ0!R`J5>wZo z*JMc3@PBrf=}#v6YFgM~_U)VZsF=xI;#ZdV`5g(M0upC{7D!wG{1c=FXo18Tpal{a z0N(<%041GGTm0^nPK7N7+ZXMh$+TmXCv&;lVA*zfnva=CQ(`@Q|yX0yqT$76%% z>2&JO=d&w{VlYyN*gps?08A#6_OKv92$0W@$765;wDa{SwGGfgijoDBd)INcR2PJEckLX8ntUEmQPN^cnA6>v=&DK ztW``KFBPE8sI`1lfVGNgN75n;d|oQK}8@uYCQcXl!dfngAJ; z_>aMePegQwCBDHBML>5d1mG|kGM~@gdcBUy7pk19s+#Nd>QDqxAnq}92~mJWevrQO z>oFe?dXR78F{2=d?@p|Q=8OW}?a9AhFPGJ2|9x;suD-Oj3=T{3Dq7)Xh2B}CbVDNMMl-cr5U6XCr z?{xYgtI?`2jExGv5>)ID}T8o@rGuN>*_}&srKFBDx zdeKTwz6(oo4aH;#t-M8e6KB!z25naQ?xqv{wg0ym%-E3 K&t;ucLK6UJme?@> literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/icon.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..29ea38f36b0d4ca2f036a2d2537ecf3f2144b0c5 GIT binary patch literal 567 zcmV-70?7S|P)Px$@JU2LR9Hu2WEfz;IKcKZj5=U61V%$(Gz6#?0?QUp`v3p`KX|zo9alh<*+ePA zRa&lDG5tRS6B7dq3k!p~hAsmO3mXF?BLlPKu>4&e~^RJHMAI1 zR8-+^Q&H82v+vx#NPPzs<)?rx1_2RKQ3eHhDF#C$a|UFKVe$;n`BWW;di&MgKjD_fKh zxO(Lr!_S{Th)RGUjRd2hxG?pc|f<2r+okO0HKe}5U6nOPWESy>sx z#3dPS-@L*Q6-%XT2#W$x2!NbxY-|kn@s%r=z_gZzDg!$wH-n{>3p^w~e0;@l>i7Yo zLV;iifJ_BBA~YHPoz literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/inhand-left.png b/Resources/Textures/ADT/Clothing/Shoes/Specific/whitehigh_footwraps.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5098034bc1d2276b4d074e409d4857d8deda05 GIT binary patch literal 438 zcmV;n0ZIOeP)Px$Zb?KzRCr$PnlTQ7KoCWjGZ+hxKy0kM1{NGaX-zzci7k2r3b}@r4dDnD#xr1s z1Vc;=Su!}YnNLLm?Em}b58F)Sj9-!Q{W}0a0*n(t3m6Xoeu8KLw19B}XaVB^z$t(h zKnoZrfEF+w0GtA70qz#4t6LK<*Dcuo{TLn2wSMWdCxA?MV&^<>Z;z*ox6Wa|ZP(dl z*~fbab_~qF0Vs;RS;i|zn@=`Lt6N@6F9@{x{h^p04efXbddlpm5}m*1W1wBqKgD*sf3gdBtVM17F{Gj zOC_XyAOTY3wde+&0FL>AU;%K=4+IH-bABLb037oJK?2~M9|#fv=LrG;oHRpR3ke9Z gYMh?UC*Td33U5K@b0rc00000zPVRvoGa5RM@(HVz%(E;&i5OyM2>e^FIGseEqNk`-AV+qOH4aWX{jEs;^5tsvqwC z{rT&suM|SQ-d%IuvL^M^ri@J`d24=bYt!S{%P?3*pP%DS~ccV!-W@p&dgN&AxT$xKT)7oSgOx*$90UO(pqwH~|qoDSt4 zRrYEQvkZRKs4?7CeED|H$nLY^I zdUWiE+`$Fa44W1&+%4#!vGGRTd6py3GFHfa<*Z Date: Sat, 17 Aug 2024 20:29:50 +0400 Subject: [PATCH 7/8] =?UTF-8?q?=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D1=8D=D0=BD=D0=B5=D1=80=D0=B3=D0=B5=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B3=D0=BE=20=D0=BA=D1=80=D0=B8=D0=B7=D0=B8?= =?UTF-8?q?=D1=81=D0=B0=20=D1=81=D1=82=D0=B0=D0=BD=D1=86=D0=B8=D0=B9=20(#2?= =?UTF-8?q?92)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Решение энергокризиса на станции В ящике компонентов дам 12 штук вместо 9 - можно запустить двухядерник Соляры вырабатывают в 2.5 раза больше - теперь они значимый источник электроэнергии Добавлена возможность покупки компонентов ДАМ и контроллера ДАМ :cl: - add: Добавлена покупка компонентов ДАМ и контроллера ДАМ в карго - tweak: Количество компонентов ДАМ в одном ящике увеличено до 12 вместо 9 - tweak: Выработка солнечных батарей увеличена в 2.5 раза --- .../Solar/Components/SolarPanelComponent.cs | 2 +- .../ADT/Catalog/Cargo/cargo_engines.yml | 20 +++++++++++++++++++ .../Catalog/Fills/Crates/engines.yml | 2 +- 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 Resources/Prototypes/ADT/Catalog/Cargo/cargo_engines.yml diff --git a/Content.Server/Solar/Components/SolarPanelComponent.cs b/Content.Server/Solar/Components/SolarPanelComponent.cs index 870b4c78ef1..db8aa638a8f 100644 --- a/Content.Server/Solar/Components/SolarPanelComponent.cs +++ b/Content.Server/Solar/Components/SolarPanelComponent.cs @@ -15,7 +15,7 @@ public sealed partial class SolarPanelComponent : Component /// Maximum supply output by this panel (coverage = 1) /// [DataField("maxSupply")] - public int MaxSupply = 750; + public int MaxSupply = 1875; ///ADT_Tweak /// /// Current coverage of this panel (from 0 to 1). diff --git a/Resources/Prototypes/ADT/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/ADT/Catalog/Cargo/cargo_engines.yml new file mode 100644 index 00000000000..94545d0cd5f --- /dev/null +++ b/Resources/Prototypes/ADT/Catalog/Cargo/cargo_engines.yml @@ -0,0 +1,20 @@ + +- type: cargoProduct + id: EngineeringAMEShielding + icon: + sprite: Objects/Devices/flatpack.rsi + state: ame-part + product: CrateEngineeringAMEShielding + cost: 7500 + category: cargoproduct-category-name-engineering + group: market + +- type: cargoProduct + id: EngineeringAMEControl + icon: + sprite: Structures/Power/Generation/ame.rsi + state: control + product: CrateEngineeringAMEControl + cost: 2500 + category: cargoproduct-category-name-engineering + group: market diff --git a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml index c37b7b7535a..3254419ba2c 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/engines.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/engines.yml @@ -9,7 +9,7 @@ - type: StorageFill contents: - id: AmePartFlatpack - amount: 9 + amount: 12 #ADT_Tweaks - type: entity id: CrateEngineeringAMEJar From 48f3ce1c232cb52539ba249527c519e5e2893791 Mon Sep 17 00:00:00 2001 From: RevengenRat <138193222+Ratyyy@users.noreply.github.com> Date: Sat, 17 Aug 2024 19:33:18 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC=20=D0=B2=D0=B5=D1=82=D0=B5=D1=80=20=D0=B2=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=81=D0=BC=D0=BE=D1=81=D0=B5=20(#291)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Описание PR **Медиа** **Проверки** - [x] PR полностью завершён и мне не нужна помощь чтобы его закончить. - [x] Я внимательно просмотрел все свои изменения и багов в них не нашёл. - [x] Я запускал локальный сервер со своими изменениями и всё протестировал. - [x] Я добавил скриншот/видео демонстрации PR в игре, **или** этот PR этого не требует. **Изменения** :cl: - add: В связи со сменой поставщиков газов, появился космический ветер. --- Content.Shared/CCVar/CCVars.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 945172f31fe..434cd10a606 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -1110,7 +1110,7 @@ public static readonly CVarDef /// Whether gas differences will move entities. /// public static readonly CVarDef SpaceWind = - CVarDef.Create("atmos.space_wind", false, CVar.SERVERONLY); + CVarDef.Create("atmos.space_wind", true, CVar.SERVERONLY); ///ADT /// /// Divisor from maxForce (pressureDifference * 2.25f) to force applied on objects. @@ -1159,7 +1159,7 @@ public static readonly CVarDef /// Also looks weird on slow spacing for unrelated reasons. If you do want to enable this, you should probably turn on instaspacing. /// public static readonly CVarDef MonstermosRipTiles = - CVarDef.Create("atmos.monstermos_rip_tiles", false, CVar.SERVERONLY); + CVarDef.Create("atmos.monstermos_rip_tiles", true, CVar.SERVERONLY); ///ADT /// /// Whether explosive depressurization will cause the grid to gain an impulse.