Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
146
trunk/spells/nw_s0_pwkill.nss
Normal file
146
trunk/spells/nw_s0_pwkill.nss
Normal file
@@ -0,0 +1,146 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Power Word, Kill
|
||||
//:: NW_S0_PWKill
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
// When power word, kill is uttered, you can either
|
||||
// target a single creature or let the spell affect a
|
||||
// group.
|
||||
// If power word, kill is targeted at a single creature,
|
||||
// that creature dies if it has 100 or fewer hit points.
|
||||
// If the power word, kill is cast as an area spell, it
|
||||
// kills creatures in a 15-foot-radius sphere. It only
|
||||
// kills creatures that have 20 or fewer hit points, and
|
||||
// only up to a total of 200 hit points of such
|
||||
// creatures. The spell affects creatures with the lowest.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Noel Borstad
|
||||
//:: Created On: Dec 18, 2000
|
||||
//:://////////////////////////////////////////////
|
||||
//:: VFX Pass By: Preston W, On: June 22, 2001
|
||||
//:: Update Pass By: Preston W, On: Aug 3, 2001
|
||||
|
||||
//:: modified by mr_bumpkin Dec 4, 2003 for PRC stuff
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_DIVINATION);
|
||||
/*
|
||||
Spellcast Hook Code
|
||||
Added 2003-06-20 by Georg
|
||||
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
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nDamageDealt = 0;
|
||||
int nHitpoints, nMin;
|
||||
object oWeakest;
|
||||
effect eDeath = EffectDeath();
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
|
||||
effect eWord = EffectVisualEffect(VFX_FNF_PWKILL);
|
||||
float fDelay;
|
||||
int bKill;
|
||||
nCasterLvl +=SPGetPenetr();
|
||||
|
||||
//Apply the VFX impact
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eWord, PRCGetSpellTargetLocation());
|
||||
//Check for the single creature or area targeting of the spell
|
||||
if (GetIsObjectValid(oTarget))
|
||||
{
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_POWER_WORD_KILL));
|
||||
//Check the creatures HP
|
||||
if ( GetCurrentHitPoints(oTarget) <= 100 )
|
||||
{
|
||||
if(!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl))
|
||||
{
|
||||
DeathlessFrenzyCheck(oTarget);
|
||||
|
||||
//Apply the death effect and the VFX impact
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//Continue through the while loop while the damage deal is less than 200.
|
||||
while (nDamageDealt < 200)
|
||||
{
|
||||
//Set nMin higher than the highest HP amount allowed
|
||||
nMin = 25;
|
||||
oWeakest = OBJECT_INVALID;
|
||||
//Get the first target in the spell area
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
//Make sure the target avoids all allies.
|
||||
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
bKill = GetLocalInt(oTarget, "NW_SPELL_PW_KILL_" + GetTag(OBJECT_SELF));
|
||||
//Get the HP of the current target
|
||||
nHitpoints = GetCurrentHitPoints(oTarget);
|
||||
//Check if the currently selected target is lower in HP than the weakest stored creature
|
||||
if ((nHitpoints < nMin) && ((nHitpoints > 0) && (nHitpoints <= 20)) && bKill == FALSE)
|
||||
{
|
||||
nMin = nHitpoints;
|
||||
oWeakest = oTarget;
|
||||
}
|
||||
}
|
||||
//Get next target in the spell area
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, PRCGetSpellTargetLocation());
|
||||
}
|
||||
//If no weak targets are available then break out of the loop
|
||||
if (!GetIsObjectValid(oWeakest))
|
||||
{
|
||||
nDamageDealt = 250;
|
||||
}
|
||||
else
|
||||
{
|
||||
fDelay = PRCGetRandomDelay(0.75, 2.0);
|
||||
SetLocalInt(oWeakest, "NW_SPELL_PW_KILL_" + GetTag(OBJECT_SELF), TRUE);
|
||||
//Fire cast spell at event for the specified target
|
||||
SignalEvent(oWeakest, EventSpellCastAt(OBJECT_SELF, SPELL_POWER_WORD_KILL));
|
||||
if(!PRCDoResistSpell(OBJECT_SELF, oWeakest,0, fDelay))
|
||||
{
|
||||
DeathlessFrenzyCheck(oTarget);
|
||||
|
||||
//Apply the VFX impact and death effect
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oWeakest));
|
||||
if(!GetIsImmune(oWeakest, IMMUNITY_TYPE_DEATH))
|
||||
{
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oWeakest));
|
||||
}
|
||||
//Add the creatures HP to the total
|
||||
nDamageDealt = nDamageDealt + nMin;
|
||||
string sTag = "NW_SPELL_PW_KILL_" + GetTag(OBJECT_SELF);
|
||||
DelayCommand(fDelay + 0.25, DeleteLocalInt(oWeakest, sTag));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
// Getting rid of the integer used to hold the spells spell school
|
||||
}
|
Reference in New Issue
Block a user