Recent changes Random page
GAMING
Gaming
 
WoWWiki
Halopedia
FFXIclopedia
Age of Conan
Warhammer Online
Grand Theft Wiki
See more...

Rest only when safe

From NWNWiki

Jump to: navigation, search

[edit] Rest only when safe

here it is the godly(self apointed name:P) res only when safe script. change fseconds to change the time between res attempts and change fHostileRange to change the min distance of a hostile to res. from what testing ive done it works great(sofar ive tested with 2 deaths at the same time) if u find a bug please email me bulldogc@cox.net or pm me and ill be glad to try and help ya out. also if u edit or use it please give credit to me someware in it title this one anything and place it in your on death mod slot

void Raise(object oPlayer)
{
        effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);
        effect eBad = GetFirstEffect(oPlayer);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oPlayer);
        ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oPlayer)), oPlayer);
        //Search for negative effects
        while(GetIsEffectValid(eBad))
         {
          if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
              GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
              GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
              GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
              GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL)
               {
                //Remove effect if it is negative.
                  RemoveEffect(oPlayer, eBad);
               }
                eBad = GetNextEffect(oPlayer);
            }
            //Fire cast spell at event for the specified target
            SignalEvent(oPlayer, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));
            ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oPlayer);
}
void main()
{
    float fSeconds = 10.0;
    object oRespawner = GetLastPlayerDied();
    SetLocalObject(oRespawner, "reser", oRespawner);
    DelayCommand(fSeconds,ExecuteScript("reswhensafea", oRespawner));
}

and this one jsut gets saved and sits waiting to be called.

//name this script reswhensafea
void main()
{
    float fHostileRange = 9.0;
    object oRespawner = GetLocalObject(OBJECT_SELF,"reser");
    object oCreature = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, oRespawner);
    float fSeconds = 20.0;
    float fdistancebetween = GetDistanceBetween (oRespawner, oCreature);
    if(GetIsDead(oRespawner) == TRUE)
    {
    if (GetIsObjectValid(oCreature) == TRUE)
      {
       if (fdistancebetween >= fHostileRange)
         {
          AssignCommand(oRespawner, SpeakString("Welcome Back"));
          ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
          ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
         }
       else
         {
          AssignCommand(oRespawner, SpeakString("You can not resurect in the heat of battle"));
          DelayCommand(fSeconds,ExecuteScript("reswhensafea", OBJECT_SELF));
         }
      }
    else
      {
       AssignCommand(oRespawner, SpeakString("The area appears safe to return to life"));
       ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner);
       ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner);
      }
    }
    else
    {
    }
}
Rate this article:
Share this article: