PoA_PRC8/_haks/poa_exp_abilities/prc_hexbl_curse.nss
Jaysyn904 7dd83ad168 Spell & Ability Upgrade
Reorganized hak files & removed duplicates.  Added @rafhot's PRC spell & ability level scaling expansion.  Further script integration.  Full compile.
2023-08-19 21:08:35 -04:00

62 lines
2.2 KiB
Plaintext

/*
prc_hexbl_curse
Afflicted creatures save or suffer a large penalty to stats.
*/
#include "prc_inc_combat"
void main()
{
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
if(GetHasFeatEffect(FEAT_HEXCURSE, oTarget))
{
FloatingTextStrRefOnCreature(100775, oCaster, FALSE);//"Target already has this effect!"
IncrementRemainingFeatUses(oCaster, FEAT_HEXCURSE);
return;
}
if(!TakeSwiftAction(oCaster))
{
FloatingTextStringOnCreature("You can use this ability only once per round!", oCaster, FALSE);
IncrementRemainingFeatUses(oCaster, FEAT_HEXCURSE);
return;
}
int nClass = GetLevelByClass(CLASS_TYPE_HEXBLADE, oCaster);
int nDC = 10 + GetAbilityModifier(ABILITY_CHARISMA, oCaster) + (nClass / 2);
int nDmgType = GetWeaponDamageType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget));
if(nDmgType == -1) nDmgType = DAMAGE_TYPE_BLUDGEONING;
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
int nPen = 2;
if (nClass > 96) nPen = 20;
else if (nClass > 88) nPen = 18;
else if (nClass > 76) nPen = 16;
else if (nClass > 68) nPen = 14;
else if (nClass > 56) nPen = 12;
else if (nClass > 48) nPen = 10;
else if (nClass > 36) nPen = 8;
else if (nClass > 18) nPen = 6;
else if (nClass >= 6) nPen = 4;
//if(GetHasFeat(FEAT_EMPOWER_CURSE, oCaster))
// nPen += 1;
effect eLink = EffectLinkEffects(EffectAttackDecrease(nPen), EffectSavingThrowDecrease(SAVING_THROW_ALL, nPen));
eLink = EffectLinkEffects(eLink, EffectDamageDecrease(nPen, nDmgType));
eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_ALL_SKILLS, nPen));
eLink = SupernaturalEffect(eLink);
//Make Will Save
if(!/*Will Save*/ PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC))
{
//Apply Effect and VFX
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(1));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
else // Doesn't count as used if the target makes their save
IncrementRemainingFeatUses(oCaster, FEAT_HEXCURSE);
}