[TUT] Zombie Plague: Colocar sonidos custom "death" y "pain"
#1
Hola amigos, en el siguiente post les vengo a enseñar a como colocar sonidos custom de "muerte" (death) y "dolor" (pain) para la clase de zombie que ustedes quieran agregarle, en realidad esto funciona en cualquier plugin, independientemente si es o no zombie plague, pero en esta ocasión va dirigido para el zombie plague:

1.- Primero que todo, debemos tener a mano nuestros sonidos (recursos) que vamos a utilizar de muerte y dolor (death and pain) y lo guardamos en nuestra carpeta de sonidos, que por defecto sería en cstrike/sound o si lo quieren lo pueden guardar en otra subcarpeta como en cstrike/sound/zombie_plague

2.- Luego de que tengamos a nuestra disposición los recursos, agarramos el archivo scripting (.sma) a editar de la clase de zombie que queramos, en este caso ocupare el que viene por defecto:

zp_zombie_classes_example.sma
Código PHP:
/*================================================================================
    
    -----------------------------------
    -*- [ZP] Zombie Classes Example -*-
    -----------------------------------
    
    ~~~~~~~~~~~~~~~
    - Description -
    ~~~~~~~~~~~~~~~
    
    This is just an example on how to add additional zombie classes to ZP.
    
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>

// Zombie Attributes
new const zclass_name[] = "My Zombie" // name
new const zclass_info[] = "My Stats" // description
new const zclass_model[] = "zombie_source" // model
new const zclass_clawmodel[] = "v_knife_zombie.mdl" // claw model
const zclass_health 1800 // health
const zclass_speed 190 // speed
const Float:zclass_gravity 1.0 // gravity
const Float:zclass_knockback 1.0 // knockback

// Class IDs
new g_zclassid1

// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
    
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
    
    
// Register the new class and store ID for reference
    
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)    
}

// User Infected forward
public zp_user_infected_post(idinfector)
{
    
// Check if the infected player is using our custom zombie class
    
if (zp_get_user_zombie_class(id) == g_zclassid1)
    {
        
client_print(idprint_chat"[ZP] You're using a custom zombie class! Enjoy 100 extra HP!")
        
set_pev(idpev_healthfloat(pev(idpev_health)) + 100.0)
    }


3.- No se compliquen la vida con este tutorial, es bastante fácil y no se requiere conocimientos tan avanzados. Bueno procedamos a lo siguiente: Ahora que tenemos el archivo .sma en nuestro editor pawn, lo que vamos a hacer a continuación es registrar los sonidos mediante la utilización de arrays.

Código PHP:
new const g_zombie_pain_snd[][] = 

    
"zombie_plague/custom/pain01.wav",
    
"zombie_plague/custom/pain02.wav",
    
"zombie_plague/custom/pain03.wav"
}

new const 
g_zombie_death_snd[][] = 

    
"zombie_plague/custom/die1.wav",
    
"zombie_plague/custom/die2.wav",
    
"zombie_plague/custom/die3.wav"


Supongamos que tenemos 3 sonidos para cada uno: 3 sonidos de muerte y 3 sonidos de daño, entonces los registramos al comienzo del código (abajo de los includes), quedaría algo así:

Código PHP:
/*================================================================================
    
    -----------------------------------
    -*- [ZP] Zombie Classes Example -*-
    -----------------------------------
    
    ~~~~~~~~~~~~~~~
    - Description -
    ~~~~~~~~~~~~~~~
    
    This is just an example on how to add additional zombie classes to ZP.
    
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>

new const g_zombie_pain_snd[][] = 

    
"zombie_plague/custom/pain01.wav",
    
"zombie_plague/custom/pain02.wav",
    
"zombie_plague/custom/pain03.wav"
}

new const 
g_zombie_death_snd[][] = 

    
"zombie_plague/custom/die1.wav",
    
"zombie_plague/custom/die2.wav",
    
"zombie_plague/custom/die3.wav"
}

// Zombie Attributes
new const zclass_name[] = "My Zombie" // name
new const zclass_info[] = "My Stats" // description
new const zclass_model[] = "zombie_source" // model
new const zclass_clawmodel[] = "v_knife_zombie.mdl" // claw model
const zclass_health 1800 // health
const zclass_speed 190 // speed
const Float:zclass_gravity 1.0 // gravity
const Float:zclass_knockback 1.0 // knockback

// Class IDs
new g_zclassid1 

4.- Si hiciste bien el procedimiento pues... ¡Felicidades! ya tienes tus sonidos registrados, pero aún falta mucho mas para que todo este en perfectas condiciones. Lo que vamos a hacer ahora es "precachear" los sonidos para que se escuchen y la gente pueda descargarlos de tu servidor de juego.

Entonces, nos dirigimos a esta parte del código:
Código PHP:
// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
    
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
    
    
// Register the new class and store ID for reference
    
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)    


Y "precacheamos" los sonidos mediante un loop:
Código PHP:
new i;

for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]); 

Entonces quedaría asi en plugin_precache():
Código PHP:
// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
    
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
    
    
// Register the new class and store ID for reference
    
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)    

    new 
i;

    for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
    for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]);


5.- ¿Lo hiciste bien? Vamos por un buen camino entonces. Lo que vamos hacer ahora es registra una "forward" (debemos tener la include fakemeta en nuestro archivo scripting, sino la tienes lo puedes registrar al comienzo del código), cuya función sera el de emitir nuestros sonidos custom, para eso debemos registrar la función en plugin_init() (sino esta lo podemos crear arriba del plugin_precache()):

Código PHP:
public plugin_init()
{
    
//Codigo
}

// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
    
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
    
    
// Register the new class and store ID for reference
    
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)    

    new 
i;

    for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
    for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]);    


6.- Procedemos a registrar nuestra forward FM_EmitSound (Su función es editar, modificar, crear o bloquear sonidos existentes)

Código PHP:
public plugin_init()
{
    
register_forward(FM_EmitSound"fm_emitsound");


7.- Nos falta crear el public de la función. Nos vamos al final del code y agregamos esto:

Código PHP:
public fm_emitsound(idchannel, const sample[], Float:volumeFloat:attnflagspitch)
{
    if (!
zp_is_user_zombie(id) || zp_is_user_nemesis(id) || zp_is_user_survivor(id) || zp_get_user_zombie_class(id) != g_zclassid1)
        return 
FMRES_IGNORED;
        
    if((
sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't') || (sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd')) 
    {
        
emit_sound(idchannelg_zombie_pain_snd[random(sizeof(g_zombie_pain_snd))], volumeattnflagspitch)
        return 
FMRES_SUPERCEDE;
    }
    
    if(
sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
    {
        
emit_soundidchannelg_zombie_death_snd[random(sizeof(g_zombie_death_snd))], volumeattnflagspitch)
        return 
FMRES_SUPERCEDE;   
    }        
    
    return 
FMRES_IGNORED;


La función de esta forward es muy simple, lo explicare paso por paso:

Código PHP:
    if (!zp_is_user_zombie(id) || zp_is_user_nemesis(id) || zp_is_user_survivor(id) || zp_get_user_zombie_class(id) != g_zclassid1)
        return 
FMRES_IGNORED
Básicamente comprueba "si eres o no eres" para poder acceder a la función completa. En idioma español sería: Si el usuario no es un zombie o es un nemesis o es un survivor o la clase de zombie no es igual a la que se pide, la función sera ignorada y el player no tendrá los sonidos custom.

Pero en cambio si cumple con ciertas condiciones, la función sera leída y procederá a que los sonidos se escuchen.

Código PHP:
    if((sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't') || (sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd')) 
    {
        
emit_sound(idchannelg_zombie_pain_snd[random(sizeof(g_zombie_pain_snd))], volumeattnflagspitch)
        return 
FMRES_SUPERCEDE;
    }
    
    if(
sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
    {
        
emit_soundidchannelg_zombie_death_snd[random(sizeof(g_zombie_death_snd))], volumeattnflagspitch)
        return 
FMRES_SUPERCEDE;   
    } 

Y para finalizar, aquí se buscan las similitudes de los sonidos default que vienen por defecto en el Counter-Strike para saber si el sonido corresponde a la condición. En el caso de que el sonido de "pain" (que viene por defecto en el CS) es igual a la condición determinada, entonces procederá a leer la función que está entre las llaves de if { }, osea el emit_sound(), lo que dará como resultado que el sonido custom se emita (escuche)

El return FMRES_SUPERCEDE; hará que el sonido original (por defecto del CS) se bloquee y en su lugar se escuchará el sonido custom que hemos registrado.

Cualquier duda, pregunta, consulta o algún error que encuentren, me la hacen saber. Crab Crab Crab

Proud
Responder
#2
Vaya, muy buena guía, algo sencillo pero que no se había visto, perfecto.
NO RESPONDO MP POR SOPORTE
Responder
#3
buen tutorial...
CrabCrabCrab
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#4
Muy buena guía.

Responder
#5
c: Muy buena guía
Responder
#6
Buena guía amigo ando sin internet solo leí la mitadOh god why
* Ing. Informático * Mapper * Venezolano
Responder
#7
(30/07/2015, 03:36 PM)Runaway escribió: Hola amigos, en el siguiente post les vengo a enseñar a como colocar sonidos custom de "muerte" (death) y "dolor" (pain) para la clase de zombie que ustedes quieran agregarle, en realidad esto funciona en cualquier plugin, independientemente si es o no zombie plague, pero en esta ocasión va dirigido para el zombie plague:

1.- Primero que todo, debemos tener a mano nuestros sonidos (recursos) que vamos a utilizar de muerte y dolor (death and pain) y lo guardamos en nuestra carpeta de sonidos, que por defecto sería en cstrike/sound o si lo quieren lo pueden guardar en otra subcarpeta como en cstrike/sound/zombie_plague

2.- Luego de que tengamos a nuestra disposición los recursos, agarramos el archivo scripting (.sma) a editar de la clase de zombie que queramos, en este caso ocupare el que viene por defecto:

zp_zombie_classes_example.sma
Código PHP:
/*================================================================================
 
 -----------------------------------
 -*- [ZP] Zombie Classes Example -*-
 -----------------------------------
 
 ~~~~~~~~~~~~~~~
 - Description -
 ~~~~~~~~~~~~~~~
 
 This is just an example on how to add additional zombie classes to ZP.
 
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>

// Zombie Attributes
new const zclass_name[] = "My Zombie" // name
new const zclass_info[] = "My Stats" // description
new const zclass_model[] = "zombie_source" // model
new const zclass_clawmodel[] = "v_knife_zombie.mdl" // claw model
const zclass_health 1800 // health
const zclass_speed 190 // speed
const Float:zclass_gravity 1.0 // gravity
const Float:zclass_knockback 1.0 // knockback

// Class IDs
new g_zclassid1

// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
 
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
 
 
// Register the new class and store ID for reference
 
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback
}

// User Infected forward
public zp_user_infected_post(idinfector)
{
 
// Check if the infected player is using our custom zombie class
 
if (zp_get_user_zombie_class(id) == g_zclassid1)
 {
 
client_print(idprint_chat"[ZP] You're using a custom zombie class! Enjoy 100 extra HP!")
 
set_pev(idpev_healthfloat(pev(idpev_health)) + 100.0)
 }


3.- No se compliquen la vida con este tutorial, es bastante fácil y no se requiere conocimientos tan avanzados. Bueno procedamos a lo siguiente: Ahora que tenemos el archivo .sma en nuestro editor pawn, lo que vamos a hacer a continuación es registrar los sonidos mediante la utilización de arrays.

Código PHP:
new const g_zombie_pain_snd[][] = 

 
"zombie_plague/custom/pain01.wav",
 
"zombie_plague/custom/pain02.wav",
 
"zombie_plague/custom/pain03.wav"
}

new const 
g_zombie_death_snd[][] = 

 
"zombie_plague/custom/die1.wav",
 
"zombie_plague/custom/die2.wav",
 
"zombie_plague/custom/die3.wav"


Supongamos que tenemos 3 sonidos para cada uno: 3 sonidos de muerte y 3 sonidos de daño, entonces los registramos al comienzo del código (abajo de los includes), quedaría algo así:

Código PHP:
/*================================================================================
 
 -----------------------------------
 -*- [ZP] Zombie Classes Example -*-
 -----------------------------------
 
 ~~~~~~~~~~~~~~~
 - Description -
 ~~~~~~~~~~~~~~~
 
 This is just an example on how to add additional zombie classes to ZP.
 
================================================================================*/

