Raised This Month: $ Target: $400
 0% 

zombieme.amxx


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
albjb
Junior Member
Join Date: Jul 2013
Old 07-31-2013 , 05:52   zombieme.amxx
Reply With Quote #1

I'm Spanish, sorry my English.
I'm editing the code of this plugin to correct errors, but still fails and is no longer to do.

(With debug in plugins.ini)
- In the Log me in the event fails Damage (event_damage_pain (id))
But in the game the only mistake I noticed is that occasionally when I kill zombie life still appears showing negative (-21) and not die until the next round ....

- Another mistake that I appeared in the log was that it did not appear the skins / models Player. But it seems that I've resolved I'm still trying.

- And another error that does not appear in the log is that of public check_commands (id) should change mp_freezetime when zombies to 0 as you do not leave it as it was configured there. But sometimes it does not. I'm still trying.

thanks

The 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_costz_healthz_armorz_speedz_gravityz_buyablez_glowz_damagez_sounds
#define MAX_PLAYERS 32
new bool:g_restart_attempt[MAX_PLAYERS 1]
new 
freezemaxspeed

new bool:map_off false
new mapname[32]

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
////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("Damage","event_damage_pain","be")         // 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", "event_hud_reset", "a", "1=0", "2=0")    // cuando empieza una nueva ronda
    
register_event("HLTV""event_hud_reset""be")            // cuando empieza una nueva ronda
    
register_event("HLTV""check_commands""a")
    
//register_event("Health", "zombiehealth", "b")            // actualiza la vida en HUD PLAYER
    
register_clcmd("fullupdate""clcmd_fullupdate")        // 
    
register_event("TextMsg""event_restart_attempt""a""2=#Game_will_restart_in")// 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////////
    //server_cmd("sv_maxspeed 99999")     // necesario para la velocidad del zombi - error
    //set_cvar_num( "sv_maxspeed", 99999 )    // necesario para la velocidad del zombi - error
    
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
    //server_cmd("amx_restrict on shield")    // para que no se pueda comprar el escudo en el server - error
    /////////////////////
}

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

    
for(new 0sizeof(pain_zombie); i++){
        
engfunc(EngFunc_PrecacheSoundpain_zombie[i])
    }
    for(new 
0sizeof(idle_zombie); i++){
        
engfunc(EngFunc_PrecacheSoundidle_zombie[i])
    }
    for(new 
0sizeof(miss_zombie); i++){
        
engfunc(EngFunc_PrecacheSoundmiss_zombie[i])
    }
    for(new 
0sizeof(hit_zombie); i++){
        
engfunc(EngFunc_PrecacheSoundhit_zombie[i])
    }
    for(new 
0sizeof(death_zombie); i++){
        
engfunc(EngFunc_PrecacheSounddeath_zombie[i])
    }
    
    
