#include "prc_inc_racial"
#include "prc_class_const"

void GiveDMFI(object oPC, string sResRef)
{
    //note: for DMFI items, tag and resref are identical

    object oItem = GetItemPossessedBy(oPC, sResRef);
    if (!GetIsObjectValid(oItem))
        CreateItemOnObject(sResRef, oPC);
}

void main()
{
    object oPC = GetPCSpeaker();
    int iLanguageFlag = FALSE;

    //PC Autofollow Widget
    GiveDMFI(oPC, "dmfi_pc_follow");

    //PC Dicebag
    GiveDMFI(oPC, "dmfi_pc_dicebag");

    //PC Emote Wand
    GiveDMFI(oPC, "dmfi_pc_emote");

    //Book of Player Voice Commands
    GiveDMFI(oPC, "dmfi_playerbook");
	


//:: Abyssal
	if ((GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL && GetAlignmentLawChaos(oPC) == ALIGNMENT_CHAOTIC && (MyPRCGetRacialType(oPC) == RACIAL_TYPE_OUTSIDER) 
		|| GetLevelByClass(CLASS_TYPE_CLERIC, oPC) != 0 || GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) != 0 || GetLevelByClass(CLASS_TYPE_SOHEI, oPC) != 0
		|| GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) != 0 || GetLevelByClass(CLASS_TYPE_WARLOCK, oPC) != 0 || GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC) != 0)
    
		|| (GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_ORCUS, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_ACOLYTE, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oPC) != 0))
	{
		GiveDMFI(oPC, "hlslang_11");
		SendMessageToPC(oPC, "Abyssal language given.");
	}

//:: Celestial
	if ((GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD && (MyPRCGetRacialType(oPC) == RACIAL_TYPE_OUTSIDER 
		|| GetLevelByClass(CLASS_TYPE_CLERIC, oPC) != 0 || GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) != 0 || GetLevelByClass(CLASS_TYPE_SOHEI, oPC) != 0 || GetLevelByClass(CLASS_TYPE_HEALER, oPC) != 0
		|| GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) != 0 ))
    
		|| (GetLevelByClass(CLASS_TYPE_PALADIN, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_HEARTWARDER, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_VASSAL, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_SACREDFIST, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_MORNINGLORD, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC) != 0))
	{
		GiveDMFI(oPC, "hlslang_10");
		SendMessageToPC(oPC, "Celestial language given.");
	}

//::Infernal
	if ((GetAlignmentGoodEvil(oPC) == ALIGNMENT_EVIL && GetAlignmentLawChaos(oPC) == ALIGNMENT_LAWFUL && (MyPRCGetRacialType(oPC) == RACIAL_TYPE_OUTSIDER) 
		|| GetLevelByClass(CLASS_TYPE_CLERIC, oPC) != 0 || GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) != 0 || GetLevelByClass(CLASS_TYPE_SOHEI, oPC) != 0
		|| GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) != 0 || GetLevelByClass(CLASS_TYPE_WARLOCK, oPC) != 0 || GetLevelByClass(CLASS_TYPE_BLACKGUARD, oPC) != 0)		
    
		|| (GetLevelByClass(CLASS_TYPE_OCULAR, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_HEXTOR, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_DISPATER, oPC) != 0)		
		|| (GetLevelByClass(CLASS_TYPE_DISC_BAALZEBUL, oPC) != 0) 
		|| (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_MEPH, oPC) != 0)		
		|| (GetLevelByClass(CLASS_TYPE_DIABOLIST, oPC) != 0))
	{
		GiveDMFI(oPC, "hlslang_12");
		SendMessageToPC(oPC, "Infernal language given.");
	}

//::  Animal
    if ((GetLevelByClass(CLASS_TYPE_DRUID, oPC) != 0) || (GetLevelByClass(CLASS_TYPE_RANGER, oPC) != 0) || 
		(GetLevelByClass(CLASS_TYPE_MONK, oPC) > 16) || (GetLevelByClass(CLASS_TYPE_FOCHLUCAN_LYRIST, oPC) != 0))
	{
		GiveDMFI(oPC, "hlslang_8");
		SendMessageToPC(oPC, "Animal language given.");
	}

