Fix GameTicker and StartingGear performing bad string checks.
- This prevented people from spawning as clown, etc if they had set the skirt option. - Adds some custom type serializers to StartingGear for YAML linter support.
This commit is contained in:
@@ -193,7 +193,7 @@ namespace Content.Server.GameTicking
|
||||
foreach (var slot in EquipmentSlotDefines.AllSlots)
|
||||
{
|
||||
var equipmentStr = startingGear.GetGear(slot, profile);
|
||||
if (equipmentStr != string.Empty)
|
||||
if (!string.IsNullOrEmpty(equipmentStr))
|
||||
{
|
||||
var equipmentEntity = EntityManager.SpawnEntity(equipmentStr, entity.Transform.Coordinates);
|
||||
inventory.Equip(slot, equipmentEntity.GetComponent<ItemComponent>());
|
||||
|
||||
@@ -2,6 +2,7 @@ using System.Collections.Generic;
|
||||
using Content.Shared.Preferences;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
using Robust.Shared.ViewVariables;
|
||||
using static Content.Shared.Inventory.EquipmentSlotDefines;
|
||||
|
||||
@@ -10,18 +11,19 @@ namespace Content.Shared.Roles
|
||||
[Prototype("startingGear")]
|
||||
public class StartingGearPrototype : IPrototype
|
||||
{
|
||||
// TODO: Custom TypeSerializer for dictionary value prototype IDs
|
||||
[DataField("equipment")] private Dictionary<Slots, string> _equipment = new();
|
||||
|
||||
/// <summary>
|
||||
/// if empty, there is no skirt override - instead the uniform provided in equipment is added.
|
||||
/// </summary>
|
||||
[DataField("innerclothingskirt")]
|
||||
private string _innerClothingSkirt = default!;
|
||||
[DataField("innerclothingskirt", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
private string _innerClothingSkirt = string.Empty;
|
||||
|
||||
[DataField("satchel")]
|
||||
[DataField("satchel", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
private string _satchel = string.Empty;
|
||||
|
||||
[DataField("duffelbag")]
|
||||
[DataField("duffelbag", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
private string _duffelbag = string.Empty;
|
||||
|
||||
public IReadOnlyDictionary<string, string> Inhand => _inHand;
|
||||
@@ -33,17 +35,17 @@ namespace Content.Shared.Roles
|
||||
|
||||
[ViewVariables]
|
||||
[DataField("id", required: true)]
|
||||
public string ID { get; } = default!;
|
||||
public string ID { get; } = string.Empty;
|
||||
|
||||
public string GetGear(Slots slot, HumanoidCharacterProfile? profile)
|
||||
{
|
||||
if (profile != null)
|
||||
{
|
||||
if ((slot == Slots.INNERCLOTHING) && (profile.Clothing == ClothingPreference.Jumpskirt) && (_innerClothingSkirt != ""))
|
||||
if (slot == Slots.INNERCLOTHING && profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(_innerClothingSkirt))
|
||||
return _innerClothingSkirt;
|
||||
if ((slot == Slots.BACKPACK) && (profile.Backpack == BackpackPreference.Satchel) && (_satchel != ""))
|
||||
if (slot == Slots.BACKPACK && profile.Backpack == BackpackPreference.Satchel && !string.IsNullOrEmpty(_satchel))
|
||||
return _satchel;
|
||||
if ((slot == Slots.BACKPACK) && (profile.Backpack == BackpackPreference.Duffelbag) && (_duffelbag != ""))
|
||||
if (slot == Slots.BACKPACK && profile.Backpack == BackpackPreference.Duffelbag && !string.IsNullOrEmpty(_duffelbag))
|
||||
return _duffelbag;
|
||||
}
|
||||
|
||||
|
||||
4
Resources/Changelog/Parts/clown.yml
Normal file
4
Resources/Changelog/Parts/clown.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
author: Zumorica
|
||||
changes:
|
||||
- type: Fix
|
||||
message: Fix bug where you couldn't join as clown under certain circumstances.
|
||||
Reference in New Issue
Block a user