diff --git a/Content.Server/_CP14/LockKey/CP14KeyholeGenerationSystem.cs b/Content.Server/_CP14/LockKey/CP14KeyholeGenerationSystem.cs index a0d31fbc06..a158e15559 100644 --- a/Content.Server/_CP14/LockKey/CP14KeyholeGenerationSystem.cs +++ b/Content.Server/_CP14/LockKey/CP14KeyholeGenerationSystem.cs @@ -15,8 +15,6 @@ public sealed partial class CP14KeyholeGenerationSystem : EntitySystem private Dictionary, List> _roundKeyData = new(); - private const int DepthCompexity = 2; - public override void Initialize() { base.Initialize(); @@ -75,32 +73,29 @@ public sealed partial class CP14KeyholeGenerationSystem : EntitySystem { if (_roundKeyData.ContainsKey(category)) return _roundKeyData[category]; - else - { - var newData = GenerateNewUniqueLockData(category); - _roundKeyData[category] = newData; - return newData; - } + + var newData = GenerateNewUniqueLockData(category); + _roundKeyData[category] = newData; + return newData; } private List GenerateNewUniqueLockData(ProtoId category) { - List newKeyData = new List(); + List newKeyData = new(); var categoryData = _proto.Index(category); - var ready = false; var iteration = 0; - while (!ready) + while (true) { //Generate try newKeyData = new List(); - for (int i = 0; i < categoryData.Complexity; i++) + for (var i = 0; i < categoryData.Complexity; i++) { - newKeyData.Add(_random.Next(-DepthCompexity, DepthCompexity)); + newKeyData.Add(_random.Next(-SharedCP14LockKeySystem.DepthComplexity, SharedCP14LockKeySystem.DepthComplexity)); } - //Identity Check shitcode - // На текущий момент он пытается сгенерировать уникальный код. Если он 100 раз не смог сгенерировать уникальный код, он выдаст последний сгенерированный неуникальный. + // Identity Check shit code + // It is currently trying to generate a unique code. If it fails to generate a unique code 100 times, it will output the last generated non-unique code. var unique = true; foreach (var pair in _roundKeyData) { diff --git a/Content.Shared/Lock/LockComponent.cs b/Content.Shared/Lock/LockComponent.cs index 7b320f8570..d12e3e5352 100644 --- a/Content.Shared/Lock/LockComponent.cs +++ b/Content.Shared/Lock/LockComponent.cs @@ -77,12 +77,6 @@ public sealed partial class LockComponent : Component [DataField] [AutoNetworkedField] public TimeSpan UnlockTime; - - /// - /// CrystallPunk LockSystem Adapt: we need LockEntity in object, in slotId. - /// - [DataField] - public string? LockSlotId = string.Empty; } /// diff --git a/Content.Shared/Lock/LockSystem.cs b/Content.Shared/Lock/LockSystem.cs index 46ed9797fb..dfc997db09 100644 --- a/Content.Shared/Lock/LockSystem.cs +++ b/Content.Shared/Lock/LockSystem.cs @@ -33,7 +33,6 @@ public sealed class LockSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPopupSystem _sharedPopupSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - [Dependency] private readonly SharedCP14LockKeySystem _lockCp14 = default!; //CrystallPunk Lock System Adapt /// public override void Initialize() @@ -69,7 +68,7 @@ public sealed class LockSystem : EntitySystem if (args.Handled || !args.Complex) return; - //CrystallPunk LockSystem Adapt + //CrystallPunk LockSystem Adapt - we cant unlock\lock objects via direct hand interaction // Only attempt an unlock by default on Activate //if (lockComp.Locked && lockComp.UnlockOnClick) @@ -106,19 +105,10 @@ public sealed class LockSystem : EntitySystem private void OnExamined(EntityUid uid, LockComponent lockComp, ExaminedEvent args) { - //CrystallPunk Lock System Adapt Start - if (lockComp.LockSlotId != null && _lockCp14.TryGetLockFromSlot(uid, out var lockEnt)) - { - args.PushText(Loc.GetString("cp14-lock-examine-lock-slot", ("lock", MetaData(lockEnt.Value).EntityName))); - - args.PushMarkup(Loc.GetString(lockComp.Locked - ? "lock-comp-on-examined-is-locked" - : "lock-comp-on-examined-is-unlocked", - ("entityName", Identity.Name(uid, EntityManager)))); - if (lockEnt.Value.Comp.LockpickeddFailMarkup) - args.PushMarkup(Loc.GetString("cp14-lock-examine-lock-lockpicked", ("lock", MetaData(lockEnt.Value).EntityName))); - } - //CrystallPunk Lock System Adapt End + args.PushText(Loc.GetString(lockComp.Locked + ? "lock-comp-on-examined-is-locked" + : "lock-comp-on-examined-is-unlocked", + ("entityName", Identity.Name(uid, EntityManager)))); } /// diff --git a/Content.Shared/Verbs/VerbCategory.cs b/Content.Shared/Verbs/VerbCategory.cs index 29a5f6c73d..5b0f934c6f 100644 --- a/Content.Shared/Verbs/VerbCategory.cs +++ b/Content.Shared/Verbs/VerbCategory.cs @@ -77,7 +77,7 @@ namespace Content.Shared.Verbs new("verb-categories-instrument-style", null); public static readonly VerbCategory Lockpick = - new("verb-categories-lockpick", "/Textures/Interface/VerbIcons/lock.svg.192dpi.png"); + new("verb-categories-lock-pick", "/Textures/Interface/VerbIcons/lock.svg.192dpi.png"); public static readonly VerbCategory ChannelSelect = new("verb-categories-channel-select", null); diff --git a/Content.Shared/_CP14/LockKey/Components/CP14LockComponent.cs b/Content.Shared/_CP14/LockKey/Components/CP14LockComponent.cs index 7040bac330..fe4c9faf38 100644 --- a/Content.Shared/_CP14/LockKey/Components/CP14LockComponent.cs +++ b/Content.Shared/_CP14/LockKey/Components/CP14LockComponent.cs @@ -18,13 +18,13 @@ public sealed partial class CP14LockComponent : Component /// On which element of the shape sequence the lock is now located. It's necessary for the mechanics of breaking and entering. /// [DataField] - public int LockpickStatus = 0; + public int LockPickStatus = 0; /// /// after a lock is broken into, it leaves a description on it that it's been tampered with. /// [DataField] - public bool LockpickeddFailMarkup = false; + public bool LockPickedFailMarkup = false; /// /// If not null, automatically generates a lock for the specified category on initialization. This ensures that the lock will be opened with a key of the same category. diff --git a/Content.Shared/_CP14/LockKey/Components/CP14LockpickComponent.cs b/Content.Shared/_CP14/LockKey/Components/CP14LockpickComponent.cs index 8c84e03c79..d2676df32b 100644 --- a/Content.Shared/_CP14/LockKey/Components/CP14LockpickComponent.cs +++ b/Content.Shared/_CP14/LockKey/Components/CP14LockpickComponent.cs @@ -11,6 +11,9 @@ public sealed partial class CP14LockpickComponent : Component [DataField] public int Health = 3; + [DataField] + public TimeSpan HackTime = TimeSpan.FromSeconds(1.5f); + [DataField] public SoundSpecifier SuccessSound = new SoundPathSpecifier("/Audio/_CP14/Items/lockpick_use.ogg") { diff --git a/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs b/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs index 2d14a9a4b0..ec48c10a1a 100644 --- a/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs +++ b/Content.Shared/_CP14/LockKey/SharedCP14LockKeySystem.cs @@ -1,76 +1,77 @@ -using System.Diagnostics.CodeAnalysis; using Content.Shared._CP14.LockKey.Components; -using Content.Shared.Containers.ItemSlots; +using Content.Shared.DoAfter; using Content.Shared.Interaction; using Content.Shared.Lock; using Content.Shared.Popups; using Content.Shared.Storage; using Content.Shared.Verbs; using Robust.Shared.Audio.Systems; -using Robust.Shared.Containers; using Robust.Shared.Random; using Robust.Shared.Serialization; namespace Content.Shared._CP14.LockKey; -/// -/// -/// public sealed class SharedCP14LockKeySystem : EntitySystem { - - [Dependency] private readonly ItemSlotsSystem _itemSlots = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly LockSystem _lock = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - private const int DepthComplexity = 2; //TODO - fix this constant duplication from KeyholeGenerationSystem.cs + private EntityQuery _lockQuery; + private EntityQuery _cp14LockQuery; + private EntityQuery _keyQuery; + + public const int DepthComplexity = 2; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnLockInsertAttempt); - - SubscribeLocalEvent(OnLockInserted); - SubscribeLocalEvent(OnLockRemoved); + _lockQuery = GetEntityQuery(); + _cp14LockQuery = GetEntityQuery(); + _keyQuery = GetEntityQuery(); SubscribeLocalEvent(OnKeyInteract); SubscribeLocalEvent(OnKeyRingInteract); SubscribeLocalEvent>(OnKeyToLockVerb); - SubscribeLocalEvent>(OnLockpickToLockVerb); + + SubscribeLocalEvent>(OnLockPickToLockVerb); + SubscribeLocalEvent(OnLockHacked); } + private void OnKeyRingInteract(Entity keyring, ref AfterInteractEvent args) { if (args.Handled) return; - if (!args.CanReach || args.Target is not { Valid: true } target) + if (!args.CanReach || args.Target is not { Valid: true }) return; if (!TryComp(keyring, out var storageComp)) return; - if (TryComp(args.Target, out var lockComp) && - TryGetLockFromSlot(args.Target.Value, out var lockEnt)) + if (!_lockQuery.TryComp(args.Target, out _)) + return; + + if (!_cp14LockQuery.TryComp(args.Target, out var cp14LockComp)) + return; + + foreach (var (key, _) in storageComp.StoredItems) { + if (!_keyQuery.TryComp(key, out var keyComp)) + continue; - foreach (var item in storageComp.StoredItems) - { - if (!TryComp(item.Key, out var keyComp)) - continue; + if (keyComp.LockShape != cp14LockComp.LockShape) + continue; - if (keyComp.LockShape != lockEnt.Value.Comp.LockShape) - continue; - - TryUseKeyOnLock(args.User, args.Target.Value, new Entity(item.Key, keyComp), lockEnt.Value); - args.Handled = true; - return; - } - _popup.PopupEntity(Loc.GetString("cp14-lock-keyring-use-nofit"), args.Target.Value, args.User); + TryUseKeyOnLock(args.User, new Entity(args.Target.Value, cp14LockComp), new Entity(key, keyComp)); + args.Handled = true; + return; } + + _popup.PopupEntity(Loc.GetString("cp14-lock-key-no-fit"), args.Target.Value, args.User); } private void OnKeyInteract(Entity key, ref AfterInteractEvent args) @@ -78,45 +79,50 @@ public sealed class SharedCP14LockKeySystem : EntitySystem if (args.Handled) return; - if (!args.CanReach || args.Target is not { Valid: true } target) + if (!args.CanReach || args.Target is not { Valid: true }) return; - if (TryComp(args.Target, out var lockComp) && - TryGetLockFromSlot(args.Target.Value, out var lockEnt)) - { - TryUseKeyOnLock(args.User, args.Target.Value, key, new Entity(lockEnt.Value.Owner, lockEnt.Value.Comp)); - args.Handled = true; - } + if (!_lockQuery.TryComp(args.Target, out _)) + return; + + if (!_cp14LockQuery.TryComp(args.Target, out var cp14LockComp)) + return; + + TryUseKeyOnLock(args.User, new Entity(args.Target.Value, cp14LockComp), key); + args.Handled = true; } - private void OnLockpickToLockVerb(Entity lockpick, ref GetVerbsEvent args) + private void OnLockPickToLockVerb(Entity lockPick, ref GetVerbsEvent args) { if (!args.CanInteract || !args.CanAccess) return; - if (!TryComp(args.Target, out var lockComp) || !lockComp.Locked) + if (!_lockQuery.TryComp(args.Target, out var lockComp) || !lockComp.Locked) return; - if (!TryGetLockFromSlot(args.Target, out var lockItem)) - return; - - if (!TryComp(lockItem, out var lockItemComp)) + if (!_cp14LockQuery.TryComp(args.Target, out _)) return; var target = args.Target; var user = args.User; - for (int i = DepthComplexity; i >= -DepthComplexity; i--) + for (var i = DepthComplexity; i >= -DepthComplexity; i--) { var height = i; var verb = new UtilityVerb() { Act = () => { - TryHackDoorElement(user, target, lockpick, lockItemComp, lockComp, height); + _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, lockPick.Comp.HackTime, new LockPickHackDoAfterEvent(height), target, target, lockPick) + { + BreakOnDamage = true, + BreakOnMove = true, + BreakOnDropItem = true, + BreakOnHandChange = true, + }); }, - Text = Loc.GetString("cp14-lock-verb-lockpick-use-text") + $" {height}", - Message = Loc.GetString("cp14-lock-verb-lockpick-use-message"), + Text = Loc.GetString("cp14-lock-verb-lock-pick-use-text") + $" {height}", + Message = Loc.GetString("cp14-lock-verb-lock-pick-use-message"), Category = VerbCategory.Lockpick, Priority = height, CloseMenu = false, @@ -126,57 +132,63 @@ public sealed class SharedCP14LockKeySystem : EntitySystem } } - private bool TryHackDoorElement(EntityUid user, EntityUid target, Entity lockpick, CP14LockComponent lockEnt, LockComponent lockComp, int height) + private void OnLockHacked(Entity ent, ref LockPickHackDoAfterEvent args) { - if (lockEnt.LockShape == null) - return true; + if (args.Cancelled || args.Handled) + return; - if (height == lockEnt.LockShape[lockEnt.LockpickStatus]) //Success + if (ent.Comp.LockShape == null) + return; + + if (!_lockQuery.TryComp(ent, out var lockComp)) + return; + + if (!TryComp(args.Used, out var lockPick)) + return; + + if (args.Height == ent.Comp.LockShape[ent.Comp.LockPickStatus]) //Success { - _audio.PlayPvs(lockpick.Comp.SuccessSound, target); - lockEnt.LockpickStatus++; - if (lockEnt.LockpickStatus >= lockEnt.LockShape.Count) // Final success + _audio.PlayPvs(lockPick.SuccessSound, ent); + ent.Comp.LockPickStatus++; + if (ent.Comp.LockPickStatus >= ent.Comp.LockShape.Count) // Final success { if (lockComp.Locked) { - _lock.TryUnlock(target, user, lockComp); - _popup.PopupEntity(Loc.GetString("cp14-lock-unlock-lock", ("lock", MetaData(lockEnt.Owner).EntityName)), target, user); - lockEnt.LockpickStatus = 0; - return true; - } - else - { - _lock.TryLock(target, user, lockComp); - _popup.PopupEntity(Loc.GetString("cp14-lock-lock-lock", ("lock", MetaData(lockEnt.Owner).EntityName)), target, user); - lockEnt.LockpickStatus = 0; - return true; + _lock.TryUnlock(ent, args.User, lockComp); + _popup.PopupEntity(Loc.GetString("cp14-lock-unlock", ("lock", MetaData(ent).EntityName)), ent, args.User); + ent.Comp.LockPickStatus = 0; + return; } + + _lock.TryLock(ent, args.User, lockComp); + _popup.PopupEntity(Loc.GetString("cp14-lock-lock", ("lock", MetaData(ent).EntityName)), ent, args.User); + ent.Comp.LockPickStatus = 0; + return; } - _popup.PopupEntity(Loc.GetString("cp14-lock-lockpick-success"), target, user); - return true; + _popup.PopupEntity(Loc.GetString("cp14-lock-lock-pick-success"), ent, args.User); } else //Fail { - _audio.PlayPvs(lockpick.Comp.FailSound, target); - if (_random.Prob(lockEnt.LockPickDamageChance)) // Damage lockpick + _audio.PlayPvs(lockPick.FailSound, ent); + if (_random.Prob(ent.Comp.LockPickDamageChance)) // Damage lock pick { - lockpick.Comp.Health--; - if (lockpick.Comp.Health > 0) + lockPick.Health--; + if (lockPick.Health > 0) { - _popup.PopupEntity(Loc.GetString("cp14-lock-lockpick-failed-damage", ("lock", MetaData(lockEnt.Owner).EntityName)), target, user); - } else + _popup.PopupEntity(Loc.GetString("cp14-lock-lock-pick-failed-damage", ("lock", MetaData(ent).EntityName)), ent, args.User); + } + else { - _popup.PopupEntity(Loc.GetString("cp14-lock-lockpick-failed-break", ("lock", MetaData(lockEnt.Owner).EntityName)), target, user); - QueueDel(lockpick); + _popup.PopupEntity(Loc.GetString("cp14-lock-lock-pick-failed-break", ("lock", MetaData(ent).EntityName)), ent, args.User); + QueueDel(args.Used); } } else { - _popup.PopupEntity(Loc.GetString("cp14-lock-lockpick-failed", ("lock", MetaData(lockEnt.Owner).EntityName)), target, user); + _popup.PopupEntity(Loc.GetString("cp14-lock-lock-pick-failed", ("lock", MetaData(ent).EntityName)), ent, args.User); } - lockEnt.LockpickeddFailMarkup = true; - lockEnt.LockpickStatus = 0; - return false; + ent.Comp.LockPickedFailMarkup = true; + ent.Comp.LockPickStatus = 0; } } @@ -185,23 +197,20 @@ public sealed class SharedCP14LockKeySystem : EntitySystem if (!args.CanInteract || !args.CanAccess) return; - if (!TryComp(args.Target, out var lockComp)) + if (!_lockQuery.TryComp(args.Target, out var lockComp)) return; - if (!TryGetLockFromSlot(args.Target, out var lockItem)) - return; - - if (!TryComp(lockItem, out var lockItemComp)) + if (!_cp14LockQuery.TryComp(args.Target, out var cp14LockComponent)) return; var target = args.Target; var user = args.User; - var verb = new UtilityVerb() + var verb = new UtilityVerb { Act = () => { - TryUseKeyOnLock(user, target, key, new Entity(target, lockItemComp)); + TryUseKeyOnLock(user, new Entity(target, cp14LockComponent), key); }, IconEntity = GetNetEntity(key), Text = Loc.GetString(lockComp.Locked ? "cp14-lock-verb-use-key-text-open" : "cp14-lock-verb-use-key-text-close", ("item", MetaData(args.Target).EntityName)), @@ -211,118 +220,47 @@ public sealed class SharedCP14LockKeySystem : EntitySystem args.Verbs.Add(verb); } - private void OnLockInsertAttempt(Entity lockSlot, ref ContainerIsInsertingAttemptEvent args) - { - if (!lockSlot.Comp.Initialized) - return; - - if (args.Container.ID != lockSlot.Comp.LockSlotId) - return; - - if (TryComp(args.EntityUid, out var lockComp)) - return; - - args.Cancel(); - - //if (lockComp.Locked) - //{ - // _popup.PopupEntity(Loc.GetString( - // "cp-lock-lock-insert-fail-locked", - // ("lock", MetaData(args.EntityUid).EntityName), - // ("target", MetaData(lockSlot).EntityName)), lockSlot); - // args.Cancel(); - //} - } - - private void OnLockInserted(Entity lockSlot, ref EntInsertedIntoContainerMessage args) - { - if (!lockSlot.Comp.Initialized) - return; - - if (args.Container.ID != lockSlot.Comp.LockSlotId) - return; - - if (!TryComp(args.Entity, out var lockComp)) - return; - - _appearance.SetData(lockSlot, LockSlotVisuals.LockExist, true); - } - - private void OnLockRemoved(Entity lockSlot, ref EntRemovedFromContainerMessage args) - { - if (args.Container.ID != lockSlot.Comp.LockSlotId) - return; - _appearance.SetData(lockSlot, LockSlotVisuals.LockExist, false); - } - - public bool TryGetLockFromSlot(EntityUid uid, - [NotNullWhen(true)] out Entity? lockEnt, - LockComponent? component = null) - { - if (!Resolve(uid, ref component, false)) - { - lockEnt = null; - return false; - } - - if (component.LockSlotId == null) - { - lockEnt = null; - return false; - } - - if (_itemSlots.TryGetSlot(uid, component.LockSlotId, out ItemSlot? slot)) - { - if (TryComp(slot.Item, out var lockComp)) - { - lockEnt = new Entity(slot.Item.Value, lockComp); - return true; - } - else - { - lockEnt = null; - return false; - } - } - - lockEnt = null; - return false; - } - private bool TryUseKeyOnLock(EntityUid user, EntityUid target, Entity keyEnt, Entity lockEnt) + private void TryUseKeyOnLock(EntityUid user, Entity target, Entity key) { if (!TryComp(target, out var lockComp)) - return false; + return; - var keyShape = keyEnt.Comp.LockShape; - var lockShape = lockEnt.Comp.LockShape; + var keyShape = key.Comp.LockShape; + var lockShape = target.Comp.LockShape; if (keyShape == null || lockShape == null) - return false; + return; if (keyShape == lockShape) { if (lockComp.Locked) { if(_lock.TryUnlock(target, user)) - _popup.PopupEntity(Loc.GetString("cp14-lock-unlock-lock", ("lock", MetaData(lockEnt).EntityName)), lockEnt, user); + _popup.PopupEntity(Loc.GetString("cp14-lock-unlock", ("lock", MetaData(target).EntityName)), target, user); } else { if (_lock.TryLock(target, user)) - _popup.PopupEntity(Loc.GetString("cp14-lock-lock-lock", ("lock", MetaData(lockEnt).EntityName)), lockEnt, user); + _popup.PopupEntity(Loc.GetString("cp14-lock-lock", ("lock", MetaData(target).EntityName)), target, user); } - return true; } else { - _popup.PopupEntity(Loc.GetString("cp14-lock-key-use-nofit"), lockEnt, user); + _popup.PopupEntity(Loc.GetString("cp14-lock-key-no-fit"), target, user); } - return false; } } [Serializable, NetSerializable] -public enum LockSlotVisuals : byte +public sealed partial class LockPickHackDoAfterEvent : DoAfterEvent { - LockExist + [DataField] + public int Height = 0; + + public LockPickHackDoAfterEvent(int h) + { + Height = h; + } + + public override DoAfterEvent Clone() => this; } diff --git a/Resources/Locale/en-US/_CP14/keyring/keyring.ftl b/Resources/Locale/en-US/_CP14/keyring/keyring.ftl index 0e4c5749b2..826acf4f77 100644 --- a/Resources/Locale/en-US/_CP14/keyring/keyring.ftl +++ b/Resources/Locale/en-US/_CP14/keyring/keyring.ftl @@ -1,15 +1,17 @@ -cp14-lock-verb-lockpick-use-text = Push: {$height} -cp14-lock-verb-lockpick-use-message = If you engage the lock prongs in the correct sequence, you can unlock the lock. +verb-categories-lock-pick = Pick the lock -cp14-lock-keyring-use-nofit = The key does not fit! +cp14-lock-verb-lock-pick-use-text = Push: +cp14-lock-verb-lock-pick-use-message = If you engage the lock prongs in the correct sequence, you can unlock the lock. -cp14-lock-unlock-lock = You have opened {$lock} -cp14-lock-lock-lock = You closed {$lock} +cp14-lock-key-no-fit = The key does not fit! -cp14-lock-lockpick-success = You have successfully picked the lock! -cp14-lock-lockpick-failed = {$lock} is reset to its original position. -cp14-lock-lockpick-failed-damage = {$lock} is reset to its original position, damaging your lockpick. -cp14-lock-lockpick-failed-break = {$lock} resets to its original position, breaking your lockpick. +cp14-lock-unlock = You have opened {$lock} +cp14-lock-lock = You closed {$lock} + +cp14-lock-lock-pick-success = One of the lock elements clicks quietly. +cp14-lock-lock-pick-failed = {$lock} is reset to its original position. +cp14-lock-lock-pick-failed-damage = {$lock} is reset to its original position, damaging your lockpick. +cp14-lock-lock-pick-failed-break = {$lock} resets to its original position, breaking your lockpick. cp14-lock-verb-use-key-text-open = Open the lock with {$item}. cp14-lock-verb-use-key-text-close = Close the lock with {$item} diff --git a/Resources/Locale/ru-RU/_CP14/keyring/keyring.ftl b/Resources/Locale/ru-RU/_CP14/keyring/keyring.ftl index ea86c414a7..7a056a3164 100644 --- a/Resources/Locale/ru-RU/_CP14/keyring/keyring.ftl +++ b/Resources/Locale/ru-RU/_CP14/keyring/keyring.ftl @@ -1,15 +1,17 @@ -cp14-lock-verb-lockpick-use-text = Надавить: {$height} -cp14-lock-verb-lockpick-use-message = Если вы в правильной последовательности заденете зубчики замка, вы сможете разблокировать его. +verb-categories-lock-pick = Взломать замок -cp14-lock-keyring-use-nofit = Ключ не подходит! +cp14-lock-verb-lock-pick-use-text = Надавить: +cp14-lock-verb-lock-pick-use-message = Если вы в правильной последовательности заденете зубчики замка, вы сможете разблокировать его. -cp14-lock-unlock-lock = Вы открыли {$lock} -cp14-lock-lock-lock = Вы закрыли {$lock} +cp14-lock-key-no-fit = Ключ не подходит! -cp14-lock-lockpick-success = Вы успешно взломали замок! -cp14-lock-lockpick-failed = {$lock} сбрасывается в исходное положение. -cp14-lock-lockpick-failed-damage = {$lock} сбрасывается в исходное положение, повреждая вашу отмычку. -cp14-lock-lockpick-failed-break = {$lock} сбрасывается в исходное положение, ломая вашу отмычку. +cp14-lock-unlock = Вы открыли {$lock} +cp14-lock-lock = Вы закрыли {$lock} + +cp14-lock-lock-pick-success = Один из элементов замка тихо щелкает. +cp14-lock-lock-pick-failed = {$lock} сбрасывается в исходное положение. +cp14-lock-lock-pick-failed-damage = {$lock} сбрасывается в исходное положение, повреждая вашу отмычку. +cp14-lock-lock-pick-failed-break = {$lock} сбрасывается в исходное положение, ломая вашу отмычку. cp14-lock-verb-use-key-text-open = Открыть замок при помощи {$item} cp14-lock-verb-use-key-text-close = Закрыть замок при помощи {$item} diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Doors/base.yml b/Resources/Prototypes/_CP14/Entities/Structures/Doors/base.yml index ccdcb3c506..68c1e3e6b6 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Doors/base.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Doors/base.yml @@ -16,18 +16,4 @@ closedDrawDepth: Mobs openDrawDepth: Mobs - type: Lock - locked: true - lockSlotId: lock_slot - - type: ItemSlots - slots: - lock_slot: - name: cp-lock-slot-component-slot-name-default - disableEject: true - insertOnInteract: false - ejectOnBreak: true - whitelist: - components: - - CPLock - - type: ContainerContainer - containers: - lock_slot: !type:ContainerSlot \ No newline at end of file + locked: false \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors.yml b/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors.yml index 175d428d90..bf3a19cd41 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors.yml @@ -28,8 +28,6 @@ behaviors: - !type:DoActsBehavior acts: ["Destruction"] - - type: Lock - locked: false - type: Construction graph: CP14WoodenDoor node: CP14WoodenDoor @@ -53,17 +51,8 @@ id: CP14WoodenDoorTavernStaff suffix: Tavern Staff components: - - type: ItemSlots - slots: - lock_slot: - name: cp-lock-slot-component-slot-name-default - startingItem: CP14LockTavernStaff - disableEject: true - insertOnInteract: false - ejectOnBreak: true - whitelist: - components: - - CPLock + - type: CP14Lock + autoGenerateShape: TavernStaff - type: Lock locked: true @@ -74,32 +63,55 @@ id: CP14WoodenDoorTavernStaffMirrored suffix: Tavern Staff, Mirrored - - type: entity parent: CP14WoodenDoor - id: CP14WoodenDoorTavernDorms - suffix: Tavern Dorms + id: CP14WoodenDoorTavernDorms1 + suffix: Tavern Dorms 1 components: - - type: ItemSlots - slots: - lock_slot: - name: cp-lock-slot-component-slot-name-default - startingItem: CP14LockTavernDorms1 - disableEject: true - insertOnInteract: false - ejectOnBreak: true - whitelist: - components: - - CPLock + - type: CP14Lock + autoGenerateShape: TavernDorms1 - type: Lock locked: true - type: entity - parent: - - CP14WoodenDoorTavernDorms - - CP14WoodenDoorMirrored - id: CP14WoodenDoorTavernDormsMirrored - suffix: Tavern Dorms, Mirrored + parent: CP14WoodenDoor + id: CP14WoodenDoorTavernDorms2 + suffix: Tavern Dorms 2 + components: + - type: CP14Lock + autoGenerateShape: TavernDorms2 + - type: Lock + locked: true + +- type: entity + parent: CP14WoodenDoor + id: CP14WoodenDoorTavernDorms3 + suffix: Tavern Dorms 3 + components: + - type: CP14Lock + autoGenerateShape: TavernDorms3 + - type: Lock + locked: true + +- type: entity + parent: CP14WoodenDoor + id: CP14WoodenDoorTavernDorms4 + suffix: Tavern Dorms 4 + components: + - type: CP14Lock + autoGenerateShape: TavernDorms4 + - type: Lock + locked: true + +- type: entity + parent: CP14WoodenDoor + id: CP14WoodenDoorTavernDorms5 + suffix: Tavern Dorms 5 + components: + - type: CP14Lock + autoGenerateShape: TavernDorms5 + - type: Lock + locked: true # Alchemy @@ -108,17 +120,8 @@ id: CP14WoodenDoorTavernAlchemy suffix: Alchemy components: - - type: ItemSlots - slots: - lock_slot: - name: cp-lock-slot-component-slot-name-default - startingItem: CP14LockAlchemy - disableEject: true - insertOnInteract: false - ejectOnBreak: true - whitelist: - components: - - CPLock + - type: CP14Lock + autoGenerateShape: Alchemy - type: Lock locked: true diff --git a/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors_windowed.yml b/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors_windowed.yml index afffc8a018..31d95dc592 100644 --- a/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors_windowed.yml +++ b/Resources/Prototypes/_CP14/Entities/Structures/Doors/wooden_doors_windowed.yml @@ -31,8 +31,6 @@ behaviors: - !type:DoActsBehavior acts: ["Destruction"] - - type: Lock - locked: false - type: Construction graph: CP14WoodenDoor node: CP14WoodenDoorWindowed @@ -56,17 +54,8 @@ id: CP14WoodenDoorWindowedTavernHall suffix: Tavern Hall components: - - type: ItemSlots - slots: - lock_slot: - name: cp-lock-slot-component-slot-name-default - startingItem: CP14LockTavernHall - disableEject: true - insertOnInteract: false - ejectOnBreak: true - whitelist: - components: - - CPLock + - type: CP14Lock + autoGenerateShape: TavernHall - type: Lock locked: true diff --git a/Resources/Prototypes/_CP14/Entities/locks.yml b/Resources/Prototypes/_CP14/Entities/locks.yml deleted file mode 100644 index cc449b8b0c..0000000000 --- a/Resources/Prototypes/_CP14/Entities/locks.yml +++ /dev/null @@ -1,83 +0,0 @@ -- type: entity - parent: BaseItem - abstract: true - categories: [ ForkFiltered ] - id: CP14BaseLock - name: steel lock - description: It locks things up. And you'll need a key to open them back up. - components: - - type: CP14Lock - lockPickDamageChance: 0.2 - autoGenerateShape: Debug - - type: Sprite - sprite: _CP14/Objects/keys.rsi - layers: - - state: lock - -# Tavern - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernHall - name: tavern lock - components: - - type: CP14Lock - autoGenerateShape: TavernHall - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernStaff - name: the lock to the tavern offices - components: - - type: CP14Lock - autoGenerateShape: TavernStaff - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernDorms1 - name: lock from tavern room 1 - components: - - type: CP14Lock - autoGenerateShape: TavernDorms1 - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernDorms2 - name: lock from tavern room 2 - components: - - type: CP14Lock - autoGenerateShape: TavernDorms2 - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernDorms3 - name: lock from tavern room 3 - components: - - type: CP14Lock - autoGenerateShape: TavernDorms3 - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernDorms4 - name: lock from tavern room 4 - components: - - type: CP14Lock - autoGenerateShape: TavernDorms4 - -- type: entity - parent: CP14BaseLock - id: CP14LockTavernDorms5 - name: lock from tavern room 5 - components: - - type: CP14Lock - autoGenerateShape: TavernDorms5 - -# Alchemy - -- type: entity - parent: CP14BaseLock - id: CP14LockAlchemy - name: alchemist's lock - components: - - type: CP14Lock - autoGenerateShape: Alchemy \ No newline at end of file diff --git a/Resources/migration.yml b/Resources/migration.yml index f8cf16a54b..826c4221ec 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -33,7 +33,7 @@ CP14AlchemyFurnaceDebug: CP14AlchemyFurnace #2024-09-22 CP14WoodDoorTavern: CP14WoodenDoorWindowedTavernHall -CP14LockTavern: CP14LockTavernHall +CP14LockTavern: null CP14KeyTavern: CP14KeyTavernHall #2024-09-23 @@ -46,16 +46,11 @@ CP14WoodDoorTavernHall: CP14WoodenDoorWindowedTavernHall CP14WoodDoorTavernHallOpened: CP14WoodenDoorWindowedTavernHall CP14WoodDoorTavernStaff: CP14WoodenDoorTavernStaff CP14WoodDoorTavernStaffOpened: CP14WoodenDoorTavernStaff -CP14WoodDoorTavernDorms1: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms2: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms3: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms4: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms5: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms1Opened: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms2Opened: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms3Opened: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms4Opened: CP14WoodenDoorTavernDorms -CP14WoodDoorTavernDorms5Opened: CP14WoodenDoorTavernDorms +CP14WoodDoorTavernDorms1Opened: CP14WoodenDoorTavernDorms1 +CP14WoodDoorTavernDorms2Opened: CP14WoodenDoorTavernDorms2 +CP14WoodDoorTavernDorms3Opened: CP14WoodenDoorTavernDorms3 +CP14WoodDoorTavernDorms4Opened: CP14WoodenDoorTavernDorms5 +CP14WoodDoorTavernDorms5Opened: CP14WoodenDoorTavernDorms4 CP14WoodDoorTavernAlchemy: CP14WoodenDoorTavernAlchemy CP14WoodDoorTavernAlchemy5Opened: CP14WoodenDoorTavernAlchemy CP14WoodenDoorOpened: CP14WoodenDoor @@ -63,15 +58,11 @@ CP14CuttingBoard: null CP14WoodenDoorTavernHallLocked: CP14WoodenDoorWindowedTavernHall CP14WoodenDoorTavernStaffLocked: CP14WoodenDoorTavernStaff -CP14WoodenDoorTavernDorms1Locked: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms2Locked: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms3Locked: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms4Locked: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms5Locked: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms2: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms3: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms4: CP14WoodenDoorTavernDorms -CP14WoodenDoorTavernDorms5: CP14WoodenDoorTavernDorms +CP14WoodenDoorTavernDorms1Locked: CP14WoodenDoorTavernDorms1 +CP14WoodenDoorTavernDorms2Locked: CP14WoodenDoorTavernDorms2 +CP14WoodenDoorTavernDorms3Locked: CP14WoodenDoorTavernDorms3 +CP14WoodenDoorTavernDorms4Locked: CP14WoodenDoorTavernDorms4 +CP14WoodenDoorTavernDorms5Locked: CP14WoodenDoorTavernDorms5 CP14WoodenDoorTavernAlchemyLocked: CP14WoodenDoorTavernAlchemy #2024-09-24 @@ -118,6 +109,7 @@ CP14VialSmallLumiMushroom: CP14VialTinyLumiMushroom #2024-10-20 CP14SpawnPointHouseKeeper: CP14SpawnPointQuartermaster +CP14WoodenDoorTavernDorms: null # <---> CrystallPunk migration zone end