Рендер энтити

Сообщения
8
Реакции
0
Приветствую, подскажите как реализовать функцию что бы у разных игроков у одного и тоже энтити pev_rendercolor был разный, а также настроить прозрачность, если не сложно пример функции можете прислать?
 
Решение
FM_AddToFullPack + set_es.

C-подобный:
#include <amxmodx>
#include <fakemeta>

new bool: g_bIsState[MAX_PLAYERS+1];

public plugin_init() {
    register_forward(FM_AddToFullPack, "fwd_AddToFullPack_Post", true);

    register_clcmd("say /state", "_state_onoff");
}

public fwd_AddToFullPack_Post(es, e, ent, host, hostflags, player, pSet) {
    if(!pev_valid(ent)) {
        return;
    }

    static szClassName[10];
    pev(ent, pev_classname, szClassName, charsmax(szClassName));

    if(!equal(szClassName, "func_door")) {
        return;
    }

    set_es(es, ES_RenderFx, kRenderFxGlowShell);
    set_es(es, ES_RenderMode, kRenderTransColor);
    set_es(es, ES_RenderAmt, 100);

    if(g_bIsState[host]) {
        set_es(es, ES_RenderColor, {255, 0...
FM_AddToFullPack + set_es.

C-подобный:
#include <amxmodx>
#include <fakemeta>

new bool: g_bIsState[MAX_PLAYERS+1];

public plugin_init() {
    register_forward(FM_AddToFullPack, "fwd_AddToFullPack_Post", true);

    register_clcmd("say /state", "_state_onoff");
}

public fwd_AddToFullPack_Post(es, e, ent, host, hostflags, player, pSet) {
    if(!pev_valid(ent)) {
        return;
    }

    static szClassName[10];
    pev(ent, pev_classname, szClassName, charsmax(szClassName));

    if(!equal(szClassName, "func_door")) {
        return;
    }

    set_es(es, ES_RenderFx, kRenderFxGlowShell);
    set_es(es, ES_RenderMode, kRenderTransColor);
    set_es(es, ES_RenderAmt, 100);

    if(g_bIsState[host]) {
        set_es(es, ES_RenderColor, {255, 0, 0});
    }
    else {
        set_es(es, ES_RenderColor, {0, 255, 0});
    }
}

public _state_onoff(pPlayer) {
    g_bIsState[pPlayer] = !g_bIsState[pPlayer];
}

Для примера данный плагин меняет цвет дверей для каждого игрока в зависимости от значения переменной g_bIsState, (say /state переключает состояние).
Это просто пример, все энтити лучше заранее кэшировать, а не проверять в фуллпаке каждый раз. Потому что функция вызывается очень часто.

Параметры:
es - структура данных. Для работы функций get_es/set_es
ent - индекс отрисовываемой энтити
host - индекс игрока
player - 1 если ent это игрок, 0 - любой другой объект.

Для работы хватит этой информации.
 
Решение
@Kurtis, а через FM_AddToFullPack возможно реализовать через ES_Solid что бы одна команда проходила сквозь объект (SOLID_NOT) а другая нет (SOLID_BBOX)?
 
@Noob_with_cheats, есть модель, создаю энтити через rg_create_entity("info_target"), выставляю размеры и тд, вот через этот объект при помощи FM_AddToFullPack и ES_Solid возможно реализовать то что я написал сообщением выше
 
@Noob_with_cheats, есть модель, создаю энтити через rg_create_entity("info_target"), выставляю размеры и тд, вот через этот объект при помощи FM_AddToFullPack и ES_Solid возможно реализовать то что я написал сообщением выше
Да, можно. Посмотреть team semiclip, именно старый amxx плагин.
 
посмотрел старый плагин, принцип понял, но не получается то чего ожидаю, перепробовал смену var_movetype и var_solid, но игроки из одной команды не могут пройти, хотя цвет свечения меняется, из за чего ES_Solid может не примерятся?
C-подобный:
@FM_AddToFullPack_Post(es, e, ent, host, hostflags, player, pSet)
{
    if (is_nullent(ent) || !FClassnameIs(ent, ClassName))
        return;

    if (get_entvar(ent, var_create_stage) != 2)
        return;

    switch (get_member(host, m_iTeam))
    {
        case TEAM_CT:
        {
            set_es(es, ES_Solid, SOLID_NOT);

            set_es(es, ES_RenderMode, kRenderTransAlpha);
            set_es(es, ES_RenderAmt, 80);

            set_es(es, ES_RenderFx, kRenderFxGlowShell);
            set_es(es, ES_RenderColor, {0, 0, 150});
        }
    }
}
C-подобный:
    new ent = rg_create_entity(SandbagsClassNameReferance);

    if (is_nullent(ent))
        return -1;

    set_entvar(ent, var_classname, ClassName);
    set_entvar(ent, var_model, Model);
    set_entvar(ent, var_modelindex, ModelIndex);
    set_entvar(ent, var_owner, id);
    set_entvar(ent, var_movetype, MOVETYPE_FLY);
    set_entvar(ent, var_solid, SOLID_NOT); // в think меняю на SOLID_BBOX

    engfunc(EngFunc_SetSize, ent, {-27.260000, -22.280001, -22.290001}, {27.340000,  26.629999,  29.020000});

    new effects = get_entvar(ent, var_effects);
    set_entvar(ent, var_effects, effects |= EF_OWNER_VISIBILITY); // в think эффект уберается
    set_entvar(ent, var_create_stage, 1);
    set_entvar(ent, var_takedamage, DAMAGE_NO);
    set_entvar(ent, var_health, _MaxHealth);
    set_entvar(ent, var_max_health, _MaxHealth);

    fm_set_rendering(ent, kRenderFxGlowShell, 255, 255, 0, kRenderTransAlpha, 80); // в think свечение уберается

    set_entvar(ent, var_nextthink, get_gametime() + 0.01);
    SetThink(ent, "@Sandbags_Entity_Think");
 

Кто просматривает тему

Назад
Верх