Ayuda con los eventos de las armas.
#1
Hola a todos, estoy necesitando de su ayuda con un problema que tengo, como todos saben al decompilar un archivo .mdl nos arroja un archivo .qc en el cual esta la informacion para compilar de nuevo el archivo .mdl... en este archivo hay unas lineas para agregar las animaciones y los eventos relacionados con dichas animaciones...

Bueno yo tengo este modelo de M4A1 que estoy modificando agregando algunas animaciones el cual hasta ahora esta al 98% de lo que quiero, le he agregado sonidos a las animaciones y sinconizandolos pero hay uno que no me funciona como quiero...

$sequence "fire1" "fire1" fps 30 { event 5001 0 "weapons/m4a1/m4a1-1.wav" }
$sequence "fire2" "fire2" fps 30 { event 5001 0 "weapons/m4a1/m4a1-1.wav" }

Cada evento (reloading, mag_out, Bolt_pull) esta tomando los sonidos desde la carpeta que le asigne excepto por las secuencias de disparo...
para cada arma cree una carpeta diferente.

Podria alguien ayudarme a entender que es lo que tengo que hacer para que el evento de disparar tome el sonido desde la carpeta que le asigne y no la carpeta de sonidos por defecto?

Gracias de antemano.
Responder
#2

Las armas en el Half-Life (incluyendo CS 1.6) reproducen el sonido de disparo, y algunas armas quizá otros sonidos, en el lado cliente (es decir, esta escrito en el mismo).

La razón es que las armas están relacionadas con ciertos "eventos", que son registrados tanto por el servidor como por el cliente. Específicamente el servidor es el encargado de registrar el evento y enviarlo al cliente, y este (previamente habiendo hookeado al mismo), se encarga de recibir la información enviada por aquel. Sin embargo, algunas armas tienen distintos sonidos de, por ejemplo, recarga. ¿"Como es posible entonces"?, te preguntaras.

Sencillo, el evento asignado al modelo. En el engine existen ciertos eventos que se le asignan a los modelos, y que permiten ejecutar o detectar acciones.

Específicamente existe el evento 5004 que permite ejecutar un sonido en el cliente (evento mismo, que presumiblemente usas en los sonidos de reloagind, mag_out, bolt_pull, etc):

Código PHP:
/*
/// -> COMENTARIO MIO
*/
/*
=========================
HUD_StudioEvent

The entity's studio model description indicated an event was
fired during this frame, handle the event by it's tag ( e.g., muzzleflash, sound )
=========================
*/
void DLLEXPORT HUD_StudioEvent( const struct mstudioevent_s *event, const struct cl_entity_s *entity )
{
    switch( 
event->event )
    {
    case 
5001:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoievent->options) );
        break;
    case 
5011:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoievent->options) );
        break;
    case 
5021:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoievent->options) );
        break;
    case 
5031:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoievent->options) );
        break;
    case 
5002:
        
gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoievent->options), -100100 );
        break;
         
/// ESTE DE AQUÍ ///
    // Client side sound
    
case 5004:        
        
gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options1.0, (float *)&entity->attachment[0] );
        break;
    default:
        break; 
Responder
#3
(29/03/2018, 01:37 AM)Chamo. escribió:
Las armas en el Half-Life (incluyendo CS 1.6) reproducen el sonido de disparo, y algunas armas quizá otros sonidos, en el lado cliente (es decir, esta escrito en el mismo).

La razón es que las armas están relacionadas con ciertos "eventos", que son registrados tanto por el servidor como por el cliente. Específicamente el servidor es el encargado de registrar el evento y enviarlo al cliente, y este (previamente habiendo hookeado al mismo), se encarga de recibir la información enviada por aquel. Sin embargo, algunas armas tienen distintos sonidos de, por ejemplo, recarga. ¿"Como es posible entonces"?, te preguntaras.

Sencillo, el evento asignado al modelo. En el engine existen ciertos eventos que se le asignan a los modelos, y que permiten ejecutar o detectar acciones.

Específicamente existe el evento 5004 que permite ejecutar un sonido en el cliente (evento mismo, que presumiblemente usas en los sonidos de reloagind, mag_out, bolt_pull, etc):

Código PHP:
/*
/// -> COMENTARIO MIO
*/
/*
=========================
HUD_StudioEvent

The entity's studio model description indicated an event was
fired during this frame, handle the event by it's tag ( e.g., muzzleflash, sound )
=========================
*/
void DLLEXPORT HUD_StudioEvent( const struct mstudioevent_s *event, const struct cl_entity_s *entity )
{
    switch( 
event->event )
    {
    case 
5001:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoievent->options) );
        break;
    case 
5011:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoievent->options) );
        break;
    case 
5021:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoievent->options) );
        break;
    case 
5031:
        
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoievent->options) );
        break;
    case 
5002:
        
gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoievent->options), -100100 );
        break;
         
/// ESTE DE AQUÍ ///
    // Client side sound
    
case 5004:        
        
gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options1.0, (float *)&entity->attachment[0] );
        break;
    default:
        break; 

Gracias por tu respuesta, me aclaro bastante la duda, efectivamente el evento 5004 es para los eventos de recarga, clipout, clipin, seleccionar armas, he estado haciendo pruebas, lo que hice fue cambiar el numero de evento del disparo de 5001 a 5004 y pude hacer lo que necesitaba, que reproduzca el sonido desde la carpeta que cree, el problema es que suena un poco extraño, suena como con un eco... a mi parecer suena como que se ejecutara dos veces el sonido casi al mismo tiempo, eso me tiene matando neuronas... no entiendo porque reproduce el sonido asi, cuando el resto de los sonidos lo hace bien.
Responder
#4

Eso es por la predicción del cliente. Cuando disparas un arma, el juego "dispara" o envia un evento al jugador, y cuando este lo recibe, ejecuta casi todo lo relacionado al efecto del disparo de un arma: decals, sonido de disparo, humo, modelo de las balas (en algunas armas, como la escopeta, aparece un modelo de casquillo, quizá para darle realismo), etc.

Para resolver eso, tienes que recurrir a lo que llaman "remover la predicción", lo que causaría que todo lo anterior no ocurriera, y necesitaría ser emulado si se quisiera mantener. Es decisión tuya.

Se ha discutido mucho sobre esto, y encontraras fácilmente información al respecto.
Responder
#5
(29/03/2018, 08:19 PM)Chamo. escribió:
Eso es por la predicción del cliente. Cuando disparas un arma, el juego "dispara" o envia un evento al jugador, y cuando este lo recibe, ejecuta casi todo lo relacionado al efecto del disparo de un arma: decals, sonido de disparo, humo, modelo de las balas (en algunas armas, como la escopeta, aparece un modelo de casquillo, quizá para darle realismo), etc.

Para resolver eso, tienes que recurrir a lo que llaman "remover la predicción", lo que causaría que todo lo anterior no ocurriera, y necesitaría ser emulado si se quisiera mantener. Es decisión tuya.

Se ha discutido mucho sobre esto, y encontraras fácilmente información al respecto.

Excelente, muchisimas gracias Chamo, de pana me ha sido de muchisima ayuda tus comentarios...

Saludos.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)