/*
Tenser's Floating Disk script

Disk's heartbeat script.  If not in conversation with the caster, it will follow the caster around.

Created by: xwarren
Created: August 15, 2009
*/
void CheckRange(float fRange, object oMaster, object oDisk)
{
    if(GetDistanceToObject(oMaster) > fRange)
    {
        DelayCommand(0.5, ExecuteScript("fdisk_end", oDisk));
    }
}

void main()
{
    //check if enything is equipped in weapon inventory slots (not vital, but looks better without weapons)
    //if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF))) ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, OBJECT_SELF));
    //if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF))) ActionUnequipItem(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, OBJECT_SELF));

    object oDisk = OBJECT_SELF;
    object oMaster = GetMaster(oDisk);
    //check if caster is in spells range
    int nCasterLevel = GetLocalInt(oDisk, "CasterLevel");
    float fRange = 8.33 + 1.67 * nCasterLevel / 2;
    if(GetDistanceToObject(oMaster) > fRange - 2)
    {
        FloatingTextStringOnCreature("You are walking too far form your floating disk", oMaster, FALSE);
        DelayCommand(3.0, CheckRange(fRange, oMaster, oDisk));
    }

    //check if disk is not overloaded
    int nWeight = GetWeight();
    int nLimit = GetLocalInt(oDisk, "Weight_Limit") + 1;

    if(nWeight > nLimit)
    {
       //if overloaded disk will not follow PC
       if(!GetLocalInt(oDisk, "overloaded"))
       {
           FloatingTextStringOnCreature("A floating disk is holding too much", oMaster, FALSE);
           SetLocalInt(oDisk, "overloaded", 1);
       }
    }
    else
    {
       //follow the PC
       DeleteLocalInt(oDisk, "overloaded");
       if(!GetLocalInt(oDisk, "bDiskBussy"))
       {
           ClearAllActions();
           ActionMoveToObject(oMaster, TRUE, 2.0);
       }
    }
}