AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   zombieme.amxx (https://forums.alliedmods.net/showthread.php?t=222212)

albjb 07-31-2013 05:52

zombieme.amxx
 
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 



albjb 07-31-2013 17:58

Re: zombieme.amxx
 
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 07-31-2013 17:59

Re: zombieme.amxx
 
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



akcaliberg 07-31-2013 18:18

Re: zombieme.amxx
 
be sure that the enemy is a player.

fysiks 08-01-2013 00:59

Re: zombieme.amxx
 
Quote:

Originally Posted by akcaliberg (Post 2003120)
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().

akcaliberg 08-01-2013 16:45

Re: zombieme.amxx
 
can a non-player entitys index be between 1 and 32 ?

YamiKaitou 08-02-2013 08:26

Re: zombieme.amxx
 
Quote:

Originally Posted by akcaliberg (Post 2003761)
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

akcaliberg 08-02-2013 10:17

Re: zombieme.amxx
 
okay thanks. edited

albjb 08-10-2013 11:56

Re: zombieme.amxx
 
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??

YamiKaitou 08-10-2013 12:31

Re: zombieme.amxx
 
Quote:

Originally Posted by albjb (Post 2010007)
2 - There is something to increase the precache 512 limit work??

You cannot increase the limit


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

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