#include <amxmodx>
#include <fakemeta>
#include <zombieplague>

new const g_zombie_pain_snd[][] = 

 
"zombie_plague/custom/pain01.wav",
 
"zombie_plague/custom/pain02.wav",
 
"zombie_plague/custom/pain03.wav"
}

new const 
g_zombie_death_snd[][] = 

 
"zombie_plague/custom/die1.wav",
 
"zombie_plague/custom/die2.wav",
 
"zombie_plague/custom/die3.wav"
}

// Zombie Attributes
new const zclass_name[] = "My Zombie" // name
new const zclass_info[] = "My Stats" // description
new const zclass_model[] = "zombie_source" // model
new const zclass_clawmodel[] = "v_knife_zombie.mdl" // claw model
const zclass_health 1800 // health
const zclass_speed 190 // speed
const Float:zclass_gravity 1.0 // gravity
const Float:zclass_knockback 1.0 // knockback

// Class IDs
new g_zclassid1 

4.- Si hiciste bien el procedimiento pues... ¡Felicidades! ya tienes tus sonidos registrados, pero aún falta mucho mas para que todo este en perfectas condiciones. Lo que vamos a hacer ahora es "precachear" los sonidos para que se escuchen y la gente pueda descargarlos de tu servidor de juego.

Entonces, nos dirigimos a esta parte del código:
Código PHP:
// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
 
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
 
 
// Register the new class and store ID for reference
 
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback


