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.
105 lines
3.9 KiB
Plaintext
105 lines
3.9 KiB
Plaintext
//Spell script for reserve feat touch attacks
|
|
//prc_reservtch
|
|
//by ebonfowl
|
|
//Dedicated to Edgar, the real Ebonfowl
|
|
|
|
#include "prc_sp_func"
|
|
#include "prc_inc_sp_tch"
|
|
#include "prc_add_spell_dc"
|
|
|
|
void main()
|
|
{
|
|
object oPC = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
|
|
int nSpellID = PRCGetSpellId();
|
|
|
|
effect eEffect, eLink, eVis, eVisFail;
|
|
|
|
int nDamageType, iAttackRoll, nDuration, nPartial, nDC;
|
|
int nDamage = 0;
|
|
|
|
//Define individual spell parameters
|
|
switch (nSpellID)
|
|
{
|
|
case SPELL_CLAP_OF_THUNDER:
|
|
{
|
|
nDamage = d6(GetLocalInt(oPC, "ClapOfThunderBonus"));
|
|
nDamageType = DAMAGE_TYPE_SONIC;
|
|
nDuration = 1;
|
|
nPartial = 0;
|
|
nDC = 10 + GetLocalInt(oPC, "ClapOfThunderBonus") + GetDCAbilityModForClass(GetPrimarySpellcastingClass(oPC), oPC);
|
|
|
|
eEffect = EffectDeaf();
|
|
eEffect = SupernaturalEffect(eEffect);
|
|
eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
|
eVisFail = EffectVisualEffect(VFX_IMP_STUN);
|
|
|
|
if (!GetLocalInt(oPC, "ClapOfThunderBonus"))
|
|
{
|
|
FloatingTextStringOnCreature("You do not have a spell available of adequate level or type", oPC, FALSE);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
|
|
case SPELL_SICKENING_GRASP:
|
|
{
|
|
nDuration = GetLocalInt(oPC, "SickeningGraspBonus");
|
|
nPartial = 1;
|
|
nDC = 10 + GetLocalInt(oPC, "SickeningGraspBonus") + GetDCAbilityModForClass(GetPrimarySpellcastingClass(oPC), oPC);
|
|
|
|
eEffect = EffectAttackDecrease(2);
|
|
eEffect = EffectLinkEffects(EffectDamageDecrease(2, DAMAGE_TYPE_SLASHING), eEffect);
|
|
eEffect = EffectLinkEffects(EffectSavingThrowDecrease(SAVING_THROW_ALL, 2), eEffect);
|
|
eEffect = EffectLinkEffects(EffectSkillDecrease(SKILL_ALL_SKILLS, 2), eEffect);
|
|
eEffect = SupernaturalEffect(eEffect);
|
|
eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
|
eVisFail = EffectVisualEffect(VFX_IMP_STUN);
|
|
|
|
//Sanity checks
|
|
if (!GetLocalInt(oPC, "SickeningGraspBonus"))
|
|
{
|
|
FloatingTextStringOnCreature("You do not have a spell available of adequate level or type", oPC, FALSE);
|
|
return;
|
|
}
|
|
|
|
if (GetLocalInt(oTarget, "HasSickeningGrasp") == TRUE)
|
|
{
|
|
FloatingTextStringOnCreature("Target is already sickened", oPC, FALSE);
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
|
|
{
|
|
SignalEvent(oTarget, EventSpellCastAt(oPC, nSpellID, TRUE));
|
|
|
|
iAttackRoll = PRCDoMeleeTouchAttack(oTarget);
|
|
|
|
if (iAttackRoll > 0)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
if (nDamage > 0) ApplyTouchAttackDamage(oPC, oTarget, iAttackRoll, nDamage, nDamageType);
|
|
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, RoundsToSeconds(nDuration));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisFail, oTarget);
|
|
if (nPartial == 1)
|
|
{
|
|
SetLocalInt(oTarget, "HasSickeningGrasp", TRUE);
|
|
DelayCommand(RoundsToSeconds(nDuration), DeleteLocalInt(oTarget, "HasSickeningGrasp"));
|
|
}
|
|
}
|
|
else if (nPartial == 1)
|
|
{
|
|
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eEffect, oTarget, RoundsToSeconds(1));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisFail, oTarget);
|
|
SetLocalInt(oTarget, "HasSickeningGrasp", TRUE);
|
|
DelayCommand(6.0, DeleteLocalInt(oTarget, "HasSickeningGrasp"));
|
|
}
|
|
}
|
|
}
|
|
} |