precache_sound("scientist/c1a0_sci_catscream.wav")     // scream/chillido
    /*    
    //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(mapnamesizeof (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(idprint_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
(playerscount"h")
    for(new 
0counti++)
    {
        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
(playersnum"a")
    for (new 
inum; ++i){
        
g_restart_attempt[players[i]] = true
        Remove_zombie
(i)
    }
}

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 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" )
        
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(idget_pcvar_float(z_speed))
    }
    return 
PLUGIN_CONTINUE
}
public 
check_team(){
    new 
players[32], num;
    
get_players(playersnum);
    
    
    for(new 
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(idCHAN_VOICE"scientist/c1a0_sci_catscream.wav"1.0ATTN_NORM0PITCH_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(idz_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(idget_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(idget_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_ONEget_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(idpev_viewmodelengfunc(EngFunc_AllocString"models/player/zombieme2/v_claws2.mdl"))
    }
    else { 
//2 = counter-terrist, 3 = spectator, 0 = no play
        
set_pev(idpev_viewmodelengfunc(EngFunc_AllocString"models/player/zombieme/v_claws.mdl"))
    }
    
    
//set_pev(id, pev_viewmodel, engfunc(EngFunc_AllocString, "models/player/zombieme/v_claws.mdl"))
    
set_pev(idpev_weaponmodelengfunc(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(idkRenderFxGlowShell15000kRenderNormalget_pcvar_num(z_glow))
    } 
    
    else if(
team == CS_TEAM_CT//counter-terrist
    

        
set_user_rendering(idkRenderFxGlowShell00150kRenderNormalget_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 (msg190"^x03[ZOMBIE] Te has transformando en un Zombie!")
    
//^x03 = Color del equipo - ^x04 = Verde
    
message_begin(MSG_ONEget_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(idget_pcvar_float(z_speed))
    }
    return 
PLUGIN_HANDLED


public 
fw_Touch(pToucherpTouched)//cuando el jugador toca
{
    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(pToucherpev_classnameclassName31)
    
    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_ONEget_user_msgid("ScreenFade"), { 00}, 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(idget_pcvar_float(z_speed))
        
set_vision(id)
    }        
}
public 
event_damage_pain(id) {//daņo recibido
    
new damage read_data(2)
    
    new 
bodypartweapon
    
new enemy get_user_attacker(idweaponbodypart)
    
//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)
        
/*
        new z_health = floatround( float(get_user_health(id)) - (float(damage)) )
        if(z_health <= 0){
            set_user_health(id, 0)
        }
        */
        //client_print(id, print_chat, "Vida restante: %f", z_life[id])
        
zombiehealth(id)
        
emit_sound(idCHAN_VOICEpain_zombie[random_num(0ZOMBIE_PAIN 1)], 1.0ATTN_NORM0PITCH_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 floatroundfloat(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)
        /*
        new vida = floatround(float(get_user_health(id)))
        new danio = floatround(float(damage) + get_pcvar_float(z_damage))
        new total = vida-danio
        client_print(enemy, print_chat, "Vida Victima: %d-%d =%d", vida, danio, total )
        */
        
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
(enemyfrags)
            
//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_ALLget_user_msgid("DeathMsg"), {000}, 0)
            
write_byte(enemy)
            
write_byte(id)
            
write_byte(0)
            
write_string("knife")
            
message_end()    
                
                
            
set_user_health(id0)
        }
        else{
            
set_user_health(idXdamage)
        }
        
//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(135) == && zombie[id]) {
            if(
is_user_alive(id))
                
