It was actually supposed to be changed to function as exp retreat but it fell through the cracks during an admin change. However, I feel that this change would not be suitable since an exp retreat invocation actually exists in D&D as a least invocation while flee the scene is a lesser invocation.
I hunted around and found a script that implements it pretty closely to how it is in D&D. I think this (or a tweaked version of it) is a better solution than leaving it as-is or nerfing it into the ground. I have taken it out of this package of warlock changes.
Text From Complete Arcane (p. 134)
Explanation Of The Script MechanicsFlee The Scene
Lesser; 4th
You can dimension door as a spell-like ability, although the range is limited to short (25ft + 5ft/2 levels). When you use this ability, you leave behind a major image of yourself in your place that lasts 1 round. The image racts appropiately to attacks as if you were concentrating on it.
ScriptFlee the Scene: You turn ethereal for 1 round, gain the effects of Expeditious Retreat for 1 round per caster level, and instantly teleport to the visible location of your choice within 250'. Meanwhile, an exact likeness of yourself (a decoy) is left in the spot you were just in. The decoy will stand in place for 1 round, after which it will completely vanish. The decoy cannot be destroyed by attacks.
Code: Select all
//:://///////////////////////////////////////////////
//:: Warlock Lesser Invocation: Flee the Scene
//:: nw_s0_ifleescen.nss
//::////////////////////////////////////////////////
//:: Created By: Dubby
//:: Created On: 02/12/08
//::////////////////////////////////////////////////
#include "nwn2_inc_spells"
#include "NW_I0_SPELLS"
#include "x2_inc_spellhook"
void main()
{
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// 1
object oCaster = OBJECT_SELF;
int nCasterLevel = GetCasterLevel(oCaster);
location lTargetLoc = GetSpellTargetLocation();
location lCasterLoc = GetLocation(oCaster);
float fDuration = RoundsToSeconds(nCasterLevel);
// 2
effect eEthereal = EffectLinkEffects(EffectEthereal(), EffectVisualEffect( VFX_DUR_SPELL_ETHEREALNESS ));
effect eSpeedUp = EffectLinkEffects(EffectMovementSpeedIncrease(50), EffectVisualEffect( VFX_DUR_SPELL_EXPEDITIOUS_RETREAT ));
effect eImmobile = EffectCutsceneParalyze();
eImmobile = ExtraordinaryEffect(eImmobile);
// 5
RemoveEffectsFromSpell(oCaster, 1643);
SignalEvent(oCaster, EventSpellCastAt(OBJECT_SELF, 1643, FALSE));
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_HIT_AOE_SONIC), lCasterLoc);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEthereal, oCaster, 6.0f);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeedUp, oCaster, fDuration);
AssignCommand(oCaster, ActionJumpToLocation(lTargetLoc));
if ( GetIsInCombat(oCaster) )
{
string sTag = "Decoy_"+ObjectToString(oCaster);
CopyObject(oCaster, lCasterLoc, OBJECT_INVALID, sTag);
object oDecoy = GetObjectByTag(sTag);
ChangeToStandardFaction(oDecoy, STANDARD_FACTION_DEFENDER);
AssignCommand(oDecoy, ActionWait(6.1f));
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eImmobile, oDecoy);
SetImmortal(oDecoy, TRUE);
AssignCommand(oDecoy, SetIsDestroyable(TRUE, FALSE, FALSE));
DelayCommand(6.0f, DestroyObject(oDecoy));
}
ClearAllActions(TRUE);
}