Further file organization
Further file organization
This commit is contained in:
80
nwn/nwnprc/trunk/smp/phs_s_knock.nss
Normal file
80
nwn/nwnprc/trunk/smp/phs_s_knock.nss
Normal file
@@ -0,0 +1,80 @@
|
||||
/*:://////////////////////////////////////////////
|
||||
//:: Spell Name Knock
|
||||
//:: Spell FileName PHS_S_Knock
|
||||
//:://////////////////////////////////////////////
|
||||
//:: In Game Spell desctiption
|
||||
//:://////////////////////////////////////////////
|
||||
Knock
|
||||
Transmutation
|
||||
Level: Sor/Wiz 2
|
||||
Components: V
|
||||
Casting Time: 1 standard action
|
||||
Range: Medium (20M)
|
||||
Target: One door, box, or chest with an area of up to 3.33 sq. M./level
|
||||
Duration: Instantaneous; see text
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
The knock spell opens stuck, barred, locked, held, or arcane locked doors.
|
||||
It opens secret doors, as well as locked boxes or chests. It also loosens
|
||||
welds, shackles, or chains (provided they serve to hold closures shut). If
|
||||
used to open a arcane locked door, the spell does not remove the arcane
|
||||
lock but simply suspends its functioning for 10 minutes. In all other cases,
|
||||
the door does not relock itself or become stuck again on its own. Knock does
|
||||
not raise barred gates or similar impediments (such as a portcullis), nor
|
||||
does it affect ropes, vines, and the like. The effect is limited by the area.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Spell Effects Applied / Notes
|
||||
//:://////////////////////////////////////////////
|
||||
As the spell, mainly.
|
||||
|
||||
I need to sort out doors - maybe add OnUnlocked events to make sure that
|
||||
Arcane Locked doors stay shut, for instance.
|
||||
|
||||
It is easy to get a resref from the target door and check to see if it is
|
||||
a proper door.
|
||||
|
||||
Maybe tag support and changed default blueprints for all placeables and doors
|
||||
for "knockable" and so on things...not sure...
|
||||
|
||||
Anyway, the UMD check and declarations is here...
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Jasperre
|
||||
//::////////////////////////////////////////////*/
|
||||
|
||||
#include "PHS_INC_SPELLS"
|
||||
|
||||
void main()
|
||||
{
|
||||
// Spell Hook Check.
|
||||
if(!PHS_SpellHookCheck(PHS_SPELL_KNOCK)) return;
|
||||
|
||||
// Delcare Major Variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = GetSpellTargetObject();
|
||||
// Limit to 10 sq ft of door/level
|
||||
int nCasterLevel = PHS_GetCasterLevel();
|
||||
float fDelay = GetDistanceToObject(oTarget)/20;
|
||||
|
||||
// Make sure they are not immune to spells
|
||||
if(PHS_TotalSpellImmunity(oTarget)) return;
|
||||
|
||||
// Declare effects
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_KNOCK);
|
||||
|
||||
// Signal spell cast at event.
|
||||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_KNOCK);
|
||||
|
||||
// If the target is locked, unlock it
|
||||
// - No plot doors/placeables
|
||||
// - If it needs a key, and the key needed is "", IE cannot ever be opened, then
|
||||
// ignore
|
||||
// - Ignore DC's of 100 or over
|
||||
if(GetLocked(oTarget) && !GetPlotFlag(oTarget) && GetLockLockDC(oTarget) < 100 &&
|
||||
(!GetLockKeyRequired(oTarget) || (GetLockKeyRequired(oTarget) && GetLockKeyTag(oTarget) != "")))
|
||||
{
|
||||
// Delay unlocking.
|
||||
DelayCommand(fDelay, PHS_ApplyVFX(oTarget, eVis));
|
||||
DelayCommand(fDelay, SetLocked(oTarget, FALSE));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user