Soy español, y updated the plugin with T/CT models y most code :
PHP Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <engine>
#include <fun>
#define PLUGIN "Zombie Me"
#define VERSION "3.7"
#define AUTHOR "ALBJB"
enum ROUNDSTATUS {
RS_END,
RS_RUNNING,
RS_UNDEFINED
}
new ROUNDSTATUS:roundstatus = RS_UNDEFINED
#define ZOMBIE_PAIN 2
new pain_zombie[ZOMBIE_PAIN][] = {"zombie/zo_pain1.wav", "zombie/zo_pain2.wav" }
#define ZOMBIE_IDLE 7
new idle_zombie[ZOMBIE_IDLE][] = {
"zombie/zo_alert10.wav",
"zombie/zo_alert20.wav",
"zombie/zo_alert30.wav",
"zombie/zo_idle1.wav",
"zombie/zo_idle2.wav",
"zombie/zo_idle3.wav",
"zombie/zo_idle4.wav"
}
#define ZOMBIE_MISS 2
new miss_zombie[ZOMBIE_MISS][] = {"zombie/claw_miss1.wav", "zombie/claw_miss2.wav" }
#define ZOMBIE_HIT 3
new hit_zombie[ZOMBIE_HIT][] = {"zombie/claw_strike1.wav", "zombie/claw_strike2.wav","zombie/claw_strike3.wav" }
#define ZOMBIE_DEATH 2
new death_zombie[ZOMBIE_DEATH][] = {"aslave/slv_die1.wav","aslave/slv_die2.wav" }
new nightvision[33]
new bool:zombie[33]
new bool:z_vida[33]
new z_life[33]
new user_team[33]
new z_cost, z_health, z_armor, z_speed, z_gravity, z_buyable, z_glow, z_damage, z_sounds
#define MAX_PLAYERS 32
new bool:g_restart_attempt[MAX_PLAYERS + 1]
new freeze, maxspeed
new bool:map_off = false
new mapname[32]
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
////COMMANDS
register_clcmd("say /zombi", "buy_zombie")//, 0, "Transforms you into a zombie.")
register_clcmd("say /zombieme","buy_zombie")
register_clcmd("say /zombie","buy_zombie")
register_clcmd("say_team /zombi","buy_zombie")
register_clcmd("say_team /zombieme","buy_zombie")
register_clcmd("say_team /zombie","buy_zombie")
register_clcmd("nightvision","client_nightvision")
//register_clcmd("zombie_menu","zombie_menu", ADMIN_KICK)
register_menuid("zombie_menu")
register_concmd("zombie_menu","zombie_menu")//para abrir menu desde la consola
register_clcmd("zmenu","zombie_menu")
register_clcmd("say_team zmenu", "zombie_menu")
////////////
/////////EVENTS/////
register_event("WeapPickup", "event_weap_pickup", "be", "1!29") // removes players picked up weapon
register_event("Damage","event_damage_pain","be","2!0","3=0") // cuando produce algun daño al jugador
register_event("DeathMsg","event_DeathMsg","a") // cuando muere de algun jugador
register_event("CurWeapon","event_CurWeapon","be") // use the CurWeapon event to keep setting player's speed
register_event("ResetHUD", "event_hud_reset", "be") // cuando se reinicia el HUD PLAYER
register_event("HLTV", "check_commands", "a")
//RegisterHam(Ham_Spawn, "player", "check_commands", 0); // Pre, player is dead
register_clcmd("fullupdate", "clcmd_fullupdate") //
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_will_restart_in")// cuendo el CS usa algun comando
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_Commencing")// cuendo el CS usa algun comando
register_forward(FM_PlayerPreThink,"Client_PreThink")
register_forward(FM_Touch,"fw_Touch") // Cuando el jugador o entidad toca algo
register_forward(FM_EmitSound, "fw_EmitSound")
register_logevent("event_roundstart", 2, "0=World triggered", "1=Round_Start") // detecta el empieze de la ronda
register_event("SendAudio", "event_twin", "a", "2&%!MRAD_terwin") // detecta cuando ganan T
register_event("SendAudio", "event_ctwin", "a", "2&%!MRAD_ctwin") // detecta cuadno ganan CT
register_logevent("event_roundend",2,"1=Game_Commencing") // detecta el final de la ronda
/////////////////////
/////////CVARS/////////
z_cost = register_cvar("z_cost","16000") // coste del zombi
z_health = register_cvar("z_health","1500") // vida del zombi
z_armor = register_cvar("z_armor","200") // armadura del zombi
z_speed = register_cvar("z_speed","420") // velocidad del zombi
z_gravity = register_cvar("z_gravity","0.5") // gravedad del zombi
z_buyable = register_cvar("z_buyable","1") // activar/desactivar comprar zombi
z_glow = register_cvar("z_glow", "20") // activar/desactivar recubrimiento team color
z_damage = register_cvar("z_damage","20") // daño de mas que causa el zombie
z_sounds = register_cvar("z_sounds","1") // activar/desactivar sonidos del zombie
///////////////////
///////////////STUFF////////////
register_cvar(PLUGIN,VERSION,FCVAR_SERVER)
/////////////////////////////////////
/////////////////////Server commands////////
maxspeed = get_cvar_num("sv_maxspeed") // obtiene el valor del comando del server
freeze = get_cvar_num("mp_freezetime") // obtiene el valor del comando del server
/////////////////////
}
public bool:zombie_has = false //para usar en otros plugins
public zombie_id = 0 //para usar en otros plugins
public plugin_precache() {
precache_model("models/player/zombieme/v_claws.mdl") // zombie knife model CT
precache_model("models/player/zombieme2/v_claws2.mdl") // zombie knife model T
precache_model("models/player/zombieme/zombieme.mdl") // zombie user model CT
precache_model("models/player/zombieme2/zombieme2.mdl") // zombie user model T
precache_sound("scientist/c1a0_sci_catscream.wav") // scream/chillido
new i
for (i = 0; i < ZOMBIE_DEATH; i++)
precache_sound(death_zombie[i])
for (i = 0; i < ZOMBIE_PAIN; i++)
precache_sound(pain_zombie[i]) // zombie pain sounds
for (i = 0; i < ZOMBIE_IDLE; i++)
precache_sound(idle_zombie[i])
for (i = 0; i < ZOMBIE_MISS; i++)
precache_sound(miss_zombie[i])
for (i = 0; i < ZOMBIE_HIT; i++)
precache_sound(hit_zombie[i])
/*
//pain_zombie[2]
precache_sound("zombie/zo_pain1.wav")
precache_sound("zombie/zo_pain2.wav")
//idle_zombie[7]
precache_sound("zombie/zo_alert10.wav")
precache_sound("zombie/zo_alert20.wav")
precache_sound("zombie/zo_alert30.wav")
precache_sound("zombie/zo_idle1.wav")
precache_sound("zombie/zo_idle2.wav")
precache_sound("zombie/zo_idle3.wav")
precache_sound("zombie/zo_idle4.wav")
//miss_zombie[2]
precache_sound("zombie/claw_miss1.wav")
precache_sound("zombie/claw_miss2.wav")
//hit_zombie[3]
precache_sound("zombie/claw_strike1.wav")
precache_sound("zombie/claw_strike2.wav")
precache_sound("zombie/claw_strike3.wav")
//death_zombie[2]
precache_sound("aslave/slv_die1.wav")
precache_sound("aslave/slv_die2.wav")
*/
}
public client_connect(id) {// resetea todas las variables
zombie[id] = false
zombie_has = false
zombie_id = id
nightvision[id] = false
z_vida[id] = false
z_life[id] = 0
}
public nombre_mapa(){
get_mapname(mapname, sizeof (mapname))
if( (equali(mapname, "as_", 3)) || (equali(mapname, "es_", 3)) ){
map_off = true
}
}
public buy_zombie(id) {
if (!get_pcvar_num(z_buyable)) {
client_print(0,print_chat,"[ZOMBIE] ZombieMe esta desactivado.")
return PLUGIN_HANDLED
}
if(!is_user_alive(id))
{
client_print(id,print_chat,"[ZOMBIE] Intentalo cuando estes vivo.")
return PLUGIN_HANDLED
}
if(zombie[id])
{
client_print(id, print_chat, "[ZOMBIE] Ya eres un Zombie.")
return PLUGIN_HANDLED
}
nombre_mapa()
if(map_off){
client_print(id,print_chat,"[ZOMBIE] En este mapa no se perminten Zombies.")
return PLUGIN_HANDLED
}
if((cs_get_user_money(id) - get_pcvar_num(z_cost)) < 0) // check if the player has enough cash
{
client_print(id,print_chat,"[ZOMBIE] Para convertirte en Zombie necesitas $%d", get_cvar_num("z_cost"))
return PLUGIN_HANDLED
}
zombie[id] = true
zombie_has = true
zombie_id = id
z_vida[id] = true
//z_life[id] = 0
event_player_spawn(id)
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(z_cost))
return PLUGIN_CONTINUE
}
public clcmd_fullupdate(){
return PLUGIN_HANDLED_MAIN
}
public event_roundstart(id){
roundstatus = RS_RUNNING
}
public event_twin(){
set_task(1.0, "event_roundend")
}
public event_ctwin(){
set_task(1.0, "event_roundend")
}
public event_roundend(){//si la ronda termino reiniciar el model del zombie para evitar errores al volver a cargarlo
roundstatus = RS_END
new players[32], count
get_players(players, count, "h")
for(new i = 0; i < count; i++)
{
if(zombie[players[i]])
cs_reset_user_model(players[i])
}
//return
}
public event_restart_attempt() {//para verificar si se ha reiniciado la ronda
new players[32], num
get_players(players, num, "a")
for (new i; i < num; ++i){
g_restart_attempt[players[i]] = true
}
}
public event_hud_reset(id) {//al empezar la ronda
if (g_restart_attempt[id]) {// si la ronda se a reiniciado
g_restart_attempt[id] = false
Remove_zombie(id)
}
event_roundstart(id)
//check_commands()
event_player_spawn(id)
}
public check_commands(){//para cambiar los comandos default del server si hay algun zombi
/*
new players[32], num;
get_players(players, num, "a")
new num_zombies = 0
for(new i = 0 ; i < num ; i++){
if(zombie[players[i]]){
num_zombies += 1
}
}
*/
new num_zombies = 0
for(new i = 1 ; i < 33 ; i++){
if(zombie[i] && is_user_connected(i)){
num_zombies += 1
}
}
if(num_zombies > 0){//si hay algun zombi
set_cvar_num( "mp_freezetime" , 0 )
set_cvar_num( "sv_maxspeed", 99999 )
}
else{//si no hay zombis
set_cvar_num( "mp_freezetime" , freeze )
set_cvar_num( "sv_maxspeed", maxspeed )
}
}
public allow_speed(id){//para setear la velocidad cuando freezetime termina
if(zombie[id]){
set_user_maxspeed(id, get_pcvar_float(z_speed))
}
return PLUGIN_CONTINUE
}
public check_team(){
new players[32], num;
get_players(players, num);
for(new i = 0 ; i < num ; i++){
new CsTeams:iTeam = cs_get_user_team(players[i])
if (iTeam == CS_TEAM_T) {
user_team[players[i]] = 1
}
else if (iTeam == CS_TEAM_CT) {
user_team[players[i]] = 2
}
else {
user_team[players[i]] = 0
}
//user_team[players[i]] = get_user_team(players[i])
}
}
public event_player_spawn(id) {//cuando se compra el zombie o se empieza la ronda siendo zombie
if(zombie[id]){//&& is_user_alive(id)
set_task(0.1, "RemovePickedWeapon", id) //removes zombies guns
//Zombie grito
emit_sound(id, CHAN_VOICE, "scientist/c1a0_sci_catscream.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
//////////////
if(z_vida[id] == true){//si acaba de comprar el zombie
z_life[id] = get_pcvar_num(z_health)
z_vida[id] = false
msg_zombie_transform(id)//client_print(id, print_chat, "[ZOMBIE] Te has transformando en un Zombie!")
}
set_user_health(id, z_life[id])
new roundtime = (get_cvar_num("mp_roundtime")*60)+freeze //segundos que dura cada ronda+freezetime
//client_print(id, print_chat, "mp_roundtime: %d", roundtime)
set_task(
1.0, //intervalo de tiempo
"zombiehealth", //funcion
id, //id
_, //parameter - An array contain data to send to the timer function
_, //len - Size of the array to send to the timer function
"a", //flags: "a" - Repetir "b" - Infinito "c" - cuando despues map timeleft "d" - cuando antes map timeleft
roundtime //ej: repetir 5 veces si usa flag "a"
)
set_user_armor(id, get_pcvar_num(z_armor))
check_commands()
//set_user_maxspeed(id, get_pcvar_float(z_speed))
new repeat = (freeze*60)+30 //*60= a milisegundos(0.1) + 30 por si acaso
set_task(0.1,"allow_speed", id, _, _, "a", repeat)
set_user_gravity(id, get_pcvar_float(z_gravity)) // needs to be a float (0.5 is 400 gravity)
set_user_footsteps(id,1)
if (roundstatus == RS_RUNNING){
check_team()
if(user_team[id] == 1) //terrist
{
cs_set_user_model(id, "zombieme2")
//client_print(0,print_chat,"[ZOMBIE] ZombieMe TERROR.")
}
else
{
if(user_team[id] == 2) //counter-terrist
{
cs_set_user_model(id, "zombieme")
//client_print(0,print_chat,"[ZOMBIE] ZombieMe POLICE.")
}
else //3 = spectator, 0 = no play
{
cs_set_user_model(id, "zombieme")
//client_print(0,print_chat,"[ZOMBIE] ZombieMe DEFAULT.")
}
}
//cs_set_user_model(id, "zombieme")
}
cs_set_user_nvg(id,0)
zombiesounds(id)
zombiehealth(id)
set_vision(id)
set_glow(id)
//return PLUGIN_CONTINUE
}
else{
cs_reset_user_model(id)
set_user_footsteps(id,0)
set_user_rendering(id)
//return PLUGIN_CONTINUE
}
}
public set_vision(id) {//pone el model
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(~0)
write_short(~0)
write_short(0)
write_byte(255)
write_byte(0)
write_byte(0)
write_byte(80)
message_end()
check_team()
if (user_team[id] == 1){ //terrorist
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/player/zombieme2/v_claws2.mdl"))
}
else { //2 = counter-terrist, 3 = spectator, 0 = no play
set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/player/zombieme/v_claws.mdl"))
}
//set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/player/zombieme/v_claws.mdl"))
set_pev(id, pev_weaponmodel, engfunc(EngFunc_AllocString, ""))
}
public set_glow(id) {// pone una especie de escudo del color del equipo al zommbie
if(!get_cvar_num("z_glow")) {
return PLUGIN_CONTINUE
}
new CsTeams:team = cs_get_user_team(id)
if(team == CS_TEAM_T) //terrist
{
set_user_rendering(id, kRenderFxGlowShell, 150, 0, 0, kRenderNormal, get_pcvar_num(z_glow))
}
else if(team == CS_TEAM_CT) //counter-terrist
{
set_user_rendering(id, kRenderFxGlowShell, 0, 0, 150, kRenderNormal, get_pcvar_num(z_glow))
}
return PLUGIN_CONTINUE
}
public msg_zombie_transform(id){
static msg[191]
//msg = ("^x01- Estas en el MAPA: ^x04%s", mapname)
format (msg, 190, "^x03[ZOMBIE] Te has transformando en un Zombie!")
//^x03 = Color del equipo - ^x04 = Verde
message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id)
write_byte(id)
write_string(msg)
message_end()
}
public event_weap_pickup(id) {//cuando recoje un arma
if(zombie[id]){
set_task(0.1, "RemovePickedWeapon", id)
}
return PLUGIN_HANDLED
}
public RemovePickedWeapon(id) {//para soltar todas las armas
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_CONTINUE
if(zombie[id]){
engclient_cmd(id, "drop", "weapon_c4")
strip_user_weapons(id)
give_item(id,"weapon_knife")
set_user_maxspeed(id, get_pcvar_float(z_speed))
}
return PLUGIN_HANDLED
}
public fw_Touch(pToucher, pTouched)
{
if ( !pev_valid(pToucher) || !pev_valid(pTouched) )
return FMRES_IGNORED
if (!is_user_connected(pTouched) )
return FMRES_IGNORED
if (!zombie[pTouched] )
return FMRES_IGNORED
new className[32]
pev(pToucher, pev_classname, className, 31)
if ( equal(className, "weaponbox") || equal(className, "armoury_entity" ) || equal(className, "weapon_shield" ) )
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public zombiehealth(id) {//vida del zombi
if(zombie[id] && z_life[id] >= 1)
{
//new id = read_data(0)
//new health = read_data(1)
set_hudmessage(//BLANCO
255, //Red (0-255)
255, //Green (0-255)
255, //Blue (0-255)
0.11, //Float:x -1.0 = center
0.77, //Float:y
_, //efectos (0 - off, 1 - parpadear, 2 - aparecer)
1.00, //Float:fxtime (tiempo del efecto)
1.0, //Float:holdtime (tiempo en pantalla ej 5.0 segundos)
_, //Float:fadeintime
_, //Float:fadeouttime
4 //channel
)
show_hudmessage(id, "Vida: %d ", z_life[id])
}
return PLUGIN_CONTINUE
}
public event_DeathMsg() { //despues de morir
//new killer = read_data(1)
//new victim = read_data(2)
new id
id = read_data(2)
set_task(1.0,"Remove_zombie",id)//el que muere(victima) se le resetean las variables
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), { 0, 0, 0 }, id)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte(255)//r 100
write_byte(0)//g 0
write_byte(0)//b 0
write_byte(0) //50
message_end()
return PLUGIN_CONTINUE
}
public Remove_zombie(id){// declara que ya no es zombi
zombie[id] = false
zombie_has = false
zombie_id = id
nightvision[id] = false
z_vida[id] = false
z_life[id] = 0
check_commands()
}
public event_CurWeapon(id) { // declara la velocidad continuamente al cojer/dejar/cambiar de arma
if(is_user_alive(id) && zombie[id]){
set_user_maxspeed(id, get_pcvar_float(z_speed))
set_vision(id)
}
}
/*
public event_damage_pain(id) {//daño recibido
new damage = read_data(2)
new bodypart, weapon
new enemy = get_user_attacker(id, weapon, bodypart)
//client_print(enemy, print_chat, "danio: %d", damage)
if ( zombie[id] && is_user_alive(id))//si el que recibe daño es zombie
{
//z_life[id] = floatround( float(get_user_health(id)) - (float(damage)) )
z_life[id] = get_user_health(id)
//client_print(id, print_chat, "Vida restante: %f", z_life[id])
zombiehealth(id)
emit_sound(id, CHAN_VOICE, pain_zombie[random_num(0, ZOMBIE_PAIN - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
//return
}
if(zombie[enemy] && weapon == CSW_KNIFE && (enemy >= 1) && (enemy <= 32) && is_user_alive(id))//si el que causa el daño es zombi && is_user_alive(id)
{
new Xdamage = floatround( float(get_user_health(id)) - (float(damage) + get_pcvar_float(z_damage)) )
//Xdamage = la vida de la victima -(el daño echo + el daño extra por ser zombie)
if(Xdamage <= 0){
//sumara las muertes, frags... al marcador
new frags, _frags//, deaths
//suma +1 a las bajas causadas por el asesino
frags = get_user_frags(enemy) + 1
set_user_frags(enemy, frags)
//suma +1 a los asesinatos de la victima (el CS por default resta -1)
_frags = get_user_frags(id) + 1
set_user_frags(id, _frags)
//suma +1 a las muertes de la victima
//NO ES NECESARIO el CS suma +1 por default
//deaths = cs_get_user_deaths(id) + 1
//cs_set_user_deaths(id, deaths)
//deaths = cs_get_user_deaths(id) + 1
//cs_set_user_deaths(id, deaths)
//para poner el sprite y quien mato a quien
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
write_byte(id)
write_byte(enemy)
write_byte(0)
write_string("knife")
message_end()
set_user_health(id, 0)
}
else{
set_user_health(id, Xdamage)
}
//return
}
//return PLUGIN_CONTINUE
}
*/
public event_damage_pain(victim) {//daño recibido
new damage = read_data(2)
new bodypart, weapon
new killer = get_user_attacker(victim, weapon, bodypart)
//client_print(killer, print_chat, "danio: %d", damage)
if ( zombie[victim] && is_user_alive(victim))//si el que recibe daño es zombie
{
//z_life[id] = floatround( float(get_user_health(victim)) - (float(damage)) )
z_life[victim] = get_user_health(victim)
//client_print(victim, print_chat, "Vida restante: %f", z_life[id])
zombiehealth(victim)
emit_sound(victim, CHAN_VOICE, pain_zombie[random_num(0, ZOMBIE_PAIN - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
//return
}
if(zombie[killer] && weapon == CSW_KNIFE && is_user_alive(victim))//si el que causa el daño es zombi
{
new Xdamage = floatround( float(get_user_health(victim)) - (float(damage) + get_pcvar_float(z_damage)) )
//Xdamage = la vida de la victima -(el daño echo + el daño extra por ser zombie)
if(Xdamage <= 0){
if(get_user_team(victim) == get_user_team(killer)){//TeamKiller
//sumara las muertes, frags... al marcador
new frags, _frags//, deaths
//suma -1 a las bajas causadas por el asesino
frags = get_user_frags(killer) - 1
set_user_frags(killer, frags)
//suma +1 a los asesinatos de la victima (el CS por default resta -1)
_frags = get_user_frags(victim) + 1
set_user_frags(victim, _frags)
}
else{
//sumara las muertes, frags... al marcador
new frags, _frags//, deaths
//suma +1 a las bajas causadas por el asesino
frags = get_user_frags(killer) + 1
set_user_frags(killer, frags)
//suma +1 a los asesinatos de la victima (el CS por default resta -1)
_frags = get_user_frags(victim) + 1
set_user_frags(victim, _frags)
}
//para poner el sprite y quien mato a quien
set_msg_block(get_user_msgid("DeathMsg"),BLOCK_ONCE)
message_begin(MSG_ALL, get_user_msgid("DeathMsg"), {0, 0, 0}, 0)
write_byte(victim)
write_byte(killer)
write_byte(0)
write_string("knife")
message_end()
set_user_health(victim, 0)
}
else{
//client_print(0, print_chat, "Vida restante victim: %d", Xdamage)
set_user_health(victim, Xdamage)
}
//return
}
return PLUGIN_CONTINUE
}
public zombiesounds(id){//reproduce sonidos zombie aleatoriamente mientras la ronda este en curso
if (roundstatus == RS_RUNNING && get_pcvar_num(z_sounds))
{
if (random_num(1, 35) == 5 && zombie[id]) {
if(is_user_alive(id))
emit_sound(id, CHAN_VOICE, idle_zombie[random_num(0, ZOMBIE_IDLE-1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
}
}
if(zombie[id])
set_task(1.0,"zombiesounds",id)
}
public Client_PreThink(id){//para poner la vision nocturna roja
if(zombie[id] && is_user_alive(id) && nightvision[id]) {
new pos[3]
get_user_origin(id, pos)
message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id)
write_byte(TE_DLIGHT)
write_coord(pos[0])
write_coord(pos[1])
write_coord(pos[2])
write_byte(80)
write_byte(50)
write_byte(0)
write_byte(0)
write_byte(5)
write_byte(10)
message_end()
}
return PLUGIN_CONTINUE
}
public client_nightvision(id){//para saber si se esta usando la vision nocturna (si se ha pulsado la N)
if(nightvision[id])
{
nightvision[id] = false
return PLUGIN_HANDLED
}
if(!nightvision[id])
{
nightvision[id] = true
}
return PLUGIN_CONTINUE
}
public fw_EmitSound(id, channel, sample[]){//para emitir sonidos segun las teclas pulsadas
if(sample[0] == 'p' && sample[1] == 'l'&& sample[7] == 'd' && zombie[id])
{
emit_sound(id, CHAN_WEAPON, death_zombie[random_num(0, ZOMBIE_DEATH - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
if ( !is_user_alive(id) || !zombie[id] )
return FMRES_IGNORED
if ( sample[0] == 'w' && sample[1] == 'e' && sample[8] == 'k' && sample[9] == 'n' )
{
switch(sample[17])
{
case 'l': return FMRES_SUPERCEDE
case 's', 'w':
{
emit_sound(id, CHAN_WEAPON, miss_zombie[random_num(0, ZOMBIE_MISS - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
case 'b', '1', '2', '3', '4':
{
emit_sound(id, CHAN_WEAPON, hit_zombie[random_num(0, ZOMBIE_HIT - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return FMRES_SUPERCEDE
}
}
}
return FMRES_IGNORED
}
public zombie_menu(id){
/*
if(!is_user_alive(id)){
return
}
*/
if (!(get_user_flags(id)&ADMIN_KICK)){
server_print("[ZOMBIE] El Menu ZombieMe es solo para admins...")
client_print(id,print_chat,"[ZOMBIE] El Menu ZombieMe es solo para admins...")
return
}
/*
Colores:
\w = Blanco
\r = Rojo
\d = Gris
\y = Amarillo
^t = tabulacion (espacio)
^n = salto de linea
\R = align text to the right
\a => Beep
\b => Backspace
\e => Escape
\n => Nueva Línea
\r => Retorno de Carro (se utiliza en Windows para una línea nueva "/r/n")
\t => Tabulación Horizontal
\v => Tabulación Vertical
\\ => Inserta literalmente el símbolo '\'
\’’ => Inserta literalmente el símbolo "'"
\" => Inserta literalmente el símbolo '"'
\% => Inserta literalmente el símbolo '%'
\ddd => código de caracteres, con el código en decimal "ddd"
\xhhh => código de caracteres, con el código en hexadecimal "hhh"
*/
new menu = menu_create("\yTransformar en Zombie a :", "menu_trasform")
menu_additem(menu, "T", "1")
menu_additem(menu, "CT", "2")
menu_additem(menu, "Todos", "3")
menu_additem(menu, "Jugador", "4")
menu_setprop(menu, MPROP_EXITNAME, "\ySalir")
menu_setprop(menu, MPROP_NEXTNAME, "\yMas")
//menu_setprop(menu, MPROP_BACKNAME, "\yAtras")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
}
public menu_trasform(id, menu, item){
if(item == MENU_EXIT){
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback);
new iKey = str_to_num(data);
switch(iKey){
case 1:{ // T
transform_T(id)
}
case 2:{ // CT
transform_CT(id)
}
case 3:{ // Todos
transform_ALL(id)
}
case 4:{ // Jugador
transform_ONE(id)
}
}
//descongelar(id)
menu_destroy(menu)
return PLUGIN_HANDLED
}
public transform_T(id){
check_team()
new players[32], num;
get_players(players, num);
new num_players_zombieme = 0
for(new i = 0 ; i < num ; i++){//busca a todos los jugadores
if( is_user_alive(players[i]) ){//si el jugador esta vivo
if(user_team[players[i]] == 1){//si el jugador es terrorista
if(zombie[players[i]] == false){//si no es zombie
zombie[players[i]] = true
zombie_has = true
zombie_id = players[i]
z_vida[players[i]] = true
z_life[players[i]] = 0
num_players_zombieme += 1
event_player_spawn(players[i])
}
}
}
}
if(num_players_zombieme == 0){
client_print(id,print_chat,"[ZOMBIE] No se encontro ningun jugador humano en el equipo Terrorista.")
}
else{
client_print(id,print_chat,"[ZOMBIE] Se transformaron en Zombies %d jugadores del equipo Terrorista.", num_players_zombieme)
}
//menu_destroy(menu)
return PLUGIN_HANDLED
}
public transform_CT(id){
check_team()
new players[32], num;
get_players(players, num);
new num_players_zombieme = 0
for(new i = 0 ; i < num ; i++){//busca a todos los jugadores
if( is_user_alive(players[i]) ){//si el jugador esta vivo
if(user_team[players[i]] == 2){//si el jugador es policia
if(zombie[players[i]] == false){//si no es zombie
zombie[players[i]] = true
zombie_has = true
zombie_id = players[i]
z_vida[players[i]] = true
z_life[players[i]] = 0
num_players_zombieme += 1
event_player_spawn(players[i])
}
}
}
}
if(num_players_zombieme == 0){
client_print(id,print_chat,"[ZOMBIE] No se encontro ningun jugador humano en el equipo Anti-Terrorista.")
}
else{
client_print(id,print_chat,"[ZOMBIE] Se transformaron en Zombies %d jugadores del equipo Anti-Terrorista.", num_players_zombieme)
}
//menu_destroy(menu)
return PLUGIN_HANDLED
}
public transform_ALL(id){
check_team()
new players[32], num;
get_players(players, num);
new num_players_zombieme = 0
for(new i = 0 ; i < num ; i++){//busca a todos los jugadores
if( is_user_alive(players[i]) ){//si el jugador esta vivo
if(user_team[players[i]] == 1 || user_team[players[i]] == 2){//si el jugador es terrorista o policia
if(zombie[players[i]] == false){//si no es zombie
zombie[players[i]] = true
zombie_has = true
zombie_id = players[i]
z_vida[players[i]] = true
z_life[players[i]] = 0
num_players_zombieme += 1
event_player_spawn(players[i])
}
}
}
}
if(num_players_zombieme == 0){
client_print(id,print_chat,"[ZOMBIE] No se encontro ningun jugador humano.")
}
else{
client_print(id,print_chat,"[ZOMBIE] Se transformaron en Zombies %d jugadores.", num_players_zombieme)
}
//menu_destroy(menu)
return PLUGIN_HANDLED
}
public transform_ONE(id){
new players[32], num;
new szName[32], szUserId[32];
get_players(players, num);
new menu = menu_create("\yTransformar en Zombie a :", "menu_transform_ONE")
for(new i = 0 ; i < num ; i++){//busca a todos los jugadores
get_user_name( players[i], szName, charsmax( szName ) );
formatex( szUserId, charsmax( szUserId ), "%d", get_user_userid(players[i]) );
menu_additem( menu, szName, szUserId, 0 );
}
menu_setprop(menu, MPROP_EXITNAME, "\ySalir")
menu_setprop(menu, MPROP_NEXTNAME, "\yMas")
menu_setprop(menu, MPROP_BACKNAME, "\yAtras")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
//menu_destroy(menu)
return PLUGIN_HANDLED
}
public menu_transform_ONE(id, menu, item){
if(item == MENU_EXIT){
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64]
new access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), iName, charsmax(iName), callback);
new iKey = str_to_num(data); //guarda el id del jugador elegido
new player_id = find_player( "k", iKey ); // flag "k" : para buscar al jugador por id
if ( player_id && is_user_alive(player_id) ){//si el jugador esta vivo
if(zombie[player_id] == true){
client_print(id,print_chat,"[ZOMBIE] %s ya esta transformado en Zombie.", iName)
}
else{//si el jugador no es zombi
zombie[player_id] = true
zombie_has = true
zombie_id = player_id
z_vida[player_id] = true
z_life[player_id] = 0
event_player_spawn(player_id)
client_print(id,print_chat,"[ZOMBIE] %s se transformo en Zombie.", iName)
new Admin_Name[32]
get_user_name( id, Admin_Name, charsmax( Admin_Name ) );
client_print(player_id,print_chat,"[ZOMBIE] El Admin %s te transformo en Zombie.", Admin_Name)
}
}
else{
client_print(id,print_chat,"[ZOMBIE] %s esta muerto, no se puede transformar en Zombie.", iName)
}
menu_destroy(menu)
return PLUGIN_HANDLED
}