Свечение (Glow) позволяет разрушать func_breakable касанием гранаты

  • Автор темы Автор темы razex
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Сообщения
5
Рейтинг
0
Здравствуйте.
У меня есть плагин, который добавляет свечение (glow) и прозрачность для разрушаемых объектов на карте (func_breakable).
Проблема заключается в том, что когда свечение включено, объект может быть разрушен простым касанием гранаты. Если убрать эффект свечения, объект работает нормально и не разрушается от такого контакта.
Может ли кто-нибудь помочь определить причину этой проблемы?

Pawn:
public Round_Start() {

    new iEnt = -1
    while ((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "func_breakable")) != 0) {
        if (!pev_valid(iEnt) || (pev(iEnt, pev_effects) & EF_NODRAW)) continue
        if (pev(iEnt, pev_spawnflags) & SF_BREAK_TRIGGER_ONLY) continue

        set_pev(iEnt, pev_rendermode, kRenderTransColor)
        set_pev(iEnt, pev_rendercolor, g_fUnifiedColor)
        set_pev(iEnt, pev_renderamt, GLOW_AMOUNT)
        set_pev(iEnt, pev_renderfx, kRenderFxGlowShell)
    }
}
 
set_pev(iEnt, pev_renderfx, kRenderFxGlowShell)
у меня если честно не устанавливается glow 🧐
Могу предложить 2 варианта

1. Не менять rendermode > 0
пссс.. Причина скорее в том что все func_breakable если rendermode > 0 это типо стекло и вызывается Touch
2. Блокировать касание
Pawn:
RegisterHam(Ham_Touch, "func_breakable", "Ham_Touch_Pre", 0)

public Ham_Touch_Pre(iEnt, iOther) {
    if (!is_entity(iEnt)) return HAM_IGNORED
   
    if (get_entvar(iEnt, var_rendermode) != 0) {
        if (is_entity(iOther)) {
            new szOtherClass[32]
            get_entvar(iOther, var_classname, szOtherClass, charsmax(szOtherClass))
           
            if (equal(szOtherClass, "grenade") ||
                equal(szOtherClass, "hegrenade") ||
                equal(szOtherClass, "flashbang") ||
                equal(szOtherClass, "smokegrenade")) {
                return HAM_SUPERCEDE
            }
        }
    }
   
    return HAM_IGNORED
}

 
Последнее редактирование:
у меня если честно не устанавливается glow 🧐
Могу предложить 2 варианта

1. Не менять rendermode > 0
пссс.. Причина скорее в том что все func_breakable если rendermode > 0 это типо стекло и вызывается Touch
2. Блокировать касание
Pawn:
RegisterHam(Ham_Touch, "func_breakable", "Ham_Touch_Pre", 0)

public Ham_Touch_Pre(iEnt, iOther) {
    if (!is_entity(iEnt)) return HAM_IGNORED
  
    if (get_entvar(iEnt, var_rendermode) != 0) {
        if (is_entity(iOther)) {
            new szOtherClass[32]
            get_entvar(iOther, var_classname, szOtherClass, charsmax(szOtherClass))
          
            if (equal(szOtherClass, "grenade") ||
                equal(szOtherClass, "hegrenade") ||
                equal(szOtherClass, "flashbang") ||
                equal(szOtherClass, "smokegrenade")) {
                return HAM_SUPERCEDE
            }
        }
    }
  
    return HAM_IGNORED
}

Это полный код :
Pawn:
#include <amxmodx>
#include <fakemeta>
#include <reapi>

#define GLOW_AMOUNT 190.0

new Float:g_fUnifiedColor[3]

public plugin_init()
{
    register_plugin("Breakable Glow", "2.4", "Razex")

    register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
}

public Event_NewRound() {
    
    g_fUnifiedColor[0] = float(random_num(50, 200))
    g_fUnifiedColor[1] = float(random_num(50, 200))
    g_fUnifiedColor[2] = float(random_num(50, 200))
    
    set_task(1.0, "ApplyGlowToAll")
}

public ApplyGlowToAll() {

    new iEnt = -1
    while ((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "func_breakable")) != 0) {
        if (!pev_valid(iEnt) || (pev(iEnt, pev_effects) & EF_NODRAW)) continue
        if (pev(iEnt, pev_spawnflags) & SF_BREAK_TRIGGER_ONLY) continue

        set_pev(iEnt, pev_rendermode, kRenderTransColor)
        set_pev(iEnt, pev_rendercolor, g_fUnifiedColor)
        set_pev(iEnt, pev_renderamt, GLOW_AMOUNT)
        set_pev(iEnt, pev_renderfx, kRenderFxGlowShell)
    }
}

Когда я отключаю плагин, который добавляет glow, проблема исчезает, и func_breakable больше не разрушается от простого касания гранаты.
 
razex, вам уже сказали в чём проблема и дали вариант решения. Если не понимаете даже базовых вещей, вам в раздел заказов. Здесь не бюро исправления ошибок нейронки, а раздел помощи тем, кто вникает и учится делать своей головой.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх