//::///////////////////////////////////////////////
//:: FileName mk_inc_tools
//:: Copyright (c) 2008 Kamiryn
//:://////////////////////////////////////////////
/*

*/
//:://////////////////////////////////////////////
//:: Created By: Kamiryn
//:: Created On: 08.03.2008
//:://////////////////////////////////////////////

// mk_inc_tools

#include "mk_inc_debug"


// ----------------------------------------------------------------------------
// Converts an integer to a right aligned string with length nLen, prefixed with c
// ----------------------------------------------------------------------------
string MK_IntToString(int nInteger, int nLen, string c=" ");

// ----------------------------------------------------------------------------
// Gets a value from a 2DA file on the server and returns it as a integer
// - s2DA: the name of the 2da file, 16 chars max
// - sColumn: the name of the column in the 2da
// - nRow: the row in the 2da
// - nDefault: default value
// * returns the default value if Get2DAString(s2DA, sColumn, nRow) would
// * return an empty string
// ----------------------------------------------------------------------------
int MK_Get2DAInt(string s2DA, string sColumn, int nRow, int nDefault=0);

// ----------------------------------------------------------------------------
// Gets a value from a 2DA file on the server and returns it as a float
// - s2DA: the name of the 2da file, 16 chars max
// - sColumn: the name of the column in the 2da
// - nRow: the row in the 2da
// - fDefault: default value
// * returns the default value if Get2DAString(s2DA, sColumn, nRow) would
// * return an empty string
// ----------------------------------------------------------------------------
float MK_Get2DAFloat(string s2DA, string sColumn, int nRow, float fDefault=0.0);

/*
const float fDeltaCeil = 0.999;

void TestCeilQ(float fValue, float fDeltaQ)
{
    MK_DEBUG_TRACE(" > " + FloatToString(fValue)+" + "+FloatToString(fDeltaQ)+" = "+FloatToString(fValue+fDeltaQ)
    + " = " + IntToString(FloatToInt(fValue+fDeltaQ)));
}

int MK_Ceil(float fValue)
{
    float fFractal = fValue - FloatToInt(fValue);
    TestCeilQ(fValue, 0.999999);
    TestCeilQ(fValue, 0.99999);
    TestCeilQ(fValue, 0.9999);
    TestCeilQ(fValue, 0.999);
    TestCeilQ(fValue, 0.99);
    TestCeilQ(fValue, 0.9);
    MK_DEBUG_TRACE(" > IntToString(-1*FloatToInt(-1.0 * fValue))="+ IntToString(-1*FloatToInt(-1.0 * fValue)));
    return FloatToInt(fValue+fDeltaCeil);
}
*/

int MK_Get2DALength(string s2DA, string sColumn, int nMaxRangeOfEmptyRows=10);

int MK_Search2DAFile(string s2DA, string sColumn, string sSearchString, int nMaxRangeOfEmptyRows=10);

int MK_GetIsHenchman(object oHench, object oPC);

// Get oObject's local float variable sVarName
// * Returns fDefault if GetLocalFloat would return 0.0f
float MK_GetLocalFloat(object oObject, string sVarName, float fDefault=0.0f);

int MK_Get2DAInt(string s2DA, string sColumn, int nRow, int nDefault)
{
    string sValue = Get2DAString(s2DA, sColumn, nRow);
    return (sValue!="" ? StringToInt(sValue) : nDefault);
}

float MK_Get2DAFloat(string s2DA, string sColumn, int nRow, float fDefault)
{
    string sValue = Get2DAString(s2DA, sColumn, nRow);
    return (sValue!="" ? StringToFloat(sValue) : fDefault);
}

string MK_IntToString(int nInteger, int nLen, string c)
{
    string s = IntToString(nInteger);
    while (GetStringLength(s)<nLen)
    {
        s=c+s;
    }
    return s;
}

int MK_Get2DALength(string s2DA, string sColumn, int nMaxRangeOfEmptyRows)
{
    MK_DEBUG_TRACE("MK_Get2DALength("+s2DA+", "+sColumn+", "+IntToString(nMaxRangeOfEmptyRows)+")");
    int iRow=-1;
    int bContinue=TRUE;
    int nLength=0;
    int nEmptyRows=0;
    string s;
    do
    {
//        if (Get2DAString(s2DA, sColumn, ++iRow)!="")
        s = Get2DAString(s2DA, sColumn, ++iRow);
        if (s!="")
        {
            nLength = iRow+1;
            nEmptyRows = 0;
        }
        else
        {
            nEmptyRows++;
        }
//        if (iRow<50) MK_DEBUG_TRACE(" > s='"+s+"', iRow="+IntToString(iRow)+", nEmptyRows="+IntToString(nEmptyRows)+", nLength="+IntToString(nLength));
        bContinue = (nEmptyRows<nMaxRangeOfEmptyRows);
    }
    while (bContinue);
    MK_DEBUG_TRACE(" > length="+IntToString(nLength));
    return nLength;
}

int MK_Search2DAFile(string s2DA, string sColumn, string sSearchString, int nMaxRangeOfEmptyRows)
{
    int nLength = MK_Get2DALength(s2DA, sColumn, nMaxRangeOfEmptyRows);
    int iRow;
    for (iRow=0; iRow<nLength; iRow++)
    {
        if (Get2DAString(s2DA, sColumn, iRow) == sSearchString)
        {
            return iRow;
        }
    }
    return -1;
}

int MK_GetIsHenchman(object oHench, object oPC)
{
    int nHenchMax = GetMaxHenchmen();
    int i;
    for (i=1; i<=nHenchMax; i++)
    {
        if (GetHenchman(oPC, i)==oHench)
        {
            return TRUE;
        }
    }
    return FALSE;
}

float MK_GetLocalFloat(object oObject, string sVarName, float fDefault)
{
    float fReturn = GetLocalFloat(oObject, sVarName);
    if (fReturn==0.0f) fReturn = fDefault;
    return fDefault;
}

/*
void main()
{

}
/**/