diff --git a/Content.Shared/Magic/Components/SpellbookComponent.cs b/Content.Shared/Magic/Components/SpellbookComponent.cs index f1b307c245..69c2bac2a4 100644 --- a/Content.Shared/Magic/Components/SpellbookComponent.cs +++ b/Content.Shared/Magic/Components/SpellbookComponent.cs @@ -16,12 +16,14 @@ public sealed partial class SpellbookComponent : Component [ViewVariables] public readonly List Spells = new(); + // The three fields below are just used for initialization. /// - /// The three fields below is just used for initialization. + /// Dictionary of spell prototypes to charge counts. + /// If the charge count is null, it means the spell has infinite charges. /// [DataField] [ViewVariables(VVAccess.ReadWrite)] - public Dictionary SpellActions = new(); + public Dictionary SpellActions = new(); [DataField] [ViewVariables(VVAccess.ReadWrite)] diff --git a/Content.Shared/Magic/SpellbookSystem.cs b/Content.Shared/Magic/SpellbookSystem.cs index 6ef0a10b0c..ca01819bce 100644 --- a/Content.Shared/Magic/SpellbookSystem.cs +++ b/Content.Shared/Magic/SpellbookSystem.cs @@ -33,7 +33,9 @@ public sealed class SpellbookSystem : EntitySystem if (spell == null) continue; - _sharedCharges.SetCharges(spell.Value, charges); + // Null means infinite charges. + if (charges is { } count) + _sharedCharges.SetCharges(spell.Value, count); ent.Comp.Spells.Add(spell.Value); } } @@ -73,8 +75,9 @@ public sealed class SpellbookSystem : EntitySystem foreach (var (id, charges) in ent.Comp.SpellActions) { EntityUid? actionId = null; - if (_actions.AddAction(args.Args.User, ref actionId, id)) - _sharedCharges.SetCharges(actionId.Value, charges); + if (_actions.AddAction(args.Args.User, ref actionId, id) + && charges is { } count) // Null means infinite charges + _sharedCharges.SetCharges(actionId.Value, count); } } diff --git a/Resources/Prototypes/Entities/Objects/Magic/books.yml b/Resources/Prototypes/Entities/Objects/Magic/books.yml index db604f92d3..db0d3c8d51 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/books.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/books.yml @@ -69,7 +69,7 @@ components: - type: Spellbook spellActions: - ActionSpawnMagicarpSpell: -1 + ActionSpawnMagicarpSpell: null - type: entity id: ForceWallSpellbook @@ -92,7 +92,7 @@ color: gold - type: Spellbook spellActions: - ActionForceWall: -1 + ActionForceWall: null - type: entity id: BlinkBook @@ -113,7 +113,7 @@ color: gold - type: Spellbook spellActions: - ActionBlink: -1 + ActionBlink: null - type: entity id: SmiteBook @@ -136,7 +136,7 @@ - state: overlay_blood - type: Spellbook spellActions: - ActionSmiteNoReq: -1 + ActionSmiteNoReq: null - type: entity id: KnockSpellbook @@ -158,7 +158,7 @@ color: "#98c495" - type: Spellbook spellActions: - ActionKnock: -1 + ActionKnock: null - type: entity id: FireballSpellbook @@ -182,7 +182,7 @@ shader: unshaded - type: Spellbook spellActions: - ActionFireball: -1 + ActionFireball: null - type: entity id: ScrollRunes @@ -197,7 +197,7 @@ - state: spell_default - type: Spellbook spellActions: - ActionFlashRune: -1 - ActionExplosionRune: -1 - ActionIgniteRune: -1 - ActionStunRune: -1 + ActionFlashRune: null + ActionExplosionRune: null + ActionIgniteRune: null + ActionStunRune: null