diff --git a/src/zombiereloaded.sp b/src/zombiereloaded.sp index cf63f6c..432237c 100644 --- a/src/zombiereloaded.sp +++ b/src/zombiereloaded.sp @@ -17,7 +17,7 @@ #define VERSION "3.0-dev" -// Core include. +// Core include #include "zr/zombiereloaded" // External api (not done) @@ -26,8 +26,8 @@ // Cvars (core) #include "zr/cvars" -// Log (TODO) -// #include "zr/log" +// Log (core) +#include "zr/log" // Translations (core) #include "zr/translation" @@ -196,9 +196,9 @@ public OnConfigsExecuted() { ServerCommand("exec %s", mapconfig); - if (LogFlagCheck(LOG_CORE_EVENTS)) + if (LogCheckFlag(LOG_CORE_EVENTS)) { - LogMessage("Executed map config file: %s", mapconfig); + LogMessageFormatted(-1, "", "", "Executed map config file: %s.", LOG_FORMAT_TYPE_SIMPLE, mapconfig); } } diff --git a/src/zr/anticamp.inc b/src/zr/anticamp.inc index a4dd637..70b6a52 100644 --- a/src/zr/anticamp.inc +++ b/src/zr/anticamp.inc @@ -274,9 +274,9 @@ public Action:Command_AnticampRemoveVolume(client, argc) volumes[vol_index][volume_in_use] = false; ReplyToCommand(client, "Removed volume %d.", vol_index); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) { - ZR_LogMessageFormatted(client, "anticamp", "remove volume", "\"%L\" removed volume %d.", true, client, vol_index); + LogMessageFormatted(client, "anticamp", "remove volume", "\"%L\" removed volume %d.", true, client, vol_index); } } else @@ -342,7 +342,6 @@ HurtPlayersInVolume(volume_index) new client_health; decl String:client_name[64]; decl String:buffer[192]; - new anticamp_echo = GetConVarBool(g_hCvarsList[CVAR_ANTICAMP_ECHO]); // x = client index. for (new x = 1; x <= MaxClients; x++) @@ -367,11 +366,9 @@ HurtPlayersInVolume(volume_index) SetGlobalTransTarget(x); Format(buffer, sizeof(buffer), "%T", "Unfair camper slayed", LANG_SERVER, client_name, volume_index); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) ZR_LogMessageFormatted(x, "anticamp", "kill", "%s", true, buffer); - if (anticamp_echo) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) { - FormatTextString(buffer, sizeof(buffer)); - ZR_PrintToAdminChat(buffer); + LogMessageFormatted(x, "anticamp", "kill", "%s", true, buffer); } } } @@ -385,17 +382,17 @@ bool:IsPlayerInVolume(client, volume_index) new Float:player_loc_y = player_loc[client][1]; new Float:player_loc_z = player_loc[client][2]; new log; - log = LogFlagCheck(LOG_DEBUG_MAX_DETAIL, LOG_MODULE_ANTICAMP); + log = LogCheckFlag(LOG_DEBUG_MAX_DETAIL, LOG_MODULE_ANTICAMP); if ((player_loc_x >= volumes[volume_index][x_min]) && (player_loc_x <= volumes[volume_index][x_max])) { - if (log) ZR_LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches X values.", true, client); + if (log) LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches X values.", true, client); if ((player_loc_y >= volumes[volume_index][y_min]) && (player_loc_y <= volumes[volume_index][y_max])) { - if (log) ZR_LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches Y values.", true, client); + if (log) LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches Y values.", true, client); if ((player_loc_z >= volumes[volume_index][z_min]) && (player_loc_z <= volumes[volume_index][z_max])) { - if (log) ZR_LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches Z values.", true, client); + if (log) LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches Z values.", true, client); return true; } } diff --git a/src/zr/commands.inc b/src/zr/commands.inc index 4df4492..7662c21 100644 --- a/src/zr/commands.inc +++ b/src/zr/commands.inc @@ -72,10 +72,10 @@ public Action:Command_Infect(client, argc) for (new x = 0; x < tcount; x++) { InfectPlayer(targets[x]); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) { GetClientName(targets[x], target_name, sizeof(target_name)); - ZR_LogMessageFormatted(client, "admin commands", "infect", "\"%s\" infected \"%s\".", true, client_name, target_name); + LogMessageFormatted(client, "admin commands", "infect", "\"%s\" infected \"%s\".", true, client_name, target_name); } } @@ -122,10 +122,10 @@ public Action:Command_Respawn(client, argc) team = GetClientTeam(targets[x]); if (team == CS_TEAM_T || team == CS_TEAM_CT) { - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) { GetClientName(targets[x], target_name, sizeof(target_name)); - ZR_LogMessageFormatted(targets[x], "admin commands", "spawn", "\"%s\" spawned player \"%s\".", true, client_name, target_name); + LogMessageFormatted(targets[x], "admin commands", "spawn", "\"%s\" spawned player \"%s\".", true, client_name, target_name); } RespawnSpawnClient(targets[x]); diff --git a/src/zr/cvars.inc b/src/zr/cvars.inc index e1c3db3..e28a292 100644 --- a/src/zr/cvars.inc +++ b/src/zr/cvars.inc @@ -16,6 +16,7 @@ enum CvarsList { Handle:CVAR_ENABLE, Handle:CVAR_LOG, + Handle:CVAR_LOGFLAGS, Handle:CVAR_ROUNDEND_OVERLAY, Handle:CVAR_ROUNDEND_OVERLAY_ZOMBIE, Handle:CVAR_ROUNDEND_OVERLAY_HUMAN, @@ -85,7 +86,6 @@ enum CvarsList Handle:CVAR_INFECT_SHAKE_DURATION, Handle:CVAR_ANTICAMP, Handle:CVAR_ANTICAMP_UPDATE_INTERVAL, - Handle:CVAR_ANTICAMP_ECHO, } /** @@ -123,7 +123,8 @@ CvarsInit() // Log (core) // =========================== - g_hCvarsList[CVAR_LOG] = CreateConVar("zr_log", "331", ""); + g_hCvarsList[CVAR_LOG] = CreateConVar("zr_log", "1", ""); + g_hCvarsList[CVAR_LOGFLAGS] = CreateConVar("zr_logflags", "331", ""); // Old Desc: Logging flags. Log messages to sourcemod logs, server console or client console. Use zr_log_flags to see a list of flags. (0: Disable) // =========================== @@ -349,8 +350,6 @@ CvarsInit() // Old Desc: Enables or disables hurt volumes for preventing unfair camping. (0: Disable) g_hCvarsList[CVAR_ANTICAMP_UPDATE_INTERVAL] = CreateConVar("zr_anticamp_update_interval", "1", ""); // Old Desc: How often to update player locations (in seconds). - g_hCvarsList[CVAR_ANTICAMP_ECHO] = CreateConVar("zr_anticamp_echo", "1", ""); - // Old Desc: Log kills done by anticamp to admin chat. // TODO: Recode. //HookConVarChange(g_hCvarsList[CVAR_ENABLE], EnableHook); @@ -401,44 +400,4 @@ public AutoTeamBalanceHook(Handle:convar, const String:oldValue[], const String: public LimitTeamsHook(Handle:convar, const String:oldValue[], const String:newValue[]) { SetConVarInt(FindConVar("mp_limitteams"), 0); -} - -LogHasFlag(flag) -{ - if (GetConVarInt(g_hCvarsList[CVAR_LOG]) & flag) - { - return 1; - } - else - { - return 0; - } -} - -/** - * Check if a log message should be written depending on log flags. If module - * overrides are enalbed only logs with it's module flag set will be logged. - * - * @param logtype Log type flag. - * @param module Specifies what module the log event belongs to. - * - * @return True if the event should be logged, false otherwise. - */ -LogFlagCheck(logtype, modulefilter = 0) -{ - if (modulefilter && (logtype & LOG_MODULES_ENABLED)) - { - if (logtype & modulefilter) - { - return 1; - } - else - { - return 0; - } - } - else - { - return LogHasFlag(logtype); - } } \ No newline at end of file diff --git a/src/zr/damage.inc b/src/zr/damage.inc index 7937ffc..5c82c24 100644 --- a/src/zr/damage.inc +++ b/src/zr/damage.inc @@ -294,9 +294,9 @@ public Action:DamageSuicideIntercept(client, argc) ZR_ReplyToCommand(client, "Damage suicide intercept"); // Log attempt. - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_DAMAGE)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_DAMAGE)) { - ZR_LogMessageFormatted(client, "Damage", "Suicide Intercept", "Player %N attempted suicide.", LOG_FORMAT_TYPE_FULL, client); + LogMessageFormatted(client, "Damage", "Suicide Intercept", "Player %N attempted suicide.", LOG_FORMAT_TYPE_FULL, client); } // Block command. diff --git a/src/zr/hitgroups.inc b/src/zr/hitgroups.inc index 123c438..267430c 100644 --- a/src/zr/hitgroups.inc +++ b/src/zr/hitgroups.inc @@ -65,9 +65,9 @@ HitgroupsLoad() // If file isn't found, stop plugin. if (!FileToKeyValues(kvHitgroups, path)) { - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS)) { - ZR_LogMessageFormatted(-1, "Hitgroups", "Config Validation", "Missing file hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL); + LogMessageFormatted(-1, "Hitgroups", "Config Validation", "Missing file hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL); } return; @@ -83,7 +83,7 @@ HitgroupsLoad() HitgroupsValidateConfig() { // If log flag check fails, don't log. - if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS)) + if (!LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_HITGROUPS)) { return; } @@ -91,7 +91,7 @@ HitgroupsValidateConfig() KvRewind(kvHitgroups); if (!KvGotoFirstSubKey(kvHitgroups)) { - ZR_LogMessageFormatted(-1, "Hitgroups", "Config Validation", "No hitgroups listed in hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL); + LogMessageFormatted(-1, "Hitgroups", "Config Validation", "No hitgroups listed in hitgroups.txt, disabling hitgroup-based modules.", LOG_FORMAT_TYPE_FULL); } } diff --git a/src/zr/log.inc b/src/zr/log.inc new file mode 100644 index 0000000..8aeb64c --- /dev/null +++ b/src/zr/log.inc @@ -0,0 +1,189 @@ +/* + * ============================================================================ + * + * Zombie:Reloaded + * + * File: log.inc + * Description: Logging API. + * + * ============================================================================ + */ + +/** + * @section Log message max lengths. + */ +#define LOG_MAX_LENGTH_FILE 2048 +#define LOG_MAX_LENGTH_CHAT 192 +/** + * @endsection + */ + +/** + * @section Log format types + */ +#define LOG_FORMAT_TYPE_SIMPLE 0 /** Simple log message. */ +#define LOG_FORMAT_TYPE_FULL 1 /** Full log message, printed in normal log. */ +#define LOG_FORMAT_TYPE_ERROR 2 /** Full log message, printed in error log. */ +/** + * @endsection + */ + +/** + * @section Logging flags. + */ +#define LOG_CORE_EVENTS 1 /** Config validation, other core events. */ +#define LOG_GAME_EVENTS 2 /** Admin commands, suicide prevention, anticamp kills. */ +#define LOG_PLAYER_COMMANDS 4 /** Commands executed by non-admins: zspawn, teleport, class change. */ +#define LOG_DEBUG 8 /** Debug messages. */ +#define LOG_DEBUG_DETAIL 16 /** Debug messages with more detail. May cause spam. */ +#define LOG_DEBUG_MAX_DETAIL 32 /** Low level debug messages. Causes spam! Only enable for a limited period right before and after testing. */ +#define LOG_TO_ADMINS 64 /** Copy kinds of log events to admin chat. */ +#define LOG_TO_CLIENT 128 /** Copy all log events related to a player, to the players console. */ +#define LOG_IGNORE_CONSOLE 256 /** Don't log messages from the console (client 0). */ +#define LOG_MODULES_ENABLED 512 /** Enable module based log control. Module logs overrides previous flags, including debug flags. */ +#define LOG_MODULE_CORE 1024 /** The core of the plugin (startup, loading configs, etc.). Not really a module. */ +#define LOG_MODULE_COMMANDS 2048 /** commands.inc */ +#define LOG_MODULE_CLASSES 4096 /** Class system - playerclasses/ *.inc */ +#define LOG_MODULE_ZOMBIE 8192 /** zombie.inc */ +#define LOG_MODULE_SAYTRIGGERS 16384 /** sayhooks.inc */ +#define LOG_MODULE_AMBIENTSOUNDS 32768 /** ambientsounds.inc */ +#define LOG_MODULE_OVERLAYS 65536 /** overlays.inc */ +#define LOG_MODULE_TELEPORT 131072 /** teleport.inc */ +#define LOG_MODULE_WEAPONS 262144 /** Weapons module - weapons/ *.inc */ +#define LOG_MODULE_HITGROUPS 524288 /** hitgroups.inc */ +#define LOG_MODULE_ANTICAMP 1048576 /** anticamp.inc */ +#define LOG_MODULE_DAMAGE 2097152 /** damage.inc */ +#define LOG_MODULE_OFFSETS 4194304 /** offsets.inc */ +/* + * @endsection + */ + +/** + * Logs a formatted message with module and block info depending, on the type. + * + * @param client Specifies the client who triggered the event/command. Use + * -1 for core events like validation, etc. + * @param module what module the log event belongs to. + * @param block What function or code block the log is triggered from. + * @param message Log message. Formatted string. + * @param type Optional. What logging type or style to use. Options: + * LOG_FORMAT_TYPE_SIMPLE - Simple, no module or block info. + * LOG_FORMAT_TYPE_FULL - Full, with module and block info, printed in normal log. + * LOG_FORMAT_TYPE_ERROR - Full, printed in error log. + * @param any... Formatting parameters. + */ +LogMessageFormatted(client, const String:module[], const String:block[], const String:message[], type = LOG_FORMAT_TYPE_FULL, any:...) +{ + // If logging is disabled, then stop. + new bool:log = GetConVarBool(g_hCvarsList[CVAR_LOG]); + if (!log) + { + return; + } + + decl String:buffer[LOG_MAX_LENGTH_FILE]; + decl String:text[LOG_MAX_LENGTH_FILE]; + + if (client == 0 && LogCheckFlag(LOG_IGNORE_CONSOLE)) + { + return; + } + + switch (type) + { + case LOG_FORMAT_TYPE_SIMPLE: + { + VFormat(buffer, sizeof(buffer), message, 6); + Format(text, sizeof(text), "%s", message); + LogMessage(text); + } + case LOG_FORMAT_TYPE_FULL: + { + VFormat(buffer, sizeof(buffer), message, 6); + Format(text, sizeof(text), "\"%s\" : \"%s\" -- %s", module, block, buffer); + LogMessage(text); + } + case LOG_FORMAT_TYPE_ERROR: + { + VFormat(buffer, sizeof(buffer), message, 6); + Format(text, sizeof(text), "\"%s\" : \"%s\" -- %s", module, block, buffer); + LogError(text); + } + } + + // If log to admin flag is enabled, then print to admins. + if (LogCheckFlag(LOG_TO_ADMINS)) + { + // Print text to admins. + LogToAdmins(text); + } + + if (ZRIsValidClient(client) && LogCheckFlag(LOG_TO_CLIENT)) + { + // Set client as translation target. + SetGlobalTransTarget(client); + + // Print to client. + PrintToConsole(client, "%t %s", "ZR", text); + } +} + +LogToAdmins(String:message[]) +{ + decl String:buffer[LOG_MAX_LENGTH_CHAT]; + + // x = client index. + for (new x = 1; x < MaxClients; x++) + { + // If client isn't in-game, then stop. + if (!IsClientInGame(x)) + { + continue; + } + + // If client isn't an admin, then stop. + if (!ZRIsClientAdmin(x)) + { + continue; + } + + // Set client as translation target. + SetGlobalTransTarget(x); + + // Format message to admin, then print. + Format(buffer, sizeof(buffer), "%t %s", "ZR", message); + PrintToChat(x, buffer); + } +} + +/** + * Checks if the zr_logflags cvar has a certain flag. + * + * @param flag The flag. + */ +bool:LogHasFlag(flag) +{ + // Get log flags. + new logflags = GetConVarInt(g_hCvarsList[CVAR_LOGFLAGS]); + + // Return true if flag is found, false if not. + return bool:(logflags & flag); +} + +/** + * Check if a log message should be written depending on log flags. If module + * overrides are enabled only logs with it's module flag set will be logged. + * + * @param logtype Log type flag. + * @param module Specifies what module the log event belongs to. + * @return True if the event should be logged, false otherwise. + */ +bool:LogCheckFlag(logtype, modulefilter = 0) +{ + if (modulefilter && (logtype & LOG_MODULES_ENABLED)) + { + return bool:(logtype & modulefilter); + } + + return LogHasFlag(logtype); +} \ No newline at end of file diff --git a/src/zr/offsets.inc b/src/zr/offsets.inc index 3576d95..2b7a12a 100644 --- a/src/zr/offsets.inc +++ b/src/zr/offsets.inc @@ -18,6 +18,7 @@ new offsFOV; new offsBuyZone; new offsColor; new offsRender; +new offsActiveWeapon; new Handle:g_hGameConf = INVALID_HANDLE; new Handle:g_hRemoveAllItems = INVALID_HANDLE; @@ -89,14 +90,22 @@ FindOffsets() } offsColor = FindSendPropInfo("CAI_BaseNPC", "m_clrRender"); - if(offsColor == -1) { + if(offsColor == -1) + { SetFailState("Couldn't find \"m_clrRender\"!"); } offsRender = FindSendPropInfo("CBaseAnimating", "m_nRenderMode"); - if(offsRender == -1) { + if(offsRender == -1) + { SetFailState("Couldn't find \"m_nRenderMode\"!"); } + + offsActiveWeapon = FindSendPropInfo("CBasePlayer", "m_hActiveWeapon"); + if(offsActiveWeapon == -1) + { + SetFailState("Couldn't find \"m_hActiveWeapon\"!"); + } } SetupGameData() @@ -276,7 +285,6 @@ CSDropWeapon(client, weapon) SetPlayerAlpha(client, alpha) { - SetEntData(client, offsColor + 3, alpha, 1, true); SetEntData(client, offsRender, 3, 1, true); -} - + SetEntData(client, offsColor + 3, alpha, 1, true); +} \ No newline at end of file diff --git a/src/zr/playerclasses/filtertools.inc b/src/zr/playerclasses/filtertools.inc index f0cb476..30f29c6 100644 --- a/src/zr/playerclasses/filtertools.inc +++ b/src/zr/playerclasses/filtertools.inc @@ -695,18 +695,18 @@ ClassGetDefaultSpawnClass(teamid, cachetype = ZR_CLASS_CACHE_MODIFIED) // in the specified team, and log a warning. classindex = ClassGetFirstClass(teamid, _, cachetype); - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "DefaultSpawnClass", "Warning: Failed to set \"%s\" as default spawn class for team %d. The class doesn't exist or the team IDs doesn't match. Falling back to the first class in the team.", _, classname, teamid); + LogMessageFormatted(-1, "Classes", "DefaultSpawnClass", "Warning: Failed to set \"%s\" as default spawn class for team %d. The class doesn't exist or the team IDs doesn't match. Falling back to the first class in the team.", _, classname, teamid); } // Validate the new index. if (ClassValidateIndex(classindex)) { // Log a warning. - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "DefaultSpawnClass", "Warning: The default class name \"%s\" does not exist or matches the team ID.", _, classname); + LogMessageFormatted(-1, "Classes", "DefaultSpawnClass", "Warning: The default class name \"%s\" does not exist or matches the team ID.", _, classname); } return classindex; diff --git a/src/zr/playerclasses/playerclasses.inc b/src/zr/playerclasses/playerclasses.inc index 40ac461..6b4d4d2 100644 --- a/src/zr/playerclasses/playerclasses.inc +++ b/src/zr/playerclasses/playerclasses.inc @@ -291,9 +291,9 @@ ClassLoad() if (ClassCount > ZR_CLASS_MAX) { // Maximum classes reached. Write a warning and exit the loop. - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "Load", "Warning: Maximum classes reached (%d). Skipping other classes.", _, ZR_CLASS_MAX + 1); + LogMessageFormatted(-1, "Classes", "Load", "Warning: Maximum classes reached (%d). Skipping other classes.", _, ZR_CLASS_MAX + 1); } break; @@ -355,9 +355,9 @@ ClassLoad() // There's one or more invalid class attributes. Disable the class // and log an error message. ClassData[ClassCount][class_enabled] = false; - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "Load", "Warning: Invalid class at index %d, disabled class. Class error flags: %d.", LOG_FORMAT_TYPE_ERROR, ClassCount, ClassErrorFlags); + LogMessageFormatted(-1, "Classes", "Load", "Warning: Invalid class at index %d, disabled class. Class error flags: %d.", LOG_FORMAT_TYPE_ERROR, ClassCount, ClassErrorFlags); } } @@ -565,9 +565,9 @@ ClassClientSetDefaultIndexes(client = -1) { // Invalid class index. Fall back to default class in class config and // log a warning. - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default zombie class, falling back to default class. Check spelling in \"zr_classes_default_zombie\".", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default zombie class, falling back to default class. Check spelling in \"zr_classes_default_zombie\".", LOG_FORMAT_TYPE_ERROR); } // Use default class. @@ -579,9 +579,9 @@ ClassClientSetDefaultIndexes(client = -1) { // Invalid class index. Fall back to default class in class config and // log a warning. - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default human class, falling back to default class. Check spelling in \"zr_classes_default_human\".", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default human class, falling back to default class. Check spelling in \"zr_classes_default_human\".", LOG_FORMAT_TYPE_ERROR); } // Use default class. @@ -593,9 +593,9 @@ ClassClientSetDefaultIndexes(client = -1) { // Invalid class index. Fall back to default class in class config and // log a warning. - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_CLASSES)) { - ZR_LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default admin class, falling back to default class. Check spelling in \"zr_classes_default_admin\".", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Classes", "SetDefaultIndexes", "Warning: Failed to get default admin class, falling back to default class. Check spelling in \"zr_classes_default_admin\".", LOG_FORMAT_TYPE_ERROR); } // Use default class. diff --git a/src/zr/soundeffects/ambientsounds.inc b/src/zr/soundeffects/ambientsounds.inc index a5cd77b..3a46d04 100644 --- a/src/zr/soundeffects/ambientsounds.inc +++ b/src/zr/soundeffects/ambientsounds.inc @@ -57,7 +57,7 @@ bool:AmbientSoundsValidateConfig() } // If logging is disabled for ambient sounds, then stop. - if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_AMBIENTSOUNDS)) + if (!LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_AMBIENTSOUNDS)) { return false; } @@ -71,7 +71,7 @@ bool:AmbientSoundsValidateConfig() if (!FileExists(sound, true)) { // Log invalid sound file error. - ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Invalid sound file specified in zr_ambientsounds_file.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Invalid sound file specified in zr_ambientsounds_file.", LOG_FORMAT_TYPE_ERROR); return false; } @@ -80,7 +80,7 @@ bool:AmbientSoundsValidateConfig() if (ambientvolume <= 0.0) { // Log invalid ambient sound volume error. - ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound is either muted or invalid.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound is either muted or invalid.", LOG_FORMAT_TYPE_ERROR); return false; } @@ -89,7 +89,7 @@ bool:AmbientSoundsValidateConfig() if (ambientlength <= 0.0) { // Log invalid ambient sound length error. - ZR_LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound length is invalid.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Ambient Sounds", "Config Validation", "Ambient sound length is invalid.", LOG_FORMAT_TYPE_ERROR); return false; } diff --git a/src/zr/teleport.inc b/src/zr/teleport.inc index bd1a73f..9510ae5 100644 --- a/src/zr/teleport.inc +++ b/src/zr/teleport.inc @@ -167,7 +167,7 @@ public Action:Command_Teleport(client, argc) AbortTeleport(target_list[i]); TeleportClient(target_list[i], true, true); GetClientName(target_list[i], target_name, sizeof(target_name)); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) ZR_LogMessageFormatted(client, "teleport", "manual teleport", "\"%s\" teleported \"%s\" to spawn.", true, client_name, target_name); + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) LogMessageFormatted(client, "teleport", "manual teleport", "\"%s\" teleported \"%s\" to spawn.", true, client_name, target_name); } } } @@ -177,7 +177,7 @@ public Action:Command_Teleport(client, argc) { AbortTeleport(client); TeleportClient(client, true, true); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) ZR_LogMessageFormatted(client, "teleport", "manual teleport", "\"%s\" self-teleported to spawn.", true, client_name); + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) LogMessageFormatted(client, "teleport", "manual teleport", "\"%s\" self-teleported to spawn.", true, client_name); } } @@ -262,7 +262,7 @@ public Action:Command_TeleportToLocation(client, argc) TeleportEntity(target_client, bufferLoc[client], NULL_VECTOR, empty_vector); ZR_PrintToChat(client, "!ztele successful"); if (target_client != client) ZR_PrintToChat(target_client, "!ztele successful"); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) ZR_LogMessageFormatted(client, "teleport", "custom teleport", "\"%s\" teleported \"%s\".", true, client_name, target_name); + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) LogMessageFormatted(client, "teleport", "custom teleport", "\"%s\" teleported \"%s\".", true, client_name, target_name); } else { diff --git a/src/zr/translation.inc b/src/zr/translation.inc index 6cacc33..3717b01 100644 --- a/src/zr/translation.inc +++ b/src/zr/translation.inc @@ -6,10 +6,6 @@ * ==================== */ -#define LOG_FORMAT_TYPE_SIMPLE 0 // Simple log message, no module or block info. -#define LOG_FORMAT_TYPE_FULL 1 // Full log message, with module and block info. -#define LOG_FORMAT_TYPE_ERROR 2 // Full log message, but log to error log instead. - FormatTextString(String:text[], maxlen) { Format(text, maxlen, "@green[%t] @default%s", "ZR", text); @@ -114,62 +110,6 @@ stock ZR_TranslateMessage(String:buffer[], maxlen, any:...) VFormat(buffer, maxlen, "%t", 3); } -/** - * Logs a formatted message with module and block info depending, on the type. - * - * @param client Specifies the client who triggered the event/command. Use - * -1 for core events like validation, etc. - * @param module what module the log event belongs to. - * @param block What function or code block the log is triggered from. - * @param message Log message. Formatted string. - * @param type Optional. What logging type or style to use. Options: - * LOG_FORMAT_TYPE_SIMPLE - Simple, no module or block info. - * LOG_FORMAT_TYPE_FULL - Full, with module and block info. - * LOG_FORMAT_TYPE_ERROR - Full, but log to error log instead. - * @param any... Formatting parameters. - */ -stock ZR_LogMessageFormatted(client, const String:module[], const String:block[], const String:message[], type = LOG_FORMAT_TYPE_FULL, any:...) -{ - decl String:buffer[2048]; - decl String:text[2048]; - - if (client == 0 && LogHasFlag(LOG_IGNORE_CONSOLE)) - { - return; - } - - switch (type) - { - case LOG_FORMAT_TYPE_SIMPLE: - { - VFormat(buffer, sizeof(buffer), message, 6); - Format(text, sizeof(text), "%s", message); - LogMessage(text); - } - case LOG_FORMAT_TYPE_FULL: - { - VFormat(buffer, sizeof(buffer), message, 6); - Format(text, sizeof(text), "\"%s\" : \"%s\" -- %s", module, block, buffer); - LogMessage(text); - } - case LOG_FORMAT_TYPE_ERROR: - { - VFormat(buffer, sizeof(buffer), message, 6); - Format(text, sizeof(text), "\"%s\" : \"%s\" -- %s", module, block, buffer); - LogError(text); - } - } - - if (LogHasFlag(LOG_TO_ADMINS)) - { - ZR_PrintToAdminChat(text); - } - if (client > 0 && LogHasFlag(LOG_TO_CLIENT) && IsClientConnected(client) && IsClientInGame(client)) - { - PrintToConsole(client, "[ZR] %s", text); - } -} - stock ZR_ReplyToCommand(client, any:...) { decl String:phrase[192]; @@ -184,10 +124,13 @@ stock ZR_ReplyToCommand(client, any:...) /** * Adds support for printing long strings. + * + * @param client The client index. + * @param text The text to print. */ stock ZR_ReplyToCommandLong(client, const String:text[]) { - decl String:partbuffer[1000]; + decl String:partbuffer[1024]; new pos; new cellswritten = 1; // Initialize for the loop. @@ -197,19 +140,4 @@ stock ZR_ReplyToCommandLong(client, const String:text[]) ReplyToCommand(client, partbuffer); pos += cellswritten; } -} - -stock ZR_PrintToAdminChat(String:message[]) -{ - decl String:buffer[256]; - Format(buffer, sizeof(buffer), "[ZR] %s", message); - - // x = client index. - for (new x = 1; x < MaxClients; x++) - { - if (IsClientInGame(x) && ZRIsClientAdmin(x)) - { - PrintToChat(x, buffer); - } - } } \ No newline at end of file diff --git a/src/zr/weapons/restrict.inc b/src/zr/weapons/restrict.inc index 732b62b..e8d7bf2 100644 --- a/src/zr/weapons/restrict.inc +++ b/src/zr/weapons/restrict.inc @@ -86,9 +86,9 @@ RestrictOnMapStart() // If file isn't found, stop plugin. if (!FileToKeyValues(kvWeaponGroups, path)) { - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(-1, "Weapons", "Config Validation", "Missing file weapongroups.txt.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Weapons", "Config Validation", "Missing file weapongroups.txt.", LOG_FORMAT_TYPE_ERROR); } return; @@ -137,7 +137,7 @@ RestrictDefaultRestrictions() RestrictValidateWeaponGroups() { // If log flag check fails, don't log. - if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) + if (!LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) { return; } @@ -165,7 +165,7 @@ RestrictValidateWeaponGroups() // If weapon is invalid, then log it. if (!WeaponsIsValidWeapon(groupweapon)) { - ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "Invalid weapon \"%s\" in group \"%s\" configured in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, groupweapon, weapongroup); + LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "Invalid weapon \"%s\" in group \"%s\" configured in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, groupweapon, weapongroup); } } while (KvGotoNextKey(kvWeaponGroups)); @@ -174,7 +174,7 @@ RestrictValidateWeaponGroups() // If it couldn't traverse to the weapons, then log no weapons within group. else { - ZR_LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "No weapons listed in weapon group \"%s\" in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, weapongroup); + LogMessageFormatted(-1, "Weapon Restrict", "Config Validation", "No weapons listed in weapon group \"%s\" in weapongroups.txt.", LOG_FORMAT_TYPE_ERROR, weapongroup); } } while (KvGotoNextKey(kvWeaponGroups)); } @@ -439,9 +439,9 @@ RestrictPrintRestrictOutput(client, WpnRestrictQuery:output, const String:weapon { ZR_PrintToChat(0, "Restrict weapon", weapon); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(client, "Weapon Restrict", "Restrict", "\"%L\" restricted weapon: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); + LogMessageFormatted(client, "Weapon Restrict", "Restrict", "\"%L\" restricted weapon: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); } } // Weapon group was successfully restricted. @@ -452,9 +452,9 @@ RestrictPrintRestrictOutput(client, WpnRestrictQuery:output, const String:weapon ZR_PrintToChat(0, "Restrict custom weapon group", weapon, weaponlist); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(client, "Weapon Restrict", "Restrict", "\"%L\" restricted weapon group: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); + LogMessageFormatted(client, "Weapon Restrict", "Restrict", "\"%L\" restricted weapon group: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); } } // Weapon was already restricted. @@ -515,9 +515,9 @@ RestrictPrintUnrestrictOutput(client, WpnRestrictQuery:output, const String:weap { ZR_PrintToChat(0, "Unrestrict weapon", weapon); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(client, "Weapon Restrict", "Unrestrict", "\"%L\" unrestricted weapon: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); + LogMessageFormatted(client, "Weapon Restrict", "Unrestrict", "\"%L\" unrestricted weapon: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); } } // Weapon group was successfully unrestricted. @@ -528,9 +528,9 @@ RestrictPrintUnrestrictOutput(client, WpnRestrictQuery:output, const String:weap ZR_PrintToChat(0, "Unrestrict custom weapon group", weapon, weaponlist); - if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_GAME_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(client, "Weapon Restrict", "Unrestrict", "\"%L\" unrestricted weapon group: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); + LogMessageFormatted(client, "Weapon Restrict", "Unrestrict", "\"%L\" unrestricted weapon group: \"%s\".", LOG_FORMAT_TYPE_FULL, client, weapon); } } // Weapon wasn't restricted. diff --git a/src/zr/weapons/weapons.inc b/src/zr/weapons/weapons.inc index 2798c3a..b7be8bd 100644 --- a/src/zr/weapons/weapons.inc +++ b/src/zr/weapons/weapons.inc @@ -13,11 +13,28 @@ * Maximum length of a weapon name string */ #define WEAPONS_MAX_LENGTH 32 - /** * @endsection */ - + +/** + * Number of weapon slots (For CS:S) + */ +#define WEAPONS_SLOTS_MAX 5 + +/** + * Weapon types. + */ +enum WeaponsType +{ + Type_Invalid = -1, + Type_Primary = 0, + Type_Secondary = 1, + Type_Melee = 2, + Type_Projectile = 3, + Type_Explosive = 4, +} + /** * Array to store keyvalue data. */ @@ -71,9 +88,9 @@ WeaponsLoad() // If file isn't found, stop plugin. if (!FileToKeyValues(kvWeapons, path)) { - if (LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) + if (LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) { - ZR_LogMessageFormatted(-1, "Weapons", "Config Validation", "Missing file weapons.txt, disabling weapons-based modules.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Weapons", "Config Validation", "Missing file weapons.txt.", LOG_FORMAT_TYPE_ERROR); } return; @@ -92,7 +109,7 @@ WeaponsLoad() WeaponsValidateConfig() { // If log flag check fails, don't log. - if (!LogFlagCheck(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) + if (!LogCheckFlag(LOG_CORE_EVENTS, LOG_MODULE_WEAPONS)) { return; } @@ -100,7 +117,7 @@ WeaponsValidateConfig() KvRewind(kvWeapons); if (!KvGotoFirstSubKey(kvWeapons)) { - ZR_LogMessageFormatted(-1, "Weapons", "Config Validation", "No weapons listed in weapons.txt, disabling weapons-based modules.", LOG_FORMAT_TYPE_ERROR); + LogMessageFormatted(-1, "Weapons", "Config Validation", "No weapons listed in weapons.txt.", LOG_FORMAT_TYPE_ERROR); } } @@ -275,4 +292,70 @@ Float:WeaponGetWeaponKnockback(const String:weapon[]) } return 1.0; +} + +/** + * General weapon API. + */ + +/** + * Return an array that contains all client's weapon indexes. + * + * @param client The client index. + * @param weapons The weapon index array. + * -1 if no weapon in slot. + */ +WeaponsGetClientWeapons(client, weapons[WeaponsType]) +{ + // x = weapon slot. + for (new x = 0; x < WEAPONS_SLOTS_MAX; x++) + { + weapons[x] = GetPlayerWeaponSlot(client, x); + } +} + +/** + * Returns weapon index of the client's deployed weapon. + * + * @param client The client index. + * @return The weapon index of the deployed weapon. + * -1 if no weapon is deployed. + */ +WeaponsGetDeployedWeaponIndex(client) +{ + // Return the client's active weapon. + return GetEntDataEnt2(client, offsActiveWeapon); +} + +/** + * Returns slot of client's deployed weapon. + * + * @param client The client index. + * @return The slot number of deployed weapon. + */ +WeaponsType:WeaponsGetDeployedWeaponSlot(client) +{ + // Get all client's weapon indexes. + new weapons[WeaponsType]; + WeaponsGetClientWeapons(client, weapons); + + // Get client's deployed weapon. + new deployedweapon = WeaponsGetDeployedWeaponIndex(client); + + // If client has no deployed weapon, then stop. + if (deployedweapon == -1) + { + return Type_Invalid; + } + + // x = weapon slot. + for (new x = 0; x < WEAPONS_SLOTS_MAX; x++) + { + if (weapons[x] == deployedweapon) + { + return x; + } + } + + return Type_Invalid; } \ No newline at end of file diff --git a/src/zr/zadmin.inc b/src/zr/zadmin.inc index 8dce921..8e9396e 100644 --- a/src/zr/zadmin.inc +++ b/src/zr/zadmin.inc @@ -526,28 +526,28 @@ ZRLogFlagsMenu(client) decl String:z_log_module_damage[64]; decl String:z_log_module_offsets[64]; - Format(z_log_core, sizeof(z_log_core), "Log core events (%d)", LogHasFlag(LOG_CORE_EVENTS)); - Format(z_log_game, sizeof(z_log_game), "Log game events (%d)", LogHasFlag(LOG_GAME_EVENTS)); - Format(z_log_player, sizeof(z_log_player), "Log player commands (%d)", LogHasFlag(LOG_PLAYER_COMMANDS)); - Format(z_log_debug, sizeof(z_log_debug), "Log debug messages (%d)", LogHasFlag(LOG_DEBUG)); - Format(z_log_debug_detail, sizeof(z_log_debug_detail), "Log detailed debug messages (%d)", LogHasFlag(LOG_DEBUG_DETAIL)); - Format(z_log_debug_max, sizeof(z_log_debug_max), "Log low level debug messages (%d)", LogHasFlag(LOG_DEBUG_MAX_DETAIL)); - Format(z_log_admins, sizeof(z_log_admins), "Also log to admin chat (%d)", LogHasFlag(LOG_TO_ADMINS)); - Format(z_log_client, sizeof(z_log_client), "Also log to client console (%d)", LogHasFlag(LOG_TO_CLIENT)); - Format(z_log_ignore_console, sizeof(z_log_ignore_console), "Don't log messages from the console (%d)", LogHasFlag(LOG_IGNORE_CONSOLE)); - Format(z_log_modules_enabled, sizeof(z_log_modules_enabled), "Module based log control (%d)", LogHasFlag(LOG_MODULES_ENABLED)); - Format(z_log_module_zombie, sizeof(z_log_module_zombie), "Zombie (%d)", LogHasFlag(LOG_MODULE_ZOMBIE)); - Format(z_log_module_ambientsounds, sizeof(z_log_module_ambientsounds), "Ambient Sounds (%d)", LogHasFlag(LOG_MODULE_AMBIENTSOUNDS)); - Format(z_log_module_overlays, sizeof(z_log_module_overlays), "Overlays (%d)", LogHasFlag(LOG_MODULE_OVERLAYS)); - Format(z_log_module_saytriggers, sizeof(z_log_module_saytriggers), "Chat commands (%d)", LogHasFlag(LOG_MODULE_SAYTRIGGERS)); - Format(z_log_module_teleport, sizeof(z_log_module_teleport), "Teleporter (%d)", LogHasFlag(LOG_MODULE_TELEPORT)); - Format(z_log_module_classes, sizeof(z_log_module_classes), "Classes (%d)", LogHasFlag(LOG_MODULE_CLASSES)); - Format(z_log_module_weapons, sizeof(z_log_module_weapons), "Weapons (%d)", LogHasFlag(LOG_MODULE_WEAPONS)); - Format(z_log_module_hitgroups, sizeof(z_log_module_hitgroups), "Hitgroups (%d)", LogHasFlag(LOG_MODULE_HITGROUPS)); - Format(z_log_module_commands, sizeof(z_log_module_commands), "Admin commands (%d)", LogHasFlag(LOG_MODULE_COMMANDS)); - Format(z_log_module_anticamp, sizeof(z_log_module_anticamp), "Anticamp (%d)", LogHasFlag(LOG_MODULE_ANTICAMP)); - Format(z_log_module_damage, sizeof(z_log_module_damage), "Damage (Suicide Intercept) (%d)", LogHasFlag(LOG_MODULE_DAMAGE)); - Format(z_log_module_offsets, sizeof(z_log_module_offsets), "Offsets (properties) (%d)", LogHasFlag(LOG_MODULE_OFFSETS)); + Format(z_log_core, sizeof(z_log_core), "Log core events (%d)", LogCheckFlag(LOG_CORE_EVENTS)); + Format(z_log_game, sizeof(z_log_game), "Log game events (%d)", LogCheckFlag(LOG_GAME_EVENTS)); + Format(z_log_player, sizeof(z_log_player), "Log player commands (%d)", LogCheckFlag(LOG_PLAYER_COMMANDS)); + Format(z_log_debug, sizeof(z_log_debug), "Log debug messages (%d)", LogCheckFlag(LOG_DEBUG)); + Format(z_log_debug_detail, sizeof(z_log_debug_detail), "Log detailed debug messages (%d)", LogCheckFlag(LOG_DEBUG_DETAIL)); + Format(z_log_debug_max, sizeof(z_log_debug_max), "Log low level debug messages (%d)", LogCheckFlag(LOG_DEBUG_MAX_DETAIL)); + Format(z_log_admins, sizeof(z_log_admins), "Also log to admin chat (%d)", LogCheckFlag(LOG_TO_ADMINS)); + Format(z_log_client, sizeof(z_log_client), "Also log to client console (%d)", LogCheckFlag(LOG_TO_CLIENT)); + Format(z_log_ignore_console, sizeof(z_log_ignore_console), "Don't log messages from the console (%d)", LogCheckFlag(LOG_IGNORE_CONSOLE)); + Format(z_log_modules_enabled, sizeof(z_log_modules_enabled), "Module based log control (%d)", LogCheckFlag(LOG_MODULES_ENABLED)); + Format(z_log_module_zombie, sizeof(z_log_module_zombie), "Zombie (%d)", LogCheckFlag(LOG_MODULE_ZOMBIE)); + Format(z_log_module_ambientsounds, sizeof(z_log_module_ambientsounds), "Ambient Sounds (%d)", LogCheckFlag(LOG_MODULE_AMBIENTSOUNDS)); + Format(z_log_module_overlays, sizeof(z_log_module_overlays), "Overlays (%d)", LogCheckFlag(LOG_MODULE_OVERLAYS)); + Format(z_log_module_saytriggers, sizeof(z_log_module_saytriggers), "Chat commands (%d)", LogCheckFlag(LOG_MODULE_SAYTRIGGERS)); + Format(z_log_module_teleport, sizeof(z_log_module_teleport), "Teleporter (%d)", LogCheckFlag(LOG_MODULE_TELEPORT)); + Format(z_log_module_classes, sizeof(z_log_module_classes), "Classes (%d)", LogCheckFlag(LOG_MODULE_CLASSES)); + Format(z_log_module_weapons, sizeof(z_log_module_weapons), "Weapons (%d)", LogCheckFlag(LOG_MODULE_WEAPONS)); + Format(z_log_module_hitgroups, sizeof(z_log_module_hitgroups), "Hitgroups (%d)", LogCheckFlag(LOG_MODULE_HITGROUPS)); + Format(z_log_module_commands, sizeof(z_log_module_commands), "Admin commands (%d)", LogCheckFlag(LOG_MODULE_COMMANDS)); + Format(z_log_module_anticamp, sizeof(z_log_module_anticamp), "Anticamp (%d)", LogCheckFlag(LOG_MODULE_ANTICAMP)); + Format(z_log_module_damage, sizeof(z_log_module_damage), "Damage (Suicide Intercept) (%d)", LogCheckFlag(LOG_MODULE_DAMAGE)); + Format(z_log_module_offsets, sizeof(z_log_module_offsets), "Offsets (properties) (%d)", LogCheckFlag(LOG_MODULE_OFFSETS)); AddMenuItem(menu_log_flags, z_log_core, z_log_core, item_state); AddMenuItem(menu_log_flags, z_log_game, z_log_game, item_state); diff --git a/src/zr/zombiereloaded.inc b/src/zr/zombiereloaded.inc index 09fa001..8aa3501 100644 --- a/src/zr/zombiereloaded.inc +++ b/src/zr/zombiereloaded.inc @@ -13,36 +13,6 @@ */ #define GENERAL_MIN_DXLEVEL 90 -/** - * @section Logging flags. - */ -#define LOG_CORE_EVENTS 1 /** Executing config files, error messages, etc. */ -#define LOG_GAME_EVENTS 2 /** Admin commands, suicide prevention, anticamp kills. */ -#define LOG_PLAYER_COMMANDS 4 /** Commands executed by non-admins: zspawn, teleport, class change. */ -#define LOG_DEBUG 8 /** Debug messages. */ -#define LOG_DEBUG_DETAIL 16 /** Debug messages with more detail. May cause spam. */ -#define LOG_DEBUG_MAX_DETAIL 32 /** Low level debug messages. Causes spam! Only enable for a limited period right before and after testing. */ -#define LOG_TO_ADMINS 64 /** Copy kinds of log events to admin chat. */ -#define LOG_TO_CLIENT 128 /** Copy all log events related to a player, to the players console. */ -#define LOG_IGNORE_CONSOLE 256 /** Don't log messages from the console (client 0). */ -#define LOG_MODULES_ENABLED 512 /** Enable module based log control. Module logs overrides previous flags, including debug flags. */ -#define LOG_MODULE_CORE 1024 /** The core of the plugin (startup, loading configs, etc.). Not really a module. */ -#define LOG_MODULE_COMMANDS 2048 /** commands.inc */ -#define LOG_MODULE_CLASSES 4096 /** Class system - playerclasses/ *.inc */ -#define LOG_MODULE_ZOMBIE 8192 /** zombie.inc */ -#define LOG_MODULE_SAYTRIGGERS 16384 /** sayhooks.inc */ -#define LOG_MODULE_AMBIENTSOUNDS 32768 /** ambientsounds.inc */ -#define LOG_MODULE_OVERLAYS 65536 /** overlays.inc */ -#define LOG_MODULE_TELEPORT 131072 /** teleport.inc */ -#define LOG_MODULE_WEAPONS 262144 /** Weapons module - weapons/ *.inc */ -#define LOG_MODULE_HITGROUPS 524288 /** hitgroups.inc */ -#define LOG_MODULE_ANTICAMP 1048576 /** anticamp.inc */ -#define LOG_MODULE_DAMAGE 2097152 /** damage.inc */ -#define LOG_MODULE_OFFSETS 4194304 /** offsets.inc */ -/* - * @endsection - */ - /** * Global variable set to true if market plugin is installed */