Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
94 lines
3.4 KiB
Plaintext
94 lines
3.4 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Grease: On Heartbeat
|
||
//:: Spell FileName PHS_S_GreaseC
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
Grease will knockdown creatures (falling them) each round.
|
||
|
||
The dexterity check replaces this text:
|
||
|
||
A creature can walk within or through the area of grease at half normal speed
|
||
with a DC 10 Balance check. Failure means it can’t move that round (and must
|
||
then make a Reflex save or fall), while failure by 5 or more means it falls
|
||
(see the Balance skill for details).
|
||
|
||
Which only applies if they are doing ACTION_MOVETOPOINT.
|
||
|
||
On Heartbeat:
|
||
1. Reflex save else have knockdown applied to them for 6 seconds. The duration
|
||
of this effect is 5.9 - fDelay.
|
||
2. If they are still moving using ACTION_MOVETOPOINT, it will attempt a
|
||
special balance check, and failing it, it will stop them using ClearAllActions()
|
||
and a fail of result 5 or less means instant knockdown.
|
||
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
void main()
|
||
{
|
||
// Check AOE
|
||
if(!PHS_CheckAOECreator()) return;
|
||
|
||
// Declare major variables
|
||
object oTarget;
|
||
object oCaster = GetAreaOfEffectCreator();
|
||
int nMetaMagic = PHS_GetAOEMetaMagic();
|
||
int nSpellSaveDC = PHS_GetAOESpellSaveDC();
|
||
float fDelay, fDuration;
|
||
int nRoll;
|
||
|
||
// Declare effects
|
||
effect eDur = EffectKnockdown();
|
||
|
||
// Start cycling through the AOE Object for viable targets
|
||
oTarget = GetFirstInPersistentObject(OBJECT_SELF, OBJECT_TYPE_CREATURE);
|
||
while(GetIsObjectValid(oTarget))
|
||
{
|
||
// PvP check
|
||
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
|
||
// Make sure they are not immune to spells
|
||
!PHS_TotalSpellImmunity(oTarget))
|
||
{
|
||
// Fire cast spell at event for the affected target
|
||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_GREASE);
|
||
|
||
// Random delay to make it not all fire at once
|
||
fDelay = PHS_GetRandomDelay(0.1, 0.3);
|
||
|
||
fDuration = 5.9 - fDelay;
|
||
|
||
// Reflex saving throw
|
||
if(!PHS_SavingThrow(SAVING_THROW_REFLEX, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oCaster, fDelay))
|
||
{
|
||
// Apply damage and visuals
|
||
DelayCommand(fDelay, PHS_ApplyDuration(oTarget, eDur, fDuration));
|
||
}
|
||
else if(GetCurrentAction(oTarget) == ACTION_MOVETOPOINT)
|
||
{
|
||
// Are they moving? If so, DC 10 dexterity check
|
||
nRoll = d20() + GetAbilityModifier(ABILITY_DEXTERITY, oTarget);
|
||
// If they fail it is < 10.
|
||
if(nRoll < 10)
|
||
{
|
||
// We at least ClearAllActions(), however...if 5 or under
|
||
if(nRoll <= 5)
|
||
{
|
||
// Apply damage and visuals
|
||
DelayCommand(fDelay, PHS_ApplyDuration(oTarget, eDur, fDuration));
|
||
}
|
||
else
|
||
{
|
||
AssignCommand(oTarget, ClearAllActions());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
//Get next target.
|
||
oTarget = GetNextInPersistentObject(OBJECT_SELF, OBJECT_TYPE_CREATURE);
|
||
}
|
||
}
|