PRC8/nwn/nwnprc/trunk/newspellbook/bnd_vest_hagtch.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

84 lines
3.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
1/03/21 by Stratovarius
Haagenti, Mother of Minotaurs
Haagenti tricked the god of frost giants and paid a terrible price for that deed. She girds her summoners for battle and gives them the power to confuse foes.
Granted Abilities:
Haagenti grants you some of Thryms skill with arms and armor, plus her own aversion to transformation and the ability to inflict a state of confusion upon others.
Confusing Touch: You can confuse by touch. The target of your touch attack must succeed on a Will save or become confused for 1 round per three effective binder
levels you possess. When you attain an effective binder level of 19th, this ability functions as a maze spell. Once you have used this ability,
you cannot do so again for 5 rounds.
*/
#include "bnd_inc_bndfunc"
#include "prc_inc_sp_tch"
#include "spinc_maze"
void main()
{
object oBinder = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nBinderLevel = GetBinderLevel(oBinder, VESTIGE_HAAGENTI);
int nDC = GetBinderDC(oBinder, VESTIGE_HAAGENTI);
if(!BindAbilCooldown(oBinder, GetSpellId(), VESTIGE_HAAGENTI)) return;
int nAttack = PRCDoMeleeTouchAttack(oTarget);;
// PvP check.
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oBinder))
{
if (nAttack > 0)
{
if(nBinderLevel >= 19)
{
// Get the maze area
object oMazeArea = GetObjectByTag("prc_maze_01");
if(DEBUG && !GetIsObjectValid(oMazeArea))
DoDebug("Maze: ERROR: Cannot find maze area!", oBinder);
// Determine which entry to use
int nMaxEntry = GetLocalInt(oMazeArea, "PRC_Maze_Entries_Count");
int nEntry = Random(nMaxEntry) + 1;
object oEntryWP = GetWaypointByTag("PRC_MAZE_ENTRY_WP_" + IntToString(nEntry));
location lTarget = GetLocation(oEntryWP);
// Validity check
if(DEBUG && !GetIsObjectValid(oEntryWP))
DoDebug("Maze: ERROR: Selected waypoint does not exist!");
// Make sure the target can be teleported
if(GetCanTeleport(oTarget, lTarget, TRUE))
{
// Store the target's current location for return
SetLocalLocation(oTarget, "PRC_Maze_Return_Location", GetLocation(oTarget));
// Jump the target to the maze - the maze's scripts will handle the rest
DelayCommand(1.5f, AssignCommand(oTarget, JumpToLocation(lTarget)));
// Clear the action queue, so there's less chance of getting to abuse the ghost effect
AssignCommand(oTarget, ClearAllActions());
// Make the character ghost for the duration of the maze. Apply here so the effect gets a spellID association
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneGhost(), oTarget, 600.0f);
// Apply some VFX
DoMazeVFX(GetLocation(oTarget));
}
else
SendMessageToPCByStrRef(oBinder, 16825702); // "The spell fails - the target cannot be teleported."
}
else
{
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE))
{
float fDur = RoundsToSeconds(nBinderLevel / 3);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(PRCEffectConfused()), oTarget, fDur);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE)), oTarget, fDur);
}
}
}
}
}