/*--------------------------------------------------------

Script Name: onplayerlevelup
----------------------------------------------------------
Created By: Genisys(Guile)
Created On: 3/03/09
----------------------------------------------------------

Intergrated SimTools to the OnPlayerLevelUp Event

----------------------------------------------------------*/
#include "nwnx_player"

//Required Include for SimTools
//#include "fky_chat_inc"

void SetTlkOverrideForMaximumLevel(object oPC);

void SendMessageToAllPC(string sMessage);

void SetTlkOverrideForMaximumLevel(object oPC)
{
    int nLevel = GetHitDice(oPC);
    
    if (nLevel >= 60)
    {
        NWNX_Player_SetTlkOverride(oPC, 315, "Maximum Level");
    }    
    else if (nLevel > 39)
    {
        NWNX_Player_SetTlkOverride(oPC, 315, "Next Level: " + IntToString((nLevel + 1) * nLevel * 500) + "\n");
            }
    else
    {
        NWNX_Player_SetTlkOverride(oPC, 315, "");
    }
}

void SendMessageToAllPC(string sMessage)
{
	object oPC = GetFirstPC();
	
	while(GetIsObjectValid(oPC))
	{
		SendMessageToPC(oPC, sMessage);
		oPC = GetNextPC();
	}
}

void main()
{
	ExecuteScript("prc_levelup", OBJECT_SELF);
	object oPC = GetPCLevellingUp();
	int nHD = GetHitDice(oPC);
	location lSaved = GetLocation(oPC);
	int MULTI_PLAYER = GetLocalInt(GetModule(), "multi");
	
///////LOCATION SAVING OPTION////////

//Delete the /* above to activate

	SetTlkOverrideForMaximumLevel(oPC);

//If in the guild only!
//If they are in the guild...
/* 	if(GetItemPossessedBy(oPC, "guildpass")!=OBJECT_INVALID)
	{
		if(GetArea(GetAreaFromLocation(lSaved))!=OBJECT_INVALID)
		{
			object oGuild = GetItemPossessedBy(oPC, "guildstone");

		 //Store the PC's location, so they can come back here after relogging
			SetCampaignLocation("LOCATIONS", GetName(oGuild), lSaved, oPC);

		  //Tell the PC thier location was saved..
			SendMessageToPC(oPC, "Location Saved.");
		}
	} */

// (DO NOT TOUCH THIS LINE!) */

/////////////////////////////////////////

//:: Character Auto Save (Single Character / safe save)

	if(MULTI_PLAYER)
	{
		//DelayCommand(3.0, ExportSingleCharacter(oPC));
	}
	else
	{
		//DelayCommand(2.0, DoSinglePlayerAutoSave());
	}

   if(nHD == 5  || nHD == 10 || nHD == 15 || nHD == 20 ||
      nHD == 25 || nHD == 30 || nHD == 35 || nHD == 40)
   {
       SendMessageToAllPC(GetName(oPC) + " has reached level " + IntToString(nHD)
       + " Congratulations!");
       if(nHD == 40)
          ApplyEffectToObject(DURATION_TYPE_PERMANENT,
             SupernaturalEffect(EffectVisualEffect(VFX_DUR_GLOW_WHITE)), oPC);
   }

	if (!GetIsPC(oPC)) return;

	int nInt;
	nInt = GetObjectType(oPC);

	if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_KNOCK), oPC);
	else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_KNOCK), GetLocation(oPC));

   

/////////////////////////CHARACTER SCANNING OPTIONS////////////////////////

//This function scans the PC who just leveled up to see if they are playing
//a legal character or not, just delete the // below to use
//DelayCommand(2.0, ExecuteScript("cheatercheck4", oPC));


//////////////////////////////////////////////////////////////////////////
//SimTools Languages (DISABLED)
////////////////////////////////////////////////////////////
/*
if (ENABLE_LANGUAGES)//check to see if they gained a level in a language class, and if so, add that language
    {
        object oPC = GetPCLevellingUp();
        if (USING_NWNX_DB)
        {
            if ((GetLevelByClass(CLASS_TYPE_RANGER, oPC) || GetLevelByClass(CLASS_TYPE_DRUID, oPC)) && (!GetLocalInt(oPC, "FKY_CHAT_LANG37")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG37", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG37", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_ROGUE, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG44")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG44", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG44", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG5")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG5", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG5", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_DRUID, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG14")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG14", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG14", TRUE);
            }
            if ((GetLevelByClass(CLASS_TYPE_WIZARD, oPC) || GetLevelByClass(CLASS_TYPE_SORCERER, oPC) || GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC)) && (!GetLocalInt(oPC, "FKY_CHAT_LANG71")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG71", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG71", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG80")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG80", TRUE);
                SetPersistentInt(oPC, "FKY_CHAT_LANG80", TRUE);
            }
        }
        else
        {
            object oStorage = GetItemPossessedBy(oPC, TAG_OF_LANGUAGE_STORAGE_OBJECT);
            if ((GetLevelByClass(CLASS_TYPE_RANGER, oPC) || GetLevelByClass(CLASS_TYPE_DRUID, oPC)) && (!GetLocalInt(oPC, "FKY_CHAT_LANG37")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG37", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG37", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_ROGUE, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG44")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG44", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG44", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_ASSASSIN, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG5")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG5", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG5", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_DRUID, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG14")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG14", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG14", TRUE);
            }
            if ((GetLevelByClass(CLASS_TYPE_WIZARD, oPC) || GetLevelByClass(CLASS_TYPE_SORCERER, oPC) || GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC)) && (!GetLocalInt(oPC, "FKY_CHAT_LANG71")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG71", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG71", TRUE);
            }
            if (GetLevelByClass(CLASS_TYPE_PALEMASTER, oPC) && (!GetLocalInt(oPC, "FKY_CHAT_LANG80")))
            {
                SetLocalInt(oPC, "FKY_CHAT_LANG80", TRUE);
                SetLocalInt(oStorage, "FKY_CHAT_LANG80", TRUE);
            }
        }
    }
// */
/////////////////////////////////////////////////////////////////////////

}