forked from AdventureTimeSS14/space_station_ADT
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ДНК Замок для скафандров (AdventureTimeSS14#626)
## Описание PR <!-- Что вы изменили в этом пулл реквесте? --> Добавлен компонент DNALocker позволяющий наделить любой скафандр ДНК Замком Скафандры ОБР и ЯО имеют встроенный ДНК Замок Фултоны можно цеплять на гуманоидов. **УРА!** ## Почему / Баланс <!-- Почему оно было изменено? Ссылайтесь на любые обсуждения или вопросы здесь. Пожалуйста, обсудите, как это повлияет на игровой баланс. --> Перенос со старой сборки и небольшое улучшение от меня **Ссылка на публикацию в Discord** - [Предложения](https://discord.com/channels/901772674865455115/1293258570997174322/1293258570997174322) - [Перенос контента](AdventureTimeSS14/space_station#561) ## Техническая информация <!-- Если речь идет об изменении кода, кратко изложите на высоком уровне принцип работы нового кода. Это облегчает рецензирование.- --> Добавлен компонент DNALockComponent и DNALockerSystem для биозамка скафандров ## Требования <!-- В связи с наплывом ПР'ов нам необходимо убедиться, что ПР'ы следуют правильным рекомендациям. Пожалуйста, уделите время прочтению, если делаете пулл реквест (ПР) впервые. Отметьте поля ниже, чтобы подтвердить, что Вы действительно видели их (поставьте X в скобках, например [X]): --> - [х] Я прочитал(а) и следую [Руководство по созданию пулл реквестов](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). Я понимаю, что в противном случае мой ПР может быть закрыт по усмотрению мейнтейнера. - [х] Я добавил скриншоты/видео к этому пулл реквесту, демонстрирующие его изменения в игре, **или** этот пулл реквест не требует демонстрации в игре **Чейнджлог** <!-- Здесь Вы можете заполнить журнал изменений, который будет автоматически добавлен в игру при мердже Вашего пулл реквест. Чтобы игроки узнали о новых возможностях и изменениях, которые могут повлиять на их игру, добавьте запись в журнал изменений. Не считайте суффикс типа записи (например, add) "частью" предложения: плохо: - add: новый инструмент для инженеров хорошо: - add: добавлен новый инструмент для инженеров Помещение имени после символа 🆑 изменит имя, которое будет отображаться в журнале изменений (в противном случае будет использоваться ваше имя пользователя GitHub). Например: 🆑 AruMoon --> 🆑 Inconnu - add: Добавлен ДНК Замок на скафандры ЭС, ЯО и ОБР - tweak: Фултоны вновь цепляются на гуманоидов. Гойда? --------- Co-authored-by: bananchiki <[email protected]>
- Loading branch information
1 parent
37e8c4c
commit 28833e3
Showing
6 changed files
with
183 additions
and
1 deletion.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
Content.Server/ADT/DNALocker/Components/DNALockerComponent.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
using Robust.Shared.Audio; | ||
|
||
namespace Content.Server.DNALocker; | ||
|
||
[RegisterComponent] | ||
public sealed partial class DNALockerComponent : Component | ||
{ | ||
[DataField] | ||
public string DNA = string.Empty; | ||
|
||
public bool IsLocked => DNA != string.Empty; | ||
|
||
[DataField] | ||
public bool IsEquipped = false; | ||
|
||
[DataField] | ||
public bool CanBeEmagged = true; | ||
|
||
[DataField("lockSound")] | ||
public SoundSpecifier LockSound = new SoundPathSpecifier("/Audio/ADT/dna-lock.ogg"); | ||
|
||
[DataField("emagSound")] | ||
public SoundSpecifier EmagSound = new SoundCollectionSpecifier("sparks"); | ||
|
||
[DataField("lockerExplodeSound")] | ||
public SoundSpecifier LockerExplodeSound = new SoundPathSpecifier("/Audio/Effects/Grenades/SelfDestruct/SDS_Charge.ogg"); | ||
|
||
[DataField("deniedSound")] | ||
public SoundSpecifier DeniedSound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); | ||
} |
127 changes: 127 additions & 0 deletions
127
Content.Server/ADT/DNALocker/Systems/DNALockerSystem.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
using Content.Server.Forensics; | ||
using Content.Shared.Inventory; | ||
using Content.Shared.Inventory.Events; | ||
using Content.Server.Explosion.EntitySystems; | ||
using Robust.Shared.Audio.Systems; | ||
using Content.Shared.Popups; | ||
using Content.Shared.Emag.Systems; | ||
using Robust.Shared.Timing; | ||
using Content.Shared.Interaction.Components; | ||
using Content.Shared.Verbs; | ||
using Robust.Shared.Utility; | ||
|
||
namespace Content.Server.DNALocker; | ||
|
||
public sealed partial class DNALockerSystem : EntitySystem | ||
{ | ||
[Dependency] private readonly SharedAudioSystem _audioSystem = default!; | ||
[Dependency] private readonly ExplosionSystem _explosion = default!; | ||
[Dependency] private readonly SharedPopupSystem _popup = default!; | ||
[Dependency] private readonly InventorySystem _inventorySystem = default!; | ||
|
||
public override void Initialize() | ||
{ | ||
base.Initialize(); | ||
|
||
SubscribeLocalEvent<DNALockerComponent, GetVerbsEvent<AlternativeVerb>>(OnAltVerb); | ||
SubscribeLocalEvent<DNALockerComponent, GotEquippedEvent>(OnEquip); | ||
SubscribeLocalEvent<DNALockerComponent, GotEmaggedEvent>(OnGotEmagged); | ||
} | ||
|
||
public void LockEntity(EntityUid uid, DNALockerComponent component, EntityUid equipee) | ||
{ | ||
if (!TryComp<DnaComponent>(equipee, out var dna)) | ||
{ | ||
ExplodeEntity(uid, component, equipee); | ||
return; | ||
} | ||
|
||
component.DNA = dna.DNA; | ||
_audioSystem.PlayPvs(component.LockSound, uid); | ||
var selfMessage = Loc.GetString("dna-locker-success"); | ||
_popup.PopupEntity(selfMessage, equipee, equipee); | ||
} | ||
|
||
public void ExplodeEntity(EntityUid uid, DNALockerComponent component, EntityUid equipee) | ||
{ | ||
EnsureComp<UnremoveableComponent>(uid); | ||
var selfMessage = Loc.GetString("dna-locker-failure"); | ||
var unremoveableMessage = Loc.GetString("dna-locker-unremoveable"); | ||
|
||
_popup.PopupEntity(unremoveableMessage, equipee, equipee, PopupType.LargeCaution); | ||
_audioSystem.PlayPvs(component.LockerExplodeSound, uid); | ||
Timer.Spawn(3000, () => | ||
{ | ||
_popup.PopupEntity(selfMessage, equipee, equipee, PopupType.LargeCaution); | ||
_explosion.QueueExplosion(equipee, "Default", 200f, 10f, 100f, 1f); | ||
QueueDel(uid); | ||
}); | ||
} | ||
|
||
private void OnEquip(EntityUid uid, DNALockerComponent component, GotEquippedEvent args) | ||
{ | ||
Log.Debug($"{args.Slot}"); | ||
if (!component.IsLocked) | ||
{ | ||
LockEntity(uid, component, args.Equipee); | ||
return; | ||
} | ||
|
||
if (TryComp<DnaComponent>(args.Equipee, out var dna)) | ||
{ | ||
if (component.DNA != null && component.DNA != dna.DNA) | ||
{ | ||
ExplodeEntity(uid, component, args.Equipee); | ||
} | ||
} | ||
} | ||
|
||
private void OnGotEmagged(EntityUid uid, DNALockerComponent component, ref GotEmaggedEvent args) | ||
{ | ||
if (!component.CanBeEmagged) | ||
return; | ||
|
||
component.DNA = string.Empty; | ||
_audioSystem.PlayPvs(component.EmagSound, uid); | ||
var userUid = args.UserUid; | ||
Timer.Spawn(1500, () => | ||
{ | ||
_audioSystem.PlayPvs(component.LockSound, uid); | ||
var selfMessage = Loc.GetString("dna-locker-unlock"); | ||
_popup.PopupEntity(selfMessage, uid, userUid); | ||
}); | ||
args.Repeatable = true; | ||
args.Handled = true; | ||
} | ||
|
||
private void OnAltVerb(EntityUid uid, DNALockerComponent component, GetVerbsEvent<AlternativeVerb> args) | ||
{ | ||
if (!component.IsLocked) | ||
return; | ||
|
||
AlternativeVerb verbDNALock = new() | ||
{ | ||
Act = () => MakeUnlocked(uid, component, args.User), | ||
Text = Loc.GetString("dna-locker-verb-name"), | ||
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/fold.svg.192dpi.png")), | ||
}; | ||
args.Verbs.Add(verbDNALock); | ||
} | ||
|
||
private void MakeUnlocked(EntityUid uid, DNALockerComponent component, EntityUid userUid) | ||
{ | ||
if (TryComp<DnaComponent>(userUid, out var userDNAComponent) && component.DNA == userDNAComponent.DNA) | ||
{ | ||
var unlocked = Loc.GetString("dna-locker-unlock"); | ||
_audioSystem.PlayPvs(component.LockSound, userUid); | ||
_popup.PopupEntity(unlocked, uid, userUid); | ||
component.DNA = string.Empty; | ||
} | ||
else | ||
{ | ||
var denied = Loc.GetString("dna-locker-failure"); | ||
_audioSystem.PlayPvs(component.DeniedSound, userUid); | ||
_popup.PopupEntity(denied, uid, userUid); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
dna-locker-success = Ваш ДНК установлен в качестве основного для данного скафандра. | ||
dna-locker-failure = Ваш ДНК не совпал с требуемым! | ||
dna-locker-unlock = Требуемые ДНК были сброшены. | ||
dna-locker-unremoveable = Замок заблокирован. Скафандр впивается в вашу кожу и сжимает вас. | ||
dna-locker-equipped = Замок издает странный звук и искры, но ничего не происходит. Кажется нужно снять скафандр. | ||
dna-locker-verb-name = Разблокировать замок |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters