Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
150 lines
5.9 KiB
Plaintext
150 lines
5.9 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Lay_On_Hands
|
|
//:: NW_S2_LayOnHand.nss
|
|
//:: Copyright (c) 2001 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
/*
|
|
The Paladin is able to heal his Chr Bonus times
|
|
his level.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: Aug 15, 2001
|
|
//:: Updated On: Oct 20, 2003
|
|
//:://////////////////////////////////////////////
|
|
|
|
#include "prc_inc_sp_tch"
|
|
void main()
|
|
{
|
|
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nChr = GetAbilityModifier(ABILITY_CHARISMA);
|
|
|
|
// Added by Starlight 2004-5-14
|
|
// Check whether the character has "Hand of A Healer Feat" and
|
|
// with 13+ Charisma
|
|
// If yes, +2 to Charisma Score during casting Lay On Hands
|
|
// i.e. +1 bonus to Charisma Modifier
|
|
if (GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_GOOD){
|
|
if (GetHasFeat(FEAT_HAND_HEALER)){
|
|
nChr = nChr + 1;
|
|
}
|
|
}
|
|
// End of Hand of Healer Code
|
|
|
|
if (nChr < 0)
|
|
{
|
|
nChr = 0;
|
|
}
|
|
int nLevel = GetLevelByClass(CLASS_TYPE_PALADIN);
|
|
|
|
//--------------------------------------------------------------------------
|
|
// July 2003: Add Divine Champion levels to lay on hands ability
|
|
//--------------------------------------------------------------------------
|
|
nLevel += GetLevelByClass(CLASS_TYPE_DIVINECHAMPION);
|
|
nLevel += GetLevelByClass(CLASS_TYPE_HOSPITALER);
|
|
nLevel += GetLevelByClass(CLASS_TYPE_COC);
|
|
nLevel += GetEssentiaInvestedFeat(OBJECT_SELF, FEAT_AZURE_TOUCH);
|
|
|
|
//--------------------------------------------------------------------------
|
|
// Caluclate the amount to heal, min is 1 hp
|
|
//--------------------------------------------------------------------------
|
|
int nHeal = nLevel * nChr;
|
|
if(nHeal <= 0)
|
|
{
|
|
nHeal = 1;
|
|
}
|
|
effect eHeal = EffectHeal(nHeal);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_HEALING_M);
|
|
effect eVis2 = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
|
effect eEVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
|
|
effect eEVis2 = EffectVisualEffect(VFX_IMP_DESTRUCTION);
|
|
effect eDam;
|
|
int nTouch;
|
|
|
|
// evil paladins should not heal non-undead, they should do damage, and heal undead. ~ Lock
|
|
|
|
if (GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_EVIL)
|
|
{
|
|
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || GetLevelByClass(CLASS_TYPE_UNDEAD,oTarget)>0
|
|
|| (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD))
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS, FALSE));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eEVis2, oTarget);
|
|
}
|
|
else
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
|
|
//Make a ranged touch attack
|
|
nTouch = PRCDoMeleeTouchAttack(oTarget);;
|
|
|
|
//----------------------------------------------------------------------
|
|
// GZ: The PhB classifies Lay on Hands as spell like ability, so it is
|
|
// subject to SR. No more cheesy demi lich kills on touch, sorry.
|
|
//----------------------------------------------------------------------
|
|
int nResist = PRCDoResistSpell(OBJECT_SELF, oTarget, nLevel + SPGetPenetr());
|
|
if (nResist == 0 )
|
|
{
|
|
if(nTouch > 0)
|
|
{
|
|
if(nTouch == 2)
|
|
{
|
|
nHeal *= 2;
|
|
}
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
|
|
eDam = PRCEffectDamage(oTarget, nHeal, DAMAGE_TYPE_DIVINE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eEVis, oTarget);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
// A good-aligned paladin can use his lay on hands ability to damage undead creatures
|
|
// having undead class levels qualifies as undead as well
|
|
//--------------------------------------------------------------------------
|
|
|
|
if (GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_GOOD || GetAlignmentGoodEvil(OBJECT_SELF) == ALIGNMENT_NEUTRAL)
|
|
{
|
|
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || GetLevelByClass(CLASS_TYPE_UNDEAD,oTarget)>0
|
|
|| (GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD))
|
|
{
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
|
|
//Make a ranged touch attack
|
|
nTouch = PRCDoMeleeTouchAttack(oTarget);;
|
|
|
|
//----------------------------------------------------------------------
|
|
// GZ: The PhB classifies Lay on Hands as spell like ability, so it is
|
|
// subject to SR. No more cheesy demi lich kills on touch, sorry.
|
|
//----------------------------------------------------------------------
|
|
int nResist = PRCDoResistSpell(OBJECT_SELF, oTarget, nLevel + SPGetPenetr());
|
|
if (nResist == 0 )
|
|
{
|
|
if(nTouch > 0)
|
|
{
|
|
if(nTouch == 2)
|
|
{
|
|
nHeal *= 2;
|
|
}
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS));
|
|
eDam = PRCEffectDamage(oTarget, nHeal, DAMAGE_TYPE_DIVINE);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELLABILITY_LAY_ON_HANDS, FALSE));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
}
|
|
}
|
|
|
|
}
|
|
|