AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Guías/Tutoriales (https://forums.alliedmods.net/forumdisplay.php?f=137)
-   -   Cambiar los Models de las Armas (https://forums.alliedmods.net/showthread.php?t=97411)

meTaLiCroSS 07-15-2009 18:15

Cambiar los Models de las Armas
 
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 :D

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 :P)
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.

Hasler 07-31-2009 12:24

Re: [ES][TUT] Cambiar los Models de las Armas
 
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?

meTaLiCroSS 07-31-2009 13:20

Re: [ES][TUT] Cambiar los Models de las Armas
 
Quote:

Originally Posted by Hasler (Post 886688)
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.

juancitoPlugins 07-31-2009 15:56

Re: [ES][TUT] Cambiar los Models de las Armas
 
ijijijij este ya me lo sabia, lo hacia cuando era chico
jijijijijijiji

lauti87 07-31-2009 17:13

Re: [ES][TUT] Cambiar los Models de las Armas
 
Quote:

Originally Posted by juancitoPlugins (Post 886844)
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"

Alucard^ 07-31-2009 22:37

Re: [ES][TUT] Cambiar los Models de las Armas
 
Quote:

Originally Posted by juancitoPlugins (Post 886844)
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

IneedHelp 08-01-2009 00:05

Re: [ES][TUT] Cambiar los Models de las Armas
 
"Allocar el string" Es pasar un string a numeros~ en FM tenes q usarlo a veces con entidades y con models, en engine no ^

[P]owa 12-19-2009 13:07

Re: [ES][TUT] Cambiar los Models de las Armas
 
Y si yo quiero cambiar un modelo q no es ni v_ ni p_ ni w_, x ejemplo el chick.mdl como hago?

Venganza! 12-19-2009 13:28

Re: [ES][TUT] Cambiar los Models de las Armas
 
no revivas thread antiguos

Ciio 12-19-2009 13:28

Re: [ES][TUT] Cambiar los Models de las Armas
 
Por lo que se ve a vista esta bien... marrato lo leere biem xD


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

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