From 92dd2799883d40ce01fe9a0f0e9519bf729b9313 Mon Sep 17 00:00:00 2001 From: keslik <114428094+keslik1313@users.noreply.github.com> Date: Wed, 27 Nov 2024 05:25:36 +0300 Subject: [PATCH 01/15] [Transfer] Engi (#790) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Suhariki (#4) * init * Porting is complete Still WIP * small stuff * SmallStuff * awawawa * Нас рано * Engi * More luck * removed some shit (cherry picked from commit e1d745655b0e7253ea4e4814b82dd56e90153514) * Самодельные отражайки (#6) * Ghetto Mirror Shield * Protorypes for ghetto mirrors * locale * idk, works fine on my machine * forsenPls (cherry picked from commit 4505739fd9430bcc578da3dec932d9aa7ca933ca) * Шлем из ведра (#7) * Bucket Helmet * Code cleanup * Squashed commit of the following: commit 4505739fd9430bcc578da3dec932d9aa7ca933ca Author: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Date: Sat Sep 21 17:10:02 2024 +0300 Самодельные отражайки (#6) * Ghetto Mirror Shield * Protorypes for ghetto mirrors * locale * idk, works fine on my machine * forsenPls commit 1f066876508dec8d3f21ad753dab9fcc13dc8d1a Author: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Date: Sat Sep 21 14:57:30 2024 +0300 Агрессивный вор (#5) * AggressiveThief * Попытка насрать обратно commit e1d745655b0e7253ea4e4814b82dd56e90153514 Author: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Date: Sat Sep 21 14:46:38 2024 +0300 Suhariki (#4) * init * Porting is complete Still WIP * small stuff * SmallStuff * awawawa * Нас рано * Engi * More luck * removed some shit commit 08061b4f1fbbfd521e3a40ef53d9bc86fa140087 Author: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Date: Sat Sep 21 14:30:31 2024 +0300 Engi rise up (#3) commit 00e2f5c45ca7abfeff1f85d4893352d8875f8560 Author: BIGZi0348 <118811750+BIGZi0348@users.noreply.github.com> Date: Thu Sep 19 19:42:30 2024 +0300 Bigzi upstream1 (#2) * init * Porting is complete Still WIP * Мелочи - Король крыс, диски, правки перевода и респрайт одеяния культа (#686) * Большой Крыс Отдыхает * Фикс размера фейк диска * Доработка диска очков РНД * Скоро перейду на райдер * Переводы * Диски одного размера * Респрайт робы и капюшона культа * Automatic changelog update * fix (#687) * Automatic changelog update * govno HD (#688) * Automatic changelog update * Hotfix loadouts (#689) * govno HD * hotfix loadouts * fuck * Automatic changelog update * Update PULL_REQUEST_TEMPLATE.md * Even smaller stuff (#690) * 45 to 44 * Фикс ошибки перевода * Voice mask translate * Automatic changelog update * small stuff * SmallStuff * awawawa * Локализация шепелявости (#691) * БУМ!!!!!!!! (#692) * Automatic changelog update * Большой ребаланс милишки (#681) * MeleeThrowOnHit rework * buff baseball bat * better mjolnir * telebaton system unhardcode + refactor + transform TelescopicBatonComponent to KnockDownOnHitComponent * fix telebaton prototype * darova * fix KnockDownOnHitSystem * chaplain weapons rebalance * fix nullrod hit sound * BloodstreamSystem cleanup * bleeding rebalance * damage rebalance * small baseball bat fix * Automatic changelog update * Chaplain armor fix (#693) * Фикс описания (#696) * No passengers on this military complex (#695) * Automatic changelog update * Переводы (#698) * Пепеводы * Очепятки * Фикс прожектора и открутка цифр (#697) * Melochi * Фикс хамелеона * Переводы денег мне на карту * Automatic changelog update * Нас рано * Фикс пополнения зарядов РЦД используя стаки ресурсов (#699) * Фиксики * Спасли Валеру от банкротства * Very hot man (#700) * Automatic changelog update * reverted illegal code added by oniks --------- Co-authored-by: RavmorganButOnCocaine Co-authored-by: Spatison <137375981+Spatison@users.noreply.github.com> Co-authored-by: Valtos Co-authored-by: Jabak <163307958+Jabaks@users.noreply.github.com> Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com> * ВЕДРО!!! * Funny * Oppsie (cherry picked from commit 92ce631b0c0187678b6d1eea34d3c0830b9b0fac) * Yes (#8) (cherry picked from commit 3d083befca212455cffcae56b84ee55050ad62be) * Small Fix То чувство, когда можешь срать прямо в мэйн (cherry picked from commit 8fa7cfb678711a55bf6704ced30f7ed9b4b1e8c4) * bababooey (#9) (cherry picked from commit f7ed9d287f6798c7d39ac437a2f969ec0dc10309) * GoodLooking (#10) (cherry picked from commit 1617dce502b71db22a6b736ac879c04c07ec54a0) * Dadka scazal (#11) (cherry picked from commit 50da866354952628185bb396f359c2f533d57340) * Сортировка эксклюзива енги + респрайт деревянных столов и дверей (#12) * Massive * Чейндлок (cherry picked from commit 4dc165e4c1aa75e8fd22f14db95ac72bf50c77f5) * Big Zi bucket helmet fix * Опять насрал в мастер (cherry picked from commit bd866e0cd87770b1509885f66ec5c562dda3fd91) * Боевые Молоты (#14) (cherry picked from commit 64df6b4b91050273218007365cf81a45c3ea74a8) * хотфикс сухариков (cherry picked from commit a98265c22dc7de467693f501cf3a5d8577e94a54) * funny sword (#15) (cherry picked from commit 231aaa1b33b7e4edf00506c6ebdbd389257cf1ca) * funny hammer (cherry picked from commit 1e58eaa146cc95f34358d97d6c436ba4705d09a1) * Добавил админ логирование PacifiedOnChaplainActionSystem (#19) Update PacifiedOnChaplainActionSystem.cs (cherry picked from commit f6aa42eab7cce294336aec14f7dfb6f0671267cf) * Small refactor (cherry picked from commit b38ad7e7b8afa35a22c84c2fb8836bf13736dfb3) * Команда для отправки цели для станции (#21) * Команда для отправки цели для станции * Правки (cherry picked from commit 93a79c4952e3a75c32ff5cc4d07df4018a9bf7db) * Больше целей (cherry picked from commit c3d34d6a4e000d8af66c8f53d60a898cfae0a454) * Music for events (cherry picked from commit 4a7214634b3e77caefd011bf5900f581055a0ac8) * Санитизация * unused --------- Co-authored-by: BIGZi0348 <118811750+bigzi0348@users.noreply.github.com> Co-authored-by: BIGZi0348 --- Content.Client/Entry/EntryPoint.cs | 1 + Content.Server/Strip/StrippableSystem.cs | 23 +- .../_Engi/BucketHelmet/BucketHelmetSystem.cs | 30 +++ .../PacifiedOnChaplainActionComponent.cs | 15 ++ .../PacifiedOnChaplainActionSystem.cs | 113 ++++++++ .../StationGoalCommand/StationGoalCommand.cs | 66 +++++ .../StationGoalComponent.cs | 15 ++ .../StationGoalPaperComponent.cs | 11 + .../StationGoalPaperSystem.cs | 132 +++++++++ .../StationGoalPrototype.cs | 29 ++ .../Fax/Components/FaxMachineComponent.cs | 8 + .../BucketHelmet/BucketHelmetComponent.cs | 11 + .../PreventStrippingFromEarsComponent.cs | 11 + .../Components/DamageableClothingComponent.cs | 26 ++ .../DamageableClothingUserComponent.cs | 16 ++ .../DamageableClothingSystem.cs | 46 ++++ .../DamageableClothingUserSystem.cs | 49 ++++ .../Locale/ru-RU/White/bucket-helmet.ftl | 4 + ...clothing-outer-armor-reflective-ghetto.ftl | 2 + .../ru-RU/White/ghetto-mirror-shield.ftl | 2 + .../_Engi/pacified-on-chaplain-action.ftl | 5 + .../Locale/ru-RU/_Engi/possesed-blade.ftl | 3 + Resources/Locale/ru-RU/_Engi/station-goal.ftl | 251 ++++++++++++++++++ .../station-goal/station-goal-command.ftl | 2 +- .../Entities/Objects/Tools/bucket.yml | 4 + .../Objects/Weapons/Melee/sledgehammer.yml | 4 + .../Objects/Weapons/Melee/tagilla_hammer.yml | 4 + .../Structures/Machines/fax_machine.yml | 2 + .../Objects/Weapons/chaplain_weapons.yml | 21 +- .../Entities/Clothing/Head/bucketHelmet.yml | 26 ++ .../ClothingOuterArmorReflectiveGhetto.yml | 53 ++++ .../Objects/Shields/MirrorShieldGhetto.yml | 62 +++++ .../_Engi/Recipes/Graphs/bucketHelmet.yml | 21 ++ .../Recipes/Graphs/ghettoMirrorShield.yml | 42 +++ .../_Engi/Recipes/ghettoMirrorShield.yml | 25 ++ .../_White/_Engi/StationGoal/stationGoals.yml | 75 ++++++ Resources/Prototypes/_White/tags.yml | 3 + .../Head/bucketHelmet.rsi/equipped-HELMET.png | Bin 0 -> 828 bytes .../Clothing/Head/bucketHelmet.rsi/icon.png | Bin 0 -> 1953 bytes .../Clothing/Head/bucketHelmet.rsi/meta.json | 18 ++ .../equipped-OUTERCLOTHING.png | Bin 0 -> 576 bytes .../armor_reflect_ghetto.rsi/icon.png | Bin 0 -> 319 bytes .../armor_reflect_ghetto.rsi/inhand-left.png | Bin 0 -> 610 bytes .../armor_reflect_ghetto.rsi/inhand-right.png | Bin 0 -> 607 bytes .../armor_reflect_ghetto.rsi/meta.json | 26 ++ .../Weapons/ghetto_mirror_shield.rsi/icon.png | Bin 0 -> 330 bytes .../ghetto_mirror_shield.rsi/inhand-left.png | Bin 0 -> 758 bytes .../ghetto_mirror_shield.rsi/inhand-right.png | Bin 0 -> 697 bytes .../ghetto_mirror_shield.rsi/meta.json | 22 ++ 49 files changed, 1267 insertions(+), 12 deletions(-) create mode 100644 Content.Server/_White/_Engi/BucketHelmet/BucketHelmetSystem.cs create mode 100644 Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionComponent.cs create mode 100644 Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionSystem.cs create mode 100644 Content.Server/_White/_Engi/StationGoalCommand/StationGoalCommand.cs create mode 100644 Content.Server/_White/_Engi/StationGoalCommand/StationGoalComponent.cs create mode 100644 Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperComponent.cs create mode 100644 Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperSystem.cs create mode 100644 Content.Server/_White/_Engi/StationGoalCommand/StationGoalPrototype.cs create mode 100644 Content.Shared/_White/_Engi/BucketHelmet/BucketHelmetComponent.cs create mode 100644 Content.Shared/_White/_Engi/BucketHelmet/PreventStrippingFromEarsComponent.cs create mode 100644 Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingComponent.cs create mode 100644 Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingUserComponent.cs create mode 100644 Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingSystem.cs create mode 100644 Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingUserSystem.cs create mode 100644 Resources/Locale/ru-RU/White/bucket-helmet.ftl create mode 100644 Resources/Locale/ru-RU/White/clothing-outer-armor-reflective-ghetto.ftl create mode 100644 Resources/Locale/ru-RU/White/ghetto-mirror-shield.ftl create mode 100644 Resources/Locale/ru-RU/_Engi/pacified-on-chaplain-action.ftl create mode 100644 Resources/Locale/ru-RU/_Engi/possesed-blade.ftl create mode 100644 Resources/Locale/ru-RU/_Engi/station-goal.ftl create mode 100644 Resources/Prototypes/_White/_Engi/Entities/Clothing/Head/bucketHelmet.yml create mode 100644 Resources/Prototypes/_White/_Engi/Entities/Clothing/OuterClothing/ClothingOuterArmorReflectiveGhetto.yml create mode 100644 Resources/Prototypes/_White/_Engi/Entities/Objects/Shields/MirrorShieldGhetto.yml create mode 100644 Resources/Prototypes/_White/_Engi/Recipes/Graphs/bucketHelmet.yml create mode 100644 Resources/Prototypes/_White/_Engi/Recipes/Graphs/ghettoMirrorShield.yml create mode 100644 Resources/Prototypes/_White/_Engi/Recipes/ghettoMirrorShield.yml create mode 100644 Resources/Prototypes/_White/_Engi/StationGoal/stationGoals.yml create mode 100644 Resources/Textures/White/_Engi/Clothing/Head/bucketHelmet.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/White/_Engi/Clothing/Head/bucketHelmet.rsi/icon.png create mode 100644 Resources/Textures/White/_Engi/Clothing/Head/bucketHelmet.rsi/meta.json create mode 100644 Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/equipped-OUTERCLOTHING.png create mode 100644 Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/icon.png create mode 100644 Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/inhand-left.png create mode 100644 Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/inhand-right.png create mode 100644 Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/meta.json create mode 100644 Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/icon.png create mode 100644 Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-left.png create mode 100644 Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-right.png create mode 100644 Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/meta.json diff --git a/Content.Client/Entry/EntryPoint.cs b/Content.Client/Entry/EntryPoint.cs index 6478973a22..6a07034f75 100644 --- a/Content.Client/Entry/EntryPoint.cs +++ b/Content.Client/Entry/EntryPoint.cs @@ -135,6 +135,7 @@ namespace Content.Client.Entry _prototypeManager.RegisterIgnore("wireLayout"); _prototypeManager.RegisterIgnore("alertLevels"); _prototypeManager.RegisterIgnore("nukeopsRole"); + _prototypeManager.RegisterIgnore("stationGoal"); // WD _prototypeManager.RegisterIgnore("ghostRoleRaffleDecider"); //WD-EDIT diff --git a/Content.Server/Strip/StrippableSystem.cs b/Content.Server/Strip/StrippableSystem.cs index 0ae569b392..376774cad1 100644 --- a/Content.Server/Strip/StrippableSystem.cs +++ b/Content.Server/Strip/StrippableSystem.cs @@ -22,6 +22,7 @@ using Content.Shared._White.MagGloves; using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Utility; +using Content.Shared._White._Engi.BucketHelmet; namespace Content.Server.Strip { @@ -135,6 +136,16 @@ namespace Content.Server.Strip } // WD EDIT END + // WD EDIT START + if (args.Slot == "ears" && TryComp(strippable, out PreventStrippingFromEarsComponent? _)) + { + var message = Loc.GetString("buckethelmet-cant-strip"); + _popupSystem.PopupEntity(message, user, user); + return; + } + // WD EDIT END + + if (args.IsHand) { StripHand((user, userHands), (strippable.Owner, null), args.Slot, strippable); @@ -605,7 +616,7 @@ namespace Content.Server.Strip if (ev.Event.InventoryOrHand) { - if ( ev.Event.InsertOrRemove && !CanStripInsertInventory((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || + if (ev.Event.InsertOrRemove && !CanStripInsertInventory((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || !ev.Event.InsertOrRemove && !CanStripRemoveInventory(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) { ev.Cancel(); @@ -613,7 +624,7 @@ namespace Content.Server.Strip } else { - if ( ev.Event.InsertOrRemove && !CanStripInsertHand((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || + if (ev.Event.InsertOrRemove && !CanStripInsertHand((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || !ev.Event.InsertOrRemove && !CanStripRemoveHand(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) { ev.Cancel(); @@ -634,14 +645,14 @@ namespace Content.Server.Strip if (ev.InventoryOrHand) { if (ev.InsertOrRemove) - StripInsertInventory((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName); - else StripRemoveInventory(entity.Owner, ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + StripInsertInventory((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName); + else StripRemoveInventory(entity.Owner, ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); } else { if (ev.InsertOrRemove) - StripInsertHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); - else StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + StripInsertHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + else StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); } } } diff --git a/Content.Server/_White/_Engi/BucketHelmet/BucketHelmetSystem.cs b/Content.Server/_White/_Engi/BucketHelmet/BucketHelmetSystem.cs new file mode 100644 index 0000000000..1b3c0f4d64 --- /dev/null +++ b/Content.Server/_White/_Engi/BucketHelmet/BucketHelmetSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Inventory.Events; +using Content.Shared._White._Engi.BucketHelmet; + +namespace Content.Server._White._Engi.BucketHelmet; + +/// +/// WD. +/// This handles placemet of PreventStrippingFromEarsComponent when bucket helmet is in use. +/// +public sealed class BucketHelmetSystem : EntitySystem +{ + public override void Initialize() + { + SubscribeLocalEvent(OnGotEquipped); + SubscribeLocalEvent(OnGotUnequipped); + } + + + public void OnGotUnequipped(EntityUid uid, BucketHelmetComponent component, GotUnequippedEvent args) + { + RemComp(args.Equipee); + } + + public void OnGotEquipped(EntityUid uid, BucketHelmetComponent component, GotEquippedEvent args) + { + if (args.Slot == "head") + EnsureComp(args.Equipee); + } + +} diff --git a/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionComponent.cs b/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionComponent.cs new file mode 100644 index 0000000000..320f17e3a8 --- /dev/null +++ b/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Audio; + +namespace Content.Server._White._Engi.PacifiedOnChaplainAction +{ + /// + /// WD. + /// Adds verb for chaplain to pacify entity. + /// + [RegisterComponent] + public sealed partial class PacifiedOnChaplainActionComponent : Component + { + [DataField] + public SoundSpecifier ActionSound = new SoundPathSpecifier("/Audio/Effects/holy.ogg"); + } +} diff --git a/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionSystem.cs b/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionSystem.cs new file mode 100644 index 0000000000..f86ca2054f --- /dev/null +++ b/Content.Server/_White/_Engi/PacifiedOnChaplainAction/PacifiedOnChaplainActionSystem.cs @@ -0,0 +1,113 @@ +using Content.Shared.ActionBlocker; +using Content.Server.Popups; +using Robust.Shared.Audio.Systems; +using Content.Shared.Interaction; +using Content.Shared.Verbs; +using Content.Server.Bible.Components; +using Content.Shared.Timing; +using Content.Shared.CombatMode.Pacification; +using Content.Server.Administration.Logs; +using Content.Shared.Database; + +namespace Content.Server._White._Engi.PacifiedOnChaplainAction +{ + /// + /// WD + /// + public sealed class PacifiedOnChaplainAction : EntitySystem + { + [Dependency] private readonly ActionBlockerSystem _blocker = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly UseDelaySystem _delay = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent>(AddPacifiedOnChaplainVerb); + } + + private void Action(PacifiedOnChaplainActionComponent component, EntityUid target, EntityUid user) + { + var popup = ""; + + if (HasComp(target)) + { + popup = "unpacified-by-chaplain"; + RemComp(target); + } + else + { + popup = "pacified-by-chaplain"; + EnsureComp(target); + } + + _adminLogger.Add(LogType.Verb, + LogImpact.Medium, + $"{ToPrettyString(target):target} {popup} {ToPrettyString(user):user}"); + + _popupSystem.PopupEntity(Loc.GetString(popup, ("target", target)), user, user); + + _audio.PlayPvs(component.ActionSound, user); + + } + + private void OnAfterInteract(EntityUid uid, PacifiedOnChaplainActionComponent component, AfterInteractEvent args) + { + if (!args.CanReach) + return; + + if (!TryComp(uid, out UseDelayComponent? useDelay) || _delay.IsDelayed((uid, useDelay))) + return; + + if (args.Target == null) + return; + + if (!HasComp(args.User)) + return; + + Action(component, (EntityUid) args.Target, args.User); + + _delay.TryResetDelay((uid, useDelay)); + + return; + } + private void AddPacifiedOnChaplainVerb(EntityUid uid, PacifiedOnChaplainActionComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; + + if (!HasComp(args.User)) + return; + + if (!_blocker.CanInteract(args.User, uid)) + return; + + var verbName = ""; + + if (HasComp(args.Target)) + verbName = Loc.GetString("unpacify-by-chaplain"); + else + verbName = Loc.GetString("pacify-by-chaplain"); + + AlternativeVerb verb = new() + { + Act = () => + { + if (!TryComp(uid, out UseDelayComponent? useDelay) || _delay.IsDelayed((uid, useDelay))) + return; + + Action(component, args.Target, args.User); + + _delay.TryResetDelay((uid, useDelay)); + }, + Text = verbName, + Priority = 2 + }; + args.Verbs.Add(verb); + } + } +} diff --git a/Content.Server/_White/_Engi/StationGoalCommand/StationGoalCommand.cs b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalCommand.cs new file mode 100644 index 0000000000..d8458197f5 --- /dev/null +++ b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalCommand.cs @@ -0,0 +1,66 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Commands; +using Content.Shared.Administration; +using Robust.Shared.Console; +using Robust.Shared.Prototypes; + +namespace Content.Server._White._Engi.StationGoal +{ + [AdminCommand(AdminFlags.Fun)] + public sealed class StationGoalCommand : IConsoleCommand + { + [Dependency] private readonly IEntityManager _entManager = default!; + + public string Command => "sendstationgoal"; + public string Description => Loc.GetString("send-station-goal-command-description"); + public string Help => Loc.GetString("send-station-goal-command-help-text", ("command", Command)); + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length != 2) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!NetEntity.TryParse(args[0], out var euidNet) || !_entManager.TryGetEntity(euidNet, out var euid)) + { + shell.WriteError($"Failed to parse euid '{args[0]}'."); + return; + } + + var protoId = args[1]; + var prototypeManager = IoCManager.Resolve(); + if (!prototypeManager.TryIndex(protoId, out var proto)) + { + shell.WriteError($"No station goal found with ID {protoId}!"); + return; + } + + var stationGoalPaper = IoCManager.Resolve().System(); + if (!stationGoalPaper.SendStationGoal(euid, protoId)) + { + shell.WriteError("Station goal was not sent"); + return; + } + } + + public CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + switch (args.Length) + { + case 1: + var stations = ContentCompletionHelper.StationIds(_entManager); + return CompletionResult.FromHintOptions(stations, "[StationId]"); + case 2: + var options = IoCManager.Resolve() + .EnumeratePrototypes() + .Select(p => new CompletionOption(p.ID)); + + return CompletionResult.FromHintOptions(options, Loc.GetString("send-station-goal-command-arg-id")); + } + return CompletionResult.Empty; + } + } +} diff --git a/Content.Server/_White/_Engi/StationGoalCommand/StationGoalComponent.cs b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalComponent.cs new file mode 100644 index 0000000000..0252059942 --- /dev/null +++ b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalComponent.cs @@ -0,0 +1,15 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server._White._Engi.StationGoal +{ + /// + /// WD. + /// If attached to a station prototype, will send the station a random goal from the list. + /// + [RegisterComponent] + public sealed partial class StationGoalComponent : Component + { + [DataField] + public List> Goals = new(); + } +} diff --git a/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperComponent.cs b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperComponent.cs new file mode 100644 index 0000000000..d90da2e7fc --- /dev/null +++ b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server._White._Engi.StationGoal +{ + /// + /// WD. + /// Paper with a written station goal in it. + /// + [RegisterComponent] + public sealed partial class StationGoalPaperComponent : Component + { + } +} diff --git a/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperSystem.cs b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperSystem.cs new file mode 100644 index 0000000000..c5ec51faa8 --- /dev/null +++ b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPaperSystem.cs @@ -0,0 +1,132 @@ +using Content.Server.Fax; +using Content.Server.GameTicking.Events; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Shared.Fax.Components; +using Content.Shared.Paper; +using Robust.Server.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Content.Server.RandomMetadata; + +namespace Content.Server._White._Engi.StationGoal +{ + /// + /// WD. + /// System to spawn paper with station goal. + /// + public sealed class StationGoalPaperSystem : EntitySystem + { + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly FaxSystem _fax = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly StationSystem _station = default!; + [Dependency] private readonly RandomMetadataSystem _randomMeta = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnRoundStarting); + } + + private void OnRoundStarting(RoundStartingEvent ev) + { + var playerCount = _playerManager.PlayerCount; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var station)) + { + var tempGoals = new List>(station.Goals); + StationGoalPrototype? selGoal = null; + while (tempGoals.Count > 0) + { + var goalId = _random.Pick(tempGoals); + var goalProto = _proto.Index(goalId); + + if (playerCount > goalProto.MaxPlayers || + playerCount < goalProto.MinPlayers) + { + tempGoals.Remove(goalId); + continue; + } + + selGoal = goalProto; + break; + } + + if (selGoal is null) + return; + + if (SendStationGoal(uid, selGoal)) + { + Log.Info($"Goal {selGoal.ID} has been sent to station {MetaData(uid).EntityName}"); + } + } + } + + public bool SendStationGoal(EntityUid? ent, ProtoId goal) + { + return SendStationGoal(ent, _proto.Index(goal)); + } + + /// + /// Send a station goal on selected station to all faxes which are authorized to receive it. + /// + /// True if at least one fax received paper + public bool SendStationGoal(EntityUid? ent, StationGoalPrototype goal) + { + if (ent is null) + return false; + + if (!TryComp(ent, out var stationData)) + return false; + + var today = DateTime.Today.ToString("dd.MM"); + var namesList = new List + { + "names_first_male", + "names_last_male" + }; + var operatorName = _randomMeta.GetRandomFromSegments(namesList, " "); + + var faxContent = Loc.GetString("engi-station-goal-form", + ("station", MetaData(ent.Value).EntityName), + ("date", today), + ("operator", operatorName), + ("text", Loc.GetString(goal.Text))); + + var printout = new FaxPrintout( + faxContent, + Loc.GetString("engi-station-goal-fax-paper-name"), + null, + null, + "paper_stamp-centcom", + new List + { + new() { StampedName = Loc.GetString("stamp-component-stamped-name-centcom"), StampedColor = Color.FromHex("#006600") }, + }); + + var wasSent = false; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var faxUid, out var fax)) + { + if (!fax.ReceiveStationGoal) + continue; + + var largestGrid = _station.GetLargestGrid(stationData); + var grid = Transform(faxUid).GridUid; + if (grid is not null && largestGrid == grid.Value) + { + _fax.Receive(faxUid, printout, null, fax); + foreach (var spawnEnt in goal.Spawns) + { + SpawnAtPosition(spawnEnt, Transform(faxUid).Coordinates); + } + wasSent = true; + } + } + return wasSent; + } + } +} diff --git a/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPrototype.cs b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPrototype.cs new file mode 100644 index 0000000000..04a2e0807a --- /dev/null +++ b/Content.Server/_White/_Engi/StationGoalCommand/StationGoalPrototype.cs @@ -0,0 +1,29 @@ +using Robust.Shared.Prototypes; + +namespace Content.Server._White._Engi.StationGoal +{ + /// + /// WD + /// + [Serializable, Prototype("stationGoal")] + public sealed class StationGoalPrototype : IPrototype + { + [IdDataField] + public string ID { get; } = default!; + + [DataField] + public string Text { get; set; } = string.Empty; + + [DataField] + public int? MinPlayers; + + [DataField] + public int? MaxPlayers; + + /// + /// Goal may require certain items to complete. These items will appear near the receving fax machine at the start of the round. + /// + [DataField] + public List Spawns = new(); + } +} diff --git a/Content.Shared/Fax/Components/FaxMachineComponent.cs b/Content.Shared/Fax/Components/FaxMachineComponent.cs index 6664ce023d..ba6491303a 100644 --- a/Content.Shared/Fax/Components/FaxMachineComponent.cs +++ b/Content.Shared/Fax/Components/FaxMachineComponent.cs @@ -59,6 +59,14 @@ public sealed partial class FaxMachineComponent : Component [DataField] public bool ReceiveNukeCodes { get; set; } = false; + /// + /// WD. + /// Should that fax receive station goal info + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("receiveStationGoal")] + public bool ReceiveStationGoal { get; set; } = false; + /// /// Sound to play when fax has been emagged /// diff --git a/Content.Shared/_White/_Engi/BucketHelmet/BucketHelmetComponent.cs b/Content.Shared/_White/_Engi/BucketHelmet/BucketHelmetComponent.cs new file mode 100644 index 0000000000..dced0423a6 --- /dev/null +++ b/Content.Shared/_White/_Engi/BucketHelmet/BucketHelmetComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared._White._Engi.BucketHelmet; + +/// +/// WD. +/// This is used for bucket helmet. +/// +[RegisterComponent] +public sealed partial class BucketHelmetComponent : Component +{ + +} diff --git a/Content.Shared/_White/_Engi/BucketHelmet/PreventStrippingFromEarsComponent.cs b/Content.Shared/_White/_Engi/BucketHelmet/PreventStrippingFromEarsComponent.cs new file mode 100644 index 0000000000..843e7cf0cc --- /dev/null +++ b/Content.Shared/_White/_Engi/BucketHelmet/PreventStrippingFromEarsComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Shared._White._Engi.BucketHelmet; + +/// +/// WD. +/// This is used to block stripping headsets when bucket helmet is on. +/// +[RegisterComponent] +public sealed partial class PreventStrippingFromEarsComponent : Component +{ + +} diff --git a/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingComponent.cs b/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingComponent.cs new file mode 100644 index 0000000000..72a9f95515 --- /dev/null +++ b/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingComponent.cs @@ -0,0 +1,26 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; + +namespace Content.Shared._White._Engi.DamageableClothing; + +/// +/// WD. +/// This component goes on an equippable item that should take damage while in use. +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class DamageableClothingComponent : Component +{ + + /// + /// The entity that's wearing the item. + /// + [ViewVariables, AutoNetworkedField] + public EntityUid? User; + + /// + /// The damage modifier to use on item. + /// + [DataField] + public DamageModifierSet DamageModifier = default!; + +} diff --git a/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingUserComponent.cs b/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingUserComponent.cs new file mode 100644 index 0000000000..f4db76ddef --- /dev/null +++ b/Content.Shared/_White/_Engi/DamageableClothing/Components/DamageableClothingUserComponent.cs @@ -0,0 +1,16 @@ +namespace Content.Shared._White._Engi.DamageableClothing; + +/// +/// WD. +/// This component gets dynamically added to an Entity via the . +/// +[RegisterComponent] +public sealed partial class DamageableClothingUserComponent : Component +{ + /// + /// The entity that's also being damaged. + /// + [DataField] + public EntityUid? ItemId; + +} diff --git a/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingSystem.cs b/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingSystem.cs new file mode 100644 index 0000000000..04db92c521 --- /dev/null +++ b/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingSystem.cs @@ -0,0 +1,46 @@ +using Robust.Shared.Timing; +using Content.Shared.Inventory.Events; + +namespace Content.Shared._White._Engi.DamageableClothing; + +/// +/// WD +/// +public sealed partial class DamageableClothingSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + + public override void Initialize() + { + base.Initialize(); + InitializeUser(); + + SubscribeLocalEvent(OnEquipped); + SubscribeLocalEvent(OnUnequipped); + SubscribeLocalEvent(OnShutdown); + } + + private void OnEquipped(EntityUid uid, DamageableClothingComponent component, GotEquippedEvent args) + { + if (_gameTiming.ApplyingState) + return; + component.User = args.Equipee; + var userComp = EnsureComp(args.Equipee); + userComp.ItemId = args.Equipment; + } + + private void OnUnequipped(EntityUid uid, DamageableClothingComponent component, GotUnequippedEvent args) + { + RemCompDeferred(args.Equipee); + component.User = null; + } + + private void OnShutdown(EntityUid uid, DamageableClothingComponent component, ComponentShutdown args) + { + if (component.User != null) + { + RemCompDeferred(component.User.Value); + component.User = null; + } + } +} diff --git a/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingUserSystem.cs b/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingUserSystem.cs new file mode 100644 index 0000000000..c83154a58a --- /dev/null +++ b/Content.Shared/_White/_Engi/DamageableClothing/DamageableClothingUserSystem.cs @@ -0,0 +1,49 @@ +using Content.Shared.Damage; + +namespace Content.Shared._White._Engi.DamageableClothing; + +/// +/// WD +/// +public sealed partial class DamageableClothingSystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + + private void InitializeUser() + { + SubscribeLocalEvent(OnUserDamageModified); + SubscribeLocalEvent(OnDamageModified); + SubscribeLocalEvent(OnEntityTerminating); + } + + private void OnUserDamageModified(EntityUid uid, DamageableClothingUserComponent component, DamageModifyEvent args) + { + if (TryComp(component.ItemId, out var blocking)) + { + if (args.Damage.GetTotal() <= 0) + return; + + if (!TryComp(component.ItemId, out var dmgComp)) + return; + + var blockFraction = 1; + blockFraction = Math.Clamp(blockFraction, 0, 1); + _damageable.TryChangeDamage(component.ItemId, blockFraction * args.OriginalDamage); + } + } + + private void OnDamageModified(EntityUid uid, DamageableClothingComponent component, DamageModifyEvent args) + { + var modifier = component.DamageModifier; + args.Damage = DamageSpecifier.ApplyModifierSet(args.Damage, modifier); + } + + private void OnEntityTerminating(EntityUid uid, DamageableClothingUserComponent component, ref EntityTerminatingEvent args) + { + if (!TryComp(component.ItemId, out var blockingComponent)) + return; + + RemCompDeferred(uid); + } + +} diff --git a/Resources/Locale/ru-RU/White/bucket-helmet.ftl b/Resources/Locale/ru-RU/White/bucket-helmet.ftl new file mode 100644 index 0000000000..689992ad27 --- /dev/null +++ b/Resources/Locale/ru-RU/White/bucket-helmet.ftl @@ -0,0 +1,4 @@ +ent-ClothingHeadBucketHelmet = шлем из ведра + .desc = Обычное ведро с двумя прорезями для глаз. При ношении на голове что-то липкое внутри цепляется за гарнитуру. + +buckethelmet-cant-strip = Шлем из ведра не позволяет это сделать diff --git a/Resources/Locale/ru-RU/White/clothing-outer-armor-reflective-ghetto.ftl b/Resources/Locale/ru-RU/White/clothing-outer-armor-reflective-ghetto.ftl new file mode 100644 index 0000000000..491be27338 --- /dev/null +++ b/Resources/Locale/ru-RU/White/clothing-outer-armor-reflective-ghetto.ftl @@ -0,0 +1,2 @@ +ent-ClothingOuterArmorReflectiveGhetto = самодельный отражающий жилет + .desc = Два зеркала соединённые проводами для сомнительной защиты от лазеров. diff --git a/Resources/Locale/ru-RU/White/ghetto-mirror-shield.ftl b/Resources/Locale/ru-RU/White/ghetto-mirror-shield.ftl new file mode 100644 index 0000000000..0a5b6a25db --- /dev/null +++ b/Resources/Locale/ru-RU/White/ghetto-mirror-shield.ftl @@ -0,0 +1,2 @@ +ent-MirrorShieldGhetto = самодельный зеркальный щит + .desc = Сделанное на скорую руку зеркало с рукояткой для использования как сомнительная защита от лазеров. diff --git a/Resources/Locale/ru-RU/_Engi/pacified-on-chaplain-action.ftl b/Resources/Locale/ru-RU/_Engi/pacified-on-chaplain-action.ftl new file mode 100644 index 0000000000..d3dea6a291 --- /dev/null +++ b/Resources/Locale/ru-RU/_Engi/pacified-on-chaplain-action.ftl @@ -0,0 +1,5 @@ +pacified-by-chaplain = {$target} пасифицирован. +unpacified-by-chaplain = {$target} освобождён. + +pacify-by-chaplain = Пасифицировать +unpacify-by-chaplain = Освободить diff --git a/Resources/Locale/ru-RU/_Engi/possesed-blade.ftl b/Resources/Locale/ru-RU/_Engi/possesed-blade.ftl new file mode 100644 index 0000000000..ab2376b0e7 --- /dev/null +++ b/Resources/Locale/ru-RU/_Engi/possesed-blade.ftl @@ -0,0 +1,3 @@ +ghost-role-information-possessed-blade-name = Одержимый Клинок +ghost-role-information-possessed-blade-description = Вы - Одержимый Клинок. Подчиняйтесь своему владельцу. +ghost-role-information-possessed-blade-rules = Вы не имеете право атаковать своего владельца. Право собственности может быть передано только вашим владельцем. diff --git a/Resources/Locale/ru-RU/_Engi/station-goal.ftl b/Resources/Locale/ru-RU/_Engi/station-goal.ftl new file mode 100644 index 0000000000..d05b015eb6 --- /dev/null +++ b/Resources/Locale/ru-RU/_Engi/station-goal.ftl @@ -0,0 +1,251 @@ +ent-StationGoalPaper = цель станции от Центком + .desc = Похоже у вас будет много работы. + +engi-station-goal-fax-paper-name = цель станции от Центком + +engi-station-goal-form = Постановление Центрального Командования + --------------------------------------------------------------------- + Утверждение цели и задачи для станции { $station } + Центральным Командованием № 2562-CU-2 + Дата: { $date }.2562 года + --------------------------------------------------------------------- + Утвердить следующие цели для космической станции: + + { $text } + --------------------------------------------------------------------- + 1. Командование станции обязано строго следовать данной цели и заданию, а также предоставить все необходимые ресурсы и усилия для успешного выполнения миссии. + + 2. Право отменить данное постановление имеет исключительно Центральное Командование. + + 3. Сотрудникам станции запрещено покидать объект до момента выполнения цели. Исключение - станция находится в критическом состоянии и не является пригодной для жизни. + --------------------------------------------------------------------- + Данное Постановление выписано: + И.Ф: { $operator } + Должность: Оператор Центрального Командования + Печать: + +engi-station-goal-singularity = [bold]Постройка генератора, основанного на сингулярности.[/bold] + + Все детали для цели должны быть заказаны или собраны на станции. Категорически запрещено использовать уже имеющиеся компоненты. + + Для успешного выполнения цели необходимо сделать запуск сингулярности. + + После окончания смены вся конструкция будет отсоединена от станции и транспортирована на другой объект. + +engi-station-goal-solar-panels = [bold]Постройка сети солнечных панелей.[/bold] + + Требования: + - Сеть должна состоять из минимум двух ветвей, расположенных на противоположных концах станции. + - Каждая ветвь должна состоять из минимум 36 солнечных панелей. + - Каждая ветвь должна иметь минимум два СМЭСа, несоединённых со станцией. + +engi-station-goal-artifacts = [bold]Нахождение и исследование артефактов.[/bold] + + Экипаж станции должен найти минимум три артефакта любым способом, отличным от покупки. + + Сотрудники научного отдела должны изучить найденные артефакты и задокументировать их свойства. + + В качестве документации могут быть приняты отчёты о каждом узле (печатаются на специальной консоли) и отдельный документ с описанием в доступной форме схемы артефакта. + + Каждый документ должен быть подтверждён печатью научного руководителя или капитана. Артефакты с документацией должны быть доставлены на станцию центрального командования. + +engi-station-goal-bank = [bold]Постройка орбитального хранилища с припасами и технологиями.[/bold] + + Хранилище должно быть размещено в космосе, отдельно от основной станции, защищено от метеоритов и иметь автономное питание. + + В хранилище должно быть минимум четыре ящика: + - ящик с продвинутыми медикаментами; + - ящик с запасами лучших семян; + - ящик-холодильник еды с высокой питательной ценностью; + - ящик с ценными, но не уникальными платами. + +engi-station-goal-zoo = [bold]Улучшение рекреации персонала станции.[/bold] + + Для этого инженерный отдел должен построить зоопарк с как минимум 3 (тремя) вольерами. На каждый вольер один вид. Каждый вольер должен быть обеспечен едой для конкретного вида и роботом-уборщиком. Площадь каждого вольера как минимум 16 м². + + Животные должны быть заказаны в отделе снабжения. + +engi-station-goal-mining-outpost = [bold]Постройка орбитального шахтёрского аванпоста.[/bold] + + Аванпост должен быть размещен в космосе, отдельно от основной станции, защищён от метеоритов и иметь автономное питание, гравитацию и атмосферу. + + Аванпост должен иметь как минимум две жилые комнаты с освещением и окнами. Оборудование для проведения работ: как минимум по две кирки, сумки для руды. Как минимум два шахтёрских скафандра. + + На территории аванпоста должен быть склад для размещения добытого сырья и припасов: как минимум 500u (пятьсот единиц) пива в ящике-холодильнике для закусок. Как минимум по четыре набора медикаментов от механических повреждений. + +engi-station-goal-tesla = [bold]Постройка генератора, основанного на Тесле.[/bold] + + Все детали для цели должны быть заказаны или собраны на станции. Категорически запрещено использовать уже имеющиеся компоненты. + + Для успешного выполнения цели необходимо сделать запуск Теслы. + + После окончания смены вся конструкция будет отсоединена от станции и транспортирована на другой объект. + +engi-station-goal-security = [bold]Постройка и снабжение тренировочного комплекса для Службы Безопасности, с последующей проверкой состава.[/bold] + + В будущем данная станция будет передислоцирована в сектор граничащий с небезопасным. + + Задачей Инженерного отдела является постройка тренировочного комплекса, представляющего из себя полосу препятствий. Минимальное время на прохождение среднестатистического, подготовленного офицера, примерно 30 секунд. + Данная полоса должна включать в себя следующее: + - Змееобразные коридоры стекла. + - Различные препятствия для перелезания. + - Деревянную постройку с мишенями, имитирующую захват случайного отдела. + Инженерный отдел в праве строить и другие безопасные виды препятствий. + + Задачей Медицинского отдела является изготовление партии таблеток Эфедрина, дозировкой 10u каждая, в минимальном количестве 10 шт, с последующей передачей на хранение в защищенном контейнере Смотрителю станции. + + Задачей Службы Безопасности является проведение для каждого члена своего отдела тренировки на данной полосе с письменной фиксацией результатов. В результатах должно быть описано Имя и Фамилия сотрудника, а так же время за которое им была пройдена полоса. Лучшие сотрудники получат шанс на контракт о последующей работе на следующей смене данной станции. Результаты каждого сотрудника будет необходимо указать в отчете о состоянии цели. + +engi-station-goal-shuttle-med = [bold]Постройка пилотируемого медицинского шаттла.[/bold] + + Шаттл должен соответствовать следующим требованиям: + 1. Обеспечен стабильным источником питания и резервной батареей СМЭС. + 2. Уметь совершать следующие движения: крен, тангаж и рысканье. + 3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён. + 4. Иметь на борту химическую лабораторию с соответствующим оборудованием, рассчитанным минимум на одного сотрудника. + 5. Иметь отсек для медицинских коек, рассчитанным минимум на десять человек. + 6. Иметь на борту отсек с запасами медикаментов и провизии. + + Справочная информация для неквалифицированного персонала: + Крен — вращательное движение. + Тангаж — поступательное движение "вперёд" и "назад". + Рысканье — поступательное движение "боком". + +engi-station-goal-shuttle-sec = [bold]Постройка пилотируемого десантного шаттла.[/bold] + + Шаттл должен соответствовать следующим требованиям: + 1. Обеспечен стабильным источником питания и резервной батареей СМЭС. + 2. Уметь совершать следующие движения: крен, тангаж и рысканье. + 3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён. + 4. Иметь на борту места и снаряжение как минимум на пять офицеров СБ. + Снаряжение для каждого офицера должно представлять из себя хотя бы один вид легального огнестрельного оружия, полученного не из арсенала, бронежилет, шлем, униформу. + 5. Иметь на борту отсек с запасами медикаментов и провизии минимум на пять человек. + + Справочная информация для неквалифицированного персонала: + Крен — вращательное движение. + Тангаж — поступательное движение "вперёд" и "назад". + Рысканье — поступательное движение "боком". + +engi-station-goal-shuttle-rnd = [bold]Постройка пилотируемого исследовательского шаттла.[/bold] + + Шаттл должен соответствовать следующим требованиям: + 1. Обеспечен стабильным источником питания и резервной батареей СМЭС. + 2. Уметь совершать следующие движения: крен, тангаж и рысканье. + 3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён. + 4. Иметь на борту следующие устройства и снаряжение: М.А.К.А.К. (x1), М.А.Р.Т.Ы.Х. (х2), синхронизатор аномалий (x1), магнитные сапоги (х2) и экспериментальный сосуд аномалии (х1), а также как минимум два скафандра EVA и два костюма радиационной защиты. + + Справочная информация для неквалифицированного персонала: + Крен — вращательное движение. + Тангаж — поступательное движение "вперёд" и "назад". + Рысканье — поступательное движение "боком". + +engi-station-goal-shuttle-srv = [bold]Постройка пилотируемого пассажирского шаттла.[/bold] + + Шаттл должен соответствовать следующим требованиям: + 1. Обеспечен стабильным источником питания и резервной батареей СМЭС. + 2. Уметь совершать следующие движения: крен, тангаж и рысканье. + 3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён. + 4. Иметь на борту полностью обустроенный бар, в котором должен быть раздатчик безалкоголя, раздатчик алкоголя, бочка кваса, ящик барных принадлежностей, ящик пополнения раздатчика алкоголя, ящик пополнения раздатчика безалкоголя. + 5. Иметь на борту обустроенную кухню, в которой должен быть ящик кухонных припасов и ящик кухонных принадлежностей. А также один гидропонный лоток и холодильник. + 6. На борту должны быть приватные комнаты для комфортного проживания как минимум четверых человек. + 7. На борту должен быть музыкальный автомат и ящик настольных игр. + + Справочная информация для неквалифицированного персонала: + Крен — вращательное движение. + Тангаж — поступательное движение "вперёд" и "назад". + Рысканье — поступательное движение "боком". + +engi-station-goal-shuttle-emergency = [bold]Постройка пилотируемого спасательного шаттла.[/bold] + + Шаттл должен соответствовать следующим требованиям: + 1. Обеспечен стабильным источником питания и резервной батареей СМЭС. + 2. Уметь совершать следующие движения: крен, тангаж и рысканье. + 3. Доступ к используемому оборудованию внутри отсеков не должен быть затруднён. + 4. Иметь на борту ящик медицинских припасов, продвинутый аварийный набор, два ящика с наборами EVA, ящик стекла, два ящика стали, ящик пластали, ящик джетпаков, ящик ИРП. + + Справочная информация для неквалифицированного персонала: + Крен — вращательное движение. + Тангаж — поступательное движение "вперёд" и "назад". + Рысканье — поступательное движение "боком". + +engi-station-goal-theatre = [bold]Постройка театральной зоны.[/bold] + + На данной станции пройдут переговоры с крупными компаниями для заключения партнёрских соглашений. + + Театральная зона должна включать в себя: + 1. Сцена с минимальным размером в 28м². + 2. Минимальная вместимость зала в 21 персону. + 3. Закулисье с различными нарядами, музыкальными инструментами, несколькими ящиками игрушек и мехом модели Х.О.Н.К. + 4. Комнату или комнаты для четырех актеров. На каждого актера должно приходится по пять любых пирогов. + + Материалы для клоунских скафандров вы можете получить из ящика театрального снаряжения. + В случае проведения тестового представления сервисный отдел и командование станции получат вознаграждение по прибытию на Станцию ЦК. + По окончании работ ЦК может прислать представителя для проведения тестового представления. + +engi-station-goal-ai = [bold]Постройка автономного отсека ИИ.[/bold] + + По окончанию строительства отсек должен быть отстыкован от станции и отправлен дрейфовать в космосе. + + Требования: + 1. Автономное питание на солнечных панелях или РИТЭГ, подключенные к СМЭС и Подстанции. + 2. Иметь отсек для позитронного мозга. + 3. Консоль сканера массы. + 4. Два борга без позитронного мозга: инженерного и научного назначения. + 5. Шлюз в отсек с командным доступом. + 6. Сервер коммуникации и маршрутизатор проводных камер. + 7. Снаружи отсек должен быть окружён контуром охлаждения. + Контур охлаждения должен представлять собой канал, шириной не менее одного метра, полностью заполненный любым газом, кроме обычной воздушной смеси, при температуре ниже -100 градусов по Цельсию и давлении как минимум в 3 раза превышающем атмосферное. Контур должен опоясывать не менее 80% модуля. + + Рекомендуется предпринять дополнительные меры безопасности: + - Защиту от метеоритов. + - Сеть вокруг отсека под высоким напряжением. + +engi-station-goal-botany = [bold]Постройка теплиц и выведение приспособленных к температуре растений.[/bold] + + На станции или вблизи неё требуется построить три отсека с контролируемым климатом: + - Отсек с температурой 5 градусов Цельсия. + - Отсек с температурой 25 градусов Цельсия. + - Отсек с температурой 45 градусов Цельсия. + + Каждый отсек необходимо снабдить минимум шестью гидропонными лотками и полным резервуаром с водой. + В каждом отсеке должно находится хотя бы одно растение, приспособленное к температуре отсека. + +engi-station-goal-bunker = [bold]Приспособить станцию к мощным гиперэнергетическим потокам.[/bold] + + Необходимо пристроить каждому отделу комнату, далее именуемой “бункер”, в которой экипаж станции мог бы укрыться от последствий гиперэнергетических потоков. + + Требования к бункеру: + 1. Минимальный размер 25м². + 2. Укреплённые стены. + 3. Вход через два непрозрачных шлюза с соответствующим отделу доступом. + 4. От четырех кресел пилота. + 5. Содержать базовые лекарства в виде таблеток со справкой о их назначении и наборы от механических повреждений. + 6. Запасы провизии с расчетом на четыре человека, на срок от 72 часов. + 7. Автономное питание и канистры с воздухом и кислородом. + 8. Шкафчики со снаряжением для биологической и радиационной защиты. Так же аварийные скафандры EVA и костюм сапёра. + 9. Интерком с общим ключом шифрования. + +engi-station-goal-circus = [bold]Постройка полноценного цирка хомяков.[/bold] + + На данной станции пройдут переговоры с крупными компаниями для заключения партнёрских соглашений. + + Цирковая зона должна включать в себя: + 1. Сцена с минимальным размером в 10м². + 2. Минимальная вместимость зала в 10 персон. + 3. Закулисье с различными нарядами, музыкальными инструментами и несколькими ящиками игрушек. + 4. Комнату дял клеток с хомяками. На каждого актера должно приходится по два уникальных костюма. + + В случае проведения тестового представления сервисный отдел и командование станции получат вознаграждение по прибытию на Станцию ЦК. + По окончании работ ЦК может прислать представителя для проведения тестового представления. + +station-goal-biodome = [bold]Постройка биокупола для исследования и выращивания аномальных организмов.[/bold] + + Требования к проекту: + + - Купол с регулируемой атмосферой для выращивания и изучения аномалии "Плоть" и/или "Цветок". + - Наличие системы безопасного входа/выхода для Купола. + - Наличие системы безопасности для защиты от биологических угроз и утечки опасных веществ. + - Наличие системы экстренной отчистки Купола от биологического материала. + - Создание научной группы для проведения экспериментов и анализов собранных образцов. + + Проект считается завершённым при успешной реализации созданной Куполом продукции на 10000 (десять тысяч) кредитов. diff --git a/Resources/Locale/ru-RU/white/station-goal/station-goal-command.ftl b/Resources/Locale/ru-RU/white/station-goal/station-goal-command.ftl index 0108153e31..10d87709f0 100644 --- a/Resources/Locale/ru-RU/white/station-goal/station-goal-command.ftl +++ b/Resources/Locale/ru-RU/white/station-goal/station-goal-command.ftl @@ -1,3 +1,3 @@ -send-station-goal-command-description = Отправляет выбранную цель станции на всех факсы способные её принять +send-station-goal-command-description = WD. Отправляет выбранную цель станции на все факсы способные её принять send-station-goal-command-help-text = Использование: { $command } send-station-goal-command-arg-id = diff --git a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml index b6a7ae38e3..bf94bea6a5 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml @@ -66,3 +66,7 @@ - type: PhysicalComposition materialComposition: Plastic: 50 + - type: Construction # WD + deconstructionTarget: null + graph: ClothingHeadBucketHelmet + node: start diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index 2a39c20089..3f76e689d5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -28,3 +28,7 @@ storedRotation: -44 # WD shape: # WD - 0,0,1,3 + - type: KnockDownOnHit + knockDownBehavior: NoDrop + knockdownTime: 0.8 + requireWield: true diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/tagilla_hammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/tagilla_hammer.yml index 52b02eb7e2..b4564143ff 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/tagilla_hammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/tagilla_hammer.yml @@ -39,3 +39,7 @@ isBloodDagger: false - type: UseDelay delay: 1 + - type: KnockDownOnHit + knockDownBehavior: NoDrop + knockdownTime: 0.8 + requireWield: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index 36be6451d2..cbefa86808 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -82,6 +82,7 @@ - type: FaxMachine name: "Central Command" notifyAdmins: true + receiveStationGoal: true # WD - type: entity parent: FaxMachineBase @@ -109,5 +110,6 @@ - type: FaxMachine name: "Captain's Office" receiveNukeCodes: true + receiveStationGoal: true # WD - type: StealTarget stealGroup: FaxMachineCaptain diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml index 43d4460ec5..da9dfef6ae 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/chaplain_weapons.yml @@ -263,11 +263,11 @@ sprite: White/Objects/Weapons/Chaplain/scythe-inhands.rsi - type: Sharp -# Может пиздеть +# Может пиздеть и может давать пизды - type: entity parent: HolyKatana id: PossessedBlade - name: одержимый клинок + name: Одержимый Клинок description: Когда на станции царит хаос, приятно иметь рядом друга. components: - type: Sprite @@ -281,9 +281,9 @@ - suitStorage - type: GhostRole allowSpeech: true - name: Одержимый Клинок - description: Вы - одержимый клинок. Подчиняйтесь своему владельцу. - rules: ghost-role-component-default-rules + name: ghost-role-information-possessed-blade-name + description: ghost-role-information-possessed-blade-description + rules: ghost-role-information-possessed-blade-rules - type: GhostTakeoverAvailable - type: Examiner - type: Item @@ -292,6 +292,14 @@ shape: - 0, 0, 1, 3 sprite: White/Objects/Weapons/Chaplain/possessed.rsi + - type: DamageOtherOnHit + damage: + types: + Slash: 13 + - type: CombatMode + - type: UseDelay + delay: 2.0 + - type: PacifiedOnChaplainAction # Приклеен к руке, быстро и громко бьет - type: entity @@ -494,6 +502,9 @@ soundSwing: collection: HammerMiss - type: DisarmMalus + - type: KnockDownOnHit + knockDownBehavior: NoDrop + knockdownTime: 0.4 # Имеет все инструменты в себе, но работает медленно и почти не наносит урона - type: entity diff --git a/Resources/Prototypes/_White/_Engi/Entities/Clothing/Head/bucketHelmet.yml b/Resources/Prototypes/_White/_Engi/Entities/Clothing/Head/bucketHelmet.yml new file mode 100644 index 0000000000..524c6e95af --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Entities/Clothing/Head/bucketHelmet.yml @@ -0,0 +1,26 @@ +- type: entity + parent: ClothingHeadBase + id: ClothingHeadBucketHelmet + name: bucket helmet + description: A regular bucket with two eye holes. When worn on the head, something sticky inside latches on the earpiece. + components: + - type: Sprite + sprite: White/_Engi/Clothing/Head/bucketHelmet.rsi + - type: Clothing + sprite: White/_Engi/Clothing/Head/bucketHelmet.rsi + - type: IdentityBlocker + - type: Armor + modifiers: + coefficients: + Blunt: 0.95 + - type: Tag + tags: + - HidesHair + - WhitelistChameleon + - type: Construction + deconstructionTarget: start + graph: ClothingHeadBucketHelmet + node: helmet + - type: Item + size: Normal + - type: BucketHelmet diff --git a/Resources/Prototypes/_White/_Engi/Entities/Clothing/OuterClothing/ClothingOuterArmorReflectiveGhetto.yml b/Resources/Prototypes/_White/_Engi/Entities/Clothing/OuterClothing/ClothingOuterArmorReflectiveGhetto.yml new file mode 100644 index 0000000000..92184cf628 --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Entities/Clothing/OuterClothing/ClothingOuterArmorReflectiveGhetto.yml @@ -0,0 +1,53 @@ +- type: entity + parent: ClothingOuterArmorBasic + id: ClothingOuterArmorReflectiveGhetto + name: makeshift reflective vest + description: Two mirrors connected by wires for dubious laser protection. + components: + - type: Sprite + sprite: White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi + state: icon + - type: Clothing + sprite: White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi + - type: Armor + modifiers: + coefficients: + Slash: 0.9 + Heat: 0.7 + - type: Reflect + reflectProb: 0.7 + innate: true + placement: + - Body + reflects: + - Energy + - type: Construction + graph: ClothingOuterArmorReflectiveGhetto + node: vest + - type: DamageableClothing + damageModifier: + coefficients: + Blunt: 2 + Slash: 0.9 + Piercing: 1.5 + Heat: .5 + flatReductions: + Heat: 0.5 + - type: Damageable + damageContainer: Shield + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 60 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:SpawnEntitiesBehavior + spawn: + ShardGlass: + min: 3 + max: 5 diff --git a/Resources/Prototypes/_White/_Engi/Entities/Objects/Shields/MirrorShieldGhetto.yml b/Resources/Prototypes/_White/_Engi/Entities/Objects/Shields/MirrorShieldGhetto.yml new file mode 100644 index 0000000000..c0873496c1 --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Entities/Objects/Shields/MirrorShieldGhetto.yml @@ -0,0 +1,62 @@ +- type: entity + name: makeshift mirror shield + parent: BaseItem + id: MirrorShieldGhetto + description: A makeshift mirror with a handle, used as dubious laser protection. + components: + - type: Sprite + sprite: White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi + state: icon + - type: Item + sprite: White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi + size: Ginormous + - type: Tag + tags: + - MirrorShieldGhetto + - type: Reflect + reflectProb: 0.7 + innate: true + reflects: + - Energy + - type: Blocking + passiveBlockModifier: + coefficients: + Blunt: 2 + Slash: 0.9 + Piercing: 1.5 + Heat: .6 + activeBlockModifier: + coefficients: + Blunt: 2 + Slash: 0.9 + Piercing: 1.5 + Heat: .3 + flatReductions: + Heat: 0.5 + blockSound: !type:SoundPathSpecifier + path: /Audio/Effects/glass_step.ogg + - type: MeleeBlock + - type: Damageable + damageContainer: Shield + - type: Construction + graph: MirrorShieldGhetto + node: shield + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 40 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:SpawnEntitiesBehavior + spawn: + ShardGlass: + min: 2 + max: 3 + - type: StaticPrice + price: 50 + - type: DisarmMalus diff --git a/Resources/Prototypes/_White/_Engi/Recipes/Graphs/bucketHelmet.yml b/Resources/Prototypes/_White/_Engi/Recipes/Graphs/bucketHelmet.yml new file mode 100644 index 0000000000..cefb0023e3 --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Recipes/Graphs/bucketHelmet.yml @@ -0,0 +1,21 @@ +- type: constructionGraph + id: ClothingHeadBucketHelmet + start: start + graph: + - node: start + entity: Bucket + edges: + - to: helmet + conditions: + - !type:SolutionEmpty + solution: bucket + steps: + - tool: Cutting + doAfter: 5 + - node: helmet + entity: ClothingHeadBucketHelmet + edges: + - to: start + steps: + - tool: Welding + doAfter: 5 diff --git a/Resources/Prototypes/_White/_Engi/Recipes/Graphs/ghettoMirrorShield.yml b/Resources/Prototypes/_White/_Engi/Recipes/Graphs/ghettoMirrorShield.yml new file mode 100644 index 0000000000..d31994341c --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Recipes/Graphs/ghettoMirrorShield.yml @@ -0,0 +1,42 @@ +- type: constructionGraph + id: MirrorShieldGhetto + start: start + graph: + - node: start + edges: + - to: shield + steps: + - material: Glass + amount: 5 + doAfter: 3 + - material: Steel + amount: 3 + doAfter: 3 + - node: shield + entity: MirrorShieldGhetto + +- type: constructionGraph + id: ClothingOuterArmorReflectiveGhetto + start: start + graph: + - node: start + edges: + - to: vest + steps: + - material: Cable + amount: 5 + - tag: MirrorShieldGhetto + name: самодельный зеркальный щит + icon: + sprite: White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi + state: icon + amount: 1 + - tag: MirrorShieldGhetto + name: самодельный зеркальный щит + icon: + sprite: White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi + state: icon + amount: 1 + doAfter: 6 + - node: vest + entity: ClothingOuterArmorReflectiveGhetto diff --git a/Resources/Prototypes/_White/_Engi/Recipes/ghettoMirrorShield.yml b/Resources/Prototypes/_White/_Engi/Recipes/ghettoMirrorShield.yml new file mode 100644 index 0000000000..8b42cc331a --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/Recipes/ghettoMirrorShield.yml @@ -0,0 +1,25 @@ +- type: construction + name: самодельный зеркальный щит + id: MirrorShieldGhetto + graph: MirrorShieldGhetto + startNode: start + targetNode: shield + category: construction-category-weapons + objectType: Item + description: Сделанное на скорую руку зеркало с рукояткой для использования как сомнительная защита от лазеров. + icon: + sprite: White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi + state: icon + +- type: construction + name: самодельный отражающий жилет + id: ClothingOuterArmorReflectiveGhetto + graph: ClothingOuterArmorReflectiveGhetto + startNode: start + targetNode: vest + category: construction-category-clothing + objectType: Item + description: Два зеркала соединённые проводами для сомнительной защиты от лазеров. + icon: + sprite: White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi + state: icon diff --git a/Resources/Prototypes/_White/_Engi/StationGoal/stationGoals.yml b/Resources/Prototypes/_White/_Engi/StationGoal/stationGoals.yml new file mode 100644 index 0000000000..4877fb1cbf --- /dev/null +++ b/Resources/Prototypes/_White/_Engi/StationGoal/stationGoals.yml @@ -0,0 +1,75 @@ +- type: stationGoal + id: Singularity + text: engi-station-goal-singularity + +- type: stationGoal + id: SolarPanels + text: engi-station-goal-solar-panels + +- type: stationGoal + id: Artifacts + text: engi-station-goal-artifacts + +- type: stationGoal + id: Bank + text: engi-station-goal-bank + +- type: stationGoal + id: Zoo + text: engi-station-goal-zoo + +- type: stationGoal + id: MiningOutpost + text: engi-station-goal-mining-outpost + +- type: stationGoal + id: Tesla + text: engi-station-goal-tesla + +- type: stationGoal + id: SecurityTraining + text: engi-station-goal-security + +- type: stationGoal + id: ShuttleMed + text: engi-station-goal-shuttle-med + +- type: stationGoal + id: ShuttleSec + text: engi-station-goal-shuttle-sec + +- type: stationGoal + id: ShuttleRnd + text: engi-station-goal-shuttle-rnd + +- type: stationGoal + id: ShuttleSrv + text: engi-station-goal-shuttle-srv + +- type: stationGoal + id: ShuttleEmergency + text: engi-station-goal-shuttle-emergency + +- type: stationGoal + id: Theatre + text: engi-station-goal-theatre + +- type: stationGoal + id: CellAI + text: engi-station-goal-ai + +- type: stationGoal + id: Botany + text: engi-station-goal-botany + +- type: stationGoal + id: Bunker + text: engi-station-goal-bunker + +- type: stationGoal + id: HamsterСircus + text: engi-station-goal-circus + +- type: stationGoal + id: Biodome + text: station-goal-biodome diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml index 375c824a14..7e71fc6b52 100644 --- a/Resources/Prototypes/_White/tags.yml +++ b/Resources/Prototypes/_White/tags.yml @@ -120,3 +120,6 @@ - type: Tag id: VoiceActivatedBombImplant + +- type: Tag + id: MirrorShieldGhetto diff --git a/Resources/Textures/White/_Engi/Clothing/Head/bucketHelmet.rsi/equipped-HELMET.png b/Resources/Textures/White/_Engi/Clothing/Head/bucketHelmet.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..2217a63c0f9ee72b4f77b7b0b0c17a3fd4376d28 GIT binary patch literal 828 zcmV-C1H=4@P)Px%+(|@1RCt{2noVdLK@`XTmK;1)0z%M(wznPvUM!fBfX5c3P!NO)<|YXUg{9C? zkV1ReKoNRs$t{O96g-8NUWJy{LoPz@VGX-RB8bgJv@kvBe#C0Jvmd&U_dD$}JM({U z9B1Fod%!IxVD-Uzy{=zxfB41BZG-L^KEHczc`P&OblP=&t78Jd9m`KniH|aS7-jY# zCkp_8T)E0_?C271>vK;40LaM#)C(2rg$e-ZJbq(m7~8n1zrx#L&^Fom31B!$HFFY^i}jWck!&W@9E#b3w`bt007uejyIg0V}?&pjq63zR~-+* zH39lEGdsI;%+PNG{q~$*?xE{XJMKW+@~bPAO0i%ti24Izu4uY_gu!3{Q4}qYYxR}I zqu*#WEbCid0iq}d6h&btuiwsnCj9UoN~Mymc)(44o;ZNpSV@u?0Oa#|y{{k$3;-&X z%74c*2Q&a*(BcKQe=SLpShw4SEX$T0CkTQd2*P(P?EP&HfR-Knn6dXY$iZ~v=QnJf z2wBDN&I2A#z&!jkF-w^Mz+aO<5ClOG1aT|j{uH~PSZH2;GE?!O+^gR76!@R&3^#Op9lh^X}njwo|sr3QCBuQybPv4CI&~o=1wvDlZ z+w}q5d%)`Y6V}_@9p8ka|Fp0DJV59BfhQ+TYg@%}eZVx6Z1L)kkLaC#d^~efN+kf=-FNg2B^7G5qc4f25X0t37 ziy)N%SB}LsLj*x!;c%G2qkMy+D2(b62!bF8f*=Tj zAP9mW2!e3JUrfV(Vm(RvUjP6A4rN$LW=%~1DgXcg2mk;800000(o>TF0000QY8$; zsl=#J@iAp%bDQ8RI^xD~K8QLKGbNg#Mj%XxBBEpSZKiYImD1?uX67Z|ecyNA@B97V z|684%HFIP{bc94A8JTG|%>^?gj$z^8&HH@!z%-mSFW@DT$dlp-shJ!(ULukGN?Y@U zJj)!6U|b5EWC|#S*Tn*~M3R!`WpSd25}*RgLAwp`z~N&sM3V-1zSe?TSR++Pn|&OW z>&vndz9K?T!fB~ciWdU}E=s^5ugmG?F|Psk^I~8venw!(4-twCaJncE%ClrcMuwvx zy+SD`P*e#egOz5AN~hN+K`KYxoSHc0E{1AYP?L%cYPC>5w^lOISDK^$AcIsL*(0->Cgi*gG*z$$}SwvZ7RzL5DB z>frGU0)THVmY|H6>f&+*MexG(CBTe;LtcvJt)(o5%%ymygd?cwOMsd&qBSgLu{{S=*M z=)Q>|O2o(x-6#L&{r5N;losxMZ62}U#FW6yG!KGR8mNd|syMK6(vUw3Fq{yx+W-?{ zSSb5X9B@*d^OjEiwZ^iA+X@$8tQ9qW)nV;3?n{s0=j;UU5 zY^ckxG`HjkBO)_2dF*$WTUs)2?AV{BSp9zZ=fyW}=3lTxbtcwSn~N5rv=f3a#AjcMYVbmMdsSpZD-mY$3@HG=3vF6=$Nm%5%$8U8- z-D}(MWULfIi{IR^tHsN9r%YVIA~r-)SBVFIpyfl@;;>E zJU_qY_Yvz;dS)Z#yOXB%?7ZLUtNy8@cz0-=6mF?)U;b$O&n;KF`nQHXjJoBS*mmqu z=Q!P{%S*4+&(8RvZW^&QH|FM(%ZD~zYBf(VNaKx0TdL!o%1OG%-Ki%|#KfP;D%$ek z2<4EvBV;R^Rj2KZXYGxaooykqqx%lFInNiCBt2SGqf2Z$)V=sr7&%ZGjWy8iYeVj| z_SKKQST(8c@U^JsUD9oHW;o(z-YQsnB7EIK&4BdQGO2BU?UmT=XCG|(BCf)BMA0Wi zr|!**{Wck{MSS<+#2TitsmZ)=UVrK69UmUQnM$M;+74qhLKs!z@6 zvYi^&Gb*~cY;-TD-)BvPH*V1$|E6ogL0Y#tTzjLPN~oFjNo#Lybj97J5VX60k0JDQ z>CLH=B?k^1sQa`xCuz*X*c`&vEl2E>W+;iW$8}SXT%fUFOkd zk)k;7t5ou9d(OlI^ZutBR6L1P0vZkk|59z_CGPo6I`X0UzVx|Y$Lf~IZ~B<~E3&?_ za_XBJt9km5yjH$(SL=JMkkuMgD=71Sn%(co3R(_VxN;wT`Fm?knfFFU&gGAPuKV|E z!BNBbC2Tn*R+Uab;g%vC9$<);a(S4tj%e!OuiCU{#AYNN{eMH z7_M*lQMX@TXjxG0b0!nTN~PmWCaRT6?Mx<`K(_IMRZmV|5EozIc~Y2@dxKrZrCaxM zGS;qqB*s zKac(GZ!5d|@0bf;HZiSvZJpKn<=;2K4V^1Q2<7z8Hf8wXuv)e&r*DSIV-WsA#!u-fM0!kIEYla8F9%)#=$(dMkd_pf|@E)3ou z1pOMD%VW1^{MBmQ`XQ9b@IewIdoQavcaJc$o>;+!h=P?3iD@CV%+FqKK6Xaq_Ahg$ z)ab=I*?0KE`JKcjEv6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/inhand-left.png b/Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..edc2a32edb6151b812471c36d9090080e1daafb3 GIT binary patch literal 610 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9GG!XV7ZFl&wk0|S$Y zr;B4q#hkaZZ1WB|2(;dJTlkcLLvz__RwqF}NB7CxEV<6J3YtPZH-`C5P`f)%$=A=p zT_w!2AzFNL(}O<~<)8w3$zyKcvse647#du+UR?Id1UMlFP3SW9Yn82 zCs@cZeSG`l(GQ+`zt=?Ft6mTj94~oQ^1|D){Wa5rPOaMdZcpjg?XIB??~WS1UVV?r z&@JZty9XQRd^11)-NEHru0ZmUv!81}^GsNEZrxYmRZM%npF6zRT(%>`v?#uD{hD)A z{g1D*$nJY*iO-X`f?@^t3t#r2p5Onk*~W}UiN3% zimk_jydLe1H#2zre*g6YTcd$qJ}cEC^KsSQgHtZ~Mcue>__F7M2m7WYtJe$OD($Yh zTXEYXyqfKZ#O(90Z_W+7X+JUOl(@c9Ry2pB$?Lz{M5iwoa++{7Nl}r-(#rm3#h-fa n-KTSrDB--xZKXHn2mc5|4zCyFD>vp|3hfn&Y7lkceeh~J5@aULkj7{Tg zwZD%Uca{B+(eYi&v@j@cQk}oktxL;nY+8+KBm@sC79SBySj>2XDaV8%x}ldXfqTP6 zh8#vSsRrExZp<54Z)7lRW02-O09C|iccAd9wC6OY1_lGQzH8_2zmNN6czdFX_tVE8 zuQD8X`8ML-`#7Jw&$as-UT^lEVbRp7d?JZ6QpZr*clWoqbFTKYGE6wS>Eq|pXAQWHbHjT(iO!oAcRowfz~N%S`wmV?NX8-^v~F+vcV(&RkslR8YX_$JTRE zyLZR(zj<`$mDY#rY;As%i=S!+h_K4p&A(y#$y5GGP)go{t>h{SM>q;BW&fLBA z+jU!(-zi%^&#g;;&9Ic?!v7sL^0#ll)Dm!dQTzP;{dqtSF|3idc65o-RS$puXz%o& zHG21|J@fRIyezopr E0KL8lL;wH) literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/meta.json b/Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/meta.json new file mode 100644 index 0000000000..61fc5a5260 --- /dev/null +++ b/Resources/Textures/White/_Engi/Clothing/OuterClothing/armor_reflect_ghetto.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "stepppasha", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/icon.png b/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f1bc32c7d6a0de6b201b9ec6a04d1e626c938fe8 GIT binary patch literal 330 zcmV-Q0k!^#P)rAPj{cRmaFaJ|TIKjKd&EK4qWmK`$X{XnyRL zh#v6K3VxsY@rz3-p=CUps&{}6@DBjbZx#_z^4@Q9A_4$znkG{%XPpBfgaiQ0yvfHH z*P7!v-UARqNTqO&VHol^CJ6N%AfiLkES^I|5)st}@ZNuHdnrE8Gng6W{rDN+sQXg9 z$f?d&^$Pa7KNGiH!msAQMdxeo7J!=KW`Nq_Y5);=A2gTZF~&R@>i__7TJgO#XQB3j z+z~UMid(t|lsm8(j04nXuIe5zx}k_TECc4uj4U;+W|Tn=?KtPP!^mvMwWIkTQ3vP% c9iTbD3sBX9v%_LrI{*Lx07*qoM6N<$f-S*@n*aa+ literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-left.png b/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..ccfebc408cb17bcd08beab31743078d44a07c546 GIT binary patch literal 758 zcmVyx-;_Ta zW1hZSYol}S=~@T@0L(nkoB2z80L7JGVH9jejW`SDve+HjlySrdDU!HvlkQ`9TRx9{??3P@xl>O`V z8Ue5h!nzJ<1)pDgg-;4>0_+jI#Bg8{;9tyq0!e@n0=)N+?@PgZ@6*a~6Q3kV0yyU$ zmRy_p{6A~>Vm9&LAA+nP%>sEg$8l^1pR(_qtGb}Z7h{Z4ZXh{ep65r_){OadZ*3v8 zm5&4DTEJS1d&O2PhO#kjfWKK@SPD1!hGAfx3CK&~d)5HJgb;qIdAGgE@2Btqyu}bp zH3$IHG%eo0u^g`c_Lc$wPxgJnlI?4#@x848d*JQL;jL%|pdskTzZCs=0d^k(Eohuo z=nmMs!JiL0?Gq{=?|?3Vb_cZ41<>w*Ho5@X9neM>fSb@-TiyFB!5BmO9FIrRN=nKB zn?!gOt*!aB5D~yRSA3Hr(GC?N0*vF>+y>`>wYGXHWedcLp_H9h-UV*qr$THNkaPi8 z_5lF_Qf8!gcoRR>2_g>IYkQlcoxTu~B3|0ij4>8JT>NVxBETL88@SqG7oc?lL;}?I z#D;+PzIhsi2$LVBp+HOkX(w>;iwKZsUt%SgPLgoAKtzC)9Z4625Lo!7szI^rC*#>Wfr2M#4{^BSAAkN^Mx07*qoM6N<$g5CsF&Hw-a literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-right.png b/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..237cb837c318ed51f7014c8ccf886f37a689d2f4 GIT binary patch literal 697 zcmV;q0!ICbP)4|E<2Jyp4uIPLw>kiB1KjEWxD9Zt1K>8mt*_$;Aw=?} zQYvVzlQ!oZ0EoxqvA4Cfnp~D8G2@)Wx~}5t_u^>&2w)CC=DDa`#s$QN?HG5B{Zp5ev1pCzYL+2{bznJSAu^T zLP=MC69CS+<3i^p1Z!>cPk~o{^9neX&npO}YdDoHfWp?cH{{FW(-g?7AnzbTSeB*P z>~9c~NBWiD1i-ezDQ5Iy{x_BVqe^~Do1)W75CEKW0vo~Ov(tN@Y=-W!N~fdW-)@Eg ze6RJdw!^W#wark~cK8$Z@&5>Q0Ne(+)d6rD;8q8~ZGc-H0Ji~dbpYH3xYYr08{k$4 zz-@qA9YD>+rPEeQQN*jRfOkQlic<|B|Id(0RB@^S7-Pt*U>Jr#brOBcO^~_@DEq$! z0A&?WW*?{o5Hmx4QXKoIsD$bYc-JvGRh+&Mx}%e;cM0zjW&hOxs0U9SrwYKk-w&XO zcgqy8);>Lft⪻gL#5aBk! ftqy?O0Jr`F?B+AjExmlI00000NkvXXu0mjf*YZBs literal 0 HcmV?d00001 diff --git a/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/meta.json b/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/meta.json new file mode 100644 index 0000000000..cb084b7fa0 --- /dev/null +++ b/Resources/Textures/White/_Engi/Objects/Weapons/ghetto_mirror_shield.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/Citadel-Station-13/Citadel-Station-13/commit/84223c65f5caf667a84f3c0f49bc2a41cdc6c4e3", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + } + ] +} From 68647fbf8e00aef42fd3d56dafed1cd1a3778281 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Wed, 27 Nov 2024 02:26:40 +0000 Subject: [PATCH 02/15] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 51 +++++++++++++++++++++----- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index d5de3842c8..06da4c72ef 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -1,13 +1,4 @@ Entries: -- author: Gersoon - changes: - - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0441\u0435\u0440\ - \u0432\u0435\u0440\u0430 \u0442\u0435\u043B\u0435\u043A\u043E\u043C\u043C\u0443\ - \u043D\u0438\u043A\u0430\u0446\u0438\u0438 \u043D\u0430 \u043E\u0441\u043D\u043E\ - \u0432\u043D\u044B\u0435 \u043A\u0430\u0440\u0442\u044B." - type: Add - id: 112 - time: '2023-04-03T10:53:52.0000000+00:00' - author: RavMorgan changes: - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E\u0437\ @@ -8875,3 +8866,45 @@ id: 611 time: '2024-11-22T19:21:34.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/788 +- author: BIG_Zi_348 + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0441\u0430\u043C\u043E\ + \u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u0435\u0440\u043A\u0430\u043B\ + \u044C\u043D\u044B\u0439 \u0449\u0438\u0442 \u0438 \u0435\u0433\u043E \u043A\ + \u0440\u0430\u0444\u0442." + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0441\u0430\u043C\u043E\ + \u0434\u0435\u043B\u044C\u043D\u044B\u0439 \u043E\u0442\u0440\u0430\u0436\u0430\ + \u044E\u0449\u0438\u0439 \u0436\u0438\u043B\u0435\u0442 \u0438 \u0435\u0433\u043E\ + \ \u043A\u0440\u0430\u0444\u0442. \u041E\u0441\u0442\u043E\u0440\u043E\u0436\ + \u043D\u043E - \u043E\u043D \u043E\u0447\u0435\u043D\u044C \u0445\u0440\u0443\ + \u043F\u043A\u0438\u0439." + type: Add + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u0448\u043B\u0435\u043C\ + \ \u0438\u0437 \u0432\u0435\u0434\u0440\u0430 \u0438 \u0435\u0433\u043E \u043A\ + \u0440\u0430\u0444\u0442. \u041E\u0431\u043B\u0430\u0434\u0430\u0435\u0442 \u043F\ + \u043E\u0432\u044B\u0448\u0435\u043D\u043D\u043E\u0439 \u0437\u0430\u0449\u0438\ + \u0442\u043E\u0439 \u043E\u0442 \u0433\u0430\u0440\u043D\u0438\u0442\u0443\u0440\ + \u043D\u044B\u0445-\u0432\u043E\u0440\u043E\u0432." + type: Add + - message: "\u041E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u0439 \u043A\u043B\u0438\ + \u043D\u043E\u043A \u0441\u043F\u043E\u0441\u043E\u0431\u0435\u043D \u043F\u043E\ + \u043C\u043E\u0433\u0430\u0442\u044C \u0432 \u0431\u043E\u044E." + type: Add + - message: "\u0421\u0432\u044F\u0449\u0435\u043D\u043D\u0438\u043A\u0438 \u0431\u044B\ + \u043B\u0438 \u043E\u0431\u0443\u0447\u0435\u043D\u044B \u043C\u0435\u0442\u043E\ + \u0434\u0430\u043C \u0441\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043D\u0438\ + \u044F \u043E\u0434\u0435\u0440\u0436\u0438\u043C\u044B\u0445 \u043A\u043B\u0438\ + \u043D\u043A\u043E\u0432." + type: Add + - message: "\u0414\u0432\u0443\u0440\u0443\u0447\u043D\u044B\u0435 \u043C\u043E\u043B\ + \u043E\u0442\u044B \u0442\u0435\u043F\u0435\u0440\u044C \u0432\u0430\u043B\u044F\ + \u0442 \u043D\u0430 \u0437\u0435\u043C\u043B\u044E." + type: Tweak + - message: "\u041F\u0435\u0440\u0435\u043D\u0435\u0441\u0435\u043D\u044B \u0443\u043D\ + \u0438\u043A\u0430\u043B\u044C\u043D\u044B\u0435 \u043C\u0435\u0445\u0430\u043D\ + \u0438\u043A\u0438 Engi." + type: Add + id: 612 + time: '2024-11-27T02:25:36.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/790 From a07859bf18bfd88adb21f160a3d59037878a66b5 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Thu, 28 Nov 2024 23:20:13 +0300 Subject: [PATCH 03/15] =?UTF-8?q?=D0=BD=D0=B0=D0=B1=D0=BE=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prototypes/catalog/fills/crates/medical.ftl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/medical.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/medical.ftl index 0e8465fe74..7ed8c902ee 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/medical.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/medical.ftl @@ -9,17 +9,17 @@ ent-CrateMedicalSurgery = ящик хирургических инструмен ent-CrateMedicalScrubs = ящик медицинских роб .desc = Врачебная одежда. ent-CrateEmergencyBurnKit = Аварийный набор лечения физических травм - .desc = Ящик, содержащий 4 набора для лечения физических травм. + .desc = Ящик, содержащий набор для лечения физических травм. ent-CrateEmergencyToxinKit = Аварийный набор лечения токсинов - .desc = Ящик, содержащий 4 набора для лечения токсинов. + .desc = Ящик, содержащий набор для лечения токсинов. ent-CrateEmergencyO2Kit = Аварийный набор лечения кислородного голодания - .desc = Ящик, содержащий 4 набора для лечения кислородного голодания. + .desc = Ящик, содержащий набор для лечения кислородного голодания. ent-CrateEmergencyBruteKit = Аварийный набор лечения механических травм - .desc = Ящик, содержащий 4 набора для лечения механических травм. + .desc = Ящик, содержащий набор для лечения механических травм. ent-CrateEmergencyAdvancedKit = Продвинутый аварийный набор - .desc = Ящик, содержащий 4 продвинутые аптечки первой помощи. + .desc = Ящик, содержащий продвинутую аптечку первой помощи. ent-CrateEmergencyRadiationKit = Аварийный набор выведения радиации - .desc = Ящик, содержащий 4 набора для выведения радиации. + .desc = Ящик, содержащий набор для выведения радиации. ent-CrateChemistryP = ящик химикатов (P) .desc = Содержит химикаты из P-блока периодической таблицы элементов. From 8fe6798dc18b24671d26d4709db07cff3c23b127 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Thu, 28 Nov 2024 23:59:11 +0300 Subject: [PATCH 04/15] =?UTF-8?q?=D0=94=D0=B0=D0=B4=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=B4=D0=B4=D0=B0=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resources/Prototypes/Roles/Jobs/Justice/inspector.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml b/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml index 981814ed81..11d85d6138 100644 --- a/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml +++ b/Resources/Prototypes/Roles/Jobs/Justice/inspector.yml @@ -17,6 +17,8 @@ icon: "JobIconInspector" arrivalNotificationPrototype: InspectorArrivalNotification supervisors: job-supervisors-captain + whitelistedSpecies: + - Human access: - Service - Lawyer From 0a1054e21a24ff6a5348e468e5af57195cb015d8 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Fri, 29 Nov 2024 19:35:52 +0300 Subject: [PATCH 05/15] =?UTF-8?q?=D0=B1=D0=BE=D0=BC=D0=B1=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resources/Locale/ru-RU/_white/locales-new/autotranslate-112.ftl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-112.ftl b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-112.ftl index 32133aaf45..ef231f961b 100644 --- a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-112.ftl +++ b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-112.ftl @@ -27,6 +27,8 @@ ent-MachineAnomalyVesselExperimental = экспериментальный сос .desc = Передовой сосуд аномалий, обладающий большим потенциалом для исследований, но при этом повышенной нестабильностью и слабым радиоактивным распадом в окружающую среду. ent-SyndicateBomb = бомба синдиката .desc = Бомба для оперативников и агентов Синдиката. По-настоящему, никаких тренировок, вперед! +ent-SyndicateBombFake = { ent-SyndicateBomb } + .desc = { ent-SyndicateBomb.desc } ent-DebugHardBomb = отладочная бомба .desc = Черт возьми, это сейчас взорвется .suffix = ОТЛАДКА From 7ae2994c87804290f50bfee011c3caee90810767 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 15:42:03 +0300 Subject: [PATCH 06/15] =?UTF-8?q?=D0=94=D0=BB=D1=8F=20=D0=BC=D0=B0=D0=BF?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../catalog/fills/lockers/heads.ftl | 3 ++ .../Catalog/Fills/Lockers/heads.yml | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/lockers/heads.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/lockers/heads.ftl index 50d6c3a5e8..231a7d1449 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/lockers/heads.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/lockers/heads.ftl @@ -43,3 +43,6 @@ ent-LockerHeadOfSecurityFilledHardsuit = { ent-LockerHeadOfSecurity } ent-LockerInspectorFilled = { ent-LockerInspector } .suffix = Заполненный .desc = { ent-LockerInspector.desc } +ent-LockerInspectorFilledHardsuit = { ent-LockerInspector } + .suffix = Заполненный, Скафандр + .desc = { ent-LockerInspector.desc } diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 46a138a0a4..1f551bf5f6 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -334,3 +334,32 @@ - id: ClothingUnderwearBottomBoxersInspector # WD - id: ClothingUnderwearBottomPantiesInspector # WD - id: ClothingUnderwearTopBraInspector # WD + +- type: entity # WD + id: LockerInspectorFilledHardsuit + suffix: Filled, Hardsuit + parent: LockerInspector + components: + - type: StorageFill + contents: + - id: ClothingOuterJacketInspector + - id: ClothingOuterWinterInspector + - id: ClothingOuterOverCoatInspector + - id: ClothingOuterTrenchCoatInspector + - id: ClothingNeckCloakInspector + - id: ClothingNeckMantleInspector + - id: ClothingNeckInspectorbadge + - id: ClothingHeadHatInspector + - id: ClothingHeadCapInspector + - id: ClothingEyesGlassesInspector + - id: ClothingBackpackSatchelInspector + - id: ClothingUniformJumpsuitWhiteInspector + - id: ClothingUniformJumpskirtInspector + - id: ClothingUniformJumpskirtInspectorFormal + - id: ClothingHandsGlovesInspector + - id: ClothingHeadsetAltSecurityCommand + - id: RubberStampInspector + - id: ClothingUnderwearBottomBoxersInspector + - id: ClothingUnderwearBottomPantiesInspector + - id: ClothingUnderwearTopBraInspector + - id: ClothingOuterHardsuitInspector From 3d9593f9a469e15f4039668d37d41c8d67cbea88 Mon Sep 17 00:00:00 2001 From: keslik Date: Sat, 30 Nov 2024 17:32:13 +0300 Subject: [PATCH 07/15] Fix: Shinamo grenades aren't trash --- .../Objects/Weapons/Guns/Modules/modules.yml | 3 +++ .../Weapons/Guns/Projectiles/shinanogrenades.yml | 15 +++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml index 7a25b54b37..762b65951e 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml @@ -142,3 +142,6 @@ value: "shinano" module_type: "shutter_module" tag: Grenade + - type: Sprite + sprite: White\Objects\Weapons\modulesOnWeapon.rsi + state: telescopic diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml index f73459d3dd..2eaad64768 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml @@ -1,5 +1,6 @@ - type: entity id: BaseBulletShinanoGranade + parent: BaseBullet abstract: true name: base shinano granade components: @@ -39,11 +40,13 @@ layers: - state: grenade - type: FlashOnTrigger - range: 5 - stunTime: 2 # WD + range: 6 + stunTime: 3 # WD knockdownTime: 10 # WD - type: SpawnOnTrigger proto: GrenadeFlashEffect + - type: ActiveTimerTrigger + timeRemaining: 0.6 - type: DeleteOnTrigger - type: entity @@ -66,6 +69,8 @@ Quantity: 50 - type: SoundOnTrigger sound: /Audio/Items/smoke_grenade_smoke.ogg + - type: ActiveTimerTrigger + timeRemaining: 0.6 - type: DeleteOnTrigger - type: entity @@ -85,6 +90,8 @@ - type: ContainerContainer containers: cluster-payload: !type:Container + - type: ActiveTimerTrigger + timeRemaining: 0.5 - type: entity parent: [BaseBullet, BaseBulletTrail] @@ -99,7 +106,7 @@ - type: Projectile damage: types: - Blunt: 15 + Blunt: 20 - type: StaminaDamageOnCollide ignoreResistances: true - damage: 80 + damage: 100 From e637686284d1583ff6d4842421002563efea8be6 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 18:30:52 +0300 Subject: [PATCH 08/15] =?UTF-8?q?=D1=84=D1=83=D0=BB=D1=82=D0=BE=D0=BD?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Locale/ru-RU/_white/locales-new/autotranslate-108.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-108.ftl b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-108.ftl index 954b9f0260..fd9165e75a 100644 --- a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-108.ftl +++ b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-108.ftl @@ -1,5 +1,5 @@ -ent-Fulton1 = fulton - .desc = fulton +ent-Fulton1 = { ent-Fulton } + .desc = { ent-Fulton.desc } .suffix = One ent-EmergencyNitrogenTank = аварийный баллон с азотом .desc = Легко переносимый баллон для аварийных ситуаций. Содержит очень мало азота, предназначен только для выживания. From 031129ca94f2bed42f1eb69db43af2adb42d5f9c Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 19:02:07 +0300 Subject: [PATCH 09/15] =?UTF-8?q?=D1=80=D0=B5=D0=B2=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D0=BD=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resources/Locale/ru-RU/revenant/revenant.ftl | 11 ++++++++++- .../Prototypes/Catalog/revenant_catalog.yml | 16 ++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/Resources/Locale/ru-RU/revenant/revenant.ftl b/Resources/Locale/ru-RU/revenant/revenant.ftl index 3aa7475f85..74e1934ac1 100644 --- a/Resources/Locale/ru-RU/revenant/revenant.ftl +++ b/Resources/Locale/ru-RU/revenant/revenant.ftl @@ -1,4 +1,4 @@ -revenant-essence-amount = У вас [color=plum]{ $current } эссенции[/color]. Вам максимум — [color=plum]{ $max } эссенции[/color]. +revenant-essence-amount = У вас [color=plum]{ $current } эссенции[/color]. Ваш максимум — [color=plum]{ $max } эссенции[/color]. revenant-max-essence-increased = Максимальный запас эссенции увеличился! revenant-not-enough-essence = Недостаточно эссенции! revenant-in-solid = Вы не можете использовать эту способность, пока находитесь внутри твёрдого объекта. @@ -14,3 +14,12 @@ revenant-soul-finish-harvest = { CAPITALIZE($target) } падает на зем revenant-user-interface-title = Магазин способностей revenant-user-interface-essence-amount = [color=plum]{ $amount }[/color] украденной эссенции revenant-user-interface-cost = { $price } эссенции + +revenant-defile-name = Осквернение +revenant-defile-desc = Оскверняет окружающую территорию, вскрывая полы, повреждая окна, открывая контейнеры и бросая предметы. Использование делает вас уязвимым для атак на короткий промежуток времени. +revenant-overload-name = Перегрузка +revenant-overload-desc = Перегружает все близлежащие светильники, заставляя их пульсировать опасными молниями. Используя его, вы остаётесь уязвимыми для атак в течение длительного периода времени. +revenant-blight-name = Заражение +revenant-blight-desc = Заражает все близлежащие организмы инфекционным заболеванием, вызывающим усталость и сонливость. Использование делает вас уязвимым для атак на средний период времени. +revenant-malfunction-name = Взлом +revenant-malfunction-desc = Заставляет близлежащие электронные устройства перестать работать должным образом. Использование этого делает вас уязвимыми для атак в течение длительного периода времени. diff --git a/Resources/Prototypes/Catalog/revenant_catalog.yml b/Resources/Prototypes/Catalog/revenant_catalog.yml index 1dbb111431..62bf7bbe50 100644 --- a/Resources/Prototypes/Catalog/revenant_catalog.yml +++ b/Resources/Prototypes/Catalog/revenant_catalog.yml @@ -1,7 +1,7 @@ - type: listing id: RevenantDefile - name: Defile - description: Defiles the surrounding area, ripping up floors, damaging windows, opening containers, and throwing items. Using it leaves you vulnerable to attacks for a short period of time. + name: revenant-defile-name # WD Ahead of wizden + description: revenant-defile-desc # WD Ahead of wizden productAction: ActionRevenantDefile cost: StolenEssence: 10 @@ -13,8 +13,8 @@ - type: listing id: RevenantOverloadLights - name: Overload Lights - description: Overloads all nearby lights, causing lights to pulse and sending out dangerous lightning. Using it leaves you vulnerable to attacks for a long period of time. + name: revenant-overload-name # WD Ahead of wizden + description: revenant-overload-desc # WD Ahead of wizden productAction: ActionRevenantOverloadLights cost: StolenEssence: 25 @@ -26,8 +26,8 @@ - type: listing id: RevenantBlight - name: Blight - description: Infects all nearby organisms with an infectious disease that causes toxic buildup and tiredness. Using it leaves you vulnerable to attacks for a medium period of time. + name: revenant-blight-name # WD Ahead of wizden + description: revenant-blight-desc # WD Ahead of wizden productAction: ActionRevenantBlight cost: StolenEssence: 75 @@ -39,8 +39,8 @@ - type: listing id: RevenantMalfunction - name: Malfunction - description: Makes nearby electronics stop working properly. Using it leaves you vulnerable to attacks for a long period of time. + name: revenant-malfunction-name # WD Ahead of wizden + description: revenant-malfunction-desc # WD Ahead of wizden productAction: ActionRevenantMalfunction cost: StolenEssence: 125 From 628c592438cca19df9b29ebc6a6380a67b5c8f76 Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 19:16:43 +0300 Subject: [PATCH 10/15] =?UTF-8?q?=D0=BA=D0=BE=D1=80=D0=BE=D0=BB=D1=8C=20?= =?UTF-8?q?=D0=BA=D1=80=D1=8B=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../prototypes/entities/mobs/npcs/regalrat.ftl | 12 ++++++++++++ Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml | 2 ++ 2 files changed, 14 insertions(+) diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/regalrat.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/regalrat.ftl index e371e15669..f4a06c0b54 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/regalrat.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/mobs/npcs/regalrat.ftl @@ -5,3 +5,15 @@ ent-MobRatKingBuff = { ent-MobRatKing } .desc = { ent-MobRatKing.desc } ent-MobRatServant = крысиный слуга .desc = Он мини-крысюк и он тут не босс. +ent-ActionRatKingRaiseArmy = Призвать армию + .desc = Потратьте некоторое количество голода, чтобы призвать дружественную крысу для вашей защиты. +ent-ActionRatKingDomain = Крысиное королевство + .desc = Потратьте некоторое количество голода, чтобы выпустить в воздух облако миазм. +ent-ActionRatKingOrderStay = Отдых + .desc = Прикажите своей армии стоять на месте. +ent-ActionRatKingOrderFollow = Следовать + .desc = Прикажите своей армии следовать за вами. +ent-ActionRatKingOrderCheeseEm = Убить + .desc = Прикажите своей армии атаковать тех, на кого вы укажете. +ent-ActionRatKingOrderLoose = Вольно + .desc = Прикажите своей армии действовать на своё усмотрение. diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml index f8ae047dbe..a9740cf66d 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/regalrat.yml @@ -126,6 +126,8 @@ color: "#404040" - type: GlobalAntagonist antagonistPrototype: globalAntagonistRats + - type: TTS # WD + voicePrototypeId: Sheogorath - type: entity id: MobRatKingBuff From e9c4e561e88d2a936da16c59bc875ec7dfb79a3e Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 20:33:03 +0300 Subject: [PATCH 11/15] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Weapons/Guns/Launchers/launchers.yml | 4 +++- .../Weapons/Guns/Projectiles/projectiles.yml | 3 +++ .../Objects/Weapons/Guns/Launcher/shinano.yml | 17 ++++++++++++++++- .../Guns/Projectiles/shinanogrenades.yml | 7 +++++-- .../Guns/Launchers/shinano-icons.rsi/meta.json | 5 ++++- .../Launchers/shinano-icons.rsi/shinano.png | Bin 0 -> 229 bytes 6 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/shinano.png diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 84e3fa76a8..e126f19cca 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -33,7 +33,7 @@ - type: entity name: china lake - parent: [BaseWeaponLauncher, BaseGunWieldable] + parent: BaseWeaponLauncher # WD removed BaseGunWieldable id: WeaponLauncherChinaLake description: PLOOP components: @@ -57,6 +57,8 @@ - SemiAuto soundGunshot: path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg + minAngle: 10 # WD + maxAngle: 10 # WD - type: BallisticAmmoProvider whitelist: tags: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 78cd629006..744100cc95 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -764,6 +764,9 @@ - type: ActiveTimerTrigger timeRemaining: 0.3 - type: DeleteOnTrigger + - type: SoundOnTrigger # WD + sound: + path: "/Audio/Effects/flash_bang.ogg" # This is supposed to spawn shrapnel and stuff so uhh... TODO? - type: entity diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Launcher/shinano.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Launcher/shinano.yml index f04b4e31ad..b237d00a57 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Launcher/shinano.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Launcher/shinano.yml @@ -9,6 +9,9 @@ layers: - state: icon map: ["enum.GunVisualLayers.Base"] + - state: shinano + visible: false + map: [ "enum.ModuleVisualState.ShutterModule" ] - type: Item sprite: White/Objects/Weapons/Guns/Launchers/shinano-inhands.rsi size: Large @@ -16,6 +19,7 @@ - 0,0,2,1 - type: Clothing sprite: White/Objects/Weapons/Guns/Launchers/shinano-inhands.rsi + quickEquip: false slots: - Back - suitStorage @@ -44,11 +48,22 @@ name: Shutter Module insertSound: /Audio/White/Gun/Modules/insertmodule.ogg ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg - priority: 1 + priority: 4 whitelist: tags: - BaseShutterModule - type: ContainerContainer containers: shutter_module: !type:ContainerSlot + ballistic-ammo: !type:Container + ents: [] - type: Appearance + - type: EmitSoundOnPickup + sound: + collection: RiflesPickUp + - type: EmitSoundOnDrop + sound: + collection: RiflesDrop + - type: EmitSoundOnLand + sound: + collection: RiflesDrop diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml index 2eaad64768..716bb8fbe2 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Projectiles/shinanogrenades.yml @@ -41,13 +41,16 @@ - state: grenade - type: FlashOnTrigger range: 6 - stunTime: 3 # WD - knockdownTime: 10 # WD + stunTime: 3 + knockdownTime: 10 - type: SpawnOnTrigger proto: GrenadeFlashEffect - type: ActiveTimerTrigger timeRemaining: 0.6 - type: DeleteOnTrigger + - type: SoundOnTrigger + sound: + path: "/Audio/Effects/flash_bang.ogg" - type: entity parent: BaseBulletShinanoGranade diff --git a/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/meta.json b/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/meta.json index 45c099c298..cb8cedb78e 100644 --- a/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/meta.json +++ b/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/meta.json @@ -12,6 +12,9 @@ }, { "name": "bolt-open" + }, + { + "name": "shinano" } ] -} +} \ No newline at end of file diff --git a/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/shinano.png b/Resources/Textures/White/Objects/Weapons/Guns/Launchers/shinano-icons.rsi/shinano.png new file mode 100644 index 0000000000000000000000000000000000000000..64c7f9eaf5c53e21f417540ed4631bc0be3e45a1 GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^20*O9!3HEluKbn(Qk(@Ik;M!Q+`=Ht$S`Y;1W<6g zr;B4qMC;pWw%p8$0xri3Hk?fo=6m=5|B-~`tt*wjGd5m+ATZ;4*J&Hch+vlo^D8$n z_b4%%2_+~435la;4xicmUf=%ACsE`7YyN~}TgsbvMtSctE}zBFz@or# Date: Sat, 30 Nov 2024 22:07:45 +0300 Subject: [PATCH 12/15] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Resources/Locale/ru-RU/_white/locales-new/autotranslate-115.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-115.ftl b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-115.ftl index a2f7c954c5..de694b5e30 100644 --- a/Resources/Locale/ru-RU/_white/locales-new/autotranslate-115.ftl +++ b/Resources/Locale/ru-RU/_white/locales-new/autotranslate-115.ftl @@ -36,7 +36,7 @@ ent-NoticeBoard = доска объявлений ent-Screen = экран .desc = Показывает текст или время. ent-ArrivalsShuttleTimer = экран прибытия - .desc = экран прибытия + .desc = Отображает текст или время. ent-JanitorServiceLight = индикатор уборки .desc = Настенный знак уборки. Если индикатор мигает, требуется помощь уборщика. ent-ShelfWood = деревянная полка From 48c54fefcb0ebb2b50e719d3779e08ebfbac398b Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Sat, 30 Nov 2024 23:49:42 +0300 Subject: [PATCH 13/15] New SunGlasses Just Dropped --- .../Locale/ru-RU/_white/wizard/spellbook.ftl | 3 +++ .../Prototypes/_White/Wizard/magic_items.yml | 23 +++++++++++++++++++ .../_White/Wizard/spellbook_catalog.yml | 13 +++++++++++ 3 files changed, 39 insertions(+) diff --git a/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl b/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl index 8f717bd355..6b6da7dba3 100644 --- a/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl +++ b/Resources/Locale/ru-RU/_white/wizard/spellbook.ftl @@ -69,3 +69,6 @@ spellbook-spellblade-desc = Клинок, наполненный магией, spellbook-mjolnir-name = Мьёльнир spellbook-mjolnir-desc = Могучий двуручный молот Тора. Ударив им по врагам, вы заставите их отлететь от вас, а также оглушить на 1,5 секунды. Вы можете его бросить для достижения того же эффекта. + +spellbook-glasses-name = Волшебные очки +spellbook-glasses-desc = Стиль, удобство, аэродинамика, а так же несколько рунических улучшений. Эти очки защищают глаза от яркого света, а так же проливают свет на покров яви, между видимым и невидимым. diff --git a/Resources/Prototypes/_White/Wizard/magic_items.yml b/Resources/Prototypes/_White/Wizard/magic_items.yml index 5fda381d38..696d3bf8cb 100644 --- a/Resources/Prototypes/_White/Wizard/magic_items.yml +++ b/Resources/Prototypes/_White/Wizard/magic_items.yml @@ -149,3 +149,26 @@ message: bolt-barrage-component-extra-message - type: BoltBarrage - type: GiftIgnore + +- type: entity + parent: [ClothingEyesBase, ShowSecurityIcons, ShowMedicalIcons] + id: ClothingEyesWizardGlasses + name: солнцезащитные очки + description: Подходят как для СБ, так и для карго. + suffix: Wizard + components: + - type: Sprite + sprite: Clothing/Eyes/Glasses/sunglasses.rsi + - type: Clothing + sprite: Clothing/Eyes/Glasses/sunglasses.rsi + - type: ShowHealthBars + damageContainers: + - Biological + - Inorganic + - type: ShowAntagonistIcons + - type: FlashImmunity + - type: EyeProtection + - type: ClothingGrantComponent + component: + - type: NightVision + - type: ThermalVision diff --git a/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml b/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml index 6ca825b0fc..3e834fc1b4 100644 --- a/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml +++ b/Resources/Prototypes/_White/Wizard/spellbook_catalog.yml @@ -369,3 +369,16 @@ conditions: - !type:ListingLimitedStockCondition stock: 1 + +- type: listing + id: SpellBookWizardGlasses + name: spellbook-glasses-name + description: spellbook-glasses-desc + productEntity: ClothingEyesWizardGlasses + cost: + SpellPoint: 2 + categories: + - MagicItems + conditions: + - !type:ListingLimitedStockCondition + stock: 1 From 72f32e6b3ad0fb9629f8002843bd71a9a04e8d34 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 30 Nov 2024 20:58:56 +0000 Subject: [PATCH 14/15] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 28 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index 06da4c72ef..fb495b64e5 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -1,13 +1,4 @@ Entries: -- author: RavMorgan - changes: - - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0430 \u0432\u043E\u0437\ - \u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C \u043F\u043E\u0434\u0431\u0438\ - \u0440\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u043C\u0435\u0442\u044B \u0432\ - \ \u0445\u0430\u0440\u043C \u043C\u043E\u0434\u0435!" - type: Add - id: 113 - time: '2023-04-04T06:15:35.0000000+00:00' - author: HitPanda changes: - message: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434 \u0430\u043F\u043B\u0438\u043D\ @@ -8908,3 +8899,22 @@ id: 612 time: '2024-11-27T02:25:36.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/790 +- author: keslik + changes: + - message: "\u0423\u0442\u0438\u043B\u0438\u0437\u0430\u0446\u0438\u043E\u043D\u043D\ + \u044B\u0435 \u0431\u043B\u043E\u043A\u0438 \u0431\u043E\u043B\u044C\u0448\u0435\ + \ \u043D\u0435 \u043F\u043E\u0435\u0434\u0430\u044E\u0442 \u0433\u0440\u0430\ + \u043D\u0430\u0442\u044B \u0421\u0438\u043D\u0430\u043D\u043E(SHN)." + type: Fix + - message: "\u0421\u0438\u043D\u0430\u043D\u043E \u0442\u0435\u043F\u0435\u0440\u044C\ + \ \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u043F\ + \u0440\u0438\u044F\u0442\u043D\u0435\u0435." + type: Tweak + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u043D\u0435\u0434\ + \u043E\u0441\u0442\u0430\u044E\u0449\u0438\u0435 \u0437\u0432\u0443\u043A\u0438\ + \ \u0432\u0437\u0440\u044B\u0432\u043E\u0432 \u0441\u0432\u0435\u0442\u043E\u0448\ + \u0443\u043C\u043E\u0432\u044B\u0445 \u0433\u0440\u0430\u043D\u0430\u0442." + type: Add + id: 613 + time: '2024-11-30T20:57:53.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/794 From ad329175fca9e1e02f70515a87d4e11dd3fc0f00 Mon Sep 17 00:00:00 2001 From: RavmorganButOnCocaine Date: Sat, 30 Nov 2024 21:02:57 +0000 Subject: [PATCH 15/15] Automatic changelog update --- Resources/Changelog/ChangelogWhite.yml | 27 ++++++++++---------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/Resources/Changelog/ChangelogWhite.yml b/Resources/Changelog/ChangelogWhite.yml index fb495b64e5..4b27ecceba 100644 --- a/Resources/Changelog/ChangelogWhite.yml +++ b/Resources/Changelog/ChangelogWhite.yml @@ -1,21 +1,4 @@ Entries: -- author: HitPanda - changes: - - message: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434 \u0430\u043F\u043B\u0438\u043D\ - \u043A\u0430." - type: Add - - message: "\u0414\u0440\u0443\u0433\u043E\u0435 \u043E\u0433\u0440\u043E\u043C\u043D\ - \u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u043F\ - \u0435\u0440\u0435\u0432\u043E\u0434\u0430 \u0441 \u0438\u0437\u043C\u0435\u043D\ - \u0435\u043D\u0438\u044F\u043C\u0438 \u0432 1500+ \u0444\u0430\u0439\u043B\u043E\ - \u0432." - type: Add - - message: "\u0424\u0438\u043A\u0441 \u0441\u043B\u043E\u043C\u0430\u043D\u043D\u044B\ - \u0445 \u043F\u0435\u0440\u0435\u0432\u043E\u0434\u043E\u0432 (\u0432\u0440\u043E\ - \u0434\u0435 \u0431\u044B)." - type: Fix - id: 114 - time: '2023-04-04T14:23:21.0000000+00:00' - author: HitPanda changes: - message: "\u041F\u0435\u0440\u0435\u0432\u043E\u0434 \u0430\u043F\u043B\u0438\u043D\ @@ -8918,3 +8901,13 @@ id: 613 time: '2024-11-30T20:57:53.0000000+00:00' url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/794 +- author: BIG_Zi_348 + changes: + - message: "\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u044B \u0432\u043E\u043B\ + \u0448\u0435\u0431\u043D\u044B\u0435 \u043E\u0447\u043A\u0438 \u0432 \u043C\u0430\ + \u0433\u0430\u0437\u0438\u043D \u0432\u043E\u043B\u0448\u0435\u0431\u043D\u0438\ + \u043A\u0430." + type: Add + id: 614 + time: '2024-11-30T21:01:53.0000000+00:00' + url: https://api.github.com/repos/frosty-dev/ss14-core/pulls/795