private void CheckForSpellInterruption(NWPlayer pc, string spellUUID, Vector position) { if (pc.GetLocalInt(spellUUID) == (int)SpellStatusType.Completed) { return; } Vector currentPosition = pc.Position; if (currentPosition.m_X != position.m_X || currentPosition.m_Y != position.m_Y || currentPosition.m_Z != position.m_Z) { var effect = pc.Effects.SingleOrDefault(x => _.GetEffectTag(x) == "ACTIVATION_VFX"); if (effect != null) { _.RemoveEffect(pc, effect); } _nwnxPlayer.StopGuiTimingBar(pc, "", -1); pc.IsBusy = false; pc.SetLocalInt(spellUUID, (int)SpellStatusType.Interrupted); pc.SendMessage("Your ability has been interrupted."); return; } _.DelayCommand(0.5f, () => { CheckForSpellInterruption(pc, spellUUID, position); }); }
private void CheckForSpellInterruption(NWPlayer pc, string spellUUID, Vector position) { Vector currentPosition = pc.Position; if (currentPosition.m_X != position.m_X || currentPosition.m_Y != position.m_Y || currentPosition.m_Z != position.m_Z) { _nwnxPlayer.StopGuiTimingBar(pc, "", -1); pc.IsBusy = false; pc.SetLocalInt(spellUUID, SPELL_STATUS_INTERRUPTED); return; } pc.DelayCommand(() => CheckForSpellInterruption(pc, spellUUID, position), 1.0f); }