From a7df095256a2f82bceacf49630a882b5a635757d Mon Sep 17 00:00:00 2001 From: Yorick <125297057+yorick2002@users.noreply.github.com> Date: Sat, 11 Apr 2026 22:20:37 +0200 Subject: [PATCH] feat(extra-natives-five): Add native to get heli and plane blades speed --- .../src/VehicleExtraNatives.cpp | 23 +++++++++++++++++++ ext/native-decls/GetHeliBladesSpeed.md | 19 +++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 ext/native-decls/GetHeliBladesSpeed.md diff --git a/code/components/extra-natives-five/src/VehicleExtraNatives.cpp b/code/components/extra-natives-five/src/VehicleExtraNatives.cpp index 676b9ac345..cc7d579435 100644 --- a/code/components/extra-natives-five/src/VehicleExtraNatives.cpp +++ b/code/components/extra-natives-five/src/VehicleExtraNatives.cpp @@ -336,6 +336,9 @@ static int TrainStateOffset; static int TrainCruiseSpeedOffset; static int TrainSpeedOffset; +static int PlaneBladesSpeedOffset; +static int HeliBladesSpeedOffset; + constexpr int TrainStopAtStationsFlag = 4; static int VehicleRepairMethodVtableOffset; @@ -644,6 +647,8 @@ static HookFunction initFunction([]() TrainCruiseSpeedOffset = *hook::get_pattern("C7 87 ? ? ? ? ? ? ? ? E8 ? ? ? ? 4C 89 AF", 2); TrainSpeedOffset = *hook::get_pattern("4C 89 AF ? ? ? ? 44 89 AF ? ? ? ? 4C 89 AF ? ? ? ? 49 8B 0E", 3); TrainTrackIndexOffset = *hook::get_pattern("8A 8F ? ? ? ? F3 41 0F 58 CB", 2); + PlaneBladesSpeedOffset = *hook::get_pattern("F3 0F 59 C6 F3 0F 11 83 ? ? ? ? 48 8B 83", 8); + HeliBladesSpeedOffset = *hook::get_pattern("F3 0F 11 89 ? ? ? ? 48 8B D9 E8 ? ? ? ? 33 FF", 4); } { @@ -1825,6 +1830,24 @@ static HookFunction initFunction([]() g_overrideUseDefaultDriveByClipset = context.GetArgument(0); }); + fx::ScriptEngine::RegisterNativeHandler("GET_HELI_BLADES_SPEED", [](fx::ScriptContext& context) + { + if (fwEntity* vehicle = getAndCheckVehicle(context, "GET_HELI_BLADES_SPEED")) + { + int vehicleType = readValue(vehicle, VehicleTypeOffset); + + if (vehicleType == 1) + { + return context.SetResult(readValue(vehicle, PlaneBladesSpeedOffset)); + } + else if (vehicleType >= 8 && vehicleType <= 10) + { + return context.SetResult(readValue(vehicle, HeliBladesSpeedOffset)); + } + } + context.SetResult(0.0f); + }); + // vehicle xenon lights patches to support RGB colors { static struct : jitasm::Frontend diff --git a/ext/native-decls/GetHeliBladesSpeed.md b/ext/native-decls/GetHeliBladesSpeed.md new file mode 100644 index 0000000000..299d86a5e3 --- /dev/null +++ b/ext/native-decls/GetHeliBladesSpeed.md @@ -0,0 +1,19 @@ +--- +ns: CFX +apiset: client +game: gta5 +--- +## GET_HELI_BLADES_SPEED + +```c +float GET_HELI_BLADES_SPEED(Vehicle vehicle); +``` + +This native is a getter for [SET_HELI_BLADES_SPEED](#_0xFD280B4D7F3ABC4D) + + +## Parameters +* **vehicle**: The helicopter or the plane + +## Return value +Returns a value representing the blade speed of the helicopter or plane. Value ranges from `0.0` to `1.0`. \ No newline at end of file