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.
		
			
				
	
	
		
			1015 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1015 lines
		
	
	
		
			53 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*:://////////////////////////////////////////////
 | ||
| //:: Spell Name Pre-spell hook
 | ||
| //:: Spell FileName SMP_INC_SPLLHOOK
 | ||
| //:://////////////////////////////////////////////
 | ||
| //:: Notes
 | ||
| //:://////////////////////////////////////////////
 | ||
|     The call in this script is called before each spell.
 | ||
| 
 | ||
|     It can return TRUE or FALSE.
 | ||
| 
 | ||
|     - TRUE - the spell can be cast normally
 | ||
|     - FALSE - the spell will not cast correctly, and the spellscript will not run.
 | ||
| 
 | ||
|     This will not actually fire the script SMP_SPELLHOOK, but the function
 | ||
|     SMP_SpellHookCheck() will.
 | ||
| 
 | ||
|     Thusly, you only need to edit SMP_SPELLHOOK to have edits to the spellhook.
 | ||
| //:://////////////////////////////////////////////
 | ||
| //:: Created By: Jasperre
 | ||
| //::////////////////////////////////////////////*/
 | ||
| 
 | ||
| // - Contains the normal Use Magical Device checks
 | ||
| #include "SMP_INC_UMDCHECK"
 | ||
| // Array things for names
 | ||
| #include "SMP_INC_ARRAY"
 | ||
| 
 | ||
| // Include the default spell includes too
 | ||
| #include "SMP_INC_SPELLS"
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. Checks if a paladin, or cleric, casting the spell has an item of divine focus.
 | ||
| int SMP_DivineFocusCheck(string sSpellName);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. This checks Blink effects - there is a 50% chance a spell
 | ||
| // just will not affect them! :-)
 | ||
| // - Of course, seeing eathreal (True Seeing, ETC) eliminates this
 | ||
| // - Returns TRUE if they pass the test, FALSE means that oTarget is blinked :-)
 | ||
