hackermagus Posted February 7, 2020 Share Posted February 7, 2020 Hi I made a script local vehicle = createVehicle(596, 2392.09009, -1729.73193, 13.38281, 0, 0, 90) local ped = createPed(281, 2400, -1735, 13.38281) local ownSpeed = getElementSpeed(vehicle, 1) setVehicleSirensOn(vehicle, true) warpPedIntoVehicle(ped, vehicle) setPedControlState(ped, "accelerate", true) if (ownSpeed > 29) then setPedControlState(ped, "brake_reverse", true) end And when I start the game in debugscript 3 it says "attempt to call global 'getElementSpeed' (a nil value)'" Link to comment
Moderators Patrick Posted February 7, 2020 Moderators Share Posted February 7, 2020 Because getElementSpeed is an 'useful' function. You need to paste the function's source into your code. Link to comment
hackermagus Posted February 7, 2020 Author Share Posted February 7, 2020 12 minutes ago, stPatrick said: Because getElementSpeed is an 'useful' function. You need to paste the function's source into your code. local vehicle = createVehicle(596, 2392.09009, -1729.73193, 13.38281, 0, 0, 90) local ped = createPed(281, 2400, -1735, 13.38281) setVehicleSirensOn(vehicle, true) warpPedIntoVehicle(ped, vehicle) setPedControlState(ped, "accelerate", true) addEventHandler("onClientResourceStart", root, function () local ownSpeed = getElementSpeed(vehicle, 1) end) Like this? This not work to Link to comment
Moderators Patrick Posted February 8, 2020 Moderators Share Posted February 8, 2020 Nope. https://wiki.multitheftauto.com/wiki/GetElementSpeed function getElementSpeed(theElement, unit) -- Check arguments for errors assert(isElement(theElement), "Bad argument 1 @ getElementSpeed (element expected, got " .. type(theElement) .. ")") local elementType = getElementType(theElement) assert(elementType == "player" or elementType == "ped" or elementType == "object" or elementType == "vehicle" or elementType == "projectile", "Invalid element type @ getElementSpeed (player/ped/object/vehicle/projectile expected, got " .. elementType .. ")") assert((unit == nil or type(unit) == "string" or type(unit) == "number") and (unit == nil or (tonumber(unit) and (tonumber(unit) == 0 or tonumber(unit) == 1 or tonumber(unit) == 2)) or unit == "m/s" or unit == "km/h" or unit == "mph"), "Bad argument 2 @ getElementSpeed (invalid speed unit)") -- Default to m/s if no unit specified and 'ignore' argument type if the string contains a number unit = unit == nil and 0 or ((not tonumber(unit)) and unit or tonumber(unit)) -- Setup our multiplier to convert the velocity to the specified unit local mult = (unit == 0 or unit == "m/s") and 50 or ((unit == 1 or unit == "km/h") and 180 or 111.84681456) -- Return the speed by calculating the length of the velocity vector, after converting the velocity to the specified unit return (Vector3(getElementVelocity(theElement)) * mult).length end local vehicle = createVehicle(596, 2392.09009, -1729.73193, 13.38281, 0, 0, 90) local ped = createPed(281, 2400, -1735, 13.38281) local ownSpeed = getElementSpeed(vehicle, 1) setVehicleSirensOn(vehicle, true) warpPedIntoVehicle(ped, vehicle) setPedControlState(ped, "accelerate", true) if (ownSpeed > 29) then setPedControlState(ped, "brake_reverse", true) end Like this Link to comment
hackermagus Posted February 8, 2020 Author Share Posted February 8, 2020 6 minutes ago, stPatrick said: Nope. https://wiki.multitheftauto.com/wiki/GetElementSpeed function getElementSpeed(theElement, unit) -- Check arguments for errors assert(isElement(theElement), "Bad argument 1 @ getElementSpeed (element expected, got " .. type(theElement) .. ")") local elementType = getElementType(theElement) assert(elementType == "player" or elementType == "ped" or elementType == "object" or elementType == "vehicle" or elementType == "projectile", "Invalid element type @ getElementSpeed (player/ped/object/vehicle/projectile expected, got " .. elementType .. ")") assert((unit == nil or type(unit) == "string" or type(unit) == "number") and (unit == nil or (tonumber(unit) and (tonumber(unit) == 0 or tonumber(unit) == 1 or tonumber(unit) == 2)) or unit == "m/s" or unit == "km/h" or unit == "mph"), "Bad argument 2 @ getElementSpeed (invalid speed unit)") -- Default to m/s if no unit specified and 'ignore' argument type if the string contains a number unit = unit == nil and 0 or ((not tonumber(unit)) and unit or tonumber(unit)) -- Setup our multiplier to convert the velocity to the specified unit local mult = (unit == 0 or unit == "m/s") and 50 or ((unit == 1 or unit == "km/h") and 180 or 111.84681456) -- Return the speed by calculating the length of the velocity vector, after converting the velocity to the specified unit return (Vector3(getElementVelocity(theElement)) * mult).length end local vehicle = createVehicle(596, 2392.09009, -1729.73193, 13.38281, 0, 0, 90) local ped = createPed(281, 2400, -1735, 13.38281) local ownSpeed = getElementSpeed(vehicle, 1) setVehicleSirensOn(vehicle, true) warpPedIntoVehicle(ped, vehicle) setPedControlState(ped, "accelerate", true) if (ownSpeed > 29) then setPedControlState(ped, "brake_reverse", true) end Like this Okay, I don't get any error message but the vehicle is currently go faster then 30 km/h. I try setPedControlState(ped, "accelerate", false) But it's not help. Link to comment
NeXuS™ Posted February 8, 2020 Share Posted February 8, 2020 Because you are getting the vehicle's speed at the resource startup. You'll have to use a timer to check more than once. Link to comment
hackermagus Posted February 8, 2020 Author Share Posted February 8, 2020 1 hour ago, NeXuS™ said: Because you are getting the vehicle's speed at the resource startup. You'll have to use a timer to check more than once. Like a for loop? Link to comment
Moderators Patrick Posted February 8, 2020 Moderators Share Posted February 8, 2020 (edited) 8 minutes ago, hackermagus said: Like a for loop? Not completely. Your code runs once when you start the resource. But, every ~0.5-1th seconds you should check how fast the car. setTimer function getElementSpeed(theElement, unit) -- Check arguments for errors assert(isElement(theElement), "Bad argument 1 @ getElementSpeed (element expected, got " .. type(theElement) .. ")") local elementType = getElementType(theElement) assert(elementType == "player" or elementType == "ped" or elementType == "object" or elementType == "vehicle" or elementType == "projectile", "Invalid element type @ getElementSpeed (player/ped/object/vehicle/projectile expected, got " .. elementType .. ")") assert((unit == nil or type(unit) == "string" or type(unit) == "number") and (unit == nil or (tonumber(unit) and (tonumber(unit) == 0 or tonumber(unit) == 1 or tonumber(unit) == 2)) or unit == "m/s" or unit == "km/h" or unit == "mph"), "Bad argument 2 @ getElementSpeed (invalid speed unit)") -- Default to m/s if no unit specified and 'ignore' argument type if the string contains a number unit = unit == nil and 0 or ((not tonumber(unit)) and unit or tonumber(unit)) -- Setup our multiplier to convert the velocity to the specified unit local mult = (unit == 0 or unit == "m/s") and 50 or ((unit == 1 or unit == "km/h") and 180 or 111.84681456) -- Return the speed by calculating the length of the velocity vector, after converting the velocity to the specified unit return (Vector3(getElementVelocity(theElement)) * mult).length end local vehicle = createVehicle(596, 2392.09009, -1729.73193, 13.38281, 0, 0, 90) local ped = createPed(281, 2400, -1735, 13.38281) setVehicleSirensOn(vehicle, true) warpPedIntoVehicle(ped, vehicle) setPedControlState(ped, "accelerate", true) setTimer(function() if (getElementSpeed(vehicle, 1) > 29) then setPedControlState(ped, "brake_reverse", true) else setPedControlState(ped, "brake_reverse", false) end end, 500, 0) -- check every 0.5s Edited February 8, 2020 by stPatrick Link to comment
#\_oskar_/# Posted February 9, 2020 Share Posted February 9, 2020 function CreatePedInVehicle(...) vehicle_ = createVehicle(596,... ) ped_ = createPed(281,Vector3(getElementPosition ( vehicle_ ))) warpPedIntoVehicle(ped_, vehicle_) setVehicleSirensOn(vehicle_, true) return vehicle_ , ped_ end vehicle,ped = CreatePedInVehicle(2392, -1729, 13,0, 0, 90) setTimer(triggerClientEvent, 100,0,'warp',ped,ped) addEvent ( 'warp', true ) addEventHandler ( 'warp', root, function (ped) setPedAnalogControlState(ped, 'accelerate',0.03) --setPedAnalogControlState( ped, 'vehicle_left', 1 ) end ) Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now