Raised This Month: $51 Target: $400
 12% 

Cambiar los Models de las Armas


  
 
 
Thread Tools Display Modes
Author Message
meTaLiCroSS
Gaze Upon My Hat
Join Date: Feb 2009
Location: Viña del Mar, Chile
Old 07-15-2009 , 18:15   Cambiar los Models de las Armas
#1

Tutorial Original por Cheap_Suit: http://forums.alliedmods.net/showthread.php?t=40822

En este Tutorial les vamos a mostrar un metodo para cambiar los models de las armas. Los 3 tipos de Models que hay son: View, Player y World

View: El Model que el Player ve en Primera Persona
Player: El Model que un jugador aparte ve que el user esta Portando
World: El Model que se encuentra botado en el Suelo

Aqui se puede mostrar un ejemplo de los 3: http://temple.fpsbanana.com/ss/srends/65962a.jpg

Este tutorial esta hecho para los 2 siguientes modulos: Engine y Fakemeta. Se isieron de las 2 formas porque algunos no se familiarisan con Engine y vicebersa.

Bueno, aqui comensamos

Engine y Fakemeta:


PHP Code:
#include <amxmodx> 
#include <engine> 
#include <fakemeta> 

new VIEW_MODEL[]        = "models/v_<nombre del model>.mdl" 
new PLAYER_MODEL[]        = "models/p_<nombre del model>.mdl" 
new WORLD_MODEL[]    = "models/w_<nombre del model>.mdl"

new OLDWORLD_MODEL[]    = "models/w_<nombre del model>.mdl" // el world model que quieres reemplasar por el que esta mas arriba

new PLUGIN_NAME[]    = "Custom Weapon Model" 
new PLUGIN_AUTHOR[]         = "Cheap_Suit" 
new PLUGIN_VERSION[]        = "1.0" 

public plugin_init() 
{
    
// Info del Plugin
    
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)     
    
    
// Evento CurWeapon, cuando un player activa/pone/selecciona un arma
    
register_event("CurWeapon""Event_CurWeapon""be","1=1")
    
    
// Evento (FAKEMETA) en el cual se setean Models (claramente el mismo evento lo dice)
    
register_forward(FM_SetModel"fw_SetModel")


