//:://///////////////////////////////////////////// //:: [Harm] //:: [NW_S0_Harm.nss] //:: Copyright (c) 2000 Bioware Corp. //::////////////////////////////////////////////// //:: Reduces target to 1d4 HP on successful touch //:: attack. If the target is undead it is healed. //::////////////////////////////////////////////// //:: Created By: Keith Soleski //:: Created On: Jan 18, 2001 //::////////////////////////////////////////////// //:: VFX Pass By: Preston W, On: June 20, 2001 //:: Update Pass By: Preston W, On: Aug 1, 2001 //:: Last Update: Georg Zoeller On: Oct 10, 2004 //::////////////////////////////////////////////// /* Patch 1.70, fix by Shadooow > touch attack removed if cast on undead (roll wasn't used in this case anyway) */ #include "70_inc_spells" #include "x0_i0_spells" #include "x2_inc_spellhook" void main() { /* Spellcast Hook Code Added 2003-06-23 by GeorgZ If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook //Declare major variables spellsDeclareMajorVariables(); int nDamage, nHeal; effect eVis = EffectVisualEffect(246); effect eVis2 = EffectVisualEffect(VFX_IMP_HEALING_G); effect eHeal, eDam; //Check that the target is undead if (GetRacialType(spell.Target) == RACIAL_TYPE_UNDEAD) { //Figure out the amount of damage to heal nHeal = GetMaxHitPoints(spell.Target) - GetCurrentHitPoints(spell.Target); //Set the heal effect eHeal = EffectHeal(nHeal); //Apply heal effect and VFX impact ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeal, spell.Target); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, spell.Target); //Fire cast spell at event for the specified target SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, spell.Id, FALSE)); } //if cast from onhit, feedback won't show else if (TouchAttackMelee(spell.Target,spell.Item == OBJECT_INVALID) != FALSE) //GZ: Fixed boolean check to work in NWScript. 1 or 2 are valid return numbers from TouchAttackMelee { if(spellsIsTarget(spell.Target, SPELL_TARGET_SINGLETARGET, spell.Caster)) { //Fire cast spell at event for the specified target SignalEvent(spell.Target, EventSpellCastAt(spell.Caster, SPELL_HARM)); if (!MyResistSpell(spell.Caster, spell.Target)) { //nDamage = GetCurrentHitPoints(spell.Target) - d4(1); int nCasterLevel = GetCasterLevel(spell.Caster); if (nCasterLevel > 20) nCasterLevel = 20; nDamage = MaximizeOrEmpower(6, nCasterLevel, spell.Meta); eDam = EffectDamage(nDamage,DAMAGE_TYPE_NEGATIVE); //Apply the VFX impact and effects DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, spell.Target)); ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, spell.Target); } } } }