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.
		
			
				
	
	
		
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*
 | |
| 1/2/21 by Stratovarius
 | |
| 
 | |
| Dragonfire Mask
 | |
| 
 | |
| Descriptors: Draconic, Fire
 | |
| Classes: Totemist
 | |
| Chakra: Brow, throat (totem)
 | |
| Saving Throw: See text
 | |
| 
 | |
| Chakra Bind (Totem)
 | |
| 
 | |
| The dragon head becomes a solid blue mask, forming a hollow shape that completely encloses your head at a distance. Fire still trails from its eyes and open mouth.
 | |
| 
 | |
| You can emanate an aura of frightful presence once per round as a swift action. All creatures within 10 feet with fewer Hit Dice than you become shaken for 1 round. 
 | |
| A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you 
 | |
| have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round. 
 | |
| */
 | |
| 
 | |
| #include "moi_inc_moifunc"
 | |
| 
 | |
| void main()
 | |
| {
 | |
| 	object oMeldshaper = OBJECT_SELF;
 | |
| 	if(!TakeSwiftAction(oMeldshaper)) return;
 | |
| 
 | |
|     // Do Frightful Presence
 | |
| 	effect eShaken   = SupernaturalEffect(EffectShaken());
 | |
| 	int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGONFIRE_MASK);
 | |
| 	
 | |
| 	float nDist     = 10.0 + (10.0 * nEssentia);
 | |
| 	float fRadius   = FeetToMeters(nDist);
 | |
| 	float fDuration = RoundsToSeconds(1+nEssentia);
 | |
| 
 | |
| 	int nPCHitDice   = GetHitDice(oMeldshaper);	
 | |
| 	int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_DRAGONFIRE_MASK);
 | |
| 	int nTargetHitDice;
 | |
| 	int bDoVFX = FALSE;
 | |
| 	
 | |
| 	// The object ID for enforcing the 24h rule
 | |
| 	string sPCOid = ObjectToString(oMeldshaper);
 | |
| 	
 | |
| 	// Loop over creatures in range
 | |
| 	location lTarget = GetLocation(oMeldshaper);
 | |
| 	object oTarget   = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
 | |
| 	while (GetIsObjectValid(oTarget))
 | |
| 	{
 | |
| 	    // Target validity check
 | |
| 	    if(oTarget != oMeldshaper                                     && // Can't affect self
 | |
| 	       !GetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid)   && // Hasn't saved successfully against this samurai's Frightful Presence in the last 24h
 | |
| 	       spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper) && // Only hostiles
 | |
| 	       nPCHitDice > GetHitDice(oTarget)) // Must have greater hit dice to affect the creature
 | |
| 	    {
 | |
| 	        // Set the marker that tells we tried to affect someone
 | |
| 	        bDoVFX = TRUE;
 | |
| 	
 | |
| 	        // Let the target know something hostile happened
 | |
| 	        SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, -1, TRUE));
 | |
| 	
 | |
| 	        // Will save
 | |
| 	        if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oMeldshaper) &&
 | |
| 	           !GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR, oMeldshaper))  // Explicit immunity check, because of the fucking stupid BW immunity handling
 | |
| 	        {
 | |
| 	            ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShaken, oTarget, fDuration);
 | |
| 	        }
 | |
| 	        // Successfull save, set marker and queue marker deletion
 | |
| 	        else
 | |
| 	        {
 | |
| 	            SetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid, TRUE);
 | |
| 	
 | |
| 	            // Add variable deletion to the target's queue. That way, if the samurai logs out, it will still get cleared
 | |
| 	            AssignCommand(oTarget, DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid)));
 | |
| 	        }
 | |
| 	    }// end if - Target validity check
 | |
| 	
 | |
| 	    // Get next target in area
 | |
| 	    oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
 | |
| 	}// end while - Loop over creatures in 30ft area
 | |
| 
 | |
| 	// If we tried to affect someone, do war cry VFX
 | |
| 	if(bDoVFX)
 | |
| 	    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(GetGender(oMeldshaper) == GENDER_FEMALE ? VFX_FNF_HOWL_WAR_CRY_FEMALE : VFX_FNF_HOWL_WAR_CRY), oMeldshaper);
 | |
| }
 | |
| 
 | |
| 
 |