Тествано и работи.
Code: Select all
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
#pragma semicolon 1
#define USE_CSTRIKE 0
#if USE_CSTRIKE == 1
#include <cstrike>
#endif
enum
{
OWNER = 0,
ADMIN,
SMS,
VIP,
MAXITEMS
};
enum _:iData
{
MODEL_T[64],
MODEL_CT[64],
FLAG
};
new const g_szModels[MAXITEMS][iData] =
{
{ "nechev_ownert", "nechev_owner_ct", ADMIN_LEVEL_B },
{ "nechev_tadm", "nechev_adm_ct", ADMIN_LEVEL_D },
{ "nechev_sms_t", "nechev_sms_ct", ADMIN_LEVEL_E },
{ "nechev_tvip", "nechev_vip_ct", ADMIN_LEVEL_F }
};
#if USE_CSTRIKE == 0
new g_bModel[33][32];
#endif
public plugin_init()
{
register_plugin("Admin Models", "v1.1", "Huehue a.k.a AJW1337//");
#if USE_CSTRIKE == 0
register_forward(FM_SetClientKeyValue, "fwdSetKeyValue");
register_message(get_user_msgid( "ClCorpse" ), "eventClCorpse");
#endif
RegisterHam(Ham_Spawn,"player","fwdHamPlayerSpawn", 1);
}
#if USE_CSTRIKE == 0
public client_connect(id)
{
g_bModel[id][0] = '^0';
}
#endif
public plugin_precache()
{
for (new i = 0; i < sizeof g_szModels; i++)
precache_player_model(g_szModels[i]);
}
public fwdHamPlayerSpawn(id)
{
new iFlags = get_user_flags(id), userTeam = get_user_team(id);
if(is_user_alive(id))
{
if (iFlags & g_szModels[OWNER][FLAG])
{
#if USE_CSTRIKE == 1
if (userTeam == 1) cs_set_user_model(id, g_szModels[OWNER][MODEL_T]);
else if (userTeam == 2) cs_set_user_model(id, g_szModels[OWNER][MODEL_CT]);
#else
if (userTeam == 1) SetUserModel(id, g_szModels[OWNER][MODEL_T]);
else if (userTeam == 2) SetUserModel(id, g_szModels[OWNER][MODEL_CT]);
set_user_info(id, "model", g_bModel[id]);
#endif
}
else if (iFlags & g_szModels[ADMIN][FLAG])
{
#if USE_CSTRIKE == 1
if (userTeam == 1) cs_set_user_model(id, g_szModels[ADMIN][MODEL_T]);
else if (userTeam == 2) cs_set_user_model(id, g_szModels[ADMIN][MODEL_CT]);
#else
if (userTeam == 1) SetUserModel(id, g_szModels[ADMIN][MODEL_T]);
else if (userTeam == 2) SetUserModel(id, g_szModels[ADMIN][MODEL_CT]);
set_user_info(id, "model", g_bModel[id]);
#endif
}
else if (iFlags & g_szModels[SMS][FLAG])
{
#if USE_CSTRIKE == 1
if (userTeam == 1) cs_set_user_model(id, g_szModels[SMS][MODEL_T]);
else if (userTeam == 2) cs_set_user_model(id, g_szModels[SMS][MODEL_CT]);
#else
if (userTeam == 1) SetUserModel(id, g_szModels[SMS][MODEL_T]);
else if (userTeam == 2) SetUserModel(id, g_szModels[SMS][MODEL_CT]);
set_user_info(id, "model", g_bModel[id]);
#endif
}
else if (iFlags & g_szModels[VIP][FLAG])
{
#if USE_CSTRIKE == 1
if (userTeam == 1) cs_set_user_model(id, g_szModels[VIP][MODEL_T]);
else if (userTeam == 2) cs_set_user_model(id, g_szModels[VIP][MODEL_CT]);
#else
if (userTeam == 1) SetUserModel(id, g_szModels[VIP][MODEL_T]);
else if (userTeam == 2) SetUserModel(id, g_szModels[VIP][MODEL_CT]);
set_user_info(id, "model", g_bModel[id]);
#endif
}
else
{
#if USE_CSTRIKE == 1
cs_reset_user_model(id);
#else
g_bModel[id][0] = '^0';
set_user_info(id, "model", "");
#endif
}
}
}
#if USE_CSTRIKE == 0
public fwdSetKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
{
if(g_bModel[id][0] && equal(szKey, "model") && !equal(szValue, g_bModel[id]))
{
set_user_info(id, "model", g_bModel[id]);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public eventClCorpse()
{
new id = get_msg_arg_int(12);
if(g_bModel[id][0])
{
set_msg_arg_string(1, g_bModel[id]);
}
}
stock SetUserModel(id, szModelName[])
{
return copy(g_bModel[id], charsmax(g_bModel), szModelName);
}
#endif
// Credits to OciXCrom for stock
stock precache_player_model(szModel[])
{
new szFile[128];
formatex(szFile, charsmax(szFile), "models/player/%s/%s.mdl", szModel, szModel);
precache_model(szFile);
replace(szFile, charsmax(szFile), ".mdl", "T.mdl");
if (file_exists(szFile))
precache_model(szFile);
}