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:
parent
872e41e6d2
commit
5b9f8d364d
@ -25,8 +25,13 @@
|
|||||||
#include "zr/ambience"
|
#include "zr/ambience"
|
||||||
#include "zr/models"
|
#include "zr/models"
|
||||||
#include "zr/overlays"
|
#include "zr/overlays"
|
||||||
|
|
||||||
|
// Class system
|
||||||
#include "zr/playerclasses/playerclasses"
|
#include "zr/playerclasses/playerclasses"
|
||||||
|
|
||||||
|
// Antistick
|
||||||
#include "zr/antistick"
|
#include "zr/antistick"
|
||||||
|
|
||||||
#include "zr/anticamp"
|
#include "zr/anticamp"
|
||||||
#include "zr/teleport"
|
#include "zr/teleport"
|
||||||
#include "zr/zombie"
|
#include "zr/zombie"
|
||||||
@ -45,6 +50,9 @@
|
|||||||
// Spawn protect
|
// Spawn protect
|
||||||
#include "zr/spawnprotect"
|
#include "zr/spawnprotect"
|
||||||
|
|
||||||
|
// Respawn
|
||||||
|
#include "zr/respawn"
|
||||||
|
|
||||||
// ZHP
|
// ZHP
|
||||||
#include "zr/zhp"
|
#include "zr/zhp"
|
||||||
|
|
||||||
@ -173,12 +181,11 @@ public OnClientPutInServer(client)
|
|||||||
gBlockMotherInfect[client] = false;
|
gBlockMotherInfect[client] = false;
|
||||||
gKilledByWorld[client] = false;
|
gKilledByWorld[client] = false;
|
||||||
|
|
||||||
bZVision[client] = !IsFakeClient(client);
|
|
||||||
|
|
||||||
// Forward event to modules.
|
// Forward event to modules.
|
||||||
ClassClientInit(client);
|
ClassClientInit(client);
|
||||||
WeaponsClientInit(client);
|
WeaponsClientInit(client);
|
||||||
SpawnProtectClientInit(client);
|
SpawnProtectClientInit(client);
|
||||||
|
RespawnClientInit(client);
|
||||||
ZHPClientInit(client);
|
ZHPClientInit(client);
|
||||||
|
|
||||||
if (!IsFakeClient(client)) AmbienceStart(client);
|
if (!IsFakeClient(client)) AmbienceStart(client);
|
||||||
|
@ -62,8 +62,7 @@ AntiStickIsStuck(client)
|
|||||||
GetClientAbsOrigin(client, clientloc);
|
GetClientAbsOrigin(client, clientloc);
|
||||||
|
|
||||||
// x = client index.
|
// x = client index.
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
// Validate player is in-game, alive, and isn't the player being checked. ('client')
|
// Validate player is in-game, alive, and isn't the player being checked. ('client')
|
||||||
if (!IsClientInGame(x) || !IsPlayerAlive(x) || x == client)
|
if (!IsClientInGame(x) || !IsPlayerAlive(x) || x == client)
|
||||||
@ -104,8 +103,7 @@ AntiStickIsStuck(client)
|
|||||||
public Action:AntiStickTimer(Handle:timer)
|
public Action:AntiStickTimer(Handle:timer)
|
||||||
{
|
{
|
||||||
// x = client index
|
// x = client index
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
// Validate player is in-game and alive.
|
// Validate player is in-game and alive.
|
||||||
if (!IsClientInGame(x) || !IsPlayerAlive(x))
|
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);
|
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_RATIO,
|
||||||
Handle:CVAR_MOTHER_ZOMBIE_RESPAWN,
|
Handle:CVAR_MOTHER_ZOMBIE_RESPAWN,
|
||||||
Handle:CVAR_RESPAWN,
|
Handle:CVAR_RESPAWN,
|
||||||
Handle:CVAR_RESPAWN_TEAM,
|
Handle:CVAR_RESPAWN_ZOMBIE,
|
||||||
Handle:CVAR_RESPAWN_DELAY,
|
Handle:CVAR_RESPAWN_DELAY,
|
||||||
Handle:CVAR_SUICIDE_ZOMBIE,
|
Handle:CVAR_SUICIDE_ZOMBIE,
|
||||||
Handle:CVAR_SUICIDE_HUMAN,
|
Handle:CVAR_SUICIDE_HUMAN,
|
||||||
@ -88,7 +88,6 @@ enum ZRSettings
|
|||||||
Handle:CVAR_INFECT_SHAKE_AMP,
|
Handle:CVAR_INFECT_SHAKE_AMP,
|
||||||
Handle:CVAR_INFECT_SHAKE_FREQUENCY,
|
Handle:CVAR_INFECT_SHAKE_FREQUENCY,
|
||||||
Handle:CVAR_INFECT_SHAKE_DURATION,
|
Handle:CVAR_INFECT_SHAKE_DURATION,
|
||||||
Handle:CVAR_INFECT_ANTISTICK_FORCE,
|
|
||||||
Handle:CVAR_ANTICAMP,
|
Handle:CVAR_ANTICAMP,
|
||||||
Handle:CVAR_ANTICAMP_UPDATE_INTERVAL,
|
Handle:CVAR_ANTICAMP_UPDATE_INTERVAL,
|
||||||
Handle:CVAR_ANTICAMP_ECHO
|
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_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_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] = 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_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_ZOMBIE] = CreateConVar("zr_suicide_zombie", "1", "Stops zombies from suiciding");
|
||||||
gCvars[CVAR_SUICIDE_HUMAN] = CreateConVar("zr_suicide_human", "1", "Stops humans 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_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_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_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] = 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_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.");
|
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;
|
zombieSpawned = false;
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x<= MaxClients; x++)
|
||||||
for (new x = 1; x<= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (!IsClientInGame(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++)
|
for (new x = 0; x < MAXTIMERS; x++)
|
||||||
{
|
{
|
||||||
if (x == TRESPAWN)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tHandles[index][x] != INVALID_HANDLE)
|
if (tHandles[index][x] != INVALID_HANDLE)
|
||||||
{
|
{
|
||||||
KillTimer(tHandles[index][x]);
|
KillTimer(tHandles[index][x]);
|
||||||
@ -169,6 +163,11 @@ public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
|
|||||||
SetPlayerFOV(index, 90);
|
SetPlayerFOV(index, 90);
|
||||||
ClientCommand(index, "r_screenoverlay \"\"");
|
ClientCommand(index, "r_screenoverlay \"\"");
|
||||||
|
|
||||||
|
// Forward event to modules.
|
||||||
|
SpawnProtectOnClientSpawn(index);
|
||||||
|
RespawnOnClientSpawn(index);
|
||||||
|
ZHPOnClientSpawn(index);
|
||||||
|
|
||||||
// Stop here if client isn't on a team.
|
// Stop here if client isn't on a team.
|
||||||
new team = GetClientTeam(index);
|
new team = GetClientTeam(index);
|
||||||
if (team != CS_TEAM_T && team != CS_TEAM_CT)
|
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.
|
// Forward event to modules.
|
||||||
ClassOnClientSpawn(index);
|
ClassOnClientSpawn(index);
|
||||||
SpawnProtectPlayerSpawn(index);
|
|
||||||
ZTeleClientSpawned(index);
|
ZTeleClientSpawned(index);
|
||||||
|
|
||||||
ZR_PrintToChat(index, "!zmenu reminder");
|
ZR_PrintToChat(index, "!zmenu reminder");
|
||||||
@ -227,7 +225,7 @@ public Action:PlayerHurt(Handle:event, const String:name[], bool:dontBroadcast)
|
|||||||
if (IsPlayerHuman(index) && IsPlayerZombie(attacker))
|
if (IsPlayerHuman(index) && IsPlayerZombie(attacker))
|
||||||
{
|
{
|
||||||
// Check if spawn protection is disabled and the weapon is a knife.
|
// 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);
|
InfectPlayer(index, attacker);
|
||||||
}
|
}
|
||||||
@ -321,15 +319,8 @@ public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
|
|||||||
AddPlayerScore(attacker, bonus);
|
AddPlayerScore(attacker, bonus);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the player was killed by world damage.
|
// Set gKilledByWorld to true if attacker is not a valid client.
|
||||||
if (!ZRIsValidClient(attacker))
|
gKilledByWorld[index] = !ZRIsValidClient(attacker);
|
||||||
{
|
|
||||||
gKilledByWorld[index] = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
gKilledByWorld[index] = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Kill various timers.
|
// Kill various timers.
|
||||||
@ -341,18 +332,13 @@ public Action:PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast)
|
|||||||
tHandles[index][x] = INVALID_HANDLE;
|
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.
|
// Forward event to modules.
|
||||||
ClassOnClientDeath(index);
|
ClassOnClientDeath(index);
|
||||||
|
SpawnProtectOnClientDeath(index);
|
||||||
|
RespawnOnClientDeath(index);
|
||||||
|
ZHPOnClientDeath(index);
|
||||||
|
|
||||||
new ZTeam:team = IsRoundOver();
|
new ZTeam:team = IsRoundOver();
|
||||||
RoundWin(team);
|
RoundWin(team);
|
||||||
|
@ -67,7 +67,7 @@ public MainMenuHandle(Handle:menu_main, MenuAction:action, client, slot)
|
|||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
if (!ZMarket(client))
|
if (!ZMarketSend(client))
|
||||||
{
|
{
|
||||||
MainMenu(client);
|
MainMenu(client);
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,7 @@ ShowOverlays(Float:time, ZTeam:winner)
|
|||||||
GetConVarString(gCvars[CVAR_OVERLAYS_ZOMBIE], overlay, sizeof(overlay));
|
GetConVarString(gCvars[CVAR_OVERLAYS_ZOMBIE], overlay, sizeof(overlay));
|
||||||
}
|
}
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (IsClientInGame(x))
|
if (IsClientInGame(x))
|
||||||
{
|
{
|
||||||
@ -36,8 +35,7 @@ ShowOverlays(Float:time, ZTeam:winner)
|
|||||||
|
|
||||||
public Action:KillOverlays(Handle:timer)
|
public Action:KillOverlays(Handle:timer)
|
||||||
{
|
{
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (IsClientInGame(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))
|
else if (StrEqual(args, "!zmarket", false))
|
||||||
{
|
{
|
||||||
ZMarket(client);
|
// Send market menu.
|
||||||
|
ZMarketSend(client);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (StrEqual(args, "!zspawn", false))
|
else if (StrEqual(args, "!zspawn", false))
|
||||||
@ -78,66 +79,6 @@ public Action:SayCommand(client, argc)
|
|||||||
return Plugin_Continue;
|
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)
|
ZSpawn(client)
|
||||||
{
|
{
|
||||||
new bool:spawn = GetConVarBool(gCvars[CVAR_ZSPAWN]);
|
new bool:spawn = GetConVarBool(gCvars[CVAR_ZSPAWN]);
|
||||||
@ -163,7 +104,7 @@ ZSpawn(client)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
RespawnPlayer(client);
|
RespawnSpawnClient(client);
|
||||||
|
|
||||||
AddPlayerToList(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.
|
* @param client The client index.
|
||||||
*/
|
*/
|
||||||
SpawnProtectPlayerSpawn(client)
|
SpawnProtectOnClientSpawn(client)
|
||||||
{
|
{
|
||||||
// Disable spawn protection on client.
|
// Disable spawn protection on client.
|
||||||
pSpawnProtect[client] = false;
|
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 zombie hasn't spawned, then stop.
|
||||||
if (!zombieSpawned)
|
if (!zombieSpawned)
|
||||||
{
|
{
|
||||||
@ -58,13 +74,10 @@ SpawnProtectPlayerSpawn(client)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get respawn team.
|
// If player respawns as human, and either cvar zr_suicide_world_damage or the client
|
||||||
decl String:respawnteam[32];
|
// wasn't killed by world is false, then continue on to protect client.
|
||||||
GetConVarString(gCvars[CVAR_RESPAWN_TEAM], respawnteam, sizeof(respawnteam));
|
new bool:respawn_zombie = GetConVarBool(gCvars[CVAR_RESPAWN_ZOMBIE]);
|
||||||
|
if (!respawn_zombie && !(GetConVarBool(gCvars[CVAR_SUICIDE_WORLD_DAMAGE]) && gKilledByWorld[client]))
|
||||||
// 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]))
|
|
||||||
{
|
{
|
||||||
// Set spawn protect flag on client.
|
// Set spawn protect flag on client.
|
||||||
pSpawnProtect[client] = true;
|
pSpawnProtect[client] = true;
|
||||||
@ -83,17 +96,28 @@ SpawnProtectPlayerSpawn(client)
|
|||||||
// Send time left in a hud message.
|
// Send time left in a hud message.
|
||||||
ZR_HudHint(client, "Spawn Protect", pSpawnProtectTime[client]);
|
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.
|
// Start repeating timer.
|
||||||
tSpawnProtect[client] = CreateTimer(1.0, SpawnProtectTimer, client, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
|
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.
|
* Timer callback function, countdown for spawn protection.
|
||||||
*
|
*
|
||||||
|
@ -41,8 +41,7 @@ stock ZR_PrintToChat(client, any:...)
|
|||||||
|
|
||||||
PrintToServer(phrase);
|
PrintToServer(phrase);
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (IsClientInGame(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.
|
* (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.
|
// Resend market menu.
|
||||||
ZMarket(client);
|
ZMarketSend(client);
|
||||||
}
|
}
|
@ -37,6 +37,40 @@ ZHPClientInit(client)
|
|||||||
tZHP[client] = INVALID_HANDLE;
|
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.
|
* Toggle ZHP on a client.
|
||||||
*
|
*
|
||||||
|
@ -46,7 +46,6 @@ public Action:Command_NightVision(client, argc)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//bZVisionOn[client] = !bZVisionOn[client];
|
|
||||||
bClientOverlayOn[client] = !bClientOverlayOn[client];
|
bClientOverlayOn[client] = !bClientOverlayOn[client];
|
||||||
|
|
||||||
decl String:overlay[256];
|
decl String:overlay[256];
|
||||||
@ -379,8 +378,7 @@ PlayerLeft(client)
|
|||||||
|
|
||||||
new Handle:aClients = CreateArray();
|
new Handle:aClients = CreateArray();
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (!IsClientInGame(x) || !IsPlayerAlive(x) || client == x || GetClientTeam(x) != CS_TEAM_CT || gBlockMotherInfect[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 count = 0;
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (!IsClientInGame(x) || !IsPlayerAlive(x))
|
if (!IsClientInGame(x) || !IsPlayerAlive(x))
|
||||||
{
|
{
|
||||||
@ -431,8 +428,7 @@ ZTeam:IsRoundOver()
|
|||||||
new bool:zombies = false;
|
new bool:zombies = false;
|
||||||
new bool:humans = false;
|
new bool:humans = false;
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (!IsClientInGame(x) || !IsPlayerAlive(x))
|
if (!IsClientInGame(x) || !IsPlayerAlive(x))
|
||||||
{
|
{
|
||||||
@ -482,8 +478,7 @@ BalanceTeams()
|
|||||||
new count = 0;
|
new count = 0;
|
||||||
new cPlayers[MAXPLAYERS];
|
new cPlayers[MAXPLAYERS];
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (!IsClientInGame(x) || GetClientTeam(x) <= 1)
|
if (!IsClientInGame(x) || GetClientTeam(x) <= 1)
|
||||||
{
|
{
|
||||||
@ -554,50 +549,6 @@ public Action:ZombieMoanTimer(Handle:timer, any:index)
|
|||||||
return Plugin_Continue;
|
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)
|
public Action:RoundOver(Handle:timer)
|
||||||
{
|
{
|
||||||
tRound = INVALID_HANDLE;
|
tRound = INVALID_HANDLE;
|
||||||
|
@ -70,11 +70,7 @@ new bool:zombieSpawned;
|
|||||||
new bool:motherZombie[MAXPLAYERS + 1];
|
new bool:motherZombie[MAXPLAYERS + 1];
|
||||||
new bool:gZombie[MAXPLAYERS + 1];
|
new bool:gZombie[MAXPLAYERS + 1];
|
||||||
new bool:gBlockMotherInfect[MAXPLAYERS + 1];
|
new bool:gBlockMotherInfect[MAXPLAYERS + 1];
|
||||||
new bool:bZVision[MAXPLAYERS + 1];
|
new bool:gKilledByWorld[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 Float:spawnLoc[MAXPLAYERS + 1][3];
|
new Float:spawnLoc[MAXPLAYERS + 1][3];
|
||||||
new Float:bufferLoc[MAXPLAYERS + 1][3];
|
new Float:bufferLoc[MAXPLAYERS + 1][3];
|
||||||
@ -92,13 +88,10 @@ new Handle:tInfect = INVALID_HANDLE;
|
|||||||
|
|
||||||
new Handle:pList = INVALID_HANDLE;
|
new Handle:pList = INVALID_HANDLE;
|
||||||
|
|
||||||
#define MAXTIMERS 5
|
#define MAXTIMERS 2
|
||||||
|
|
||||||
#define TMOAN 0
|
#define TMOAN 0
|
||||||
#define TREGEN 1
|
#define TTELE 1
|
||||||
#define TTELE 2
|
|
||||||
#define TRESPAWN 3
|
|
||||||
#define TZVISION 4
|
|
||||||
|
|
||||||
new Handle:tHandles[MAXPLAYERS + 1][MAXTIMERS];
|
new Handle:tHandles[MAXPLAYERS + 1][MAXTIMERS];
|
||||||
|
|
||||||
@ -178,8 +171,7 @@ RefreshList()
|
|||||||
|
|
||||||
pList = CreateArray();
|
pList = CreateArray();
|
||||||
|
|
||||||
new maxplayers = GetMaxClients();
|
for (new x = 1; x <= MaxClients; x++)
|
||||||
for (new x = 1; x <= maxplayers; x++)
|
|
||||||
{
|
{
|
||||||
if (IsClientInGame(x) && IsPlayerAlive(x))
|
if (IsClientInGame(x) && IsPlayerAlive(x))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user