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;
 | |
|     }
 | |
| }
 |