Source SDK

Source SDK

Not enough ratings
Motor Source - Añadir un sistema de lanzamiento de armas
By Oitnemood
Este tutorial cubrirá la implementación de un "sistema de lanzamiento de armas" válido. Este mismo tutorial también lleva un trabajo sobre cómo implementar nuevos comandos que pueden ser editados desde el menú del teclado.

guía original
https://developer.valvesoftware.com/wiki/Adding_a_Weapon_Drop_System
   
Award
Favorite
Favorited
Unfavorite
Definiciones de comandos de botones y teclas
En primer lugar, debe conseguir ir a la carpeta de Client y abrir 'in_buttons.h'. En este archivo, hay una serie de definiciones de macros que llevan identificaciones numéricas como
#define IN_ATTACK (1 << 0) #define IN_JUMP (1 << 1)
En
#define IN_GRENADE2 (1 << 24) // grenade 2

Añade el siguiente fragmento de código:
#define IN_DROP (1 << 25) // Sistema de lanzamiento de armas.

Una vez completada esta tarea, diríjase a 'in_main.cpp' en el repertorio de Client.

En la parte superior del archivo, hay varias otras declaraciones como:
kbutton_t in_speed; kbutton_t in_walk;

Alrededor de la línea 102, Bajo
kbutton_t in_joyspeed;

Define la clave del botón principal del sistema de caída primario.
kbutton_t in_drop;

La declaración del botón necesitará ser implementada con varias funciones que calcularán el estado actual de los eventos de la tecla, como por ejemplo si la tecla fue presionada o liberada.

Desplázate hacia abajo alrededor de la línea 471 y añade las siguientes funciones:
void IN_DropUp( const CCommand &args ) { KeyUp( &in_drop, args[1] ); } void IN_DropDown( const CCommand &args ) { KeyDown( &in_drop, args[1] ); }

Estas dos funciones se utilizarán para alternar el estado actual de las pulsaciones de las teclas.

Vaya a la línea 1473 y bajo las definiciones de "CalcButtonBits", después de
CalcButtonBits( bits, IN_GRENADE2, s_ClearInputState, &in_grenade2, bResetState );
añadir este asset al código:
CalcButtonBits( bits, IN_DROP, s_ClearInputState, &in_drop, bResetState );
La última implementación en este archivo son los principales comandos de consola a los que se accederá a lo largo del juego para realizar la secuencia de caída.

Alrededor de la línea 1630, bajo
static ConCommand startgrenade2( "+grenade2", IN_Grenade2Down );

Pon estos comandos de consola:


static ConCommand enddrop( "-drop", IN_DropUp ); static ConCommand startdrop( "+drop", IN_DropDown );

Se ha completado el sistema de comandos de tecla o botones principales de caída. Para que esta tecla se realice, esto requerirá ser llamado por una función que evaluará las pulsaciones de la tecla principal durante el juego.
Implementación de la función de lanzamiento de armas
Debes abrir 'hl2_player.cpp' y 'hl2_player.h'.

En 'hl2_player.h', alrededor de la línea 124, añade esta declaración de función:
void DropActiveWeapon( void );

Esta función será la responsable de realizar la ocurrencia de la "caída" del arma principal.

En 'hl2_player.cpp', añade esta función:
void CHL2_Player::DropActiveWeapon( void ) { Vector VecForward; EyeVectors(&VecForward, NULL, NULL); VecForward *= 300.0f; BaseClass::Weapon_Drop( GetActiveWeapon(), NULL, &VecForward ); }

Esta función evalúa la dirección de la vista actual del jugador y aplica una velocidad de 300 al arma activa. También llama a la función base que manejará el sistema de lanzamiento desde la clase 'Base'.

En la parte superior de 'hl2_player.cpp', alrededor de la línea 76, añade esta definición de ConVar:
static ConVar sv_weapon_drop_enabled("sv_weapon_drop_enabled", "1");
Para poder reaccionar a la pulsación de teclas o botones, la tecla 'Drop' tendrá que ser evaluada. En 'hl2_player.cpp', alrededor de la línea 553, encuentra una función llamada 'void CHL2_Player::PreThink(void)'.

Al final de la función, en la línea 889, debes implementar esta estructura:
if ( m_afButtonPressed & IN_DROP ) { if ( IsAlive() && !IsInAVehicle() && HasWeapons() && sv_weapon_drop_enabled.GetBool() ) { DropActiveWeapon(); } }
El sistema de lanzamiento de armas está habilitado y totalmente implementado, el último ajuste es hacerlo personalizable en el menú principal de vinculación del teclado.
Menú de vinculación del teclado y mando
En la carpeta (de modificación), por ejemplo: "steamapps\sourcemods\mod", debería haber una carpeta llamada "scripts". Desplázate por esta carpeta hasta llegar a dos archivos llamados 'kb_act.lst', 'kb_def.lst'

Abre 'kb_act.lst', y al final de este archivo, añade el siguiente código:

"+drop" "#Valve_Drop_Weapon"

Abre 'kb_def.lst', y al final de este archivo, añade el siguiente código:

"m" "+drop"

En este caso, 'm' puede ser sustituida por la tecla o boton de su elección.

Para que este comando aparezca traducido en el menú principal de vinculación de teclas, deberás tener un archivo particular llamado "valve_english.txt" que deberia estar por defecto en la carpeta de resource.

Por favor, ten en cuenta que el idioma del archivo de texto debe corresponder al idioma actual de tu juego. Si juegas (Half-Life 2) en alemán, entonces usaras "valve_german.txt"
o si es español es "valve_spanish.txt"

tendras que tener este archivo a la carpeta principal de "resource" de la actual (modificación). En este archivo, bajo "Valve_Console_Toggle" , añade esta línea siguiente:

"Valve_Drop_Weapon" "Drop current weapon"

El sistema de lanzamiento de armas debería estar ahora completado. Inicie la (modificación) y vaya al menú de personalización del teclado y mando. Encuentre la línea principal "Soltar el arma actual" y si no está ya vinculada, asigne una tecla adecuada a este nuevo comando.
(opcional) quizás esta guía te podría interesar para ciertos mecanismos