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.
		
			
				
	
	
		
			403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			403 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | |
| // Use this function to get the adjustments to a spell or SLAs saving throw
 | |
| // from the various class effects
 | |
| // Update this function if any new classes change saving throws
 | |
| int PRCGetSaveDC(object oTarget, object oCaster, int nSpellID = -1);
 | |
| 
 | |
| //called just from above and from inc_epicspells
 | |
| int GetChangesToSaveDC(object oTarget, object oCaster = OBJECT_SELF, int nSpellID = -1);
 | |
| 
 | |
| #include "prc_inc_spells"
 | |
| #include "prc_class_const"
 | |
| #include "prc_feat_const"
 | |
| #include "lookup_2da_spell"
 | |
| #include "prcsp_archmaginc"
 | |
| #include "prc_alterations"
 | |
| #include "prc_add_spl_pen"
 | |
| 
 | |
| 
 | |
| 
 | |
| // Check for CLASS_TYPE_HIEROPHANT > 0 in caller
 | |
| int GetWasLastSpellHieroSLA(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     int iAbility = PRCGetLastSpellCastClass() == CLASS_TYPE_INVALID;
 | |
|     int iSpell   = spell_id == SPELL_HOLY_AURA ||
 | |
|                    spell_id == SPELL_UNHOLY_AURA ||
 | |
|                    spell_id == SPELL_BANISHMENT ||
 | |
|                    spell_id == SPELL_BATTLETIDE ||
 | |
|                    spell_id == SPELL_BLADE_BARRIER ||
 | |
|                    spell_id == SPELL_CIRCLE_OF_DOOM ||
 | |
|                    spell_id == SPELL_CONTROL_UNDEAD ||
 | |
|                    spell_id == SPELL_CREATE_GREATER_UNDEAD ||
 | |
|                    spell_id == SPELL_CREATE_UNDEAD ||
 | |
|                    spell_id == SPELL_CURE_CRITICAL_WOUNDS ||
 | |
|                    spell_id == SPELL_DEATH_WARD ||
 | |
|                    spell_id == SPELL_DESTRUCTION ||
 | |
|                    spell_id == SPELL_DISMISSAL ||
 | |
|                    spell_id == SPELL_DIVINE_POWER ||
 | |
|                    spell_id == SPELL_EARTHQUAKE ||
 | |
|                    spell_id == SPELL_ENERGY_DRAIN ||
 | |
|                    spell_id == SPELL_ETHEREALNESS ||
 | |
|                    spell_id == SPELL_FIRE_STORM ||
 | |
|                    spell_id == SPELL_FLAME_STRIKE ||
 | |
|                    spell_id == SPELL_FREEDOM_OF_MOVEMENT ||
 | |
|                    spell_id == SPELL_GATE ||
 | |
|                    spell_id == SPELL_GREATER_DISPELLING ||
 | |
|                    spell_id == SPELL_GREATER_MAGIC_WEAPON ||
 | |
|                    spell_id == SPELL_GREATER_RESTORATION ||
 | |
|                    spell_id == SPELL_HAMMER_OF_THE_GODS ||
 | |
|                    spell_id == SPELL_HARM ||
 | |
|                    spell_id == SPELL_HEAL ||
 | |
|                    spell_id == SPELL_HEALING_CIRCLE ||
 | |
|                    spell_id == SPELL_IMPLOSION ||
 | |
|                    spell_id == SPELL_INFLICT_CRITICAL_WOUNDS ||
 | |
|                    spell_id == SPELL_MASS_HEAL ||
 | |
|                    spell_id == SPELL_MONSTROUS_REGENERATION ||
 | |
|                    spell_id == SPELL_NEUTRALIZE_POISON ||
 | |
|                    spell_id == SPELL_PLANAR_ALLY ||
 | |
|                    spell_id == SPELL_POISON ||
 | |
|                    spell_id == SPELL_RAISE_DEAD ||
 | |
|                    spell_id == SPELL_REGENERATE ||
 | |
|                    spell_id == SPELL_RESTORATION ||
 | |
|                    spell_id == SPELL_RESURRECTION ||
 | |
|                    spell_id == SPELL_SLAY_LIVING ||
 | |
|                    spell_id == SPELL_SPELL_RESISTANCE ||
 | |
|                    spell_id == SPELL_STORM_OF_VENGEANCE ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_IV ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_IX ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_V ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_VI ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_VII ||
 | |
|                    spell_id == SPELL_SUMMON_CREATURE_VIII ||
 | |
|                    spell_id == SPELL_SUNBEAM ||
 | |
|                    spell_id == SPELL_TRUE_SEEING ||
 | |
|                    spell_id == SPELL_UNDEATH_TO_DEATH ||
 | |
|                    spell_id == SPELL_UNDEATHS_ETERNAL_FOE ||
 | |
|                    spell_id == SPELL_WORD_OF_FAITH;
 | |
| 
 | |
|     return iAbility && iSpell;
 | |
| }
 | |
