[ Grenade ] Hook TE_SMOKE

Сообщения
1,560
Реакции
1,572
Помог
2 раз(а)
Можно ли полностью хукнуть стандартную мессагу дыма после взрыва гранаты ?
Или это только свою кастомную гранату делать полностью ?

Вот есть у меня вариант от Хантера ( к сожалению код не могу предоставить ),где подмена идёт 2х спрайтов этих стандартных грены - 1 основной я поставил свой,а другой,что-бы не дублировался им,просто поставил пустышку у виде чёрного спрайтовика ( аля невидимый )
 
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
MayroN, Ты имеешь ввиду дымок от самой гранаты, воспроизводимый чуть позже, после взрыва самой гранаты? Можно, по идее. Там между взрывом и дымом идёт задержка небольшая. Я не уверен насчёт реализации. Если, в теории, граната после взрыва уже не двигается, можно взять её координаты на момент взрыва, и потом сверить с координатами в хуке мессаги (SVC_TEMPENTITY + TE_SMOKE). Т.е. таким образом отличать другой TE_SMOKE(если он имеет место быть, в принципе) от дыма конкретно после взрыва гранат. Мб кто-то подскажет решение получше.

А, ну или можно в принципе тело think'а переопределить на себя. Т.е. после взрыва гранаты вешать свой think вместо оригинального, где ты будешь играть свой вариант дыма (или что тебе нужно). Там либо дымок идёт, либо UTIL_Bubbles(), если граната в воде находится.

 
Сообщения
1,560
Реакции
1,572
Помог
2 раз(а)
BlackSignature,
Мы непременно примем эти варианты к сведению

Спасибо 👍
 
Сообщения
1,560
Реакции
1,572
Помог
2 раз(а)
Нашёл такой вот код
Вписал TE_SMOKE

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

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

#define SHORT_BYTES    2
#define BYTE_BITS        8
#define PDATA_SAFE        2

const m_usEvent_Grenade = 228

new g_fwTempEntity
new HamHook:g_hGrenadeThinkPost

public plugin_init()
{
    register_plugin("Grenade Decal/Scorch Remover", "0.1", "meTaLiCroSS")
    
    RegisterHam(Ham_Think, "grenade", "fw_Grenade_Think")
}

public msg_TempEntity(iMsgId, iDest, iId)
{
    new iTempEntityId = get_msg_arg_int(1)

    if(iTempEntityId == TE_DECAL || iTempEntityId == TE_WORLDDECAL || iTempEntityId == TE_SMOKE)
        return PLUGIN_HANDLED
    
    return PLUGIN_CONTINUE
}

public fw_Grenade_Think(iEntId)
{
    if(pev_valid(iEntId) == PDATA_SAFE
    && entity_get_float(iEntId, EV_FL_dmgtime) <= get_gametime()
    && ~entity_get_int(iEntId, EV_INT_effects) & EF_NODRAW)
    {
        static iHEGrenEvent
    
        if(!iHEGrenEvent)
            iHEGrenEvent = precache_event(1, "events/createexplo.sc")
            
        new iEventIndex = get_pdata_short(iEntId, m_usEvent_Grenade)
        
        if((!iEventIndex) || (iEventIndex == iHEGrenEvent))
        {
            if(!g_hGrenadeThinkPost)
                g_hGrenadeThinkPost = RegisterHam(Ham_Think, "grenade", "fw_Grenade_Think_Post", true)
            else
                EnableHamForward(g_hGrenadeThinkPost)
            
            g_fwTempEntity = register_message(SVC_TEMPENTITY, "msg_TempEntity")
        }
    }
}

public fw_Grenade_Think_Post(iEntId)
{
    DisableHamForward(g_hGrenadeThinkPost)
    
    unregister_message(SVC_TEMPENTITY, g_fwTempEntity)
    g_fwTempEntity = 0
}
 

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

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