Tutaj kod z rozróżnianiem na team'y. Dałem także dostęp (według życzenia) do modeli na flagę "H", czyli ADMIN_CFG.
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new const model_vip_t[][] = { "vip_t" }
new const model_vip_ct[][] = { "vip_ct" }
const Float:MODEL_DELAY = 0.2
new g_has_custom_model[33],g_player_model[33][32] ,Float:g_models_counter
new pcvar_on
enum(+=100)
{
TASK_MODEL = 100
}
new const VERSION[] = "1.0"
public plugin_init()
{
register_plugin("VIP Model", VERSION, "FakeNick")
pcvar_on = register_cvar("vip_on","1")
if(!get_pcvar_num(pcvar_on))
return
RegisterHam(Ham_Spawn,"player","fw_PlayerSpawn",1)
register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
register_logevent("event_round_end", 2, "1=Round_End")
}
public plugin_precache()
{
new i,modelpath[100]
for(i = 0;i < sizeof model_vip_t; i++)
{
formatex(modelpath, sizeof modelpath - 1, "models/player/%s/%s.mdl", model_vip_t[i], model_vip_t[i])
engfunc(EngFunc_PrecacheModel,modelpath)
}
for(i = 0; i < sizeof model_vip_ct; i++)
{
formatex(modelpath,sizeof modelpath - 1, "models/player/%s/%s.mdl",model_vip_ct[i],model_vip_ct[i])
engfunc(EngFunc_PrecacheModel,modelpath)
}
}
public event_round_end()
{
g_models_counter = 0.0
}
public fw_PlayerSpawn(id)
{
if(!is_user_alive(id))
return
if(get_user_flags(id) & ADMIN_CFG)
{
remove_task(id + TASK_MODEL)
if(get_user_team(id) == 1)
{
copy(g_player_model[id], sizeof g_player_model[] - 1, model_vip_t[random_num(0, sizeof model_vip_t -1)])
}else if(get_user_team(id) == 2)
{
copy(g_player_model[id], sizeof g_player_model[] - 1, model_vip_ct[random_num(0, sizeof model_vip_ct -1)])
}
new currentmodel[32]
fm_get_user_model(id, currentmodel, sizeof currentmodel - 1)
if (!equal(currentmodel, g_player_model[id]))
{
set_task(1.0 + g_models_counter, "task_set_model", id + TASK_MODEL)
g_models_counter += MODEL_DELAY
}
}
}
public fw_SetClientKeyValue(id, const infobuffer[], const key[])
{
if (g_has_custom_model[id] && equal(key, "model"))
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public fw_ClientUserInfoChanged(id)
{
if (!g_has_custom_model[id])
return FMRES_IGNORED
static currentmodel[32]
fm_get_user_model(id, currentmodel, sizeof currentmodel - 1)
if (!equal(currentmodel, g_player_model[id]))
fm_set_user_model(id, g_player_model[id])
return FMRES_IGNORED
}
public task_set_model(id)
{
id -= TASK_MODEL
fm_set_user_model(id, g_player_model[id])
}
stock fm_set_user_model(player, const modelname[])
{
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", modelname)
g_has_custom_model[player] = true
}
stock fm_get_user_model(player, model[], len)
{
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
}
stock fm_reset_user_model(player)
{
g_has_custom_model[player] = false
dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}
Modele dla CT nazwij vip_ct.mdl i umieść go w
models/player/vip_ct a model dla T nazwij vip_t.mdl i umieść go w
models/player/vip_t.