Thief stuff (#480)

* - add: Thief stuff.

* - fix: Implants.

* - add: Jammer.
This commit is contained in:
Aviu00
2024-07-22 14:20:05 +00:00
committed by GitHub
parent c0772fa89a
commit f82eee75b0
17 changed files with 122 additions and 6 deletions

View File

@@ -18,6 +18,7 @@ using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
using Robust.Shared.Random;
using System.Numerics;
using Content.Server.IdentityManagement;
using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Systems;
using Robust.Shared.Collections;
@@ -39,6 +40,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
[Dependency] private readonly PullingSystem _pullingSystem = default!;
[Dependency] private readonly EntityLookupSystem _lookupSystem = default!;
[Dependency] private readonly SharedMapSystem _mapSystem = default!;
[Dependency] private readonly IdentitySystem _identity = default!; // WD
private EntityQuery<PhysicsComponent> _physicsQuery;
private HashSet<Entity<MapGridComponent>> _targetGrids = [];
@@ -208,6 +210,7 @@ public sealed class SubdermalImplantSystem : SharedSubdermalImplantSystem
var newProfile = HumanoidCharacterProfile.RandomWithSpecies(humanoid.Species);
_humanoidAppearance.LoadProfile(ent, newProfile, humanoid);
_metaData.SetEntityName(ent, newProfile.Name);
_identity.QueueIdentityUpdate(ent); // WD
if (TryComp<DnaComponent>(ent, out var dna))
{
dna.DNA = _forensicsSystem.GenerateDNA();

View File

@@ -37,7 +37,8 @@ public sealed class MindslaveSystem : SharedMindslaveSystem
masterComponent.Slaves.Add(GetNetEntity(args.Target));
masterComponent.Master = GetNetEntity(args.User);
Dirty(args.Target, masterComponent);
Dirty(args.User, masterComponent);
Dirty(args.Target, slaveComponent);
if (!Mind.TryGetMind(args.Target, out var targetMindId, out var targetMind) || targetMind.Session is null)
{
@@ -73,7 +74,7 @@ public sealed class MindslaveSystem : SharedMindslaveSystem
{
return;
}
if (!TryComp(args.Target, out MindSlaveComponent? mindslave))
{
return;
@@ -85,6 +86,14 @@ public sealed class MindslaveSystem : SharedMindslaveSystem
Popup.PopupEntity(Loc.GetString("mindslave-freed", ("player", mindslave.Master)), args.Target, args.Target);
}
var master = GetEntity(mindslave.Master);
if (TryComp(master, out MindSlaveComponent? masterMindslave))
{
masterMindslave.Slaves.Remove(GetNetEntity(args.Target));
if (masterMindslave.Slaves.Count == 0)
RemComp<MindSlaveComponent>(master);
}
RemComp<MindSlaveComponent>(args.Target);
}
}
}

View File

@@ -1,5 +1,6 @@
using Content.Shared.Emag.Systems;
using Content.Shared.Tag;
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization;
@@ -17,4 +18,7 @@ public sealed partial class EmagComponent : Component
[DataField("emagImmuneTag", customTypeSerializer: typeof(PrototypeIdSerializer<TagPrototype>)), ViewVariables(VVAccess.ReadWrite)]
[AutoNetworkedField]
public string EmagImmuneTag = "EmagImmune";
[DataField]
public EntityWhitelist? Whitelist;
}

View File

