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.
89 lines
3.0 KiB
Plaintext
89 lines
3.0 KiB
Plaintext
/*Harvest Soul
|
|
|
|
Unlike a traditional meldshaper who
|
|
relies entirely on his own pool of soul energy to power his
|
|
soulmelds, you tap the soul energy of others for your power.
|
|
Beginning at 1st level, you can perform a short ritual to
|
|
capture the soul energy of a newly dead corpse. This ritual
|
|
requires 1 minute of uninterrupted concentration plus the
|
|
corpse of a living creature that has been dead for no longer
|
|
than 1 hour per necrocarnate level you possess. At the end
|
|
of the ritual, you gain a number of essentia points equal to
|
|
one-half your necrocarnate level (rounded up). This benefit
|
|
lasts for 24 hours. No corpse can be used for this purpose
|
|
more than once.
|
|
At 10th level, you can perform this ritual as a full-round
|
|
action that provokes attacks of opportunity.
|
|
*/
|
|
|
|
#include "moi_inc_moifunc"
|
|
|
|
void NecroHarvest(object oMeldshaper, int nEssentia)
|
|
{
|
|
AddNecrocarnumEssentia(oMeldshaper, nEssentia);
|
|
FloatingTextStringOnCreature("You have gained "+IntToString(nEssentia)+" necrocarnum essentia", oMeldshaper, FALSE);
|
|
}
|
|
|
|
// Counts down a minute, then grants the essentia
|
|
void Countdown(object oMeldshaper, int nTime, int nEssentia)
|
|
{
|
|
if (0 >= nTime)
|
|
{
|
|
NecroHarvest(oMeldshaper, nEssentia);
|
|
SetCutsceneMode(oMeldshaper, FALSE);
|
|
}
|
|
else if (!GetIsInCombat(oMeldshaper)) // Being in combat causes this to fail
|
|
{
|
|
FloatingTextStringOnCreature("You have " + IntToString(nTime) +" seconds until you gain necrocarnum essentia", oMeldshaper, FALSE);
|
|
DelayCommand(6.0, Countdown(oMeldshaper, nTime - 6, nEssentia));
|
|
SetCutsceneMode(oMeldshaper, TRUE);
|
|
AssignCommand(oMeldshaper, ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE, 1.0, 6.0));
|
|
}
|
|
else
|
|
SetCutsceneMode(oMeldshaper, FALSE);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
object oMeldshaper = OBJECT_SELF;
|
|
int nClass = GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper);
|
|
// Round up rather than down
|
|
int nEssentia = (nClass+1)/2;
|
|
|
|
if (GetLocalInt(oMeldshaper, "NecroHarvestSoul1"))
|
|
{
|
|
// Use up the corpse
|
|
DeleteLocalInt(oMeldshaper, "NecroHarvestSoul1");
|
|
if (10 > nClass) Countdown(oMeldshaper, 60, nEssentia);
|
|
else NecroHarvest(oMeldshaper, nEssentia);
|
|
}
|
|
else if (GetLocalInt(oMeldshaper, "NecroHarvestSoul2"))
|
|
{
|
|
// Use up the corpse
|
|
DeleteLocalInt(oMeldshaper, "NecroHarvestSoul2");
|
|
if (10 > nClass) Countdown(oMeldshaper, 60, nEssentia);
|
|
else NecroHarvest(oMeldshaper, nEssentia);
|
|
}
|
|
else if (GetLocalInt(oMeldshaper, "NecroHarvestSoul"))
|
|
{
|
|
// Use up the corpse
|
|
DeleteLocalInt(oMeldshaper, "NecroHarvestSoul3");
|
|
if (10 > nClass) Countdown(oMeldshaper, 60, nEssentia);
|
|
else NecroHarvest(oMeldshaper, nEssentia);
|
|
}
|
|
else if (GetLocalInt(oMeldshaper, "NecroHarvestSoul4"))
|
|
{
|
|
// Use up the corpse
|
|
DeleteLocalInt(oMeldshaper, "NecroHarvestSoul4");
|
|
if (10 > nClass) Countdown(oMeldshaper, 60, nEssentia);
|
|
else NecroHarvest(oMeldshaper, nEssentia);
|
|
}
|
|
else if (GetLocalInt(oMeldshaper, "NecroHarvestSoul5"))
|
|
{
|
|
// Use up the corpse
|
|
DeleteLocalInt(oMeldshaper, "NecroHarvestSoul5");
|
|
if (10 > nClass) Countdown(oMeldshaper, 60, nEssentia);
|
|
else NecroHarvest(oMeldshaper, nEssentia);
|
|
}
|
|
}
|