From 4ff42601833edb6e0ed4568bccd7d06ce751ffbc Mon Sep 17 00:00:00 2001 From: praydog Date: Wed, 20 Dec 2023 15:17:42 -0800 Subject: [PATCH] UObjectHook: Fix attachments on UE5 --- shared/sdk/USceneComponent.cpp | 40 +++++++++++++++++++++++++--------- src/mods/UObjectHook.cpp | 2 +- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/shared/sdk/USceneComponent.cpp b/shared/sdk/USceneComponent.cpp index fe0fdefe..b5ac699b 100644 --- a/shared/sdk/USceneComponent.cpp +++ b/shared/sdk/USceneComponent.cpp @@ -40,8 +40,12 @@ void USceneComponent::set_world_rotation(const glm::vec3& rotation, bool sweep, // add a bool params.insert(params.end(), (uint8_t*)&teleport, (uint8_t*)&sweep + sizeof(bool)); - // align - params.insert(params.end(), 3, 0); + + // align up to 8 based on size + if (params.size() % sizeof(void*) != 0) { + params.insert(params.end(), sizeof(void*) - (params.size() % sizeof(void*)), 0); + } + // add a FHitResult params.insert(params.end(), fhitresult->get_struct_size(), 0); // add a bool @@ -74,8 +78,12 @@ void USceneComponent::add_world_rotation(const glm::vec3& rotation, bool sweep, // add a bool params.insert(params.end(), (uint8_t*)&teleport, (uint8_t*)&sweep + sizeof(bool)); - // align - params.insert(params.end(), 3, 0); + + // align up to 8 based on size + if (params.size() % sizeof(void*) != 0) { + params.insert(params.end(), sizeof(void*) - (params.size() % sizeof(void*)), 0); + } + // add a FHitResult params.insert(params.end(), fhitresult->get_struct_size(), 0); // add a bool @@ -109,7 +117,11 @@ void USceneComponent::set_world_location(const glm::vec3& location, bool sweep, // add a bool params.insert(params.end(), (uint8_t*)&teleport, (uint8_t*)&sweep + sizeof(bool)); // align - params.insert(params.end(), 3, 0); + //params.insert(params.end(), 3, 0); + // align up to 8 based on size + if (params.size() % sizeof(void*) != 0) { + params.insert(params.end(), sizeof(void*) - (params.size() % sizeof(void*)), 0); + } // add a FHitResult params.insert(params.end(), fhitresult->get_struct_size(), 0); // add a bool @@ -142,8 +154,12 @@ void USceneComponent::add_world_offset(const glm::vec3& location, bool sweep, bo // add a bool params.insert(params.end(), (uint8_t*)&teleport, (uint8_t*)&sweep + sizeof(bool)); - // align - params.insert(params.end(), 3, 0); + + // align up to 8 based on size + if (params.size() % sizeof(void*) != 0) { + params.insert(params.end(), sizeof(void*) - (params.size() % sizeof(void*)), 0); + } + // add a FHitResult params.insert(params.end(), fhitresult->get_struct_size(), 0); // add a bool @@ -176,8 +192,12 @@ void USceneComponent::add_local_rotation(const glm::vec3& rotation, bool sweep, // add a bool params.insert(params.end(), (uint8_t*)&teleport, (uint8_t*)&sweep + sizeof(bool)); - // align - params.insert(params.end(), 3, 0); + + // align up to 8 based on size + if (params.size() % sizeof(void*) != 0) { + params.insert(params.end(), sizeof(void*) - (params.size() % sizeof(void*)), 0); + } + // add a FHitResult params.insert(params.end(), fhitresult->get_struct_size(), 0); // add a bool @@ -265,7 +285,7 @@ glm::vec3 USceneComponent::get_world_rotation() { if (!is_ue5) { return *(glm::vec3*)params.data(); } - + return *(glm::vec<3, double>*)params.data(); } diff --git a/src/mods/UObjectHook.cpp b/src/mods/UObjectHook.cpp index 4cd864e6..c11ed3fe 100644 --- a/src/mods/UObjectHook.cpp +++ b/src/mods/UObjectHook.cpp @@ -397,7 +397,7 @@ void UObjectHook::tick_attachments(Rotator* view_rotation, const float wo glm::vec3 final_position{}; if (is_double) { - final_position = glm::vec3{*view_location} - offset1; + final_position = glm::vec3{*view_d} - offset1; } else { final_position = *view_location - offset1; }