//:://////////////////////////////////////////////
//:: Drug system functions
//:: prc_inc_drugfunc
//:://////////////////////////////////////////////
/** @file
    A bunch of functions common to the drug
    scripts.

    @author Ornedan
    @data   Created 2006.05.29
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////

//////////////////////////////////////////////////
/*                 Structures                   */
//////////////////////////////////////////////////

//////////////////////////////////////////////////
/*                 Constants                    */
//////////////////////////////////////////////////


//////////////////////////////////////////////////
/*             Function prototypes              */
//////////////////////////////////////////////////

/**
 * Increments the overdose tracking counter by one for the given drug and queues
 * decrementing it by one after the given period.
 * The value of this counter is what will be returned by GetHasOverdosed().
 *
 */
void IncrementOverdoseTracker(object oDrugUser, string sODIdentifier, float fODPeriod);

/**
 * Checks if the given drug user is currently in the overdose period of the given drug.
 * The value returned is the number of drug uses in the overdose period of which is
 * currently active.
 *
 * @param oDrugUser     A creature using a drug.
 * @param sODIdentifier The name of the drug's overdose identifier.
 * @return              The current value of the overdose variable - how many drug uses of
 *                      the given drug are right now in their overdose period.
 */
int GetOverdoseCounter(object oDrugUser, string sODIdentifier);


//////////////////////////////////////////////////
/*                  Includes                    */
//////////////////////////////////////////////////


//////////////////////////////////////////////////
/*             Internal functions               */
//////////////////////////////////////////////////

/** Internal function.
 * Implements the decrementing of the overdose counters.
 *
 * @param oDrugUser     A creature using a drug.
 * @param sODIdentifier The name of the drug's overdose identifier.
 */
void _prc_inc_drugfunc_DecrementOverdoseTracker(object oDrugUser, string sODIdentifier)
{
    // Delete the variable if decrementing would it would make it 0
    if(GetLocalInt(oDrugUser, sODIdentifier) <= 1)
        DeleteLocalInt(oDrugUser, sODIdentifier);
    else
        SetLocalInt(oDrugUser, sODIdentifier, GetLocalInt(oDrugUser, sODIdentifier) - 1);
}


//////////////////////////////////////////////////
/*             Function definitions             */
//////////////////////////////////////////////////

void IncrementOverdoseTracker(object oDrugUser, string sODIdentifier, float fODPeriod)
{
    SetLocalInt(oDrugUser, sODIdentifier, GetLocalInt(oDrugUser, sODIdentifier) + 1);
    DelayCommand(fODPeriod, _prc_inc_drugfunc_DecrementOverdoseTracker(oDrugUser, sODIdentifier));
}


int GetOverdoseCounter(object oDrugUser, string sODIdentifier)
{
    return GetLocalInt(oDrugUser, sODIdentifier);
}


// Test main
//void main(){}
