[ HL ] Тухнет нужный скин

Сообщения
1,498
Реакции
1,496
Помог
2 раз(а)
Как я раньше давал пример на установку нужного скина на зимний период
Столкнулся с проблемой для HL.

Вот я вижу его заснеженного и живого

hl 2022-12-22 10-46-32-89.jpg

Убиваю,и когда проходит чутка секунд и скин тухнет на стандартный у модели

hl 2022-12-22 10-46-39-87.jpg

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

Код:
stock SetUserModel(id, szModelName[])
{
    if(map_type == 3)
    {
        set_pev(id, pev_skin, 1);
    }

    set_user_info(id, MODEL_KEY, szModelName)
    copy(g_szModel[id], charsmax(g_szModel), szModelName)
}
Но здесь оно реально не срабатывает вообще (((
Код:
public Message_ClCorpse()
{
    new id = get_msg_arg_int(12)

    if(g_szModel[id])
    {
        if(map_type == 3)
        {
            set_pev(id, pev_skin, 1);
            set_msg_arg_string(1, g_szModel[id])
        }
    }
}
На заметку: Вдруг что,такого нюанса с трупами в cs нету,только в hl
Или же мне нужно делать создание трупа и там прописывать это значение?

Есть решение?
Благодарю за внимание

Код:
#include <amxmodx>
#include <fakemeta>

new g_szModel[33]
new const MODEL_KEY[] = "model"
new const g_szModels[][] = { "cdc", "UT_Robo_II", "GERMANY", "Genestealer", "Spawn", "Scream", "lobo", "TERRORISTS", "UT_Horror_I", "UT_Horror_II", "UT_Infantry_V", "UT_Xan_I" }

new map_type;

public plugin_init()
{
    register_plugin("Random Model", "1.0", "OciXCrom & Huehue")
    register_forward(FM_SetClientKeyValue, "FM__SetClientKeyValue")
    register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse")
}

public ws_map_type(type)
{
    map_type = type;
}

public plugin_precache()
{
    for(new i; i < sizeof(g_szModels); i++)
    {
        precache_player_model(g_szModels[i])
    }
}

public client_putinserver(id)
{
    SetUserModel(id, g_szModels[random(sizeof(g_szModels))])
}

public FM__SetClientKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
{
    if(g_szModel[id] && equal(szKey, MODEL_KEY) && !equal(szValue, g_szModel[id]))
    {
        set_user_info(id, MODEL_KEY, g_szModel[id])
        return FMRES_SUPERCEDE
    }

    return FMRES_IGNORED
}

public Message_ClCorpse()
{
    new id = get_msg_arg_int(12)

    if(g_szModel[id])
    {
        if(map_type == 3)
        {
            set_pev(id, pev_skin, 1);
            set_msg_arg_string(1, g_szModel[id])
        }
    }
}

stock SetUserModel(id, szModelName[])
{
    if(map_type == 3)
    {
        set_pev(id, pev_skin, 1);
    }

    set_user_info(id, MODEL_KEY, szModelName)
    copy(g_szModel[id], charsmax(g_szModel), szModelName)
}

precache_player_model(szModel[])
{
    static 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)
    }
}
 
Последнее редактирование:
Сообщения
526
Реакции
461
Предупреждения
16
Помог
9 раз(а)
C++:
public Message_ClCorpse()
{
    new id = get_msg_arg_int(12)

    if(g_szModel[id])
    {
        if(map_type == 3)
        {
            set_pev(id, pev_skin, 1);
            set_msg_arg_string(1, g_szModel[id])
        }
    }
}
Ты тут заново вставляешь скин на индекс (энтити) игрока которого уже установлен в SetUserModel.
Труп создаётся на стороне клиента и никаких скинов он не понимает (в кс есть поддержка боди а в хл думаю его нет)
22 Дек 2022
Можешь пробовать создать свой труп на стороне сервера (при этом заблочив ClCorpse)
 
Сообщения
1,498
Реакции
1,496
Помог
2 раз(а)
Vaqtincha,
Вот к примеру Код прошлый на Трупы,который в кс работает и не тухнет установленный скин в мессаге создания их
Я подумал,раз уж в ХЛ нет рестарта раунда и нет выбора команды при заходе в игру,то я всё не нужное снёс включая pev_team
Но результата не принесло никакого (
Как буд-то код вообще не работает и даже нет того плавного исчезновения

Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN_NAME    "REMOVE CORPSE"
#define PLUGIN_VERSION    "2.0"
#define PLUGIN_AUTHOR    "fl0wer | MayroN"

new const CORPSE_CLASSNAME[] = "ent_corpse";

#define MAX_CLIENTS    32

#define LIFE_CORPSE        1.0    //    Через сколько секунд удалять Труп игрока

new const Float:CORPSE_MINS[3] = { -24.0, -24.0, 0.0 };
new const Float:CORPSE_MAXS[3] = { 24.0, 24.0, 24.0 };

new g_iCorpse[MAX_PLAYERS + 1];

#define STEP 10.0

enum (+= 3591)
{
    STATUS_NONE = 0,
    STATUS_EFFECT,
    STATUS_KILL
}

new map_type;

public plugin_init()
{
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);

    RegisterHam(Ham_Spawn, "player", "Corpse_Spawn", true);
    register_think("ent_corpse", "Remove_Corpse");
    register_message(get_user_msgid("ClCorpse"), "MSG_ClCorpse");
}

public ws_map_type(type)
{
    map_type = type;
}

public client_disconnected(id)
{
    Corpse_Remove(id);
}

public Corpse_Spawn(id)
{
    Corpse_Remove(id);
}

public MSG_ClCorpse(id, dest, player)
{
    new model[32];
    new Float:vecOrigin[3];
    new Float:vecAngles[3];

    get_msg_arg_string(1, model, charsmax(model));
 
    for (new i; i < 3; i++)
    {
        vecOrigin[i] = float(get_msg_arg_int(2 + i)) / 128.0;
        vecAngles[i] = get_msg_arg_float(5 + i);
    }

    new sequence = get_msg_arg_int(9);
    new playerId = get_msg_arg_int(12);
 
    Corpse_Create(fmt("models/player/%s/%s.mdl", model, model), vecOrigin, vecAngles, sequence, playerId);
    return PLUGIN_HANDLED;
}

Corpse_Create(model[], Float:vecOrigin[3], Float:vecAngles[3], sequence, owner)
{
    new ent = create_entity("info_target");
 
    if (!is_valid_ent(ent))
        return;
 
    g_iCorpse[owner] = ent;
 
    engfunc(EngFunc_SetModel, ent, model);
    engfunc(EngFunc_SetSize, ent, CORPSE_MINS, CORPSE_MAXS);
    engfunc(EngFunc_SetOrigin, ent, vecOrigin);
 
    set_pev(ent, pev_classname, CORPSE_CLASSNAME);
    set_pev(ent, pev_angles, vecAngles);
    set_pev(ent, pev_owner, owner);

    set_pev(ent, pev_sequence, sequence);
    set_pev(ent, pev_framerate, 1.0);
    set_pev(ent, pev_animtime, 0.0);

    if(map_type == 3)
    {
        set_pev(ent, pev_skin, 1);
    }
 
    set_pev(ent, pev_nextthink, get_gametime() + LIFE_CORPSE);
}

Corpse_Remove(id)
{
    new ent = g_iCorpse[id];
 
    if(is_valid_ent(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
 
    g_iCorpse[id] = 0;
}

public Remove_Corpse(ent)
{
    if (!is_valid_ent(ent) || pev(ent, pev_impulse) == STATUS_KILL)
        return;

    new Float:flOrigin[3]
    pev(ent,pev_origin,flOrigin)
 
    switch(pev(ent, pev_impulse))
    {
        case STATUS_NONE:
        {
            set_pev(ent, pev_movetype, MOVETYPE_NONE);
            set_pev(ent, pev_solid, SOLID_NOT);
            set_pev(ent, pev_rendermode, kRenderTransAlpha);        
            set_pev(ent, pev_renderamt, 100.0);
            set_pev(ent, pev_impulse, STATUS_EFFECT);    
        }

        case STATUS_EFFECT:
        {
            if (pev(ent, pev_renderamt) > 0.0)
            {
                set_pev(ent, pev_renderamt, floatmax(0.0, pev(ent, pev_renderamt) - STEP));
            }
            else
            {
                set_pev(ent, pev_impulse, STATUS_KILL);
            }
        }
     
        case STATUS_KILL:
        {
            set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME);
        }
    }
 
    set_pev(ent,pev_nextthink,get_gametime() + 0.1)
}
 
Сообщения
526
Реакции
461
Предупреждения
16
Помог
9 раз(а)

Вложения

Сообщения
1,498
Реакции
1,496
Помог
2 раз(а)

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу