//::///////////////////////////////////////////////
//:: Area_Clean_Inc
//:: Copyright (c) 2004 Indigo-Red
//:://////////////////////////////////////////////
/*
    Designed to clean the area when no players are present.
    Functions/scripts contained here are used as follows for the Area:

        OnEnter: [CheckForPC()]
            - Keeps track of the number of players in the area
        OnExit: [TimerCheck()]
            - Checks to see if any players remain in the area
            - Starts cleanup process when no PC is present
    * In addition the following script is needed:
        OnUserDefined: "area_clean_usr"
            - Performs the actual clearing of the area

    NOTE: The first two are presented as functions so that they can
        be easily incorporated with any existing area scripts.
*/
//:://////////////////////////////////////////////
//:: Created By:    Johnnie "Nekyia" Casiano
//:: Created On:    20040208
//:://////////////////////////////////////////////

// **** FUNCTION DECLARATIONS

// Function is used to keep track of the number of players present in the area
// Ex: (As part of the Area's OnEnter) CheckForPC(GetEnteringObject());
void CheckForPC(object PC, object Area=OBJECT_SELF);

// Function makes sure no PCs are left in the area before starting the clean timer
// Ex: (As part of the Area's OnExit) TimerCheck(GetExitingObject());
void TimerCheck(object PC, object Area=OBJECT_SELF);


// **** CUSTOM FUNCTIONS
void CheckForPC(object PC, object Area=OBJECT_SELF)
{
        if(!GetIsPC(PC)||GetIsDM(PC)){return;}

    object Last=GetLocalObject(PC,"Area");
    //SendMessageToPC(PC,"Last Area: "+GetName(Last));
        if(Last==Area){
            int Count=GetLocalInt(Area,"PCCount");
            //SendMessageToPC(PC,"Last Area Same. Count: "+IntToString(Count));
            return;
        }
    int Count=GetLocalInt(Area,"PCCount")+1;
    SetLocalInt(Area,"PCCount",Count);
    SetLocalObject(PC,"Area",Area);
    //SendMessageToPC(PC,"Area Set To: "+GetName(GetLocalObject(PC,"Area")));
    //SendMessageToPC(PC,GetName(Area)+" Count: "+IntToString(GetLocalInt(Area,"PCCount")));
}

void TimerCheck(object PC, object Area=OBJECT_SELF)
{
        if(!GetIsPC(PC)||GetIsDM(PC)){return;}
    int Count=GetLocalInt(Area,"PCCount")-1;
    int Timer=GetLocalInt(Area,"Timer");
        if(Count==0 && Timer==0){
            SetLocalInt(Area,"Timer",1);
            SignalEvent(Area,EventUserDefined(69));
            //SendMessageToPC(PC,"Cleanup check signal sent for "+GetName(Area));
        }
    SetLocalInt(Area,"PCCount",Count);
    //SendMessageToPC(PC,GetName(Area)+"PC Count: "+IntToString(Count));
}
