Мониторинг и Раскрутка серверов CS 1.6

[ZP] Как сделать кастомную модель игрокам?

[ZP] Как сделать кастомную модель игрокам? для CS 1.6

В данной статье я вам расскажу как можно сделать кастомную модель игрока путём обычного прописывания через натив, так-же рассмотрим примеры

Автор статьи: Mort3m
Вообще, сама задумка статьи с зм сру, но так как это мертвый сайт, кого это волнует?

В данной статье я вам расскажу как можно добавить собственные ( кастомные ) модели игрокам.
Многие делают эти самые модели через мод, как по мне, легче сделать так, как я опишу в этом гайде.
И так, для начала нам нужен Zombie Plague Fix5a. Потому что в этом фиксе есть натив на установку кастомной модели.

Если данного фикса у вас на моде нету, берём обычный Zombie Plague.

ВНИМАНИЕ! Следующий блок статьи пойдет о том, как добавить натив на установку кастомной модели. Т.е для тех, у кого нет Fix5a.
Приступим.

1. Открываем исходник мода.

2. Ищем строку
public plugin_natives()

3. Ищем свободное место для добавления натива. Либо место, куда вы бы хотели поместить сам натив.
Лично я это буду делать после натива zp_force_buy_extra_item
Добавляем строку:
register_native("zp_override_user_model", "native_override_user_model", 1);

Должно получиться так:
4. Теперь нам надо добавить саму функцию установки кастомной модели.
Спускаемся до строки:
/*================================================================================
 [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;
}

Должно получиться так: ( Шрифт уменьшил чтобы код влез полностью )

Если вы всё сделали правильно, компиляция должна пройти успешно:

ВНИМАНИЕ! Следующий блок статьи пойдет для всех пользователей, имеющих как обычный Zombie Plague так и Fix5a.
Итак, перейдем к основному.
Теперь нам надо будет написать маленький плагин, добавляющий вашу модель игрокам. Сам плагин я выложу в этой статье. 

1. Создаём файл формата .sma с любым угодным вам названием

2. Заходим в файл любым текстовым редактором.

3. Подключаем инклуды + Оффсеты.
#include 
#include 
#include 
#include 

// Оффсеты

define linux_diff_player 5

define m_modelIndexPlayer 491


4. Вписываем натив + некоторые макросы + создаём переменную.
Важно! ПАПКА С МОДЕЛЬЮ И САМА МОДЕЛЬ ДОЛЖНЫ БЫТЬ С ОДИНАКОВЫМИ НАЗВАНИЯМИ
// Сам натив

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;


5. Теперь нам надо вписать два форварда. plugin_precache и plugin_init
И в них зарегистрировать нужное нам событие и регистрацию плагина ( по желанию )
// Прекеш модели
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); }


6. Теперь нам осталось создать публичную функцию и вписать форвард когда игрок превращается в человека.
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

Опубликовал
Сборки CS 1.6
Рейтинг
Просмотры
267 раз.
Скачан
0 раз.

Отзывы