forked from Jaysyn/PRC8
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.
116 lines
3.8 KiB
Plaintext
116 lines
3.8 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Heal
|
|
//:: [NW_S0_Heal.nss]
|
|
//:: Copyright (c) 2000 Bioware Corp.
|
|
//:://////////////////////////////////////////////
|
|
//:: Heals the target to full unless they are undead.
|
|
//:: If undead they reduced to 1d4 HP.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Preston Watamaniuk
|
|
//:: Created On: Jan 12, 2001
|
|
//:://////////////////////////////////////////////
|
|
//:: Update Pass By: Preston W, On: Aug 1, 2001
|
|
|
|
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
|
|
|
//::Added code to maximize for Faith Healing and Blast Infidel
|
|
//::Aaon Graywolf - Jan 7, 2004
|
|
|
|
#include "prc_inc_clsfunc"
|
|
|
|
void main()
|
|
{
|
|
|
|
|
|
//Declare major variables
|
|
object oTarget = OBJECT_SELF;
|
|
effect eHeal;
|
|
int nHeal;
|
|
effect eSun = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
|
effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S);
|
|
|
|
effect eRegen = EffectRegenerate(3, 6.0);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eLink = EffectLinkEffects(eRegen, eDur);
|
|
eLink = EffectLinkEffects(eLink, eVis);
|
|
|
|
|
|
if (!GetHasFeat(FEAT_DRAGONSONG_STRENGTH, OBJECT_SELF))
|
|
{
|
|
FloatingTextStringOnCreature("This ability is tied to your dragons song ability, which has no more uses for today.",OBJECT_SELF); // no more bardsong uses left
|
|
return;
|
|
}
|
|
|
|
if (PRCGetHasEffect(EFFECT_TYPE_SILENCE,OBJECT_SELF))
|
|
{
|
|
FloatingTextStrRefOnCreature(85764,OBJECT_SELF); // not useable when silenced
|
|
return;
|
|
}
|
|
|
|
if (PRCGetHasEffect(EFFECT_TYPE_DEAF,OBJECT_SELF) && d100(1) <= 20)
|
|
{
|
|
FloatingTextStringOnCreature("Your deafness has caused you to fail.",OBJECT_SELF);
|
|
DecrementRemainingFeatUses(OBJECT_SELF, FEAT_DRAGONSONG_STRENGTH);
|
|
return;
|
|
}
|
|
|
|
effect eFNF = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30);
|
|
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eFNF, GetLocation(OBJECT_SELF));
|
|
|
|
RemoveOldSongEffects(OBJECT_SELF,SPELL_DSL_SONG_HEALING);
|
|
RemoveOldSongs(OBJECT_SELF);
|
|
|
|
int nEpic = GetHasFeat(FEAT_EPIC_DRAGONSONG_HEALING) ? TRUE:FALSE;
|
|
//Fire cast spell at event for the specified target
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_HEAL, FALSE));
|
|
|
|
int nLevel = GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST);
|
|
|
|
//Determine spell duration as an integer for later conversion to Rounds, Turns or Hours.
|
|
int nDuration = 10*nLevel;
|
|
|
|
//Check to see if the caster has Lasting Impression and increase duration.
|
|
if(GetHasFeat(870))
|
|
{
|
|
nDuration *= 10;
|
|
}
|
|
|
|
// lingering song
|
|
if(GetHasFeat(424)) // lingering song
|
|
{
|
|
nDuration += 5;
|
|
}
|
|
|
|
//Get first target in shape
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, PRCGetSpellTargetLocation());
|
|
while (GetIsObjectValid(oTarget))
|
|
{
|
|
|
|
if(GetIsReactionTypeFriendly(oTarget)|| GetFactionEqual(oTarget))
|
|
{
|
|
//Figure out how much to heal
|
|
nHeal = (nEpic) ? (d8(4) + 2 * nLevel) : (d8(2) + 2 * nLevel); // cure moderate or cure critical (epic)
|
|
|
|
//Set the heal effect
|
|
eHeal = EffectHeal(nHeal);
|
|
//Apply the heal effect and the VFX impact
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHealVis, oTarget);
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, oTarget);
|
|
|
|
if (nEpic)
|
|
{
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oTarget, RoundsToSeconds(nDuration),FALSE);
|
|
StoreSongRecipient(oTarget, OBJECT_SELF, GetSpellId(), nDuration);
|
|
}
|
|
// Code for FB to remove damage that would be caused at end of Frenzy
|
|
SetLocalInt(oTarget, "PC_Damage", 0);
|
|
}
|
|
//Get next target in the shape
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_HUGE, PRCGetSpellTargetLocation());
|
|
}
|
|
|
|
DecrementRemainingFeatUses(OBJECT_SELF, FEAT_DRAGONSONG_STRENGTH);
|
|
|
|
}
|