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

EOS

Новичок
Автор темы
26
11
Версия MoonLoader
.027.0-preview
Доброй ночи. Хочу узнать как получить модель пикапа на котором игрок стоит
 

XRLM

Против ветра рождённый
Модератор
1,570
1,154
1 вариант: хукать onSendPlayerPickedUpPickup
2 вариант:
Lua:
local id, distance, model, x, y, z = getNearestPickup()

if distance < 2 then -- расстояние не точное
    print(model)
end

function getNearestPickup() -- правка из https://www.blast.hk/threads/13380/page-17#post-698745
    local pickups = {}
    local x, y, z = getCharCoordinates(playerPed)
    for i, v in ipairs(getAllPickups()) do
        local px, py, pz = getPickupCoordinates(v)
        table.insert(pickups, {sampGetPickupSampIdByHandle(v), getDistanceBetweenCoords3d(px, py, pz, x, y, z), getPickupModel(v), px, py, pz})
    end
    table.sort(pickups, function(a, b) return a[2] < b[2] end)
    return unpack(pickups[1])
end

function getAllPickups() -- https://www.blast.hk/threads/13380/page-8#post-361600
    local pu = {}
    pPu = sampGetPickupPoolPtr() + 16388
    for i = 0, 4095 do
        local id = readMemory(pPu + 4 * i, 4)
        if id ~= -1 then
            table.insert(pu, sampGetPickupHandleBySampId(i))
        end
    end
    return pu
end
 
  • Клоун
Реакции: 1NEXPL1CA

EOS

Новичок
Автор темы
26
11
1 вариант: хукать onSendPlayerPickedUpPickup
2 вариант:
Lua:
local id, distance, model, x, y, z = getNearestPickup()

if distance < 2 then -- расстояние не точное
    print(model)
end

function getNearestPickup() -- правка из https://www.blast.hk/threads/13380/page-17#post-698745
    local pickups = {}
    local x, y, z = getCharCoordinates(playerPed)
    for i, v in ipairs(getAllPickups()) do
        local px, py, pz = getPickupCoordinates(v)
        table.insert(pickups, {sampGetPickupSampIdByHandle(v), getDistanceBetweenCoords3d(px, py, pz, x, y, z), getPickupModel(v), px, py, pz})
    end
    table.sort(pickups, function(a, b) return a[2] < b[2] end)
    return unpack(pickups[1])
end

function getAllPickups() -- https://www.blast.hk/threads/13380/page-8#post-361600
    local pu = {}
    pPu = sampGetPickupPoolPtr() + 16388
    for i = 0, 4095 do
        local id = readMemory(pPu + 4 * i, 4)
        if id ~= -1 then
            table.insert(pu, sampGetPickupHandleBySampId(i))
        end
    end
    return pu
end
как 1 вариант сделать?
 

XRLM

Против ветра рождённый
Модератор
1,570
1,154
как 1 вариант сделать?
Код:
local sampev = require('samp.events')

local pickup = -1 -- глобальная переменная

local model = getPickupModel(sampGetPickupHandleBySampId(pickup)) -- в твоей функции

function sampev.onSendPickedUpPickup(pickupId)
    pickup = pickupId
end
я бы не советовал тебе использовать такой способ, ибо если ты не стоишь на пикапе, то в переменной будет лежать ид пикапа, на котором последний раз стоял пед.
этот способ не работает на других игроков, то есть рпц о взятии пикапа от них ты не получишь.

так же второй способ реализован только для твоего педа, если нужно для других игроков, то придётся немного изменить функцию и парсить всех игроков в зоне стрима.