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.
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| //::///////////////////////////////////////////////
 | |
| //:: Divine Power
 | |
| //:: NW_S0_DivPower.nss
 | |
| //:: Copyright (c) 2001 Bioware Corp.
 | |
| //:://////////////////////////////////////////////
 | |
| /*
 | |
|     Improves the Clerics base attack by 33%, +1 HP
 | |
|     per level and raises their strength to 18 if
 | |
|     is not already there.
 | |
| */
 | |
| //:://////////////////////////////////////////////
 | |
| //:: Created By: Preston Watamaniuk
 | |
| //:: Created On: Oct 21, 2001
 | |
| //:://////////////////////////////////////////////
 | |
| 
 | |
| /*
 | |
| bugfix by Kovi 2002.07.22
 | |
| - temporary hp was stacked
 | |
| - loosing temporary hp resulted in loosing the other bonuses
 | |
| - number of attacks was not increased (should have been a BAB increase)
 | |
| still problem:
 | |
| ~ attacks are better still approximation (the additional attack is at full BAB)
 | |
| ~ attack/ability bonuses count against the limits
 | |
| */
 | |
| //:: modified by mr_bumpkin Dec 4, 2003
 | |
| //:: modified by motu99 April 7, 2007
 | |
| 
 | |
| #include "prc_inc_combat"
 | |
| 
 | |
| /*
 | |
| #include "prc_inc_combat"
 | |
| #include "x2_inc_shifter"
 | |
| #include "pnp_shft_poly"
 | |
| */
 | |
| 
 | |
| void PnPDivinePowerPseudoHB()
 | |
| {
 | |
|     if(DEBUG) DoDebug("entered PnPDivinePowerPseudoHB");
 | |
| 
 | |
|     object oPC = OBJECT_SELF;
 | |
|     // if we don't have the spell effect any more, do clean up
 | |
|     if(!GetHasSpellEffect(SPELL_DIVINE_POWER, oPC))
 | |
|     {
 | |
|         DeleteLocalInt(oPC, "AttackCount_DivinePower");
 | |
| 
 | |
|         // now execute prc_bab_caller to set the base attack count to normal again
 | |
|         ExecuteScript("prc_bab_caller", oPC);
 | |
| 
 | |
|         //end the pseudoHB
 | |
|         return;
 | |
|     }
 | |
|     // otherwise rerun the Pseudo HB until spell expires
 | |
|     DelayCommand(6.0, PnPDivinePowerPseudoHB());
 | |
| }
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     if(!X2PreSpellCastCode()) return;
 | |
| 
 | |
|     PRCSetSchool(SPELL_SCHOOL_EVOCATION);
 | |
| 
 | |
|     //Declare major variables
 | |
|     object oCaster = OBJECT_SELF;
 | |
|     object oTarget = PRCGetSpellTargetObject();
 | |
|     int iCasterLvl = PRCGetCasterLevel(oCaster);
 | |
|     int iBAB = GetBaseAttackBonus(oTarget);
 | |
|     int iHD = GetHitDice(oTarget);
 | |
|     int nHP = iCasterLvl;
 | |
|     float fDuration = RoundsToSeconds(iCasterLvl);
 | |
|     int bBiowareDP = GetPRCSwitch(PRC_BIOWARE_DIVINE_POWER);
 | |
| 
 | |
| //DoDebug("nw_s0_divpower: " +GetName(OBJECT_SELF)+" is casting DivinePower with caster level " + IntToString(iCasterLvl)+" on "+GetName(oTarget));
 | |
| 
 | |
|     int iFighterBAB = GetFighterBAB(iHD);
 | |
|     int iAttackBonus = iFighterBAB - iBAB;
 | |
|     if(iAttackBonus < 0) iAttackBonus = 0;
 | |
| 
 | |
|     int iTotalAttackCount = GetAttacks(iFighterBAB, iHD);
 | |
|     int iBonusAttacks = iTotalAttackCount - GetAttacks(iBAB, iHD);
 | |
| 
 | |
|     int nStr = GetAbilityScore(oTarget, ABILITY_STRENGTH);
 | |
|     int iStrengthBonus = 18 - nStr;
 | |
| 
 | |
|     //Meta-Magic
 | |
|     int nMetaMagic = PRCGetMetaMagicFeat();
 | |
|     if(nMetaMagic & METAMAGIC_EXTEND)
 | |
|         fDuration += fDuration;
 | |
| 
 | |
|     effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
 | |
|     effect eHP = EffectTemporaryHitpoints(nHP);
 | |
| 
 | |
|     // begin effect link with visual duration effect
 | |
|     effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
 | |
| 
 | |
|     // make sure the attack bonus is a bonus, link it the the duration visual
 | |
|     if(iAttackBonus > 0)
 | |
|         eLink = EffectLinkEffects(eLink, EffectAttackIncrease(iAttackBonus));
 | |
| 
 | |
|     // if there are any bonus attacks, link them in, but only if we have biowares Divine Power version
 | |
|     if(iBonusAttacks > 0 && bBiowareDP)
 | |
|         eLink = EffectLinkEffects(eLink, EffectModifyAttacks(iBonusAttacks));
 | |
| 
 | |
|     //Make sure that the strength modifier is a bonus, and link it in
 | |
|     if(iStrengthBonus > 0)
 | |
|         eLink = EffectLinkEffects(eLink, EffectAbilityIncrease(ABILITY_STRENGTH, iStrengthBonus));
 | |
| 
 | |
|     // remove any effects from any previous Divine Power Spell
 | |
|     PRCRemoveEffectsFromSpell(oTarget, SPELL_DIVINE_POWER);
 | |
| 
 | |
|     //Fire cast spell at event for the specified target
 | |
|     SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_DIVINE_POWER, FALSE));
 | |
| 
 | |
|     //Apply Link and VFX effects to the target
 | |
|     SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHP, oTarget, fDuration, TRUE, SPELL_DIVINE_POWER, iCasterLvl);
 | |
|     SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration, TRUE, SPELL_DIVINE_POWER, iCasterLvl);
 | |
|     SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | |
| 
 | |
|     // motu99: this must be executed *after* the spell effects are applied, otherwise prc_bab_caller will not change the base attack count!
 | |
|     if(!bBiowareDP)
 | |
|     {   // if we don't use Bioware's version of DP, set the additional # of attacks via prc_bab_caller
 | |
|         SetLocalInt(oTarget, "AttackCount_DivinePower", iTotalAttackCount);
 | |
|         ExecuteScript("prc_bab_caller", oTarget);
 | |
| 
 | |
|         // put the pseudo heart beat on the target of the spell, to check whether spell expired
 | |
|         DelayCommand(6.0, AssignCommand(oTarget, PnPDivinePowerPseudoHB()));
 | |
|     }
 | |
|     PRCSetSchool();
 | |
| } |