Фиксы (#518)

* fix rcd ammo predicting

* fix tts preview

* cleanups HumanoidProfileEditor

* fix double chaplain bible

* loadout fixes

* fix handlabeler mispredicting

* fix resources couldnt be extracted due to the whitelist

* wd edit

* add security filled leather satchel to loadouts
This commit is contained in:
ThereDrD0
2024-07-31 05:39:38 +03:00
committed by GitHub
parent 49d6736a3e
commit f001e3dcc6
28 changed files with 146 additions and 118 deletions

View File

@@ -165,7 +165,7 @@ public sealed class LobbyUIController : UIController, IOnStateEntered<LobbyState
_profile = profile; _profile = profile;
} }
private EntityUid EnsurePreviewDummy(HumanoidCharacterProfile profile) public EntityUid EnsurePreviewDummy(HumanoidCharacterProfile profile)
{ {
if (_previewDummy != null) if (_previewDummy != null)
return _previewDummy.Value; return _previewDummy.Value;

View File

@@ -108,6 +108,7 @@ namespace Content.Client.Preferences.UI
public int CharacterSlot; public int CharacterSlot;
public HumanoidCharacterProfile? Profile; public HumanoidCharacterProfile? Profile;
private MarkingSet _markingSet = new(); // storing this here feels iffy but a few things need it this high up private MarkingSet _markingSet = new(); // storing this here feels iffy but a few things need it this high up
private static LobbyUIController? _controller;
public event Action<HumanoidCharacterProfile, int>? OnProfileChanged; public event Action<HumanoidCharacterProfile, int>? OnProfileChanged;
@@ -124,10 +125,12 @@ namespace Content.Client.Preferences.UI
_preferencesManager = preferencesManager; _preferencesManager = preferencesManager;
_markingManager = IoCManager.Resolve<MarkingManager>(); _markingManager = IoCManager.Resolve<MarkingManager>();
_entMan = IoCManager.Resolve<IEntityManager>(); // WD _entMan = IoCManager.Resolve<IEntityManager>(); // WD
var controller = UserInterfaceManager.GetUIController<LobbyUIController>();
controller.PreviewDummyUpdated += OnDummyUpdate;
_previewSpriteView.SetEntity(controller.GetPreviewDummy()); _controller = UserInterfaceManager.GetUIController<LobbyUIController>();
_controller.PreviewDummyUpdated += OnDummyUpdate;
_previewSpriteView.SetEntity(_controller.GetPreviewDummy());
#region Left #region Left
@@ -513,15 +516,16 @@ namespace Content.Client.Preferences.UI
UpdateSpeciesGuidebookIcon(); UpdateSpeciesGuidebookIcon();
IsDirty = false; SetDirty();
controller.UpdateProfile();
} }
private void SetDirty() private void SetDirty()
{ {
var controller = UserInterfaceManager.GetUIController<LobbyUIController>(); if (_controller == null)
controller.UpdateProfile(Profile); return;
controller.ReloadCharacterUI();
_controller.UpdateProfile(Profile);
_controller.ReloadCharacterUI();
IsDirty = true; IsDirty = true;
} }
@@ -711,66 +715,45 @@ namespace Content.Client.Preferences.UI
return; return;
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithMarkings(markings.GetForwardEnumerator().ToList())); Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithMarkings(markings.GetForwardEnumerator().ToList()));
IsDirty = true;
var controller = UserInterfaceManager.GetUIController<LobbyUIController>(); SetDirty();
controller.UpdateProfile(Profile);
controller.ReloadProfile();
} }
private void OnSkinColorOnValueChanged() private void OnSkinColorOnValueChanged()
{ {
if (Profile is null) return; if (Profile is null)
return;
var skin = _prototypeManager.Index<SpeciesPrototype>(Profile.Species).SkinColoration; var skin = _prototypeManager.Index<SpeciesPrototype>(Profile.Species).SkinColoration;
switch (skin) switch (skin)
{ {
case HumanoidSkinColor.HumanToned: case HumanoidSkinColor.HumanToned:
{ _skinColor.Visible = true;
if (!_skinColor.Visible) _rgbSkinColorContainer.Visible = false;
{ ApplySkinColor(Profile, SkinColor.HumanSkinTone((int)_skinColor.Value));
_skinColor.Visible = true;
_rgbSkinColorContainer.Visible = false;
}
var color = SkinColor.HumanSkinTone((int) _skinColor.Value);
CMarkings.CurrentSkinColor = color;
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));//
break; break;
}
case HumanoidSkinColor.Hues: case HumanoidSkinColor.Hues:
{
if (!_rgbSkinColorContainer.Visible)
{
_skinColor.Visible = false;
_rgbSkinColorContainer.Visible = true;
}
CMarkings.CurrentSkinColor = _rgbSkinColorSelector.Color;
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(_rgbSkinColorSelector.Color));
break;
}
case HumanoidSkinColor.TintedHues: case HumanoidSkinColor.TintedHues:
{ _skinColor.Visible = false;
if (!_rgbSkinColorContainer.Visible) _rgbSkinColorContainer.Visible = true;
{
_skinColor.Visible = false;
_rgbSkinColorContainer.Visible = true;
}
var color = SkinColor.TintedHues(_rgbSkinColorSelector.Color); var color = skin == HumanoidSkinColor.Hues
? _rgbSkinColorSelector.Color
: SkinColor.TintedHues(_rgbSkinColorSelector.Color);
CMarkings.CurrentSkinColor = color; ApplySkinColor(Profile, color);
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
break; break;
}
} }
IsDirty = true; SetDirty();
var controller = UserInterfaceManager.GetUIController<LobbyUIController>(); }
controller.UpdateProfile(Profile);
controller.ReloadProfile(); private void ApplySkinColor(HumanoidCharacterProfile profile, Color color)
{
CMarkings.CurrentSkinColor = color;
Profile = profile.WithCharacterAppearance(profile.Appearance.WithSkinColor(color));
} }
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
@@ -779,8 +762,10 @@ namespace Content.Client.Preferences.UI
if (!disposing) if (!disposing)
return; return;
var controller = UserInterfaceManager.GetUIController<LobbyUIController>(); if (_controller == null)
controller.PreviewDummyUpdated -= OnDummyUpdate; return;
_controller.PreviewDummyUpdated -= OnDummyUpdate;
_requirements.Updated -= UpdateAntagRequirements; _requirements.Updated -= UpdateAntagRequirements;
_requirements.Updated -= UpdateRoleRequirements; _requirements.Updated -= UpdateRoleRequirements;
_preferencesManager.OnServerDataLoaded -= LoadServerData; _preferencesManager.OnServerDataLoaded -= LoadServerData;

