Removed antistick force cvar, removed more tHandle defines, moved respawn to its own module, moved market menu send function to markethandler.inc, fixed some run-on timers in zhp and spawn protect
This commit is contained in:
		| @@ -25,8 +25,13 @@ | ||||
| #include "zr/ambience" | ||||
| #include "zr/models" | ||||
| #include "zr/overlays" | ||||
|  | ||||
| // Class system | ||||
| #include "zr/playerclasses/playerclasses" | ||||
|  | ||||
| // Antistick | ||||
| #include "zr/antistick" | ||||
|  | ||||
| #include "zr/anticamp" | ||||
| #include "zr/teleport" | ||||
| #include "zr/zombie" | ||||
| @@ -45,6 +50,9 @@ | ||||
| // Spawn protect | ||||
| #include "zr/spawnprotect" | ||||
|  | ||||
| // Respawn | ||||
| #include "zr/respawn" | ||||
|  | ||||
| // ZHP | ||||
| #include "zr/zhp" | ||||
|  | ||||
| @@ -173,12 +181,11 @@ public OnClientPutInServer(client) | ||||
|     gBlockMotherInfect[client] = false; | ||||
|     gKilledByWorld[client] = false;  | ||||
|      | ||||
|     bZVision[client] = !IsFakeClient(client); | ||||
|      | ||||
|     // Forward event to modules. | ||||
|     ClassClientInit(client); | ||||
|     WeaponsClientInit(client); | ||||
|     SpawnProtectClientInit(client); | ||||
|     RespawnClientInit(client); | ||||
|     ZHPClientInit(client); | ||||
|      | ||||
|     if (!IsFakeClient(client)) AmbienceStart(client); | ||||
|   | ||||
| @@ -62,8 +62,7 @@ AntiStickIsStuck(client) | ||||
|     GetClientAbsOrigin(client, clientloc); | ||||
|      | ||||
|     // x = client index. | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         // Validate player is in-game, alive, and isn't the player being checked. ('client') | ||||
|         if (!IsClientInGame(x) || !IsPlayerAlive(x) || x == client) | ||||
| @@ -104,8 +103,7 @@ AntiStickIsStuck(client) | ||||
| public Action:AntiStickTimer(Handle:timer) | ||||
| { | ||||
|     // x = client index | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         // Validate player is in-game and alive. | ||||
|         if (!IsClientInGame(x) || !IsPlayerAlive(x)) | ||||
|   | ||||
| @@ -128,7 +128,7 @@ public Action:Command_Respawn(client, argc) | ||||
|                 ZR_LogMessageFormatted(targets[x], "admin commands", "spawn", "\"%s\" spawned player \"%s\".", true, client_name, target_name); | ||||
|             } | ||||
|              | ||||
|             RespawnPlayer(targets[x]); | ||||
|             RespawnSpawnClient(targets[x]); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|   | ||||
| @@ -50,7 +50,7 @@ enum ZRSettings | ||||
|     Handle:CVAR_MOTHER_ZOMBIE_RATIO, | ||||
|     Handle:CVAR_MOTHER_ZOMBIE_RESPAWN, | ||||
|     Handle:CVAR_RESPAWN, | ||||
|     Handle:CVAR_RESPAWN_TEAM, | ||||
|     Handle:CVAR_RESPAWN_ZOMBIE, | ||||
|     Handle:CVAR_RESPAWN_DELAY, | ||||
|     Handle:CVAR_SUICIDE_ZOMBIE, | ||||
|     Handle:CVAR_SUICIDE_HUMAN, | ||||
| @@ -88,7 +88,6 @@ enum ZRSettings | ||||
|     Handle:CVAR_INFECT_SHAKE_AMP, | ||||
|     Handle:CVAR_INFECT_SHAKE_FREQUENCY, | ||||
|     Handle:CVAR_INFECT_SHAKE_DURATION, | ||||
|     Handle:CVAR_INFECT_ANTISTICK_FORCE, | ||||
|     Handle:CVAR_ANTICAMP, | ||||
|     Handle:CVAR_ANTICAMP_UPDATE_INTERVAL, | ||||
|     Handle:CVAR_ANTICAMP_ECHO | ||||
| @@ -140,7 +139,7 @@ CreateCvars() | ||||
|     gCvars[CVAR_MOTHER_ZOMBIE_RATIO]       =    CreateConVar("zr_mother_zombie_ratio", "5", "For every 'x' number of humans,  there will be 1 zombie (0: Always only 1 mother zombie)"); | ||||
|     gCvars[CVAR_MOTHER_ZOMBIE_RESPAWN]     =    CreateConVar("zr_mother_zombie_respawn", "0", "First zombie(s) will be teleported back to spawn when infected (0: Disable)"); | ||||
|     gCvars[CVAR_RESPAWN]                   =    CreateConVar("zr_respawn", "0", "When player is killed,  player will respawn"); | ||||
|     gCvars[CVAR_RESPAWN_TEAM]              =    CreateConVar("zr_respawn_team", "zombie", "Which team to respawn player as (Choices: zombie, human)"); | ||||
|     gCvars[CVAR_RESPAWN_ZOMBIE]            =    CreateConVar("zr_respawn_zombie", "1", "Respawn player as zombie (0: Respawn as human)"); | ||||
|     gCvars[CVAR_RESPAWN_DELAY]             =    CreateConVar("zr_respawn_delay", "1", "How long to wait after death to respawn,  in seconds"); | ||||
|     gCvars[CVAR_SUICIDE_ZOMBIE]            =    CreateConVar("zr_suicide_zombie", "1", "Stops zombies from suiciding"); | ||||
|     gCvars[CVAR_SUICIDE_HUMAN]             =    CreateConVar("zr_suicide_human", "1", "Stops humans from suiciding"); | ||||
| @@ -178,7 +177,6 @@ CreateCvars() | ||||
|     gCvars[CVAR_INFECT_SHAKE_AMP]          =    CreateConVar("zr_infect_shake_amp", "15.0", "Amplitude of the shake, when zr_infect_shake is 1"); | ||||
|     gCvars[CVAR_INFECT_SHAKE_FREQUENCY]    =    CreateConVar("zr_infect_shake_frequency", "1.0", "Frequency of the shake, when zr_infect_shake is 1"); | ||||
|     gCvars[CVAR_INFECT_SHAKE_DURATION]     =    CreateConVar("zr_infect_shake_duration", "5.0", "Duration of the shake, when zr_infect_shake is 1"); | ||||
|     gCvars[CVAR_INFECT_ANTISTICK_FORCE]    =    CreateConVar("zr_infect_antistick_force", "-160.0", "Force to push away players from eachother on infection. Negative values push away, positive values pull. (0: Disable)"); | ||||
|     gCvars[CVAR_ANTICAMP]                  =    CreateConVar("zr_anticamp", "1", "Enables or disables hurt volumes for preventing unfair camping. (0: Disable)"); | ||||
|     gCvars[CVAR_ANTICAMP_UPDATE_INTERVAL]  =    CreateConVar("zr_anticamp_update_interval", "1", "How often to update player locations (in seconds)."); | ||||
|     gCvars[CVAR_ANTICAMP_ECHO]             =    CreateConVar("zr_anticamp_echo", "1", "Log kills done by anticamp to admin chat."); | ||||
|   | ||||
| @@ -94,8 +94,7 @@ public Action:RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|  | ||||
|     zombieSpawned = false; | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x<= maxplayers; x++) | ||||
|     for (new x = 1; x<= MaxClients; x++) | ||||
|     { | ||||
|         if (!IsClientInGame(x)) | ||||
|         { | ||||
| @@ -150,11 +149,6 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|      | ||||
|     for (new x = 0; x < MAXTIMERS; x++) | ||||
|     { | ||||
|         if (x == TRESPAWN) | ||||
|         { | ||||
|             continue; | ||||
|         } | ||||
|          | ||||
|         if (tHandles[index][x] != INVALID_HANDLE) | ||||
|         { | ||||
|             KillTimer(tHandles[index][x]); | ||||
| @@ -169,6 +163,11 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|     SetPlayerFOV(index, 90); | ||||
|     ClientCommand(index, "r_screenoverlay \"\""); | ||||
|      | ||||
|     // Forward event to modules. | ||||
|     SpawnProtectOnClientSpawn(index); | ||||
|     RespawnOnClientSpawn(index); | ||||
|     ZHPOnClientSpawn(index); | ||||
|      | ||||
|     // Stop here if client isn't on a team. | ||||
|     new team = GetClientTeam(index); | ||||
|     if (team != CS_TEAM_T && team != CS_TEAM_CT) | ||||
| @@ -202,7 +201,6 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|      | ||||
|     // Forward event to modules. | ||||
|     ClassOnClientSpawn(index); | ||||
|     SpawnProtectPlayerSpawn(index); | ||||
|     ZTeleClientSpawned(index); | ||||
|      | ||||
|     ZR_PrintToChat(index, "!zmenu reminder"); | ||||
| @@ -227,7 +225,7 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|         if (IsPlayerHuman(index) && IsPlayerZombie(attacker)) | ||||
|         { | ||||
|             // Check if spawn protection is disabled and the weapon is a knife. | ||||
|             if (!pProtect[index] && StrEqual(weapon, "knife")) | ||||
|             if (!pSpawnProtect[index] && StrEqual(weapon, "knife")) | ||||
|             { | ||||
|                 InfectPlayer(index, attacker); | ||||
|             } | ||||
| @@ -321,15 +319,8 @@ public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|                 AddPlayerScore(attacker, bonus); | ||||
|             } | ||||
|              | ||||
|             // Check if the player was killed by world damage. | ||||
|             if (!ZRIsValidClient(attacker)) | ||||
|             { | ||||
|                 gKilledByWorld[index] = true; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 gKilledByWorld[index] = false; | ||||
|             } | ||||
|             // Set gKilledByWorld to true if attacker is not a valid client. | ||||
|             gKilledByWorld[index] = !ZRIsValidClient(attacker); | ||||
|         } | ||||
|          | ||||
|         // Kill various timers. | ||||
| @@ -341,18 +332,13 @@ public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) | ||||
|                 tHandles[index][x] = INVALID_HANDLE; | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         // Create respawn timer if enabled. | ||||
|         new bool:respawn = GetConVarBool(gCvars[CVAR_RESPAWN]); | ||||
|         if (respawn) | ||||
|         {    | ||||
|             new Float:delay = GetConVarFloat(gCvars[CVAR_RESPAWN_DELAY]); | ||||
|             tHandles[index][TRESPAWN] = CreateTimer(delay, RespawnTimer, index, TIMER_FLAG_NO_MAPCHANGE); | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     // Forward event to modules. | ||||
|     ClassOnClientDeath(index); | ||||
|     SpawnProtectOnClientDeath(index); | ||||
|     RespawnOnClientDeath(index); | ||||
|     ZHPOnClientDeath(index); | ||||
|      | ||||
|     new ZTeam:team = IsRoundOver();     | ||||
|     RoundWin(team); | ||||
|   | ||||
| @@ -67,7 +67,7 @@ public MainMenuHandle(Handle:menu_main, MenuAction:action, client, slot) | ||||
|             } | ||||
|             case 2: | ||||
|             { | ||||
|                 if (!ZMarket(client)) | ||||
|                 if (!ZMarketSend(client)) | ||||
|                 { | ||||
|                     MainMenu(client); | ||||
|                 } | ||||
|   | ||||
| @@ -21,8 +21,7 @@ ShowOverlays(Float:time, ZTeam:winner) | ||||
|             GetConVarString(gCvars[CVAR_OVERLAYS_ZOMBIE], overlay, sizeof(overlay)); | ||||
|         } | ||||
|              | ||||
|         new maxplayers = GetMaxClients(); | ||||
|         for (new x = 1; x <= maxplayers; x++) | ||||
|         for (new x = 1; x <= MaxClients; x++) | ||||
|         { | ||||
|             if (IsClientInGame(x)) | ||||
|             { | ||||
| @@ -36,8 +35,7 @@ ShowOverlays(Float:time, ZTeam:winner) | ||||
|  | ||||
| public Action:KillOverlays(Handle:timer) | ||||
| { | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (IsClientInGame(x)) | ||||
|         { | ||||
|   | ||||
							
								
								
									
										144
									
								
								src/zr/respawn.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								src/zr/respawn.inc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| /* | ||||
|  * ============================================================================ | ||||
|  * | ||||
|  *   Zombie:Reloaded | ||||
|  * | ||||
|  *   File:        respawn.inc | ||||
|  *   Description: Players come back to life | ||||
|  * | ||||
|  * ============================================================================ | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Array for storing respawn timer handles per client. | ||||
|  */ | ||||
| new Handle:tRespawn[MAXPLAYERS + 1]; | ||||
|  | ||||
| /** | ||||
|  * Client is joining the server. | ||||
|  */  | ||||
| RespawnClientInit(client) | ||||
| { | ||||
|     // Reset timer handle. | ||||
|     tRespawn[client] = INVALID_HANDLE; | ||||
|      | ||||
|     // Init gKilledByWorld for client. | ||||
|     gKilledByWorld[client] = false; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Client is spawning into the game. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| RespawnOnClientSpawn(client) | ||||
| { | ||||
|     // If timer is running, kill it. | ||||
|     if (tRespawn[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tRespawn[client]); | ||||
|     } | ||||
|      | ||||
|     // Reset timer handle. | ||||
|     tRespawn[client] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Client has been killed. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| RespawnOnClientDeath(client) | ||||
| { | ||||
|     // If timer is running, kill it. | ||||
|     if (tRespawn[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tRespawn[client]); | ||||
|     } | ||||
|      | ||||
|     // If respawn is disabled, stop here. | ||||
|     new bool:respawn = GetConVarBool(gCvars[CVAR_RESPAWN]); | ||||
|     if (!respawn) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Start respawn timer. | ||||
|     new Float:delay = GetConVarFloat(gCvars[CVAR_RESPAWN_DELAY]); | ||||
|     tRespawn[client] = CreateTimer(delay, RespawnTimer, client, TIMER_FLAG_NO_MAPCHANGE); | ||||
| } | ||||
|   | ||||
| /** | ||||
|  * Spawns a player into the round. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| RespawnSpawnClient(client) | ||||
| { | ||||
|     // If client isn't in-game, then stop. | ||||
|     if (!IsClientInGame(client)) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Spawn player. | ||||
|     CS_RespawnPlayer(client); | ||||
|      | ||||
|     // Stop here if the first zombie hasn't spawned yet. | ||||
|     if (!zombieSpawned) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Get respawn team. | ||||
|     new bool:respawn_zombie = GetConVarBool(gCvars[CVAR_RESPAWN_ZOMBIE]); | ||||
|      | ||||
|     // Get suicide respawn cvar | ||||
|     if (respawn_zombie) | ||||
|     { | ||||
|         InfectPlayer(client); | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     if (GetConVarBool(gCvars[CVAR_SUICIDE_WORLD_DAMAGE]) && gKilledByWorld[client]) | ||||
|     { | ||||
|         InfectPlayer(client); | ||||
|         gKilledByWorld[client] = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Timer callback, respawns a player. | ||||
|  *  | ||||
|  * @param timer     The timer handle. | ||||
|  * @param client    The client index. | ||||
|  */     | ||||
| public Action:RespawnTimer(Handle:timer, any:client) | ||||
| { | ||||
|     // Reset timer handle. | ||||
|     tRespawn[client] = INVALID_HANDLE; | ||||
|      | ||||
|     // If client isn't in-game, then stop. | ||||
|     if (!IsClientInGame(client)) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // If player isn't alive, then stop. | ||||
|     if (!IsPlayerAlive(client)) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Get client team. | ||||
|     new team = GetClientTeam(client); | ||||
|      | ||||
|     // If player isn't on a team, then stop. | ||||
|     if (team != CS_TEAM_T && team != CS_TEAM_CT) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Spawn player. | ||||
|     RespawnSpawnClient(client); | ||||
| } | ||||
| @@ -42,7 +42,8 @@ public Action:SayCommand(client, argc) | ||||
|      | ||||
|     else if (StrEqual(args, "!zmarket", false)) | ||||
|     { | ||||
|         ZMarket(client); | ||||
|         // Send market menu. | ||||
|         ZMarketSend(client); | ||||
|     } | ||||
|      | ||||
|     else if (StrEqual(args, "!zspawn", false)) | ||||
| @@ -78,66 +79,6 @@ public Action:SayCommand(client, argc) | ||||
|     return Plugin_Continue; | ||||
| } | ||||
|  | ||||
| /*bool:ZClass(client) | ||||
| { | ||||
|     new bool:classes = GetConVarBool(gCvars[CVAR_CLASSES]); | ||||
|     if (!classes) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Feature is disabled"); | ||||
|          | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     new bool:randomclass = GetConVarBool(gCvars[CVAR_CLASSES_RANDOM]); | ||||
|     if (randomclass) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Random class is enabled"); | ||||
|          | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     ClassMenu(client); | ||||
|      | ||||
|     return true; | ||||
| }*/ | ||||
|  | ||||
| bool:ZMarket(client) | ||||
| { | ||||
|     if (!market) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Feature is disabled"); | ||||
|          | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     if (!IsPlayerAlive(client)) | ||||
|     { | ||||
|         ZR_PrintToChat(client, "Must be alive"); | ||||
|          | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     new bool:buyzone = GetConVarBool(gCvars[CVAR_ZMARKET_BUYZONE]);  | ||||
|     if (!IsClientInBuyZone(client) && buyzone) | ||||
|     { | ||||
|         ZR_PrintCenterText(client, "Market out of buyzone"); | ||||
|          | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     SetGlobalTransTarget(client); | ||||
|      | ||||
|     decl String:title[64]; | ||||
|     decl String:rebuy[64]; | ||||
|      | ||||
|     Format(title, sizeof(title), "%t\n ", "Market title"); | ||||
|     Format(rebuy, sizeof(rebuy), "%t\n ", "Market rebuy"); | ||||
|      | ||||
|     Market_Send(client, title, rebuy); | ||||
|      | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| ZSpawn(client) | ||||
| { | ||||
|     new bool:spawn = GetConVarBool(gCvars[CVAR_ZSPAWN]); | ||||
| @@ -163,7 +104,7 @@ ZSpawn(client) | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     RespawnPlayer(client); | ||||
|     RespawnSpawnClient(client); | ||||
|      | ||||
|     AddPlayerToList(client); | ||||
| } | ||||
| @@ -36,15 +36,31 @@ SpawnProtectClientInit(client) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Player is spawning into the game. | ||||
|  * Client is spawning into the game. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */    | ||||
| SpawnProtectPlayerSpawn(client) | ||||
| SpawnProtectOnClientSpawn(client) | ||||
| { | ||||
|     // Disable spawn protection on client. | ||||
|     pSpawnProtect[client] = false; | ||||
|      | ||||
|     // If timer is currently running, kill it. | ||||
|     if (tSpawnProtect[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tSpawnProtect[client]); | ||||
|     } | ||||
|      | ||||
|     // Reset timer handle. | ||||
|     tSpawnProtect[client] = INVALID_HANDLE; | ||||
|      | ||||
|     // If client isn't on a team, then stop. | ||||
|     new team = GetClientTeam(client); | ||||
|     if (team != CS_TEAM_T && team != CS_TEAM_CT) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // If zombie hasn't spawned, then stop. | ||||
|     if (!zombieSpawned) | ||||
|     { | ||||
| @@ -58,13 +74,10 @@ SpawnProtectPlayerSpawn(client) | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     // Get respawn team. | ||||
|     decl String:respawnteam[32]; | ||||
|     GetConVarString(gCvars[CVAR_RESPAWN_TEAM], respawnteam, sizeof(respawnteam)); | ||||
|      | ||||
|     // If the respawn team is not set to zombie, and either cvar zr_suicide_world_damage or the client | ||||
|     // wasn't killed by world is false, then continue to protect client. | ||||
|     if (!StrEqual(respawnteam, "zombie", false) && !(GetConVarBool(gCvars[CVAR_SUICIDE_WORLD_DAMAGE]) && gKilledByWorld[client])) | ||||
|     // If player respawns as human, and either cvar zr_suicide_world_damage or the client | ||||
|     // wasn't killed by world is false, then continue on to protect client. | ||||
|     new bool:respawn_zombie = GetConVarBool(gCvars[CVAR_RESPAWN_ZOMBIE]); | ||||
|     if (!respawn_zombie && !(GetConVarBool(gCvars[CVAR_SUICIDE_WORLD_DAMAGE]) && gKilledByWorld[client])) | ||||
|     { | ||||
|         // Set spawn protect flag on client. | ||||
|         pSpawnProtect[client] = true; | ||||
| @@ -83,17 +96,28 @@ SpawnProtectPlayerSpawn(client) | ||||
|         // Send time left in a hud message. | ||||
|         ZR_HudHint(client, "Spawn Protect", pSpawnProtectTime[client]); | ||||
|          | ||||
|         // If timer is currently running, kill it. | ||||
|         if (tSpawnProtect[client] != INVALID_HANDLE) | ||||
|         { | ||||
|             KillTimer(tSpawnProtect[client]); | ||||
|         } | ||||
|          | ||||
|         // Start repeating timer. | ||||
|         tSpawnProtect[client] = CreateTimer(1.0, SpawnProtectTimer, client, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Client has been killed. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| SpawnProtectOnClientDeath(client) | ||||
| { | ||||
|     // If timer is running, kill it. | ||||
|     if (tSpawnProtect[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tSpawnProtect[client]); | ||||
|     } | ||||
|      | ||||
|     // Reset timer handle. | ||||
|     tSpawnProtect[client] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Timer callback function, countdown for spawn protection. | ||||
|  *  | ||||
|   | ||||
| @@ -41,8 +41,7 @@ stock ZR_PrintToChat(client, any:...) | ||||
|          | ||||
|         PrintToServer(phrase); | ||||
|          | ||||
|         new maxplayers = GetMaxClients(); | ||||
|         for (new x = 1; x <= maxplayers; x++) | ||||
|         for (new x = 1; x <= MaxClients; x++) | ||||
|         { | ||||
|             if (IsClientInGame(x)) | ||||
|             { | ||||
|   | ||||
| @@ -6,6 +6,55 @@ | ||||
|  * ====================  | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * Sends market menu to client. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */     | ||||
| bool:ZMarketSend(client) | ||||
| { | ||||
|     // If market is disabled, then stop. | ||||
|     if (!market) | ||||
|     { | ||||
|         // Tell client market is disabled. | ||||
|         ZR_PrintToChat(client, "Feature is disabled"); | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // If player is dead, then stop. | ||||
|     if (!IsPlayerAlive(client)) | ||||
|     { | ||||
|         // Tell player they must be alive. | ||||
|         ZR_PrintToChat(client, "Must be alive"); | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Check buyzone cvar to see if client has to be in a buyzone to use. | ||||
|     new bool:buyzone = GetConVarBool(gCvars[CVAR_ZMARKET_BUYZONE]);  | ||||
|     if (!IsClientInBuyZone(client) && buyzone) | ||||
|     { | ||||
|         // Tell client they must be in a buyzone. | ||||
|         ZR_PrintCenterText(client, "Market out of buyzone"); | ||||
|         return false; | ||||
|     } | ||||
|      | ||||
|     // Set translate target to client. | ||||
|     SetGlobalTransTarget(client); | ||||
|      | ||||
|     // Format title and rebuy lines. | ||||
|     decl String:title[64]; | ||||
|     decl String:rebuy[64]; | ||||
|      | ||||
|     Format(title, sizeof(title), "%t\n ", "Market title"); | ||||
|     Format(rebuy, sizeof(rebuy), "%t\n ", "Market rebuy"); | ||||
|      | ||||
|     // Send market menu. | ||||
|     Market_Send(client, title, rebuy); | ||||
|      | ||||
|     // Successfully sent the market menu. | ||||
|     return true; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * (Market) Forward called when a client selects a weapon from the market. | ||||
|  *  | ||||
| @@ -83,5 +132,5 @@ public Market_PostOnWeaponSelected(client, &bool:allowed) | ||||
|     } | ||||
|      | ||||
|     // Resend market menu. | ||||
|     ZMarket(client); | ||||
|     ZMarketSend(client); | ||||
| } | ||||
| @@ -37,6 +37,40 @@ ZHPClientInit(client) | ||||
|     tZHP[client] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Client is spawning into the game. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| ZHPOnClientSpawn(client) | ||||
| { | ||||
|     // If timer is running, kill it. | ||||
|     if (tZHP[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tZHP[client]); | ||||
|     } | ||||
|      | ||||
|     // Reset timer handle. | ||||
|     tZHP[client] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Client has been killed. | ||||
|  *  | ||||
|  * @param client    The client index. | ||||
|  */ | ||||
| ZHPOnClientDeath(client) | ||||
| { | ||||
|     // If timer is running, kill it. | ||||
|     if (tZHP[client] != INVALID_HANDLE) | ||||
|     { | ||||
|         KillTimer(tZHP[client]); | ||||
|     } | ||||
|      | ||||
|     // Reset timer handle. | ||||
|     tZHP[client] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Toggle ZHP on a client. | ||||
|  *  | ||||
|   | ||||
| @@ -46,7 +46,6 @@ public Action:Command_NightVision(client, argc) | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     //bZVisionOn[client] = !bZVisionOn[client]; | ||||
|     bClientOverlayOn[client] = !bClientOverlayOn[client]; | ||||
|      | ||||
|     decl String:overlay[256]; | ||||
| @@ -379,8 +378,7 @@ PlayerLeft(client) | ||||
|      | ||||
|     new Handle:aClients = CreateArray(); | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (!IsClientInGame(x) || !IsPlayerAlive(x) || client == x || GetClientTeam(x) != CS_TEAM_CT || gBlockMotherInfect[x]) | ||||
|         { | ||||
| @@ -408,8 +406,7 @@ GetZTeamCount(ZTeam:team) | ||||
| { | ||||
|     new count = 0; | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (!IsClientInGame(x) || !IsPlayerAlive(x)) | ||||
|         { | ||||
| @@ -431,8 +428,7 @@ ZTeam:IsRoundOver() | ||||
|     new bool:zombies = false; | ||||
|     new bool:humans = false; | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (!IsClientInGame(x) || !IsPlayerAlive(x)) | ||||
|         { | ||||
| @@ -482,8 +478,7 @@ BalanceTeams() | ||||
|     new count = 0; | ||||
|     new cPlayers[MAXPLAYERS]; | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (!IsClientInGame(x) || GetClientTeam(x) <= 1) | ||||
|         { | ||||
| @@ -554,50 +549,6 @@ public Action:ZombieMoanTimer(Handle:timer, any:index) | ||||
|     return Plugin_Continue; | ||||
| } | ||||
|  | ||||
| RespawnPlayer(client) | ||||
| { | ||||
|     if (!IsClientInGame(client)) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     CS_RespawnPlayer(client); | ||||
|      | ||||
|     if (!zombieSpawned) | ||||
|     { | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     decl String:team[32]; | ||||
|     GetConVarString(gCvars[CVAR_RESPAWN_TEAM], team, sizeof(team)); | ||||
|      | ||||
|     if (StrEqual(team, "zombie", false)) | ||||
|     { | ||||
|         InfectPlayer(client); | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     if (GetConVarBool(gCvars[CVAR_SUICIDE_WORLD_DAMAGE]) && gKilledByWorld[client]) | ||||
|     { | ||||
|         InfectPlayer(client); | ||||
|         gKilledByWorld[client] = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| public Action:RespawnTimer(Handle:timer, any:index) | ||||
| { | ||||
|     new team = GetClientTeam(index); | ||||
|     if (!IsClientInGame(index) || IsPlayerAlive(index) || team != CS_TEAM_T && team != CS_TEAM_CT) | ||||
|     { | ||||
|         tHandles[index][TRESPAWN] = INVALID_HANDLE; | ||||
|         return; | ||||
|     } | ||||
|      | ||||
|     RespawnPlayer(index); | ||||
|      | ||||
|     tHandles[index][TRESPAWN] = INVALID_HANDLE; | ||||
| } | ||||
|  | ||||
| public Action:RoundOver(Handle:timer) | ||||
| { | ||||
|     tRound = INVALID_HANDLE; | ||||
|   | ||||
| @@ -70,11 +70,7 @@ new bool:zombieSpawned; | ||||
| new bool:motherZombie[MAXPLAYERS + 1]; | ||||
| new bool:gZombie[MAXPLAYERS + 1]; | ||||
| new bool:gBlockMotherInfect[MAXPLAYERS + 1]; | ||||
| new bool:bZVision[MAXPLAYERS + 1]; | ||||
| //new bool:bZVisionOn[MAXPLAYERS + 1]; | ||||
| //new String:ZVisionOverlay[MAXPLAYERS + 1][PLATFORM_MAX_PATH]; | ||||
| new bool:pProtect[MAXPLAYERS + 1]; | ||||
| new bool:gKilledByWorld[MAXPLAYERS + 1] = {false, ...}; | ||||
| new bool:gKilledByWorld[MAXPLAYERS + 1]; | ||||
|  | ||||
| new Float:spawnLoc[MAXPLAYERS + 1][3]; | ||||
| new Float:bufferLoc[MAXPLAYERS + 1][3]; | ||||
| @@ -92,13 +88,10 @@ new Handle:tInfect = INVALID_HANDLE; | ||||
|  | ||||
| new Handle:pList = INVALID_HANDLE; | ||||
|  | ||||
| #define MAXTIMERS 5 | ||||
| #define MAXTIMERS 2 | ||||
|  | ||||
| #define TMOAN 0 | ||||
| #define TREGEN 1 | ||||
| #define TTELE 2 | ||||
| #define TRESPAWN 3 | ||||
| #define TZVISION 4 | ||||
| #define TTELE 1 | ||||
|  | ||||
| new Handle:tHandles[MAXPLAYERS + 1][MAXTIMERS]; | ||||
|  | ||||
| @@ -178,8 +171,7 @@ RefreshList() | ||||
|      | ||||
|     pList = CreateArray(); | ||||
|      | ||||
|     new maxplayers = GetMaxClients(); | ||||
|     for (new x = 1; x <= maxplayers; x++) | ||||
|     for (new x = 1; x <= MaxClients; x++) | ||||
|     { | ||||
|         if (IsClientInGame(x) && IsPlayerAlive(x)) | ||||
|         {   | ||||
|   | ||||
		Reference in New Issue
	
	Block a user