forked from Jaysyn/PRC8
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.
82 lines
2.9 KiB
Plaintext
82 lines
2.9 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Prismatic Sphere: (Blindness) On Heartbeat
|
|
//:: Spell FileName PHS_S_PrisSpherC
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
Changes include the fact it won't do all 7 effects, it is affected by dispel
|
|
magic normally, it has a duration (might extend it higher, its a level 7
|
|
spell).
|
|
|
|
It still is immobile, and does blindness normally too (a second AOE)
|
|
|
|
How does the spell stopping work?
|
|
|
|
Well, it will add a new check into the spell hook. If we cast a spell
|
|
into the AOE's location (can use GetNearestObjectByTag() and distance check)
|
|
but we are not ourselves in it, it will fail.
|
|
|
|
Ranged weapons have 100% miss chance from both inside and outside (100%
|
|
concealment + 100% miss chance applied on enter, whatever).
|
|
|
|
The blindness AOE is done normally, using a LOS sphere check, which should
|
|
work.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Check AOE
|
|
if(!PHS_CheckAOECreator()) return;
|
|
|
|
// Declare major variables
|
|
object oCaster = GetAreaOfEffectCreator();
|
|
location lTarget = GetLocation(OBJECT_SELF);
|
|
object oTarget;
|
|
int nMetaMagic = PHS_GetAOEMetaMagic();
|
|
float fDelay, fDuration;
|
|
|
|
// Declare blindness
|
|
effect eBlind = EffectBlindness();
|
|
|
|
// Start cycling through the AOE Object for viable targets
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, 10.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// PvP check
|
|
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
|
|
// Make sure they are not immune to spells
|
|
!PHS_TotalSpellImmunity(oTarget))
|
|
{
|
|
// Check HD
|
|
if(GetHitDice(oTarget) <= 8)
|
|
{
|
|
// Fire cast spell at event for the affected target
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_PRISMATIC_SPHERE);
|
|
|
|
// Check if they can see
|
|
if(PHS_GetCanSee(oTarget))
|
|
{
|
|
// Check spell resistance
|
|
if(PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
|
{
|
|
// Get duration
|
|
fDuration = PHS_GetRandomDuration(PHS_ROUNDS, 4, 2, nMetaMagic);
|
|
|
|
// Get a small delay
|
|
fDelay = GetDistanceToObject(oTarget)/20;
|
|
|
|
// Apply blindness
|
|
DelayCommand(fDelay, PHS_ApplyDuration(oTarget, eBlind, fDuration));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
//Get next target.
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, 10.0, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|