Updated AMS marker feats. Removed arcane & divine marker feats. Updated Dread Necromancer for epic progression. Updated weapon baseitem models. Updated new weapons for crafting & npc equip. Updated prefix. Updated release archive.
124 lines
3.9 KiB
Plaintext
124 lines
3.9 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: Name: Power Leech
|
|
//:: Filename: sp_power_leech.nss
|
|
//::///////////////////////////////////////////////
|
|
/**@file Power Leech
|
|
Necromancy [Evil]
|
|
Level: Corrupt 5
|
|
Components: V, S, Corrupt
|
|
Casting Time: 1 action
|
|
Range: Medium (100 ft. + 10 ft./level)
|
|
Target: One living creature
|
|
Duration: 1 round/level
|
|
Saving Throw: Will negates
|
|
Spell Resistance: Yes
|
|
|
|
The caster creates a conduit of evil energy between
|
|
himself and another creature. Through the conduit,
|
|
the caster can leech off ability score points at
|
|
the rate of 1 point per round. The other creature
|
|
takes 1 point of drain from an ability score of
|
|
the caster's choosing, and the caster gains a +1
|
|
enhancement bonus to the same ability score per
|
|
point drained during the casting of this spell.
|
|
In other words, all points drained during this
|
|
spell stack with each other to determine the
|
|
enhancement bonus, but they don't stack with
|
|
other castings of power leech or with other
|
|
enhancement bonuses.
|
|
|
|
The enhancement bonus lasts for 10 minutes per
|
|
caster level.
|
|
|
|
Corruption Cost: 1 point of Wisdom drain.
|
|
|
|
|
|
@author Written By: Tenjac
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_inc_spells"
|
|
#include "inc_dynconv"
|
|
|
|
void main()
|
|
{
|
|
|
|
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
|
|
|
//Spellhook
|
|
if (!X2PreSpellCastCode()) return;
|
|
|
|
object oPC = OBJECT_SELF;
|
|
object oSkin = GetPCSkin(oPC);
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
int nCasterLvl = PRCGetCasterLevel(oPC);
|
|
int nMetaMagic = PRCGetMetaMagicFeat();
|
|
int nAbility;
|
|
int nSpell = GetSpellId();
|
|
int nRoundCounter = nCasterLvl;
|
|
float fRemove = (nCasterLvl * 600.0f);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
effect eDur2 = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
|
|
|
PRCSignalSpellEvent(oTarget, TRUE, SPELL_POWER_LEECH, oPC);
|
|
|
|
//Check for Extend
|
|
if (CheckMetaMagic(nMetaMagic, METAMAGIC_EXTEND))
|
|
{
|
|
fRemove = (fRemove * 2);
|
|
}
|
|
|
|
//Set float
|
|
SetLocalFloat(oPC, "PRC_Power_Leech_fDur", fRemove);
|
|
|
|
//Set counter int
|
|
SetLocalInt(oPC, "PRC_Power_Leech_Counter", nRoundCounter);
|
|
|
|
// don't allow it to be cast again on the same object if it's still under the effect
|
|
if (array_exists(OBJECT_SELF, "PRC_PowerLeechTarget"))
|
|
{
|
|
int nArraySize = array_get_size(oPC, "PRC_PowerLeechTarget");
|
|
int i;
|
|
object oCompare;
|
|
for(i = 0; i < nArraySize; i++)
|
|
{
|
|
oCompare = array_get_object(oPC, "PRC_PowerLeechTarget", i);
|
|
if (oCompare == oTarget) // the the target is still under the spell's effects
|
|
{
|
|
// spell has no effect
|
|
FloatingTextStrRefOnCreature(100775,OBJECT_SELF,FALSE); // "Target already has this effect!"
|
|
PRCSetSchool();
|
|
return;
|
|
}
|
|
}
|
|
array_set_object(oPC, "PRC_PowerLeechTarget", nArraySize, oTarget);
|
|
}
|
|
else if (PRCGetIsAliveCreature(oTarget))
|
|
{
|
|
// Add target to local object array
|
|
array_create(oPC, "PRC_PowerLeechTarget");
|
|
array_set_object(oPC, "PRC_PowerLeechTarget", array_get_size(oPC, "PRC_PowerLeechTarget"), oTarget);
|
|
|
|
//Clear actions for the convo
|
|
ClearAllActions(TRUE);
|
|
|
|
//Check for ability to drain
|
|
|
|
/* <Stratovarius> That would be easiest to do as a convo I think
|
|
<Stratovarius> just steal the animal affinity one from psionics and modify*/
|
|
|
|
StartDynamicConversation("power_leech", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
|
|
}
|
|
|
|
//Corruption Cost
|
|
{
|
|
DelayCommand(fRemove, DoCorruptionCost(oPC, ABILITY_WISDOM, 1, 1));
|
|
}
|
|
|
|
//Corrupt spells get mandatory 10 pt evil adjustment, regardless of switch
|
|
AdjustAlignment(oPC, ALIGNMENT_EVIL, 10, FALSE);
|
|
|
|
//SPEvilShift(oPC);
|
|
|
|
PRCSetSchool();
|
|
} |