//:: Draconic
    if ((MyPRCGetRacialType(oPC) == RACIAL_TYPE_DRAGON) || (GetRacialType(oPC) == RACIAL_TYPE_REDSPAWN_ARCANISS) || (GetLevelByClass(CLASS_TYPE_DRAGONDISCIPLE, oPC)!=0) || 
		(GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_DRAGON_SHAMAN, oPC)!=0) || 
		(GetLevelByClass(CLASS_TYPE_DRAGONSONG_LYRIST, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_HANDOTWM, oPC)!=0)  || 
		(GetLevelByClass(CLASS_TYPE_DRAGON_DEVOTEE, oPC)!=0) ||	(GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_DIAMOND_DRAGON, oPC)!=0) || 
		(GetLevelByClass(CLASS_TYPE_VASSAL, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_SWIFT_WING, oPC)!=0) || (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oPC)!=0))
	{
	   GiveDMFI(oPC, "hlslang_7");
	   SendMessageToPC(oPC, "Draconic language given.");
	}

//:: Drow
	if (GetRacialType(oPC) == RACIAL_TYPE_DROW_MALE || GetRacialType(oPC) == RACIAL_TYPE_DROW_FEMALE || GetRacialType(oPC) == RACIAL_TYPE_HALFDROW)
	{
		GiveDMFI(oPC, "hlslang_13");
		SendMessageToPC(oPC, "Drow language given.");
	}
		
//:: Dwarven
    if (MyPRCGetRacialType(oPC) == RACIAL_TYPE_DWARF) 
	{
		GiveDMFI(oPC, "hlslang_4");
		SendMessageToPC(oPC, "Dwarven language given.");
	}

//:: Elven
    if ((MyPRCGetRacialType(oPC) == RACIAL_TYPE_ELF) || (MyPRCGetRacialType(oPC) == RACIAL_TYPE_HALFELF))
	{
		GiveDMFI(oPC, "hlslang_1");
		SendMessageToPC(oPC, "Elven language given.");
	}

//:: Gnome
    if (MyPRCGetRacialType(oPC) == RACIAL_TYPE_GNOME)
	{
		GiveDMFI(oPC, "hlslang_2");
		SendMessageToPC(oPC, "Gnomish language given.");
	}

//:: Goblin
    if ((GetRacialType(oPC) == RACIAL_TYPE_BLUE_GOBLIN) ||  (GetRacialType(oPC) == RACIAL_TYPE_GOBLIN) || 
		(GetRacialType(oPC) == RACIAL_TYPE_SNOW_GOBLIN) || (GetRacialType(oPC) == RACIAL_TYPE_HOBGOBLIN) || 
		(GetRacialType(oPC) == RACIAL_TYPE_SUNSCORCH_HOBGOBLIN))
	{
		GiveDMFI(oPC, "hlslang_6");
		SendMessageToPC(oPC, "Goblin language given.");
	}
		
//:: Halfling
    if (MyPRCGetRacialType(oPC) == RACIAL_TYPE_HALFLING) 
	{
		GiveDMFI(oPC, "hlslang_3");
		SendMessageToPC(oPC, "Halfling language given.");
	}

//:: Orc
	if (MyPRCGetRacialType(oPC) == RACIAL_TYPE_HALFORC || GetRacialType(oPC) == RACIAL_TYPE_FROSTBLOOD_ORC || GetRacialType(oPC) == RACIAL_TYPE_OROG || 
		GetRacialType(oPC) == RACIAL_TYPE_GRAYORC || GetRacialType(oPC) == RACIAL_TYPE_ORC)
	{
		GiveDMFI(oPC, "hlslang_5");
		SendMessageToPC(oPC, "Orc language given.");
	}
	
//:: Thieves' Cant
    if ((GetLevelByClass(CLASS_TYPE_ROGUE, oPC)!=0) ||
       (GetLevelByClass(CLASS_TYPE_SHADOW_THIEF_AMN, oPC)!=0) ||
	   (GetLevelByClass(CLASS_TYPE_SHADOWLORD, oPC)!=0) ||
	   (GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oPC)!=0) ||
       (GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oPC)!=0))
	   {
		   GiveDMFI(oPC, "hlslang_9");
		   SendMessageToPC(oPC, "Thieves' language given.");
	   }
}