Code:
#include <amxmodx>
#include <biohazard>
#include <bh_classes>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#define MSG_CANTJOIN "Trebuie sa fii un zombie mort!"
#define MSG_GAMENOTSTARTED "Jocul nu a inceput inca."
#define MSG_NOPLACE "Sunt prea multi zombie vii."
#define MSG_ABUSE "Tu nu poti fi spawnat acum."
#define MSG_ANNONCE "Scrie in chat /zspawn pentru a reinvia ca zombie!"
#define MSG_CHOOSETEAM "Tu trebuie sa iti alegi echipa inainte de spawnare."
#define MSG_WAIT "Mai ai de asteptat %d secunde pentru /zspawn !"
#define MSG_SPAWN "Ai fost spawnat ca zombie."
#define OFFSET_TEAM 114
#define TASK_ID 9914
new SayText, cvar_zspawn, cvar_cooldown
new g_firstime[33]
new Float:g_nextzspawn[33]
new cvar_zspawnmode
public plugin_init() {
register_plugin("bio_zspawn","1.2","bipbip")
is_biomod_active() ? plugin_init2() : pause("ad")
}
public plugin_init2() {
cvar_zspawn = register_cvar("bh_zspawn", "1")
cvar_cooldown = register_cvar("bh_spawn_cooldown", "0.0")
cvar_zspawnmode = register_cvar("bh_zspawnmode","1")
SayText = get_user_msgid("SayText");
register_clcmd("say /zspawn","myspawn")
register_clcmd("say_team /zspawn", "myspawn")
register_clcmd("say zspawn","myspawn")
register_clcmd("say_team zspawn", "myspawn")
register_clcmd("say /spawn", "myspawn")
register_clcmd("say spawn", "myspawn")
register_clcmd("say_team /spawn","myspawn")
register_clcmd("say_team spawn", "myspawn")
RegisterHam(Ham_Killed, "player", "cheese_killed",1)
RegisterHam(Ham_Spawn,"player", "cheese_spawn_post", 1)
}
public client_connect(id) {
g_firstime[id] = 1;
}
public client_disconnect(id) {
g_firstime[id] = 1;
}
public client_putinserver(id) {
set_task(1.0,"task_putinserver",id)
}
public cheese_killed(id) {
if (!is_user_zombie(id))
return HAM_IGNORED
if (get_pcvar_num(cvar_zspawnmode) == 1 && g_firstime[id]==0) {
if (task_exists(id+TASK_ID)) remove_task(id+TASK_ID)
set_task(5.0,"task_annonce",id+TASK_ID)
g_firstime[id] = 1
}
if (get_pcvar_float(cvar_cooldown) > 0.0) {
g_nextzspawn[id] = get_gametime() + get_pcvar_float(cvar_cooldown)
}
return HAM_IGNORED
}
public task_putinserver(id) {
if (is_user_connected(id)) {
g_firstime[id] = 1
set_task(5.0,"task_annonce",id+TASK_ID)
}
}
public cheese_spawn_post(id) {
if (!is_user_zombie(id))
return HAM_IGNORED
g_firstime[id] = 0
return HAM_IGNORED
}
public task_annonce(tid) if (get_pcvar_num(cvar_zspawn)) {
new id = tid - TASK_ID
if (g_firstime[id] == 1 && !is_user_bot(id) && is_user_connected(id)) {
static CsTeams: team
team = cs_get_user_team(id)
if (team != CS_TEAM_SPECTATOR && team != CS_TEAM_UNASSIGNED)
if (is_game_started() && !is_user_alive(id) && get_gametime() > g_nextzspawn[id])
green_print(id, MSG_ANNONCE)
set_task(10.0,"task_annonce",id+TASK_ID)
}
}
public myspawn(id) if (get_pcvar_num(cvar_zspawn)) {
if (canjoin(id)) {
ExecuteHam(Ham_CS_RoundRespawn, id)
infect_user_force(id)
green_print(id, MSG_SPAWN)
set_task(1.0,"task_infect",id)
}
}
public task_infect(id) {
static CsTeams: team
team = cs_get_user_team(id)
if (team != CS_TEAM_T)
cs_set_user_team2(id,CS_TEAM_T,1)
if (!is_bioclasses_active()) client_cmd(id,"slot10")
}
bool: canjoin(id) {
if (is_user_alive(id)) {
green_print(id, MSG_CANTJOIN)
return false
}
static CsTeams: team
team = cs_get_user_team(id)
if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED) {
green_print(id, MSG_CHOOSETEAM)
return false
}
if (!is_game_started()) {
green_print(id, MSG_GAMENOTSTARTED)
return false
}
if (g_firstime[id]==0) {
green_print(id, MSG_ABUSE)
return false
}
if (get_pcvar_num(cvar_zspawnmode) == 1 && get_gametime() < g_nextzspawn[id]) {
new msg[128], Float:time_remain = (g_nextzspawn[id] - get_gametime())
formatex(msg, 127, MSG_WAIT, floatround(time_remain))
green_print(id, msg)
return false
}
return true;
}
stock cs_set_user_team2(index, {CsTeams,_}:team, update = 1)
{
set_pdata_int(index, OFFSET_TEAM, _:team)
set_pev(index, pev_team, _:team)
if(update)
{
static _msg_teaminfo; if(!_msg_teaminfo) _msg_teaminfo = get_user_msgid("TeamInfo")
static teaminfo[][] = { "UNASSIGNED", "TERRORIST", "CT", "SPECTATOR" }
message_begin(MSG_ALL, _msg_teaminfo)
write_byte(index)
write_string(teaminfo[_:team])
message_end()
}
return 1
}
stock green_print(index, const message[])
{
new finalmsg[192];
formatex(finalmsg, 191, "^x04[Zm.GamesZone.Ro] ^x01%s", message);
message_begin(MSG_ONE, SayText, _, index);
write_byte(index);
write_string(finalmsg);
message_end();
}
But .... see the attachment.