//::////////////////////////////////////////////// //:: 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)); } }