Added infection countdown. Backported from zr-dev:52955b169945 (655).
This commit is contained in:
parent
e90b517fc1
commit
776f149247
@ -358,6 +358,13 @@
|
|||||||
"es" "El ultimo zombi a dejado el juego, y te ha pasado la infeccion a ti. (luego se lo agradeces xD)"
|
"es" "El ultimo zombi a dejado el juego, y te ha pasado la infeccion a ti. (luego se lo agradeces xD)"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Center Text
|
||||||
|
|
||||||
|
"Infect countdown"
|
||||||
|
{
|
||||||
|
"en" "First infection in {1} seconds."
|
||||||
|
}
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
|
|
||||||
"Infect menu clients title"
|
"Infect menu clients title"
|
||||||
|
@ -357,6 +357,13 @@
|
|||||||
"no" "Den siste zombien har forlatt spillet. Du er blitt valgt som erstatning."
|
"no" "Den siste zombien har forlatt spillet. Du er blitt valgt som erstatning."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Center Text
|
||||||
|
|
||||||
|
"Infect countdown"
|
||||||
|
{
|
||||||
|
"en" "Første infeksjon om {1} sekunder."
|
||||||
|
}
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
|
|
||||||
"Infect menu clients title"
|
"Infect menu clients title"
|
||||||
|
@ -358,6 +358,13 @@
|
|||||||
"ru" "Последний зомби покинул игру, поэтому вам досталась его инфекция."
|
"ru" "Последний зомби покинул игру, поэтому вам досталась его инфекция."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Center Text
|
||||||
|
|
||||||
|
"Infect countdown"
|
||||||
|
{
|
||||||
|
"en" "First infection in {1} seconds."
|
||||||
|
}
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
|
|
||||||
"Infect menu clients title"
|
"Infect menu clients title"
|
||||||
|
@ -372,6 +372,14 @@
|
|||||||
"en" "The last zombie has left the game, and has passed the infection on to you."
|
"en" "The last zombie has left the game, and has passed the infection on to you."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Center Text
|
||||||
|
|
||||||
|
"Infect countdown"
|
||||||
|
{
|
||||||
|
"#format" "{1:d}"
|
||||||
|
"en" "First infection in {1} seconds."
|
||||||
|
}
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
|
|
||||||
"Infect menu clients title"
|
"Infect menu clients title"
|
||||||
|
@ -289,6 +289,10 @@ zr_hitgroups "1"
|
|||||||
// Default: "5"
|
// Default: "5"
|
||||||
zr_infect_mzombie_ratio "5"
|
zr_infect_mzombie_ratio "5"
|
||||||
|
|
||||||
|
// Counts down to the first infection of the round. The counter is displayed in the middle of the screen.
|
||||||
|
// Default: "0"
|
||||||
|
zr_infect_mzombie_countdown "0"
|
||||||
|
|
||||||
// Teleport mother zombies back to spawn on infect.
|
// Teleport mother zombies back to spawn on infect.
|
||||||
// Default: "0"
|
// Default: "0"
|
||||||
zr_infect_mzombie_respawn "0"
|
zr_infect_mzombie_respawn "0"
|
||||||
|
@ -2570,6 +2570,19 @@ tune game balance.</p>
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td class="commandheader">zr_infect_mzombie_countdown</td>
|
||||||
|
<td class="commandheader">0</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="indent" colspan="2">
|
||||||
|
<p>Counts down to the first infection of the round. The counter is
|
||||||
|
displayed in the middle of the screen.</p>
|
||||||
|
<p>Options:<br />
|
||||||
|
0 or 1</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td class="commandheader">zr_infect_mzombie_respawn</td>
|
<td class="commandheader">zr_infect_mzombie_respawn</td>
|
||||||
<td class="commandheader">0</td>
|
<td class="commandheader">0</td>
|
||||||
|
@ -100,6 +100,7 @@ enum CvarsList
|
|||||||
Handle:CVAR_INFECT_CONSECUTIVE_BLOCK,
|
Handle:CVAR_INFECT_CONSECUTIVE_BLOCK,
|
||||||
Handle:CVAR_INFECT_WEAPONS_DROP,
|
Handle:CVAR_INFECT_WEAPONS_DROP,
|
||||||
Handle:CVAR_INFECT_MZOMBIE_RATIO,
|
Handle:CVAR_INFECT_MZOMBIE_RATIO,
|
||||||
|
Handle:CVAR_INFECT_MZOMBIE_COUNTDOWN,
|
||||||
Handle:CVAR_INFECT_MZOMBIE_RESPAWN,
|
Handle:CVAR_INFECT_MZOMBIE_RESPAWN,
|
||||||
Handle:CVAR_INFECT_EXPLOSION,
|
Handle:CVAR_INFECT_EXPLOSION,
|
||||||
Handle:CVAR_INFECT_FIREBALL,
|
Handle:CVAR_INFECT_FIREBALL,
|
||||||
@ -316,6 +317,7 @@ CvarsCreate()
|
|||||||
|
|
||||||
// General
|
// General
|
||||||
g_hCvarsList[CVAR_INFECT_MZOMBIE_RATIO] = CreateConVar("zr_infect_mzombie_ratio", "5", "Number of mother zombies to infect (when infect timer is up) in proportion to number of humans on the server.");
|
g_hCvarsList[CVAR_INFECT_MZOMBIE_RATIO] = CreateConVar("zr_infect_mzombie_ratio", "5", "Number of mother zombies to infect (when infect timer is up) in proportion to number of humans on the server.");
|
||||||
|
g_hCvarsList[CVAR_INFECT_MZOMBIE_COUNTDOWN] = CreateConVar("zr_infect_mzombie_countdown", "0", "Counts down to the first infection of the round. Countdown is printed in the middle of the client's screen.");
|
||||||
g_hCvarsList[CVAR_INFECT_MZOMBIE_RESPAWN] = CreateConVar("zr_infect_mzombie_respawn", "0", "Teleport mother zombies back to spawn on infect.");
|
g_hCvarsList[CVAR_INFECT_MZOMBIE_RESPAWN] = CreateConVar("zr_infect_mzombie_respawn", "0", "Teleport mother zombies back to spawn on infect.");
|
||||||
g_hCvarsList[CVAR_INFECT_SPAWNTIME_MIN] = CreateConVar("zr_infect_spawntime_min", "30.0", "Minimum time from the start of the round until picking the mother zombie(s).");
|
g_hCvarsList[CVAR_INFECT_SPAWNTIME_MIN] = CreateConVar("zr_infect_spawntime_min", "30.0", "Minimum time from the start of the round until picking the mother zombie(s).");
|
||||||
g_hCvarsList[CVAR_INFECT_SPAWNTIME_MAX] = CreateConVar("zr_infect_spawntime_max", "50.0", "Maximum time from the start of the round until picking the mother zombie(s).");
|
g_hCvarsList[CVAR_INFECT_SPAWNTIME_MAX] = CreateConVar("zr_infect_spawntime_max", "50.0", "Maximum time from the start of the round until picking the mother zombie(s).");
|
||||||
|
@ -46,9 +46,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global variable to store infect timer handle.
|
* @section Global variables to store infect timer handles.
|
||||||
*/
|
*/
|
||||||
new Handle:tInfect = INVALID_HANDLE;
|
new Handle:tInfect = INVALID_HANDLE;
|
||||||
|
new Handle:tInfectCountdown = INVALID_HANDLE;
|
||||||
|
/**
|
||||||
|
* @endsection
|
||||||
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array for flagging client as zombie.
|
* Array for flagging client as zombie.
|
||||||
@ -74,8 +78,9 @@ new bool:bInfectImmune[MAXPLAYERS + 1][2];
|
|||||||
*/
|
*/
|
||||||
InfectOnMapStart()
|
InfectOnMapStart()
|
||||||
{
|
{
|
||||||
// Reset timer handle.
|
// Stop timers if running.
|
||||||
tInfect = INVALID_HANDLE;
|
ZREndTimer(tInfect);
|
||||||
|
ZREndTimer(tInfectCountdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -336,15 +341,9 @@ InfectOnClientHurt(client, attacker, const String:weapon[])
|
|||||||
*/
|
*/
|
||||||
InfectOnRoundStart()
|
InfectOnRoundStart()
|
||||||
{
|
{
|
||||||
// If infect timer is running, then kill it.
|
// Stop infect timers if running.
|
||||||
if (tInfect != INVALID_HANDLE)
|
ZREndTimer(tInfect);
|
||||||
{
|
ZREndTimer(tInfectCountdown);
|
||||||
// Kill timer.
|
|
||||||
KillTimer(tInfect);
|
|
||||||
|
|
||||||
// Reset timer handle.
|
|
||||||
tInfect = INVALID_HANDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Tell plugin there are no zombies.
|
// Tell plugin there are no zombies.
|
||||||
g_bZombieSpawned = false;
|
g_bZombieSpawned = false;
|
||||||
@ -355,12 +354,9 @@ InfectOnRoundStart()
|
|||||||
*/
|
*/
|
||||||
InfectOnRoundFreezeEnd()
|
InfectOnRoundFreezeEnd()
|
||||||
{
|
{
|
||||||
// If infect timer is running, then kill it.
|
// Stop infect timers if running.
|
||||||
if (tInfect != INVALID_HANDLE)
|
ZREndTimer(tInfect);
|
||||||
{
|
ZREndTimer(tInfectCountdown);
|
||||||
// Kill timer.
|
|
||||||
KillTimer(tInfect);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the zombie has spawned already (had to be through admin) then stop.
|
// If the zombie has spawned already (had to be through admin) then stop.
|
||||||
if (g_bZombieSpawned)
|
if (g_bZombieSpawned)
|
||||||
@ -375,7 +371,24 @@ InfectOnRoundFreezeEnd()
|
|||||||
// Pick random time between min and max.
|
// Pick random time between min and max.
|
||||||
new Float:randomtime = GetRandomFloat(infectspawntimemin, infectspawntimemax);
|
new Float:randomtime = GetRandomFloat(infectspawntimemin, infectspawntimemax);
|
||||||
|
|
||||||
|
// Round to the nearest whole number (and convert back to a float) so the countdown is synched with it.
|
||||||
|
float(RoundToNearest(randomtime));
|
||||||
|
|
||||||
tInfect = CreateTimer(randomtime, InfectMotherZombie, _, TIMER_FLAG_NO_MAPCHANGE);
|
tInfect = CreateTimer(randomtime, InfectMotherZombie, _, TIMER_FLAG_NO_MAPCHANGE);
|
||||||
|
|
||||||
|
// Check cvar and start a countdown timer if enabled.
|
||||||
|
new bool:countdown = GetConVarBool(g_hCvarsList[CVAR_INFECT_MZOMBIE_COUNTDOWN]);
|
||||||
|
if (countdown)
|
||||||
|
{
|
||||||
|
// Store the time until infection, and initialize the counter.
|
||||||
|
new Handle:hCountdownData = CreateDataPack();
|
||||||
|
WritePackFloat(hCountdownData, randomtime);
|
||||||
|
WritePackFloat(hCountdownData, 0.0);
|
||||||
|
tInfectCountdown = CreateTimer(1.0, InfectCountdown, hCountdownData, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
|
||||||
|
|
||||||
|
// Display initial tick.
|
||||||
|
InfectCountdown(tInfectCountdown, hCountdownData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -551,6 +564,49 @@ public Action:InfectMotherZombie(Handle:timer)
|
|||||||
CloseHandle(arrayEligibleClients);
|
CloseHandle(arrayEligibleClients);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timer callback, displays countdown to clients.
|
||||||
|
*
|
||||||
|
* @param timer The timer handle.
|
||||||
|
*/
|
||||||
|
public Action:InfectCountdown(Handle:timer, Handle:hCountdownData)
|
||||||
|
{
|
||||||
|
new bool:countdown = GetConVarBool(g_hCvarsList[CVAR_INFECT_MZOMBIE_COUNTDOWN]);
|
||||||
|
if (!countdown)
|
||||||
|
{
|
||||||
|
// Kill the timer.
|
||||||
|
ZREndTimer(tInfectCountdown, false);
|
||||||
|
CloseHandle(hCountdownData);
|
||||||
|
return Plugin_Stop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the info from the datapack.
|
||||||
|
ResetPack(hCountdownData);
|
||||||
|
new Float:length = ReadPackFloat(hCountdownData);
|
||||||
|
new Float:counter = ReadPackFloat(hCountdownData);
|
||||||
|
|
||||||
|
// Check if the countdown has finished.
|
||||||
|
if (counter >= length)
|
||||||
|
{
|
||||||
|
// Kill timer.
|
||||||
|
ZREndTimer(tInfectCountdown, false);
|
||||||
|
CloseHandle(hCountdownData);
|
||||||
|
return Plugin_Stop;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print the countdown text to the clients.
|
||||||
|
TranslationPrintCenterTextAll(false, "Infect countdown", RoundToNearest(length - counter));
|
||||||
|
|
||||||
|
counter++;
|
||||||
|
|
||||||
|
// Write the new counter value to the datapack.
|
||||||
|
ResetPack(hCountdownData);
|
||||||
|
WritePackFloat(hCountdownData, length);
|
||||||
|
WritePackFloat(hCountdownData, counter);
|
||||||
|
|
||||||
|
return Plugin_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Infects a client. Execute events, sets attributes and flags that indicate
|
* Infects a client. Execute events, sets attributes and flags that indicate
|
||||||
* that the client is a zombie.
|
* that the client is a zombie.
|
||||||
|
@ -274,6 +274,46 @@ stock TranslationPrintCenterText(client, any:...)
|
|||||||
PrintCenterText(client, translation);
|
PrintCenterText(client, translation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Print center text to all clients. (with style)
|
||||||
|
*
|
||||||
|
* @param client The client index.
|
||||||
|
* @param ... Translation formatting parameters.
|
||||||
|
*/
|
||||||
|
stock TranslationPrintCenterTextAll(bool:admin, any:...)
|
||||||
|
{
|
||||||
|
for (new client = 1; client <= MaxClients; client++)
|
||||||
|
{
|
||||||
|
// Skip clients not in game.
|
||||||
|
if (!IsClientInGame(client))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip clients who haven't selected a team yet (team menu open).
|
||||||
|
if (GetClientTeam(client) == CS_TEAM_NONE)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Skip non-admins if only printing to admins.
|
||||||
|
if (admin && !ZRIsClientAdmin(client))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set translation target
|
||||||
|
SetGlobalTransTarget(client);
|
||||||
|
|
||||||
|
// Translate phrase.
|
||||||
|
decl String:translation[TRANSLATION_MAX_LENGTH_CHAT];
|
||||||
|
VFormat(translation, sizeof(translation), "%t", 2);
|
||||||
|
|
||||||
|
// Print translated phrase to client.
|
||||||
|
PrintCenterText(client, translation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Print HUD text to client. (with style)
|
* Print HUD text to client. (with style)
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user