/////////////////////////////////////////////////////////////////////////////
// Real Time Strategy - NWN Modified OnDeath script (rts_mon_death)
//===========================================================================
// By Deva Bryson Winblood. 02/26/2003
// modified Jeremy Greene 06/14/2004
/////////////////////////////////////////////////////////////////////////////

//::///////////////////////////////////////////////
//:: Default:On Death
//:: NW_C2_DEFAULT7
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*
    Shouts to allies that they have been killed
*/
//:://////////////////////////////////////////////
//:: Created By: Preston Watamaniuk
//:: Created On: Oct 25, 2001
//:://////////////////////////////////////////////
#include "NW_I0_GENERIC"
#include "hos_alignment"
#include "hos_respawn_h"


void main()
{
    object oMe=OBJECT_SELF;
    int nClass = GetLevelByClass(CLASS_TYPE_COMMONER);
    int nAlign = GetAlignmentGoodEvil(oMe);
    object oKiller = GetLastKiller();
    object oMod=GetModule();
    int nPow=GetLocalInt(oMod,"nEvilPower");
    int nAdjust=0;
    float fCR=GetChallengeRating(OBJECT_SELF);
    string sIDK=GetLocalString(oKiller,"sTeamID");
    string sID=GetLocalString(OBJECT_SELF,"sTeamID");
    int nN;
    object oItem;
    if (GetTag(oMe)=="THEJUDGE")
    { // spawn a new one
      oItem=GetWaypointByTag("SPAWN_NEWJUDGE");
      oItem=CreateObject(OBJECT_TYPE_CREATURE,"thejudge",GetLocation(oItem));
      oItem=OBJECT_INVALID;
    } // spawn a new one
    if (GetLocalInt(oMod,"nMONGoldDrop")>0&&(GetIsPC(oKiller)||GetMaster(oKiller)!=OBJECT_INVALID||GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,oMe,1,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY,CREATURE_TYPE_IS_ALIVE,TRUE)!=OBJECT_INVALID))
    { // possibly drop gold
      if (GetStringLength(sID)>0&&sID!=sIDK&&!GetIsPossessedFamiliar(oKiller)) ExecuteScript("rts_mon_gold",oMe);
    } // possibly drop gold
    if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL))
    {
        AdjustAlignmentPartyProtected(oKiller, ALIGNMENT_EVIL, 5);
    }
    if (nAlign==ALIGNMENT_GOOD)
    { // someone good died
      nAdjust=1;
      if (fCR>11.9) nAdjust=FloatToInt(fCR)/12;
    } // someone good died
    if (nAlign==ALIGNMENT_EVIL)
    { // someone evil died
      nAdjust=0;
      if (fCR>7.9) nAdjust=FloatToInt(fCR)/8;
      nAdjust= -nAdjust;
    } // someone evil died
    nPow=nPow+nAdjust;
    SetLocalInt(oMod,"nEvilPower",nPow);
    if (nPow>1000) ExecuteScript("rise_of_evil",oMod);
    SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK);
    //Shout Attack my target, only works with the On Spawn In setup
    SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK);
    if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
    {
        SignalEvent(OBJECT_SELF, EventUserDefined(1007));
    }
    ExecuteScript("rts_mon_deathx",OBJECT_SELF);
}