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.
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*:://////////////////////////////////////////////
 | |
| //:: Spell Name Repel Vermin: On Enter
 | |
| //:: Spell FileName PHS_S_RepelVirmA
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Spell Effects Applied / Notes
 | |
| //:://////////////////////////////////////////////
 | |
|     As in Antilife Shell, this will repel vermin.
 | |
| 
 | |
|     They do get a will save (but take damage) and the rules for forcing it
 | |
|     still apply.
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Created By: Jasperre
 | |
| //::////////////////////////////////////////////*/
 | |
| 
 | |
| #include "PHS_INC_SPELLS"
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     // Declare major variables
 | |
|     object oCaster = GetAreaOfEffectCreator();
 | |
|     object oTarget = GetEnteringObject();
 | |
|     int nSpellSaveDC = PHS_GetAOESpellSaveDC();
 | |
|     int nMetaMagic = PHS_GetAOEMetaMagic();
 | |
| 
 | |
|     // Stop if they are not an alive thing, or is plot, or is a DM
 | |
|     if(GetIsDM(oTarget) || GetPlotFlag(oTarget) || oTarget == oCaster) return;
 | |
| 
 | |
|     // If we are starting still, do not hedge back
 | |
|     if(GetLocalInt(oCaster, PHS_MOVING_BARRIER_START + IntToString(PHS_SPELL_REPEL_VIRMIN))) return;
 | |
| 
 | |
|     // Races:
 | |
|     //    vermin only
 | |
|     // But not:
 | |
|     //    constructs, elementals, outsiders, or undead
 | |
|     if(GetRacialType(oTarget) != RACIAL_TYPE_VERMIN) return;
 | |
| 
 | |
|     // Check if we are moving, and therefore cannot force it agsint soemthing
 | |
|     // that would be affected!
 | |
|     vector vVector = GetPosition(oCaster);
 | |
|     object oArea = GetArea(oCaster);
 | |
|     DelayCommand(0.1, PHS_MobileAOECheck(oCaster, PHS_SPELL_REPEL_VIRMIN, vVector, oArea));
 | |
| 
 | |
|     // The target is allowed a Spell resistance and immunity check to force
 | |
|     // thier way through the barrier
 | |
|     if(PHS_SpellResistanceCheck(oCaster, oTarget)) return;
 | |
| 
 | |
|     // Make sure they are not immune to spells
 | |
|     if(PHS_TotalSpellImmunity(oTarget)) return;
 | |
| 
 | |
|     // Do they get through? (will save to take 2d6 damage)
 | |
|     if(PHS_SavingThrow(SAVING_THROW_WILL, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oCaster))
 | |
|     {
 | |
|         // Allow access and damage
 | |
|         int nDam = PHS_MaximizeOrEmpower(6, 2, nMetaMagic);
 | |
|         effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
 | |
|         PHS_ApplyDamageVFXToObject(oTarget, eVis, nDam);
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     // Distance we need to move them back is going to be 4M away, so out of the
 | |
|     // AOE.
 | |
| 
 | |
|     // Therefore, this is 4 - Current Distance.
 | |
|     float fDistance =  4.0 - GetDistanceBetween(oCaster, oTarget);
 | |
| 
 | |
|     // Debug stuff, obviously we'll need to move them at least 1 meter away.
 | |
|     if(fDistance < 1.0)
 | |
|     {
 | |
|         fDistance = 1.0;
 | |
|     }
 | |
| 
 | |
|     // Move the enterer back from the caster.
 | |
|     PHS_PerformMoveBack(oCaster, oTarget, fDistance, GetCommandable(oTarget));
 | |
| }
 |