PRC8/nwn/nwnprc/trunk/spells/sp_masochism.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
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.
2024-02-11 14:01:05 -05:00

77 lines
2.0 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Name Masochism
//:: FileName sp_masochism.nss
//:://////////////////////////////////////////////
/**@file Masochism
Enchantment [Evil]
Level: Asn 3, Blk 3, Clr 3, Sor/Wiz 2
Components: V, S, M
Casting Time: 1 action
Range: Personal
Target: Caster
Duration: 1 round/level
For every 10 points of damage the caster takes in a
given round, he gains a +1 luck bonus on attack
rolls, saving throws, and skill checks made in
the following round. The more damage the caster
takes, the greater the luck bonus. It's possible to
get a luck bonus in multiple rounds if the caster
takes damage in more than one round during the spell's
duration.
Material Component: A leather strap that has been
soaked in the caster's blood.
Author: Tenjac
Created: 6/13/06
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
void MasochLoop(object oPC, int nHP, int nCounter);
#include "prc_inc_spells"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
object oPC = OBJECT_SELF;
int nCounter = PRCGetCasterLevel(oPC);
int nHP = GetCurrentHitPoints(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
if (nMetaMagic & METAMAGIC_EXTEND)
{
nCounter += nCounter;
}
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_EVIL_HELP), oPC);
MasochLoop(oPC, nHP, nCounter);
PRCSetSchool();
//SPEvilShift(oPC);
}
void MasochLoop(object oPC, int nHP, int nCounter)
{
if(nCounter > 0)
{
int nHPChange = (nHP - GetCurrentHitPoints(oPC));
nHP = GetCurrentHitPoints(oPC);
int nBonus = nHPChange/10;
effect eLink = EffectAttackIncrease(nBonus);
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_ALL));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_ALL_SKILLS, nBonus));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, 6.0f);
nCounter--;
DelayCommand(6.0f, MasochLoop(oPC, nHP, nCounter));
}
}