Further file organization
Further file organization
This commit is contained in:
79
nwn/nwnprc/trunk/epicspellscripts/ss_ep_planarcell.nss
Normal file
79
nwn/nwnprc/trunk/epicspellscripts/ss_ep_planarcell.nss
Normal file
@@ -0,0 +1,79 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: FileName: "ss_ep_planarcell"
|
||||
/* Purpose: Planar Cell - You must cast this spell on the ground somewhere to
|
||||
assign a "Cell" location. Then you can cast it on creatures to teleport
|
||||
them to the cell, even across the planes.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Boneshank
|
||||
//:: Last Updated On:
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_alterations"
|
||||
|
||||
#include "inc_epicspells"
|
||||
void main()
|
||||
{
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
|
||||
|
||||
if (!X2PreSpellCastCode())
|
||||
{
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
return;
|
||||
}
|
||||
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_PLANCEL))
|
||||
{
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
location lCell;
|
||||
effect eVis1 = EffectVisualEffect(VFX_FNF_IMPLOSION);
|
||||
effect eVis2 = EffectVisualEffect(VFX_FNF_SUMMON_GATE);
|
||||
// If there is a cell location, and the target is a valid creature.
|
||||
if (GetLocalInt(OBJECT_SELF, "nHasPlanarCell") == TRUE &&
|
||||
oTarget != OBJECT_INVALID &&
|
||||
oTarget != OBJECT_SELF &&
|
||||
!GetIsDM(oTarget))
|
||||
{
|
||||
lCell = GetLocalLocation(OBJECT_SELF, "lPlanarCell");
|
||||
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF)))
|
||||
{
|
||||
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)))
|
||||
{
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis1, lTarget);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis2, lTarget);
|
||||
DelayCommand(1.0,
|
||||
AssignCommand(oTarget, JumpToLocation(lCell)));
|
||||
DelayCommand(1.0,
|
||||
AssignCommand(oTarget, ActionDoCommand(ClearAllActions(TRUE))));
|
||||
DelayCommand(1.0,
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis1, lCell));
|
||||
DelayCommand(1.0,
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis2, lCell));
|
||||
}
|
||||
}
|
||||
}
|
||||
// If no cell location known, or the target is not a creature,
|
||||
// assign the target location as the cell.
|
||||
if (GetLocalInt(OBJECT_SELF, "nHasPlanarCell") != TRUE &&
|
||||
oTarget == OBJECT_INVALID)
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF, "nHasPlanarCell", TRUE);
|
||||
SetLocalLocation(OBJECT_SELF, "lPlanarCell", lTarget);
|
||||
SendMessageToPC(OBJECT_SELF, "The planar cell is prepared.");
|
||||
SendMessageToPC(OBJECT_SELF,
|
||||
"You can now teleport creatures to the cell's location.");
|
||||
}
|
||||
// If the target is yourself, delete the planar cell's location.
|
||||
if (GetLocalInt(OBJECT_SELF, "nHasPlanarCell") == TRUE &&
|
||||
oTarget == OBJECT_SELF)
|
||||
{
|
||||
SetLocalInt(OBJECT_SELF, "nHasPlanarCell", FALSE);
|
||||
DeleteLocalLocation(OBJECT_SELF, "lPlanarCell");
|
||||
SendMessageToPC(OBJECT_SELF,
|
||||
"The planar cell's location is lost.");
|
||||
SendMessageToPC(OBJECT_SELF,
|
||||
"You must prepare a new cell to teleport creatures to.");
|
||||
}
|
||||
}
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
}
|
Reference in New Issue
Block a user