ZSpawn: Add auto zspawn.

This commit is contained in:
zaCade 2019-03-10 19:59:20 +01:00
parent 177d9217b8
commit 6334246ced
5 changed files with 64 additions and 0 deletions

View File

@ -719,6 +719,10 @@ zr_vol_trigger_interval "1.0"
// Default: "1" // Default: "1"
zr_zspawn "1" zr_zspawn "1"
// Should zspawn spawn joining players?
// Default: "1"
zr_zspawn_auto "1"
// Override spawn team when spawning by means of ZSpawn. // Override spawn team when spawning by means of ZSpawn.
// Default: "1" // Default: "1"
zr_zspawn_team_override "1" zr_zspawn_team_override "1"

View File

@ -719,6 +719,10 @@ zr_vol_trigger_interval "1.0"
// Default: "1" // Default: "1"
zr_zspawn "1" zr_zspawn "1"
// Should zspawn spawn joining players?
// Default: "1"
zr_zspawn_auto "1"
// Override spawn team when spawning by means of ZSpawn. // Override spawn team when spawning by means of ZSpawn.
// Default: "1" // Default: "1"
zr_zspawn_team_override "1" zr_zspawn_team_override "1"

View File

@ -174,6 +174,7 @@ enum CvarsList
Handle:CVAR_VOL_UPDATE_INTERVAL, Handle:CVAR_VOL_UPDATE_INTERVAL,
Handle:CVAR_VOL_TRIGGER_INTERVAL, Handle:CVAR_VOL_TRIGGER_INTERVAL,
Handle:CVAR_ZSPAWN, Handle:CVAR_ZSPAWN,
Handle:CVAR_ZSPAWN_AUTO,
Handle:CVAR_ZSPAWN_TEAM_OVERRIDE, Handle:CVAR_ZSPAWN_TEAM_OVERRIDE,
Handle:CVAR_ZSPAWN_TEAM_ZOMBIE, Handle:CVAR_ZSPAWN_TEAM_ZOMBIE,
Handle:CVAR_ZSPAWN_BLOCK_REJOIN, Handle:CVAR_ZSPAWN_BLOCK_REJOIN,
@ -498,6 +499,7 @@ CvarsCreate()
// ZSpawn (module) // ZSpawn (module)
// =========================== // ===========================
g_hCvarsList[CVAR_ZSPAWN] = CreateConVar("zr_zspawn", "1", "Allow players to spawn into the game late."); g_hCvarsList[CVAR_ZSPAWN] = CreateConVar("zr_zspawn", "1", "Allow players to spawn into the game late.");
g_hCvarsList[CVAR_ZSPAWN_AUTO] = CreateConVar("zr_zspawn_auto", "1", "Should zspawn spawn joining players?");
g_hCvarsList[CVAR_ZSPAWN_TEAM_OVERRIDE] = CreateConVar("zr_zspawn_team_override", "1", "Override spawn team when spawning by means of ZSpawn."); g_hCvarsList[CVAR_ZSPAWN_TEAM_OVERRIDE] = CreateConVar("zr_zspawn_team_override", "1", "Override spawn team when spawning by means of ZSpawn.");
g_hCvarsList[CVAR_ZSPAWN_TEAM_ZOMBIE] = CreateConVar("zr_zspawn_team_zombie", "0", "Spawn player on zombie team when spawning by means of ZSpawn. [Dependency: zr_zspawn_team_override | Override: zr_respawn_team_zombie]"); g_hCvarsList[CVAR_ZSPAWN_TEAM_ZOMBIE] = CreateConVar("zr_zspawn_team_zombie", "0", "Spawn player on zombie team when spawning by means of ZSpawn. [Dependency: zr_zspawn_team_override | Override: zr_respawn_team_zombie]");

View File

@ -54,6 +54,9 @@ EventHook(bool:unhook = false)
UnhookEvent("player_death", EventPlayerDeath); UnhookEvent("player_death", EventPlayerDeath);
UnhookEvent("player_jump", EventPlayerJump); UnhookEvent("player_jump", EventPlayerJump);
// Unhook all listeners.
RemoveCommandListener(CommandPlayerClass, "joinclass");
// Stop after unhooking events. // Stop after unhooking events.
return; return;
} }
@ -67,6 +70,9 @@ EventHook(bool:unhook = false)
HookEvent("player_hurt", EventPlayerHurt); HookEvent("player_hurt", EventPlayerHurt);
HookEvent("player_death", EventPlayerDeath); HookEvent("player_death", EventPlayerDeath);
HookEvent("player_jump", EventPlayerJump); HookEvent("player_jump", EventPlayerJump);
// Hook all listeners used by plugin.
AddCommandListener(CommandPlayerClass, "joinclass");
} }
/** /**
@ -148,6 +154,12 @@ public Action:EventPlayerTeam(Handle:event, const String:name[], bool:dontBroadc
InfectOnClientTeam(index, team); InfectOnClientTeam(index, team);
ImmunityOnClientTeam(index); ImmunityOnClientTeam(index);
// Bots dont call `joinclass`. So call here.
if (IsFakeClient(index))
{
ZSpawnOnClientTeam(index);
}
return Plugin_Handled; return Plugin_Handled;
} }
@ -317,3 +329,20 @@ public Action:EventPlayerJumpPost(Handle:timer, any:client)
// Forward event to modules. // Forward event to modules.
JumpBoostOnClientJumpPost(client); JumpBoostOnClientJumpPost(client);
} }
/**
* Command callback (joinclass)
* Client is joining a class.
*
* @param client The client.
* @param command The command performed.
* @param argc The amount of arguments.
*/
public Action:CommandPlayerClass(int client, const char[] command, int argc)
{
if (IsFakeClient(client))
return;
// Forward event to modules.
ZSpawnOnClientTeam(client);
}

View File

@ -115,6 +115,31 @@ ZSpawnOnClientDeath(client)
// Add client to the SteamID cache. // Add client to the SteamID cache.
SteamidCacheAddClient(g_hZSpawnSteamIDCache, client); SteamidCacheAddClient(g_hZSpawnSteamIDCache, client);
} }
/**
* Client is joining a team/class.
*
* @param client The client index.
*/
ZSpawnOnClientTeam(client)
{
// Is auto zspawn enabled and is the client death?
new bool:autozspawn = GetConVarBool(g_hCvarsList[CVAR_ZSPAWN_AUTO]);
if (autozspawn && !IsPlayerAlive(client))
{
// Get our zspawn condition.
new ZSpawnCondition:condition = GetZSpawnCondition();
switch(condition)
{
case ZSpawn_Human, ZSpawn_Zombie:
{
// Respawn client.
CS_RespawnPlayer(client);
}
}
}
}
/** /**
* Client is spawning into the game. * Client is spawning into the game.