ff_i_debug

Debug functions.

DEBUG

(bool) Constant that can set on module, areas, and/or PC

int GetIsDebug(object oObject = OBJECT_INVALID)
Parameters:
  • oObject – Checked for DEBUG variable, then its area, then module. Defaults to OBJECT_INVALID (env-var only).

Return TRUE if DEBUG is set on oObject, area of oObject, or module. As a last resort, return TRUE if environment variable NWN_DEBUG is set.

string GetObjectTypeString(object oObject)
Parameters:
  • oObject – An object.

Return a string description the object type.

void LogLocalVars(object oObject, string sPrefix = "")
Parameters:
  • oObject – An object whose local variables are printed.

  • sPrefix – Prepended to every printed line. Defaults to “”.

Write all string and int variables to console.

void LogStackTrace(string sFile, string sFunction, int nLine)
Parameters:
  • sFile – Set to

  • sFunction – Set to

  • nLine – Set to

Write stack trace to console.

Source code

// @code

#include "ff_i_consts"
#include "ff_i_envvar"

#include "nwnx_object"
#include "nwnx_encounter"


//! @brief (bool) Constant that can set on module, areas, and/or PC
const string DEBUG = "DEBUG";


// -----------------------------------------------------------------------------

//! @brief Return TRUE if DEBUG is set on oObject, area of oObject, or module. As a last resort, return TRUE if environment variable :ev:`NWN_DEBUG` is set.
//! @param oObject Checked for DEBUG variable, then its area, then module. Defaults to OBJECT_INVALID (env-var only).
int GetIsDebug(object oObject = OBJECT_INVALID);
int GetIsDebug(object oObject = OBJECT_INVALID)
{
  if (GetEnvironmentVariableAsBool(NWN_DEBUG) == "T")
    return TRUE;
  return FALSE;
}


// -----------------------------------------------------------------------------

//! @brief Return a string description the object type.
//! @param oObject An object.
string GetObjectTypeString(object oObject);
string GetObjectTypeString(object oObject)
{
  if (GetIsDM(oObject))
    return "DM";
  if (GetIsPC(oObject))
    return "PC";

  if (!GetIsObjectValid(oObject))
   return "invalid";

  switch (NWNX_Object_GetInternalObjectType(oObject))
  {
    case NWNX_OBJECT_TYPE_INTERNAL_INVALID:      return "invalid";
    case NWNX_OBJECT_TYPE_INTERNAL_AREA:         return "area";
    case NWNX_OBJECT_TYPE_INTERNAL_AREAOFEFFECT: return "AOE";
    case NWNX_OBJECT_TYPE_INTERNAL_CREATURE:     return "creature";
    case NWNX_OBJECT_TYPE_INTERNAL_DOOR:         return "door";
    case NWNX_OBJECT_TYPE_INTERNAL_ENCOUNTER:    return "encounter";
    case NWNX_OBJECT_TYPE_INTERNAL_ITEM:         return "item";
    case NWNX_OBJECT_TYPE_INTERNAL_MODULE:       return "module";
    case NWNX_OBJECT_TYPE_INTERNAL_PLACEABLE:    return "placeable";
    case NWNX_OBJECT_TYPE_INTERNAL_SOUND:        return "sound";
    case NWNX_OBJECT_TYPE_INTERNAL_STORE:        return "store";
    case NWNX_OBJECT_TYPE_INTERNAL_TRIGGER:      return "trigger";
    case NWNX_OBJECT_TYPE_INTERNAL_WAYPOINT:     return "waypoint";
  }

  return "<error>";
}


// -----------------------------------------------------------------------------

//! @brief Write all string and int variables to console.
//! @param oObject An object whose local variables are printed.
//! @param sPrefix Prepended to every printed line. Defaults to "".
void LogLocalVars(object oObject, string sPrefix = "");
void LogLocalVars(object oObject, string sPrefix = "")
{
  int nCount = NWNX_Object_GetLocalVariableCount(oObject);

  int i;
  for (i = 0; i <= nCount; i++)
  {
    struct NWNX_Object_LocalVariable stVar = NWNX_Object_GetLocalVariable(oObject, i);

    switch (stVar.type)
    {
      case NWNX_OBJECT_LOCALVAR_TYPE_INT:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": " + IntToString(GetLocalInt(oObject, stVar.key)));
        break;
      case NWNX_OBJECT_LOCALVAR_TYPE_FLOAT:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": " + FloatToString(GetLocalFloat(oObject, stVar.key), 7, 5));
        break;
      case NWNX_OBJECT_LOCALVAR_TYPE_STRING:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": " + GetLocalString(oObject, stVar.key));
        break;
      case NWNX_OBJECT_LOCALVAR_TYPE_OBJECT:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": " + GetObjectUUID(GetLocalObject(oObject, stVar.key)));
        break;
      case NWNX_OBJECT_LOCALVAR_TYPE_LOCATION:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": <LOCATION>");
        break;
      case NWNX_OBJECT_LOCALVAR_TYPE_JSON:
        NWNX_Util_RawPrint(sPrefix + "[var] " + stVar.key + ": <JSON>");
        break;
      break;
    }
  }
}


// -----------------------------------------------------------------------------

//! @brief Write stack trace to console.
//! @param sFile Set to __FILE__
//! @param sFunction Set to __FUNCTION__
//! @param nLine Set to __LINE__
void LogStackTrace(string sFile, string sFunction, int nLine);
void LogStackTrace(string sFile, string sFunction, int nLine)
{
  string sSpacing = "";
  int nDepth = 0;
  string sTrace = NWNX_Util_GetCurrentScriptName(nDepth);
  if (sFile != "")

  NWNX_Util_RawPrint("error: in " + sFile + "::" + sFunction + ":" + IntToString(nLine));
  while (sTrace != "")
  {
    string sMessage = "[trace] " + IntToString(nDepth) + ": " + sTrace;
    sSpacing += "  ";

    NWNX_Util_RawPrint(sMessage);
    sTrace = NWNX_Util_GetCurrentScriptName(++nDepth);
  }
}