View File

@@ -1,6 +1,7 @@
using System.Linq; using System.Linq;
using Content.Client._White.Sponsors; using Content.Client._White.Sponsors;
using Content.Client._White.TTS; using Content.Client._White.TTS;
using Content.Client.Lobby;
using Content.Shared.Preferences; using Content.Shared.Preferences;
using Content.Shared._White.TTS; using Content.Shared._White.TTS;
using Robust.Shared.Random; using Robust.Shared.Random;
@@ -84,10 +85,15 @@ public sealed partial class HumanoidProfileEditor
private void PlayTTS() private void PlayTTS()
{ {
if (_previewDummy is null || Profile is null) var dummy = _controller?.GetPreviewDummy();
if (!dummy.HasValue)
return; return;
_ttsSys.StopCurrentTTS(_previewDummy.Value); if (Profile == null)
_ttsMgr.RequestTTS(_previewDummy.Value, IoCManager.Resolve<IRobustRandom>().Pick(_sampleText), Profile.Voice); return;
_ttsSys.StopCurrentTTS(dummy.Value);
_ttsMgr.RequestTTS(dummy.Value, IoCManager.Resolve<IRobustRandom>().Pick(_sampleText), Profile.Voice);
} }
} }

View File

@@ -1,19 +0,0 @@
using Content.Shared.Whitelist;
namespace Content.Server.Labels.Components
{
[RegisterComponent]
public sealed partial class HandLabelerComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
[DataField("assignedLabel")]
public string AssignedLabel { get; set; } = string.Empty;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("maxLabelChars")]
public int MaxLabelChars { get; set; } = 50;
[DataField("whitelist")]
public EntityWhitelist Whitelist = new();
}
}