| 
 | |
| int GetHierophantSLAAdjustment(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     int retval = 0;
 | |
| 
 | |
|     if (GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster) > 0 && GetWasLastSpellHieroSLA(spell_id, oCaster) )
 | |
|     {
 | |
|              retval = StringToInt( lookup_spell_cleric_level(spell_id) );
 | |
|          retval -= GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster);
 | |
|         }
 | |
|    
 | |
|    return retval;
 | |
| }
 | |
| 
 | |
| int GetHeartWarderDC(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     // Check the curent school
 | |
|     if (GetLocalInt(oCaster, "X2_L_LAST_SPELLSCHOOL_VAR") != SPELL_SCHOOL_ENCHANTMENT)
 | |
|         return 0;
 | |
| 
 | |
|     if (!GetHasFeat(FEAT_VOICE_SIREN, oCaster)) return 0;
 | |
| 
 | |
|     // Bonus Requires Verbal Spells
 | |
|     string VS = lookup_spell_vs(PRCGetSpellId());
 | |
|     if (VS != "v" && VS != "vs")
 | |
|         return 0;
 | |
| 
 | |
|     // These feats provide greater bonuses or remove the Verbal requirement
 | |
|     if (PRCGetMetaMagicFeat() & METAMAGIC_SILENT
 | |
|             || GetHasFeat(FEAT_GREATER_SPELL_FOCUS_ENCHANTMENT, oCaster)
 | |
|             || GetHasFeat(FEAT_EPIC_SPELL_FOCUS_ENCHANTMENT, oCaster))
 | |
|         return 0;
 | |
| 
 | |
|     return 2;
 | |
| }
 | |
| 
 | |
| //Elemental Savant DC boost based on elemental spell type.
 | |
