Minior bug fixes. Added module flags for log system. CVAR changes. Added support for random default class (per player).
This commit is contained in:
		| @@ -1,3 +1,15 @@ | ||||
| 2009.02.13 - 2.5.1.27 | ||||
|   * Fixed bug in formatted log messages when client is negative or 0 (console). | ||||
|   * Simplified log formatting style. | ||||
|   * Blocked non-root admins from changing log flags (except print to chat flags). | ||||
|   * Fixed unknown command error on zr_anticamp_list command. | ||||
|   * Simplified some messages by using ReplyToCommand. | ||||
|   * Added module based log flags. | ||||
|   * Made CVARs for alpha values (transparency). | ||||
|   * Changed CVAR zr_classes_default to select a random class on map load, if "random" is used. | ||||
|   * Removed CVAR zr_classes_save. This feature can be replaced later with client cookies from SourceMod 1.1.0. | ||||
|   * Fixed zmenu not closing when teleporting or spawning. | ||||
|  | ||||
| 2009.02.02 - 2.5.1.26 | ||||
|   * Fixed message typo. | ||||
|   * Added debug messages when applying models. | ||||
|   | ||||
| @@ -15,7 +15,7 @@ | ||||
| #undef REQUIRE_PLUGIN | ||||
| #include <market> | ||||
|  | ||||
| #define VERSION "2.5.1.26" | ||||
| #define VERSION "2.5.1.27" | ||||
|  | ||||
| #include "zr/zombiereloaded" | ||||
| #include "zr/global" | ||||
| @@ -114,16 +114,12 @@ public OnMapStart() | ||||
|     LoadModelData(); | ||||
|     LoadDownloadData(); | ||||
|      | ||||
|     /* Reset to default class if class selection saving is disabled. */ | ||||
|     if (!GetConVarBool(gCvars[CVAR_CLASSES_SAVE])) | ||||
|     { | ||||
|     new i; | ||||
|     new classindex = GetDefaultClassIndex(); | ||||
|     for (i = 1; i <= MAXPLAYERS; i++) | ||||
|     { | ||||
|         pClass[i] = classindex; | ||||
|     } | ||||
|     } | ||||
|      | ||||
|     Anticamp_Startup(); | ||||
| } | ||||
| @@ -186,17 +182,10 @@ public OnClientDisconnect(client) | ||||
|     PlayerLeft(client); | ||||
|     ZTeleResetClient(client); | ||||
|      | ||||
|     decl String:debug_msg[64]; | ||||
|      | ||||
|     for (new x = 0; x < MAXTIMERS; x++) | ||||
|     { | ||||
|         if (tHandles[client][x] != INVALID_HANDLE) | ||||
|         { | ||||
|             if (LogHasFlag(LOG_DEBUG_MAX_DETAIL)) | ||||
|             { | ||||
|                 Format(debug_msg, sizeof(debug_msg), "Killing timer %i with handle %x.", x, tHandles[client][x]); | ||||
|                 ZR_LogMessageFormatted(client, "OnClientDisconnect", "Killing timers", debug_msg, true); | ||||
|             } | ||||
|             KillTimer(tHandles[client][x]); | ||||
|             tHandles[client][x] = INVALID_HANDLE; | ||||
|         } | ||||
|   | ||||
| @@ -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 (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|         if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) | ||||
|         { | ||||
|             ZR_LogMessageFormatted(client, "Anticamp", "Remove volume", "Admin %L removed volume %d.", true, client, vol_index); | ||||
|             ZR_LogMessageFormatted(client, "anticamp", "remove volume", "\"%L\" removed volume %d.", true, client, vol_index); | ||||
|         } | ||||
|     } | ||||
|     else | ||||
| @@ -294,13 +294,17 @@ public Action:Command_AnticampList(client, argc) | ||||
|     decl String:line[192]; | ||||
|     buffer[0] = 0; | ||||
|      | ||||
| /* | ||||
| id  damage  interval    x_min   y_min   z_min   x_max   y_max   z_max | ||||
| 0   5       1           73      -535    28      -251    -732    76 | ||||
| */ | ||||
|     StrCat(buffer, sizeof(buffer), "id  damage  interval    x_min   y_min   z_min   x_max   y_max   z_max\n"); | ||||
|      | ||||
|     for (new vol_index = 0; vol_index < MAX_VOLUMES; vol_index++) | ||||
|     { | ||||
|         if (volumes[vol_index][volume_in_use]) | ||||
|         { | ||||
|             Format(line, sizeof(line), "%d %d %f %f %f %f %f %f %f\n", | ||||
|             Format(line, sizeof(line), "%-3d %-7d %-11.1f %-7.1f %-7.1f %-7.1f %-7.1f %-7.1f %-7.1f\n", | ||||
|                 vol_index, | ||||
|                 volumes[vol_index][volume_damage], | ||||
|                 volumes[vol_index][volume_interval], | ||||
| @@ -315,6 +319,7 @@ public Action:Command_AnticampList(client, argc) | ||||
|     } | ||||
|      | ||||
|     ReplyToCommand(client, buffer); | ||||
|     return Plugin_Handled; | ||||
| } | ||||
|  | ||||
| UpdatePlayerLocations() | ||||
| @@ -360,7 +365,7 @@ HurtPlayersInVolume(volume_index) | ||||
|                     SetGlobalTransTarget(client); | ||||
|                     Format(buffer, sizeof(buffer), "%T", "Unfair camper slayed", LANG_SERVER, client_name, volume_index); | ||||
|  | ||||
|                     if (LogHasFlag(LOG_CORE_EVENTS)) ZR_LogMessageFormatted(client, "Anticamp", "Kill player", "%s", true, buffer); | ||||
|                     if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_ANTICAMP)) ZR_LogMessageFormatted(client, "anticamp", "kill", "%s", true, buffer); | ||||
|                     if (anticamp_echo) | ||||
|                     { | ||||
|                         FormatTextString(buffer, sizeof(buffer)); | ||||
| @@ -378,17 +383,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 = LogHasFlag(LOG_DEBUG_MAX_DETAIL); | ||||
|     log = LogFlagCheck(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) ZR_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) ZR_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) ZR_LogMessageFormatted(client, "anticamp", "IsPlayerInVolume", "Client %d matches Z values.", true, client); | ||||
|                 return true; | ||||
|             } | ||||
|         } | ||||
|   | ||||
| @@ -144,6 +144,13 @@ GetDefaultClassIndex() | ||||
|     GetConVarString(gCvars[CVAR_CLASSES_DEFAULT], classname, sizeof(classname)); | ||||
|      | ||||
|     if (strlen(classname) > 0) | ||||
|     { | ||||
|         if (classCount > 1 && (strcmp(classname, "random", false) == 0)) | ||||
|         { | ||||
|             classindex = GetRandomInt(0, classCount - 1); | ||||
|             return classindex; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             classindex = GetClassIndex(classname); | ||||
|             if (classindex == -1) | ||||
| @@ -155,6 +162,7 @@ GetDefaultClassIndex() | ||||
|                 return classindex; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return 0; | ||||
| @@ -353,30 +361,33 @@ GetClassInfectHealth(classindex) | ||||
| GetClassAlphaSpawn(classindex) | ||||
| { | ||||
|     new bool:classes = GetConVarBool(gCvars[CVAR_CLASSES]); | ||||
|     if (classes) { | ||||
|     if (classes) | ||||
|     { | ||||
|         return arrayClasses[classindex][data_alpha_spawn]; | ||||
|     } | ||||
|  | ||||
|     return 255; | ||||
|     return GetConVarInt(gCvars[CVAR_ZOMBIE_ALPHA_SPAWN]); | ||||
| } | ||||
|  | ||||
| GetClassAlphaDamaged(classindex) | ||||
| { | ||||
|     new bool:classes = GetConVarBool(gCvars[CVAR_CLASSES]); | ||||
|     if (classes) { | ||||
|     if (classes) | ||||
|     { | ||||
|         return arrayClasses[classindex][data_alpha_damaged]; | ||||
|     } | ||||
|  | ||||
|     return 255; | ||||
|     return GetConVarInt(gCvars[CVAR_ZOMBIE_ALPHA_DAMAGED]); | ||||
| } | ||||
|  | ||||
| GetClassAlphaDamage(classindex) | ||||
| { | ||||
|     new bool:classes = GetConVarBool(gCvars[CVAR_CLASSES]); | ||||
|     if (classes) { | ||||
|     if (classes) | ||||
|     { | ||||
|         return arrayClasses[classindex][data_alpha_damage]; | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
|     return GetConVarInt(gCvars[CVAR_ZOMBIE_ALPHA_DAMAGE]); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -69,10 +69,10 @@ public Action:Command_Infect(client, argc) | ||||
|     for (new x = 0; x < tcount; x++) | ||||
|     { | ||||
|         Zombify(targets[x], 0); | ||||
|         if (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|         if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) | ||||
|         { | ||||
|             GetClientName(targets[x], target_name, sizeof(target_name)); | ||||
|             ZR_LogMessageFormatted(client, "Commands", "Manual infect", "Admin \"%s\" infected \"%s\".", true, client_name, target_name); | ||||
|             ZR_LogMessageFormatted(client, "admin commands", "infect", "\"%s\" infected \"%s\".", true, client_name, target_name); | ||||
|         } | ||||
|     } | ||||
|      | ||||
| @@ -118,10 +118,10 @@ public Action:Command_Respawn(client, argc) | ||||
|         team = GetClientTeam(targets[x]); | ||||
|         if (team == CS_TEAM_T || team == CS_TEAM_CT) | ||||
|         { | ||||
|             if (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|             if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) | ||||
|             { | ||||
|                 GetClientName(targets[x], target_name, sizeof(target_name)); | ||||
|                 ZR_LogMessageFormatted(targets[x], "Commands", "Manual spawn", "Admin \"%s\" spawned player \"%s\".", true, client_name, target_name); | ||||
|                 ZR_LogMessageFormatted(targets[x], "admin commands", "spawn", "\"%s\" spawned player \"%s\".", true, client_name, target_name); | ||||
|             } | ||||
|             RespawnPlayer(targets[x]); | ||||
|         } | ||||
| @@ -150,7 +150,7 @@ public Action:Command_Restrict(client, argc) | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         if (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|         if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) | ||||
|         { | ||||
|             if (client > 0) | ||||
|             { | ||||
| @@ -160,7 +160,7 @@ public Action:Command_Restrict(client, argc) | ||||
|             { | ||||
|                 client_name = "Console\0"; | ||||
|             } | ||||
|             ZR_LogMessageFormatted(client, "Commands", "Weapon restictions", "Admin \"%s\" restricted weapon \"%s\".", true, client_name, arg1); | ||||
|             ZR_LogMessageFormatted(client, "admin commands", "weapon restict", "\"%s\" restricted weapon \"%s\".", true, client_name, arg1); | ||||
|         } | ||||
|     } | ||||
|      | ||||
| @@ -187,7 +187,7 @@ public Action:Command_UnRestrict(client, argc) | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         if (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|         if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_COMMANDS)) | ||||
|         { | ||||
|             if (client > 0) | ||||
|             { | ||||
| @@ -197,7 +197,7 @@ public Action:Command_UnRestrict(client, argc) | ||||
|             { | ||||
|                 client_name = "Console\0"; | ||||
|             } | ||||
|             ZR_LogMessageFormatted(client, "Commands", "Weapon restictions", "Admin \"%s\" removed weapon restriction on \"%s\".", true, client_name, arg1); | ||||
|             ZR_LogMessageFormatted(client, "admin commands", "weapon restictions", "\"%s\" removed weapon restriction on \"%s\".", true, client_name, arg1); | ||||
|         } | ||||
|     } | ||||
|      | ||||
| @@ -208,17 +208,9 @@ public Action:Command_SetClassKnockback(client, argc) | ||||
| { | ||||
|     if (argc < 2) | ||||
|     { | ||||
|         if (client == 0) | ||||
|         { | ||||
|             PrintToServer("Sets the specified class knockback. Usage: zr_set_class_knockback <classname> <knockback>"); | ||||
|         ReplyToCommand(client, "Sets the specified class knockback. Usage: zr_set_class_knockback <classname> <knockback>"); | ||||
|         return Plugin_Handled; | ||||
|     } | ||||
|         else | ||||
|         { | ||||
|             PrintToConsole(client, "Sets the specified class knockback. Usage: zr_set_class_knockback <classname> <knockback>"); | ||||
|             return Plugin_Handled; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     decl String:classname[64]; | ||||
|     decl String:knockback_arg[8]; | ||||
| @@ -232,17 +224,9 @@ public Action:Command_SetClassKnockback(client, argc) | ||||
|  | ||||
|     if (classindex < 0) | ||||
|     { | ||||
|         if (client == 0) | ||||
|         { | ||||
|             PrintToServer("Could not find the class %s.", classname); | ||||
|         ReplyToCommand(client, "Could not find the class %s.", classname); | ||||
|         return Plugin_Handled; | ||||
|     } | ||||
|         else | ||||
|         { | ||||
|             PrintToConsole(client, "Could not find the class %s.", classname); | ||||
|             return Plugin_Handled; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     arrayClasses[classindex][data_knockback] = knockback; | ||||
|     return Plugin_Handled; | ||||
| @@ -252,17 +236,9 @@ public Action:Command_GetClassKnockback(client, argc) | ||||
| { | ||||
|     if (argc < 1) | ||||
|     { | ||||
|         if (client == 0) | ||||
|         { | ||||
|             PrintToServer("Gets the specified class knockback. Usage: zr_get_class_knockback <classname>"); | ||||
|         ReplyToCommand(client, "Gets the specified class knockback. Usage: zr_get_class_knockback <classname>"); | ||||
|         return Plugin_Handled; | ||||
|     } | ||||
|         else | ||||
|         { | ||||
|             PrintToConsole(client, "Gets the specified class knockback. Usage: zr_get_class_knockback <classname>"); | ||||
|             return Plugin_Handled; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     decl String:classname[64]; | ||||
|     new classindex; | ||||
| @@ -273,28 +249,12 @@ public Action:Command_GetClassKnockback(client, argc) | ||||
|  | ||||
|     if (classindex < 0) | ||||
|     { | ||||
|         if (client == 0) | ||||
|         { | ||||
|             PrintToServer("Could not find the class %s.", classname); | ||||
|         ReplyToCommand(client, "Could not find the class %s.", classname); | ||||
|         return Plugin_Handled; | ||||
|     } | ||||
|         else | ||||
|         { | ||||
|             PrintToConsole(client, "Could not find the class %s.", classname); | ||||
|             return Plugin_Handled; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     knockback = arrayClasses[classindex][data_knockback]; | ||||
|  | ||||
|     if (client == 0) | ||||
|     { | ||||
|         PrintToServer("Current knockback for %s: %f", classname, knockback); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|        PrintToConsole(client, "Current knockback for %s: %f", classname, knockback); | ||||
|     } | ||||
|     ReplyToCommand(client, "Current knockback for %s: %f", classname, knockback); | ||||
|      | ||||
|     return Plugin_Handled; | ||||
| } | ||||
| @@ -307,8 +267,7 @@ public Action:Command_AdminMenu(client, argc) | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         PrintToServer("This menu cannot be used in the console. Client: %d", client); | ||||
|         if (client > 0) PrintToConsole(client, "You cannot use this menu. Client: %d", client); | ||||
|         ReplyToCommand(client, "This menu cannot be used from the console."); | ||||
|     } | ||||
|     return Plugin_Handled; | ||||
| } | ||||
| @@ -321,8 +280,7 @@ public Action:Command_KnockbackMMenu(client, argc) | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         PrintToServer("This menu cannot be used in the console. Client: %d", client); | ||||
|         if (client > 0) PrintToConsole(client, "You cannot use this menu. Client: %d", client); | ||||
|         ReplyToCommand(client, "This menu cannot be used from the console."); | ||||
|     } | ||||
|     return Plugin_Handled; | ||||
| } | ||||
| @@ -335,8 +293,7 @@ public Action:Command_TeleMenu(client, argc) | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         PrintToServer("This menu cannot be used in the console. Client: %d", client); | ||||
|         if (client > 0) PrintToConsole(client, "You cannot use this menu. Client: %d", client); | ||||
|         ReplyToCommand(client, "This menu cannot be used from the console."); | ||||
|     } | ||||
|     return Plugin_Handled; | ||||
| } | ||||
| @@ -344,8 +301,9 @@ public Action:Command_TeleMenu(client, argc) | ||||
| public Action:Command_LogFlags(client, argc) | ||||
| { | ||||
|     decl String:message[2048]; | ||||
|     message[0] = 0; | ||||
|      | ||||
|     StrCat(message, sizeof(message), "LOG_CORE_EVENTS        (1) - Log core events like executing files, restricting weapons, etc.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_CORE_EVENTS            (1)      - Log core events like executing files, error messages, etc.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_GAME_EVENTS            (2)      - Log game events like admin commands, suicide prevention and anticamp kills.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_PLAYER_COMMANDS        (4)      - Log commands made by the player.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_DEBUG                  (8)      - Enable debug messages (if they exist).\n"); | ||||
| @@ -353,6 +311,24 @@ public Action:Command_LogFlags(client, argc) | ||||
|     StrCat(message, sizeof(message), "LOG_DEBUG_MAX_DETAIL       (32)     - Low level detailed debug messages. Causes spam! Only enable right before and after testing.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_LOG_TO_ADMINS          (64)     - Display log messages to admin chat.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_LOG_TO_CLIENT          (128)    - Display log messages to the client that executed the event/command.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_IGNORE_CONSOLE         (256)    - Don't log messages from client 0 (console).\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULES_ENABLED        (512)    - Enable detailed log control for developers. Module logs overrides previous flags.\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_ZOMBIE          (1024)   - zombie.inc"); | ||||
|  | ||||
|     ReplyToCommand(client, message); | ||||
|     message[0] = 0; | ||||
|  | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_AMBIENCE        (2048)   - ambience.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_OVERLAYS        (4096)   - overlays.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_SAYTRIGGERS     (8192)   - sayhooks.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_TELEPORT        (16384)  - teleport.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_CLASSES         (32768)  - classes.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_WEAPONRESTICT   (65536)  - weaponrestrict.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_COMMANDS        (131072) - commands.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_ANTICAMP        (262144) - anticamp.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_DAMAGECONTROL   (524288) - damagecontrol.inc\n"); | ||||
|     StrCat(message, sizeof(message), "LOG_MODULE_OFFSETS         (524288) - offsets.inc"); | ||||
|      | ||||
|     ReplyToCommand(client, message); | ||||
|     return Plugin_Handled; | ||||
| } | ||||
| @@ -37,6 +37,9 @@ enum ZRSettings | ||||
|     Handle:CVAR_ZOMBIE_KILL_BONUS, | ||||
|     Handle:CVAR_ZOMBIE_INFECT_HEALTH, | ||||
|     Handle:CVAR_ZOMBIE_ZVISION, | ||||
|     Handle:CVAR_ZOMBIE_ALPHA_SPAWN, | ||||
|     Handle:CVAR_ZOMBIE_ALPHA_DAMAGED, | ||||
|     Handle:CVAR_ZOMBIE_ALPHA_DAMAGE, | ||||
|     Handle:CVAR_ZVISION_REDISPLAY, | ||||
|     Handle:CVAR_ZVISION_ALLOW_DISABLE, | ||||
|     Handle:CVAR_DARK, | ||||
| @@ -102,8 +105,7 @@ CreateCvars() | ||||
|     gCvars[CVAR_CLASSES]                   =    CreateConVar("zr_classes", "1", "Enable zombie classes"); | ||||
|     gCvars[CVAR_CLASSES_SPAWN]             =    CreateConVar("zr_classes_spawn", "0", "Classmenu is re-displayed every spawn (0: Disable)"); | ||||
|     gCvars[CVAR_CLASSES_RANDOM]            =    CreateConVar("zr_classes_random", "0", "A random class is assigned to each player every round (0: Disable)"); | ||||
|     gCvars[CVAR_CLASSES_DEFAULT]           =    CreateConVar("zr_classes_default", "classic", "Default class selected for all players. Usage zr_classes_default <class name>"); | ||||
|     gCvars[CVAR_CLASSES_SAVE]              =    CreateConVar("zr_classes_save", "0", "Remember class selection when changing maps."); | ||||
|     gCvars[CVAR_CLASSES_DEFAULT]           =    CreateConVar("zr_classes_default", "classic", "Default class selected for all players when they connect, or \"random\" to select a random class. Usage zr_classes_default <class name|\"random\">"); | ||||
|     gCvars[CVAR_ZOMBIE_HEALTH]             =    CreateConVar("zr_zombie_health", "5000", "The default health of a zombie"); | ||||
|     gCvars[CVAR_ZOMBIE_SPEED]              =    CreateConVar("zr_zombie_speed", "350", "How fast zombies travel (300: Default speed,  600: Double speed)"); | ||||
|     gCvars[CVAR_ZOMBIE_JUMP_DISTANCE]      =    CreateConVar("zr_zombie_jump_distance", "0.1", "How far the zombie jumps,  (0: Regular jump distance)"); | ||||
| @@ -120,6 +122,9 @@ CreateCvars() | ||||
|     gCvars[CVAR_ZOMBIE_KILL_BONUS]         =    CreateConVar("zr_zombie_kill_bonus", "2", "How many additional kills are rewarded to the killer of the zombie"); | ||||
|     gCvars[CVAR_ZOMBIE_INFECT_HEALTH]      =    CreateConVar("zr_zombie_infect_health", "100", "How much health a zombie gains when infecting a human (0: Disable)"); | ||||
|     gCvars[CVAR_ZOMBIE_ZVISION]            =    CreateConVar("zr_zombie_zvision", "overlays/zr/zvision", "Overlay to be shown on all zombies' screen on infection (Leave empty to disable)"); | ||||
|     gCvars[CVAR_ZOMBIE_ALPHA_SPAWN]        =    CreateConVar("zr_zombie_alpha_spawn", "255", "Initial transparency (0: Invisible. 255: Fully visible)"); | ||||
|     gCvars[CVAR_ZOMBIE_ALPHA_DAMAGED]      =    CreateConVar("zr_zombie_alpha_damaged", "255", "Transparency when damaged (0: Invisible. 255: Fully visible)"); | ||||
|     gCvars[CVAR_ZOMBIE_ALPHA_DAMAGE]       =    CreateConVar("zr_zombie_alpha_damage", "0", "How much damage to do before changing transparency."); | ||||
|     gCvars[CVAR_ZVISION_REDISPLAY]         =    CreateConVar("zr_zvision_redisplay", "0.2", "Frequency, in seconds, to display zvision on the client's screen (Never go below 0.1, 0.2 seems safe)"); | ||||
|     gCvars[CVAR_ZVISION_ALLOW_DISABLE]     =    CreateConVar("zr_zvision_allow_disable", "1", "Allow users to disable ZVision with their nightvision key (0: Disable)"); | ||||
|     gCvars[CVAR_DARK]                      =    CreateConVar("zr_dark", "0", "Default value for darkening maps,  most dislike this feature (0: Disable)"); | ||||
| @@ -233,3 +238,24 @@ LogHasFlag(flag) | ||||
|         return 0; | ||||
|     } | ||||
| } | ||||
|  | ||||
| // Check if a log message should be written depending on log flags. Also | ||||
| // takes care of module log overrides. | ||||
| LogFlagCheck(flag, module = 0) | ||||
| { | ||||
|     if (module && (flag & LOG_MODULES_ENABLED)) | ||||
|     { | ||||
|         if (flag & module) | ||||
|         { | ||||
|             return 1; | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             return 0; | ||||
|         } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|         return LogHasFlag(flag); | ||||
|     } | ||||
| } | ||||
| @@ -182,9 +182,9 @@ public Action:Attempt_Suicide(client, argc) | ||||
|     decl String:buffer[192]; | ||||
|  | ||||
|     GetClientName(client, clientname, sizeof(clientname)); | ||||
|     if (LogHasFlag(LOG_GAME_EVENTS)) | ||||
|     if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_DAMAGECONTROL)) | ||||
|     { | ||||
|         ZR_LogMessageFormatted(client, "Damage control", "Suicide", "Player \"%s\" attempted suicide.", true, clientname); | ||||
|         ZR_LogMessageFormatted(client, "damage control", "suicide", "Player \"%s\" attempted suicide.", true, clientname); | ||||
|     } | ||||
|     if (GetConVarBool(gCvars[CVAR_SUICIDE_ECHO])) | ||||
|     { | ||||
|   | ||||
| @@ -243,7 +243,6 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|     } | ||||
|      | ||||
|     new bool:randomclass = GetConVarBool(gCvars[CVAR_CLASSES_RANDOM]); | ||||
|      | ||||
|     new bool:classes = GetConVarBool(gCvars[CVAR_CLASSES]); | ||||
|     if (classes) | ||||
|     { | ||||
|   | ||||
| @@ -73,12 +73,10 @@ public MainMenuHandle(Handle:menu_main, MenuAction:action, client, slot) | ||||
|             case 3: | ||||
|             { | ||||
|                 ZSpawn(client); | ||||
|                 MainMenu(client); | ||||
|             } | ||||
|             case 4: | ||||
|             { | ||||
|                 ZTeleClientCheck(client); | ||||
|                 MainMenu(client); | ||||
|                 if (!ZTeleClientCheck(client)) MainMenu(client); | ||||
|             } | ||||
|             case 5: | ||||
|             { | ||||
|   | ||||
| @@ -198,12 +198,13 @@ TerminateRound(Float:delay, reason) | ||||
|  | ||||
| SetPlayerModel(client, const String:model[]) | ||||
| { | ||||
|     if (LogHasFlag(LOG_DEBUG)) ZR_LogMessageFormatted(-1, "Offsets", "Models", "Precaching model \"%s\".", true, model); | ||||
|     new log_debug = LogFlagCheck(LOG_DEBUG_DETAIL, LOG_MODULE_OFFSETS); | ||||
|     if (log_debug) ZR_LogMessageFormatted(-1, "offsets", "models", "Precaching model (\"%s\").", true, model); | ||||
|     PrecacheModel(model); | ||||
|     if (LogHasFlag(LOG_DEBUG)) ZR_LogMessageFormatted(-1, "Offsets", "Models", "Model cached (\"%s\").", true, model); | ||||
|     if (LogHasFlag(LOG_DEBUG)) ZR_LogMessageFormatted(-1, "Offsets", "Models", "Applying model \"%s\" on client %d.", true, model, client); | ||||
|     if (log_debug) ZR_LogMessageFormatted(-1, "offsets", "models", "Model cached.", true, model); | ||||
|     if (log_debug) ZR_LogMessageFormatted(-1, "offsets", "models", "Applying model (\"%s\") on client %d.", true, model, client); | ||||
|     SetEntityModel(client, model); | ||||
|     if (LogHasFlag(LOG_DEBUG)) ZR_LogMessageFormatted(-1, "Offsets", "Models", "Model applied (\"%s\") on client %d.", true, model, client); | ||||
|     if (log_debug) ZR_LogMessageFormatted(-1, "offsets", "models", "Model applied on client %d.", true, model, client); | ||||
| } | ||||
|  | ||||
| SetPlayerAlpha(client, alpha) | ||||
|   | ||||
| @@ -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 (LogHasFlag(LOG_GAME_EVENTS)) ZR_LogMessageFormatted(client, "Teleport", "Manual teleport", "Admin \"%s\" teleported \"%s\" to spawn.", true, client_name, 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); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -177,7 +177,7 @@ public Action:Command_Teleport(client, argc) | ||||
|         { | ||||
|             AbortTeleport(client); | ||||
|             TeleportClient(client, true, true); | ||||
|             if (LogHasFlag(LOG_GAME_EVENTS)) ZR_LogMessageFormatted(client, "Teleport", "Manual teleport", "Admin \"%s\" self-teleported to spawn.", true, client_name); | ||||
|             if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) ZR_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 (LogHasFlag(LOG_GAME_EVENTS)) ZR_LogMessageFormatted(client, "Teleport", "Custom teleport", "Admin \"%s\" teleported \"%s\".", true, client_name, target_name); | ||||
|                 if (LogFlagCheck(LOG_GAME_EVENTS, LOG_MODULE_TELEPORT)) ZR_LogMessageFormatted(client, "teleport", "custom teleport", "\"%s\" teleported \"%s\".", true, client_name, target_name); | ||||
|             } | ||||
|             else | ||||
|             { | ||||
| @@ -333,21 +333,21 @@ public Action:Command_TeleportAbort(client, argc) | ||||
|     return Plugin_Handled; | ||||
| } | ||||
|  | ||||
| ZTeleClientCheck(client) | ||||
| bool:ZTeleClientCheck(client) | ||||
| { | ||||
|     // Check if the teleporter is disabled. | ||||
|     new bool:tele = GetConVarBool(gCvars[CVAR_ZTELE]); | ||||
|     if (!tele) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Feature is disabled"); | ||||
|         return; | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Check if the teleporter is online. | ||||
|     if (!ztele_online) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "!ztele offline"); | ||||
|         return; | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Check if the player is alive and is not a spectactor. | ||||
| @@ -355,21 +355,21 @@ ZTeleClientCheck(client) | ||||
|     if (!IsPlayerAlive(client) || (team != CS_TEAM_T && team != CS_TEAM_CT)) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Must be alive"); | ||||
|         return; | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Check if there's already a teleport in process. | ||||
|     if (ztele_countdown_timer[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "!ztele in progress"); | ||||
|         return; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     // Check if the cooldown isn't done yet. | ||||
|     if (ztele_cooldown_timer[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "!ztele cooldown"); | ||||
|         return; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     // Check limits. | ||||
| @@ -389,13 +389,13 @@ ZTeleClientCheck(client) | ||||
|         if (!tele_humans && zombieSpawned) | ||||
|         { | ||||
|             ZR_PrintToChat(client, "!ztele humans restricted"); | ||||
|             return; | ||||
|             return false; | ||||
|         } | ||||
|          | ||||
|         if (human_limit > 0 && (ztele_count[client] >= human_limit)) | ||||
|         { | ||||
|             ZR_PrintToChat(client, "!ztele limit reached"); | ||||
|             return;          | ||||
|             return false;     | ||||
|         } | ||||
|     } | ||||
|     else | ||||
| @@ -414,17 +414,18 @@ ZTeleClientCheck(client) | ||||
|         if (!tele_zombies) | ||||
|         { | ||||
|             ZR_PrintToChat(client, "!ztele zombies restricted"); | ||||
|             return; | ||||
|             return false; | ||||
|         } | ||||
|          | ||||
|         if (zombie_limit > 0 && (ztele_count[client] >= zombie_limit)) | ||||
|         { | ||||
|             ZR_PrintToChat(client, "!ztele limit reached"); | ||||
|             return;          | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     TeleportClient(client); | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| /* | ||||
|   | ||||
| @@ -110,10 +110,15 @@ stock ZR_LogMessageFormatted(client, const String:module[], const String:block[] | ||||
|     decl String:buffer[2048]; | ||||
|     decl String:text[2048]; | ||||
|  | ||||
|     if (client == 0 && LogHasFlag(LOG_IGNORE_CONSOLE)) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     if (full) | ||||
|     { | ||||
|         VFormat(buffer, sizeof(buffer), message, 6); | ||||
|         Format(text, sizeof(text), "Log -- Module: %s, Function/Block: %s -- %s", module, block, buffer); | ||||
|         Format(text, sizeof(text), "Log (%s : %s) -- %s", module, block, buffer); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
| @@ -125,7 +130,7 @@ stock ZR_LogMessageFormatted(client, const String:module[], const String:block[] | ||||
|     { | ||||
|         ZR_PrintToAdminChat(text); | ||||
|     } | ||||
|     if (LogHasFlag(LOG_TO_CLIENT) && IsClientConnected(client) && IsClientInGame(client)) | ||||
|     if (client > 0 && LogHasFlag(LOG_TO_CLIENT) && IsClientConnected(client) && IsClientInGame(client)) | ||||
|     { | ||||
|         PrintToConsole(client, "[ZR] %s", text); | ||||
|     } | ||||
|   | ||||
| @@ -33,14 +33,27 @@ enum ZTeam | ||||
| #define DXLEVEL_MIN 90 | ||||
| #define DEFAULT_FOV 90 | ||||
|  | ||||
| #define LOG_CORE_EVENTS 1 | ||||
| #define LOG_GAME_EVENTS 2 | ||||
| #define LOG_PLAYER_COMMANDS 4 | ||||
| #define LOG_DEBUG 8 | ||||
| #define LOG_DEBUG_DETAIL 16 | ||||
| #define LOG_DEBUG_MAX_DETAIL 32 | ||||
| #define LOG_TO_ADMINS 64 | ||||
| #define LOG_TO_CLIENT 128 | ||||
| #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            // Write all kinds of log messages to admin chat. | ||||
| #define LOG_TO_CLIENT              128           // Write all log messages related to a player, to the players console. | ||||
| #define LOG_IGNORE_CONSOLE         256           // Don't log messages from client 0 (console). | ||||
| #define LOG_MODULES_ENABLED        512           // Enable detailed log control for developers. Module logs overrides previous flags. | ||||
| #define LOG_MODULE_ZOMBIE          1024          // zombie.inc | ||||
| #define LOG_MODULE_AMBIENCE        2048          // ambience.inc | ||||
| #define LOG_MODULE_OVERLAYS        4096          // overlays.inc | ||||
| #define LOG_MODULE_SAYTRIGGERS     8192          // sayhooks.inc | ||||
| #define LOG_MODULE_TELEPORT        16384         // teleport.inc | ||||
| #define LOG_MODULE_CLASSES         32768         // classes.inc | ||||
| #define LOG_MODULE_WEAPONRESTICT   65536         // weaponrestrict.inc | ||||
| #define LOG_MODULE_COMMANDS        131072        // commands.inc | ||||
| #define LOG_MODULE_ANTICAMP        262144        // anticamp.inc | ||||
| #define LOG_MODULE_DAMAGECONTROL   524288        // damagecontrol.inc | ||||
| #define LOG_MODULE_OFFSETS         1048576       // offsets.inc | ||||
|  | ||||
| new bool:market; | ||||
| new dxLevel[MAXPLAYERS+1]; | ||||
|   | ||||
| @@ -433,6 +433,8 @@ public ZRTeleHandle(Handle:zr_tele_menu , MenuAction:action, client, slot) | ||||
| ZRLogFlagsMenu(client) | ||||
| { | ||||
|     new Handle:zr_log_flags_menu = CreateMenu(ZRLogFlagsMenuHandle); | ||||
|     new client_flags = GetUserFlagBits(client); | ||||
|     new item_disabled = (client_flags & ADMFLAG_ROOT) ? ITEMDRAW_DEFAULT : ITEMDRAW_DISABLED; | ||||
|  | ||||
|     decl String:z_log_core[64]; | ||||
|     decl String:z_log_game[64]; | ||||
| @@ -442,6 +444,19 @@ ZRLogFlagsMenu(client) | ||||
|     decl String:z_log_debug_max[64]; | ||||
|     decl String:z_log_admins[64]; | ||||
|     decl String:z_log_client[64]; | ||||
|     decl String:z_log_ignore_console[64]; | ||||
|     decl String:z_log_modules_enabled[64]; | ||||
|     decl String:z_log_module_zombie[64]; | ||||
|     decl String:z_log_module_ambience[64]; | ||||
|     decl String:z_log_module_overlays[64]; | ||||
|     decl String:z_log_module_saytriggers[64]; | ||||
|     decl String:z_log_module_teleport[64]; | ||||
|     decl String:z_log_module_classes[64]; | ||||
|     decl String:z_log_module_weaponrestrict[64]; | ||||
|     decl String:z_log_module_commands[64]; | ||||
|     decl String:z_log_module_anticamp[64]; | ||||
|     decl String:z_log_module_damagecontrol[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)); | ||||
| @@ -451,16 +466,42 @@ ZRLogFlagsMenu(client) | ||||
|     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 from messages 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_ambience, sizeof(z_log_module_ambience), "Ambience (%d)", LogHasFlag(LOG_MODULE_AMBIENCE)); | ||||
|     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_weaponrestrict, sizeof(z_log_module_weaponrestrict), "Weapon restrictions (%d)", LogHasFlag(LOG_MODULE_WEAPONRESTICT)); | ||||
|     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_damagecontrol, sizeof(z_log_module_damagecontrol), "Damage control (suicides) (%d)", LogHasFlag(LOG_MODULE_DAMAGECONTROL)); | ||||
|     Format(z_log_module_offsets, sizeof(z_log_module_offsets), "Offsets (properties) (%d)", LogHasFlag(LOG_MODULE_OFFSETS)); | ||||
|      | ||||
|     SetMenuTitle(zr_log_flags_menu, "Toggle logging flags"); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_core, z_log_core); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_game, z_log_game); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_player, z_log_player); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug, z_log_debug); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug_detail, z_log_debug_detail); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug_max, z_log_debug_max); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_core, z_log_core, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_game, z_log_game, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_player, z_log_player, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug, z_log_debug, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug_detail, z_log_debug_detail, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_debug_max, z_log_debug_max, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_admins, z_log_admins); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_client, z_log_client); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_ignore_console, z_log_ignore_console, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_modules_enabled, z_log_modules_enabled, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_zombie, z_log_module_zombie, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_ambience, z_log_module_ambience, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_overlays, z_log_module_overlays, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_saytriggers, z_log_module_saytriggers, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_teleport, z_log_module_teleport, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_classes, z_log_module_classes, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_weaponrestrict, z_log_module_weaponrestrict, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_commands, z_log_module_commands, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_anticamp, z_log_module_anticamp, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_damagecontrol, z_log_module_damagecontrol, item_disabled); | ||||
|     AddMenuItem(zr_log_flags_menu, z_log_module_offsets, z_log_module_offsets, item_disabled); | ||||
|      | ||||
|     SetMenuExitBackButton(zr_log_flags_menu, true); | ||||
|     DisplayMenu(zr_log_flags_menu, client, MENU_TIME_FOREVER); | ||||
| @@ -512,6 +553,71 @@ public ZRLogFlagsMenuHandle(Handle:zr_log_flags_menu , MenuAction:action, client | ||||
|                 ToggleLogFlag(LOG_TO_CLIENT); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 8: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_IGNORE_CONSOLE); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 9: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULES_ENABLED); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 10: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_ZOMBIE); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 11: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_AMBIENCE); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 12: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_OVERLAYS); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 13: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_SAYTRIGGERS); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 14: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_TELEPORT); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 15: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_CLASSES); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 16: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_WEAPONRESTICT); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 17: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_COMMANDS); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 18: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_ANTICAMP); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 19: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_DAMAGECONTROL); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|             case 20: | ||||
|             { | ||||
|                 ToggleLogFlag(LOG_MODULE_OFFSETS); | ||||
|                 ZRLogFlagsMenu(client); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     if (action == MenuAction_Cancel) | ||||
|   | ||||
							
								
								
									
										7
									
								
								todo.txt
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								todo.txt
									
									
									
									
									
								
							| @@ -2,10 +2,15 @@ Section content is listed in order of importance. Some of these can be ideas too | ||||
|  | ||||
| ---- CRITICAL/IMPORTANT ---- | ||||
|  | ||||
| * Logging of infections by admins. For monitoring. | ||||
|  | ||||
| ---- NORMAL/GAMEPLAY ---- | ||||
|  | ||||
| * Fix ambience not always playing: separate timers for each player. | ||||
|  | ||||
| * Make admin commands to get or set classes: | ||||
|   zr_classes_set <classname> <target> | ||||
|   zr_classes_get <#userid|name> | ||||
|  | ||||
| * Make it possible to disable certain classes on certain maps. Only specify the | ||||
|   class name to read the value: | ||||
|   zr_class_enabled <classname>[ <0/1>] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user