From a58add2e97f081a95480030d9663b765fa7cf2ff Mon Sep 17 00:00:00 2001 From: Nordi98 Date: Wed, 13 Aug 2025 13:26:33 +0200 Subject: [PATCH] ed --- resources/[carscripts]/kq_realoffroad/.fxap | Bin 0 -> 178 bytes .../kq_realoffroad/INSTALLATION.md | 26 + .../kq_realoffroad/client/cache.lua | Bin 0 -> 1081 bytes .../kq_realoffroad/client/client.lua | Bin 0 -> 6185 bytes .../client/editable/editable.lua | 232 +++++++ .../kq_realoffroad/client/functions.lua | Bin 0 -> 3932 bytes .../kq_realoffroad/client/handling.lua | Bin 0 -> 4959 bytes .../[carscripts]/kq_realoffroad/config.lua | 611 ++++++++++++++++++ .../kq_realoffroad/fxmanifest.lua | 39 ++ .../kq_realoffroad/mixed/constants.lua | Bin 0 -> 589 bytes .../kq_realoffroad/server/server.lua | Bin 0 -> 654 bytes 11 files changed, 908 insertions(+) create mode 100644 resources/[carscripts]/kq_realoffroad/.fxap create mode 100644 resources/[carscripts]/kq_realoffroad/INSTALLATION.md create mode 100644 resources/[carscripts]/kq_realoffroad/client/cache.lua create mode 100644 resources/[carscripts]/kq_realoffroad/client/client.lua create mode 100644 resources/[carscripts]/kq_realoffroad/client/editable/editable.lua create mode 100644 resources/[carscripts]/kq_realoffroad/client/functions.lua create mode 100644 resources/[carscripts]/kq_realoffroad/client/handling.lua create mode 100644 resources/[carscripts]/kq_realoffroad/config.lua create mode 100644 resources/[carscripts]/kq_realoffroad/fxmanifest.lua create mode 100644 resources/[carscripts]/kq_realoffroad/mixed/constants.lua create mode 100644 resources/[carscripts]/kq_realoffroad/server/server.lua diff --git a/resources/[carscripts]/kq_realoffroad/.fxap b/resources/[carscripts]/kq_realoffroad/.fxap new file mode 100644 index 0000000000000000000000000000000000000000..3588323dafffd1537547d41b27aca7d0a1371bcf GIT binary patch literal 178 zcmV;j08Rf!SV2$$0000006~fy0!y*0+sM;rL_6d`7}d6h@QZ$1Vpkj5I%nf%Jgsm^ zQDVeH9{cKGyWv1q&Z}dCtKhc;ZdXT~gj!b`QkNe{}^G z5*{_)TN+hiqE=DOa}fHHcTrV#eVxF`ezDNj9yMvF{!cX7{r|K`2fBc`{6xGIZo}|z g<^<+2>!x;cx#H8K!*j45oV6kiC6_@}rlx;_T#-IhQ2+n{ literal 0 HcmV?d00001 diff --git a/resources/[carscripts]/kq_realoffroad/INSTALLATION.md b/resources/[carscripts]/kq_realoffroad/INSTALLATION.md new file mode 100644 index 000000000..b78a98e05 --- /dev/null +++ b/resources/[carscripts]/kq_realoffroad/INSTALLATION.md @@ -0,0 +1,26 @@ +## KQ_REALOFFROAD INSTALLATION GUIDE + +### Step 1: +Put the folder into your resources folder + +### Step 2: +Ensure the script in your `server.cfg` file. + +### Step 3: +Test out the script and tweak it through the config to your liking if needed. + + +### Done +Enjoy the script + + +- https://kuzquality.com/ +- https://discord.gg/fZsyam7Rvz +- https://www.youtube.com/@KuzQuality + +### Extra +If you're using custom MLOs. Some of the MLOs may have an incorrectly +configured surfaces. Make sure to test them. You can enable the `debug mode` in the config. +That will allow you to do `/surfaceDebug` to see information about the surfaces and area that you're in. +If you notice that a certain surface in an MLO is incorrect, you can add the whole area to a +blacklist within the config file to disable the offroad handling for that specific area. \ No newline at end of file diff --git a/resources/[carscripts]/kq_realoffroad/client/cache.lua b/resources/[carscripts]/kq_realoffroad/client/cache.lua new file mode 100644 index 0000000000000000000000000000000000000000..ad192a37d3bba7cc84c10fdb82968ac620a0da42 GIT binary patch literal 1081 zcmV-91jhSDSV2$$000000Iami$5oSugK5fbFUgQACm6g9d58xtAjR`Ri@NGKsBbJ4j4Vk?BZL8LwZl$mM$N|CRt2mZ_X{;HOP3t_cD`wl!Q z5Xdtr{AbmRq63nW3fn$Lw2m6y_x*k+vc2;Rd(r z`)XnDhH~m*&IV{{$dK0PE#U*>Kku?$DkTshU@S=d+U+lAYhIii z%uX9^sdBR_iWTi-pcSxb@=_>x$ zo%-3u>7LU|rG|Maw0PwBKGzZR+itp+p^NG3&du52V8@FE8jfz`l7hMp`yKzOO*Qc9 zc14(#`lU5t_^wGv@Ja}WNRgFews-_>MZmOUbi*pE7o6`{MmnIa3<>1RHUkILfSOX0 z2h9z!y+nA6$|M^GS2cFH_;;PndLuUK@qn#j3U#W@ruxheZfU1h&O@3A zwcoJ@ki%w$rV-yz0Nq*c^!1pl9J~5sns|YIJN+ip@qeD`Dk88StEGs+c&k`92nty#rwb}T&Ai zU|jIxx{5RvN%aP^|0IWBGFE`jZLST_=%^({@&s=RwkeVs7$wyex#EI0Py0a?-->t! z)$r2#hha|~*#DB&W4y(0clM)}0x;sy;TEN6zHTK$n941h}@|4&R=|Ev72Y;FYHR~ks literal 0 HcmV?d00001 diff --git a/resources/[carscripts]/kq_realoffroad/client/client.lua b/resources/[carscripts]/kq_realoffroad/client/client.lua new file mode 100644 index 0000000000000000000000000000000000000000..8c09706b15992334a5d4e8ba746fea165145928c GIT binary patch literal 6185 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 0.1 + end, 5000) +end + +function GetNearestRoadDistance() + return UseCache('nearestRoad', function() + local coords = GetEntityCoords(PlayerPedId()) + local ret, p5, p6 = GetClosestRoad(coords.x, coords.y, coords.z, 1.0, 0, 1) + local dist1 = GetDistanceBetweenCoords(p5, coords, false) + local dist2 = GetDistanceBetweenCoords(p6, coords, false) + + return math.min(dist1, dist2) + end, 1000) +end + +function HasOffroadTires(veh) + return UseCache('hasOffroadTires_' .. veh, function() + return GetVehicleWheelType(veh) == 4 + end, 5000) +end + +function GetVehicleSuspenionHeight(veh) + local min, max = GetVehicleSuspensionBounds(veh) + return math.abs(min.z) + max.z +end + +function GetMassUpgrade(veh) + return UseCache('weightUpgrade' .. veh, function() + local mass = GetVehicleHandlingFloat(veh, 'CHandlingData', 'fMass') + + local upgrade = 0 + if mass > 1300 then + upgrade = (1300 - mass) / 60 + else + upgrade = (1300 - mass) / 10 + end + + if GetWheelCount(veh) == 2 then + upgrade = upgrade * 0.1 + elseif GetWheelCount(veh) == 3 then + upgrade = upgrade * 0.35 + end + + return upgrade + end, 60000) +end + +function IsMotorcycle(veh) + return UseCache('isMotorbike_' .. veh, function() + return GetVehicleClass(veh) == 8 + end, 60000) +end + +function IsInBlacklistedArea(veh) + return UseCache('isInBlacklistedArea_' .. veh, function() + local coords = GetEntityCoords(veh) + + for k, area in pairs(Config.areaBlacklist) do + local distance = GetDistanceBetweenCoords(coords, area.coords) + if distance <= area.radius then + return true, area + end + end + + return false + end, 1000) +end + +function GetVehicleModelUpgrade(veh) + return UseCache('vehicleModelUpgrade_' .. veh, function() + for model, handling in pairs(Config.depthHandlingQuality.models) do + if GetEntityModel(veh) == GetHashKey(model) then + return handling + end + end + + local vehClass = GetVehicleClass(veh) + if Config.depthHandlingQuality.classes[vehClass] then + return Config.depthHandlingQuality.classes[vehClass] + end + + return 0 + end, 60000) +end + + +function GetVehicleModelTractionUpgrade(veh) + return UseCache('vehicleModelTractionUpgrade_' .. veh, function() + for model, handling in pairs(Config.tractionHandlingQuality.models) do + if GetEntityModel(veh) == GetHashKey(model) then + return handling + end + end + + local vehClass = GetVehicleClass(veh) + if Config.tractionHandlingQuality.classes[vehClass] then + return Config.tractionHandlingQuality.classes[vehClass] + end + + return 0 + end, 60000) +end + +function IsBlacklisted(veh) + return UseCache('vehicleBlacklisted' .. veh, function() + for _, model in pairs(Config.blacklist.models) do + if GetEntityModel(veh) == GetHashKey(model) then + return true + end + end + + local vehClass = GetVehicleClass(veh) + if Config.blacklist.classes[vehClass] then + return true + end + + return false + end, 60000) +end + +function GetCurrentDepth() + return CURRENT_DEPTH +end + +exports('GetCurrentDepth', GetCurrentDepth); diff --git a/resources/[carscripts]/kq_realoffroad/client/functions.lua b/resources/[carscripts]/kq_realoffroad/client/functions.lua new file mode 100644 index 0000000000000000000000000000000000000000..6aa2bcc891cba18788e5807f97e75e41033c0684 GIT binary patch literal 3932 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 literal 0 HcmV?d00001 diff --git a/resources/[carscripts]/kq_realoffroad/client/handling.lua b/resources/[carscripts]/kq_realoffroad/client/handling.lua new file mode 100644 index 0000000000000000000000000000000000000000..fd490d6a7f4b32b6693d3255ecbf33689053980f GIT binary patch literal 4959 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 literal 0 HcmV?d00001 diff --git a/resources/[carscripts]/kq_realoffroad/server/server.lua b/resources/[carscripts]/kq_realoffroad/server/server.lua new file mode 100644 index 0000000000000000000000000000000000000000..ea6c6e7512a4cd477a92ff8eb72aa8b75da1bb48 GIT binary patch literal 654 zcmV;90&)FDSV2$$000000GNl3F&&P9M?|TA_SMg^fk`-8y~<$Veg9G^-TrO0E$1!; zp$XcL_tBspOCAAnKPc|C?%}p)E%HriAwtSY2rlv!wArB))H8w3p)u>;9=E<w1E?%2MF)v0(FP%#_H1m0Q0i%yg=UDuOq@)r4&^kz6Yh9?8#Qs|L! z@nw;C3GKX4tYoV(R$3jr1S8m03(HkQTZLSN0lgO=Thyq$M7H8NmB)!_NU9aVb>1@oQaj9E% z-NgWmLCNexasONSCw{0Y@Kd@<=>}YvDx#_>6tB+`&wX{MAdCvFACfI=o+C=goFPY2 zGc21&^7ftsoo4}&_{wItYH!wXO@V~!?N3u?Lh)^#uUV8(Sy|WLt#H)q9#ZHaA+0iFl_#SE?+n)>SFEcUX5z>sv81WNb2mu0inv_O