ff_u_log_elc

Log ELC events.

Variables

ENABLE__FF_U_ELC_NAME: (int) (opt-in) Set to “Y” on module to enable unit.

Source code

// @code

#include "ff_i_core"

const string ENABLE__FF_U_LOG_ELC = "ENABLE__FF_U_LOG_ELC";


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

void OnPlayerELC()
{
  int nType    = NWNX_ELC_GetValidationFailureType();
  int nSubType = NWNX_ELC_GetValidationFailureSubType();

  string sOutput;
  switch (nType)
  {
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_NONE:      sOutput += "Type None; ";      break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_CHARACTER: sOutput += "Type Character; "; break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_ITEM:      sOutput += "Type Item; ";      break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_SKILL:     sOutput += "Type Skill; ";     break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_FEAT:      sOutput += "Type Feat; ";      break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_SPELL:     sOutput += "Type Spell; ";     break;
    case NWNX_ELC_VALIDATION_FAILURE_TYPE_CUSTOM:    sOutput += "Type Custom; ";    break;
    default:
  }
  switch (nSubType)
  {
    case NWNX_ELC_SUBTYPE_TOO_MANY_FEATS_THIS_LEVEL:  sOutput += "Subtype: too many feats this level. FeatID = " + IntToString(NWNX_ELC_GetValidationFailureFeatID()); break;
    case NWNX_ELC_SUBTYPE_FEAT_IS_NORMAL_FEAT_ONLY:   sOutput += "Subtype: feat should be normal feat only."; break;
    case NWNX_ELC_SUBTYPE_ABILITY_POINT_BUY_SYSTEM_CALCULATION: sOutput += "Ability: point buy system calculation."; break;
    default:
      sOutput += IntToString(nSubType);
      break;
  }
  LogError("ELC validation error for player. " + sOutput);
}


// =============================================================================

void main()
{
  if (!GetModuleFlag(ENABLE__FF_U_LOG_ELC, FALSE))
    return;

  string sEvent = GetCurrentEvent();
  if (sEvent == ON_REGISTER)
    SubscribeToEvent(ON_DEFAULT_PLAYER_ELC_FAILURE, __FILE__);
  else if (sEvent == ON_DEFAULT_PLAYER_ELC_FAILURE)
    OnPlayerELC();
}