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());
}