View File

@@ -1,14 +1,12 @@
using Content.Server.Labels.Components;
using Content.Server.UserInterface;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.Administration.Logs; using Content.Shared.Administration.Logs;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Labels; using Content.Shared.Labels;
using Content.Shared.Labels.Components;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Player;
namespace Content.Server.Labels namespace Content.Server.Labels
{ {

View File

@@ -54,10 +54,10 @@ public sealed class MaterialStorageSystem : SharedMaterialStorageSystem
var uid = GetEntity(msg.Entity); var uid = GetEntity(msg.Entity);
if (!TryComp<MaterialStorageComponent>(uid, out var component)) if (!Exists(uid))
return; return;
if (!Exists(uid)) if (!TryComp<MaterialStorageComponent>(uid, out var component))
return; return;
if (!_actionBlocker.CanInteract(player, uid)) if (!_actionBlocker.CanInteract(player, uid))
@@ -79,18 +79,16 @@ public sealed class MaterialStorageSystem : SharedMaterialStorageSystem
volume = sheetsToExtract * volumePerSheet; volume = sheetsToExtract * volumePerSheet;
} }
var gridUid = HasComp<BluespaceStorageComponent>(uid) && var gridUid = HasComp<BluespaceStorageComponent>(uid) && TryComp<TransformComponent>(uid, out var transformComponent)
TryComp<TransformComponent>(uid, out var transformComponent)
? transformComponent.GridUid ? transformComponent.GridUid
: null; : null;
var gridStorage = gridUid.HasValue && var gridStorage = gridUid.HasValue && TryComp<MaterialStorageComponent>(gridUid, out var materialStorageComponent)
TryComp<MaterialStorageComponent>(gridUid, out var materialStorageComponent)
? materialStorageComponent ? materialStorageComponent
: null; : null;
if (volume <= 0 || !TryChangeMaterialAmount(uid, msg.Material, -volume, gridUid: gridUid, gridStorage: gridStorage)) if (volume <= 0 || !TryChangeMaterialAmount(uid, msg.Material, -volume, gridUid: gridUid, gridStorage: gridStorage, checkWhitelist:false))
return; return;
var mats = SpawnMultipleFromMaterial(volume, material, Transform(uid).Coordinates, out _); var mats = SpawnMultipleFromMaterial(volume, material, Transform(uid).Coordinates, out _);

View File

@@ -0,0 +1,17 @@
using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
namespace Content.Shared.Labels.Components
{
[RegisterComponent, NetworkedComponent]
public sealed partial class HandLabelerComponent : Component
{
[ViewVariables(VVAccess.ReadWrite)]
[DataField] public string AssignedLabel { get; set; } = string.Empty;
[ViewVariables(VVAccess.ReadWrite)]
[DataField] public int MaxLabelChars { get; set; } = 50;
[DataField] public EntityWhitelist Whitelist = new();
}
}

View File

