Further file organization
Further file organization
This commit is contained in:
119
nwn/nwnprc/trunk/smp/xxx_s_familiartr.nss
Normal file
119
nwn/nwnprc/trunk/smp/xxx_s_familiartr.nss
Normal file
@@ -0,0 +1,119 @@
|
||||
/*:://////////////////////////////////////////////
|
||||
//:: Spell Name Familiar Transposition
|
||||
//:: Spell FileName XXX_S_FamiliarTr
|
||||
//:://////////////////////////////////////////////
|
||||
//:: In Game Spell desctiption
|
||||
//:://////////////////////////////////////////////
|
||||
Transmutation [Teleportation]
|
||||
Level: Sor/Wiz 4
|
||||
Components: V
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Duration: Instantaneous
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
Source: Various (Fordan)
|
||||
|
||||
This spell instantly transposes the caster and all gear and items he carries
|
||||
with his familiar.
|
||||
|
||||
In order for the spell to succeed, the familiar must be within range of the
|
||||
empathic link, i.e. in the same area, and actually summoned. The spell does
|
||||
not work if the familiar is dead, unconscious, cannot move or under a
|
||||
mind-affecting spell or effect.
|
||||
|
||||
M: A piece of glass with the name of the familiar etched on it.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Spell Effects Applied / Notes
|
||||
//:://////////////////////////////////////////////
|
||||
Oh, sure, you can abuse it by unsummoning your familar, but oh well...
|
||||
|
||||
Still, not too bad, and easily scripted.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Jasperre
|
||||
//::////////////////////////////////////////////*/
|
||||
|
||||
#include "SMP_INC_SPELLS"
|
||||
|
||||
// Check familiar
|
||||
int CheckFamiliar(object oFamiliar);
|
||||
|
||||
// Jump to lTarget, using OBJECT_SELF as the person, and doing a VFX.
|
||||
void DoJump(location lTarget);
|
||||
|
||||
void main()
|
||||
{
|
||||
// Spell Hook Check.
|
||||
if(!SMP_SpellHookCheck(SMP_SPELL_FAMILIAR_TRANSPOSITION)) return;
|
||||
|
||||
// Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oFamiliar = GetAssociate(ASSOCIATE_TYPE_FAMILIAR, oCaster);
|
||||
location lTarget = GetLocation(oFamiliar);
|
||||
location lCaster = GetLocation(oCaster);
|
||||
|
||||
// Declare effects
|
||||
effect eDissappear = EffectVisualEffect(VFX_FNF_TELEPORT_OUT);
|
||||
|
||||
// Make sure we can teleport
|
||||
if(!SMP_CannotTeleport(oCaster, lTarget) &&
|
||||
!SMP_CannotTeleport(oFamiliar, lCaster))
|
||||
{
|
||||
// Must be able to move
|
||||
// Check the familiar
|
||||
if(CheckFamiliar(oFamiliar))
|
||||
{
|
||||
// Jump to the target location with visual effects
|
||||
SMP_ApplyLocationVFX(lCaster, eDissappear);
|
||||
SMP_ApplyLocationVFX(lTarget, eDissappear);
|
||||
|
||||
// Move each object to the other place
|
||||
|
||||
// Jump and effects
|
||||
DelayCommand(1.0, AssignCommand(oCaster, DoJump(lTarget)));
|
||||
DelayCommand(1.0, AssignCommand(oFamiliar, DoJump(lCaster)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check familiar
|
||||
int CheckFamiliar(object oFamiliar)
|
||||
{
|
||||
effect eCheck = GetFirstEffect(oFamiliar);
|
||||
while(GetIsEffectValid(eCheck))
|
||||
{
|
||||
switch(GetEffectType(eCheck))
|
||||
{
|
||||
case EFFECT_TYPE_CHARMED:
|
||||
case EFFECT_TYPE_CONFUSED:
|
||||
case EFFECT_TYPE_DAZED:
|
||||
case EFFECT_TYPE_DOMINATED:
|
||||
case EFFECT_TYPE_ENTANGLE:
|
||||
case EFFECT_TYPE_FRIGHTENED:
|
||||
case EFFECT_TYPE_PARALYZE:
|
||||
case EFFECT_TYPE_PETRIFY:
|
||||
case EFFECT_TYPE_SLEEP:
|
||||
case EFFECT_TYPE_STUNNED:
|
||||
case EFFECT_TYPE_TURNED:
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Get next effect
|
||||
eCheck = GetNextEffect(oFamiliar);
|
||||
}
|
||||
if(!GetCommandable(oFamiliar))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
// TRUE if they can move
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// Jump to lTarget, using OBJECT_SELF as the person, and doing a VFX.
|
||||
void DoJump(location lTarget)
|
||||
{
|
||||
JumpToLocation(lTarget);
|
||||
SMP_ApplyLocationVFX(lTarget, EffectVisualEffect(VFX_FNF_TELEPORT_IN));
|
||||
}
|
Reference in New Issue
Block a user