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.
		
			
				
	
	
		
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //::///////////////////////////////////////////////
 | |
| //:: Trapfinder - active search mode
 | |
| //:: prc_trapfind_act.nss
 | |
| //::///////////////////////////////////////////////
 | |
| /*
 | |
|     One of the hard-coded NWN 'features' is that
 | |
|     only rouges can detect traps with detect
 | |
|     DC > 35. This may be OK for standard NWN, but
 | |
|     we have some cool classes that would benefit
 | |
|     from trapfinder feat. That's why I wrote this
 | |
|     small script.
 | |
| 
 | |
|     This system is quite simple - it complements
 | |
|     standard detect mode (so it will only detect
 | |
|     traps with detect DC > 35).
 | |
|     Basically there are two invisible area of
 | |
|     effect objects that check for presence of traps
 | |
|     in the area. Then if trap can be detected and
 | |
|     has DC > 35 this script will make a search
 | |
|     skill roll to check if oPC can detect the trap.
 | |
|     If check was succesful the trap is marked as
 | |
|     detected.
 | |
| 
 | |
|     The AoE objects are applied by PC's skin in
 | |
|     prc_feats.nss - one for each detect mode.
 | |
|     In passive detect mode search checks are made
 | |
|     every round in 15 ft radius.
 | |
|     In active detect mode search checks are made
 | |
|     twice per round in 25 ft radius.
 | |
| 
 | |
|     X
 | |
| */
 | |
| //:://////////////////////////////////////////////
 | |
| //:://////////////////////////////////////////////
 | |
| 
 | |
| void DoDetectCheck(object oPC, object oTrap);
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     object oPC = GetItemPossessor(GetAreaOfEffectCreator());
 | |
| 
 | |
|     if(GetDetectMode(oPC) != DETECT_MODE_ACTIVE)
 | |
|         return;
 | |
| 
 | |
|     object oTest = GetFirstInPersistentObject(OBJECT_SELF, OBJECT_TYPE_TRIGGER | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
 | |
|     while(GetIsObjectValid(oTest))
 | |
|     {
 | |
|         if(GetTrapDetectable(oTest) && !GetTrapDetectedBy(oTest, oPC))
 | |
|         {
 | |
|             DoDetectCheck(oPC, oTest);
 | |
|             DelayCommand(3.0f, DoDetectCheck(oPC, oTest));
 | |
|         }
 | |
|         oTest = GetNextInPersistentObject(OBJECT_SELF, OBJECT_TYPE_TRIGGER | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
 | |
|     }
 | |
| }
 | |
| 
 | |
| void DoDetectCheck(object oPC, object oTrap)
 | |
| {
 | |
|     int nDC = GetTrapDetectDC(oTrap);
 | |
|     if(nDC > 35)
 | |
|     {
 | |
|         if((d20() + GetSkillRank(SKILL_SEARCH, oPC)) >= nDC)
 | |
|             SetTrapDetectedBy(oTrap, oPC);
 | |
|     }
 | |
| } |