@@ -50,6 +50,9 @@ public sealed class EmagSystem : EntitySystem
if (_tag.HasTag(target, comp.EmagImmuneTag))
return false;
if (comp.Whitelist?.IsValid(target, EntityManager) is false)
return false;
TryComp<LimitedChargesComponent>(uid, out var charges);
if (_charges.IsEmpty(uid, charges))
{

View File

@@ -18,7 +18,7 @@ implanter-contained-implant-text = [color=green]{ $desc }[/color]
## Implant Popups
scramble-implant-activated-popup = Вы превратились в { $identity }
scramble-implant-activated-popup = Ваша внешность меняется!
## Implanter Actions

View File

@@ -15,7 +15,7 @@ thief-backpack-button-deselect = Выбрать [X]
thief-backpack-category-chameleon-name = набор хамелеона
thief-backpack-category-chameleon-description =
Включает в себя полный комплект одежды-хамелеона,
Включает в себя айди карту агента, а также полный комплект одежды-хамелеона,
позволяющую вам маскироваться под практически любую вещь на станции.
thief-backpack-category-tools-name = набор медвежатника
@@ -53,3 +53,15 @@ thief-backpack-category-smuggler-description =
и ящик-невидимка. В них нельзя передвигаться,
но вы можете быстро спрятать или унести ценную добычу.
К этому набору также прилагается крутой плащ пустоты.
thief-backpack-category-slavery-name = набор рабовладельца
thief-backpack-category-slavery-description =
Набор, состоящий из трёх имплантеров подчинения
и стильной одежды рабовладельца.
Собери собственную армию послушных рабов!
thief-backpack-category-hitech-name = высокотехнологичный набор
thief-backpack-category-hitech-description =
Набор для любителей технологий.
Включает в себя устройство для взлома шлюзов и шкафов,
временной маяк, глушитель радио и хамелеон проектор.

View File

@@ -14,6 +14,7 @@
- ClothingEyesChameleon
- ClothingHeadsetChameleon
- ClothingShoesChameleon
- AgentIDCard # WD
- type: thiefBackpackSet
id: ToolsSet
@@ -108,3 +109,30 @@
- SmokeGrenade
- SmokeGrenade
- SmokeGrenade
- type: thiefBackpackSet
id: SlaverySet
name: thief-backpack-category-slavery-name
description: thief-backpack-category-slavery-description
sprite:
sprite: /Textures/Clothing/Head/Hats/syndiecap_maa.rsi
state: icon
content:
- MindSlaveImplanter
- MindSlaveImplanter
- MindSlaveImplanter
- ClothingOuterCoatSyndieCap
- ClothingHeadHatSyndieMAA
- type: thiefBackpackSet
id: HiTechSet
name: thief-backpack-category-hitech-name
description: thief-backpack-category-hitech-description
sprite:
sprite: /Textures/White/Objects/Tools/doorjack.rsi
state: icon
content:
- ChameleonProjector
- Doorjack
- TimeBeacon
- RadioJammer

View File

@@ -170,10 +170,12 @@
- ChemistrySet
- ToolsSet
- ChameleonSet # - TO DO Chameleon stump PR needed
- SyndieSet
# - SyndieSet
- SleeperSet
- CommunicatorSet
- SmugglerSet
- SlaverySet # WD
- HiTechSet # WD
- type: ActivatableUI
key: enum.ThiefBackpackUIKey.Key
- type: UserInterface

View File

@@ -54,6 +54,9 @@
radius: 1.15
energy: 0.45
- type: PointLightLocker
- type: Tag
tags:
- DoorjackUsable
- type: entity
id: LockerBaseSecure

View File

@@ -291,3 +291,6 @@
stateDoorOpen: base
stateDoorClosed: door
- type: LockVisuals
- type: Tag
tags:
- DoorjackUsable

View File

@@ -148,3 +148,6 @@
- Energy
reflectProb: 0.2
spread: 90
- type: Tag
tags:
- DoorjackUsable

View File

@@ -0,0 +1,21 @@
- type: entity
parent: Emag
id: Doorjack
name: взломщик замков
description: Специальное устройство, предназначенное для обхода доступа в замках шлюзов и шкафов.
components:
- type: LimitedCharges
- type: AutoRecharge
- type: Sprite
sprite: White/Objects/Tools/doorjack.rsi
state: icon
scale: 0.8, 0.8
- type: Item
sprite: White/Objects/Tools/doorjack.rsi
storedRotation: -90
- type: Emag
whitelist:
tags:
- DoorjackUsable
components:
- Airlock

View File

@@ -78,3 +78,6 @@
- type: Tag
id: BaseAimModule
- type: Tag
id: DoorjackUsable

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 B

View File

@@ -0,0 +1,22 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation from commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e, inhand sprites modified from tgstation at commit https://github.com/tgstation/tgstation/commit/d917f4c2a088419d5c3aec7656b7ff8cebd1822e",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "icon"
}
]
}