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.
97 lines
3.4 KiB
Plaintext
97 lines
3.4 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Divine Power
|
|
//:: Spell FileName phs_s_divinepowr
|
|
//:://////////////////////////////////////////////
|
|
//:: In Game Spell desctiption
|
|
//:://////////////////////////////////////////////
|
|
Range: Personal Target: You Duration: 1 round/level
|
|
|
|
Calling upon the divine power of your patron, you imbue yourself with
|
|
strength and skill in combat. Your base attack bonus becomes equal to your
|
|
character level (which may give you additional attacks), you gain a +6
|
|
enhancement bonus to Strength, and you gain 1 temporary hit point per caster
|
|
level.
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
As spell description. :-)
|
|
|
|
We apply it better then the NwN way.
|
|
|
|
We can use GetBaseAttackBonus :-D
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Spell Hook Check
|
|
if(!PHS_SpellHookCheck(PHS_SPELL_DIVINE_POWER)) return;
|
|
|
|
// Delcare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oTarget = GetSpellTargetObject();// Should be OBJECT_SELF
|
|
int nCasterLevel = PHS_GetCasterLevel();
|
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|
|
|
// Broken the rule of order (well, not really a rule) but we MUST remove
|
|
// the spells effects first.
|
|
|
|
// Remove pervious castings of it
|
|
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_DIVINE_POWER, oTarget);
|
|
|
|
// Get old BAB
|
|
int nOldBAB = GetBaseAttackBonus(oTarget);
|
|
|
|
// Make sure they are not immune to spells
|
|
if(PHS_TotalSpellImmunity(oTarget)) return;
|
|
|
|
// Get duration in rounds
|
|
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
|
|
|
// Calculate the extra BAB we should add for extra attacks
|
|
// - Based on character level (Hit dice) of the caster
|
|
int nNewBAB = GetHitDice(oTarget) - nOldBAB;;
|
|
|
|
int nNewAttack = nNewBAB;
|
|
if(nNewAttack > 10) nNewAttack = 10;
|
|
|
|
// Extra attacks. Get 1 per 5 levels, min of 1, so have new BAB take old BAB.
|
|
int nExtraAttacks = (PHS_LimitInteger(nNewBAB/5) - PHS_LimitInteger(nOldBAB/5));
|
|
if(nExtraAttacks > 5) nExtraAttacks = 5;
|
|
|
|
// Declare effects
|
|
effect eVis = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
|
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eStrength = EffectAbilityIncrease(ABILITY_STRENGTH, 6);
|
|
effect eHP = EffectTemporaryHitpoints(nCasterLevel);
|
|
effect eAttack = EffectAttackIncrease(nNewAttack);
|
|
|
|
effect eLink = EffectLinkEffects(eCessate, eHP);
|
|
// We add the strength link only if we will havn't got any 6 or more bonuses
|
|
// to strength
|
|
if(PHS_GetHasAbilityBonusOfPower(oTarget, ABILITY_STRENGTH, 6) == 0)
|
|
{
|
|
eLink = EffectLinkEffects(eLink, eStrength);
|
|
}
|
|
eLink = EffectLinkEffects(eLink, eAttack);
|
|
|
|
// If no extra attacks, we do not use eExtraAttacks
|
|
if(nExtraAttacks > 0)
|
|
{
|
|
effect eExtraAttacks = EffectModifyAttacks(nExtraAttacks);
|
|
eLink = EffectLinkEffects(eLink, eExtraAttacks);
|
|
}
|
|
|
|
// Remove any bonuses to strength of 5 or under.
|
|
PHS_RemoveAnyAbilityBonuses(oTarget, ABILITY_STRENGTH, 5);
|
|
|
|
//Fire cast spell at event for the specified target
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_DIVINE_POWER, FALSE);
|
|
|
|
// Apply VNF and effect.
|
|
PHS_ApplyDurationAndVFX(oTarget, eVis, eLink, fDuration);
|
|
}
|