Otro Player Models
#1
Hice esto para un amigo y lo comparto aquí, alguno le servirá.

Modo de uso:
Crear dentro de addons/amxmodx/configs/players_models.ini. (Gracias chema se me olvido xD)
y se edita de esta forma.
Código PHP:
"name || steamid" "modelo TT" "Modelo CT"
Jugador 1 
"Flys" "model_tt1" "model_ct1"

Jugador 2 
"STEAM_0:1:XXXXX" "model_tt2" "model_ct2" 

Code v1:
Código PHP:
#include <amxmodx>
#include <hamsandwich>

//  Cambiar a true si quieres activar el reapi
#define REAPI     false

#if REAPI
#include <reapi>
#else
#include <cstrike>
#define rg_reset_user_model(%1) cs_reset_user_model(%1) 
#define rg_set_user_model(%1,%2) cs_set_user_model(%1,%2) 

#endif 

#define PLUGIN  "Player Models"
#define VERSION "1.0"
#define AUTHOR  "Flys"

#if AMXX_VERSION_NUM > 182
#define client_disconnect client_disconnected
#endif 



#define TT 0
#define CT 1

new g_szUserModelCT[33][32], g_szUserModelTT[33][32]

new 
Trie:g_tModelsInfo[2];

enum _:Stats{
    
Model_tt[20],
    
Model_ct[20],
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
RegisterHam(Ham_Spawn"player""fwd_PlayerSpawn"true)
    
register_clcmd("say /test_model""test")

}
public 
plugin_end()
{
    
TrieDestroy(g_tModelsInfo[TT])
    
TrieDestroy(g_tModelsInfo[CT])

}
public 
client_putinserver(id){
    
arrayset(g_szUserModelCT[id], 0sizeof(g_szUserModelCT[]))
    
arrayset(g_szUserModelTT[id], 0sizeof(g_szUserModelTT[]))

    new 
szAuthID[32], szName[32], szData[32]
    
get_user_authid(idszAuthIDcharsmax(szAuthID))
    
get_user_name(idszNamecharsmax(szName))
    
    for(new 
i=1i<=2i++)
    {
        if( 
TrieGetString(g_tModelsInfo[== CT TT], szAuthIDszDatacharsmax(szData)) || TrieGetString(g_tModelsInfo[== CT TT], szNameszDatacharsmax(szData))  )
        {
            
format(i==1g_szUserModelCT[id]:g_szUserModelTT[id], charsmax(g_szUserModelCT[]), "%s"szData)
        }
    }
}
public 
client_disconnected(id){
    
arrayset(g_szUserModelCT[id], 0sizeof(g_szUserModelCT[]))
    
arrayset(g_szUserModelTT[id], 0sizeof(g_szUserModelTT[]))

}
public 
test(id) {
    
client_print(0print_chat"Model TT : %s",  g_szUserModelTT[id])
    
client_print(0print_chat"Model CT : %s",  g_szUserModelCT[id])
}
public 
plugin_precache(){

    new 
szConfigFile[128], szDatas[70], g_szIndex[35], Data[Stats]
    
get_localinfo("amxx_configsdir"szConfigFilecharsmax(szConfigFile));
    
format(szConfigFilecharsmax(szConfigFile), "%s/players_models.ini"szConfigFile);

    
g_tModelsInfo[TT] = TrieCreate();
    
g_tModelsInfo[CT] = TrieCreate();

    new 
iFile fopen(szConfigFile"rt");
    if( 
iFile )
    {
        while( !
feof(iFile) )
        {
            
fgets(iFileszDatascharsmax(szDatas));
            
trim(szDatas);
            if(!
szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
            {
                continue;
            }
            
parse(szDatasg_szIndex,charsmax(g_szIndex),
                
Data[Model_tt], charsmax(Data[Model_tt]), 
                
Data[Model_ct], charsmax(Data[Model_ct]))


            if(
Data[Model_tt]){
                
precache_player_model(Data[Model_tt])

            }
            if(
Data[Model_ct]){
                
precache_player_model(Data[Model_ct])

            }
            
TrieSetString(g_tModelsInfo[CT], g_szIndexData[Model_ct])
            
TrieSetString(g_tModelsInfo[TT], g_szIndexData[Model_tt])
        }
    }
    
fcloseiFile );
}


