получение всех колизий педа

RedHolms

Известный
Автор темы
Проверенный
617
360
Версия MoonLoader
.026-beta
В муне функций не нашёл (искал collision/contact/entity и т.п.)
Пытался получить из CPhysical m_pCollisionList и m_apCollidedEntities, получилась хуйня (код ниже)
Lua:
local raw = getCharPointer(PLAYER_PED)

      if raw == 0 or raw == nil then
         print("ped pointer is null")
         return
      end

      local pl_ped = ffi.cast("CPed*", raw)

      local collision_list = ffi.cast("uintptr_t**", raw+0xb0)[0]

      if collision_list then
         print("===")
         while collision_list[0] ~= 0 do
            local collision_object = ffi.cast("CEntity*", collision_list[0])[0]
            print(collision_object.m_nType)

            collision_list = collision_list + 1
         end
      end
   end)

Решение можно и на плюсах

Решение найдено:

В муне функций не нашёл (искал collision/contact/entity и т.п.)
Пытался получить из CPhysical m_pCollisionList и m_apCollidedEntities, получилась хуйня (код ниже)
Lua:
local raw = getCharPointer(PLAYER_PED)

      if raw == 0 or raw == nil then
         print("ped pointer is null")
         return
      end

      local pl_ped = ffi.cast("CPed*", raw)

      local collision_list = ffi.cast("uintptr_t**", raw+0xb0)[0]

      if collision_list then
         print("===")
         while collision_list[0] ~= 0 do
            local collision_object = ffi.cast("CEntity*", collision_list[0])[0]
            print(collision_object.m_nType)

            collision_list = collision_list + 1
         end
      end
   end)

Решение можно и на плюсах
проблема в luajit'овском ffi, видимо не переваривает битовые поля, либо я криворукий, энивей если использовать просто оффсеты то всё норм
Lua:
      local ped_pointer = getCharPointer(PLAYER_PED)

      local number_of_collided_entities = ffi.cast("unsigned char*", ped_pointer + 0xb9)[0]
      -- printChat(number_of_collided_entities)

      local collided_entities = ffi.cast("uintptr_t*", ped_pointer + 0xbc)

      for i = 0, number_of_collided_entities - 1 do
         local entity = collided_entities[i]

         local entity_type = band(ffi.cast("uint8_t*", entity + 0x36)[0], 0x7)
         printChat(entity_type)
      end
 
Последнее редактирование: