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.
		
			
				
	
	
		
			273 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			273 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
/*:://////////////////////////////////////////////
 | 
						|
//:: Name Summoning include
 | 
						|
//:: FileName SMP_INC_SUMMON
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
    This holds the functions to get the correct summoned monster if random,
 | 
						|
    or the restrictions on monsters if in conversations.
 | 
						|
 | 
						|
    Not sure what else really...
 | 
						|
 | 
						|
    Tips:
 | 
						|
 | 
						|
    Uses of the summoning spell
 | 
						|
 | 
						|
    * When you are being attacked by a flying/swimming/ethereal/etc.
 | 
						|
      creature and you don't fly/swim/go ethereal/etc.
 | 
						|
    * When you need an ally immune to X
 | 
						|
    * When you need some cannon fodder to slow down the main bad guys/give
 | 
						|
      them something else to aim at.
 | 
						|
    * When your bad guys are in a location that you can't get to (across a
 | 
						|
      chasm)
 | 
						|
    * When you want to help your thief FLANK someone.
 | 
						|
    * When facing someone that has DR/x and you need a creature capable of
 | 
						|
      attacking them without penalty.
 | 
						|
    * When someone is using an Anti-Life shell or similar effect (Outsiders...)
 | 
						|
    * To set off traps, etc.
 | 
						|
    * Distractions/cons
 | 
						|
    * Short kamikaze missions.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Jasperre
 | 
						|
//::////////////////////////////////////////////*/
 | 
						|
 | 
						|
#include "SMP_INC_CONSTANT"
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Returns TRUE if alignment should influence what we will summon.
 | 
						|
int SMP_GetIsDivineSpellCastingClass(int nClass);
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Will return the choice for nLevel, or FALSE if invalid.
 | 
						|
int SMP_SummonMonsterGetChoice(int nLevel, object oCaster = OBJECT_SELF);
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Returns a resref for nSummonLevel, and nChoice.
 | 
						|
string SMP_SummonMonsterChoice(int nLevel, int nChoice);
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Returns a resref for a random monster on the level 1 Summon Monster list.
 | 
						|
// Uses alignments, if a cleric, paladin, or druid or ranger, to choose a correctly
 | 
						|
// aligned monster.
 | 
						|
string SMP_SummonMonsterRandom_1(object oCaster = OBJECT_SELF);
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Returns TRUE if alignment should influence what we will summon.
 | 
						|
