Add "Mana Wasting" trait (#732)

* add trait

* Update Resources/Locale/ru-RU/_CP14/magicEnergy/magic-spells.ftl

* fix magic item using

---------

Co-authored-by: MetalSage <metalsage.official@gmail.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
This commit is contained in:
MetalSage
2025-01-12 14:10:45 +04:00
committed by GitHub
parent 485ddaa739
commit a6847c08e8
12 changed files with 145 additions and 20 deletions

View File

@@ -26,24 +26,29 @@ public abstract partial class CP14SharedMagicSystem
/// </summary>
private void OnManaCheck(Entity<CP14MagicEffectManaCostComponent> ent, ref CP14CastMagicEffectAttemptEvent args)
{
//Total man required
var requiredMana = CalculateManacost(ent, args.Performer);
if (!_magicEffectQuery.TryComp(ent, out var magicEffect))
return;
if (magicEffect.SpellStorage is not null)
//First - trying get mana from item
if (_magicEffectQuery.TryComp(ent, out var magicEffect))
{
if (_magicContainerQuery.TryComp(magicEffect.SpellStorage, out var magicContainer)) // We have item that provides this spell
if (magicEffect.SpellStorage is not null && _magicContainerQuery.TryComp(magicEffect.SpellStorage, out var magicContainer))
requiredMana = MathF.Max(0, (float)(requiredMana - magicContainer.Energy));
}
if (requiredMana > 0 && _magicContainerQuery.TryComp(args.Performer, out var playerMana))
if (requiredMana <= 0)
return;
//Second - trying get mana from performer
if (!_magicContainerQuery.TryComp(args.Performer, out var playerMana))
{
if (!_magicEnergy.HasEnergy(args.Performer, requiredMana, playerMana, true) && _net.IsServer)
{
_popup.PopupEntity(Loc.GetString("cp14-magic-spell-not-enough-mana-cast-warning-"+_random.Next(5)), args.Performer, args.Performer, PopupType.SmallCaution);
}
args.PushReason(Loc.GetString("cp14-magic-spell-no-mana-component"));
args.Cancel();
return;
}
if (!_magicEnergy.HasEnergy(args.Performer, requiredMana, playerMana, true) && _net.IsServer)
_popup.PopupEntity(Loc.GetString($"cp14-magic-spell-not-enough-mana-cast-warning-{_random.Next(5)}"), args.Performer, args.Performer, PopupType.SmallCaution);
}
private void OnStaminaCheck(Entity<CP14MagicEffectStaminaCostComponent> ent, ref CP14CastMagicEffectAttemptEvent args)