Reverted to 4.56 to track down a bug that started in 4.57. Bugfixed back to 4.61. It's amazing the damage that one skipped case statement can do.
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: Name      Call Faithful Servants
 | 
						|
//:: FileName  sp_call_fserv.nss
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/**@file Call Faithful Servants
 | 
						|
Conjuration(Calling) [Good]
 | 
						|
Level: Celestial 6, cleric 6, sorc/wiz 6
 | 
						|
Components: V, S, Abstinance, Celestial
 | 
						|
Casting Time: 1 minute
 | 
						|
Range: Close
 | 
						|
Duration: Instantaneous
 | 
						|
 | 
						|
You call 1d4 lawful good lantern archons from Celestia,
 | 
						|
1d4 chaotic good coure eladrins from Arborea, or 1d4
 | 
						|
neutral good mesteval guardinals from Elysium to 
 | 
						|
your location.  They serve you for up to one year
 | 
						|
as guards, soldiers, spies, or whatever other holy
 | 
						|
purpose you have.
 | 
						|
 | 
						|
No matter how many times you cast this spell, you 
 | 
						|
can control no more than 2HD worth of celestials 
 | 
						|
per caster level.  If you exceed this number, all
 | 
						|
the newly created creatures fall under your 
 | 
						|
control, and any excess servants from previous
 | 
						|
castings return to their home plane.
 | 
						|
 | 
						|
Absinance Component: The character must abstain
 | 
						|
from casting Conjuration spells for 3 days prior
 | 
						|
to casting this spell.
 | 
						|
 | 
						|
Author:    Tenjac
 | 
						|
Created:   6/14/06
 | 
						|
*/
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
 | 
						|
#include "prc_inc_spells"
 | 
						|
#include "prc_inc_template"
 | 
						|
 | 
						|
void SummonLoop(int nCounter, location lLoc, object oPC);
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
        if(!X2PreSpellCastCode()) return;
 | 
						|
 | 
						|
        PRCSetSchool(SPELL_SCHOOL_CONJURATION);
 | 
						|
 | 
						|
        object oPC = OBJECT_SELF;
 | 
						|
        location lLoc = PRCGetSpellTargetLocation();
 | 
						|
        int nCounter = d4(1);
 | 
						|
        int nMetaMagic = PRCGetMetaMagicFeat();
 | 
						|
 | 
						|
        if(nMetaMagic & METAMAGIC_MAXIMIZE)
 | 
						|
        {
 | 
						|
                nCounter = 4;
 | 
						|
        }
 | 
						|
        if(nMetaMagic & METAMAGIC_EMPOWER)
 | 
						|
        {
 | 
						|
                nCounter += (nCounter/2);
 | 
						|
        }
 | 
						|
 | 
						|
        //Must be celestial
 | 
						|
         if(GetHasTemplate(TEMPLATE_CELESTIAL) || 
 | 
						|
            GetHasTemplate(TEMPLATE_HALF_CELESTIAL) ||
 | 
						|
            (MyPRCGetRacialType(oPC) == RACIAL_TYPE_OUTSIDER && GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD)
 | 
						|
            )
 | 
						|
         {
 | 
						|
                 //Get original max henchmen
 | 
						|
                 int nMax = GetMaxHenchmen();
 | 
						|
 | 
						|
                 //Set new max henchmen high
 | 
						|
                 SetMaxHenchmen(150);
 | 
						|
 | 
						|
                 // max number is 2HD worth of celestials per caster level
 | 
						|
                 int nMaxHD = PRCGetCasterLevel(oPC) * 2;
 | 
						|
                 // check for existing amoebas ^H^H^H^H^H^H^H lanton archons
 | 
						|
                 int nFluffBalls = 0;
 | 
						|
                 object oFluffBall = GetFirstFactionMember(oPC, FALSE);
 | 
						|
                 while (GetIsObjectValid(oFluffBall))
 | 
						|
                 {
 | 
						|
                     if (GetTag(oFluffBall) == "Archon")
 | 
						|
                         nFluffBalls++;// it's an archon
 | 
						|
                     oFluffBall = GetNextFactionMember(oPC, FALSE);
 | 
						|
                 }
 | 
						|
                 // modify count variable if too high
 | 
						|
                 if (nFluffBalls + nCounter > nMaxHD)
 | 
						|
                     nCounter = nMaxHD - nFluffBalls;
 | 
						|
                 else if (nFluffBalls + nCounter == nMaxHD) // none to summon, then exit with helpful message
 | 
						|
                 {
 | 
						|
                     FloatingTextStringOnCreature("You already have "+IntToString(nFluffBalls + nCounter)+"HD out of "+IntToString(nMaxHD)+"HD lantern archons.", oPC);
 | 
						|
                     return;
 | 
						|
                 }
 | 
						|
                 FloatingTextStringOnCreature("Currently have "+IntToString(nFluffBalls + nCounter)+"HD out of "+IntToString(nMaxHD)+"HD lantern archons.", oPC);
 | 
						|
                 SummonLoop(nCounter, lLoc, oPC);
 | 
						|
                 //Restore original max henchmen
 | 
						|
                 SetMaxHenchmen(nMax);
 | 
						|
         }
 | 
						|
		 else
 | 
						|
		 {
 | 
						|
			 FloatingTextStringOnCreature("You must have celestial blood to cast this spell", oPC);
 | 
						|
		 }
 | 
						|
 | 
						|
         PRCSetSchool();
 | 
						|
         //SPGoodShift(oPC);
 | 
						|
}
 | 
						|
 | 
						|
void SummonLoop(int nCounter, location lLoc, object oPC)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    for(i = 0; i < nCounter; i++)
 | 
						|
    {
 | 
						|
        //Create appropriate Ghoul henchman
 | 
						|
        object oArchon = CreateObject(OBJECT_TYPE_CREATURE, "hen_clantern", lLoc, TRUE, "Archon"); 
 | 
						|
 | 
						|
        //Make henchman
 | 
						|
        AddHenchman(oPC, oArchon);
 | 
						|
    }
 | 
						|
} |