39 lines
1.9 KiB
Plaintext
39 lines
1.9 KiB
Plaintext
void main()
|
|
{
|
|
if(GetIsPC(GetEnteringObject()) && !GetIsDM(GetEnteringObject()) )
|
|
{
|
|
object defender = GetObjectByTag("Defender1");
|
|
location lDefender = GetLocation(GetObjectByTag("Defender1")); // Defender will be our spellcaster.
|
|
object oTarget = GetNearestCreatureToLocation // Find Creature ...
|
|
( // ...which is...
|
|
CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC, // (Undead)
|
|
lDefender,1, // (1st Closest to Defender object)
|
|
CREATURE_TYPE_IS_ALIVE,TRUE // (Still 'alive')
|
|
);
|
|
if (GetIsObjectValid(oTarget) && (GetDistanceBetween(OBJECT_SELF,oTarget) < 75.0 ))
|
|
{
|
|
// Proceed to launch an attack - there is a valid target in range.
|
|
int iSpellToUse;
|
|
string sSpellName;
|
|
switch (d6())
|
|
{
|
|
// randomly pick a spell to cast at the oTarget
|
|
case 1: iSpellToUse = SPELL_NEGATIVE_ENERGY_BURST; break;
|
|
case 2: iSpellToUse = SPELL_ICE_STORM; break;
|
|
case 3: iSpellToUse = SPELL_HORRID_WILTING; break;
|
|
case 4: iSpellToUse = SPELL_DELAYED_BLAST_FIREBALL; break;
|
|
case 5: iSpellToUse = SPELL_CHAIN_LIGHTNING; break;
|
|
case 6: iSpellToUse = SPELL_MORDENKAINENS_DISJUNCTION; break;
|
|
}
|
|
// Make "Defender" cast spell instantly, regardless of whether "Defender" object can legally cast the spell.
|
|
// Debugging Message
|
|
AssignCommand(
|
|
defender,
|
|
ActionCastSpellAtObject(iSpellToUse,oTarget,METAMAGIC_MAXIMIZE,TRUE,40,PROJECTILE_PATH_TYPE_HOMING,TRUE)
|
|
);
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectVisualEffect( VFX_FNF_SUMMON_MONSTER_3),defender, 1.5);
|
|
}
|
|
}
|
|
}
|
|
|