| int SMP_BlinkCheck(object oTarget, object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. This will check if the area is toggled to be wild magic,
 | ||
| // and if so, do random effects.
 | ||
| // * FALSE if wild magic check was failed, so something special happened
 | ||
| // * TRUE if the pass was sucessful, or no wild magic.
 | ||
| int SMP_WildMagicAreaSurge(object oCasterArea, object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. Check for concentration - that is, if we don't concentrate,
 | ||
| // then something will happen, but this will not stop the spell cast operating.
 | ||
| // * Will not return anything. The in-built checks here will not stop the spell,
 | ||
| //   but will stop another that is being concentrated upon.
 | ||
| void SMP_SpecialConcentrationChecks(object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. This makes sure the caster isn't in some kind of state that
 | ||
| // stops spells being cast, such as Entanglement, which are not handled under
 | ||
| // the normal concentration checks via. damage.
 | ||
| // * TRUE means they passed, no bad effects or sucess at passing the DC checks
 | ||
| // * FALSE means some bad effect if possed on the caster, or a failed check.
 | ||
| // Note: Make sure the spell hook applies a special visual when FALSE is returned.
 | ||
| int SMP_BreakConcentrationCheck(int nSpellLevel, object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. We check for the spells SMP_SPELL_SPELL_CURSE and
 | ||
| // SMP_SPELL_SPELL_CURSE_GREATER, and do 1d6 + nSpellLevel, or
 | ||
| // 2d6 + (2*nSpellLevel) in damage, half for will save.
 | ||
| // * No return value
 | ||
| // * Only works if a normal spell class, and no item.
 | ||
| void SMP_SpellCurseCheck(int nSpellLevel, int nCasterClass, object oCastItem, object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. This will check if this spell is a cleric is casting it.
 | ||
| // - We can cast a limit of 1 Domain spell a day.
 | ||
| // (NOT IN: We can cast a limit of XXX spells - 1 for other spells, using normal slots.)
 | ||
| // TRUE if the check failed and they cannot cast it.
 | ||
| int SMP_DomainSpellCheck(int nSpellId, object oCastItem, int nSpellCastClass, object oCaster = OBJECT_SELF);
 | ||
| // SMP_INC_SPLLHOOK. Get if nSpellId is a domain spell. Returns TRUE if it is.
 | ||
| int SMP_GetIsDomainSpell(int nSpellId);
 | ||
| // SMP_INC_SPLLHOOK. Removes ALL domain spells from nLevel on oTarget - removes the casting of them that is!
 | ||
| void SMP_RemoveDomainSpells(object oTarget, int nLevel);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. This will check if, casting from a spell scroll, they have
 | ||
| // the correct stats to do so.
 | ||
| // Do this before UMD. Returns FALSE if they are using UMD or it was used
 | ||
| // sucessfully, or FALSE if they tried to use it and failed a check or something.
 | ||
| // * TRUE = Can cast this spell according to this.
 | ||
| // * FALSE = Failed, no spell script.
 | ||
| int SMP_SpellScrollCastingCheck(int nSpellId, int nSpellLevel, object oCastItem, int nSpellCastClass, object oCaster = OBJECT_SELF);
 | ||
| 
 | ||
| // SMP_INC_SPLLHOOK. Returns the level of the spell on the scroll. Of course,
 | ||
| // there is only ever one level a scroll can be - it can have only one spell to cast on it.
 | ||
| int SMP_GetSpellScrollLevel(object oScroll);
 | ||
| 
 | ||
| // Checks if a paladin, or cleric, casting the spell has an item of divine focus.
 | ||
| int SMP_DivineFocusCheck(string sSpellName)
 | ||
| {
 | ||
|     // Make sure it wasn't cast from an item
 | ||
|     if(GetIsObjectValid(GetSpellCastItem())) return TRUE;
 | ||
| 
 | ||
|     int nCasterClass = GetLastSpellCastClass();
 | ||
| 
 | ||
|     if(nCasterClass == CLASS_TYPE_CLERIC ||
 | ||
|        nCasterClass == CLASS_TYPE_PALADIN)
 | ||
|     {
 | ||
|         // If this returns FALSE, the focus failed.
 | ||
|         if(!SMP_ComponentExactItem(SMP_ITEM_DIVINE_FOCUS, "Item of Divine Focus", sSpellName))
 | ||
|         {
 | ||
|             effect eVis = EffectVisualEffect(VFX_IMP_MAGIC_RESISTANCE_USE);
 | ||
|             ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
 | ||
|             return FALSE;
 | ||
|         }
 | ||
|     }
 | ||
|     return TRUE;
 | ||
| }
 | ||
| // This checks Blink effects - there is a 50% chance a spell just will not
 | ||
| // affect them! :-)
 | ||
| // - Of course, seeing eathreal (True Seeing, ETC) eliminates this
 | ||
| // - Returns TRUE if they pass the test, FALSE means that oTarget is blinked :-)
 | ||
| int SMP_BlinkCheck(object oTarget, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     if(GetHasSpellEffect(SMP_SPELL_BLINK, oTarget))
 | ||
|     {
 | ||
|         // Spells which stop Blinking:
 | ||
|         if(!GetHasSpellEffect(SMP_SPELL_TRUE_SEEING, oCaster) &&
 | ||
|         // Hide effect - Trueseeing
 | ||
|            !GetItemHasItemProperty(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCaster), ITEM_PROPERTY_TRUE_SEEING))
 | ||
|         {
 | ||
|             // Make the 50% check
 | ||
|             if(d2() == 1)
 | ||
|             {
 | ||
|                 // Pass!
 | ||
|                 SendMessageToPC(oTarget, "Your blinking upset someones attempt to cast a spell at you");
 | ||
|                 SendMessageToPC(oCaster, GetName(oTarget) + " was blinking, and was not in this plane at the time!");
 | ||
|                 return FALSE;
 | ||
|             }
 | ||
|             // we don't report a pass - it is like Inside Knowledge, knowing
 | ||
|             // that they are blinking (yeah, right). It is really, just more
 | ||
|             // annoying, as many messages could possibly come up for many blinkers
 | ||
|         }
 | ||
|     }
 | ||
|     return TRUE;
 | ||
| }
 | ||
| 
 | ||
| // This will check if the area is toggled to be wild magic, and if so, do random
 | ||
| // effects.
 | ||
| // * FALSE if wild magic check was failed, so something special happened
 | ||
| // * TRUE if the pass was sucessful, or no wild magic.
 | ||
| int SMP_WildMagicAreaSurge(object oCasterArea, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     // Get if the area has the wildmagic check flag
 | ||
|     // - This is also the % for failure
 | ||
|     int nWildPercent = GetLocalInt(oCasterArea, "SMP_AREA_WILDMAGIC");
 | ||
|     int nDice;
 | ||
| 
 | ||
|     // Check if there is a 1% or higher failure rate
 | ||
|     if(nWildPercent > FALSE)
 | ||
|     {
 | ||
|         // Check dice
 | ||
|         nDice = d100();
 | ||
|         if(nDice <= nWildPercent)
 | ||
|         {
 | ||
|             // We fail! Floating text, damage, and visual
 | ||
|             // - Executed script
 | ||
|             ExecuteScript(SMP_WILD_MAGIC_SCRIPT, oCaster);
 | ||
|             // Also stop the spell
 | ||
|             return FALSE;
 | ||
|         }
 | ||
|     }
 | ||
|     return TRUE;
 | ||
| }
 | ||
| // Check for concentration - that is, if we don't concentrate, then something
 | ||
| // will happen.
 | ||
| // * Will not return anything. The in-built checks here will not stop the spell,
 | ||
| //   but will stop another that is being concentrated upon.
 | ||
| void SMP_SpecialConcentrationChecks(object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     // * At the moment we got only one concentration spell, black blade of disaster
 | ||
| 
 | ||
|     object oAssoc = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oCaster);
 | ||
|     if (GetIsObjectValid(oAssoc) && GetIsPC(oCaster)) // only applies to PCS
 | ||
|     {
 | ||
|         if(GetTag(oAssoc) == "x2_s_bblade") // black blade of disaster
 | ||
|         {
 | ||
|             if (GetLocalInt(OBJECT_SELF,"X2_L_CREATURE_NEEDS_CONCENTRATION"))
 | ||
|             {
 | ||
|                 SignalEvent(oAssoc,EventUserDefined(1));
 | ||
|             }
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| // This makes sure the caster isn't in some kind of state that stops spells
 | ||
| // being cast, such as Entanglement, which are not handled under the normal
 | ||
| // concentration checks via. damage.
 | ||
| // * TRUE means they passed, no bad effects or sucess at passing the DC checks
 | ||
| // * FALSE means some bad effect if possed on the caster, or a failed check.
 | ||
| // Note: Make sure the spell hook applies a special visual when FALSE is returned.
 | ||
| int SMP_BreakConcentrationCheck(int nSpellLevel, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     // Checks for status effects and spells which induce extra concentration
 | ||
|     // checks.
 | ||
| 
 | ||
|     // - Entanglement has an extra DC 15 concentration check
 | ||
|     if(SMP_GetHasEffect(EFFECT_TYPE_ENTANGLE, oCaster))
 | ||
|     {
 | ||
|         // DC15
 | ||
|         if(!GetIsSkillSuccessful(oCaster, SKILL_CONCENTRATION, 15))
 | ||
|         {
 | ||
|             // Failed
 | ||
|             FloatingTextStringOnCreature("*Entanglement Concentration failed*", oCaster, FALSE);
 | ||
|             return FALSE;
 | ||
|         }
 | ||
|         else
 | ||
|         {
 | ||
|             // Passed
 | ||
|             FloatingTextStringOnCreature("*Entanglement Concentration passed*", oCaster, FALSE);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     // * TRUE means successful pass
 | ||
|     return TRUE;
 | ||
| }
 | ||
| 
 | ||
| // We check for the spells SMP_SPELL_SPELL_CURSE and SMP_SPELL_SPELL_CURSE_GREATER,
 | ||
| // and do 1d6 + nSpellLevel, or 2d6 + (2*nSpellLevel) in damage, half for will save.
 | ||
| // * No return value
 | ||
| // * Only works if a normal spell class, and no item.
 | ||
| void SMP_SpellCurseCheck(int nSpellLevel, int nCasterClass, object oCastItem, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     // We do not do it if they cast from an item, or cast from a special ability.
 | ||
|     if(GetIsObjectValid(oCastItem) ||
 | ||
|        nCasterClass == CLASS_TYPE_INVALID)
 | ||
|     {
 | ||
|         return;
 | ||
|     }
 | ||
| 
 | ||
|     // So, we check for the spell
 | ||
|     object oEnemy;
 | ||
|     int nSpellSaveDC, nDam;
 | ||
|     effect eDam;
 | ||
| 
 | ||
|     // - Greater Spell Curse
 | ||
|     if(GetHasSpellEffect(SMP_SPELL_SPELL_CURSE_GREATER, oCaster))
 | ||
|     {
 | ||
|         // Make sure the caster is valid.
 | ||
|         oEnemy = SMP_FirstCasterOfSpellEffect(SMP_SPELL_SPELL_CURSE_GREATER, oCaster);
 | ||
| 
 | ||
|         // Validity
 | ||
|         if(GetIsObjectValid(oEnemy))
 | ||
|         {
 | ||
|             // We check for will save DC
 | ||
|             nSpellSaveDC = GetLocalInt(oEnemy, "SMP_SPELL_CAST_SPELL_SAVEDC" + IntToString(SMP_SPELL_SPELL_CURSE_GREATER));
 | ||
| 
 | ||
|             // Make sure its 10 or more
 | ||
|             if(nSpellSaveDC < 10) nSpellSaveDC = 10;
 | ||
| 
 | ||
|             // Get damage
 | ||
|             // 2d6 + 2 * spell level
 | ||
|             nDam = SMP_MaximizeOrEmpower(6, 2, FALSE, nSpellLevel * 2);
 | ||
| 
 | ||
|             // Do the save for half damage
 | ||
|             nDam = SMP_GetAdjustedDamage(SAVING_THROW_WILL, nDam, oCaster, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oEnemy);
 | ||
| 
 | ||
|             // Do damage
 | ||
|             if(nDam > 0)
 | ||
|             {
 | ||
|                 eDam = EffectDamage(nDam);
 | ||
|                 AssignCommand(oEnemy, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oCaster));
 | ||
|             }
 | ||
|             // Stop!
 | ||
|             return;
 | ||
|         }
 | ||
|         else
 | ||
|         {
 | ||
|             // Else, cannot be valid greater spell curse. Need enemy.
 | ||
|             SMP_RemoveSpellEffectsFromTarget(SMP_SPELL_SPELL_CURSE_GREATER, oCaster);
 | ||
|         }
 | ||
|     }
 | ||
|     // Now check the normal version, 1d6 + spell level in damage.
 | ||
|     if(GetHasSpellEffect(SMP_SPELL_SPELL_CURSE, oCaster))
 | ||
|     {
 | ||
|         // Make sure the cast is valid.
 | ||
|         oEnemy = SMP_FirstCasterOfSpellEffect(SMP_SPELL_SPELL_CURSE, oCaster);
 | ||
| 
 | ||
|         // Validity
 | ||
|         if(GetIsObjectValid(oEnemy))
 | ||
|         {
 | ||
|             // We check for will save DC
 | ||
|             nSpellSaveDC = GetLocalInt(oEnemy, "SMP_SPELL_CAST_SPELL_SAVEDC" + IntToString(SMP_SPELL_SPELL_CURSE));
 | ||
| 
 | ||
|             // Make sure its 10 or more
 | ||
|             if(nSpellSaveDC < 10) nSpellSaveDC = 10;
 | ||
| 
 | ||
|             // Get damage
 | ||
|             // 1d6 + spell level
 | ||
|             nDam = SMP_MaximizeOrEmpower(6, 1, FALSE, nSpellLevel);
 | ||
| 
 | ||
|             // Do the save for half damage
 | ||
|             nDam = SMP_GetAdjustedDamage(SAVING_THROW_WILL, nDam, oCaster, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oEnemy);
 | ||
| 
 | ||
|             // Do damage
 | ||
|             if(nDam > 0)
 | ||
|             {
 | ||
|                 eDam = EffectDamage(nDam);
 | ||
|                 AssignCommand(oEnemy, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oCaster));
 | ||
|             }
 | ||
|             // Stop!
 | ||
|             return;
 | ||
|         }
 | ||
|         else
 | ||
|         {
 | ||
|             // Else, cannot be valid greater spell curse. Need enemy.
 | ||
|             SMP_RemoveSpellEffectsFromTarget(SMP_SPELL_SPELL_CURSE, oCaster);
 | ||
|         }
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| // This will check if this spell is a Domain spell, and a cleric is casting it.
 | ||
| // - No items will be used.
 | ||
| // - If so, we will not be able to use more then one per rest.
 | ||
| int SMP_DomainSpellCheck(int nSpellId, object oCastItem, int nSpellCastClass, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
|     // PCs only
 | ||
|     if(!GetIsPC(oCaster)) return TRUE;
 | ||
| 
 | ||
|     // Module setting, if we have no setting to use this, ignore it
 | ||
|     if(!SMP_SettingGetGlobal(SMP_SETTING_DOMAIN_SPELL_LIMIT_ENFORCE)) return TRUE;
 | ||
| 
 | ||
|     // If they are not casting as a cleric, or using a valid item (EG: scroll)
 | ||
|     // we do not need this
 | ||
|     if(nSpellCastClass != CLASS_TYPE_CLERIC || GetIsObjectValid(oCastItem)) return TRUE;
 | ||
| 
 | ||
|     // We are a cleric casting a normal spell...thus will be a clerical stored
 | ||
|     // spell (A normal one, spontaeous one, or a domain one!)
 | ||
| 
 | ||
|     // Check the spell by nSpellId to see if it is a domain spell.
 | ||
|     if(SMP_GetIsDomainSpell(nSpellId))
 | ||
|     {
 | ||
|         // Get domain spell level
 | ||
|         int nLevel = SMP_ArrayGetSpellLevel(nSpellId, CLASS_TYPE_INVALID);
 | ||
| 
 | ||
|         // Remove other domain spells from this level
 | ||
|         SMP_RemoveDomainSpells(oCaster, nLevel);
 | ||
|     }
 | ||
| 
 | ||
|     // If this is a normal cleric spell (checked now) from whatever level, we
 | ||
|     // will make sure, if this is the first casting of a cleric spell from that
 | ||
|     // level, we remove all but 1 domain spell, oh, and make sure that at least
 | ||
|     // 1 of the spells are a domain spell from that level.
 | ||
| 
 | ||
|     // * Need to test for wisdom bonuses, slots, etc. To see if it was the first
 | ||
|     //   spell. Note, it could be abused - however, extra wisdom is only tempoary,
 | ||
|     //   so we'll not check for bonus to wisdom from effects, only items and
 | ||
|     //   inherant bonuses (Maybe just take off all temp wisdom bonuses...by applying
 | ||
|     //   a +12 bonus, then removing it?)
 | ||
| 
 | ||
|     // Therefore: If we rest, it'll check again on the first casting of a spell
 | ||
|     // from that level. no need for rest event changing.
 | ||
| 
 | ||
|     // True, we can cast the spell
 | ||
|     return TRUE;
 | ||
| }
 | ||
| 
 | ||
| // Get if nSpellId is a domain spell. Returns TRUE if it is.
 | ||
| int SMP_GetIsDomainSpell(int nSpellId)
 | ||
| {
 | ||
|     switch(nSpellId)
 | ||
|     {
 | ||
|         // Air
 | ||
|         case SMP_SPELL_DOMAIN_AIR_OBSCURING_MIST:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_WIND_WALL:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_GASEOUS_FORM:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_AIR_WALK:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_CONTROL_WINDS:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_CHAIN_LIGHTNING:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_CONTROL_WEATHER:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_WHIRLWIND:
 | ||
|         case SMP_SPELL_DOMAIN_AIR_ELEMENTAL_SWARM:
 | ||
|         // Animal
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_CALM_ANIMALS:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_HOLD_ANIMAL:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_DOMINATE_ANIMAL:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_SUMMON_NATURES_ALLY_IV:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_COMMUNE_WITH_NATURE:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_ANTILIFE_SHELL:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_ANIMAL_SHAPES:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_SUMMON_NATURES_ALLY_VII:
 | ||
|         case SMP_SPELL_DOMAIN_ANIMAL_SHAPECHANGE:
 | ||
|         // Chaos
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_PROTECTION_FROM_LAW:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_SHATTER:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_MAGIC_CIRCLE_AGAINST_LAW:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_CHAOS_HAMMER:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_DISPEL_LAW:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_ANIMATE_OBJECTS:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_WORD_OF_CHAOS:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_CLOAK_OF_CHAOS:
 | ||
|         case SMP_SPELL_DOMAIN_CHAOS_SUMMON_MONSTER_IX:
 | ||
|         // Death
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_CAUSE_FEAR:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_DEATH_KNELL:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_ANIMATE_DEAD:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_DEATH_WARD:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_SLAY_LIVING:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_CREATE_UNDEAD:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_DESTRUCTION:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_CREATE_GREATER_UNDEAD:
 | ||
|         case SMP_SPELL_DOMAIN_DEATH_WAIL_OF_THE_BANSHEE:
 | ||
|         // Destruction
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_LIGHT_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_SHATTER:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_CONTAGION:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_CRITICAL_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_LIGHT_WOUNDS_MASS:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_HARM:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_DISINTEGRATE:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_EARTHQUAKE:
 | ||
|         case SMP_SPELL_DOMAIN_DESTRUCTION_IMPLOSION:
 | ||
|         // Earth
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_MAGIC_STONE:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_SOFTEN_EARTH_AND_STONE:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_STONE_SHAPE:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_SPIKE_STONES:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_WALL_OF_STONE:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_STONESKIN:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_EARTHQUAKE:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_IRON_BODY:
 | ||
|         case SMP_SPELL_DOMAIN_EARTH_ELEMENTAL_SWARM:
 | ||
|         // Evil
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_PROTECTION_FROM_GOOD:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_DESECRATE:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_MAGIC_CIRCLE_AGAINST_GOOD:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_UNHOLY_BLIGHT:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_DISPEL_GOOD:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_CREATE_UNDEAD:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_BLASPHEMY:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_UNHOLY_AURA:
 | ||
|         case SMP_SPELL_DOMAIN_EVIL_SUMMON_MONSTER_IX:
 | ||
|         // Fire
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_BURNING_HANDS:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_PRODUCE_FLAME:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_RESIST_ENERGY:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_WALL_OF_FIRE:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_FIRE_SHIELD:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_FIRE_SEEDS:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_FIRE_STORM:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_INCENDIARY_CLOUD:
 | ||
|         case SMP_SPELL_DOMAIN_FIRE_ELEMENTAL_SWARM:
 | ||
|         // Good
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_PROTECTION_FROM_EVIL:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_AID:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_MAGIC_CIRCLE_AGAINST_EVIL:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_HOLY_SMITE:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_DISPEL_EVIL:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_BLADE_BARRIER:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_HOLY_WORD:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_HOLY_AURA:
 | ||
|         case SMP_SPELL_DOMAIN_GOOD_SUMMON_MONSTER_IX:
 | ||
|         // Healing
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_LIGHT_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_MODERATE_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_SERIOUS_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_CRITICAL_WOUNDS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_LIGHT_WOUNDS_MASS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_HEAL:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_REGENERATE:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_CURE_CRITICAL_WOUNDS_MASS:
 | ||
|         case SMP_SPELL_DOMAIN_HEALING_HEAL_MASS:
 | ||
|         // Knowledge
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_DETECT_SECRET_DOOS:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_DETECT_THOUGHTS:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_CLAIRAUDIENCE_CLAIRVOYANCE:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_DIVINATION:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_TRUE_SEEING:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_FIND_THE_PATH:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_LEGEND_LORE:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_DISCERN_LOCATION:
 | ||
|         case SMP_SPELL_DOMAIN_KNOWLEDGE_FORESIGHT:
 | ||
|         // Law
 | ||
|         case SMP_SPELL_DOMAIN_LAW_PROTECTION_FROM_CHAOS:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_CALM_EMOTIONS:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_MAGIC_CIRCLE_AGAINST_CHAOS:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_ORDERS_WRATH:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_DISPEL_CHAOS:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_HOLD_MONSTER:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_DICTUM:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_SHIELD_OF_LAW:
 | ||
|         case SMP_SPELL_DOMAIN_LAW_SUMMON_MONSTER_IX:
 | ||
|         // Luck
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_ENTROPIC_SHIELD:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_AID:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_PROTECTION_FROM_ENERGY:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_FREEDOM_OF_MOVEMENT:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_BREAK_ENCHANTMENT:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_MISLEAD:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_SPELL_TURNING:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_MOMENT_OF_PRESCIENCE:
 | ||
|         case SMP_SPELL_DOMAIN_LUCK_MIRACLE:
 | ||
|         // Magic
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_MAGIC_AURA:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_IDENTIFY:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_DISPEL_MAGIC:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_IMBUNE_WITH_SPELL_ABILITY:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_SPELL_RESISTANCE:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_ANTIMAGIC_FIELD:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_SPELL_TURNING:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_PROTECTION_FROM_SPELLS:
 | ||
|         case SMP_SPELL_DOMAIN_MAGIC_MAGES_DISJUNCTION:
 | ||
|         // Plant
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_ENTANGLE:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_BARKSKIN:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_PLANT_GROWTH:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_COMMAND_PLANTS:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_WALL_OF_THORNS:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_REPEL_WOOD:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_ANIMATE_PLANTS:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_CONTROL_PLANTS:
 | ||
|         case SMP_SPELL_DOMAIN_PLANT_SHAMBLER:
 | ||
|         // Protection
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_SANCTUARY:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_SHIELD_OTHER:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_PROTECTION_FROM_ENERGY:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_SPELL_IMMUNITY:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_SPELL_RESISTANCE:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_ANTIMAGIC_FIELD:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_REPULSION:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_MIND_BLANK:
 | ||
|         case SMP_SPELL_DOMAIN_PROTECTION_PRISMATIC_SPHERE:
 | ||
|         // Strength
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_ENLARGE_PERSON:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_BULLS_STRENGTH:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_MAGIC_VESTMENT:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_SPELL_IMMUNITY:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_RIGHTEOUS_MIGHT:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_STONESKIN:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_GRASPING_HAND:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_CLENCHED_FIST:
 | ||
|         case SMP_SPELL_DOMAIN_STRENGTH_CRUSHING_HAND:
 | ||
|         // Sun
 | ||
|         case SMP_SPELL_DOMAIN_SUN_ENDURE_ELEMENTS:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_HEAT_METAL:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_SEARING_LIGHT:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_FIRE_SHIELD:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_FLAME_STRIKE:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_FIRE_SEEDS:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_SUNBEAM:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_SUNBURST:
 | ||
|         case SMP_SPELL_DOMAIN_SUN_PRISMATIC_SPHERE:
 | ||
|         // Travel
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_LONGSTRIDER:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_LOCATE_OBJECT:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_FLY:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_DIMENSION_DOOR:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_TELEPORT:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_FIND_THE_PATH:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_TELEPORT_GREATER:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_PHASE_DOOR:
 | ||
|         case SMP_SPELL_DOMAIN_TRAVEL_ASTRAL_PROJECTION:
 | ||
|         // Trickery
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_DISGUISE_SELF:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_INVISIBILITY:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_NONDETECTION:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_CONFUSION:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_FALSE_VISION:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_MISLEAD:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_SCREEN:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_POLYMORPH_ANY_OBJECT:
 | ||
|         case SMP_SPELL_DOMAIN_TRICKERY_TIME_STOP:
 | ||
|         // War
 | ||
|         case SMP_SPELL_DOMAIN_WAR_MAGIC_WEAPON:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_SPIRITUAL_WEAPON:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_MAGIC_VESTMENT:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_DIVINE_POWER:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_FLAME_STRIKE:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_BLADE_BARRIER:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_POWER_WORD_BLIND:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_POWER_WORD_STUN:
 | ||
|         case SMP_SPELL_DOMAIN_WAR_POWER_WORD_KILL:
 | ||
|         // War
 | ||
|         case SMP_SPELL_DOMAIN_WATER_OBSCURING_MIST:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_FOG_CLOUD:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_WATER_BREATHING:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_CONTROL_WATER:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_ICE_STORM:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_CONE_OF_COLD:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_ACID_FOG:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_HORRID_WILTING:
 | ||
|         case SMP_SPELL_DOMAIN_WATER_ELEMENTAL_SWARM:
 | ||
|         {
 | ||
|             return TRUE;
 | ||
|         }
 | ||
|     }
 | ||
|     return FALSE;
 | ||
| }
 | ||
| 
 | ||
| // Removes ALL domain spells from nLevel on oTarget - removes the casting of them that is!
 | ||
| void SMP_RemoveDomainSpells(object oTarget, int nLevel)
 | ||
| {
 | ||
|     switch(nLevel)
 | ||
|     {
 | ||
|         case 1:
 | ||
|         {
 | ||
|             // Remove all level 1 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_OBSCURING_MIST);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_CALM_ANIMALS);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_PROTECTION_FROM_LAW);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_CAUSE_FEAR);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_LIGHT_WOUNDS);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_MAGIC_STONE);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_PROTECTION_FROM_GOOD);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_BURNING_HANDS);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_PROTECTION_FROM_EVIL);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_LIGHT_WOUNDS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_DETECT_SECRET_DOOS);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_PROTECTION_FROM_CHAOS);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_ENTROPIC_SHIELD);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_MAGIC_AURA);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_ENTANGLE);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_SANCTUARY);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_ENLARGE_PERSON);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_ENDURE_ELEMENTS);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_LONGSTRIDER);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_DISGUISE_SELF);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_MAGIC_WEAPON);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_OBSCURING_MIST);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 2:
 | ||
|         {
 | ||
|             // Remove all level 2 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_WIND_WALL);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_HOLD_ANIMAL);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_SHATTER);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_DEATH_KNELL);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_SHATTER);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_SOFTEN_EARTH_AND_STONE);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_DESECRATE);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_PRODUCE_FLAME);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_AID);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_MODERATE_WOUNDS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_DETECT_THOUGHTS);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_CALM_EMOTIONS);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_AID);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_IDENTIFY);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_BARKSKIN);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_SHIELD_OTHER);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_BULLS_STRENGTH);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_HEAT_METAL);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_LOCATE_OBJECT);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_INVISIBILITY);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_SPIRITUAL_WEAPON);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_FOG_CLOUD);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 3:
 | ||
|         {
 | ||
|             // Remove all level 3 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_GASEOUS_FORM);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_DOMINATE_ANIMAL);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_MAGIC_CIRCLE_AGAINST_LAW);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_ANIMATE_DEAD);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_CONTAGION);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_STONE_SHAPE);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_MAGIC_CIRCLE_AGAINST_GOOD);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_RESIST_ENERGY);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_MAGIC_CIRCLE_AGAINST_EVIL);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_SERIOUS_WOUNDS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_CLAIRAUDIENCE_CLAIRVOYANCE);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_MAGIC_CIRCLE_AGAINST_CHAOS);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_PROTECTION_FROM_ENERGY);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_DISPEL_MAGIC);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_PLANT_GROWTH);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_PROTECTION_FROM_ENERGY);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_MAGIC_VESTMENT);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_SEARING_LIGHT);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_FLY);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_NONDETECTION);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_MAGIC_VESTMENT);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_WATER_BREATHING);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 4:
 | ||
|         {
 | ||
|             // Remove all level 4 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_AIR_WALK);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_SUMMON_NATURES_ALLY_IV);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_CHAOS_HAMMER);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_DEATH_WARD);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_CRITICAL_WOUNDS);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_SPIKE_STONES);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_UNHOLY_BLIGHT);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_WALL_OF_FIRE);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_HOLY_SMITE);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_CRITICAL_WOUNDS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_DIVINATION);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_ORDERS_WRATH);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_FREEDOM_OF_MOVEMENT);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_IMBUNE_WITH_SPELL_ABILITY);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_COMMAND_PLANTS);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_SPELL_IMMUNITY);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_SPELL_IMMUNITY);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_FIRE_SHIELD);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_DIMENSION_DOOR);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_CONFUSION);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_DIVINE_POWER);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_CONTROL_WATER);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 5:
 | ||
|         {
 | ||
|             // Remove all level 5 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_CONTROL_WINDS);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_COMMUNE_WITH_NATURE);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_DISPEL_LAW);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_SLAY_LIVING);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_INFLICT_LIGHT_WOUNDS_MASS);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_WALL_OF_STONE);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_DISPEL_GOOD);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_FIRE_SHIELD);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_DISPEL_EVIL);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_LIGHT_WOUNDS_MASS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_TRUE_SEEING);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_DISPEL_CHAOS);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_BREAK_ENCHANTMENT);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_SPELL_RESISTANCE);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_WALL_OF_THORNS);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_SPELL_RESISTANCE);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_RIGHTEOUS_MIGHT);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_FLAME_STRIKE);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_TELEPORT);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_FALSE_VISION);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_FLAME_STRIKE);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_ICE_STORM);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 6:
 | ||
|         {
 | ||
|             // Remove all level 6 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_CHAIN_LIGHTNING);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_ANTILIFE_SHELL);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_ANIMATE_OBJECTS);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_CREATE_UNDEAD);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_HARM);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_STONESKIN);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_CREATE_UNDEAD);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_FIRE_SEEDS);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_BLADE_BARRIER);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_HEAL);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_FIND_THE_PATH);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_HOLD_MONSTER);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_MISLEAD);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_ANTIMAGIC_FIELD);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_REPEL_WOOD);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_ANTIMAGIC_FIELD);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_STONESKIN);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_FIRE_SEEDS);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_FIND_THE_PATH);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_MISLEAD);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_BLADE_BARRIER);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_CONE_OF_COLD);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 7:
 | ||
|         {
 | ||
|             // Remove all level 7 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_CONTROL_WEATHER);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_ANIMAL_SHAPES);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_WORD_OF_CHAOS);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_DESTRUCTION);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_DISINTEGRATE);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_EARTHQUAKE);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_BLASPHEMY);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_FIRE_STORM);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_HOLY_WORD);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_REGENERATE);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_LEGEND_LORE);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_DICTUM);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_SPELL_TURNING);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_SPELL_TURNING);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_ANIMATE_PLANTS);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_REPULSION);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_GRASPING_HAND);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_SUNBEAM);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_TELEPORT_GREATER);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_SCREEN);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_POWER_WORD_BLIND);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_ACID_FOG);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 8:
 | ||
|         {
 | ||
|             // Remove all level 8 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_WHIRLWIND);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_SUMMON_NATURES_ALLY_VII);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_CLOAK_OF_CHAOS);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_CREATE_GREATER_UNDEAD);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_EARTHQUAKE);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_IRON_BODY);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_UNHOLY_AURA);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_INCENDIARY_CLOUD);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_HOLY_AURA);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_CURE_CRITICAL_WOUNDS_MASS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_DISCERN_LOCATION);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_SHIELD_OF_LAW);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_MOMENT_OF_PRESCIENCE);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_PROTECTION_FROM_SPELLS);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_CONTROL_PLANTS);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_MIND_BLANK);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_CLENCHED_FIST);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_SUNBURST);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_PHASE_DOOR);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_POLYMORPH_ANY_OBJECT);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_POWER_WORD_STUN);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_HORRID_WILTING);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|         case 9:
 | ||
|         {
 | ||
|             // Remove all level 9 domain spells
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_AIR_ELEMENTAL_SWARM);// Air
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_ANIMAL_SHAPECHANGE);// Animal
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_CHAOS_SUMMON_MONSTER_IX);// Chaos
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DEATH_WAIL_OF_THE_BANSHEE);// Death
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_DESTRUCTION_IMPLOSION);// Destruction
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EARTH_ELEMENTAL_SWARM);// Earth
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_EVIL_SUMMON_MONSTER_IX);// Evil
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_FIRE_ELEMENTAL_SWARM);// Fire
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_GOOD_SUMMON_MONSTER_IX);// Good
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_HEALING_HEAL_MASS);// Healing
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_KNOWLEDGE_FORESIGHT);// Knowledge
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LAW_SUMMON_MONSTER_IX);// Law
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_LUCK_MIRACLE);// Luck
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_MAGIC_MAGES_DISJUNCTION);// Magic
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PLANT_SHAMBLER);// Plant
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_PROTECTION_PRISMATIC_SPHERE);// Protection
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_STRENGTH_CRUSHING_HAND);// Strength
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_SUN_PRISMATIC_SPHERE);// Sun
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRAVEL_ASTRAL_PROJECTION);// Travel
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_TRICKERY_TIME_STOP);// Trickery
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WAR_POWER_WORD_KILL);// War
 | ||
