This script fixes the use magic device (UMD) and spell failure chance for scrolls. If a caster uses a scroll that is higher level then they can cast normally, it has a misfire chance appropriate to the 3rd edition rules. And if a rogue/bard uses UMD the DC is set appropriately to the PHB and failure by 10 or more results in a misfire. The magical damage for the misfire is settable in a switch and can be set to the 3rd edition standard of 1d6 per spell level, although by default it is only 2d6.
The script itself[]
This include file returns a TRUE of the spell works and a FALSE if the spell fails. By putting the include file into the spell script and then putting a conditional ( if...{ at the beginning of the spell script and } at the end of the entire main function of the spell script you will give a spell failure chance and misfire chance as per the PHB to scrolls. The package that can be downloaded here ( Click Here ) contains ALL spells modified to include this script.
NOTE: It is advised that you just download the package from the NWVault link above. But the include file script is included here for examination, as well as a single sample script to show how it should be used.
//:://///////////////////////////////////////////// //:: Spell Failure for Scrolls //:: SpellFail_inc.nss //:: Copyright (c) 2002 Bioware Corp. //::////////////////////////////////////////////// /* This script is an include file that, when incorporated into a spell script allows the proper (3rd edition) scroll failure and Use Magic Device Checks to be made. Failure can result in a mishap, doing damage to the caster. */ ///////////////////////////////////////////////////////// //::////////////////////////////////////////////// //:: Created By: Syrsuro //:: Created On: 12/23/02 //::////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////// /* Installation instructions. This include file can be attached to any spell script. The SpellFailure routing will return True of the spell works and False if the spell fails. Simply including the entirity of the spell script in an if/then statement with SpellFailure as a conditional will result in spell failure and misfire damage as appropriate */ /////////////////////////////////////////////////////////////////////////////////////////////// //void main() { } int UMDNeeded(int nSpellID); int LevelClass(int nSpell); ///How Much Damge will a MisFired Scroll Cause? int DAMAGE = d6(2); //d6(2); //If set to -1 a misfire will cause a spell to do 1d6 per spell level. ///What is the Base DC of a scroll using UMD (DC = BaseDC + Spell Level ///Making this number lower will make it easier for rogues to read scrolls successfuly. int BASE_DC = 25; //3rd Edition Default BaseDC = 25; int DEBUG = 0; ///Turn On (1) or Off (0) Debug SpeakStrings. int SpellFailure() { int nSpellID = GetSpellId(); int nSpellWorks = TRUE; /////Determine whether UMD is needed. int nType = GetBaseItemType(GetSpellCastItem()); int nSpellLevel = LevelClass(nSpellID); nSpellLevel = nSpellLevel - ((nSpellLevel/10)*10); int nDamage = 0; if (DAMAGE < 0) nDamage = d6(nSpellLevel); else nDamage = DAMAGE; int nSkill = GetSkillRank(SKILL_USE_MAGIC_DEVICE); int nDieRoll = d20(); if (GetSkillRank(SKILL_SPELLCRAFT) > 5) nSkill = nSkill+2; if ((nType == 56) || (nType == 75))/////It is a scroll { if (DEBUG == 1) SpeakString ("Reading a Scroll"); int nUMD = UMDNeeded(nSpellID); if (nUMD == 1) ///Caster is not high enough level or lacks ability score { nSpellWorks = FALSE; if (DEBUG ==1 )SpeakString("WIS: d20 = " + IntToString(nDieRoll) + " Modified Roll = " +IntToString(nDieRoll + GetAbilityModifier(ABILITY_WISDOM)) + " vs 5" ); if (nDieRoll == 1) { ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(nDamage),OBJECT_SELF); SpeakString("Spell Failure: Level -Mishap",TALKVOLUME_WHISPER); } else if (nDieRoll == 20) SpeakString("Spell Failure: Level",TALKVOLUME_WHISPER); else if (nDieRoll + GetAbilityModifier(ABILITY_WISDOM) < 5) { ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(nDamage),OBJECT_SELF); SpeakString("Spell Failure: Level -Mishap",TALKVOLUME_WHISPER); } else SpeakString("Spell Failure: Level",TALKVOLUME_WHISPER); } else if (nUMD == -1) { int nUMD_DC = BASE_DC + nSpellLevel; int nUMDCheck = nDieRoll + nSkill; if (DEBUG == 1) SpeakString("d20 = " + IntToString(nDieRoll) + " Modified Roll = " +IntToString(nUMDCheck) + " vs DC " + IntToString(nUMD_DC) ); if (nDieRoll == 1) { nSpellWorks = FALSE; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(nDamage),OBJECT_SELF); SpeakString("Spell Failure: UMD- Mishap",TALKVOLUME_WHISPER); } else if (nDieRoll == 20) { nSpellWorks = TRUE; SpeakString("UMD Successful",TALKVOLUME_WHISPER); } else if (nUMDCheck < nUMD_DC - 9) { nSpellWorks = FALSE; ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectDamage(nDamage),OBJECT_SELF); SpeakString("Spell Failure: UMD- Mishap",TALKVOLUME_WHISPER); } else if (nUMDCheck < nUMD_DC) { nSpellWorks = FALSE; SpeakString("Spell Failure: UMD",TALKVOLUME_WHISPER); } else ///nUMD Successful { nSpellWorks = TRUE; SpeakString("UMD Successful",TALKVOLUME_WHISPER); } } else ///Caster Check Successful { nSpellWorks = TRUE; SpeakString ("Caster Check Successful",TALKVOLUME_WHISPER); } } else if (DEBUG ==1) SpeakString ("Not a Scroll"); return nSpellWorks; } ////Determines whether the spell can be cast by using natural spell casting ability. int UMDNeeded(int nSpellID) { int nUMD = 0; int nSpLevel = LevelClass(nSpellID); int nChar = GetAbilityScore(OBJECT_SELF,ABILITY_CHARISMA); int nInt = GetAbilityScore(OBJECT_SELF,ABILITY_STRENGTH); int nWis = GetAbilityScore(OBJECT_SELF,ABILITY_WISDOM); object Caster = OBJECT_SELF; /////Determining the Highest Level Spells Castable by the Caster int nCleric = GetLevelByClass(CLASS_TYPE_CLERIC,Caster); int nDivine = nCleric; int nCMax = (nCleric +1)/2; if ((nWis - 10) < nCMax) nCMax = nWis-10; int nDruid = GetLevelByClass(CLASS_TYPE_DRUID,Caster); nDivine = nDivine + nDruid; int nDMax = (nDruid +1)/2; if ((nWis - 10) < nCMax) nCMax = nWis-10; int nPaladin = GetLevelByClass(CLASS_TYPE_PALADIN,Caster); nDivine = nDivine + nPaladin/2; int nPMax = ((nPaladin+1)/3)-1; if (nPMax > 4) nPMax = 4; if ((nWis - 10) < nCMax) nCMax = nWis-10; int nRanger = GetLevelByClass(CLASS_TYPE_RANGER,Caster); nDivine = nDivine + nRanger/2; int nRMax = ((nRanger+1)/3)-1; if (nRMax > 4) nRMax = 4; if ((nWis - 10) < nCMax) nCMax = nWis-10; int nSorcerer = GetLevelByClass(CLASS_TYPE_SORCERER,Caster); int nArcane = nSorcerer; int nSMax = nSorcerer/2; if ((nChar - 10) < nCMax) nCMax = nChar-10; int nWizard = GetLevelByClass(CLASS_TYPE_WIZARD,Caster); nArcane = nArcane + nWizard; int nWMax = (nWizard+1)/2; if ((nInt - 10) < nCMax) nCMax = nInt-10; int nBard = GetLevelByClass(CLASS_TYPE_BARD,Caster); nArcane = nArcane + nBard/2; int nBMax = (nBard+2)/3; if (nBMax > 6) nBMax = 6; if ((nChar - 10) < nCMax) nCMax = nChar-10; /////Determine what the highest level spell they can use overall is. int nCLevel = nArcane; if (nDivine > nCLevel) nCLevel = nDivine; int nDivMax = nCMax; if (nDMax > nDivMax) nDivMax = nDMax; if (nPMax > nDivMax) nDivMax = nPMax; if (nRMax > nDivMax) nDivMax = nRMax; int nArcMax = nWMax; if (nSMax > nArcMax) nArcMax = nSMax; if (nBMax > nArcMax) nArcMax = nBMax; int nSpellMax = nDivMax; if (nArcMax > nSpellMax) nSpellMax = nArcMax; int nDieRoll = d20(); if (nSpLevel > 29) return -1; else if (nSpLevel > 19) { if (DEBUG == 1) SpeakString ("Arcane"); nSpLevel = nSpLevel - 20; if (nArcMax == 0) nUMD = -1;///UMD needed else if (nSpLevel > nArcMax) if(nArcane > (GetSkillRank(SKILL_USE_MAGIC_DEVICE)-25)*2) ///Caster Level or UMD? { if (DEBUG == 1) SpeakString("CasterCheck Die = " + IntToString(nDieRoll) + " + " + IntToString(nArcane) + " vs DC " + IntToString(nSpLevel*2)); if (nDieRoll == 1) nUMD = 1; ////Caster too low (fail on one) else if (nDieRoll + nArcane < nSpLevel*2) nUMD = 1; ////Caster too low - failed caster check. else nUMD = 0; /////Caster succeeds in casting. } else nUMD = -1; ///Use UMD else nUMD = 0; ///Able to cast safely } else if (nSpLevel > 9) { if (DEBUG == 1) SpeakString("Divine"); nSpLevel = nSpLevel - 10; if (nDivMax == 0) nUMD = -1; ///UMD needed else if (nSpLevel > nDivMax) if(nDivine > (GetSkillRank(SKILL_USE_MAGIC_DEVICE)-25)*2) ///Caster Level or UMD? { if (DEBUG ==1) SpeakString("CasterCheck Die = " + IntToString(nDieRoll) + " + " + IntToString(nDivine) + " vs DC " + IntToString(nSpLevel*2)); if (nDieRoll == 1) nUMD = 1; ///Caster too low - (fail on one) else if (nDieRoll + nDivine < nSpLevel*2) nUMD = 1; ////Caster too low - failed caster check. else nUMD = 0; /////Caster succeeds in casting } else nUMD = -1; //Use UMD else nUMD = 0; ////Able to cast safely } else { if (DEBUG ==1) SpeakString ("Both"); if (nSpellMax == 0) nUMD = -1;///UMD needed else if (nSpLevel > nSpellMax) if(nCLevel > (GetSkillRank(SKILL_USE_MAGIC_DEVICE)-25)*2) ///Caster Level or UMD? { if (DEBUG == 1) SpeakString("CasterCheck Die = " + IntToString(nDieRoll) + " + " + IntToString(nCLevel) + " vs DC " + IntToString(nSpLevel*2)); if (nDieRoll == 1) nUMD = 1; ///Caster too low - fail on one. else if (nDieRoll + nCLevel < nSpLevel*2) nUMD = 1; ////Spell too high level for caster else nUMD = 0; /////Caster succeeds in casting } else nUMD = -1; ///Use UMD else nUMD = 0; ///Able to cast safely } return nUMD; } int LevelClass(int nSpell) { int nArcane = FALSE; int nDivine = FALSE; int nLevel = 10; if (DEBUG == 1) SpeakString ("SpellID = " + IntToString(nSpell)); switch (nSpell) { case 0: nArcane= TRUE; nLevel = 6; //int SPELL_ACID_FOG break; case 1: nDivine = TRUE; nLevel = 2; //int SPELL_AID = 1; break; case 2: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_ANIMATE_DEAD = 2; break; case 3: nDivine = TRUE; nLevel = 2; //intSPELL_BARKSKIN = 3; break; case 4: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_BESTOW_CURSE = 4; break; case 5: nDivine = TRUE; nLevel = 6; //intSPELL_BLADE_BARRIER = 5; break; case 6: nDivine = TRUE; nLevel = 1; //intSPELL_BLESS = 6; break; case 7: //intSPELL_BLESS_WEAPON = 7; break; case 8: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_BLINDNESS_AND_DEAFNESS = 8; break; case 9: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_BULLS_STRENGTH = 9; break; case 10: nArcane = TRUE; nLevel = 1; //intSPELL_BURNING_HANDS = 10; break; case 11: nDivine = TRUE; nLevel = 3; //intSPELL_CALL_LIGHTNING = 11; break; //case 12: //intSPELL_CALM_EMOTIONS = 12; break; case 13: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_CATS_GRACE = 13; break; case 14: nArcane = TRUE; nLevel = 6; //intSPELL_CHAIN_LIGHTNING = 14; break; case 15: nArcane = TRUE; nLevel = 3; //intSPELL_CHARM_MONSTER = 15; break; case 16: nArcane = TRUE; nLevel = 1; //intSPELL_CHARM_PERSON = 16; break; case 17: nDivine = TRUE; nLevel = 2; //intSPELL_CHARM_PERSON_OR_ANIMAL = 17; break; case 18: nArcane = TRUE; nLevel = 6; //intSPELL_CIRCLE_OF_DEATH = 18; break; case 19: //intSPELL_CIRCLE_OF_DOOM = 19; break; case 20: nArcane = TRUE; nLevel = 3; //intSPELL_CLAIRAUDIENCE_AND_CLAIRVOYANCE = 20; break; case 21: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_CLARITY = 21; break; case 22: //intSPELL_CLOAK_OF_CHAOS = 22; break; case 23: nArcane = TRUE; nLevel = 5; //intSPELL_CLOUDKILL = 23; break; case 24: nArcane = TRUE; nLevel = 1; //intSPELL_COLOR_SPRAY = 24; break; case 25: nArcane = TRUE; nLevel = 5; //intSPELL_CONE_OF_COLD = 25; break; case 26: nArcane = TRUE; nLevel = 3; //intSPELL_CONFUSION = 26; break; case 27: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_CONTAGION = 27; break; case 28: nArcane = TRUE; nLevel = 7; //intSPELL_CONTROL_UNDEAD = 28; break; case 29: nDivine = TRUE; nLevel = 8; //intSPELL_CREATE_GREATER_UNDEAD = 29; break; case 30: nArcane = TRUE; nDivine = TRUE; nLevel = 6; //intSPELL_CREATE_UNDEAD = 30; break; case 31: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_CURE_CRITICAL_WOUNDS = 31; break; case 32: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_CURE_LIGHT_WOUNDS = 32; break; case 33: nArcane = TRUE; nDivine = TRUE; nLevel = 0; //intSPELL_CURE_MINOR_WOUNDS = 33; break; case 34: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_CURE_MODERATE_WOUNDS = 34; break; case 35: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_CURE_SERIOUS_WOUNDS = 35; break; case 36: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_DARKNESS = 36; break; case 37: nArcane = TRUE; nLevel = 0; break; //intSPELL_DAZE = 37; break; case 38: nDivine = TRUE; nLevel = 4; //intSPELL_DEATH_WARD = 38; break; case 39: nArcane = TRUE; nLevel = 7; //intSPELL_DELAYED_BLAST_FIREBALL = 39; break; case 40: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_DISMISSAL = 40; break; case 41: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_DISPEL_MAGIC = 41; break; case 42: nDivine = TRUE; nLevel = 4; //intSPELL_DIVINE_POWER = 42; break; case 43: nDivine = TRUE; nLevel = 3; //intSPELL_DOMINATE_ANIMAL = 43; break; case 44: nArcane = TRUE; nLevel = 9; //intSPELL_DOMINATE_MONSTER = 44; break; case 45: nArcane = TRUE; nLevel = 4; //intSPELL_DOMINATE_PERSON = 45; break; case 46: nDivine = TRUE; nLevel = 1; //intSPELL_DOOM = 46; break; case 47: nArcane = TRUE; nLevel = 4; //intSPELL_ELEMENTAL_SHIELD = 47; break; case 48: nDivine = TRUE; nLevel = 9; //intSPELL_ELEMENTAL_SWARM = 48; break; case 49: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_ENDURANCE = 49; break; case 50: nArcane = TRUE; nLevel = 1; //intSPELL_ENDURE_ELEMENTS = 50; break; case 51: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //intSPELL_ENERGY_DRAIN = 51; break; case 52: nArcane = TRUE; nLevel = 4; //intSPELL_ENERVATION = 52; break; case 53: nDivine = TRUE; nLevel = 1; //intSPELL_ENTANGLE = 53; break; case 54: nArcane = TRUE; nLevel = 3; //intSPELL_FEAR = 54; break; case 55: nArcane = TRUE; nLevel = 5; //intSPELL_FEEBLEMIND = 55; break; case 56: nArcane = TRUE; nDivine = TRUE; nLevel = 7; //intSPELL_FINGER_OF_DEATH = 56; break; case 57: nDivine = TRUE; nLevel = 7; //intSPELL_FIRE_STORM = 57; break; case 58: nArcane = TRUE; nLevel = 3; //intSPELL_FIREBALL = 58; break; case 59: nArcane = TRUE; nLevel = 3; //intSPELL_FLAME_ARROW = 59; break; case 60: nDivine = TRUE; nLevel = 2; //intSPELL_FLAME_LASH = 60; break; case 61: nDivine = TRUE; nLevel = 4; //intSPELL_FLAME_STRIKE = 61; break; case 62: nDivine = TRUE; nLevel = 4; //intSPELL_FREEDOM_OF_MOVEMENT = 62; break; case 63: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //intSPELL_GATE = 63; break; case 64: nArcane = TRUE; nLevel = 2; //intSPELL_GHOUL_TOUCH = 64; break; case 65: nArcane = TRUE; nLevel = 6; //intSPELL_GLOBE_OF_INVULNERABILITY = 65; break; case 66: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_GREASE = 66; break; case 67: nArcane = TRUE; nDivine = TRUE; nLevel = 6; //intSPELL_GREATER_DISPELLING = 67; break; case 68: //intSPELL_GREATER_MAGIC_WEAPON = 68; break; case 69: nArcane = TRUE; nLevel = 8; //intSPELL_GREATER_PLANAR_BINDING = 69; break; case 70: nDivine = TRUE; nLevel = 7; //intSPELL_GREATER_RESTORATION = 70; break; case 71: nArcane = TRUE; nLevel = 5; //intSPELL_GREATER_SHADOW_CONJURATION = 71; break; case 72: nArcane = TRUE; nLevel = 6; //intSPELL_GREATER_SPELL_BREACH = 72; break; case 73: nArcane = TRUE; nLevel = 9; //intSPELL_GREATER_SPELL_MANTLE = 73; break; case 74: nArcane = TRUE; nDivine = TRUE; nLevel = 6; //intSPELL_GREATER_STONESKIN = 74; break; // case 75: //intSPELL_GUST_OF_WIND = 75; break; case 76: nDivine = TRUE; nLevel = 4; //intSPELL_HAMMER_OF_THE_GODS = 76; break; case 77: nDivine = TRUE; nLevel = 6; //intSPELL_HARM = 77; break; case 78: nArcane = TRUE; nLevel = 3; //intSPELL_HASTE = 78; break; case 79: nDivine = TRUE; nLevel = 6; //intSPELL_HEAL = 79; break; case 80: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //intSPELL_HEALING_CIRCLE = 80; break; case 81: nDivine = TRUE; nLevel = 2; //intSPELL_HOLD_ANIMAL = 81; break; case 82: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_HOLD_MONSTER = 82; break; case 83: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_HOLD_PERSON = 83; break; case 84: nDivine = TRUE; nLevel = 8; //intSPELL_HOLY_AURA; = 84; break; case 85: //intSPELL_HOLY_SWORD = 85; break; case 86: nArcane = TRUE; nLevel = 1; //intSPELL_IDENTIFY = 86; break; case 87: nDivine = TRUE; nLevel = 9; //intSPELL_IMPLOSION = 87; break; case 88: nArcane = TRUE; nLevel = 4; //intSPELL_IMPROVED_INVISIBILITY = 88; break; case 89: nArcane = TRUE; nLevel = 8; //intSPELL_INCENDIARY_CLOUD = 89; break; case 90: nArcane = TRUE; nLevel = 2; //intSPELL_INVISIBILITY = 90; break; case 91: nDivine = TRUE; nLevel = 3; //intSPELL_INVISIBILITY_PURGE = 91; break; case 92: nArcane = TRUE; nLevel = 3; //intSPELL_INVISIBILITY_SPHERE = 92; break; case 93: nArcane = TRUE; nLevel = 2; //intSPELL_KNOCK = 93; break; case 94: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_LESSER_DISPEL = 94; break; case 95: nArcane = TRUE; nLevel = 5; //intSPELL_LESSER_MIND_BLANK = 95; break; case 96: nArcane = TRUE; nLevel = 5; //intSPELL_LESSER_PLANAR_BINDING = 96; break; case 97: nDivine = TRUE; nLevel = 2; //intSPELL_LESSER_RESTORATION = 97; break; case 98: nArcane = TRUE; nLevel = 4; //intSPELL_LESSER_SPELL_BREACH = 98; break; case 99: nArcane = TRUE; nLevel = 5; //intSPELL_LESSER_SPELL_MANTLE = 99; break; case 100: nArcane = TRUE; nDivine = TRUE; nLevel = 0; //intSPELL_LIGHT = 100; break; case 101: nArcane = TRUE; nLevel = 3; //intSPELL_LIGHTNING_BOLT = 101; break; case 102: nArcane = TRUE; nLevel = 1; //intSPELL_MAGE_ARMOR = 102; break; case 103: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_MAGIC_CIRCLE_AGAINST_CHAOS = 103; break; case 104: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_MAGIC_CIRCLE_AGAINST_EVIL = 104; break; case 105: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_MAGIC_CIRCLE_AGAINST_GOOD = 105; break; case 106: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_MAGIC_CIRCLE_AGAINST_LAW = 106; break; case 107: nArcane = TRUE; nLevel = 1; //intSPELL_MAGIC_MISSILE = 107; break; case 108: //intSPELL_MAGIC_VESTMENT = 108; break; case 109: //intSPELL_MAGIC_WEAPON = 109; break; case 110: nArcane = TRUE; nLevel = 8; //intSPELL_MASS_BLINDNESS_AND_DEAFNESS = 110; break; case 111: nArcane = TRUE; nLevel = 8; //intSPELL_MASS_CHARM = 111; break; // case 112: //intSPELL_MASS_DOMINATION = 112; break; case 113: nArcane = TRUE; nLevel = 6; //intSPELL_MASS_HASTE = 113; break; case 114: nDivine = TRUE; nLevel = 8; //intSPELL_MASS_HEAL = 114; break; case 115: nArcane = TRUE; nLevel = 2; //intSPELL_MELFS_ACID_ARROW = 115; break; case 116: nArcane = TRUE; nLevel = 9; //intSPELL_METEOR_SWARM = 116; break; case 117: nArcane = TRUE; nLevel = 8; //intSPELL_MIND_BLANK = 117; break; case 118: nArcane = TRUE; nLevel = 5; //intSPELL_MIND_FOG = 118; break; case 119: nArcane = TRUE; nLevel = 4; //intSPELL_MINOR_GLOBE_OF_INVULNERABILITY = 119; break; case 120: nArcane = TRUE; nLevel = 2; //intSPELL_GHOSTLY_VISAGE = 120; break; case 121: nArcane = TRUE; nLevel = 5; //intSPELL_ETHEREAL_VISAGE = 121; break; case 122: nArcane = TRUE; nLevel = 9; //intSPELL_MORDENKAINENS_DISJUNCTION = 122; break; case 123: nArcane = TRUE; nLevel = 7; //intSPELL_MORDENKAINENS_SWORD = 123; break; case 124: nDivine = TRUE; nLevel = 8; //intSPELL_NATURES_BALANCE = 124; break; case 125: nDivine = TRUE; nLevel = 3; //intSPELL_NEGATIVE_ENERGY_PROTECTION = 125; break; case 126: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_NEUTRALIZE_POISON = 126; break; case 127: nArcane = TRUE; nLevel = 4; //intSPELL_PHANTASMAL_KILLER = 127; break; case 128: nArcane = TRUE; nLevel = 6; //intSPELL_PLANAR_BINDING = 128; break; case 129: nDivine = TRUE; nLevel = 3; //intSPELL_POISON = 129; break; case 130: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_POLYMORPH_SELF = 130; break; case 131: nArcane = TRUE; nLevel = 9; //intSPELL_POWER_WORD_KILL = 131; break; case 132: nArcane = TRUE; nLevel = 7; //intSPELL_POWER_WORD_STUN = 132; break; case 133: nDivine = TRUE; nLevel = 3; //intSPELL_PRAYER = 133; break; case 134: nArcane = TRUE; nDivine = TRUE; nLevel = 8; //intSPELL_PREMONITION = 134; break; case 135: nArcane = TRUE; nLevel = 7; //intSPELL_PRISMATIC_SPRAY = 135; break; case 136: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_PROTECTION__FROM_CHAOS = 136; break; case 137: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_PROTECTION_FROM_ELEMENTS = 137; break; case 138: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_PROTECTION_FROM_EVIL = 138; break; case 139: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_PROTECTION_FROM_GOOD = 139; break; case 140: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_PROTECTION_FROM_LAW = 140; break; case 141: nArcane = TRUE; nLevel = 7; //intSPELL_PROTECTION_FROM_SPELLS = 141; break; case 142: nDivine = TRUE; nLevel = 5; //intSPELL_RAISE_DEAD = 142; break; case 143: nArcane = TRUE; nLevel = 1; //intSPELL_RAY_OF_ENFEEBLEMENT = 143; break; case 144: nArcane = TRUE; nLevel = 0; //intSPELL_RAY_OF_FROST = 144; break; case 145: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_REMOVE_BLINDNESS_AND_DEAFNESS = 145; break; case 146: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_REMOVE_CURSE = 146; break; case 147: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_REMOVE_DISEASE = 147; break; case 148: nDivine = TRUE; nLevel = 1; //intSPELL_REMOVE_FEAR = 148; break; case 149: nDivine = TRUE; nLevel = 2; //intSPELL_REMOVE_PARALYSIS = 149; break; case 150: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_RESIST_ELEMENTS = 150; break; case 151: nArcane = TRUE; nDivine = TRUE; nLevel = 0; //intSPELL_RESISTANCE = 151; break; case 152: nDivine = TRUE; nLevel = 4; //intSPELL_RESTORATION = 152; break; case 153: nDivine = TRUE; nLevel = 7; //intSPELL_RESURRECTION = 153; break; case 154: nDivine = TRUE; nLevel = 1; //intSPELL_SANCTUARY = 154; break; case 155: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_SCARE = 155 break; case 156: nDivine = TRUE; nLevel = 3; //intSPELL_SEARING_LIGHT = 156; break; case 157: nArcane = TRUE; nLevel = 2; //intSPELL_SEE_INVISIBILITY = 157; break; case 158: nArcane = TRUE; nLevel = 6; //intSPELL_SHADES = 158; break; case 159: nArcane = TRUE; nLevel = 4; //intSPELL_SHADOW_CONJURATION = 159; break; case 160: nArcane = TRUE; nLevel = 7; //intSPELL_SHADOW_SHIELD = 160; break; case 161: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //intSPELL_SHAPECHANGE = 161; break; case 162: //intSPELL_SHIELD_OF_LAW = 162; break; case 163: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_SILENCE = 163; break; case 164: nDivine = TRUE; nLevel = 5; //intSPELL_SLAY_LIVING = 164; break; case 165: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_SLEEP = 165; break; case 166: nArcane = TRUE; nLevel = 3; //intSPELL_SLOW = 166; break; case 167: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_SOUND_BURST = 167; break; case 168: nDivine = TRUE; nLevel = 5; //intSPELL_SPELL_RESISTANCE = 168; break; case 169: nArcane = TRUE; nLevel = 7; //intSPELL_SPELL_MANTLE = 169; break; case 170: //intSPELL_SPHERE_OF_CHAOS = 170; break; case 171: nArcane = TRUE; nLevel = 3; //intSPELL_STINKING_CLOUD = 171; break; case 172: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_STONESKIN = 172; break; case 173: nDivine = TRUE; nLevel = 9; //intSPELL_STORM_OF_VENGEANCE = 173; break; case 174: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //intSPELL_SUMMON_CREATURE_I = 174; break; case 175: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //intSPELL_SUMMON_CREATURE_II = 175; break; case 176: nArcane = TRUE; nDivine = TRUE; nLevel = 3; //intSPELL_SUMMON_CREATURE_III = 176; break; case 177: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_SUMMON_CREATURE_IV = 177; break; case 178: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //intSPELL_SUMMON_CREATURE_IX = 178; break; case 179: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //intSPELL_SUMMON_CREATURE_V = 179; break; case 180: nArcane = TRUE; nDivine = TRUE; nLevel = 6; //intSPELL_SUMMON_CREATURE_VI = 180; break; case 181: nArcane = TRUE; nDivine = TRUE; nLevel = 7; //intSPELL_SUMMON_CREATURE_VII = 181; break; case 182: nArcane = TRUE; nDivine = TRUE; nLevel = 8; //intSPELL_SUMMON_CREATURE_VIII = 182; break; case 183: nDivine = TRUE; nLevel = 8; //intSPELL_SUNBEAM = 183; break; case 184: nArcane = TRUE; nLevel = 6; //intSPELL_TENSERS_TRANSFORMATION = 184; break; case 185: nArcane = TRUE; nLevel = 9; //intSPELL_TIME_STOP = 185; break; case 186: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //intSPELL_TRUE_SEEING = 186; break; case 187: nDivine = TRUE; nLevel = 8; //intSPELL_UNHOLY_AURnArcane = TRUE; = 187; break; case 188: nArcane = TRUE; nLevel = 3; //intSPELL_VAMPIRIC_TOUCH = 188; break; case 189: nDivine = TRUE; nLevel = 0; //intSPELL_VIRTUE = 189; break; case 190: nArcane = TRUE; nLevel = 9; //intSPELL_WAIL_OF_THE_BANSHEE = 190; break; case 191: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //intSPELL_WALL_OF_FIRE = 191; break; case 192: nArcane = TRUE; nLevel = 2; //intSPELL_WEB = 192; break; case 193: nArcane = TRUE; nLevel = 9; //intSPELL_WEIRD = 193; break; case 194: nDivine = TRUE; nLevel = 7; //intSPELL_WORD_OF_FAITH = 194; break; case 324: nArcane = TRUE; nLevel = 6; //int SPELL_SHADES_SUMMON_SHADOW = 324; break; case 340 : nArcane = TRUE; nLevel = 6; //int SPELL_SHADES_CONE_OF_COLD = 340; break; case 341:nArcane = TRUE; nLevel = 6; //int SPELL_SHADES_FIREBALL = 341; break; case 342:nArcane = TRUE; nLevel = 6; //int SPELL_SHADES_STONESKIN = 342; break; case 343: nArcane = TRUE; nLevel = 6; //int SPELL_SHADES_WALL_OF_FIRE = 343; break; case 344: nArcane = TRUE; nLevel = 4; //int SPELL_SHADOW_CONJURATION_SUMMON_SHADOW = 344; break; case 345: nArcane = TRUE; nLevel = 4; //int SPELL_SHADOW_CONJURATION_DARKNESS = 345; break; case 346: nArcane = TRUE; nLevel = 4; //int SPELL_SHADOW_CONJURATION_INIVSIBILITY = 346; break; case 347: nArcane = TRUE; nLevel = 4; //int SPELL_SHADOW_CONJURATION_MAGE_ARMOR = 347; break; case 348: nArcane = TRUE; nLevel = 4; //int SPELL_SHADOW_CONJURATION_MAGIC_MISSILE = 348; break; case 349: nArcane = TRUE; nLevel = 5; //int SPELL_GREATER_SHADOW_CONJURATION_SUMMON_SHADOW = 349; break; case 350: nArcane = TRUE; nLevel = 5; //int SPELL_GREATER_SHADOW_CONJURATION_ACID_ARROW = 350; break; case 351: nArcane = TRUE; nLevel = 5; //int SPELL_GREATER_SHADOW_CONJURATION_MIRROR_IMAGE = 351; break; case 352: nArcane = TRUE; nLevel = 5; //int SPELL_GREATER_SHADOW_CONJURATION_WEB = 352; break; case 353: nArcane = TRUE; nLevel = 5; //int SPELL_GREATER_SHADOW_CONJURATION_MINOR_GLOBE = 353; break; case 354: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //int SPELL_EAGLE_SPLEDOR = 354; break; case 355:nArcane = TRUE; nDivine = TRUE; nLevel = 2; //int SPELL_OWLS_WISDOM = 355; break; case 356: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //int SPELL_FOXS_CUNNING = 356; break; case 357: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_EAGLE_SPLENDOR = 357; break; case 358: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_OWLS_WISDOM = 358; break; case 359: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_FOXS_CUNNING = 359; break; case 360: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_BULLS_STRENGTH = 360; break; case 361: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_CATS_GRACE = 361; break; case 362: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_GREATER_ENDURANCE = 362; break; case 363: nDivine = TRUE; nLevel = 5; //int SPELL_AWAKEN = 363; break; case 364: nDivine = TRUE; nLevel = 7; //int SPELL_CREEPING_DOOM = 364; break; case 365: nArcane = TRUE; nLevel = 1;//int SPELL_DARKVISION (Ultravision) = 365; break; case 366: nDivine = TRUE; nLevel = 7; //int SPELL_DESTRUCTION = 366; break; case 367: nArcane = TRUE; nLevel = 8; //int SPELL_HORRID_WILTING = 367; break; case 368: nArcane = TRUE; nDivine = TRUE; nLevel = 4; //int SPELL_ICE_STORM = 368; break; case 369: nArcane = TRUE; nDivine = TRUE; nLevel = 5; //int SPELL_ENERGY_BUFFER = 369; break; case 370: nArcane = TRUE; nLevel = 3; //int SPELL_NEGATIVE_ENERGY_BURST = 370; break; case 371: nArcane = TRUE; nDivine = TRUE; nLevel = 1; //int SPELL_NEGATIVE_ENERGY_RAY = 371; break; case 372: nDivine = TRUE; nLevel = 7; //int SPELL_AURA_OF_VITALITY = 372; break; case 373: nArcane = TRUE; nLevel = 4; //int SPELL_WAR_CRY = 373; break; case 374: nDivine = TRUE; nLevel = 7; //int SPELL_REGENERATE = 374; break; case 375: nArcane = TRUE; nLevel = 4; //int SPELL_EVARDS_BLACK_TENTACLES = 375; break; case 376: nArcane = TRUE; nLevel = 6; //int SPELL_LEGEND_LORE = 376; break; case 377: nArcane = TRUE; nDivine = TRUE; nLevel = 2; //int SPELL_FIND_TRAPS = 377; break; case 387: nArcane = TRUE; nDivine = TRUE; nLevel = 4; ///SPELL_POLYMORPH Giant Spider break; case 388: nArcane = TRUE; nDivine = TRUE; nLevel = 4; ///SPELL_POLYMORPH Troll break; case 389: nArcane = TRUE; nDivine = TRUE; nLevel = 4; ///SPELL_POLYMORPH UMberHulk break; case 390: nArcane = TRUE; nDivine = TRUE; nLevel = 4; ///SPELL_POLYMORPH Pixie break; case 391: nArcane = TRUE; nDivine = TRUE; nLevel = 4; ///SPELL_POLYMORPH Zombie break; case 392: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //SPELL_SHAPECHANGE Red Dragon break; case 393: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //SPELL_SHAPECHANGE Fire Giant break; case 394: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //SPELL_SHAPECHANGE Balor break; case 395: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //SPELL_SHAPECHANGE Death Slaad break; case 396: nArcane = TRUE; nDivine = TRUE; nLevel = 9; //SPELL_SHAPECHANGE Iron Golem break; } if (DEBUG ==1) SpeakString ("Arc = " + IntToString(nArcane) + "; Div = " + IntToString(nDivine) + "; Level = " + IntToString(nLevel)); if (nArcane == TRUE && nDivine == TRUE) nLevel = nLevel; else if (nDivine == TRUE) nLevel = nLevel + 10; else nLevel = nLevel + 20; return nLevel; }
#include "spellfail_inc" //:://///////////////////////////////////////////// //:: Bless //:: NW_S0_Bless.nss //:: Copyright (c) 2001 Bioware Corp. //::////////////////////////////////////////////// /* All allies within 30ft of the caster gain a +1 attack bonus and a +1 save bonus vs fear effects */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: July 24, 2001 //::////////////////////////////////////////////// //:: VFX Pass By: Preston W, On: June 20, 2001 #include "NW_I0_SPELLS" void main() { if (SpellFailure() != FALSE) { //Declare major variables object oTarget; effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY); effect eImpact = EffectVisualEffect(VFX_FNF_LOS_HOLY_30); effect eAttack = EffectAttackIncrease(1); effect eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_FEAR); effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE); effect eLink = EffectLinkEffects(eAttack, eSave); eLink = EffectLinkEffects(eLink, eDur); int nDuration = 1 + GetCasterLevel(OBJECT_SELF); int nMetaMagic = GetMetaMagicFeat(); float fDelay; //Metamagic duration check if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } //Apply Impact ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eImpact, GetSpellTargetLocation()); //Get the first target in the radius around the caster oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); while(GetIsObjectValid(oTarget)) { if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget)) { fDelay = GetRandomDelay(0.4, 1.1); //Fire spell cast at event for target SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_BLESS, FALSE)); //Apply VFX impact and bonus effects DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget)); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(nDuration))); } //Get the next target in the specified area around the caster oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, GetLocation(OBJECT_SELF)); } }}