55 lines
1.9 KiB
Plaintext
55 lines
1.9 KiB
Plaintext
|
//:://////////////////////////////////////////////
|
||
|
//:: FileName: "run_all_martyr"
|
||
|
/* Purpose: For "Allied Martyr" spell - This is the actual functional body of
|
||
|
the spell, but needs to be called seperately due to the need of a
|
||
|
player's permission.
|
||
|
*/
|
||
|
//:://////////////////////////////////////////////
|
||
|
//:: Created By: Boneshank
|
||
|
//:: Last Updated On: March 12, 2004
|
||
|
//:://////////////////////////////////////////////
|
||
|
|
||
|
#include "prc_alterations"
|
||
|
#include "inc_dispel"
|
||
|
|
||
|
void RunMyMartyrdom(object oAlly, int nDuration, object oMartyr = OBJECT_SELF);
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
// Who is my ally that I am helping?
|
||
|
object oAlly = GetLocalObject(OBJECT_SELF, "oAllyForMyMartyrdom");
|
||
|
// How long do I have to do this for?
|
||
|
int nDuration = GetLocalInt(OBJECT_SELF,
|
||
|
"nTimeForMartyrdomFor");
|
||
|
// Begin the martyrdom.
|
||
|
RunMyMartyrdom(oAlly, nDuration, OBJECT_SELF);
|
||
|
}
|
||
|
|
||
|
void RunMyMartyrdom(object oAlly, int nDuration, object oMartyr = OBJECT_SELF)
|
||
|
{
|
||
|
int nAllyCurrentHP = GetCurrentHitPoints(oAlly);
|
||
|
int nAllyMaxHP = GetMaxHitPoints(oAlly);
|
||
|
int nMyHP = GetCurrentHitPoints(OBJECT_SELF);
|
||
|
int nTransfer = nAllyMaxHP - nAllyCurrentHP;
|
||
|
effect eVisDown = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
|
||
|
effect eVisUp = EffectVisualEffect(VFX_IMP_HEALING_L);
|
||
|
effect eHPLoss = EffectDamage(nTransfer);
|
||
|
effect eHPGain = EffectHeal(nTransfer);
|
||
|
effect eLink1 = EffectLinkEffects(eVisDown, eHPLoss);
|
||
|
effect eLink2 = EffectLinkEffects(eVisUp, eHPGain);
|
||
|
// If the spell's duration has not expired yet.
|
||
|
if (!GetIsDead(OBJECT_SELF) &&
|
||
|
!GetIsDead(oAlly) &&
|
||
|
GetIsObjectValid(oAlly) &&
|
||
|
nTransfer > 0 )
|
||
|
{
|
||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink1, OBJECT_SELF);
|
||
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink2, oAlly);
|
||
|
}
|
||
|
if (nDuration > 0)
|
||
|
{
|
||
|
nDuration -= 1;
|
||
|
DelayCommand(3.0, RunMyMartyrdom(oAlly, nDuration, OBJECT_SELF));
|
||
|
}
|
||
|
}
|