public 
fwd_PlayerSpawn(id) {
    if(!
is_user_alive(id)) {
        return 
PLUGIN_HANDLED
    

    new 
team get_user_team(id)
    switch(
team){
        case 
1: {
            if(
g_szUserModelTT[id][0]) rg_set_user_model(idg_szUserModelTT[id])
            else 
rg_reset_user_model(id)
        }
        case 
2: {
            if(
g_szUserModelCT[id][0]) rg_set_user_model(idg_szUserModelCT[id])
            else 
rg_reset_user_model(id)
        }
    }
    
    return 
PLUGIN_HANDLED

}

stock precache_player_model(const modelname[]) 

    static 
longname[128];
    
formatex(longnamecharsmax(longname), "models/player/%s/%s.mdl"modelnamemodelname);
    
precache_model(longname);
    
copy(longname[strlen(longname)-4], charsmax(longname) - (strlen(longname)-4), "T.mdl") ;
    if (
file_exists(longname)) precache_model(longname) ;

Code v2:
Código PHP:
#include <amxmodx>

#define PLUGIN  "Player Models"
#define VERSION "2.0"
#define AUTHOR  "Flys"

//#define USE_REAPI

#if defined USE_REAPI 
#include <reapi>
#else 
#include <cstrike>
#include <fakemeta>

#define rg_reset_user_model(%1) cs_reset_user_model(%1) 
#define rg_set_user_model(%1,%2) cs_set_user_model(%1,%2)
#endif 

#if AMXX_VERSION_NUM < 183
#define MAX_PLAYERS 32
#define client_disconnected client_disconnect
#endif 

#define TT 0
#define CT 1

new g_szUserModelCT[MAX_PLAYERS+1][32], g_szUserModelTT[MAX_PLAYERS+1][32]

new 
Trie:g_tModelsInfo[2]

enum _:Stats{
    
Model_tt[20],
    
Model_ct[20],
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_clcmd("say /t1""test")

    
#if defined USE_REAPI
    
RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel"fwd_SetModel"true)
    
#else
    
register_forward(FM_SetClientKeyValue"fwd_SetModel");
    
#endif
}
public 
plugin_end()
{
    
TrieDestroy(g_tModelsInfo[TT])
    
TrieDestroy(g_tModelsInfo[CT])


}
public 
client_putinserver(id){
    
arrayset(g_szUserModelCT[id], 0sizeof(g_szUserModelCT[]))
    
arrayset(g_szUserModelTT[id], 0sizeof(g_szUserModelTT[]))

    new 
szAuthID[32], szName[32], szData[42]
    
get_user_authid(idszAuthIDcharsmax(szAuthID))
    
get_user_name(idszNamecharsmax(szName))
    
    for(new 
i=1i<=2i++)
    {
        if( 
TrieGetString(g_tModelsInfo[== CT TT], szAuthIDszDatacharsmax(szData)) || TrieGetString(g_tModelsInfo[== CT TT], szNameszDatacharsmax(szData))  )
        {
            
format(i==1g_szUserModelCT[id]:g_szUserModelTT[id], charsmax(g_szUserModelCT[]), "%s"szData)
        }
    }

}

public 
client_disconnected(id){
    
arrayset(g_szUserModelCT[id], 0sizeof(g_szUserModelCT[]))
    
arrayset(g_szUserModelTT[id], 0sizeof(g_szUserModelTT[]))

}
public 
test(id) {
    
client_print(0print_chat"Model TT : %s",  g_szUserModelTT[id] )
    
client_print(0print_chat"Model CT : %s",  g_szUserModelCT[id])
}

public 
plugin_precache(){

    new 
szConfigFile[128], szDatas[70], g_szIndex[35], Data[Stats]
    
get_localinfo("amxx_configsdir"szConfigFilecharsmax(szConfigFile));
    
format(szConfigFilecharsmax(szConfigFile), "%s/players_models.ini"szConfigFile);


    
g_tModelsInfo[TT] = TrieCreate();
    
g_tModelsInfo[CT] = TrieCreate();

    new 
iFile fopen(szConfigFile"rt");
    if( 
iFile )
    {
        while( !
feof(iFile) )
        {
            
fgets(iFileszDatascharsmax(szDatas));
            
trim(szDatas);
            if(!
szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
            {
                continue;
            }
            
parse(szDatasg_szIndex,charsmax(g_szIndex),
                
Data[Model_tt], charsmax(Data[Model_tt]), 
                
Data[Model_ct], charsmax(Data[Model_ct]))

            if(
Data[Model_tt]) precache_player_model(Data[Model_tt]) 
            if(
Data[Model_ct]) precache_player_model(Data[Model_ct])

            
TrieSetString(g_tModelsInfo[CT], g_szIndexData[Model_ct])
            
TrieSetString(g_tModelsInfo[TT], g_szIndexData[Model_tt])
        }
    }
    
fcloseiFile );
}


