Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
		
			
				
	
	
		
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*:://////////////////////////////////////////////
 | 
						|
//:: 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));
 | 
						|
    }
 | 
						|
}
 |