ff_u_log_reload

Log reloading development file events.

Does not automatically refresh / recreate what is reloaded as this can disrupt testing, or lead to incomprehensible temporary bugs.

Variables

ENABLE__FF_U_LOG_RELOAD: (string) (opt-out) Set to “N” on module to disable unit.

Source code

// @code
#include "ff_i_core"

const string ENABLE__FF_U_LOG_RELOAD = "ENABLE__FF_U_LOG_RELOAD";


// =============================================================================
//! @brief Log that a development resource was added, modified, or removed.
//! @param sAction Human-readable action verb ("added to", "modified in", "removed from").
void OnResourceChange(string sAction);
void OnResourceChange(string sAction)
{
  /*
    Event Data Tag | Type   | Notes
    ---------------|--------|-------
    ALIAS          | string | NWNX for /nwnx, DEVELOPMENT for /development. Also supports valid aliases from the Custom Resman Definition File
    RESREF         | string | The ResRef of the file
    TYPE           | int    | The type of the file, see NWNX_UTIL_RESREF_TYPE_*
  */
  string sAlias  = NWNX_Events_GetEventData("ALIAS");
  string sResRef = NWNX_Events_GetEventData("RESREF");
  int nType      = StringToInt(NWNX_Events_GetEventData("TYPE"));

  string sType = "";
  switch (nType)
  {
    case NWNX_UTIL_RESREF_TYPE_AREA_ARE:  return; // Done by GIT event
    case NWNX_UTIL_RESREF_TYPE_AREA_GIT:  sType = "area"; break;;
    case NWNX_UTIL_RESREF_TYPE_AREA_GIC:  return; // Done by GIT event
    case NWNX_UTIL_RESREF_TYPE_CREATURE:  sType = "creature"; break;
    case NWNX_UTIL_RESREF_TYPE_DIALOG:    sType = "dialog"; break;
    case NWNX_UTIL_RESREF_TYPE_DOOR:      sType = "door"; break;
    case NWNX_UTIL_RESREF_TYPE_ENCOUNTER: sType = "encounter"; break;
    case NWNX_UTIL_RESREF_TYPE_ITEM:      sType = "item"; break;
    case NWNX_UTIL_RESREF_TYPE_NCS:       sType = "script"; break;
    case NWNX_UTIL_RESREF_TYPE_NSS:       return;
    case NWNX_UTIL_RESREF_TYPE_PLACEABLE: sType = "placeable"; break;
    case NWNX_UTIL_RESREF_TYPE_SOUND:     sType = "sound"; break;
    case NWNX_UTIL_RESREF_TYPE_STORE:     sType = "store"; break;
    case NWNX_UTIL_RESREF_TYPE_TRIGGER:   sType = "trigger"; break;
    case NWNX_UTIL_RESREF_TYPE_TWODA:     sType = "2da"; break;
    case NWNX_UTIL_RESREF_TYPE_WAYPOINT:  sType = "waypoint"; break;
    case NWNX_UTIL_RESREF_TYPE_MODULE:    sType = "module";  break;
    case NWNX_UTIL_RESREF_TYPE_PALETTE:   return; // Not interesting to report, eg: 'itempalcus'
    default:
      sType = IntToString(nType);
      break;
  }

  string sLog = "Resource '" + sResRef + "' (" + sType + ") was " + sAction + " " + sAlias + " folder.";
  LogNotice(sLog, CONSOLE_COLOR_YELLOW);
}


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

void main()
{
  if (!GetModuleFlag(ENABLE__FF_U_LOG_RELOAD, TRUE))
    return;

  string sEvent = GetCurrentEvent();
  if (sEvent == ON_REGISTER)
  {
    SubscribeToEvent(ON_RESOURCE_ADDED, __FILE__);
    SubscribeToEvent(ON_RESOURCE_MODIFIED, __FILE__);
    SubscribeToEvent(ON_RESOURCE_REMOVED, __FILE__);
  }
  else if (sEvent == NWNX_ON_RESOURCE_ADDED)
    OnResourceChange("added to");
  else if (sEvent == NWNX_ON_RESOURCE_MODIFIED)
    OnResourceChange("modified in");
  else if (sEvent == NWNX_ON_RESOURCE_REMOVED)
    OnResourceChange("removed from");
}