forked from Jaysyn/PRC8
91 lines
3.1 KiB
Plaintext
91 lines
3.1 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
|||
|
//:: Spell Name Open/Close
|
|||
|
//:: Spell FileName PHS_S_OpenClose
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: In Game Spell desctiption
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
Range: Close (8M)
|
|||
|
Target: Door or portal weighing up to 30 lb. that can be opened/closed
|
|||
|
Duration: Instantaneous
|
|||
|
Saving Throw: Will negates (object)
|
|||
|
Spell Resistance: Yes (object)
|
|||
|
|
|||
|
You can open or close (depending if it is already open or close) a door. If
|
|||
|
anything resists this activity (such as a bar or a lock), the spell fails.
|
|||
|
In addition, the spell can only open and close things weighing 30 pounds or
|
|||
|
less. Thus, doors sized for enormous creatures may be beyond this spell<6C>s
|
|||
|
ability to affect.
|
|||
|
|
|||
|
Note: In NwN, this spell can only affect doors set to be able to be affected.
|
|||
|
By default, this will fail. A will save also negates this spell.
|
|||
|
|
|||
|
Focus: A brass key.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Spell Effects Applied / Notes
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
This requires the object to:
|
|||
|
|
|||
|
- Be a door (placables cannot be opened from afar, its hardcoded)
|
|||
|
- Not be plot
|
|||
|
- Not be locked
|
|||
|
- Have the variable "Can be Opened or Closed" set, so that big
|
|||
|
doors/immune things are accounted for.
|
|||
|
|
|||
|
Does do a spell resistance and will save check.
|
|||
|
|
|||
|
And just AssignCommand(Open) on it :-)
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Created By: Jasperre
|
|||
|
//::////////////////////////////////////////////*/
|
|||
|
|
|||
|
#include "PHS_INC_SPELLS"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
// Spell hook check.
|
|||
|
if(!PHS_SpellHookCheck(PHS_SPELL_OPEN_CLOSE)) return;
|
|||
|
|
|||
|
// Declare major variables
|
|||
|
object oCaster = OBJECT_SELF;
|
|||
|
object oTarget = GetSpellTargetObject();
|
|||
|
int nObjectType = GetObjectType(oTarget);
|
|||
|
int nSpellSaveDC = PHS_GetSpellSaveDC();
|
|||
|
// Variables for the checks
|
|||
|
int bLock = GetLocked(oTarget);
|
|||
|
int bPlot = GetPlotFlag(oTarget);
|
|||
|
|
|||
|
// Declare effects
|
|||
|
effect eVis = EffectVisualEffect(SPELL_KNOCK);
|
|||
|
|
|||
|
// Checks
|
|||
|
if(nObjectType == OBJECT_TYPE_DOOR)
|
|||
|
{
|
|||
|
// Second checks
|
|||
|
if(bLock == FALSE && bPlot == FALSE &&
|
|||
|
GetLocalInt(oTarget, PHS_CONST_CAN_BE_MAGICALLY_OPENED) == TRUE)
|
|||
|
{
|
|||
|
// Check spell immunity (you never know what effects these things
|
|||
|
// might have...)
|
|||
|
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
|
|||
|
{
|
|||
|
// Will save - Placeables can have will saves, of course.
|
|||
|
if(!PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC))
|
|||
|
{
|
|||
|
// Effects and assign command - open or close
|
|||
|
PHS_ApplyVFX(oTarget, eVis);
|
|||
|
|
|||
|
// Open or close it!
|
|||
|
if(GetIsOpen(oTarget))
|
|||
|
{
|
|||
|
AssignCommand(oTarget, ActionCloseDoor(oTarget));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
AssignCommand(oTarget, ActionOpenDoor(oTarget));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|