samp object id

Lance_Sterling

Известный
Автор темы
992
354
Удаление темы с решением
Версия MoonLoader
.026-beta
почему если я создаю свой объект то возвращает ID -1, если мне надо его редактировать?
Lua:
local objects = {}

function editObject(PlayerObject, wObjectID)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteBool(bs, PlayerObject)
    raknetBitStreamWriteInt16(bs, wObjectID)

    raknetEmulRpcReceiveBitStream(117, bs)
    raknetDeleteBitStream(bs)
end

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('edit', function(id)
        if tonumber(id) then
            if objects[tonumber(id)] then
                local objID = sampGetObjectSampIdByHandle(objects[tonumber(id)].handle)
                sampAddChatMessage(objID, -1)
                editObject(false, objID)
            else
                sampAddChatMessage('Объект с таким ID не найден. Введите /objects для того что бы узнать ID всех объектов.', -1)
            end
        else
            sampAddChatMessage('Вводите /edit [ID]', -1)
        end
    end)
    sampRegisterChatCommand('create', function(id)
        if tonumber(id) then
            local result = pcall(requestModel, tonumber(id))
            if isModelAvailable(tonumber(id)) and result then
                create = true
                local x, y, z = getCharCoordinates(PLAYER_PED)
                local handle = createObject(tonumber(id), x, y - 5, z)
                
                table.insert(objects, {handle = handle, id = -1})
                sampAddChatMessage('Создан визуальный объект, ID '..#objects, -1)
            else
                sampAddChatMessage('Такого объекта не существует, или в программе произошла ошибка', -1)
            end
        else
            sampAddChatMessage('Вводите /create [ID]', -1)
        end
    end)
    sampRegisterChatCommand('objects', function()
        for k, _ in ipairs(objects) do
            sampAddChatMessage('ID: '..k, -1)
        end
        sampAddChatMessage('Всего: '..#objects, -1)
    end)
    sampRegisterChatCommand('delete', function(id)
        if tonumber(id) then
            if objects[tonumber(id)] then
                deleteObject(objects[tonumber(id)].handle)
                table.remove(objects, tonumber(id))
                sampAddChatMessage('Объект с ID '..tonumber(id)..' успешно удален. Почти весь список ID изменен, напишите /objects для того что бы узнать новый ID объектов.', -1)
            else
                sampAddChatMessage('Объект с таким ID не найден. Введите /objects для того что бы узнать ID всех объектов.', -1)
            end
        else
            sampAddChatMessage('Вводите /delete [ID]', -1)
        end
    end)

    sampAddChatMessage('Visual Objects | Загружен', -1)

    wait(-1)
end

function onScriptTerminate(scr, quitGame)
    if scr == thisScript() and not quitGame then
        sampAddChatMessage('Visual Objects | Скрипт выключен — все объекты удалены', -1)
        for _, v in ipairs(objects) do
            deleteObject(v.handle)
        end
    end
end
 
Решение
Lua:
local objects = {};

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('createfuckingobject', function ()
        local objId = #objects + 1
        createObject(objId, 19972, { getCharCoordinates(PLAYER_PED) }, { 0, 0, 0 })
        table.insert(objects, { objId })
        sampAddChatMessage('Объект создан, всего объектов: '..#objects, -1)
    end)
    sampRegisterChatCommand('editobj', function (id)
        id = tonumber(id)
        if not id then return end
        editObject(false, id)
    end)
    wait(-1)
end

function createObject(wObjectID, ModelID, pos, rot)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt16(bs, wObjectID)
    raknetBitStreamWriteInt32(bs, ModelID)...

Lance_Sterling

Известный
Автор темы
992
354
ты не сможешь нормально сделать редактирование объектов, созданных через createObject, так как у них нет айди
пиздец
Можешь создавать объект так же через эмуляцию
ладно, щас попробую чот даже сам сделать битстрим
 

sdfy

Известный
346
228
Lua:
local objects = {};

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('createfuckingobject', function ()
        local objId = #objects + 1
        createObject(objId, 19972, { getCharCoordinates(PLAYER_PED) }, { 0, 0, 0 })
        table.insert(objects, { objId })
        sampAddChatMessage('Объект создан, всего объектов: '..#objects, -1)
    end)
    sampRegisterChatCommand('editobj', function (id)
        id = tonumber(id)
        if not id then return end
        editObject(false, id)
    end)
    wait(-1)
end

function createObject(wObjectID, ModelID, pos, rot)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt16(bs, wObjectID)
    raknetBitStreamWriteInt32(bs, ModelID)
    for i = 1, 3 do
        raknetBitStreamWriteFloat(bs, pos[i])
    end
    for i = 1, 3 do
        raknetBitStreamWriteFloat(bs, rot[i])
    end
    raknetBitStreamWriteFloat(bs, 300) -- DrawDistance
    raknetBitStreamWriteInt8(bs, 0)    -- NoCameraCol
    raknetBitStreamWriteInt16(bs, -1)  -- attachedObject
    raknetBitStreamWriteInt16(bs, -1)  -- attachedVehicle
    for _ = 1, 6 do
        raknetBitStreamWriteFloat(bs, 0) -- AttachOffset[X-Z] | AttachRot[X-Z]
    end
    raknetBitStreamWriteInt8(bs, 0)

    raknetEmulRpcReceiveBitStream(44, bs)
    raknetDeleteBitStream(bs)
end


function editObject(PlayerObject, wObjectID)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteBool(bs, PlayerObject)
    raknetBitStreamWriteInt16(bs, wObjectID)

    raknetEmulRpcReceiveBitStream(117, bs)
    raknetDeleteBitStream(bs)
end
 
  • Нравится
Реакции: Vespan

Lance_Sterling

Известный
Автор темы
992
354
Можешь создавать объект так же через эмуляцию
шо не так?
остальные элементы мне не надо
Lua:
function createObject(wObjectID, ModelID, x, y, z, rotx, roty, rotz, DrawDistance)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteInt16(bs, wObjectID)
    raknetBitStreamWriteInt32(bs, ModelID)
    raknetBitStreamWriteFloat(bs, x)
    raknetBitStreamWriteFloat(bc, y)
    raknetBitStreamWriteFloat(bs, z)
    raknetBitStreamWriteFloat(bs, rotx)
    raknetBitStreamWriteFloat(bs, roty)
    raknetBitStreamWriteFloat(bs, rotz)
    raknetBitStreamWriteFloat(bs, DrawDistance)

    raknetEmulPacketReceiveBitStream(44, bs)
    raknetDeleteBitStream(bs)
end
 

chapo

tg/inst: @moujeek
Модератор
9,074
12,037
шо не так?
остальные элементы мне не надо
Lua:
function createObject(wObjectID, ModelID, x, y, z, rotx, roty, rotz, DrawDistance)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteInt16(bs, wObjectID)
    raknetBitStreamWriteInt32(bs, ModelID)
    raknetBitStreamWriteFloat(bs, x)
    raknetBitStreamWriteFloat(bc, y)
    raknetBitStreamWriteFloat(bs, z)
    raknetBitStreamWriteFloat(bs, rotx)
    raknetBitStreamWriteFloat(bs, roty)
    raknetBitStreamWriteFloat(bs, rotz)
    raknetBitStreamWriteFloat(bs, DrawDistance)

    raknetEmulPacketReceiveBitStream(44, bs)
    raknetDeleteBitStream(bs)
end
игру не ебет что тебе что-то не нужно, все "поля" должны быть заполнены
 

Lance_Sterling

Известный
Автор темы
992
354
Lua:
local objects = {};

function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('createfuckingobject', function ()
        local objId = #objects + 1
        createObject(objId, 19972, { getCharCoordinates(PLAYER_PED) }, { 0, 0, 0 })
        table.insert(objects, { objId })
        sampAddChatMessage('Объект создан, всего объектов: '..#objects, -1)
    end)
    sampRegisterChatCommand('editobj', function (id)
        id = tonumber(id)
        if not id then return end
        editObject(false, id)
    end)
    wait(-1)
end

function createObject(wObjectID, ModelID, pos, rot)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt16(bs, wObjectID)
    raknetBitStreamWriteInt32(bs, ModelID)
    for i = 1, 3 do
        raknetBitStreamWriteFloat(bs, pos[i])
    end
    for i = 1, 3 do
        raknetBitStreamWriteFloat(bs, rot[i])
    end
    raknetBitStreamWriteFloat(bs, 300) -- DrawDistance
    raknetBitStreamWriteInt8(bs, 0)    -- NoCameraCol
    raknetBitStreamWriteInt16(bs, -1)  -- attachedObject
    raknetBitStreamWriteInt16(bs, -1)  -- attachedVehicle
    for _ = 1, 6 do
        raknetBitStreamWriteFloat(bs, 0) -- AttachOffset[X-Z] | AttachRot[X-Z]
    end
    raknetBitStreamWriteInt8(bs, 0)

    raknetEmulRpcReceiveBitStream(44, bs)
    raknetDeleteBitStream(bs)
end


function editObject(PlayerObject, wObjectID)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteBool(bs, PlayerObject)
    raknetBitStreamWriteInt16(bs, wObjectID)

    raknetEmulRpcReceiveBitStream(117, bs)
    raknetDeleteBitStream(bs)
end
теперь не удаляется, хендл не получается
:D
 

Lance_Sterling

Известный
Автор темы
992
354
ну так удаляй тоже эмуляцией рпс
1686580077013.png
 
  • Злость
Реакции: sdfy

sdfy

Известный
346
228
не удаляет
Lua:
function destroyObject(wObjectID)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteInt16(bs, wObjectID)

    raknetEmulPacketReceiveBitStream(47, bs)
    raknetDeleteBitStream(bs)
end
ты пакет эмулируешь, а не рпк
Lua:
function destroyObject(wObjectID)
    local bs = raknetNewBitStream()

    raknetBitStreamWriteInt16(bs, wObjectID)

    raknetEmulRpcReceiveBitStream(47, bs)
    raknetDeleteBitStream(bs)
end
 
  • Нравится
Реакции: Lance_Sterling