При спавне энтитя на одной карте проваливается через пол ...

Сообщения
264
Реакции
132
Помог
13 раз(а)
В общем в одном плагине плагине происходит спавн энтити на карте и если я например стою на краю ящика - то не спавнится в воздухе, а спускается на землю что вообщем и правильно.
Но вот добавил на сервер карту de_nust2 и там такое ощущение что с полом карты что-то не то, так как энтитя проваливается через него и появляется где то в облаках ...

Плагин не хотелось бы переделывать, так как на других картах он нормально работает, хотелось бы разобраться можно ли эту проблему устранить в самой карте, но если нет, то что бы вы порекомендовали ?

На всякий случай энтититю спавню так :

Код:
engfunc(EngFunc_SetModel, i_Ent, ENT_MODEL)
engfunc(EngFunc_SetSize, i_Ent, Float:{ -8.0, -8.0, -4.0 }, Float:{ 8.0, 8.0, 47.0 })
set_entvar(i_Ent, var_classname, ENT_CLASS)
set_entvar(i_Ent, var_solid, SOLID_NOT)
set_entvar(i_Ent, var_movetype, MOVETYPE_FLY)
set_entvar(i_Ent, var_takedamage, DAMAGE_NO)
set_entvar(i_Ent, var_health, ENT_HEALTH)

потом в синке проверяется наличие игроков в маленьком радиусе и устанавливается

set_entvar(i_Ent, var_solid, SOLID_BBOX)
set_entvar(i_Ent, var_takedamage, DAMAGE_YES)
 
Сообщения
77
Реакции
-1
Предупреждения
30
Помог
1 раз(а)
murlemur, опубликуйте код как вы берёте координаты для спавна, возможно там собака зарыта.
 
Сообщения
264
Реакции
132
Помог
13 раз(а)
Ulianochka,
Код:
#include <amxmodx>
#include <reapi>
#include <fakemeta_util>

new const ENT_MODEL[]  = "models/hostage.mdl"
new const ENT_CLASS[]  = "test_class"
const Float:ENT_HEALTH = 200.0

public plugin_init( )
    register_clcmd("say /t", "TestSpawn")

public plugin_precache()
    precache_model(ENT_MODEL)
    
public TestSpawn(id)
{
    new i_Ent = rg_create_entity("func_breakable")
    
    if(is_nullent(i_Ent))
        return PLUGIN_HANDLED
    
    engfunc(EngFunc_SetModel, i_Ent, ENT_MODEL)
    engfunc(EngFunc_SetSize, i_Ent, Float:{ -8.0, -8.0, -4.0 }, Float:{ 8.0, 8.0, 47.0 })
    
    set_entvar(i_Ent, var_classname, ENT_CLASS)
    set_entvar(i_Ent, var_solid, SOLID_NOT)
    set_entvar(i_Ent, var_movetype, MOVETYPE_FLY)
    set_entvar(i_Ent, var_takedamage, DAMAGE_NO)
    set_entvar(i_Ent, var_health, ENT_HEALTH)
    
    rg_set_rendering(i_Ent, kRenderFxNone,Float: { 255.0, 255.0, 255.0}, kRenderTransAdd, 200.0)
    
    set_entvar(i_Ent, var_sequence, 1)
    set_entvar(i_Ent, var_animtime, get_gametime())
    set_entvar(i_Ent, var_framerate, 1.0)
    
    new Float:vOrigin[3]
    new Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3], Float:vTraceEnd[3]
        
    get_entvar(id, var_origin, vOrigin)
    velocity_by_aim(id, 50, vTraceDirection)
    xs_vec_add(vTraceDirection, vOrigin, vTraceEnd)

    engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0)
    
    get_tr2(0, TR_vecEndPos, vTraceEnd)
    
    new Float:TrAc[3]
    TrAc[0]=vTraceEnd[0]
    TrAc[1]=vTraceEnd[1]
    TrAc[2]=-1000.0
    
    engfunc(EngFunc_TraceLine, vTraceEnd, TrAc, DONT_IGNORE_MONSTERS, id, 0)
    
    new Float:fFraction
    get_tr2(0, TR_flFraction, fFraction)

     if(fFraction < 1.0)
    {
        get_tr2(0, TR_vecEndPos, vTraceEnd)
        get_tr2(0, TR_vecPlaneNormal, vNormal)
    } 

    xs_vec_add(vTraceEnd, vNormal, vNewOrigin)
    engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin)
    
    new Float:angles[3]
    get_entvar(id,var_angles,angles)
    angles[0] = 0.0     
    angles[2] = 0.0                                   
    set_entvar(i_Ent,var_angles,angles)   
    
    fm_set_kvd(i_Ent,"material", "6")
    
    set_entvar(i_Ent, var_nextthink, get_gametime()+ 2.0)
    SetThink(i_Ent,"Think")
    
    return PLUGIN_HANDLED
}

