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.
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //::///////////////////////////////////////////////
 | |
| //:: Bestow Curse
 | |
| //:: Greater Bestow Curse
 | |
| //:: nw_s0_bescurse.nss
 | |
| //::///////////////////////////////////////////////
 | |
| /*
 | |
| Bestow Curse
 | |
| Necromancy
 | |
| Level:            Clr 3, Sor/Wiz 4
 | |
| Components:       V, S
 | |
| Casting Time:     1 standard action
 | |
| Range:            Touch
 | |
| Target:           Creature touched
 | |
| Duration:         Permanent
 | |
| Saving Throw:     Will negates
 | |
| Spell Resistance: Yes
 | |
| 
 | |
| You place a curse on the subject. Choose one of the
 | |
| following three effects:
 | |
| -6 decrease to an ability score (minimum 1).
 | |
| -4 penalty on attack rolls, saves, ability checks,
 | |
| and skill checks.
 | |
| Each turn, the target has a 50% chance to act
 | |
| normally; otherwise, it takes no action.
 | |
| 
 | |
| You may also invent your own curse, but it should
 | |
| be no more powerful than those described above.
 | |
| 
 | |
| The curse bestowed by this spell cannot be dispelled,
 | |
| but it can be removed with a break enchantment,
 | |
| limited wish, miracle, remove curse, or wish spell.
 | |
| 
 | |
| Bestow curse counters remove curse.
 | |
| 
 | |
| Greater Bestow Curse
 | |
| ???
 | |
| */
 | |
| //:://////////////////////////////////////////////
 | |
| //:: NWN version:
 | |
| //:: Afflicted creature must save or suffer a -2 penalty
 | |
| //:: to all ability scores. This is a supernatural effect.
 | |
| //:://////////////////////////////////////////////
 | |
| //:: By: Bob McCabe
 | |
| //:: Created: March 6, 2001
 | |
| //:: Modified: Jun 12, 2006
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Flaming_Sword: Added touch attack roll
 | |
| //:://////////////////////////////////////////////
 | |
| 
 | |
| #include "prc_inc_sp_tch"
 | |
| #include "prc_sp_func"
 | |
| #include "prc_add_spell_dc"
 | |
| 
 | |
| int DoSpell(object oCaster, object oTarget, int nCasterLevel)
 | |
| {
 | |
|     int nSpellID = PRCGetSpellId();
 | |
|     int iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
 | |
|     if (iAttackRoll > 0)
 | |
|     {
 | |
|         int nPenetr = nCasterLevel + SPGetPenetr();
 | |
|         int nPenalty = nSpellID == SPELL_GREATER_BESTOW_CURSE ? 4 : 2;
 | |
|             nPenalty *= iAttackRoll;//can score a *Critical Hit*
 | |
| 
 | |
|         effect eVis   = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
 | |
|         effect eCurse = EffectCurse(nPenalty, //str
 | |
|                                     nPenalty, //dex
 | |
|                                     nPenalty, //con
 | |
|                                     nPenalty, //int
 | |
|                                     nPenalty, //wis
 | |
|                                     nPenalty);//cha
 | |
|         //Make sure that curse is of type supernatural not magical
 | |
|                eCurse = SupernaturalEffect(eCurse);
 | |
| 
 | |
|         //Signal spell cast at event
 | |
|         SignalEvent(oTarget, EventSpellCastAt(oTarget, nSpellID));
 | |
| 
 | |
|          //Make SR Check
 | |
|         if (!PRCDoResistSpell(oCaster, oTarget, nPenetr))
 | |
|         {
 | |
|             //Make Will Save
 | |
|             if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, oCaster)))
 | |
|             {
 | |
|                 //Apply Effect and VFX
 | |
|                 SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eCurse, oTarget, 0.0f, TRUE, nSpellID, nCasterLevel);
 | |
|                 SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     return iAttackRoll;    //return TRUE if spell charges should be decremented
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if (!X2PreSpellCastCode()) return;
 | |
|     PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
 | |
|     object oCaster = OBJECT_SELF;
 | |
|     object oTarget = PRCGetSpellTargetObject();
 | |
|     int nCasterLevel = PRCGetCasterLevel(oCaster);
 | |
|     int nEvent = GetLocalInt(oCaster, PRC_SPELL_EVENT); //use bitwise & to extract flags
 | |
|     if(!nEvent) //normal cast
 | |
|     {
 | |
|         if(GetLocalInt(oCaster, PRC_SPELL_HOLD) && oCaster == oTarget)
 | |
|         {   //holding the charge, casting spell on self
 | |
|             SetLocalSpellVariables(oCaster, 1);   //change 1 to number of charges
 | |
|             return;
 | |
|         }
 | |
|         DoSpell(oCaster, oTarget, nCasterLevel);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         if(nEvent & PRC_SPELL_EVENT_ATTACK)
 | |
|         {
 | |
|             if(DoSpell(oCaster, oTarget, nCasterLevel))
 | |
|                 DecrementSpellCharges(oCaster);
 | |
|         }
 | |
|     }
 | |
|     PRCSetSchool();
 | |
| } |