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.
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*:://////////////////////////////////////////////
 | |
| //:: Spell Name Forcecage: On Heartbeat
 | |
| //:: Spell FileName PHS_S_ForcecageC
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Spell Effects Applied / Notes
 | |
| //:://////////////////////////////////////////////
 | |
|     Needs 4 placeables for the bars, and an AOE within the centre of it. If
 | |
|     any of the bars are destroyed (via. disintegration ETC), it means the entire
 | |
|     spell collapses.
 | |
| 
 | |
|     The AOE is plotted too, and does the correct 50% vs ranged attack consealment
 | |
|     as they will have to shoot through the bars.
 | |
| 
 | |
|     On Heartbeat:
 | |
| 
 | |
|     - Round 1. We set the placeables used as walls from the caster to us, and set us to plot.
 | |
|     - First 2 rounds: If there is no one in the area in the first 2 rounds, it will collapse
 | |
|     - Every round: If any of the 4 walls are destroyed by magic, it will collapse.
 | |
| 
 | |
|     -Collapsing-
 | |
|     - Destroys any of the walls left
 | |
|     - Destroys ourselves
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Created By: Jasperre
 | |
| //::////////////////////////////////////////////*/
 | |
| 
 | |
| #include "PHS_INC_SPELLS"
 | |
| 
 | |
| // Destroys self, and any remaining barriers.
 | |
| void Collapse(object oSelf, string sSetup);
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     // Setup variables
 | |
|     object oCaster = GetAreaOfEffectCreator();
 | |
|     object oSelf = OBJECT_SELF;
 | |
|     // We always start nRoundsDone on 1, so the first heartbeat this is 1.
 | |
|     int nRoundsDone = PHS_IncreaseStoredInteger(oSelf, "PHS_FORCECAGE_SETUP");
 | |
|     string sSetup = "PHS_FORCEWALL_WALL";
 | |
|     string sTotal;
 | |
|     object oObject;
 | |
|     int nCnt;
 | |
|     if(nRoundsDone == 1)
 | |
|     {
 | |
|         for(nCnt = 1; nCnt <= 4; nCnt++)
 | |
|         {
 | |
|             sTotal = sSetup + IntToString(nCnt);
 | |
|             // Set it from the casters variable
 | |
|             SetLocalObject(oSelf, sTotal, GetLocalObject(oCaster, sTotal));
 | |
|             // Delete it from the caster
 | |
|             DeleteLocalObject(oCaster, sTotal);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Check AOE creator, check the 4 forcewalls, check if anyone is in the AOE.
 | |
|     if(!GetIsObjectValid(oCaster))
 | |
|     {
 | |
|         // Go
 | |
|         Collapse(oSelf, sSetup);
 | |
|         return;
 | |
|     }
 | |
|     // Check if we are in the first or second round
 | |
|     if(nRoundsDone <= 2)
 | |
|     {
 | |
|         // Check validity of objects in the AOE
 | |
|         oObject = GetFirstInPersistentObject(OBJECT_SELF, OBJECT_TYPE_CREATURE);
 | |
|         if(!GetIsObjectValid(oObject))
 | |
|         {
 | |
|             // Go
 | |
|             Collapse(oSelf, sSetup);
 | |
|             return;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Check the 4 walls are still there
 | |
|     for(nCnt = 1; nCnt <= 4; nCnt++)
 | |
|     {
 | |
|         sTotal = sSetup + IntToString(nCnt);
 | |
|         // Get the wall at the position
 | |
|         oObject = GetLocalObject(oSelf, sTotal);
 | |
| 
 | |
|         if(!GetIsObjectValid(oObject))
 | |
|         {
 | |
|             // Go
 | |
|             Collapse(oSelf, sSetup);
 | |
|             return;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Destroys self, and any remaining barriers.
 | |
| void Collapse(object oSelf, string sSetup)
 | |
| {
 | |
|     string sTotal;
 | |
|     object oObject;
 | |
|     int nCnt;
 | |
|     // Check the 4 walls and destroy any left.
 | |
|     for(nCnt = 1; nCnt <= 4; nCnt++)
 | |
|     {
 | |
|         sTotal = sSetup + IntToString(nCnt);
 | |
|         // Get the wall at the position
 | |
|         oObject = GetLocalObject(oSelf, sTotal);
 | |
| 
 | |
|         if(GetIsObjectValid(oObject))
 | |
|         {
 | |
|             // Destory it
 | |
|             SetPlotFlag(oObject, FALSE);
 | |
|             DestroyObject(oObject);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // Set our plot flag to false and go ourselves
 | |
|     SetPlotFlag(oSelf, FALSE);
 | |
|     DestroyObject(oSelf);
 | |
| }
 |