Shock collar

(cherry picked from commit e34770d7e5399195b8f762e545eddab8a3c2dd4f)
This commit is contained in:
Aviu00
2023-12-28 17:15:23 +03:00
committed by Cinka
parent d5b3f707d1
commit a935aa2242
5 changed files with 257 additions and 11 deletions

View File

@@ -0,0 +1,15 @@
using Content.Shared.DeviceLinking;
using Robust.Shared.Audio;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.White.ShockClothing;
[RegisterComponent]
public sealed partial class ShockClothingComponent : Component
{
[DataField("triggerPort", customTypeSerializer: typeof(PrototypeIdSerializer<SinkPortPrototype>))]
public string TriggerPort = "Trigger";
[ViewVariables(VVAccess.ReadWrite), DataField("zapSound")]
public SoundSpecifier? ZapSound = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/taser_hit.ogg");
}

View File

@@ -0,0 +1,42 @@
using Content.Server.DeviceLinking.Events;
using Content.Server.DeviceLinking.Systems;
using Content.Server.Electrocution;
using Robust.Server.Containers;
using Robust.Shared.Audio.Systems;
namespace Content.Server.White.ShockClothing;
public sealed class ShockClothingSystem : EntitySystem
{
[Dependency] private readonly DeviceLinkSystem _deviceLink = default!;
[Dependency] private readonly ElectrocutionSystem _electrocution = default!;
[Dependency] private readonly ContainerSystem _containerSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<ShockClothingComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<ShockClothingComponent, SignalReceivedEvent>(OnSignalReceived);
}
private void OnInit(EntityUid uid, ShockClothingComponent component, ComponentInit args)
{
_deviceLink.EnsureSinkPorts(uid, component.TriggerPort);
}
private void OnSignalReceived(EntityUid uid, ShockClothingComponent component, ref SignalReceivedEvent args)
{
if (args.Port != component.TriggerPort)
return;
_audio.PlayPvs(component.ZapSound, uid);
if (!_containerSystem.TryGetContainingContainer(uid, out var container))
return;
_electrocution.TryDoElectrocution(container.Owner, uid, 0, TimeSpan.FromSeconds(5), true,
ignoreInsulation: true);
}
}

View File

@@ -0,0 +1,23 @@
ent-CollarCyan = голубой ошейник
ent-CollarYellow = желтый ошейник
ent-CollarGreen = зеленый ошейник
ent-CollarRed = красный ошейник
ent-CollarLatex = латексный ошейник
ent-CollarOrange = оранжевый ошейник
ent-CollarWhite = белый ошейник
ent-CollarPurple = фиолетовый ошейник
ent-CollarBlack = черный ошейник
ent-CollarTealblack = черный ошейник
ent-CollarSpike = шипованный ошейник
ent-CollarShock = шоковый ошейник

View File

@@ -10,9 +10,23 @@
ClothingHeadHatCatEars: 6
ClothingHeadHatBunny: 6
DildoHuman: 3
DildoKnocked: 3
DildoPlain: 3
DildoFlared: 3
DildoAvian: 3
DildoDragon: 3
DildoCanine: 3
DildoEquine: 3
DildoTentacle: 3
CollarCyan: 3
CollarYellow: 3
CollarGreen: 3
CollarRed: 3
CollarLatex: 3
CollarOrange: 3
CollarWhite: 3
CollarPurple: 3
CollarBlack: 3
CollarTealblack: 3
CollarSpike: 3
CollarShock: 6
Darkholme: 3
Gladiator: 3
Sexyclown: 3

View File

@@ -1,20 +1,172 @@
- type: entity
parent: ClothingNeckBase
id: Choker
name: Choker
id: CollarCyan
name: cyan collar
components:
- type: Sprite
sprite: White/Clothing/Neck/choker.rsi
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_cyan
- type: Clothing
sprite: White/Clothing/Neck/choker.rsi
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_cyan-equipped
- type: entity
parent: ClothingNeckBase
id: Petcollar
name: Petcollar
id: CollarYellow
name: yellow collar
components:
- type: Sprite
sprite: White/Clothing/Neck/petcollar.rsi
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_yellow
- type: Clothing
sprite: White/Clothing/Neck/petcollar.rsi
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_yellow-equipped
- type: entity
parent: ClothingNeckBase
id: CollarGreen
name: green collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_green
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_green-equipped
- type: entity
parent: ClothingNeckBase
id: CollarRed
name: red collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_red
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_red-equipped
- type: entity
parent: ClothingNeckBase
id: CollarLatex
name: latex collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_latex
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_latex-equipped
- type: entity
parent: ClothingNeckBase
id: CollarOrange
name: orange collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_orange
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_orange-equipped
- type: entity
parent: ClothingNeckBase
id: CollarWhite
name: white collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_white
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_white-equipped
- type: entity
parent: ClothingNeckBase
id: CollarPurple
name: purple collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_purple
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_purple-equipped
- type: entity
parent: ClothingNeckBase
id: CollarBlack
name: black collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_black
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_black-equipped
- type: entity
parent: ClothingNeckBase
id: CollarTealblack
name: tealblack collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_tealblack
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_tealblack-equipped
- type: entity
parent: ClothingNeckBase
id: CollarSpike
name: spike collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: collar_spike
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: collar_spike-equipped
- type: entity
parent: ClothingNeckBase
id: CollarShock
name: shock collar
components:
- type: Sprite
sprite: White/Clothing/Neck/lewd_neck.rsi
state: shockcollar
- type: Clothing
sprite: White/Clothing/Neck/lewd_neck.rsi
clothingVisuals:
neck:
- state: shockcollar-equipped
- type: ShockClothing
- type: DeviceLinkSink
ports:
- Trigger