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.
80 lines
2.2 KiB
Plaintext
80 lines
2.2 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Spiritual Weapon - On Heartbeat
|
|
//:: Spell FileName PHS_S_SpiritWeaC
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
This will attack the nearest enemy to oCaster, the master (set on PHS_MASTER).
|
|
|
|
Dispels ourself if we go.
|
|
|
|
Equips most damaging, needs to be in sight of oCAster and within 20M of them.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_AI_INCLUDE"
|
|
|
|
void main()
|
|
{
|
|
// Declare major variables
|
|
object oSelf = OBJECT_SELF;
|
|
object oCaster = GetLocalObject(oSelf, PHS_MASTER);
|
|
|
|
// Need a valid caster
|
|
if(!GetIsObjectValid(oCaster) ||
|
|
!GetHasSpellEffect(PHS_SPELL_SPIRITUAL_WEAPON))
|
|
{
|
|
// Go
|
|
PHSAI_DispelSelf();
|
|
return;
|
|
}
|
|
|
|
// If the caster is > 20M away, or they cannot see us, we go.
|
|
if(GetDistanceToObject(oCaster) > 20.0 || !GetObjectSeen(oSelf, oCaster))
|
|
{
|
|
// Return to caster
|
|
ClearAllActions();
|
|
ActionMoveToObject(oCaster, TRUE);
|
|
return;
|
|
}
|
|
|
|
// Get the nearest enemy in a loop.
|
|
// * Must be seen (IE: "Directed as a free action")
|
|
// * Must be an enemy
|
|
// * Must be within 20M of the caster (else we'll move out of range)
|
|
int nCnt = 1;
|
|
object oAttack;
|
|
object oCreature = GetNearestObject(OBJECT_TYPE_CREATURE, oSelf, nCnt);
|
|
while(GetIsObjectValid(oCreature))
|
|
{
|
|
// Seen, 20M range, enemy
|
|
if(GetObjectSeen(oCreature, oCaster) &&
|
|
GetIsEnemy(oCreature, oCaster) &&
|
|
GetDistanceBetween(oCreature, oCaster) < 20.0)
|
|
{
|
|
// Attack this one.
|
|
oAttack = oCreature;
|
|
break;
|
|
}
|
|
nCnt++;
|
|
oCreature = GetNearestObject(OBJECT_TYPE_CREATURE, oSelf, nCnt);
|
|
}
|
|
|
|
// Attack oAttack, if valid
|
|
if(GetIsObjectValid(oAttack))
|
|
{
|
|
ClearAllActions();
|
|
ActionEquipMostDamagingMelee();
|
|
ActionAttack(oAttack);
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
// Return to caster
|
|
ClearAllActions();
|
|
ActionMoveToObject(oCaster, TRUE);
|
|
return;
|
|
}
|
|
}
|