Further file organization
Further file organization
This commit is contained in:
53
nwn/nwnprc/trunk/scripts/tmp_lich_touch.nss
Normal file
53
nwn/nwnprc/trunk/scripts/tmp_lich_touch.nss
Normal file
@@ -0,0 +1,53 @@
|
||||
/**
|
||||
* @file
|
||||
* Spellscript for Lich touch attack
|
||||
*/
|
||||
#include "prc_inc_sp_tch"
|
||||
#include "prc_inc_template"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nIsDemi = GetHasTemplate(TEMPLATE_DEMILICH,OBJECT_SELF);
|
||||
|
||||
// Gotta hit first
|
||||
if(PRCDoMeleeTouchAttack(oTarget)<1)
|
||||
return;
|
||||
|
||||
// Gotta be a living critter
|
||||
int nType = MyPRCGetRacialType(oTarget);
|
||||
if ((nType == RACIAL_TYPE_CONSTRUCT) ||
|
||||
(nType == RACIAL_TYPE_UNDEAD) ||
|
||||
(nType == RACIAL_TYPE_ELEMENTAL))
|
||||
return;
|
||||
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
|
||||
|
||||
// Total character levels
|
||||
int nTotalHD = GetHitDice(OBJECT_SELF);
|
||||
// Save DC
|
||||
int nSaveDC = 10 + nTotalHD/2 + GetAbilityModifier(ABILITY_CHARISMA,OBJECT_SELF);
|
||||
// Damage
|
||||
int nDam = d8()+5;
|
||||
if(nIsDemi)
|
||||
nDam = d6(10)+20;
|
||||
// Apply Damage 1/2 if they will save, Demiliches - no save
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||||
if(WillSave(oTarget,nSaveDC,SAVING_THROW_TYPE_NEGATIVE) && !nIsDemi)
|
||||
nDam = nDam/2;
|
||||
|
||||
effect eDamage = EffectDamage(nDam,DAMAGE_TYPE_NEGATIVE);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eDamage,oTarget);
|
||||
// Apply paralyze touch
|
||||
if(FortitudeSave(oTarget,nSaveDC,SAVING_THROW_TYPE_NONE,OBJECT_SELF))
|
||||
return;
|
||||
eVis = EffectVisualEffect(VFX_DUR_PARALYZED);
|
||||
effect ePara = EffectParalyze();
|
||||
ePara = EffectLinkEffects(eVis,ePara);
|
||||
// Cant be dispelled
|
||||
ePara = SupernaturalEffect(ePara);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT,ePara,oTarget);
|
||||
eVis = EffectVisualEffect(VFX_IMP_STUN);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
|
||||
}
|
Reference in New Issue
Block a user