Угол поворота объекта

IlyaHL2

Активный
Автор темы
230
48
Версия MoonLoader
.026-beta
[10:13:33.708528] (error) test.lua: C:\Games\200mb treyz\moonloader\test.lua:192: attempt to index field 'heading' (a nil value)
stack traceback:
C:\Games\200mb treyz\moonloader\test.lua:192: in function 'callback'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:127: in function <C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:126>
И так 876 раз эта ошибка
А я всего лишь хотел получить угол поворота объекта

Lua:
function on.onCreateObject(oId, data)
    sampCreate3dText(data.modelId.."\n"..data.heading.x, -1, data.position.x, data.position.y, data.position.z, 9999, true, -1, -1)
end
Пробовал даже без .х но выводила на 3 ошибки меньше :(
 
Решение
у этой функци 4 параметра :(
и это не оно🥹
написал перевод кватернионов в углы в градусах, если надо в радианах убери math.deg
Lua:
local rx, ry, rz, rw = getObjectQuaternion(handleObj)

t0 = 2 * (rw * rx + ry * rz)
t1 = 1 - 2 * (rx^2 + ry^2)
t2 = 2 * (rw * ry - rz * rx)
t3 = 2 * (rw * rz + rx * ry)
t4 = 1 - 2 * (rz^2 + ry^2)

rxx = math.deg(math.atan2(t0, t1))
ryy = math.deg(math.asin(t2))
rzz = math.deg(math.atan2(t3, t4))

Rice.

Известный
Модератор
1,744
1,598
[10:13:33.708528] (error) test.lua: C:\Games\200mb treyz\moonloader\test.lua:192: attempt to index field 'heading' (a nil value)
stack traceback:
C:\Games\200mb treyz\moonloader\test.lua:192: in function 'callback'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:77: in function 'process_event'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:100: in function 'process_packet'
C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:127: in function <C:\Games\200mb treyz\moonloader\lib\samp\events\core.lua:126>
И так 876 раз эта ошибка
А я всего лишь хотел получить угол поворота объекта

Lua:
function on.onCreateObject(oId, data)
    sampCreate3dText(data.modelId.."\n"..data.heading.x, -1, data.position.x, data.position.y, data.position.z, 9999, true, -1, -1)
end
Пробовал даже без .х но выводила на 3 ошибки меньше :(​
Потому что ключа "heading" нету в data.
Возможные ключи:
В файле lib/samp/events.lua:

INCOMING_RPCS[RPC.CREATEOBJECT] = {'onCreateObject', handler.rpc_create_object_reader, handler.rpc_create_object_writer}
local handler = require 'samp.events.handlers'

Мы можем увидеть расположение библиотеки handler (lib/samp/events/handlers):
Открываем библиотеку и ищем функцию rpc_create_object_reader:
Lua:
function handler.rpc_create_object_reader(bs)
    local data = {materials = {}, materialText = {}}
    local objectId = bsread.int16(bs)
    data.modelId = bsread.int32(bs)
    data.position = bsread.vector3d(bs)
    data.rotation = bsread.vector3d(bs)
    data.drawDistance = bsread.float(bs)
    data.noCameraCol = bsread.bool8(bs)
    data.attachToVehicleId = bsread.int16(bs)
    data.attachToObjectId = bsread.int16(bs)
    if data.attachToVehicleId ~= 0xFFFF or data.attachToObjectId ~= 0xFFFF then
        data.attachOffsets = bsread.vector3d(bs)
        data.attachRotation = bsread.vector3d(bs)
        data.syncRotation = bsread.bool8(bs)
    end
    data.texturesCount = bsread.int8(bs)
    while raknetBitStreamGetNumberOfUnreadBits(bs) >= 8 do
        local materialType = bsread.int8(bs)
        if materialType == MATERIAL_TYPE.TEXTURE then
            table.insert(data.materials, read_object_material(bs))
        elseif materialType == MATERIAL_TYPE.TEXT then
            table.insert(data.materialText, read_object_material_text(bs))
        end
    end
    data.materials_text = data.materialText -- obsolete
    return {objectId, data}
end
Вывод: Никакого heading тут нету. Тебе нужно использовать data.rotation (даже перевод с англ. - вращение)
 

MrDorlik

Известный
959
385
у этой функци 4 параметра :(
и это не оно🥹
написал перевод кватернионов в углы в градусах, если надо в радианах убери math.deg
Lua:
local rx, ry, rz, rw = getObjectQuaternion(handleObj)

t0 = 2 * (rw * rx + ry * rz)
t1 = 1 - 2 * (rx^2 + ry^2)
t2 = 2 * (rw * ry - rz * rx)
t3 = 2 * (rw * rz + rx * ry)
t4 = 1 - 2 * (rz^2 + ry^2)

rxx = math.deg(math.atan2(t0, t1))
ryy = math.deg(math.asin(t2))
rzz = math.deg(math.atan2(t3, t4))
 
  • Вау
  • Ха-ха
Реакции: IlyaHL2 и qdIbp

IlyaHL2

Активный
Автор темы
230
48
написал перевод кватернионов в углы в градусах, если надо в радианах убери math.deg
Lua:
local rx, ry, rz, rw = getObjectQuaternion(handleObj)

t0 = 2 * (rw * rx + ry * rz)
t1 = 1 - 2 * (rx^2 + ry^2)
t2 = 2 * (rw * ry - rz * rx)
t3 = 2 * (rw * rz + rx * ry)
t4 = 1 - 2 * (rz^2 + ry^2)

rxx = math.deg(math.atan2(t0, t1))
ryy = math.deg(math.asin(t2))
rzz = math.deg(math.atan2(t3, t4))
я тебе готов отсосать прямо на месте
 
  • Ха-ха
Реакции: qdIbp