//::///////////////////////////////////////////////
//:: Name:     Respawn Script
//:: FileName: res_onrespawn
//:://////////////////////////////////////////////
/*
    Place this script in the Module's OnRespawn Event
    See the res_readme script for more instructions

    This is based on Moeb's Respawn_System
    Available from NWVault.
    It has been extensively modified to simplify
    and more fully explain and comment the script.
    Hope you like it.
*/
//:://////////////////////////////////////////////
//:: Created By: Dezran
//:: Created On: 11/25/02
//:://////////////////////////////////////////////

void main()
{
    // Set up Variables
    object oPC, oHeav, oHell, oPurg;
    string sKiller;
    location lHeav, lHell, lPurg, lDeath;
    effect eHell, ePurg, eHeav;

    // Get the PC when he presses the Respawn Button
    oPC = GetLastRespawnButtonPresser();

    // Set all the Waypoints
    oHeav = GetWaypointByTag("WP_HEAVEN");
    oHell = GetWaypointByTag("WP_HELL");
    oPurg = GetWaypointByTag("WP_PURG");

    // Get the Locations for the Waypoints
    lHeav = GetLocation(oHeav);
    lHell = GetLocation(oHell);
    lPurg = GetLocation(oPurg);

    // Set some Effects for Respawning
    // Change these effects as desired by simply changing
    // the effect in EffectVisualEffect(*chages*);
    eHell = EffectVisualEffect(VFX_IMP_HARM);
    ePurg = EffectVisualEffect(VFX_IMP_LIGHTNING_M);
    eHeav = EffectVisualEffect(VFX_IMP_HEALING_X);

    // Get the PC's Death Location for Respawn Later
    lDeath = GetLocation(oPC);

    //  Set PC's Respawn Location in a Local Variable
    SetLocalLocation(oPC, "Res_Loc", lDeath);

    // Get the PC's Alignment to determine where to go
    if (GetGoodEvilValue(oPC) <= 29)
    {
        // Do some Respawning Effects
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHell, oPC);

        // Set the PC's Alignment Value for the Return Effects
        SetLocalInt(oPC, "Res_Align", 1);

        // Send the PC to the Afterlife
        AssignCommand(oPC, JumpToLocation(lHell));
    }
    else if ((GetGoodEvilValue(oPC) >= 30) && (GetGoodEvilValue(oPC) <= 70))
    {
        // Do some Respawning Effects
        ApplyEffectToObject(DURATION_TYPE_INSTANT, ePurg, oPC);

        // Set the PC's Alignment Value for the Return Effects
        SetLocalInt(oPC, "Res_Align", 2);

        // Send the PC to the Afterlife
        AssignCommand(oPC, JumpToLocation(lPurg));
    }
    else if (GetGoodEvilValue(oPC) >= 71)
    {
        // Do some Respawning Effects
        ApplyEffectToObject(DURATION_TYPE_INSTANT, eHeav, oPC);

        // Set the PC's Alignment Value for the Return Effects
        SetLocalInt(oPC, "Res_Align", 3);

        // Send the PC to the Afterlife
        AssignCommand(oPC, JumpToLocation(lHeav));
    }

    // Find out who or what killed the PC
    sKiller = GetName(GetLastHostileActor(oPC));

    // Tell the PC who or what killed him
    SendMessageToPC(oPC, "Killed by " + sKiller);

    // Remove all Effects and Magic from the PC
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPC);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDispelMagicAll(20), oPC);
}