#include "prc_inc_factotum" 
#include "inc_dynconv"

void TriggerInspiration(object oPC, int nCombat);

void TriggerInspiration(object oPC, int nCombat)
{
	SetLocalInt(oPC, "InspirationHBRunning", TRUE);
	DelayCommand(0.249, DeleteLocalInt(oPC, "InspirationHBRunning"));
	int nCurrent = GetIsInCombat(oPC);
	// We just entered combat
	if (nCurrent == TRUE && nCombat == FALSE)
		SetInspiration(oPC);
	/*else if (nCurrent == FALSE && nCombat == TRUE) // Just left combat
		ClearInspiration(oPC);*/
 
    DelayCommand(0.25, TriggerInspiration(oPC, nCurrent));
}

void main()
{
    int nEvent = GetRunningEvent();
    if(DEBUG) DoDebug("prc_factotum running, event: " + IntToString(nEvent));

    // Get the PC. This is event-dependent
    object oPC;
    switch(nEvent)
    {
        case EVENT_ONPLAYERREST_FINISHED:   oPC = GetLastBeingRested();      break;
        case EVENT_ONCLIENTENTER:           oPC = GetEnteringObject();       break;

        default:
            oPC = OBJECT_SELF;
    }
    int nClass = GetLevelByClass(CLASS_TYPE_FACTOTUM, oPC);
    object oSkin = GetPCSkin(oPC);
    object oArmour = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
    int nArmour = GetBaseAC(oArmour);   
    int nBonus = GetAbilityModifier(ABILITY_INTELLIGENCE, oPC);
    if (nClass >= 16 && 3 >= nArmour)
    	SetCompositeBonus(oSkin, "CunningDefense", nBonus, ITEM_PROPERTY_AC_BONUS);  
    else
    	SetCompositeBonus(oSkin, "CunningDefense", 0, ITEM_PROPERTY_AC_BONUS);
    	
    if (nClass >= 3)
    {
    	SetCompositeBonus(oSkin, "BrainOverBrawn_H", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_HIDE);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_M", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_MOVE_SILENTLY);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_O", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_OPEN_LOCK);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_P", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_PICK_POCKET);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_S", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_SET_TRAP);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_T", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_TUMBLE);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_R", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_RIDE);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_J", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_JUMP);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_B", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_BALANCE);
    	SetCompositeBonus(oSkin, "BrainOverBrawn_C", nBonus, ITEM_PROPERTY_SKILL_BONUS, SKILL_CLIMB);
    }

    // We aren't being called from any event, instead from EvalPRCFeats
    if(nEvent == FALSE)
    {
        // Add eventhook to OnRestFinished to reset the used marker
        AddEventScript(oPC, EVENT_ONPLAYERREST_FINISHED, "prc_factotum", FALSE, FALSE);
        if (!GetLocalInt(oPC, "InspirationHBRunning")) DeleteLocalInt(oPC, "InspirationHB");
        if (!GetLocalInt(oPC, "InspirationHB") && !GetLocalInt(oPC, "InspirationHBRunning")) 
        {
            TriggerInspiration(oPC, FALSE);
            SetLocalInt(oPC, "InspirationHB", TRUE);
        }         	
    }
    else if(nEvent == EVENT_ONPLAYERREST_FINISHED && nClass >= 2)    
    {
        AssignCommand(oPC, ClearAllActions(TRUE));
        ClearFactotumSlots(oPC);
        SetLocalInt(oPC, "FactotumArcDil", GetMaxArcDilSpellLevel(oPC));
        StartDynamicConversation("prc_fact_splconv", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
    }    
}