Y "precacheamos" los sonidos mediante un loop:
Código PHP:
new i;

for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]); 

Entonces quedaría asi en plugin_precache():
Código PHP:
// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
 
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
 
 
// Register the new class and store ID for reference
 
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback

 new 
i;

 for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
 for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]);


5.- ¿Lo hiciste bien? Vamos por un buen camino entonces. Lo que vamos hacer ahora es registra una "forward" (debemos tener la include fakemeta en nuestro archivo scripting, sino la tienes lo puedes registrar al comienzo del código), cuya función sera el de emitir nuestros sonidos custom, para eso debemos registrar la función en plugin_init() (sino esta lo podemos crear arriba del plugin_precache()):

Código PHP:
public plugin_init()
{
 
//Codigo
}

// Zombie Classes MUST be registered on plugin_precache
public plugin_precache()
{
 
register_plugin("[ZP] Additional Zombie Classes""0.1""Example")
 
 
// Register the new class and store ID for reference
 
g_zclassid1 zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback

 new 
i;

 for(
0sizeof g_zombie_pain_sndi++) precache_sound(g_zombie_pain_snd[i]);
 for(
0sizeof g_zombie_death_sndi++) precache_sound(g_zombie_death_snd[i]); 


6.- Procedemos a registrar nuestra forward FM_EmitSound (Su función es editar, modificar, crear o bloquear sonidos existentes)

Código PHP:
public plugin_init()
{
 
register_forward(FM_EmitSound"fm_emitsound");


7.- Nos falta crear el public de la función. Nos vamos al final del code y agregamos esto:

Código PHP:
public fm_emitsound(idchannel, const sample[], Float:volumeFloat:attnflagspitch)
{
 if (!
zp_is_user_zombie(id) || zp_is_user_nemesis(id) || zp_is_user_survivor(id) || zp_get_user_zombie_class(id) != g_zclassid1)
 return 
FMRES_IGNORED;
 
 if((
sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't') || (sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd')) 
 {
 
emit_sound(idchannelg_zombie_pain_snd[random(sizeof(g_zombie_pain_snd))], volumeattnflagspitch)
 return 
FMRES_SUPERCEDE;
 }
 
 if(
sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
 {
 
emit_soundidchannelg_zombie_death_snd[random(sizeof(g_zombie_death_snd))], volumeattnflagspitch)
 return 
FMRES_SUPERCEDE;  
 

 
 return 
FMRES_IGNORED;


La función de esta forward es muy simple, lo explicare paso por paso:

Código PHP:
if (!zp_is_user_zombie(id) || zp_is_user_nemesis(id) || zp_is_user_survivor(id) || zp_get_user_zombie_class(id) != g_zclassid1)
 return 
FMRES_IGNORED
Básicamente comprueba "si eres o no eres" para poder acceder a la función completa. En idioma español sería: Si el usuario no es un zombie o es un nemesis o es un survivor o la clase de zombie no es igual a la que se pide, la función sera ignorada y el player no tendrá los sonidos custom.

Pero en cambio si cumple con ciertas condiciones, la función sera leída y procederá a que los sonidos se escuchen.

Código PHP:
if((sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't') || (sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd')) 
 {
 
emit_sound(idchannelg_zombie_pain_snd[random(sizeof(g_zombie_pain_snd))], volumeattnflagspitch)
 return 
FMRES_SUPERCEDE;
 }
 
 if(
sample[7] == 'd' && ((sample[8] == 'i' && sample[9] == 'e') || (sample[8] == 'e' && sample[9] == 'a')))
 {
 
emit_soundidchannelg_zombie_death_snd[random(sizeof(g_zombie_death_snd))], volumeattnflagspitch)
 return 
FMRES_SUPERCEDE;  
 


Y para finalizar, aquí se buscan las similitudes de los sonidos default que vienen por defecto en el Counter-Strike para saber si el sonido corresponde a la condición. En el caso de que el sonido de "pain" (que viene por defecto en el CS) es igual a la condición determinada, entonces procederá a leer la función que está entre las llaves de if { }, osea el emit_sound(), lo que dará como resultado que el sonido custom se emita (escuche)

El return FMRES_SUPERCEDE; hará que el sonido original (por defecto del CS) se bloquee y en su lugar se escuchará el sonido custom que hemos registrado.

Cualquier duda, pregunta, consulta o algún error que encuentren, me la hacen saber. Crab Crab Crab

Proud

Muy Bueno! por cierto tambien es muy bueno el zombie shy guy , aunque con que te hagan bodyblock en un ducto cagaste xd.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)