@@ -133,7 +133,13 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
/// <param name="volume"></param> /// <param name="volume"></param>
/// <param name="component"></param> /// <param name="component"></param>
/// <returns>If the amount can be changed</returns> /// <returns>If the amount can be changed</returns>
public bool CanChangeMaterialAmount(EntityUid uid, string materialId, int volume, MaterialStorageComponent? component, EntityUid? gridUid = null, MaterialStorageComponent? gridStorage = null) public bool CanChangeMaterialAmount(EntityUid uid,
string materialId,
int volume,
MaterialStorageComponent? component,
EntityUid? gridUid = null,
MaterialStorageComponent? gridStorage = null,
bool checkWhitelist = true)
{ {
if (!Resolve(uid, ref component)) if (!Resolve(uid, ref component))
return false; return false;
@@ -141,7 +147,8 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
if (!CanTakeVolume(uid, volume, component, gridUid:gridUid, gridStorage:gridStorage)) if (!CanTakeVolume(uid, volume, component, gridUid:gridUid, gridStorage:gridStorage))
return false; return false;
if (component.MaterialWhiteList != null && !component.MaterialWhiteList.Contains(materialId)) // WD edit - added checkWhitelist bool
if (checkWhitelist && component.MaterialWhiteList != null && !component.MaterialWhiteList.Contains(materialId))
return false; return false;
var amount = gridStorage != null var amount = gridStorage != null
@@ -181,12 +188,20 @@ public abstract class SharedMaterialStorageSystem : EntitySystem
/// <param name="component"></param> /// <param name="component"></param>
/// <param name="dirty"></param> /// <param name="dirty"></param>
/// <returns>If it was successful</returns> /// <returns>If it was successful</returns>
public bool TryChangeMaterialAmount(EntityUid uid, string materialId, int volume, MaterialStorageComponent? component = null, bool dirty = true, EntityUid? gridUid = null, MaterialStorageComponent? gridStorage = null) public bool TryChangeMaterialAmount(EntityUid uid,
string materialId,
int volume,
MaterialStorageComponent? component = null,
bool dirty = true,
EntityUid? gridUid = null,
MaterialStorageComponent? gridStorage = null,
bool checkWhitelist = true)
{ {
if (!Resolve(uid, ref component)) if (!Resolve(uid, ref component))
return false; return false;
if (!CanChangeMaterialAmount(uid, materialId, volume, component, gridUid:gridUid, gridStorage:gridStorage)) // WD edit - added checkWhitelist bool
if (!CanChangeMaterialAmount(uid, materialId, volume, component, gridUid:gridUid, gridStorage:gridStorage, checkWhitelist: checkWhitelist))
return false; return false;
var rightStorage = gridStorage ?? component; var rightStorage = gridStorage ?? component;

View File

@@ -5,6 +5,7 @@ using Content.Shared.Interaction;
using Content.Shared.Popups; using Content.Shared.Popups;
using Content.Shared.RCD.Components; using Content.Shared.RCD.Components;
using Content.Shared.Stacks; using Content.Shared.Stacks;
using Robust.Shared.Network;
using Robust.Shared.Timing; using Robust.Shared.Timing;
namespace Content.Shared.RCD.Systems; namespace Content.Shared.RCD.Systems;
@@ -15,6 +16,7 @@ public sealed class RCDAmmoSystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedStackSystem _stack = default!; [Dependency] private readonly SharedStackSystem _stack = default!;
[Dependency] private readonly INetManager _netMan = default!;
public override void Initialize() public override void Initialize()
{ {
@@ -83,7 +85,7 @@ public sealed class RCDAmmoSystem : EntitySystem
Dirty(uid, comp); Dirty(uid, comp);
// prevent having useless ammo with 0 charges // prevent having useless ammo with 0 charges
if (comp.Charges <= 0) if (comp.Charges <= 0 && stackComponent == null && _netMan.IsServer)
QueueDel(uid); QueueDel(uid);
} }
} }

View File

@@ -207,7 +207,6 @@
- type: StorageFill - type: StorageFill
contents: contents:
- id: BoxSurvival - id: BoxSurvival
- id: Bible
- id: RubberStampChaplain - id: RubberStampChaplain
- type: entity - type: entity

View File

@@ -206,7 +206,6 @@
- type: StorageFill - type: StorageFill
contents: contents:
- id: BoxSurvival - id: BoxSurvival
- id: Bible
- id: RubberStampChaplain - id: RubberStampChaplain
- type: entity - type: entity

View File

@@ -16,6 +16,11 @@
contents: contents:
- id: BoxSurvival - id: BoxSurvival
- type: entity # WD
noSpawn: true
parent: [ClothingBackpackSatchelLeather, ClothingBackpackSatchelSecurityFilled]
id: ClothingBackpackSatchelLeatherFilledSecurity
- type: entity - type: entity
noSpawn: true noSpawn: true
parent: ClothingBackpackSatchel parent: ClothingBackpackSatchel
@@ -165,6 +170,17 @@
- id: BoxSurvivalSecurity - id: BoxSurvivalSecurity
- id: Flash - id: Flash
- type: entity
parent: ClothingBackpackSatchelInspector
id: ClothingBackpackSatchelInspectorFilled
name: inspector's leather satchel
description: A stylish leather bag made from the skin of those who failed to do their job. It's best not to even try to find out what's inside.
components:
- type: StorageFill
contents:
- id: BoxSurvivalSecurity
- id: Flash
- type: entity - type: entity
noSpawn: true noSpawn: true
parent: ClothingBackpackSatchelEngineering parent: ClothingBackpackSatchelEngineering
@@ -218,7 +234,6 @@
- type: StorageFill - type: StorageFill
contents: contents:
- id: BoxSurvival - id: BoxSurvival
- id: Bible
- id: RubberStampChaplain - id: RubberStampChaplain
- type: entity - type: entity

View File

@@ -24,9 +24,7 @@
storageInsertSound: storageInsertSound:
path: /Audio/Items/belt_equip.ogg path: /Audio/Items/belt_equip.ogg
# WD edit sounds end # WD edit sounds end
# TODO: Fill this out more.
maxItemSize: Normal maxItemSize: Normal
# TODO: Fill this out more.
whitelist: whitelist:
tags: tags:
- Powerdrill - Powerdrill

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobSalvageSpecialist role: JobSalvageSpecialist
time: 54000 # 15 hours time: 9999999999 # 15 hours 54000
# Head # Head

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobClown role: JobClown
time: 108000 # 30 hours as clown required to ascend time: 9999999999 # 30 hours as clown required to ascend 108000
- type: loadoutEffectGroup # WD - type: loadoutEffectGroup # WD
id: MedalClownTimer id: MedalClownTimer
@@ -15,7 +15,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobClown role: JobClown
time: 36000 # 10 hours time: 9999999999 # 10 hours 36000
# Head # Head
- type: itemLoadout - type: itemLoadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobJanitor role: JobJanitor
time: 36000 # 10 hours time: 9999999999 # 10 hours 36000
# Head # Head
- type: itemLoadout - type: itemLoadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobPassenger role: JobPassenger
time: 36000 #10 hrs, silly reward for people who play passenger a lot time: 9999999999 #10 hrs, silly reward for people who play passenger a lot 36000
# Face # Face
- type: itemLoadout - type: itemLoadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobHeadOfPersonnel role: JobHeadOfPersonnel
time: 54000 #15 hrs, special reward for HoP mains time: 9999999999 #15 hrs, special reward for HoP mains 54000
# Jumpsuit # Jumpsuit
- type: itemLoadout - type: itemLoadout

View File

@@ -6,17 +6,17 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobAtmosphericTechnician role: JobAtmosphericTechnician
time: 21600 #6 hrs time: 9999999999 #6 hrs 21600
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobStationEngineer role: JobStationEngineer
time: 21600 #6 hrs time: 9999999999 #6 hrs 21600
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Engineering department: Engineering
time: 216000 # 60 hrs time: 9999999999 # 60 hrs 216000
# Head # Head
- type: itemLoadout - type: itemLoadout

View File

@@ -130,7 +130,7 @@
- type: startingGear - type: startingGear
id: InspectorSatchel id: InspectorSatchel
equipment: equipment:
back: ClothingBackpackSatchelInspector back: ClothingBackpackSatchelInspectorFilled
# Gloves # Gloves

View File

@@ -6,17 +6,17 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobChemist role: JobChemist
time: 21600 #6 hrs time: 9999999999 #6 hrs 21600
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobMedicalDoctor role: JobMedicalDoctor
time: 21600 #6 hrs time: 9999999999 #6 hrs 21600
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Medical department: Medical
time: 216000 # 60 hrs time: 9999999999 # 60 hrs 216000
# Head # Head
- type: itemLoadout - type: itemLoadout

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Science department: Science
time: 216000 #60 hrs time: 9999999999 #60 hrs 216000
# Head # Head

View File

@@ -62,6 +62,16 @@
equipment: equipment:
belt: ClothingBeltSecurityWebbing belt: ClothingBeltSecurityWebbing
# Backpack
- type: itemLoadout
id: CommonSatchelLeatherSecurity
equipment: CommonSatchelLeatherSecurity
- type: startingGear
id: CommonSatchelLeatherSecurity
equipment:
back: ClothingBackpackSatchelLeatherFilledSecurity
# Job trinkets # Job trinkets
- type: itemLoadout # WD - type: itemLoadout # WD

View File

@@ -6,12 +6,12 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobWarden role: JobWarden
time: 21600 #6 hrs time: 9999999999 #6 hrs 21600
- !type:JobRequirementLoadoutEffect - !type:JobRequirementLoadoutEffect
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Security department: Security
time: 216000 # 60 hrs time: 9999999999 # 60 hrs 216000
# Head # Head
- type: itemLoadout - type: itemLoadout

View File

@@ -7,7 +7,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobPassenger role: JobPassenger
time: 180000 # 50 hours time: 9999999999 # 50 hours 180000
# Eyes # Eyes

View File

@@ -6,7 +6,7 @@
requirement: requirement:
!type:RoleTimeRequirement !type:RoleTimeRequirement
role: JobLibrarian role: JobLibrarian
time: 3600 # 1 hour of being the biggest nerd on the station time: 9999999999 # 1 hour of being the biggest nerd on the station 3600
- type: loadoutEffectGroup - type: loadoutEffectGroup
id: JensenTimer id: JensenTimer
@@ -15,7 +15,7 @@
requirement: requirement:
!type:DepartmentTimeRequirement !type:DepartmentTimeRequirement
department: Cargo department: Cargo
time: 18000 #5 hours of being a space trucker time: 9999999999 #5 hours of being a space trucker 18000
# Basic options # Basic options
# Glasses # Glasses

View File

@@ -1530,7 +1530,6 @@
- type: loadoutGroup - type: loadoutGroup
id: DetectiveShoes id: DetectiveShoes
name: loadout-group-shoes name: loadout-group-shoes
minLimit: 0
loadouts: loadouts:
- BootsLaceup - BootsLaceup
- ShoesLeather - ShoesLeather
@@ -1604,6 +1603,12 @@
loadouts: loadouts:
- SecurityHeadsetFull - SecurityHeadsetFull
- type: loadoutGroup # WD
id: BasicSecurityHeadset
name: loadout-group-ears
loadouts:
- SecurityHeadset
- type: loadoutGroup # WD - type: loadoutGroup # WD
id: CommonSecurityBackpack id: CommonSecurityBackpack
name: loadout-group-backpack name: loadout-group-backpack
@@ -1611,7 +1616,7 @@
- SecurityBackpack - SecurityBackpack
- SecuritySatchel - SecuritySatchel
- SecurityDuffel - SecurityDuffel
- CommonSatchelLeather - CommonSatchelLeatherSecurity
- type: loadoutGroup # WD - type: loadoutGroup # WD
id: CommonSecurityBelt id: CommonSecurityBelt

View File

@@ -575,7 +575,7 @@
groups: groups:
- LawyerHead # WD - LawyerHead # WD
- CommonGlasses # WD - CommonGlasses # WD
- CommonSecurityHeadset - BasicSecurityHeadset # WD
- CommonMaskCigarette # WD - CommonMaskCigarette # WD
- LawyerNeck - LawyerNeck
- LawyerJumpsuit - LawyerJumpsuit