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.
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*:://////////////////////////////////////////////
 | 
						|
//:: Spell Name Repulsion Shell : On Enter (3M)
 | 
						|
//:: Spell FileName PHS_S_RepulsionC
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Spell Effects Applied / Notes
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
    How does this work, we wonder, eh?
 | 
						|
 | 
						|
    Well, since creatures come in all shapes and sizes, it is pretty hard. The
 | 
						|
    game might not make it work right.
 | 
						|
 | 
						|
    At the moment it is 5M sphere, this means:
 | 
						|
 | 
						|
    - One sphere at 1M
 | 
						|
    - One sphere at 2M
 | 
						|
    ...
 | 
						|
    - One sphere at 5M
 | 
						|
 | 
						|
    The 5M sphere has a special On Enter script. The rest all have a script which
 | 
						|
    checks locals on the target, and caster, to see if they should push back.
 | 
						|
 | 
						|
    Note; To make sure that the caster can't push people back, a check for
 | 
						|
    GetCurrentAction() is done and ActionMoveToPoint(). Also, instead of it
 | 
						|
    collapsing when it is used hostility, it only prevents it working, so if
 | 
						|
    they do move, we set it to not work for a few seconds too.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Jasperre
 | 
						|
//::////////////////////////////////////////////*/
 | 
						|
 | 
						|
#include "PHS_INC_SPELLS"
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
    // Declare major variables
 | 
						|
    object oCaster = GetAreaOfEffectCreator();
 | 
						|
    object oTarget = GetEnteringObject();
 | 
						|
 | 
						|
    // Local ID for some of the things set by the biggest one
 | 
						|
    // * Ok, so its long, oh well.
 | 
						|
    string sID = "PHS_REPULSIONAOE" + IntToString(GetLocalInt(oCaster, "PHS_REPULSION_TIMES_CAST")) + ObjectToString(oCaster);
 | 
						|
 | 
						|
    // 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_REPULSION))) return;
 | 
						|
 | 
						|
    // Check if we are moving, and therefore cannot force it agsint something
 | 
						|
    // that would be affected!
 | 
						|
    // * Uses special Repulsion version that only disables it.
 | 
						|
    vector vVector = GetPosition(oCaster);
 | 
						|
    object oArea = GetArea(oCaster);
 | 
						|
    DelayCommand(0.1, PHS_MobileRepulsionAOECheck(oCaster, PHS_SPELL_REPULSION, vVector, oArea));
 | 
						|
 | 
						|
    // Make sure they are not immune to spells
 | 
						|
    if(PHS_TotalSpellImmunity(oTarget)) return;
 | 
						|
 | 
						|
    // The target is allowed a Spell resistance and immunity check to force
 | 
						|
    // thier way through the barrier
 | 
						|
    if(GetLocalInt(oTarget, sID + "SR")) return;
 | 
						|
 | 
						|
    // Target allowed a will save to negate
 | 
						|
    if(GetLocalInt(oTarget, sID + "WILL")) return;
 | 
						|
 | 
						|
 | 
						|
    // Distance we need to move them back is going to be 3M away, so out of the
 | 
						|
    // AOE.
 | 
						|
 | 
						|
    // Therefore, this is 3 - Current Distance.
 | 
						|
    float fDistance =  3.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));
 | 
						|
}
 |