| int ElementalSavantDC(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     int nDC = 0;
 | |
|     int nES;
 | |
| 
 | |
|     // All Elemental Savants will have this feat
 | |
|     // when they first gain a DC bonus.
 | |
|     if (GetHasFeat(FEAT_ES_FOCUS_1, oCaster)) {
 | |
|         // get spell elemental type
 | |
|         string element = ChangedElementalType(spell_id, oCaster);
 | |
| 
 | |
|         // Any value that does not match one of the enumerated feats
 | |
|         int feat = 0;
 | |
| 
 | |
|         // Specify the elemental type rather than lookup by class?
 | |
|         if (element == "Fire")
 | |
|         {
 | |
|             feat = FEAT_ES_FIRE;
 | |
|             nES = GetLevelByClass(CLASS_TYPE_ES_FIRE,oCaster);
 | |
|         }
 | |
|         else if (element == "Cold")
 | |
|         {
 | |
|             feat = FEAT_ES_COLD;
 | |
|             nES = GetLevelByClass(CLASS_TYPE_ES_COLD,oCaster);
 | |
|         }
 | |
|         else if (element == "Electricity")
 | |
|         {
 | |
|             feat = FEAT_ES_ELEC;
 | |
|             nES = GetLevelByClass(CLASS_TYPE_ES_ELEC,oCaster);
 | |
|         }
 | |
|         else if (element == "Acid")
 | |
|         {
 | |
|             feat = FEAT_ES_ACID;
 | |
|             nES = GetLevelByClass(CLASS_TYPE_ES_ACID,oCaster);
 | |
|         }
 | |
| 
 | |
|         // Now determine the bonus
 | |
|         if (feat && GetHasFeat(feat, oCaster)) 
 | |
|         {
 | |
| 
 | |
|             if (nES > 28)       nDC = 10;
 | |
|             else if (nES > 25)  nDC = 9;
 | |
|             else if (nES > 22)  nDC = 8;
 | |
|             else if (nES > 19)  nDC = 7;
 | |
|             else if (nES > 16)  nDC = 6;
 | |
|             else if (nES > 13)  nDC = 5;
 | |
|             else if (nES > 10)  nDC = 4;
 | |
|             else if (nES > 7)   nDC = 3;
 | |
|             else if (nES > 4)   nDC = 2;
 | |
|             else if (nES > 1)   nDC = 1;
 | |
| 
 | |
|         }
 | |
|     }
 | |
| //  SendMessageToPC(GetFirstPC(), "Your Elemental Focus modifier is " + IntToString(nDC));
 | |
|     return nDC;
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| //Red Wizard DC boost based on spell school specialization
 | |
| int RedWizardDC(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     int iRedWizard = GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster);
 | |
|     int nDC;
 | |
| 
 | |
|     if (iRedWizard > 0)
 | |
|     {
 | |
|         int nSpell = PRCGetSpellId();
 | |
|         string sSpellSchool = lookup_spell_school(nSpell);
 | |
|         int iSpellSchool;
 | |
|         int iRWSpec;
 | |
| 
 | |
|         if (sSpellSchool == "A") iSpellSchool = SPELL_SCHOOL_ABJURATION;
 | |
|         else if (sSpellSchool == "C") iSpellSchool = SPELL_SCHOOL_CONJURATION;
 | |
|         else if (sSpellSchool == "D") iSpellSchool = SPELL_SCHOOL_DIVINATION;
 | |
|         else if (sSpellSchool == "E") iSpellSchool = SPELL_SCHOOL_ENCHANTMENT;
 | |
|         else if (sSpellSchool == "V") iSpellSchool = SPELL_SCHOOL_EVOCATION;
 | |
|         else if (sSpellSchool == "I") iSpellSchool = SPELL_SCHOOL_ILLUSION;
 | |
|         else if (sSpellSchool == "N") iSpellSchool = SPELL_SCHOOL_NECROMANCY;
 | |
|         else if (sSpellSchool == "T") iSpellSchool = SPELL_SCHOOL_TRANSMUTATION;
 | |
| 
 | |
|         if (GetHasFeat(FEAT_RW_TF_ABJ, oCaster)) iRWSpec = SPELL_SCHOOL_ABJURATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_CON, oCaster)) iRWSpec = SPELL_SCHOOL_CONJURATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_DIV, oCaster)) iRWSpec = SPELL_SCHOOL_DIVINATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_ENC, oCaster)) iRWSpec = SPELL_SCHOOL_ENCHANTMENT;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_EVO, oCaster)) iRWSpec = SPELL_SCHOOL_EVOCATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_ILL, oCaster)) iRWSpec = SPELL_SCHOOL_ILLUSION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_NEC, oCaster)) iRWSpec = SPELL_SCHOOL_NECROMANCY;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_TRS, oCaster)) iRWSpec = SPELL_SCHOOL_TRANSMUTATION;
 | |
| 
 | |
|         if (iSpellSchool == iRWSpec)
 | |
|         {
 | |
|         
 | |
|             nDC = 1;
 | |
| 
 | |
|             if (iRedWizard > 29)        nDC = 16;
 | |
|             else if (iRedWizard > 27)   nDC = 15;
 | |
|             else if (iRedWizard > 25)   nDC = 14;
 | |
|             else if (iRedWizard > 23)   nDC = 13;
 | |
|             else if (iRedWizard > 21)   nDC = 12;
 | |
|             else if (iRedWizard > 19)   nDC = 11;
 | |
|             else if (iRedWizard > 17)   nDC = 10;
 | |
|             else if (iRedWizard > 15)   nDC = 9;
 | |
|             else if (iRedWizard > 13)   nDC = 8;
 | |
|             else if (iRedWizard > 11)   nDC = 7;
 | |
|             else if (iRedWizard > 9)    nDC = 6;
 | |
|             else if (iRedWizard > 7)    nDC = 5;
 | |
|             else if (iRedWizard > 5)    nDC = 4;
 | |
|             else if (iRedWizard > 3)    nDC = 3;
 | |
|             else if (iRedWizard > 1)    nDC = 2;
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
| //  SendMessageToPC(GetFirstPC(), "Your Spell Power modifier is " + IntToString(nDC));
 | |
|     return nDC;
 | |
| }
 | |
| 
 | |
| 
 | |
| //Tattoo Focus DC boost based on spell school specialization
 | |
