Wizard Mind Swap Spell (#33416)
* working mind swap spell * Removing unncessary spacing Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> * Changing mind swap speech Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com> * All requested changes in review * Stores owned by mind instead of body * Requested changes, traitor uplink fixed * Revert "Requested changes, traitor uplink fixed" This reverts commit 2ceac6733d6a28890f60d2ccef3dafa160a702fd. * Revert "Stores owned by mind instead of body" This reverts commit dfb72ab70ed66db50312617f2dce02d0a4e4dfce. * Separate target and performer stun duration --------- Co-authored-by: Thomas <87614336+Aeshus@users.noreply.github.com> Co-authored-by: keronshb <54602815+keronshb@users.noreply.github.com>
This commit is contained in:
@@ -22,6 +22,7 @@ using Content.Shared.Physics;
|
||||
using Content.Shared.Popups;
|
||||
using Content.Shared.Speech.Muting;
|
||||
using Content.Shared.Storage;
|
||||
using Content.Shared.Stunnable;
|
||||
using Content.Shared.Tag;
|
||||
using Content.Shared.Weapons.Ranged.Components;
|
||||
using Content.Shared.Weapons.Ranged.Systems;
|
||||
@@ -62,6 +63,7 @@ public abstract class SharedMagicSystem : EntitySystem
|
||||
[Dependency] private readonly MobStateSystem _mobState = default!;
|
||||
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||
[Dependency] private readonly SharedMindSystem _mind = default!;
|
||||
[Dependency] private readonly SharedStunSystem _stun = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
@@ -77,6 +79,7 @@ public abstract class SharedMagicSystem : EntitySystem
|
||||
SubscribeLocalEvent<KnockSpellEvent>(OnKnockSpell);
|
||||
SubscribeLocalEvent<ChargeSpellEvent>(OnChargeSpell);
|
||||
SubscribeLocalEvent<RandomGlobalSpawnSpellEvent>(OnRandomGlobalSpawnSpell);
|
||||
SubscribeLocalEvent<MindSwapSpellEvent>(OnMindSwapSpell);
|
||||
|
||||
// Spell wishlist
|
||||
// A wishlish of spells that I'd like to implement or planning on implementing in a future PR
|
||||
@@ -542,6 +545,37 @@ public abstract class SharedMagicSystem : EntitySystem
|
||||
_audio.PlayGlobal(ev.Sound, ev.Performer);
|
||||
}
|
||||
|
||||
#endregion
|
||||
#region Mindswap Spells
|
||||
|
||||
private void OnMindSwapSpell(MindSwapSpellEvent ev)
|
||||
{
|
||||
if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer))
|
||||
return;
|
||||
|
||||
ev.Handled = true;
|
||||
Speak(ev);
|
||||
|
||||
// Need performer mind, but target mind is unnecessary, such as taking over a NPC
|
||||
// Need to get target mind before putting performer mind into their body if they have one
|
||||
// Thus, assign bool before first transfer, then check afterwards
|
||||
|
||||
if (!_mind.TryGetMind(ev.Performer, out var perMind, out var perMindComp))
|
||||
return;
|
||||
|
||||
var tarHasMind = _mind.TryGetMind(ev.Target, out var tarMind, out var tarMindComp);
|
||||
|
||||
_mind.TransferTo(perMind, ev.Target);
|
||||
|
||||
if (tarHasMind)
|
||||
{
|
||||
_mind.TransferTo(tarMind, ev.Performer);
|
||||
}
|
||||
|
||||
_stun.TryParalyze(ev.Target, ev.TargetStunDuration, true);
|
||||
_stun.TryParalyze(ev.Performer, ev.PerformerStunDuration, true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
// End Spells
|
||||
#endregion
|
||||
|
||||
Reference in New Issue
Block a user