public 
fwd_SetModel(id, const szInfoBuffer[], const szKey[], const szValue[])
{

    new 
team get_user_team(id)
    
#if defined USE_REAPI
    
switch(team
    { 
        case 
1: {
            if(
g_szUserModelTT[id][0]) rg_set_user_model(idg_szUserModelTT[id])
            else 
rg_reset_user_model(id)
        }
        case 
2: {
            if(
g_szUserModelCT[id][0]) rg_set_user_model(idg_szUserModelCT[id])
            else 
rg_reset_user_model(id)
        }
    }
    
#else

    
if( equal(szKey"model") && is_user_connected(id) )
    {    
        switch(
team){
            case 
1: {
                if(
g_szUserModelTT[id][0]) rg_set_user_model(idg_szUserModelTT[id])
                else 
rg_reset_user_model(id)
            }
            case 
2: {
                if(
g_szUserModelCT[id][0]) rg_set_user_model(idg_szUserModelCT[id])
                else 
rg_reset_user_model(id)
            }
        }
    }

    return 
PLUGIN_HANDLED
    
#endif
}

stock precache_player_model(const modelname[]) 

    static 
longname[128]
    
formatex(longnamecharsmax(longname), "models/player/%s/%s.mdl"modelnamemodelname)
    
precache_model(longname)
    
copy(longname[strlen(longname)-4], charsmax(longname) - (strlen(longname)-4), "T.mdl")
    if (
file_exists(longname)) precache_model(longname)

V1

.sma   Descargar AMXX / player_models.sma (Tamaño: 3.63 KB / Descargas: 93)
V2

.sma   Descargar AMXX / player_models_v2.sma (Tamaño: 4.09 KB / Descargas: 119)
[Imagen: 76561198090851442.png]
Responder
#2
Pero ese Modo de uso donde coloca ?Whatever
Cita: Kikizon2 Dijo :
Lo que deberian de aprender es a escribir, parece que escriben con el escroto en la mano.
Responder
#3
(19/11/2018, 07:43 AM)KevinJesus escribió: Pero ese Modo de uso donde coloca ?Whatever

Se coloca dentro de addons/amxmodx/configs/players_models.ini.

Buen aporte Flys.
Responder
#4
se ve bien y se puede optimizar.
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

(18/11/2014, 05:47 PM)Neeeeeeeeeel.- escribió: Por qué necesitan una guía para todo? Meté mano y que salga lo que salga... es la mejor forma de aprender.

(16/05/2016, 11:08 PM)kikizon2 escribió: No cabe duda que tienen mierda en vez de cerebro, par de pendejos v:
Responder
#5
(19/11/2018, 09:36 PM)OsweRRR escribió: se ve bien y se puede optimizar.
lo se, pero me quede sin ideas, sugiere algo para ver y lo mejoro.
[Imagen: 76561198090851442.png]
Responder
#6
Código:
//  Cambiar a true si quieres activar el reapi
#define REAPI     false

#if REAPI
#include <reapi>
#else
#include <cstrike>
#define rg_reset_user_model(%1) cs_reset_user_model(%1)
#define rg_set_user_model(%1,%2) cs_set_user_model(%1,%2)

#endif

¿Por qué no detectar automáticamente si tiene ReAPI y utilizarlo en el caso de que sí?
Código:
#tryinclude <reapi>

#if !defined _reapi_included
#include <cstrike>
#define rg_reset_user_model(%1) cs_reset_user_model(%1)
#define rg_set_user_model(%1,%2) cs_set_user_model(%1,%2)
#endif

+ En mi opinión, sería mejor usar RG_CBasePlayer_SetClientUserInfoModel
Plugins:
En GitHub
Responder
#7
no es mala idea la verdad. intentare ponerlo!
[Imagen: 76561198090851442.png]
Responder
#8
Y mejor usar constantes:
Código:
new g_szUserModelCT[33][32], g_szUserModelTT[33][32]
->
Código:
new g_szUserModelCT[MAX_PLAYERS+1][32], g_szUserModelTT[MAX_PLAYERS+1][32]

Además, creo que sería mejor cambiar
Código:
#define T 1 y #define CT 2
por
Código:
enum {
  T = 0,
  CT
};
Plugins:
En GitHub
Responder
#9
actualizado pero, con el enum me salen warnings, en cuanto reapi me fue molesto preferí dejarlo así, tenia que añadir si tiene la librería reapi definida, y checkear si el modulo esta cargado, mejor así quien quiera usarlo de una forma u otra lo use y ya.

otra cosa antes el 1.8.2 tenia un bug poniendo models con FM_SetClientKeyValue, al respamear un jugador se lo quitaba, el que le presente ese bug con la v2, use la v1 ya que esta con Ham_Spawn
[Imagen: 76561198090851442.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)