Вопрос Bbox in [NL]

Начинающий
Статус
Оффлайн
Регистрация
6 Дек 2021
Сообщения
8
Реакции[?]
0
Поинты[?]
0
я вроде не рукожоп вроде могу делать дефолт вещи но я не могу нормально получить кординаты бокса чтобы он был ровно как противник
Код:
local group_ref = ui.create("Group")

local enable = group_ref:button("LC flag")

local break_lc_positions = {}
local data = {}

local function time_to_ticks(t)
    return math.floor(0.5 + (t / globals.tickinterval))
end

local function on_net_update_end()
    for _, player in ipairs(entity.get_players(true)) do
        local sim_time = time_to_ticks(player.m_flSimulationTime)
        local ent_index = player:get_index()

        local origin = player:get_origin()
        local velocity = player.m_vecVelocity:length2d()
        local player_data = data[ent_index]

        if player_data == nil then
            data[ent_index] = {
                last_sim_time = sim_time,
                last_origin = origin,
                breaking_lc = false,
            }
        else
            local delta_ticks = sim_time - player_data.last_sim_time
            local delta_position = (origin - player_data.last_origin):length2dsqr()

            local is_teleport = delta_position > (64 * 64)
            local is_velocity_break = velocity > 400 and delta_position > (velocity * globals.tickinterval)^2

            player_data.breaking_lc = is_teleport or is_velocity_break

            if player_data.breaking_lc then
                break_lc_positions[ent_index] = {
                    position = origin,
                    time = globals.tickcount
                }
            end

            player_data.last_sim_time = sim_time
            player_data.last_origin = origin
        end
    end
end

local function on_paint()
    local tickcount = globals.tickcount

    for ent_index, data in pairs(break_lc_positions) do
        local position = data.position
        local break_time = data.time

        if tickcount - break_time > time_to_ticks(2) then
            break_lc_positions[ent_index] = nil
        else
            local screen_pos = render.world_to_screen(position)

            if screen_pos then
                local size = 40
                render.rect_outline(
                    vector(screen_pos.x - size / 2, screen_pos.y - size / 2, 0),
                    vector(screen_pos.x + size / 2, screen_pos.y + size / 2, 0),
                    color(255, 255, 255),
                    1
                )
            end
        end
    end
end

local function reset_data()
    break_lc_positions = {}
    data = {}
end

enable:set_callback(function(e)
    local enabled = e:get()

    if enabled then
        events.net_update_end:set(on_net_update_end)
        events.round_prestart:set(reset_data)
    else
        events.net_update_end:unset(on_net_update_end)
        events.round_prestart:unset(reset_data)
    end
end)

events.render:set(on_paint)
 
Начинающий
Статус
Оффлайн
Регистрация
6 Дек 2021
Сообщения
8
Реакции[?]
0
Поинты[?]
0
Ровно как противник это как? Покажи боксы
смотри есть bbox это чтобы вгетать кординаты бокса и перевести в скрин через ворлд тоесть мы гетает точные кординаты 1731760276024.png мне нада гетать бокс игрока а не просто коробки свои писать ноне выходит1731760332873.pngмне нада чтобы бокс был как и игрок
Ровно как противник это как? Покажи боксы
мне нада не статик бокс а ббох динамик чтобы фиксировать сам бокс на игроке
 
Пользователь
Статус
Оффлайн
Регистрация
2 Май 2022
Сообщения
357
Реакции[?]
46
Поинты[?]
24K
Код:
            local predicted_origin = vector() -- your extrapolated position
            local min = player.m_vecMins + predicted_origin
            local max = player.m_vecMaxs + predicted_origin

            local points = {
                {min.x, min.y, min.z}, {min.x, max.y, min.z},
                {max.x, max.y, min.z}, {max.x, min.y, min.z},
                {min.x, min.y, max.z}, {min.x, max.y, max.z},
                {max.x, max.y, max.z}, {max.x, min.y, max.z},
            }

            local edges = {
                {0, 1}, {1, 2}, {2, 3}, {3, 0}, {5, 6}, {6, 7}, {1, 4}, {4, 8},
                {0, 4}, {1, 5}, {2, 6}, {3, 7}, {5, 8}, {7, 8}, {3, 4}
            }

            for i = 1, #edges do
                if i == 1 then
                    local origin = player:get_origin()
                    local origin_w2s = origin:to_screen()
                    local min_w2s = min:to_screen()
                    if origin_w2s ~= nil and min_w2s ~= nil then
                        render.line(origin_w2s, min_w2s, color(47, 117, 221, 255))
                    end
                end
                if points[edges[i][1]] ~= nil and points[edges[i][2]] ~= nil then
                    local p1 = vector(points[edges[i][1]][1], points[edges[i][1]][2], points[edges[i][1]][3]):to_screen()
                    local p2 = vector(points[edges[i][2]][1], points[edges[i][2]][2], points[edges[i][2]][3]):to_screen()
                
                    render.line(p1, p2, color(47, 117, 221, 255))
                end
            end
 
Сверху Снизу