| int TattooFocus(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
| 
 | |
|         int nDC;
 | |
|         int nSpell = PRCGetSpellId();
 | |
|         string sSpellSchool = lookup_spell_school(nSpell);
 | |
|         int iSpellSchool;
 | |
|         int iRWSpec;
 | |
| 
 | |
|         if (sSpellSchool == "A") iSpellSchool = SPELL_SCHOOL_ABJURATION;
 | |
|         else if (sSpellSchool == "C") iSpellSchool = SPELL_SCHOOL_CONJURATION;
 | |
|         else if (sSpellSchool == "D") iSpellSchool = SPELL_SCHOOL_DIVINATION;
 | |
|         else if (sSpellSchool == "E") iSpellSchool = SPELL_SCHOOL_ENCHANTMENT;
 | |
|         else if (sSpellSchool == "V") iSpellSchool = SPELL_SCHOOL_EVOCATION;
 | |
|         else if (sSpellSchool == "I") iSpellSchool = SPELL_SCHOOL_ILLUSION;
 | |
|         else if (sSpellSchool == "N") iSpellSchool = SPELL_SCHOOL_NECROMANCY;
 | |
|         else if (sSpellSchool == "T") iSpellSchool = SPELL_SCHOOL_TRANSMUTATION;
 | |
| 
 | |
|         if (GetHasFeat(FEAT_RW_TF_ABJ, oCaster)) iRWSpec = SPELL_SCHOOL_ABJURATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_CON, oCaster)) iRWSpec = SPELL_SCHOOL_CONJURATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_DIV, oCaster)) iRWSpec = SPELL_SCHOOL_DIVINATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_ENC, oCaster)) iRWSpec = SPELL_SCHOOL_ENCHANTMENT;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_EVO, oCaster)) iRWSpec = SPELL_SCHOOL_EVOCATION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_ILL, oCaster)) iRWSpec = SPELL_SCHOOL_ILLUSION;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_NEC, oCaster)) iRWSpec = SPELL_SCHOOL_NECROMANCY;
 | |
|         else if (GetHasFeat(FEAT_RW_TF_TRS, oCaster)) iRWSpec = SPELL_SCHOOL_TRANSMUTATION;
 | |
| 
 | |
|         if (iSpellSchool == iRWSpec)
 | |
|         {
 | |
|             nDC = 1;
 | |
|         }
 | |
|     return nDC;
 | |
| }
 | |
| 
 | |
| // Shadow Weave Feat
 | |
| // DC +1 (school Ench,Illu,Necro)
 | |
| int ShadowWeaveDC(int spell_id, object oCaster = OBJECT_SELF)
 | |
| {
 | |
|     int iShadow = GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster);
 | |
|     int nDC;
 | |
| 
 | |
|     if (iShadow > 0)
 | |