public Think(i_Ent) {
    
    static Float:vOrigin[3]
    get_entvar(i_Ent, var_origin, vOrigin)
    
    if(get_entvar(i_Ent, var_takedamage)== DAMAGE_NO)
    {
        new victim = -1, g_counts = 0
        while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, vOrigin, 12.0)) != 0)
        {
            if(!is_user_connected(victim)||!is_user_alive(victim))
                continue
            g_counts++
        }
        if(g_counts)
        {
            set_entvar(i_Ent, var_nextthink, get_gametime() + 0.3)
            return
        }
        set_entvar(i_Ent, var_solid, SOLID_BBOX)
        set_entvar(i_Ent, var_takedamage, DAMAGE_YES)
        rg_set_rendering(i_Ent)
        set_entvar(i_Ent, var_nextthink, get_gametime() + 0.1)
        return
    }
}

stock rg_set_rendering(const id, const fx = kRenderFxNone, const Float:fColor[3] = {0.0, 0.0, 0.0}, const render = kRenderNormal, const Float:fAmount = 0.0)
{
    set_entvar(id, var_renderfx, fx)
    set_entvar(id, var_rendercolor, fColor)
    set_entvar(id, var_rendermode, render)
    set_entvar(id, var_renderamt, fAmount)
}
22 Ноя 2024
Ulianochka, а все, уже разобрался что нужно было подправить
Код:
- TrAc[2]=-1000.0
+ TrAc[2]=-4096.0
 
Сообщения
77
Реакции
-1
Предупреждения
30
Помог
1 раз(а)
murlemur, возможно луч трассы проваливается под пол. Попробуйте взять координаты через сток получения координат точки на которую смотрит прицел
Код:
stock get_CoordPointInDirView(const index, const Float:dist, Float:output[3]) {
    new Float:start_origins[3];
    pev(index, pev_origin, start_origins);

    new Float:angles[3];
    pev(index, pev_v_angle, angles);

    new Float:end_origins[3];
    end_origins[0] = start_origins[0] + dist * floatcos(angles[1], degrees) * floatabs(floatcos(angles[0], degrees));
    end_origins[1] = start_origins[1] + dist * floatsin(angles[1], degrees) * floatabs(floatcos(angles[0], degrees));
    end_origins[2] = start_origins[2];

    engfunc(EngFunc_TraceLine, start_origins, end_origins, DONT_IGNORE_MONSTERS, index, 0);
    get_tr2(0, TR_vecEndPos, end_origins);

    output[0] = end_origins[0];
    output[1] = end_origins[1];
    output[2] = end_origins[2];
}
Учтите что функция трассы get_tr или get_tr2 не всегда работает корректно по многим причинам.
 
Последнее редактирование:
Сообщения
77
Реакции
-1
Предупреждения
30
Помог
1 раз(а)
murlemur, я тоже обратила внимания на эту переменную, хотела даже её указать в комментарии, но вы меня опередили, молодцы )
 

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

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