public plugin_natives()register_native("zp_override_user_model", "native_override_user_model", 1);/*================================================================================
[Custom Natives]
=================================================================================*/// Native: zp_override_user_model
public native_override_user_model(id, const newmodel[], modelindex)
{
// ZP disabled
if (!g_pluginenabled)
return false;
if (!is_user_valid_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
// Strings passed byref
param_convert(2)
// Remove previous tasks
remove_task(id+TASK_MODEL)
// Custom models stuff
static currentmodel[32]
if (g_handle_models_on_separate_ent)
{
// Set the right model
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// Set model on player model entity
fm_set_playermodel_ent(id)
}
else
{
// Get current model for comparing it with the current one
fm_cs_get_user_model(id, currentmodel, charsmax(currentmodel))
// Set the right model, after checking that we don't already have it
if (!equal(currentmodel, newmodel))
{
copy(g_playermodel[id], charsmax(g_playermodel[]), newmodel)
if (g_set_modelindex_offset && modelindex) fm_cs_set_user_model_index(id, modelindex)
// An additional delay is offset at round start
// since SVC_BAD is more likely to be triggered there
if (g_newround)
set_task(5.0 * g_modelchange_delay, "fm_user_model_update", id+TASK_MODEL)
else
fm_user_model_update(id+TASK_MODEL)
}
}
return true;
}#include
#include
#include
#include
// Оффсеты
define linux_diff_player 5
define m_modelIndexPlayer 491
// Сам натив
native zp_override_user_model(pPlayer, szModel[], iModelIndex = 0);
define MODEL_NAME "tommy" // Название модели
define MODEL_PATH "models/player/%s/%s.mdl" // Оригинальный путь до моделей.
define MODEL_ACCESS_ADMIN ADMIN_BAN // Установка модели только Админу. Закомментируйте, если не нужно
// Создаём переменную для хранения в ней индекса модели
new g_iszModelIndex;
// Прекеш модели
public plugin_precache()
{
static szModelPath[128];
formatex(szModelPath, charsmax(szModelPath), MODEL_PATH, MODEL_NAME, MODEL_NAME);
// Присваиваем индекс модели переменной
g_iszModelIndex = engfunc(EngFunc_PrecacheModel, szModelPath);
}
// Регистрация нужных нам событий ( register_plugin по желанию )
public plugin_init()
{
// Регистрируем плагин
register_plugin("[AMXX] Custom Model", "0.0.1", "m0rt3m/тут может быть ваш ник");
// Ловим эвент спавна игрока
RegisterHam(Ham_Spawn, "player", "HamHook__PlayerSpawn_Post", 1);
}
public HamHook__PlayerSpawn_Post(iPlayer)
{
// Проверяем на коннект
if(!is_user_connected(iPlayer))
return;
// Проверяем на зомби и выжившего
if(zp_get_user_zombie(iPlayer) || zp_get_user_survivor(iPlayer))
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
public zp_user_humanized_post(iPlayer, iSurvivor)
{
// Проверяем на выжившего
if(iSurvivor)
return;
// Проверяем на наличие флага, если макрос не закомментирован
#if defined MODEL_ACCESS_ADMIN
if(~get_user_flags(iPlayer) & MODEL_ACCESS_ADMIN)
return;
#endif
// Выставляем модель
zp_override_user_model(iPlayer, MODEL_NAME, g_iszModelIndex);
// Выставляем нужный индекс модели, чтобы не слетал
set_pdata_int(iPlayer, m_modelIndexPlayer, g_iszModelIndex, linux_diff_player);
}
Теги:
cs 1.6 native custome model model zombie plague zp zp 4.3