Dimensional (#1140)

* add: Temporamancy tree with new shadow swap spell

* feat: Increased tempo loadout to 2

* feat: Remove most popups from swap spell

* fix: Swap with no mob entities

* feat: Add CanCast to spell effect

* fix: Handeling cancaled event & swap state

* feat: Add UseCustomCastConditions

* feat: Add swap to magic shadow staff

* feat: Add tempo essence & magic type

* feat: Add Tempo type to all dimension spells

* fix: Magic shadow staff tempo manacost modify

* fix: Spell type local

* feat: Add touhou lore

* fix: Review

* feat: Add target dead block component

* feat: Remove checking access

* feat: Add RequireCanInteract

* feat: Remove essence

* fix: Review

* fuck

* fuck part 2

* Update Content.Shared/_CP14/MagicSpell/CP14SharedMagicSystem.DelayedActions.cs

* Update dimension.png

* minor nitpick

* fix

---------

Co-authored-by: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com>
Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com>
Co-authored-by: Ed <edwardxperia2000@gmail.com>
This commit is contained in:
Tornado Tech
2025-05-01 00:25:10 +10:00
committed by GitHub
parent b4ea0f69f5
commit ad2fc18356
36 changed files with 335 additions and 121 deletions

View File

@@ -36,6 +36,7 @@ public abstract partial class CP14SharedMagicSystem
BlockDuplicate = true,
BreakOnDropItem = fromItem,
NeedHand = fromItem,
RequireCanInteract = delayedEffect.RequireCanInteract,
};
if (_doAfter.TryStartDoAfter(doAfterEventArgs, out var doAfterId))
@@ -56,31 +57,30 @@ public abstract partial class CP14SharedMagicSystem
_action.CP14StartCustomDelay(action, TimeSpan.FromSeconds(cooldown.Value));
}
private void UseDelayedAction(ICP14DelayedMagicEffect delayedEffect, Entity<CP14MagicEffectComponent> action, DoAfterEvent doAfter, EntityUid performer, EntityUid? target = null, EntityCoordinates? worldTarget = null)
private bool UseDelayedAction(ICP14DelayedMagicEffect delayedEffect, Entity<CP14MagicEffectComponent> action, DoAfterEvent doAfter, EntityUid performer, EntityUid? target = null, EntityCoordinates? worldTarget = null)
{
if (!CanCastSpell(action, performer))
return;
// Event may return an empty entity with id = 0, which causes bugs
var currentTarget = target;
if (currentTarget is not null && currentTarget == EntityUid.Invalid)
currentTarget = null;
// event may return an empty entity with id = 0, which causes bugs
var _target = target;
if (_target is not null && _target.Value.Id == 0)
_target = null;
var spellArgs = new CP14SpellEffectBaseArgs(performer, action.Comp.SpellStorage, currentTarget, worldTarget);
if (!CanCastSpell(action, spellArgs))
return false;
if (_doAfter.IsRunning(action.Comp.ActiveDoAfter))
_doAfter.Cancel(action.Comp.ActiveDoAfter);
else
{
if (TryStartDelayedAction(delayedEffect, doAfter, action, _target, performer))
{
var evStart = new CP14StartCastMagicEffectEvent(performer);
RaiseLocalEvent(action, ref evStart);
var spellArgs =
new CP14SpellEffectBaseArgs(performer, action.Comp.SpellStorage, _target, worldTarget);
CastTelegraphy(action, spellArgs);
}
_doAfter.Cancel(action.Comp.ActiveDoAfter);
return false;
}
if (!TryStartDelayedAction(delayedEffect, doAfter, action, currentTarget, performer))
return false;
var evStart = new CP14StartCastMagicEffectEvent(performer);
RaiseLocalEvent(action, ref evStart);
CastTelegraphy(action, spellArgs);
return true;
}
/// <summary>
@@ -98,7 +98,9 @@ public abstract partial class CP14SharedMagicSystem
return;
var doAfter = new CP14DelayedInstantActionDoAfterEvent(args.Cooldown);
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Performer);
if (!UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Performer))
return;
args.Handled = true;
}
@@ -121,7 +123,9 @@ public abstract partial class CP14SharedMagicSystem
EntityManager.GetNetCoordinates(args.Coords),
EntityManager.GetNetEntity(args.Entity),
args.Cooldown);
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Entity, args.Coords);
if (!UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Entity, args.Coords))
return;
args.Handled = true;
}
@@ -141,7 +145,9 @@ public abstract partial class CP14SharedMagicSystem
return;
var doAfter = new CP14DelayedEntityTargetActionDoAfterEvent(EntityManager.GetNetEntity(args.Target), args.Cooldown);
UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Target);
if (!UseDelayedAction(delayedEffect, (args.Action, magicEffect), doAfter, args.Performer, args.Target))
return;
args.Handled = true;
}