Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
91
trunk/spells/sp_wordbal.nss
Normal file
91
trunk/spells/sp_wordbal.nss
Normal file
@@ -0,0 +1,91 @@
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
|
||||
// Apply a burst visual effect at the target location.
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_WORD), lTarget);
|
||||
|
||||
// Build effects
|
||||
effect eDeath = EffectDeath();
|
||||
eDeath = EffectLinkEffects(eDeath, EffectVisualEffect(VFX_IMP_DEATH_L));
|
||||
effect eParalyzed = EffectParalyze();
|
||||
eParalyzed = EffectLinkEffects(eParalyzed, EffectVisualEffect(VFX_DUR_PARALYZED));
|
||||
|
||||
// Determine the spell's duration.
|
||||
float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(PRCGetCasterLevel()));
|
||||
|
||||
int nCasterLevel = PRCGetCasterLevel();
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
|
||||
{
|
||||
PRCSignalSpellEvent(oTarget);
|
||||
|
||||
// Apply effects as follows, based on differences between caster's level
|
||||
// and target creature's hit dice.
|
||||
// up to caster level : slowed 1 round
|
||||
// up to caster level - 1 : 2d6 str drain for 2d4 rounds
|
||||
// up to caster level - 5 : paralyzed for 1d10 minutes
|
||||
// up to caster level - 10 : killed
|
||||
// effects are cumulative.
|
||||
int nHitDice = GetHitDice(oTarget);
|
||||
if (nHitDice <= nCasterLevel - 10)
|
||||
{
|
||||
DeathlessFrenzyCheck(oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget);
|
||||
}
|
||||
|
||||
// No point in doing anything else if we killed the target, but even
|
||||
// if we apply the effect they could be immune.
|
||||
if (!GetIsDead(oTarget))
|
||||
{
|
||||
if (nHitDice <= nCasterLevel - 5)
|
||||
{
|
||||
// Determine duration (base 1d10 minutes) taking metamagic into
|
||||
// account.
|
||||
int nMinutes = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 1, 10);
|
||||
float fDuration = PRCGetMetaMagicDuration(MinutesToSeconds(nMinutes));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eParalyzed, oTarget, fDuration,TRUE,-1,nCasterLevel);
|
||||
}
|
||||
|
||||
if (nHitDice <= nCasterLevel - 1)
|
||||
{
|
||||
// Determine duration (base 1d10 minutes) taking metamagic into
|
||||
// account.
|
||||
int nRounds = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 2, 4);
|
||||
float fDuration = PRCGetMetaMagicDuration(RoundsToSeconds(nRounds));
|
||||
|
||||
// Roll 2d6 str drain and apply it to the target, along with impact
|
||||
// vfx.
|
||||
int nStrDrain = PRCGetMetaMagicDamage(DAMAGE_TYPE_MAGICAL, 2, 6);
|
||||
/*SPApplyEffectToObject(DURATION_TYPE_TEMPORARY,
|
||||
EffectAbilityDecrease(ABILITY_STRENGTH, nStrDrain), oTarget, fDuration,TRUE,-1,nCasterLevel);*/
|
||||
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nStrDrain, DURATION_TYPE_TEMPORARY, TRUE, fDuration, TRUE);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
|
||||
EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE), oTarget);
|
||||
}
|
||||
|
||||
if (nHitDice <= nCasterLevel)
|
||||
{
|
||||
// Slow the target for 1 round.
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSlow(), oTarget,
|
||||
RoundsToSeconds(1),TRUE,-1,nCasterLevel);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT,
|
||||
EffectVisualEffect(VFX_IMP_SLOW), oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_GARGANTUAN, lTarget);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
Reference in New Issue
Block a user