|     {
 | |
|         int nSpell = PRCGetSpellId();
 | |
|         string sSpellSchool = lookup_spell_school(nSpell);
 | |
|         int iSpellSchool;
 | |
|         
 | |
|         if (sSpellSchool == "A") iSpellSchool = SPELL_SCHOOL_ABJURATION;
 | |
|         else if (sSpellSchool == "C") iSpellSchool = SPELL_SCHOOL_CONJURATION;
 | |
|         else if (sSpellSchool == "D") iSpellSchool = SPELL_SCHOOL_DIVINATION;
 | |
|         else if (sSpellSchool == "E") iSpellSchool = SPELL_SCHOOL_ENCHANTMENT;
 | |
|         else if (sSpellSchool == "V") iSpellSchool = SPELL_SCHOOL_EVOCATION;
 | |
|         else if (sSpellSchool == "I") iSpellSchool = SPELL_SCHOOL_ILLUSION;
 | |
|         else if (sSpellSchool == "N") iSpellSchool = SPELL_SCHOOL_NECROMANCY;
 | |
|         else if (sSpellSchool == "T") iSpellSchool = SPELL_SCHOOL_TRANSMUTATION;
 | |
| 
 | |
|         if (iSpellSchool == SPELL_SCHOOL_ENCHANTMENT || iSpellSchool == SPELL_SCHOOL_NECROMANCY || iSpellSchool == SPELL_SCHOOL_ILLUSION)
 | |
|         {
 | |
|         
 | |
|             if (iShadow > 29)   nDC = 10;
 | |
|             else if (iShadow > 26)  nDC = 9;
 | |
|             else if (iShadow > 23)  nDC = 8;
 | |
|             else if (iShadow > 20)  nDC = 7;
 | |
|             else if (iShadow > 17)  nDC = 6;
 | |
|             else if (iShadow > 14)  nDC = 5;
 | |
|             else if (iShadow > 11)  nDC = 4;
 | |
|             else if (iShadow > 8)   nDC = 3;
 | |
|             else if (iShadow > 5)   nDC = 2;
 | |
|             else if (iShadow > 2)   nDC = 1;
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
|     //SendMessageToPC(GetFirstPC(), "Your Spell DC modifier is " + IntToString(nDC));
 | |
|     return nDC;
 | |
| }
 | |
| 
 | |
| int KOTCSpellFocusVsDemons(object oTarget, object oCaster)
 | |
| {
 | |
|     int nDC = 0;
 | |
|     int iKOTC = GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oCaster);
 | |
|     
 | |
|     if (iKOTC >= 1)
 | |
|         {
 | |
|             if (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
 | |
|             {
 | |
|                 if (GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
 | |
|                 {
 | |
|                 nDC = 2;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return nDC;
 | |
| }
 | |
| 
 | |
| int BloodMagusBloodComponent(object oCaster)
 | |
| {
 | |
| 	int nDC = 0;
 | |
| 	if (GetLevelByClass(CLASS_TYPE_BLOOD_MAGUS, oCaster) > 0 && GetLocalInt(oCaster, "BloodComponent") == TRUE)
 | |
| 	{
 | |
| 		nDC = 1;
 | |
| 		effect eSelfDamage = EffectDamage(1, DAMAGE_TYPE_MAGICAL);
 | |
| 		// To make sure it doesn't cause a conc check
 | |
|           	DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eSelfDamage, oCaster));
 | |
|         }
 | |
|         return nDC;
 | |
| }
 | |
| 
 | |
| int RunecasterRunePowerDC(object oCaster)
 | |
| {
 | |
| 	int nDC = 0;
 | |
| 	int nClass = GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster);
 | |
| 	if (nClass >= 2)
 | |
| 	{
 | |
|             if (nClass >= 30)        nDC = 10;
 | |
|             else if (nClass >= 27)   nDC = 9;
 | |
|             else if (nClass >= 24)   nDC = 8;
 | |
|             else if (nClass >= 21)   nDC = 7;
 | |
|             else if (nClass >= 18)   nDC = 6;
 | |
|             else if (nClass >= 15)   nDC = 5;
 | |
|             else if (nClass >= 12)   nDC = 4;
 | |
|             else if (nClass >= 9)    nDC = 3;
 | |
|             else if (nClass >= 5)    nDC = 2;
 | |
|             else if (nClass >= 2)    nDC = 1;
 | |
|         }
 | |
|         return nDC;
 | |
| }
 | |
| 
 | |
| int PRCGetSaveDC(object oTarget, object oCaster, int nSpellID = -1)
 | |
| {
 | |
|     if(nSpellID == -1)
 | |
|         nSpellID = PRCGetSpellId();
 | |
|     //10+spelllevel+stat(cha default)
 | |
|     int nDC = GetSpellSaveDC(); 
 | |
|     // For when you want to assign the caster DC
 | |
|     //this does take feat/race/class into account, it only overrides the baseDC
 | |
|     if (GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE) != 0)
 | |
|     {
 | |
|         nDC = GetLocalInt(oCaster, PRC_DC_BASE_OVERRIDE);
 | |
|         SendMessageToPC(oCaster, "Forced Base-DC casting at DC " + IntToString(nDC));
 | |
|     }
 | |
|     nDC += GetChangesToSaveDC(oTarget, oCaster, nSpellID);
 | |
|     return nDC;
 | |
|     
 | |
| }
 | |
| 
 | |
| //called just from above and from inc_epicspells
 | |
| int GetChangesToSaveDC(object oTarget, object oCaster = OBJECT_SELF, int nSpellID = -1)
 | |
| {
 | |
|     if(nSpellID == -1)
 | |
|         nSpellID = PRCGetSpellId();
 | |
|     int nDC;
 | |
|     nDC += ElementalSavantDC(nSpellID, oCaster);
 | |
|     nDC += GetHierophantSLAAdjustment(nSpellID, oCaster);
 | |
|     nDC += GetHeartWarderDC(nSpellID, oCaster);
 | |
|     nDC += GetSpellPowerBonus(oCaster);
 | |
|     nDC += ShadowWeaveDC(nSpellID, oCaster);
 | |
|     nDC += RedWizardDC(nSpellID, oCaster);
 | |
|     nDC += TattooFocus(nSpellID, oCaster);
 | |
|     nDC += KOTCSpellFocusVsDemons(oTarget, oCaster);
 | |
|     nDC += BloodMagusBloodComponent(oCaster);
 | |
|     nDC += RunecasterRunePowerDC(oCaster);
 | |
|     nDC += GetLocalInt(oCaster, PRC_DC_ADJUSTMENT);//this is for builder use
 | |
|     return nDC;
 | |
|     
 | |
| }
 |