// todo:
// check cvar values for zp_respawn_after_last_human, zp_infection_allow_respawn, zp_nem_allow_respawn, etc.
#include <amxmodx>
#include <zombieplague>
const Float:AUTORESPAWN_DELAY = 5.0
const TASK_AUTORESPAWN = 100
#define ID_AUTORESPAWN (taskid - TASK_AUTORESPAWN)
new cvar_deathmatch, g_maxplayers
public plugin_init()
{
register_plugin("[ZP] Auto Respawn after joining", "0.1", "MeRcyLeZZ")
register_clcmd("joinclass","cmd_joinclass"); // new menus
register_menucmd(register_menuid("Terrorist_Select",1),511,"cmd_joinclass"); // old menus
register_menucmd(register_menuid("CT_Select",1),511,"cmd_joinclass"); // old menus
cvar_deathmatch = get_cvar_pointer("zp_deathmatch")
g_maxplayers = get_maxplayers()
}
// Player selects model
public cmd_joinclass(id)
{
if (!get_pcvar_num(cvar_deathmatch))
return;
set_task(AUTORESPAWN_DELAY, "auto_respawn_player", id+TASK_AUTORESPAWN)
}
public client_disconnect(id)
{
remove_task(id+TASK_AUTORESPAWN)
}
public auto_respawn_player(taskid)
{
// Already alive?
if (is_user_alive(ID_AUTORESPAWN))
return;
// Nemesis/Survivor round overrides
if (zp_is_survivor_round())
{
zp_respawn_user(ID_AUTORESPAWN, ZP_TEAM_ZOMBIE)
return;
}
if (zp_is_nemesis_round())
{
zp_respawn_user(ID_AUTORESPAWN, ZP_TEAM_HUMAN)
return;
}
// Respawn as zombie?
if (get_pcvar_num(cvar_deathmatch) == 2 || (get_pcvar_num(cvar_deathmatch) == 3 && random_num(0, 1)) || (get_pcvar_num(cvar_deathmatch) == 4 && zp_get_zombie_count() < fnGetAlive()/2))
zp_respawn_user(ID_AUTORESPAWN, ZP_TEAM_ZOMBIE)
else
zp_respawn_user(ID_AUTORESPAWN, ZP_TEAM_HUMAN)
}
// Get Alive -returns alive players number-
fnGetAlive()
{
new iAlive, id
for (id = 1; id <= g_maxplayers; id++)
{
if (is_user_alive(id))
iAlive++
}
return iAlive;
}