19/11/2018, 01:08 AM
(Última modificación: 26/11/2018, 02:40 AM por PredatorFlys. Edited 7 times in total.)
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.
Code v1:
Code v2:
V1
Descargar AMXX / player_models.sma (Tamaño: 3.63 KB / Descargas: 93)
V2
Descargar AMXX / player_models_v2.sma (Tamaño: 4.09 KB / Descargas: 119)
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(PLUGIN, VERSION, AUTHOR)
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], 0, sizeof(g_szUserModelCT[]))
arrayset(g_szUserModelTT[id], 0, sizeof(g_szUserModelTT[]))
new szAuthID[32], szName[32], szData[32]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))
for(new i=1; i<=2; i++)
{
if( TrieGetString(g_tModelsInfo[i == 1 ? CT : TT], szAuthID, szData, charsmax(szData)) || TrieGetString(g_tModelsInfo[i == 1 ? CT : TT], szName, szData, charsmax(szData)) )
{
format(i==1? g_szUserModelCT[id]:g_szUserModelTT[id], charsmax(g_szUserModelCT[]), "%s", szData)
}
}
}
public client_disconnected(id){
arrayset(g_szUserModelCT[id], 0, sizeof(g_szUserModelCT[]))
arrayset(g_szUserModelTT[id], 0, sizeof(g_szUserModelTT[]))
}
public test(id) {
client_print(0, print_chat, "Model TT : %s", g_szUserModelTT[id])
client_print(0, print_chat, "Model CT : %s", g_szUserModelCT[id])
}
public plugin_precache(){
new szConfigFile[128], szDatas[70], g_szIndex[35], Data[Stats]
get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
format(szConfigFile, charsmax(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(iFile, szDatas, charsmax(szDatas));
trim(szDatas);
if(!szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
{
continue;
}
parse(szDatas, g_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_szIndex, Data[Model_ct])
TrieSetString(g_tModelsInfo[TT], g_szIndex, Data[Model_tt])
}
}
fclose( iFile );
}
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(id, g_szUserModelTT[id])
else rg_reset_user_model(id)
}
case 2: {
if(g_szUserModelCT[id][0]) rg_set_user_model(id, g_szUserModelCT[id])
else rg_reset_user_model(id)
}
}
return PLUGIN_HANDLED
}
stock precache_player_model(const modelname[])
{
static longname[128];
formatex(longname, charsmax(longname), "models/player/%s/%s.mdl", modelname, modelname);
precache_model(longname);
copy(longname[strlen(longname)-4], charsmax(longname) - (strlen(longname)-4), "T.mdl") ;
if (file_exists(longname)) precache_model(longname) ;
}
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(PLUGIN, VERSION, AUTHOR)
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], 0, sizeof(g_szUserModelCT[]))
arrayset(g_szUserModelTT[id], 0, sizeof(g_szUserModelTT[]))
new szAuthID[32], szName[32], szData[42]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))
for(new i=1; i<=2; i++)
{
if( TrieGetString(g_tModelsInfo[i == 1 ? CT : TT], szAuthID, szData, charsmax(szData)) || TrieGetString(g_tModelsInfo[i == 1 ? CT : TT], szName, szData, charsmax(szData)) )
{
format(i==1? g_szUserModelCT[id]:g_szUserModelTT[id], charsmax(g_szUserModelCT[]), "%s", szData)
}
}
}
public client_disconnected(id){
arrayset(g_szUserModelCT[id], 0, sizeof(g_szUserModelCT[]))
arrayset(g_szUserModelTT[id], 0, sizeof(g_szUserModelTT[]))
}
public test(id) {
client_print(0, print_chat, "Model TT : %s", g_szUserModelTT[id] )
client_print(0, print_chat, "Model CT : %s", g_szUserModelCT[id])
}
public plugin_precache(){
new szConfigFile[128], szDatas[70], g_szIndex[35], Data[Stats]
get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
format(szConfigFile, charsmax(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(iFile, szDatas, charsmax(szDatas));
trim(szDatas);
if(!szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
{
continue;
}
parse(szDatas, g_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_szIndex, Data[Model_ct])
TrieSetString(g_tModelsInfo[TT], g_szIndex, Data[Model_tt])
}
}
fclose( iFile );
}
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(id, g_szUserModelTT[id])
else rg_reset_user_model(id)
}
case 2: {
if(g_szUserModelCT[id][0]) rg_set_user_model(id, g_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(id, g_szUserModelTT[id])
else rg_reset_user_model(id)
}
case 2: {
if(g_szUserModelCT[id][0]) rg_set_user_model(id, g_szUserModelCT[id])
else rg_reset_user_model(id)
}
}
}
return PLUGIN_HANDLED
#endif
}
stock precache_player_model(const modelname[])
{
static longname[128]
formatex(longname, charsmax(longname), "models/player/%s/%s.mdl", modelname, modelname)
precache_model(longname)
copy(longname[strlen(longname)-4], charsmax(longname) - (strlen(longname)-4), "T.mdl")
if (file_exists(longname)) precache_model(longname)
}
Descargar AMXX / player_models.sma (Tamaño: 3.63 KB / Descargas: 93)
V2
Descargar AMXX / player_models_v2.sma (Tamaño: 4.09 KB / Descargas: 119)