|             SMP_DecrementAllRemainingSpellUses(oTarget, SMP_SPELL_DOMAIN_WATER_ELEMENTAL_SWARM);// Water
 | ||
|         }
 | ||
|         break;
 | ||
|     }
 | ||
| }
 | ||
| 
 | ||
| // This will check if, casting from a spell scroll, they have the correct stats
 | ||
| // to do so.
 | ||
| // Do this before UMD. Returns FALSE if they are using UMD or it was used
 | ||
| // sucessfully, or FALSE if they tried to use it and failed a check or something.
 | ||
| int SMP_SpellScrollCastingCheck(int nSpellId, int nSpellLevel, object oCastItem, int nSpellCastClass, object oCaster = OBJECT_SELF)
 | ||
| {
 | ||
| /*
 | ||
|     To have any chance of activating a scroll spell, the scroll user must meet
 | ||
|     the following requirements.
 | ||
| 
 | ||
|     * The spell must be of the correct type (arcane or divine). Arcane
 | ||
|       spellcasters (wizards, sorcerers, and bards) can only use scrolls
 | ||
|       containing arcane spells, and divine spellcasters (clerics, druids,
 | ||
|       paladins, and rangers) can only use scrolls containing divine spells.
 | ||
|       (The type of scroll a character creates is also determined by his or her
 | ||
|       class.)
 | ||
|     * The user must have the spell on his or her class list.
 | ||
|     * The user must have the requisite ability score.
 | ||
| 
 | ||
|     If the user meets all the requirements noted above, and her caster level is
 | ||
|     at least equal to the spell<6C>s caster level, she can automatically activate
 | ||
|     the spell without a check. If she meets all three requirements but her own
 | ||
|     caster level is lower than the scroll spell<6C>s caster level, then she has to
 | ||
|     make a caster level check (DC = scroll<6C>s caster level + 1) to cast the spell
 | ||
|     successfully. If she fails, she must make a DC 5 Wisdom check to avoid a
 | ||
|     mishap (see Scroll Mishaps, below). A natural roll of 1 always fails,
 | ||
|     whatever the modifiers.
 | ||
| */
 | ||
|     // Is it a scroll?
 | ||
|     if(GetBaseItemType(oCastItem) == BASE_ITEM_SCROLL)
 | ||
|     {
 | ||
|         // No: Not a scroll. Can cast normally.
 | ||
|         return TRUE;
 | ||
|     }
 | ||
| 
 | ||
|     // Has it any restrictions on class?
 | ||
|     if(!GetItemHasItemProperty(oCastItem, ITEM_PROPERTY_USE_LIMITATION_CLASS))
 | ||
|     {
 | ||
|         // No: Can cast normally
 | ||
|         return TRUE;
 | ||
|     }
 | ||
| 
 | ||
|     // Do the checks above.
 | ||
|     // Is it on our spell list
 | ||
|     int nClassLevel = SMP_SpellItemHighestLevelActivator(oCastItem, oCaster);
 | ||
|     // If FALSE, we return 0.
 | ||
|     if(nClassLevel == FALSE)
 | ||
|     {
 | ||
|         // No: Using UMD. Can cast normally.
 | ||
|         return TRUE;
 | ||
|     }
 | ||
| 
 | ||
|     // If the user meets all the requirements noted above, and her caster level is
 | ||
|     // at least equal to the spell<6C>s caster level, she can automatically activate
 | ||
|     // the spell without a check.
 | ||
|     int nScrollLevel = SMP_GetSpellScrollLevel(oCastItem);
 | ||
|     if(nClassLevel >= nScrollLevel)
 | ||
|     {
 | ||
|         // All A-OK, as normal. Can cast normally.
 | ||
|         return TRUE;
 | ||
|     }
 | ||
| 
 | ||
|     // Else, need a spellcraft check to cast this scroll.
 | ||
| 
 | ||
|     // If she meets all three requirements but her own caster level is lower
 | ||
|     // than the scroll spell<6C>s caster level, then she has to make a caster
 | ||
|     // level check (DC = scroll<6C>s caster level + 1) to cast the spell successfully.
 | ||
|     int nDC = nScrollLevel + 1;
 | ||
|     if(nClassLevel + d20() >= nDC)
 | ||
|     {
 | ||
|         // All OK. Can cast normally.
 | ||
|         FloatingTextStringOnCreature("*Caster level check for casting a higher level scroll sucessful*", oCaster, FALSE);
 | ||
|         return TRUE;
 | ||
|     }
 | ||
|     // Else, not alright, we must check for random badness
 | ||
| /*
 | ||
|     If she fails, she must make a DC 5 Wisdom check to avoid a mishap (see
 | ||
|     Scroll Mishaps, below). A natural roll of 1 always fails, whatever the
 | ||
|     modifiers.
 | ||
| */
 | ||
|     // Fail visual
 | ||
|     SMP_ApplyVFX(oCaster, EffectVisualEffect(SMP_VFX_FNF_SPELL_FAIL_HAND));
 | ||
| 
 | ||
|     // DC 5 Wisdom Check. A 1 auto-fails.
 | ||
|     int n20 = d20();
 | ||
|     if(GetAbilityScore(oCaster, ABILITY_WISDOM) + n20 <= 5 || n20 == 1)
 | ||
|     {
 | ||
|         SendMessageToPC(oCaster, "Wisdom Ability Check: Fail");
 | ||
| /*
 | ||
|     Scroll Mishaps: When a mishap occurs, the spell on the scroll has a reversed
 | ||
|     or harmful effect. Possible mishaps are given below.
 | ||
| 
 | ||
|     * A surge of uncontrolled magical energy deals 1d6 points of damage per
 | ||
|       spell level to the scroll user.
 | ||
|     * The scroll user suffers some minor but bizarre effect related to the spell
 | ||
|       in some way. Most such effects should last only as long as the original
 | ||
|       spell<6C>s duration, or 2d10 minutes for instantaneous spells.
 | ||
|     * Some innocuous item or items appear in the spell<6C>s area.
 | ||
| */
 | ||
|         FloatingTextStringOnCreature("*You failed to cast the spell on the scroll, and a mishap happened!*", oCaster, FALSE);
 | ||
|         location lTarget = GetSpellTargetLocation();
 | ||
| 
 | ||
|         // Randomly determine the effects.
 | ||
|         switch(d4())
 | ||
|         {
 | ||
|             // 1: d6 points per spell level of damage to the scroll user.
 | ||
|             case 1:
 | ||
|             {
 | ||
|                 // Do damage
 | ||
|                 effect eVis = EffectVisualEffect(VFX_IMP_MIRV);
 | ||
|                 SMP_ApplyDamageVFXToObject(oCaster, eVis, d6(nScrollLevel));
 | ||
|             }
 | ||
|             break;
 | ||
|             // 2: Minor but bizarre effect...this case, it is being a visual effect
 | ||
|             case 2:
 | ||
|             {
 | ||
|                 effect eDur = EffectVisualEffect(SMP_VFX_DUR_SCROLL_MISHAP);
 | ||
|                 float fDuration = SMP_GetRandomDuration(SMP_MINUTES, 10, 2, FALSE);
 | ||
|                 SMP_ApplyDuration(oCaster, eDur, fDuration);
 | ||
|             }
 | ||
|             break;
 | ||
|             // "Some innocuous item or items appear in the spell<6C>s area."
 | ||
|             case 3:
 | ||
|             {
 | ||
|                 // Create some stuff there.
 | ||
| 
 | ||
|             }
 | ||
|             break;
 | ||
|             // Some bizarre visual effect at the spells location
 | ||
|             case 4:
 | ||
|             {
 | ||
|                 effect eImpact = EffectVisualEffect(SMP_VFX_FNF_SCROLL_MISHAP);
 | ||
|                 SMP_ApplyLocationVFX(lTarget, eImpact);
 | ||
|             }
 | ||
|             break;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     // Passed, but cannot use the scroll still!
 | ||
|     SendMessageToPC(oCaster, "Wisdom Ability Check: Pass");
 | ||
|     FloatingTextStringOnCreature("*You failed to cast the spell on the scroll, but no mishap happens*", oCaster, FALSE);
 | ||
| 
 | ||
|     // Not good. something bad happened. Stop the spell.
 | ||
|     return FALSE;
 | ||
| }
 | ||
| 
 | ||
| // Returns the level of the spell on the scroll
 | ||
| int SMP_GetSpellScrollLevel(object oScroll)
 | ||
| {
 | ||
|     // Check item properties
 | ||
|     itemproperty IP_Check = GetFirstItemProperty(oScroll);
 | ||
|     while(GetIsItemPropertyValid(IP_Check))
 | ||
|     {
 | ||
|         // Check for the spell on the scroll.
 | ||
|         if(GetItemPropertyType(IP_Check) == ITEM_PROPERTY_CAST_SPELL)
 | ||
|         {
 | ||
|             // only one property for each scroll. First one, return the level.
 | ||
|             // Get it from the 2da file.
 | ||
|             return SMP_ArrayItemCasterLevel(GetItemPropertySubType(IP_Check));
 | ||
|         }
 | ||
|         // Next property
 | ||
|         IP_Check = GetNextItemProperty(oScroll);
 | ||
|     }
 | ||
|     return FALSE;
 | ||
| }
 | ||
| 
 | ||
| // End of file Debug lines. Uncomment below "/*" with "//" and compile.
 | ||
| /*
 | ||
| void main()
 | ||
| {
 | ||
|     return;
 | ||
| }
 | ||
| //*/
 |