//:://///////////////////////////////////////////// //:: 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); }