Source SDK

Source SDK

Not enough ratings
Cómo añadir un arma personalizada a Source SDK 2013 Master
By Oitnemood
una guía basada en una en ingles, aquí el link original, se ha prestado atención a cada detalle para no dejar error contextuales
https://gtm.steamproxy.vip/sharedfiles/filedetails/?id=836416179
En este tutorial te enseñará a añadir rifles y pistolas a la modificación de la base de Source 2013 Master.
   
Award
Favorite
Favorited
Unfavorite
Creando weapon_nombre.cpp
Creating a .cpp file

Ve a tu "<directorio de archivos fuente del modelo>/src/game/server/hl2" y crea un archivo llamado "weapon_"nombre del arma".cpp" así:
Añadir su archivo a la solución
Abra su "everything.sln". En el explorador de soluciones, busque "Server (HL2)" y luego "Source Files" y "HL2 DLL".
Edición de weapon_nombre.cpp - pistolas
Código de la plantilla
Copie y pegue este código de aquí[pastebin.com] en su "weapon_<su nombre de arma>.cpp".

Cambia todo "CWeaponGlock18" por "CWeaponYourweaponname" por ejemplo"
CWeaponFiveseven
Cambia todo "GLOCK18" por "el nombre de tu arma", ejemplo:
#define GLOCK18_FASTEST_REFIRE_TIME
a
#define FIVESEVEN_FASTEST_REFIRE_TIME

Cambia todo "glock18" por "yourweaponname".
Edición de weapon_nombre de arma.cpp - ametralladora
Código de la plantilla
Copie y pegue este código de aquí[pastebin.com] en su "weapon_ nombre de arma.cpp".

Cambia todo "CWeaponSMG2" por "CWeaponNombre_de_tu_arma " por ejemplo"
CWeaponM4a1

Cambia todos los "SMG2" por "el_Nombre_de_tu_arma", ejemplo:

Cambia todos los "smg2" por "el nombre de tu arma"

Código Modyfying
Cambiar la velocidad de disparo de la bala
Línea 45:
float GetFireRate(void) { return 0.075f; } // Velocidad de disparo de la bala
Menor valor - Más disparos por vez
Añadir tu arma al juego
Implementar tu arma en c_weapon__stubs_hl2.cpp (ubicado en "mod\sp\src\game\client\hl2")
Abra "c_weapon__stubs_hl2.cpp" y encuentre
STUB_WEAPON_CLASS( weapon_pistol, WeaponPistol, C_BaseHLCombatWeapon );
Copie esta línea y péguela debajo, cambie "weapon_pistol" por "weapon_yourweaponname" y "WeaponPistol" por "WeaponYourWeaponname", ejemplo:

¡Ahora compílalo!
weapon_el nombre de tu arma.txt
Creando "arma_su nombre de arma.txt"
Ve a la carpeta de tu mod (dentro de sourcemods) y busca la carpeta de scripts. Cree un archivo .txt llamado weapon_con su nombre de arma.txt, ábralo y pegue el siguiente código en él:
// Glock18 WeaponData { // Weapon data is loaded by both the Game and Client DLLs. "printname" "#HL2_Glock18" "viewmodel" "models/weapons/v_pist_glock18.mdl" "playermodel" "models/weapons/w_pist_glock18.mdl" "anim_prefix" "glock18" "bucket" "2" //numero de espacio en el inventario "bucket_position" "0" //numero de fila en el inventario "bucket_360" "0" "bucket_position_360" "0" "clip_size" "18" //cuántos cargadores hay "primary_ammo" "Pistol" "secondary_ammo" "None" "weight" "2" "rumble" "1" "item_flags" "0" // Sonidos para el arma. Hay un máximo de 16 sonidos por categoría (es decir, un máximo de 16 sonidos "single_shot") SoundData { "reload" "Weapon_Pistol.Reload" "reload_npc" "Weapon_Pistol.NPC_Reload" "empty" "Weapon_Pistol.Empty" "single_shot" "Weapon_Glock.Single" "single_shot_npc" "Weapon_Glock.Single" "special1" "Weapon_Pistol.Special1" "special2" "Weapon_Pistol.Special2" "burst" "Weapon_Pistol.Burst" } // Los datos del Sprite del Arma son cargados por la DLL del Cliente. TextureData { "weapon" { "font" "WeaponIcons" "character" "d" } "weapon_s" { "font" "WeaponIconsSelected" "character" "d" } "weapon_small" { "font" "WeaponIconsSmall" "character" "d" } "ammo" { "font" "WeaponIconsSmall" "character" "p" } "crosshair" { "font" "Crosshairs" "character" "Q" } "autoaim" { "file" "sprites/crosshairs" "x" "0" "y" "48" "width" "24" "height" "24" } } }

Cambia todo "Glock18" por "el nombre de tu arma", cambia los modelos por los de tu arma. Haz lo mismo con los sonidos.
Modificar el daño del arma (nuevo apartado)
en skill.cfg ubicado en la carpeta cfg del mod o juego
debe estar un archivo llamado skill, que debe tener un comando como este

sk_plr_dmg_smg1 "4" //daño del jugador sk_npc_dmg_smg1 "3" //daño del npc sk_max_smg1 "225" //limite máximo munición.

