forked from Jaysyn/PRC8
84 lines
3.5 KiB
Plaintext
84 lines
3.5 KiB
Plaintext
|
/*
|
|||
|
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 Thrym<79>s 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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|