public 
plugin_precache() 
{    
    
// Haciendo Precache de los Models
    
precache_model(VIEW_MODEL)     
    
precache_model(PLAYER_MODEL
    
precache_model(WORLD_MODEL)


public 
Event_CurWeapon(id
{     
    
// obtenemos la ID del arma que porta el jugador
    
new weaponID read_data(2
    
    
// ejemplo: si el arma no es la AK-47, detenemos la operacion
    
if(weaponID != CSW_AK47)
        return 
PLUGIN_CONTINUE
    
    
// aplicamos el View Model (el que el user tiene en sus manos)
    
entity_set_string(idEV_SZ_viewmodelVIEW_MODEL)   // ENGINE
    
    // aplicamos el Player Model (el que los demas users Ven que tiene el user en sus manos)
    
entity_set_string(idEV_SZ_weaponmodelPLAYER_MODEL// ENGINE
    
    
return PLUGIN_CONTINUE 
}

public 
fw_SetModel(entitymodel[])
{
    
// detectamos si la entidad es correcta/sin errores, de no ser asi, detenemos la operacion
    
if(!is_valid_ent(entity)) // ENGINE
        
return FMRES_IGNORED
    
    
// detectamos si el Model ES como el que queremos reemplasar, de no ser asi, detenemos la operacion
    
if(!equali(modelOLDWORLD_MODEL)) 
        return 
FMRES_IGNORED
    
    
// Obtenemos el Classname de la Entidad
    
new className[33]
    
entity_get_string(entityEV_SZ_classnameclassName32// ENGINE
    
    // Detectamos si los Classnames son equivalentes a la de un arma
    
    // "weaponbox": Arma botada 
    // "armoury_entity": Arma botada por el Mapa en si
    // "grenade": Granada, C4
    
    
if(equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
    {
        
// seteamos el World Model (el que esta botado en el piso)
        
entity_set_model(entityWORLD_MODEL// ENGINE
        
return FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED


Solo Fakemeta:


PHP Code:
public Event_CurWeapon(id
{     
    
// obtenemos la ID del arma que porta el jugador
    
new weaponID read_data(2
    
    
// ejemplo: si el arma no es la AK-47, detenemos la operacion
    
if(weaponID != CSW_AK47)
        return 
PLUGIN_CONTINUE
    
    
// aplicamos el View Model (el que el user tiene en sus manos)
    
set_pev(idpev_viewmodel2VIEW_MODEL// FAKEMETA
    
    // aplicamos el Player Model (el que los demas users Ven que tiene el user en sus manos)
    
set_pev(idpev_weaponmodel2PLAYER_MODEL// FAKEMETA
    
    
return PLUGIN_CONTINUE 
}

public 
fw_SetModel(entitymodel[])
{
    
// detectamos si la entidad es correcta/sin errores, de no ser asi, detenemos la operacion
    
if(!pev_valid(entity)) // FAKEMETA
        
return FMRES_IGNORED
    
    
// detectamos si el Model ES como el que queremos reemplasar, de no ser asi, detenemos la operacion
    
if(!equali(modelOLDWORLD_MODEL)) 
        return 
FMRES_IGNORED
    
    
// Obtenemos el Classname de la Entidad
    
new className[33]
    
pev(entitypev_classnameclassName32// FAKEMETA
    
    // Detectamos si los Classnames son equivalentes a la de un arma
    
    // "weaponbox": Arma botada 
    // "armoury_entity": Arma botada por el Mapa en si
    // "grenade": Granada, C4
    
    
if(equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
    {
        
// seteamos el World Model (el que esta botado en el piso)
        
engfunc(EngFunc_SetModelentityWORLD_MODEL// FAKEMETA
        
return FMRES_SUPERCEDE
    
}
    
    return 
FMRES_IGNORED

P: Porque "pev_viewmodel2" / "pev_weaponmodel2" ? (Referente al "2")
R: Using viewmodel2 and weaponmodel2. La unica diferencia entre viewmodel y viewmodel2 (tambien weaponmodel) es que en viewmodel/weaponmodel tienes que Allocar el String (nose cmo se dice en Spanish )
PHP Code:
    set_pev(idpev_viewmodelengfunc(EngFunc_AllocStringVIEW_MODEL))
    
set_pev(idpev_viewmodel2VIEW_MODEL

ID de las Armas:


PHP Code:
#define CSW_P228        1
#define CSW_SCOUT        3
#define CSW_HEGRENADE        4
#define CSW_XM1014        5
#define CSW_C4            6
#define CSW_MAC10        7
#define CSW_AUG            8
#define CSW_SMOKEGRENADE    9
#define CSW_ELITE        10
#define CSW_FIVESEVEN        11
#define CSW_UMP45        12
#define CSW_SG550        13
#define CSW_GALIL        14
#define CSW_FAMAS        15
#define CSW_USP            16
#define CSW_GLOCK18        17
#define CSW_AWP            18
#define CSW_MP5NAVY        19
#define CSW_M249        20
#define CSW_M3            21
#define CSW_M4A1        22
#define CSW_TMP            23
#define CSW_G3SG1        24
#define CSW_FLASHBANG        25
#define CSW_DEAGLE        26
#define CSW_SG552        27
#define CSW_AK47        28
#define CSW_KNIFE        29
#define CSW_P90            30 
Ejemplo cambiando el Skin del Knife (Engine + Fakemeta):

PHP Code:
#include <amxmodx> 
#include <engine> 
#include <fakemeta> 

new VIEW_MODEL[]    = "models/v_newKnife.mdl" 
new PLAYER_MODEL[]    = "models/p_newKnife.mdl" 
new WORLD_MODEL[]    = "models/w_knife.mdl"

new OLDWORLD_MODEL[]    = "models/w_knife.mdl"

new PLUGIN_NAME[]        = "Custom Knife Model" 
new PLUGIN_AUTHOR[]    = "Cheap_Suit" 
new PLUGIN_VERSION[]     = "1.0" 

public plugin_init() 
{
    
register_plugin(PLUGIN_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR)     
    
register_event("CurWeapon""Event_CurWeapon""be","1=1")
    
register_forward(FM_SetModel"fw_SetModel")


public 
plugin_precache() 
{    
    
precache_model(VIEW_MODEL)     
    
precache_model(PLAYER_MODEL
    
precache_model(WORLD_MODEL)


public 
Event_CurWeapon(id
{     
    new 
weaponID read_data(2

    if(
weaponID != CSW_KNIFE)
        return 
PLUGIN_CONTINUE

    set_pev
(idpev_viewmodel2VIEW_MODEL)
    
set_pev(idpev_weaponmodel2PLAYER_MODEL)
    
    return 
PLUGIN_CONTINUE 
}

public 
fw_SetModel(entitymodel[])
{
    if(!
is_valid_ent(entity)) 
        return 
FMRES_IGNORED

    
if(!equali(modelOLDWORLD_MODEL)) 
        return 
FMRES_IGNORED

    
new className[33]
    
entity_get_string(entityEV_SZ_classnameclassName32)
    
    if(
equal(className"weaponbox") || equal(className"armoury_entity") || equal(className"grenade"))
    {
        
engfunc(EngFunc_SetModelentityWORLD_MODEL)
        return 
FMRES_SUPERCEDE
    
}
    return 
FMRES_IGNORED

Notas:

  • Diferencias entre Engine y Fakemeta: Ya fue dicho otras veces, Engine es mas eficiente que Fakemeta, pero algunos ignoran este dicho ya que hasta ahora no se encuentra problema al usarlo y/o usan ahorro de modulos
  • Solo con Engine: No se puede, de una forma solo puede usarse Engine & Fakemeta y/o Fakemeta Solo, ya que si fuese solo Engine no podrias cambiar los World Model, ya que Engine no tiene acceso a una forward como SetModel en la cual se detecta la creacion de la entidad de un World Model (por decir asi).
  • Engine --> Fakemeta | Fakemeta --> Engine:
    PHP Code:
    // Engine:                    | Fakemeta:
    is_valid_ent(entity)                | pev_valid(entity)
    entity_set_string(idEV_SZ_viewmodel, ...)    | set_pev(idpev_viewmodel2, ...)
    entity_set_string(idEV_SZ_weaponmodel, ...)    | set_pev(idpev_weaponmodel2, ...)
    entity_set_model(entity, ...)            | engfunc(EngFunc_SetModelentity, ...)
    entity_get_string(entityEV_SZ_classname, ...)    | pev(entitypev_classname, ...) 


Suerte! Cualquier duda pueden postear.
__________________
Quote:
Originally Posted by joropito View Post
You're right Metalicross

Last edited by meTaLiCroSS; 07-15-2009 at 22:16.
meTaLiCroSS is offline
Hasler
BANNED
Join Date: Jul 2009
Location: Argentina, Rosario
Old 07-31-2009 , 12:24   Re: [ES][TUT] Cambiar los Models de las Armas
#2

una pregunta si es un cuchillo no hace falta poner la linea
new WORLD_MODEL[] = "models/w_<nombre del model>.mdl"
ya q no se puede tirar, o me equivoco?
Hasler is offline
meTaLiCroSS
Gaze Upon My Hat
Join Date: Feb 2009
Location: Viña del Mar, Chile
Old 07-31-2009 , 13:20   Re: [ES][TUT] Cambiar los Models de las Armas
#3

Quote:
Originally Posted by Hasler View Post
una pregunta si es un cuchillo no hace falta poner la linea
new WORLD_MODEL[] = "models/w_<nombre del model>.mdl"
ya q no se puede tirar, o me equivoco?
Pues el W_ knife se ve solo en el round start... es inecesario.
__________________
Quote:
Originally Posted by joropito View Post
You're right Metalicross
meTaLiCroSS is offline
juancitoPlugins
BANNED
Join Date: Jul 2009
Old 07-31-2009 , 15:56   Re: [ES][TUT] Cambiar los Models de las Armas
#4

ijijijij este ya me lo sabia, lo hacia cuando era chico
jijijijijijiji
juancitoPlugins is offline
lauti87
BANNED
Join Date: Jul 2009
Old 07-31-2009 , 17:13   Re: [ES][TUT] Cambiar los Models de las Armas
#5

Quote:
Originally Posted by juancitoPlugins View Post
ijijijij este ya me lo sabia, lo hacia cuando era chico
jijijijijijiji
cuando eras chiko?
tendrias qe aver puesto "lo voi a acer" no "lo acia"
lauti87 is offline
Alucard^
AMXX Moderator: Others
Join Date: Sep 2007
Location: Street
Old 07-31-2009 , 22:37   Re: [ES][TUT] Cambiar los Models de las Armas
#6

Quote:
Originally Posted by juancitoPlugins View Post
ijijijij este ya me lo sabia, lo hacia cuando era chico
jijijijijijiji
JAJAJAJAJA Seguis siendo un pendex, quedate tranquilo.

En fin, gracias por la traduccion, sirve bastante esto y esta bastante bien explicado... en este momento mucho no me sirve cambiar de models a las armas pero ya lo voy a usar. Aparte que viendo el tuto me ayudo en otros temas que nada que ver con el cambiado de model =p
__________________
Approved Plugins - Steam Profile

Public non-terminated projects:
All Admins Menu, HLTV parameters, Subnick,
Second Password (cool style), InfoZone,
Binary C4 plant/defuse, and more...

Private projects:
NoSpec (+menu), NV Surf Management,
PM Adanved System, KZ longjump2, and more...
Alucard^ is offline
Send a message via Skype™ to Alucard^
IneedHelp
Veteran Member
Join Date: Mar 2007
Location: Argentina
Old 08-01-2009 , 00:05   Re: [ES][TUT] Cambiar los Models de las Armas
#7

"Allocar el string" Es pasar un string a numeros~ en FM tenes q usarlo a veces con entidades y con models, en engine no ^
__________________
IneedHelp is offline
[P]owa
Junior Member
Join Date: Sep 2009
Old 12-19-2009 , 13:07   Re: [ES][TUT] Cambiar los Models de las Armas
#8

Y si yo quiero cambiar un modelo q no es ni v_ ni p_ ni w_, x ejemplo el chick.mdl como hago?
[P]owa is offline
Venganza!
BANNED
Join Date: Nov 2009
Location: Valparaiso, Chile.
Old 12-19-2009 , 13:28   Re: [ES][TUT] Cambiar los Models de las Armas
#9

no revivas thread antiguos
Venganza! is offline
Ciio
Veteran Member
Join Date: Oct 2009
Location: Arica, Chile
Old 12-19-2009 , 13:28   Re: [ES][TUT] Cambiar los Models de las Armas
#10

Por lo que se ve a vista esta bien... marrato lo leere biem xD
__________________
Ciio is offline
Send a message via MSN to Ciio
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


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


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