cada uno define una cosa, todo esta definido en el codigo de hl2_gamerules con ConVar (ubicado en shared/hl2
en la linea 105 esta definido las primeras lineas de esos comandos ConVar para el daño puede añadir el suyo propio solo copiando y añadiendo otro nombre de arma en su lugar

y en la linea 1801 esta definido su munición.

pues aquí lo mismo solo copia y cambia ejemplo smg1 por el nombre de tu arma y si la quieres, que puedas agarrar munición de esa misma arma, no olvides tener un objeto tipo item_ammo_pistol o algo así y hacer lo mismo que hiciste para modificar la arma, ya ahí es solo ir a ver el código del arma y ver que convar tiene tipo extern ConVar sk_plr_dmg_smg1; con eso ya podras definir la nueva tipo de munición y daño

puede que algunas armas tengan dos definiciones de ConVar, generalmente explosivos ejemplo la granada tiene uno en su formato de arma "weapon_frag.cpp" definido en "hl2_gamerules.cpp" como en su formato de objeto explosivo "grenade_frag.cpp" en su mismo archivo
ambas con diferente nombre al igual que ambos archivos estarán en skill.cfg para definir su daño y rango con un diferente nombre en ese caso.
Añadir Sonidos personalizados al arma (nuevo)
para ello hay que ir al archivo game_sounds_weapons.txr que comúnmente esta en un juego source
ahí debe tener un comando como este para por ejemplo el arma de smg1

// weapon_smg1.txt "Weapon_SMG1.Reload" { "channel" "CHAN_ITEM" "volume" "0.7" "soundlevel" "SNDLVL_NORM" "wave" "weapons/smg1/smg1_reload.wav" } "Weapon_SMG1.NPC_Reload" { "channel" "CHAN_ITEM" "volume" "0.7" "soundlevel" "SNDLVL_NORM" "wave" "weapons/smg1/smg1_reload.wav" } "Weapon_SMG1.Empty" { "channel" "CHAN_WEAPON" "volume" "0.7" "soundlevel" "SNDLVL_NORM" "wave" "weapons/pistol/pistol_empty.wav" } "Weapon_SMG1.Single" { "channel" "CHAN_WEAPON" "volume" "0.55" "soundlevel" "SNDLVL_GUNFIRE" "pitch" "95,105" "wave" "weapons/smg1/smg1_fire1.wav" } "Weapon_SMG1.Double" { "channel" "CHAN_WEAPON" "volume" "0.61" "soundlevel" "SNDLVL_GUNFIRE" "wave" "weapons/ar2/ar2_altfire.wav" } "Weapon_SMG1.NPC_Single" { "channel" "CHAN_WEAPON" "volume" "0.7" "soundlevel" "SNDLVL_GUNFIRE" "pitch" "95,105" "wave" "^weapons/smg1/npc_smg1_fire1.wav" } "Weapon_SMG1.Special1" { "channel" "CHAN_WEAPON" "volume" "0.7" "soundlevel" "SNDLVL_NORM" "wave" "weapons/smg1/switch_single.wav" } "Weapon_SMG1.Special2" { "channel" "CHAN_WEAPON" "volume" "0.7" "soundlevel" "SNDLVL_NORM" "wave" "weapons/smg1/switch_burst.wav" } "Weapon_SMG1.Burst" { "channel" "CHAN_WEAPON" "volume" "0.7" "soundlevel" "SNDLVL_GUNFIRE" "pitch" "98,105" "wave" "^weapons/smg1/smg1_fire1.wav" }

bueno tu solo copias eso y pon lo mismo después de otro nombre de arma definido en // para no ser leído en el código, de ejemplo // weapon_sniperrifle.txt
lo puedes poner después de eso o antes de todo el comando del smg1 "tu decides" ahora solo cambias el nombre en mayúscula del arma de ejemplo SMG1 y lo cambias a el nombre de tu arma, esto servirá luego para el archivo txt de tu arma, que son como los comandos para definir el SoundData ya por ultimo en este archivo, en cada comando en donde dice "wave" estará la ubicación del sonido, tu lo cambias y creas uno para tu arma con el nombre que quieras y ahí en donde dice smg1 en minúsculas lo cambias y listo, si hay un sonido ahí debería escucharse para tu arma, recomiendo el audacity para modificar uno y exportarlo a un formato adecuado.

ahora ya solo queda ir al archivo .txt de tu arma y cambiar los comandos de donde esta el apartado de SoundData y listo, ya deberían escucharse en tu juego.
Cómo acceder a tu arma en el juego
Abre la consola y escribe:
"give weapon_<nombre del arma>"

Eso es todo :3

añadido del que tradujo la guía
la manera de añadirla con el hammer es otra, obviamente, si quieres saberla, ve este video
https://www.youtube.com/watch?v=Fy_ht4pMQ2s&t=6s

aquí la versión de valve que posiblemente no este tan actualizada, así que mucho ojo a ella, si tienes cierto conocimiento de c++
https://gtm.steamproxy.vip/sharedfiles/filedetails/?id=2412272965
3 Comments
JuniorMBW 3 Oct @ 8:54pm 
tengo un gmod de android yme funciono, gracias
Oitnemood  [author] 26 Apr, 2023 @ 10:51pm 
@Ink! The Hedgehog es por no poner los ".dll" en la carpeta bin del mod
Ink! The Hedgehog 26 Apr, 2023 @ 6:01pm 
oye segui todos los pasos correctamente y me aparece esto

Attempted to create unknown entity type weapon_deagle!
NULL Ent in G

sabes como arreglarlo?