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.
		
			
				
	
	
		
			71 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //::///////////////////////////////////////////////
 | |
| //:: Name      Chilling Tentacles - OnHeartbeat
 | |
| //:: FileName  inv_chilltentc.nss
 | |
| //::///////////////////////////////////////////////
 | |
| 
 | |
| //#include "prc_inc_spells"
 | |
| //#include "prc_alterations"
 | |
| #include "prc_inc_combmove"
 | |
| #include "inv_inc_invfunc"
 | |
| 
 | |
| void DecrementTentacleCount(object oTarget, string sVar)
 | |
| {
 | |
|     SetLocalInt(oTarget, sVar, GetLocalInt(oTarget, sVar) - 1);
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     object oCaster = GetAreaOfEffectCreator();
 | |
|     int nInvokerLevel = GetInvokerLevel(oCaster, CLASS_TYPE_WARLOCK);
 | |
|     int nPenetr = SPGetPenetrAOE(oCaster, nInvokerLevel);
 | |
|     object oTarget = GetFirstInPersistentObject();
 | |
|     while(GetIsObjectValid(oTarget))
 | |
|     {
 | |
|         if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE , oCaster)
 | |
|             && !GetCreatureFlag(oTarget, CREATURE_VAR_IS_INCORPOREAL)
 | |
|             && oTarget != oCaster)
 | |
|         {
 | |
|             //Fire cast spell at event for the target
 | |
|             SignalEvent(oTarget, EventSpellCastAt(oCaster, INVOKE_CHILLING_TENTACLES));
 | |
| 
 | |
|             if(!PRCDoResistSpell(oCaster, oTarget, nPenetr))
 | |
|             {
 | |
|                 //apply cold damage - always happens
 | |
|                 effect eColdDamage = EffectDamage(d6(2), DAMAGE_TYPE_COLD);
 | |
|                 eColdDamage = EffectLinkEffects(eColdDamage, EffectVisualEffect(VFX_IMP_FROST_S));
 | |
|                 SPApplyEffectToObject(DURATION_TYPE_INSTANT, eColdDamage, oTarget);
 | |
|             }
 | |
| 
 | |
|             //now do grappling and stuff
 | |
|             int nGrappleSucessful = FALSE;
 | |
|             //this spell doesnt need to make a touch attack
 | |
|             //as defined in the spell
 | |
|             int nAttackerGrappleMod = nInvokerLevel+4+4;
 | |
|             nGrappleSucessful = _DoGrappleCheck(OBJECT_INVALID, oTarget, nAttackerGrappleMod);
 | |
|             if(nGrappleSucessful)
 | |
|             {
 | |
|                 //if already being grappled, apply damage
 | |
|                 if(GetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF)))
 | |
|                 {
 | |
|                     //apply the damage
 | |
|                     int nDamage = d6();
 | |
|                     nDamage += 4;
 | |
|                     effect eDam = PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_BLUDGEONING, DAMAGE_POWER_NORMAL);
 | |
|                     SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
 | |
|                 }
 | |
|                 //now being grappled
 | |
|                 AssignCommand(oTarget, ClearAllActions());
 | |
|                 effect eHold = EffectCutsceneImmobilize();
 | |
|                 effect eEntangle = EffectVisualEffect(VFX_DUR_SPELLTURNING_R);
 | |
|                 effect eLink = EffectLinkEffects(eHold, eEntangle);
 | |
|                 //eLink = EffectKnockdown();
 | |
|                 SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, 6.0);
 | |
|                 SetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF),
 | |
|                     GetLocalInt(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF))+1);
 | |
|                 DelayCommand(6.1, DecrementTentacleCount(oTarget, "GrappledBy_"+ObjectToString(OBJECT_SELF)));
 | |
|             }
 | |
|         }
 | |
|         oTarget = GetNextInPersistentObject();
 | |
|     }
 | |
| }
 |