PRC8/nwn/nwnprc/trunk/scripts/prc_baeln_tch.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

122 lines
2.7 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Baelnorn Touch
//:: prc_baeln_tch
//:://////////////////////////////////////////////
/**
Touch attack for Baelnorn.
1d8 +5 negative damage, will save for half.
Permanent paralysis, fort save negates.
DC for both is 10 + 1/2 HD + Charisma modifier
Author: Tenjac
Re-created again: 12/08/05
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_sp_tch"
void main()
{
//define vars
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
object oTarget = PRCGetSpellTargetObject();
int nLevel = GetLevelByClass(CLASS_TYPE_BAELNORN, oPC);
int nDam;
int nHD = GetHitDice(oPC);
//DC is 10 + 1/2 HD + CHA mod
int nDC = (10 + (nHD/2) + GetAbilityModifier(ABILITY_CHARISMA, oPC));
float fDuration;
//Make touch attack
int nTouch = PRCDoMeleeTouchAttack(oTarget);
// Gotta be a living critter
int nType = MyPRCGetRacialType(oTarget);
if ((nType == RACIAL_TYPE_CONSTRUCT) ||
(nType == RACIAL_TYPE_UNDEAD) ||
(nType == RACIAL_TYPE_ELEMENTAL))
{
return;
}
// if fails touch
if(!nTouch)
{
return;
}
//Switch statement for levels
switch(nLevel)
{
case 0: return;
case 1:
nDam = (5 + d6(1));
fDuration = RoundsToSeconds(d4(1));
break;
case 2:
nDam = (5 + d8(1));
fDuration = IntToFloat(d4(1) * 60);
break;
case 3:
nDam = (5 + d8(1));
fDuration = IntToFloat(d4(1) * 3600);
break;
case 4:
nDam = (5 + d8(1));
break;
default: return;
}
//check for save for 1/2 damage
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE))
{
nDam /= 2;
if (GetHasMettle(oTarget, SAVING_THROW_WILL))
// This script does nothing if it has Mettle, bail
return;
}
//define effects
effect eVis = EffectVisualEffect(VFX_IMP_HARM);
effect ePar = EffectParalyze();
//Apply Damage only
ApplyTouchAttackDamage(oPC, oTarget, nTouch, nDam, DAMAGE_TYPE_NEGATIVE);
//Fort save for paral
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE) || GetIsImmune(oTarget, IMMUNITY_TYPE_PARALYSIS))
{
return;
}
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
//apply permanent
if(nLevel == 4)
{
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, ePar, oTarget);
return;
}
//apply temp
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePar, oTarget, fDuration);
}