int SMP_GetIsDivineSpellCastingClass(int nClass)
 | 
						|
{
 | 
						|
    // Divine spellcasters
 | 
						|
    switch(nClass)
 | 
						|
    {
 | 
						|
        case CLASS_TYPE_CLERIC:
 | 
						|
        case CLASS_TYPE_DRUID:
 | 
						|
        case CLASS_TYPE_PALADIN:
 | 
						|
        case CLASS_TYPE_RANGER:
 | 
						|
        {
 | 
						|
            return TRUE;
 | 
						|
        }
 | 
						|
        break;
 | 
						|
    }
 | 
						|
    return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
// SMP_INC_SUMMON. Will return the choice for nLevel, or FALSE if invalid.
 | 
						|
int SMP_SummonMonsterGetChoice(int nLevel, object oCaster = OBJECT_SELF)
 | 
						|
{
 | 
						|
    // Local set on caster (will move to caster item sometime)
 | 
						|
    return GetLocalInt(oCaster, "SMP_SUMMON_MONSTER_CHOICE_" + IntToString(nLevel));
 | 
						|
}
 | 
						|
// SMP_INC_SUMMON. Returns a resref for nSummonLevel, and nChoice.
 | 
						|
string SMP_SummonMonsterChoice(int nLevel, int nChoice)
 | 
						|
{
 | 
						|
    // String is SMP_smX_Y, where nLevel is X and Y is nChoice
 | 
						|
    return "SMP_sm" + IntToString(nLevel) + "_" + IntToString(nChoice);
 | 
						|
}
 | 
						|
// SMP_INC_SUMMON. Returns a resref for a random monster on the level 1 Summon Monster list.
 | 
						|
// Uses alignments, if a cleric, paladin, or druid or ranger, to choose a correctly
 | 
						|
// aligned monster.
 | 
						|
string SMP_SummonMonsterRandom_1(object oCaster = OBJECT_SELF)
 | 
						|
{
 | 
						|
/*  Monsters:
 | 
						|
    1st Level
 | 
						|
  1 Celestial dog - LG
 | 
						|
  2 Celestial owl - LG
 | 
						|
  3 Celestial giant fire beetle - NG
 | 
						|
  4 Celestial badger - CG
 | 
						|
  5 Celestial monkey - CG
 | 
						|
 | 
						|
  6 Fiendish dire rat - LE
 | 
						|
  7 Fiendish raven - LE
 | 
						|
  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
  9 Fiendish monstrous scorpion, Small - NE
 | 
						|
 10 Fiendish hawk - CE
 | 
						|
 11 Fiendish monstrous spider, Small - CE
 | 
						|
 12 Fiendish snake, Small viper - CE
 | 
						|
 | 
						|
*/
 | 
						|
    int nSummon;
 | 
						|
    // Does alignment influence it?
 | 
						|
    if(SMP_GetIsDivineSpellCastingClass(GetLastSpellCastClass()))
 | 
						|
    {
 | 
						|
        // Random choice (limited only by alignment)
 | 
						|
        int nAlignGoodEvil = GetAlignmentGoodEvil(oCaster);
 | 
						|
        int nAlignLawChaos = GetAlignmentLawChaos(oCaster);
 | 
						|
        // Netural Good/Evil
 | 
						|
        if(nAlignGoodEvil == ALIGNMENT_NEUTRAL)
 | 
						|
        {
 | 
						|
            // Check law/chaos.
 | 
						|
            if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
 | 
						|
            {
 | 
						|
                // Any choice
 | 
						|
                nSummon = Random(12) + 1;
 | 
						|
            }
 | 
						|
            // Can be any Good/Evil, but must be lawful or chaotic.
 | 
						|
            else if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
 | 
						|
            {
 | 
						|
                // Cannot be lawful, must be chaotic or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  3 Celestial giant fire beetle - NG
 | 
						|
                  4 Celestial badger - CG
 | 
						|
                  5 Celestial monkey - CG
 | 
						|
                  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
                  9 Fiendish monstrous scorpion, Small - NE
 | 
						|
                 10 Fiendish hawk - CE
 | 
						|
                 11 Fiendish monstrous spider, Small - CE
 | 
						|
                 12 Fiendish snake, Small viper - CE */
 | 
						|
                switch(Random(8) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 3; break;
 | 
						|
                    case 2: nSummon = 4; break;
 | 
						|
                    case 3: nSummon = 5; break;
 | 
						|
                    case 4: nSummon = 8; break;
 | 
						|
                    case 5: nSummon = 9; break;
 | 
						|
                    case 6: nSummon = 10; break;
 | 
						|
                    case 7: nSummon = 11; break;
 | 
						|
                    case 8: nSummon = 12; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else //if(nAlignLawChaos == nAlignLawChaos)
 | 
						|
            {
 | 
						|
                // Cannot be chaotic, must be lawful or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  1 Celestial dog - LG
 | 
						|
                  2 Celestial owl - LG
 | 
						|
                  3 Celestial giant fire beetle - NG
 | 
						|
                  6 Fiendish dire rat - LE
 | 
						|
                  7 Fiendish raven - LE
 | 
						|
                  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
                  9 Fiendish monstrous scorpion, Small - NE  */
 | 
						|
                switch(Random(7) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 1; break;
 | 
						|
                    case 2: nSummon = 2; break;
 | 
						|
                    case 3: nSummon = 3; break;
 | 
						|
                    case 4: nSummon = 6; break;
 | 
						|
                    case 5: nSummon = 7; break;
 | 
						|
                    case 6: nSummon = 8; break;
 | 
						|
                    case 7: nSummon = 9; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        else if(nAlignGoodEvil == ALIGNMENT_GOOD)
 | 
						|
        {
 | 
						|
            // Only non-evil (Good/Neutral) creatures. This means any good ones, unless
 | 
						|
            // they are also chaotic ETC.
 | 
						|
            if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
 | 
						|
            {
 | 
						|
                // Any choice which isn't evil
 | 
						|
                /*  Monsters:
 | 
						|
                  1 Celestial dog - LG
 | 
						|
                  2 Celestial owl - LG
 | 
						|
                  3 Celestial giant fire beetle - NG
 | 
						|
                  4 Celestial badger - CG
 | 
						|
                  5 Celestial monkey - CG  */
 | 
						|
                nSummon = Random(5) + 1;
 | 
						|
            }
 | 
						|
            if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
 | 
						|
            {
 | 
						|
                // Cannot be lawful, or evil, must be chaotic or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  3 Celestial giant fire beetle - NG
 | 
						|
                  4 Celestial badger - CG
 | 
						|
                  5 Celestial monkey - CG */
 | 
						|
                switch(Random(3) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 3; break;
 | 
						|
                    case 2: nSummon = 4; break;
 | 
						|
                    case 3: nSummon = 5; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else //if(nLawChoas == ALIGNMENT_LAWFUL)
 | 
						|
            {
 | 
						|
                // Cannot be chaotic, or evil, must be lawful or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  1 Celestial dog - LG
 | 
						|
                  2 Celestial owl - LG
 | 
						|
                  3 Celestial giant fire beetle - NG */
 | 
						|
                switch(Random(3) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 1; break;
 | 
						|
                    case 2: nSummon = 2; break;
 | 
						|
                    case 3: nSummon = 3; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        // Evil
 | 
						|
        else //if(nAlignGoodEvil == ALIGNMENT_EVIL)
 | 
						|
        {
 | 
						|
            // No good summons.
 | 
						|
            if(nAlignLawChaos == ALIGNMENT_NEUTRAL)
 | 
						|
            {
 | 
						|
                // Any choice which isn't good
 | 
						|
                /*  Monsters:
 | 
						|
                  6 Fiendish dire rat - LE
 | 
						|
                  7 Fiendish raven - LE
 | 
						|
                  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
                  9 Fiendish monstrous scorpion, Small - NE
 | 
						|
                 10 Fiendish hawk - CE
 | 
						|
                 11 Fiendish monstrous spider, Small - CE
 | 
						|
                 12 Fiendish snake, Small viper - CE */
 | 
						|
                nSummon = Random(7) + 5; // (6 to 12)
 | 
						|
            }
 | 
						|
            else if(nAlignLawChaos == ALIGNMENT_CHAOTIC)
 | 
						|
            {
 | 
						|
                // Cannot be lawful, or good, must be chaotic or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
                  9 Fiendish monstrous scorpion, Small - NE
 | 
						|
                 10 Fiendish hawk - CE
 | 
						|
                 11 Fiendish monstrous spider, Small - CE
 | 
						|
                 12 Fiendish snake, Small viper - CE */
 | 
						|
                switch(Random(5) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 8; break;
 | 
						|
                    case 2: nSummon = 9; break;
 | 
						|
                    case 3: nSummon = 10; break;
 | 
						|
                    case 4: nSummon = 11; break;
 | 
						|
                    case 5: nSummon = 12; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else //if(nAlignLawChaos == nAlignLawChaos)
 | 
						|
            {
 | 
						|
                // Cannot be chaotic, or good, must be lawful or neutral.
 | 
						|
                /* Monsters:
 | 
						|
                  6 Fiendish dire rat - LE
 | 
						|
                  7 Fiendish raven - LE
 | 
						|
                  8 Fiendish monstrous centipede, Medium - NE
 | 
						|
                  9 Fiendish monstrous scorpion, Small - NE  */
 | 
						|
                switch(Random(4) + 1)
 | 
						|
                {
 | 
						|
                    case 1: nSummon = 6; break;
 | 
						|
                    case 2: nSummon = 7; break;
 | 
						|
                    case 3: nSummon = 8; break;
 | 
						|
                    case 4: nSummon = 9; break;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
        // Alignment doesn't matter. Randomise it.
 | 
						|
        nSummon = Random(12) + 1;
 | 
						|
    }
 | 
						|
    // Total resref
 | 
						|
    string sResRef = "SMP_sm1_" + IntToString(nSummon);
 | 
						|
 | 
						|
    return sResRef;
 | 
						|
}
 | 
						|
 | 
						|
 |