PRC8/nwn/nwnprc/trunk/newspellbook/moi_mld_drgnfrtm.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

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);
}