ff_u_log_client

Client logging.

Logs all client enter / exit events.

Variables

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

Source code

// @code


#include "ff_i_core"

const string ENABLE__FF_U_LOG_CLIENT = "ENABLE__FF_U_LOG_CLIENT";


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

//! @brief Log a detailed connection row for oPC.
//! @param oPC The entering player or DM.
void OnEnter(object oPC);
void OnEnter(object oPC)
{
  if (GetIsPC(oPC) || GetIsDM(oPC))
    {}
  else
    return;

  int nPlatformId = NWNX_Player_GetPlatformId(oPC);
  string sPlatform;
  switch (nPlatformId)
  {
      case NWNX_PLAYER_PLATFORM_INVALID: sPlatform = "Invalid"; break;
      case NWNX_PLAYER_PLATFORM_WINDOWS_X86: sPlatform = "Windows x86"; break;
      case NWNX_PLAYER_PLATFORM_WINDOWS_X64: sPlatform = "Windows x64"; break;
      case NWNX_PLAYER_PLATFORM_LINUX_X86: sPlatform = "Linux x86"; break;
      case NWNX_PLAYER_PLATFORM_LINUX_X64: sPlatform = "Linux x64"; break;
      case NWNX_PLAYER_PLATFORM_LINUX_ARM32: sPlatform = "Linux ARM32"; break;
      case NWNX_PLAYER_PLATFORM_LINUX_ARM64: sPlatform = "Linux ARM64"; break;
      case NWNX_PLAYER_PLATFORM_MAC_X86: sPlatform = "macOS x86"; break;
      case NWNX_PLAYER_PLATFORM_MAC_X64: sPlatform = "macOS x64"; break;
      case NWNX_PLAYER_PLATFORM_IOS: sPlatform = "iOS"; break;
      case NWNX_PLAYER_PLATFORM_ANDROID_ARM32: sPlatform = "Android ARM32"; break;
      case NWNX_PLAYER_PLATFORM_ANDROID_ARM64: sPlatform = "Android ARM64"; break;
      case NWNX_PLAYER_PLATFORM_ANDROID_X64: sPlatform = "Android x64"; break;
      case NWNX_PLAYER_PLATFORM_NINTENDO_SWITCH: sPlatform = "Switch"; break;
      case NWNX_PLAYER_PLATFORM_MICROSOFT_XBOXONE: sPlatform = "Xbox One"; break;
      case NWNX_PLAYER_PLATFORM_SONY_PS4: sPlatform = "PS4"; break;
      default: sPlatform = "Unknown"; break;
  }

  int nLanguage = GetPlayerLanguage(oPC);
  string sLang;
  switch (nLanguage)
  {
    case PLAYER_LANGUAGE_INVALID: sLang = "Invalid"; break;
    case PLAYER_LANGUAGE_ENGLISH: sLang = "English"; break;
    case PLAYER_LANGUAGE_FRENCH:  sLang = "French"; break;
    case PLAYER_LANGUAGE_GERMAN:  sLang = "German"; break;
    case PLAYER_LANGUAGE_ITALIAN: sLang = "Italian"; break;
    case PLAYER_LANGUAGE_SPANISH: sLang = "Spanish"; break;
    case PLAYER_LANGUAGE_POLISH:  sLang = "Polish"; break;
    default: sLang = "UNK"; break;
  }
  if (sLang != "UNK")
    sLang = GetStringUpperCase(GetStringLeft(sLang, 2));


  string sMajor = IntToString(GetPlayerBuildVersionMajor(oPC));
  string sMinor = IntToString(GetPlayerBuildVersionMinor(oPC));
  string sPatch = IntToString(GetPlayerBuildVersionPostfix(oPC));
  string sSHA =   GetPlayerBuildVersionCommitSha1(oPC);

  LogInfo(GetPCInfo(oPC) + " entered.");

  NWNX_Util_RawPrint("         Player Name | IsDM |     IP Address | Relay |   CD Key |          BicFile | Lvl |    Character Name |      Platform | Lang | Version |");
  NWNX_Util_RawPrint("---------------------+------+----------------+-------+----------+------------------+-----+-------------------+---------------+------+---------+");

  string sOutput = "";
  sOutput += GetStringLeftPad(GetPCPlayerName(oPC), 20) + " |";
  sOutput += GetStringLeftPad(IntToString(GetIsDM(oPC)), 5) + " |";
  sOutput += GetStringLeftPad(GetPCIPAddress(oPC), 15) + " |";
  sOutput += GetStringLeftPad(GetIsPlayerConnectionRelayed(oPC) == 1 ? "Y" : "N", 6) + " |";
  sOutput += GetStringLeftPad(GetPCPublicCDKey(oPC), 9) + " |";
  sOutput += GetStringLeftPad(NWNX_Player_GetBicFileName(oPC), 17) + " |";
  sOutput += GetStringLeftPad(IntToString(GetPCLevel(oPC)), 4) + " |";
  sOutput += GetStringLeftPad(GetName(oPC), 18) + " |";
  sOutput += GetStringLeftPad(sPlatform, 14) + " |";
  sOutput += GetStringLeftPad(sLang, 5) + " |";
  sOutput += GetStringLeftPad(sMinor + "." + sPatch, 8) + " |";
  NWNX_Util_RawPrint(sOutput);
}


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

//! @brief Log an exit message for oPC.
//! @param oPC The leaving player or DM.
void OnExit(object oPC);
void OnExit(object oPC)
{
  if (!GetIsPC(oPC) || !GetIsDM(oPC))
    return;

  LogInfo(GetPCInfo(oPC) + " exited.");
}


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

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

  string sEvent = GetCurrentEvent();
  if (sEvent == ON_REGISTER)
  {
    SubscribeToEvent(ON_DEFAULT_CLIENT_ENTER, __FILE__);
    SubscribeToEvent(ON_DEFAULT_CLIENT_EXIT, __FILE__);
  }
  else if (sEvent == ON_DEFAULT_CLIENT_ENTER)
    OnEnter(GetEnteringObject());
  else if (sEvent == ON_DEFAULT_CLIENT_EXIT)
    OnExit(GetExitingObject());
}