Files
HeroesStone_PRC8/_module/nss/sj_debug_i.nss
Jaysyn904 1eefc84201 Initial Commit
Initial Commit.
2025-09-14 15:40:46 -04:00

167 lines
5.6 KiB
Plaintext

// -----------------------------------------------------------------------------
// sj_debug_i
// -----------------------------------------------------------------------------
/*
Debug Library
/*
// -----------------------------------------------------------------------------
/*
Version: 0.00 - 26 Jun 2004 - Sunjammer
- cut-down version for use with sj_tilemagic_i
*/
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// CONSTANTS
// -----------------------------------------------------------------------------
// name of setting variables
const string SJ_VAR_DEBUG_ACTIVE = "sj_debug_active";
const string SJ_VAR_DEBUG_ERROR = "sj_debug_error";
const string SJ_VAR_DEBUG_LEVEL = "sj_debug_level";
const string SJ_VAR_DEBUG_VOLUME = "sj_debug_volume";
// debug levels
const int SJ_DEBUG_LEVEL_ERROR = 0; // errors
const int SJ_DEBUG_LEVEL_TRACE = 1; // errors & trace
const int SJ_DEBUG_LEVEL_WATCH = 2; // errors & trace & watch
// debug volumes
const int SJ_DEBUG_VOLUME_SILENT = 0; // log
const int SJ_DEBUG_VOLUME_QUIET = 1; // log & DMs
const int SJ_DEBUG_VOLUME_NOISY = 2; // log & DMs & PCs
// prefixes for printing
const string SJ_DEBUG_PREFIX_ERROR = "** ERROR: ";
const string SJ_DEBUG_PREFIX_TRACE = "** TRACE: ";
const string SJ_DEBUG_PREFIX_WATCH = "** WATCH: ";
// debug error message
const string SJ_DEBUG_TEXT_ERROR = "An error occured at time when there was no-one to notify. Please check the server log for details.";
// -----------------------------------------------------------------------------
// PROTOTYPES
// -----------------------------------------------------------------------------
// Sends sMessage to all players
// - sMessage: string to display
void SendMessageToAllPCs(string sMessage);
// Writes sMessage to the server log file and sends it as a server message to
// all DMs and PCs as required. Arguements and module settings are interpreted
// so as to provide the most information to the most recipients.
// - sMessage: string to print/display
// - nActive: TRUE or FALSE, is subject to module settings
// - nLevel: SJ_DEBUG_LEVEL_* constant, is subject to module settings
// - nVolume: SJ_DEBUG_VOLUME_* constant, is subject to module settings
void SJ_Debug(string sMessage, int nActive = FALSE, int nLevel = 0, int nVolume = 0);
// Returns the module debug active state. The active state controls if debug
// messages are logged or displayed by default. The default active state can be
// overridden by nActive to TRUE in individual function calls.
// * Returns: TRUE or FALSE
// * OnError: returns FALSE
int SJ_Debug_GetActive();
// Returns the module debug level. The level contols which type of debug
// messages are logged or displayed. Messages exceeding the module debug level
// will be ignored.
// * Returns: SJ_DEBUG_LEVEL_* constant
// * OnError: returns 0
int SJ_Debug_GetLevel();
// Returns the module debug volume. The volume controls which clients apps will
// recieve any debug messages.
// * Returns: SJ_DEBUG_VOLUME_* constant
// * OnError: returns 0
int SJ_Debug_GetVolume();
// Returns the module debug error flag. The debug error flag ensures that at
// least one DM is notified if an error has occurred.
// - OnError: TRUE or FALSE
void SJ_Debug_SetErrorFlag(int nError);
// -----------------------------------------------------------------------------
// FUNCTIONS
// -----------------------------------------------------------------------------
void SendMessageToAllPCs(string sMessage)
{
// find each PC and display message
object oPC = GetFirstPC();
while(GetIsObjectValid(oPC))
{
SendMessageToPC(oPC, sMessage);
oPC = GetNextPC();
}
}
void SJ_Debug(string sMessage, int nActive = FALSE, int nLevel = 0, int nVolume = 0)
{
// if either param or setting is active ...
if(nActive || SJ_Debug_GetActive())
{
// and the level is within set level ...
if(nLevel <= SJ_Debug_GetLevel())
{
// then start debugging!
int nDebugVolume = SJ_Debug_GetVolume();
// print to server log ...
PrintString(sMessage);
// and send message to DMs when either volume exceeds silent ...
if(nVolume > SJ_DEBUG_VOLUME_SILENT || nDebugVolume > SJ_DEBUG_VOLUME_SILENT)
{
object oPC = GetFirstPC();
while(GetIsObjectValid(oPC))
{
// provided at least one DM is on:
if(GetIsDM(oPC))
{
// display debug message and crop the error flag
SendMessageToAllDMs(sMessage);
SJ_Debug_SetErrorFlag(FALSE);
break;
}
oPC = GetNextPC();
}
}
// and send message to PCs when either volume exceeds quiet.
if(nVolume > SJ_DEBUG_VOLUME_QUIET || nDebugVolume > SJ_DEBUG_VOLUME_QUIET)
{
SendMessageToAllPCs(sMessage);
}
}
}
}
int SJ_Debug_GetActive()
{
return GetLocalInt(GetModule(), SJ_VAR_DEBUG_ACTIVE);
}
int SJ_Debug_GetLevel()
{
return GetLocalInt(GetModule(), SJ_VAR_DEBUG_LEVEL);
}
int SJ_Debug_GetVolume()
{
return GetLocalInt(GetModule(), SJ_VAR_DEBUG_VOLUME);
}
void SJ_Debug_SetErrorFlag(int nError)
{
SetLocalInt(GetModule(), SJ_VAR_DEBUG_ERROR, nError);
}