emit_sound(idCHAN_VOICEidle_zombie[random_num(0ZOMBIE_IDLE-1)], 1.0ATTN_NORM0PITCH_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(idpos)
        
message_begin(MSG_ONESVC_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(idchannelsample[])//para emitir sonidos segun las teclas pulsadas
{
    if(
sample[0] == 'p' && sample[1] == 'l'&& sample[7] == 'd' && zombie[id])
    {
        
emit_sound(idCHAN_WEAPON,  death_zombie[random_num(0ZOMBIE_DEATH 1)], VOL_NORMATTN_NORM0PITCH_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(idCHAN_WEAPONmiss_zombie[random_num(0ZOMBIE_MISS 1)], VOL_NORMATTN_NORM0PITCH_NORM)    
                return 
FMRES_SUPERCEDE
            
}
            
            case 
'b''1''2''3''4':
            {
                
emit_sound(idCHAN_WEAPONhit_zombie[random_num(0ZOMBIE_HIT 1)], VOL_NORMATTN_NORM0PITCH_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(menuMPROP_EXITNAME"\ySalir")
    
menu_setprop(menuMPROP_NEXTNAME"\yMas")
    
//menu_setprop(menu, MPROP_BACKNAME, "\yAtras")
    
menu_setprop(menuMPROP_EXITMEXIT_ALL)
    
    
menu_display(idmenu0)
}
public 
menu_trasform(idmenuitem){ 
    if(
item == MENU_EXIT){
        
menu_destroy(menu
        return 
PLUGIN_HANDLED 
    

    
    new 
data[6], iName[64
    new 
accesscallback 

    menu_item_getinfo
(menuitemaccessdata5iName63callback); 
    
    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(playersnum);
    new 
num_players_zombieme 0
    
for(new 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(playersnum);
    new 
num_players_zombieme 0
    
for(new 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(playersnum);
    new 
num_players_zombieme 0
    
for(new num i++){//busca a todos los jugadores
        
if( is_user_alive(players[i]) ){//si el jugador esta vivo
            
if(user_team[players[i]] == || 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(playersnum);
    new 
menu menu_create("\yTransformar en Zombie a :""menu_transform_ONE"
    for(new 
num i++){//busca a todos los jugadores
        
get_user_nameplayers[i], szNamecharsmaxszName ) );
        
formatexszUserIdcharsmaxszUserId ), "%d"get_user_userid(players[i]) );
        
menu_additemmenuszNameszUserId);
    }
    
menu_setprop(menuMPROP_EXITNAME"\ySalir")
    
menu_setprop(menuMPROP_NEXTNAME"\yMas")
    
menu_setprop(menuMPROP_BACKNAME"\yAtras")
    
menu_setprop(menuMPROP_EXITMEXIT_ALL)
    
    
menu_display(idmenu0)

    
//menu_destroy(menu) 
    
return PLUGIN_HANDLED 
}
public 
menu_transform_ONE(idmenuitem){
    if(
item == MENU_EXIT){
        
menu_destroy(menu
        return 
PLUGIN_HANDLED 
    

    
    new 
data[6], iName[64
    new 
accesscallback 

    menu_item_getinfo
(menuitemaccessdatacharsmax(data), iNamecharsmax(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_nameidAdmin_NamecharsmaxAdmin_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 


Last edited by albjb; 08-10-2013 at 11:59.
albjb is offline
albjb
Junior Member
Join Date: Jul 2013
Old 07-31-2013 , 17:58   Re: zombieme.amxx
Reply With Quote #2

Este es el unico error que me detecta por ahora :
L 07/31/2013 - 16:21:18: [AMXX] Displaying debug trace (plugin "zombieme.amxx")
L 07/31/2013 - 16:21:18: [AMXX] Run time error 4: index out of bounds
L 07/31/2013 - 16:21:18: [AMXX] [0] zombieme.sma::event_damage_pain (line 506)
albjb is offline
albjb
Junior Member
Join Date: Jul 2013
Old 07-31-2013 , 17:59   Re: zombieme.amxx
Reply With Quote #3

edit the event:
(This testing phase)
PHP Code:
public event_damage_pain(id) {//daņo recibido
    
new damage read_data(2)
    
    new 
bodypartweapon
    
new enemy get_user_attacker(idweaponbodypart)
    if ( 
zombie[id] )//si el que recibe daņo es zombie 
    
{
        
z_life[id] = floatroundfloat(get_user_health(id)) - (float(damage)) )
        
//client_print(id, print_chat, "Total del danio recibido: %f", z_life[id])
        
zombiehealth(id)
        
emit_sound(idCHAN_VOICEpain_zombie[random_num(0ZOMBIE_PAIN 1)], 1.0ATTN_NORM0PITCH_NORM)
        return
    } 
    if(
zombie[enemy] && weapon == CSW_KNIFE && is_user_alive(id))//si el que causa el daņo es zombi    && is_user_alive(id)
    
{
        new 
Xdamage floatroundfloat(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)
        /*
        new vida = floatround(float(get_user_health(id)))
        new danio = floatround(float(damage) + get_pcvar_float(z_damage))
        new total = vida-danio
        client_print(enemy, print_chat, "Vida Victima: %d-%d =%d", vida, danio, total )
        */
        
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
(enemyfrags)
            
//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_ALLget_user_msgid("DeathMsg"), {000}, 0)
            
write_byte(enemy)
            
write_byte(id)
            
write_byte(0)
            
write_string("knife")
            
message_end()    
                
                
            
set_user_health(id0)
        }
        else{
            
set_user_health(idXdamage)
        }
        return
    }
    
//return PLUGIN_CONTINUE


Last edited by albjb; 07-31-2013 at 17:59.
albjb is offline
akcaliberg
Senior Member
Join Date: Nov 2011
Location: Istanbul
Old 07-31-2013 , 18:18   Re: zombieme.amxx
Reply With Quote #4

be sure that the enemy is a player.

Last edited by akcaliberg; 08-02-2013 at 10:18.
akcaliberg is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 08-01-2013 , 00:59   Re: zombieme.amxx
Reply With Quote #5

Quote:
Originally Posted by akcaliberg View Post
be sure that the enemy is a player.

if( !(1<= enemy <= 32) ) return;
That is not the correct method for determining if it is a player. 32 should be a cached value of get_maxplayers().
__________________
fysiks is offline
akcaliberg
Senior Member
Join Date: Nov 2011
Location: Istanbul
Old 08-01-2013 , 16:45   Re: zombieme.amxx
Reply With Quote #6

can a non-player entitys index be between 1 and 32 ?
akcaliberg is offline
YamiKaitou
Has a lovely bunch of coconuts
Join Date: Apr 2006
Location: Texas
Old 08-02-2013 , 08:26   Re: zombieme.amxx
Reply With Quote #7

Quote:
Originally Posted by akcaliberg View Post
can a non-player entitys index be between 1 and 32 ?
Entities start at MaxPlayers+1. So if you have an 18 slot server, Entities will start at 19
__________________
ProjectYami Laboratories

I do not browse the forums regularly anymore. If you need me for anything (asking questions or anything else), then PM me (be descriptive in your PM, message containing only a link to a thread will be ignored).
YamiKaitou is offline
akcaliberg
Senior Member
Join Date: Nov 2011
Location: Istanbul
Old 08-02-2013 , 10:17   Re: zombieme.amxx
Reply With Quote #8

okay thanks. edited
akcaliberg is offline
albjb
Junior Member
Join Date: Jul 2013
Old 08-10-2013 , 11:56   Re: zombieme.amxx
Reply With Quote #9

Re-edit the event event_damage_pain (id) :
PHP Code:
public event_damage_pain(id) {//daņo recibido
    
new damage read_data(2)
    
    new 
bodypartweapon
    
new enemy get_user_attacker(idweaponbodypart)
    
//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)
        
/*
        new z_health = floatround( float(get_user_health(id)) - (float(damage)) )
        if(z_health <= 0){
            set_user_health(id, 0)
        }
        */
        //client_print(id, print_chat, "Vida restante: %f", z_life[id])
        
zombiehealth(id)
        
emit_sound(idCHAN_VOICEpain_zombie[random_num(0ZOMBIE_PAIN 1)], 1.0ATTN_NORM0PITCH_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 floatroundfloat(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)
        /*
        new vida = floatround(float(get_user_health(id)))
        new danio = floatround(float(damage) + get_pcvar_float(z_damage))
        new total = vida-danio
        client_print(enemy, print_chat, "Vida Victima: %d-%d =%d", vida, danio, total )
        */
        
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
(enemyfrags)
            
//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_ALLget_user_msgid("DeathMsg"), {000}, 0)
            
write_byte(enemy)
            
write_byte(id)
            
write_byte(0)
            
write_string("knife")
            
message_end()    
                
                
            
set_user_health(id0)
        }
        else{
            
set_user_health(idXdamage)
        }
        
//return
    
}
    
//return PLUGIN_CONTINUE

And another error detected (precache 512 limit)
maps give me some mistake...
there any difference between :
PHP Code:
engfunc (EngFunc_PrecacheSound "zombie/claw_strike1.wav")
or
precache_sound ("zombie/claw_strike1.wav"
1 - Which is better?
2 - There is something to increase the precache 512 limit work??

Last edited by albjb; 08-10-2013 at 11:58.
albjb is offline
YamiKaitou
Has a lovely bunch of coconuts
Join Date: Apr 2006
Location: Texas
Old 08-10-2013 , 12:31   Re: zombieme.amxx
Reply With Quote #10

Quote:
Originally Posted by albjb View Post
2 - There is something to increase the precache 512 limit work??
You cannot increase the limit
__________________
ProjectYami Laboratories

I do not browse the forums regularly anymore. If you need me for anything (asking questions or anything else), then PM me (be descriptive in your PM, message containing only a link to a thread will be ignored).
YamiKaitou is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 15:56.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode