//::///////////////////////////////////////////////
//:: Utility Include: Parameters
//:: utl_i_parameters.nss
//:://////////////////////////////////////////////
/*
    These are helper functions for the NWN:EE Script Parameter
    functions SetScriptParam and GetScriptParam.

    Example:

// Conversation action script to apply a permanent effect to the given ability score by the given amount
void main()
{
    string sAbilityScore = GetScriptParam("ABILITY");
    int nAbility = ConstantStringToInt(sAbilityScore, -1);
    // Error checking
    if(nAbility == -1)
    {
        SpeakString("Error, invalid ability score:" + sAbilityScore);
        return;
    }
    int nAmount = StringToInt(GetScriptParam("AMOUNT"));
    if(nAmount < 0 || nAmount > 10)
    {
        SpeakString("Error, invalid ability score amount:" + IntToString(nAmount));
        return;
    }
    // Apply effect
    effect eEffect = EffectAbilityIncrease(nAbility, nAmount);
    ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEffect, GetPCSpeaker());
}
*/
//:://////////////////////////////////////////////
//:: Part of the nwscript_utility_scripts project; see for dates/creator info
//:: https://github.com/Finaldeath/nwscript_utility_scripts
//:://////////////////////////////////////////////

// This function will convert a string of a constant name into an integer.
// Only constants in nwscript.nss will be returned.
// Example: "ABILITY_INTELLIGENCE" will get converted to the integer 3
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * nErrorValue - The value to return if the constant isn't found. Default: 0
int ConstantStringToInt(string sConstantName, int nErrorValue = 0);

// This function will convert a string of a constant name into an float.
// Only constants in nwscript.nss will be returned.
// Example: "RADIUS_SIZE_SMALL" will get converted to the float 1.67
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * nErrorValue - The value to return if the constant isn't found. Default: 0.0
float ConstantStringToFloat(string sConstantName, float fErrorValue = 0.0);

// This function will convert a string of a constant name into a string.
// Only constants in nwscript.nss will be returned.
// Example: "TILESET_RESREF_BEHOLDER_CAVES" will get converted to the string "tib01"
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * sErrorValue - The value to return if the constant isn't found. Default: ""
string ConstantStringToString(string sConstantName, string sErrorValue = "");


// This function will convert a string of a constant name into an integer.
// Only constants in nwscript.nss will be returned.
// Example: "ABILITY_INTELLIGENCE" will get converted to the integer 3
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * nErrorValue - The value to return if the constant isn't found. Default: 0
int ConstantStringToInt(string sConstantName, int nErrorValue = 0)
{
    // This is the error return value being set in case ExecuteScriptChunk fails.
    SetLocalInt(GetModule(), "CONVERTED_SCRIPT_PARAM", nErrorValue);
    // From the example this does SetLocalInt(GetModule(), "CONVERTED_SCRIPT_PARAM", ABILITY_INTELLIGENCE);
    ExecuteScriptChunk("SetLocalInt(GetModule(), \"CONVERTED_SCRIPT_PARAM\", " + sConstantName + ");", GetModule());
    // Returns the value set, or nErrorValue if none was set
    return GetLocalInt(GetModule(), "CONVERTED_SCRIPT_PARAM");
}

// This function will convert a string of a constant name into an float.
// Only constants in nwscript.nss will be returned.
// Example: "RADIUS_SIZE_SMALL" will get converted to the float 1.67
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * fErrorValue - The value to return if the constant isn't found. Default: 0.0
float ConstantStringToFloat(string sConstantName, float fErrorValue = 0.0)
{
    // This is the error return value being set in case ExecuteScriptChunk fails.
    SetLocalFloat(GetModule(), "CONVERTED_SCRIPT_PARAM", fErrorValue);
    // From the example this does SetLocalFloat(GetModule(), "CONVERTED_SCRIPT_PARAM", RADIUS_SIZE_SMALL);
    ExecuteScriptChunk("SetLocalFloat(GetModule(), \"CONVERTED_SCRIPT_PARAM\", " + sConstantName + ");", GetModule());
    // Returns the value set, or fErrorValue if none was set
    return GetLocalFloat(GetModule(), "CONVERTED_SCRIPT_PARAM");
}

// This function will convert a string of a constant name into a string.
// Only constants in nwscript.nss will be returned.
// Example: "TILESET_RESREF_BEHOLDER_CAVES" will get converted to the string "tib01"
// Use this to convert script params into usable values.
// * sConstantName - The name of a constant to convert 
// * sErrorValue - The value to return if the constant isn't found. Default: ""
string ConstantStringToString(string sConstantName, string sErrorValue = "")
{
    // This is the error return value being set in case ExecuteScriptChunk fails.
    SetLocalString(GetModule(), "CONVERTED_SCRIPT_PARAM", sErrorValue);
    // From the example this does SetLocalString(GetModule(), "CONVERTED_SCRIPT_PARAM", TILESET_RESREF_BEHOLDER_CAVES);
    ExecuteScriptChunk("SetLocalString(GetModule(), \"CONVERTED_SCRIPT_PARAM\", " + sConstantName + ");", GetModule());
    // Returns the value set, or sErrorValue if none was set
    return GetLocalString(GetModule(), "CONVERTED_SCRIPT_PARAM");
}