SetVehicleHandling: Difference between revisions
(Added reference to helicopters and other aircraft as per #2426) |
Dutchman101 (talk | contribs) No edit summary |
||
Line 23: | Line 23: | ||
{{Note|For functionality reasons, suspension modification is disabled on monster trucks, trains, boats and trailers. | {{Note|For functionality reasons, suspension modification is disabled on monster trucks, trains, boats and trailers. | ||
Additionally, helicopters are not affected by custom handling. The vehicle-on-wheels handling does not affect planes when they are on the ground either.}} | Additionally, helicopters are not affected by custom handling. The vehicle-on-wheels handling does not affect planes when they are on the ground either. For more information on this, see [https://github.com/multitheftauto/mtasa-blue/issues/2426 issue 2426]}} | ||
{{Warning|To change handling values of aircraft like ''maxVelocity'', you must first set [[SetAircraftMaxVelocity|setAircraftMaxVelocity]].}} | {{Warning|To change handling values of aircraft like ''maxVelocity'', you must first set [[SetAircraftMaxVelocity|setAircraftMaxVelocity]].}} | ||
Latest revision as of 19:55, 5 January 2022
This function is used to change the handling data of a vehicle.
Implemented also for client-sided vehicles.
Syntax
bool setVehicleHandling(element theVehicle, string property, var value)
Syntaxes for reset configurations:
bool setVehicleHandling(element theVehicle, string property, nil, false) -- Reset one property to model handling value bool setVehicleHandling(element theVehicle, string property, nil, true) -- Reset one property to GTA default value bool setVehicleHandling(element theVehicle, false) -- Reset all properties to model handling value bool setVehicleHandling(element theVehicle, true) -- Reset all properties to GTA default value
Required Arguments
- theVehicle: The vehicle you wish to set the handling of.
- property: The property you wish to set the handling of the vehicle to.
http://web.archive.org/web/20140223160252/http://projectcerbera.com/gta/sa/tutorials/handling
Property | Value | Minimum value | Maximum value | Notes |
---|---|---|---|---|
mass | Float | 1.0 | 100000.0 | |
turnMass | Float | 0.0 | 1000000.0 | |
dragCoeff | Float | -200.0 | 200.0 | |
centerOfMass | Table = { [1]=posX, [2]=posY, [3]=posZ } (floats) | -10.0 | 10.0 | Get returns a table, set needs a table. |
percentSubmerged | Integer | 1 | 99999 | |
tractionMultiplier | Float | -100000.0 | 100000.0 | |
tractionLoss | Float | 0.0 | 100.0 | |
tractionBias | Float | 0.0 | 1.0 | |
numberOfGears | Integer | 1 | 5 | |
maxVelocity | Float | 0.1 | 200000.0 | |
engineAcceleration | Float | 0.0 | 100000.0 | |
engineInertia | Float | -1000.0 | 1000.0 | Inertia of 0 can cause a LSOD. (Unable to divide by zero) |
driveType | String | N/A | N/A | Use 'rwd', 'fwd' or 'awd'. |
engineType | String | N/A | N/A | Use 'petrol', 'diesel' or 'electric'. |
brakeDeceleration | Float | 0.1 | 100000.0 | |
brakeBias | Float | 0.0 | 1.0 | |
ABS | Boolean | true | false | Has no effect. |
steeringLock | Float | 0.0 | 360.0 | |
suspensionForceLevel | Float | 0.0 | 100.0 | |
suspensionDamping | Float | 0.0 | 100.0 | |
suspensionHighSpeedDamping | Float | 0.0 | 600.0 | |
suspensionUpperLimit | Float | -50.0 | 50.0 | Can't be equal to suspensionLowerLimit. |
suspensionLowerLimit | Float | -50.0 | 50.0 | Can't be equal to suspensionUpperLimit. |
suspensionFrontRearBias | Float | 0.0 | 1.0 | Hardcoded maximum is 3.0, but values above 1.0 have no effect. |
suspensionAntiDiveMultiplier | Float | 0.0 | 30.0 | |
seatOffsetDistance | Float | -20.0 | 20.0 | |
collisionDamageMultiplier | Float | 0.0 | 10.0 | |
monetary | Integer | 0 | 230195200 | Get works, set is disabled. |
modelFlags | Hexadecimal/Decimal | N/A | N/A | Property uses a decimal value, generated by a hexadecimal value. Either use 0x12345678 or tonumber ( "0x12345678" ). See projectcerbera for possible values. |
handlingFlags | Hexadecimal/Decimal | N/A | N/A | Property uses a decimal value, generated by a hexadecimal value. Either use 0x12345678 or tonumber ( "0x12345678" ). See projectcerbera for possible values. |
headLight | String | N/A | N/A | Get works, set is disabled. Available values: 'long', 'small', 'big', 'tall'. |
tailLight | String | N/A | N/A | Get works, set is disabled. Available values: 'long', 'small', 'big', 'tall'. |
animGroup | Integer | ?? | ?? | Get works, set is disabled due to people not knowing this property was vehicle-based and caused crashes. |
- value: The value of the property you wish to set the handling of the vehicle to.
Returns
Returns true if the handling was set successfully, false otherwise. See below a list of valid properties and their required values:
Example
This example will make Infernus handling very fast and also make it damage proof from collision (handling by Mr.unpredictable). this example will help you in creating your own vehicle handling.
function vhandling ( theVehicle ) if getElementModel(theVehicle) == 411 then -------------- vehicle Id setVehicleHandling(theVehicle, "mass", 300.0) setVehicleHandling(theVehicle, "turnMass", 200) setVehicleHandling(theVehicle, "dragCoeff", 4.0 ) setVehicleHandling(theVehicle, "centerOfMass", { 0.0,0.08,-0.09 } ) setVehicleHandling(theVehicle, "percentSubmerged", 103) setVehicleHandling(theVehicle, "tractionMultiplier", 1.8) setVehicleHandling(theVehicle, "tractionLoss", 1.0) setVehicleHandling(theVehicle, "tractionBias", 0.48) setVehicleHandling(theVehicle, "numberOfGears", 5) setVehicleHandling(theVehicle, "maxVelocity", 300.0) setVehicleHandling(theVehicle, "engineAcceleration", 90.0 ) setVehicleHandling(theVehicle, "engineInertia", 5.0) setVehicleHandling(theVehicle, "driveType", "rwd") setVehicleHandling(theVehicle, "engineType", "petrol") setVehicleHandling(theVehicle, "brakeDeceleration", 20.0) setVehicleHandling(theVehicle, "brakeBias", 0.60) -----abs---- setVehicleHandling(theVehicle, "steeringLock", 35.0 ) setVehicleHandling(theVehicle, "suspensionForceLevel", 0.85) setVehicleHandling(theVehicle, "suspensionDamping", 0.15 ) setVehicleHandling(theVehicle, "suspensionHighSpeedDamping", 0.0) setVehicleHandling(theVehicle, "suspensionUpperLimit", 0.15 ) setVehicleHandling(theVehicle, "suspensionLowerLimit", -0.16) setVehicleHandling(theVehicle, "suspensionFrontRearBias", 0.5 ) setVehicleHandling(theVehicle, "suspensionAntiDiveMultiplier", 0.0) setVehicleHandling(theVehicle, "seatOffsetDistance", 0.0) setVehicleHandling(theVehicle, "collisionDamageMultiplier", 0.00) --setVehicleHandling(theVehicle, "monetary", 10000) This one is disabled for now setVehicleHandling(theVehicle, "modelFlags", 1002000) setVehicleHandling(theVehicle, "handlingFlags", 1000002) --setVehicleHandling(theVehicle, "headLight", 3) This one is disabled for now --setVehicleHandling(theVehicle, "tailLight", 2) This one is disabled for now --setVehicleHandling(theVehicle, "animGroup", 4) This one is disabled for now end end addEventHandler ( "onPlayerVehicleEnter", getRootElement(), vhandling )
This example will add a command for players with which they can change the mass of the vehicle.
function massChange ( me, command, mass ) local mass = tonumber ( mass ) -- Convert mass to a number local veh = getPedOccupiedVehicle ( me ) -- Get the player's vehicle if mass and veh then -- If valid mass and in a vehicle local success = setVehicleHandling ( veh, "mass", mass) -- Set the vehicle's mass, and check if successful if success then -- If successful outputChatBox ( "Your vehicle's mass has been changed to: "..mass.." kg", me, 0, 255, 0 ) -- Notify the player of success else -- Too bad failure is still an option outputChatBox ( "Setting mass failed. It's probably above or below allowed limits", me, 255, 0, 0 ) -- Notify the player of failure, and give a possible reason end elseif not veh then -- If not in a vehicle outputChatBox ( "You're not in a vehicle", me, 255, 0, 0 ) -- Tell the player; He / she obviously doesn't know elseif not mass then -- If not a valid mass outputChatBox ( "Syntax: /changemass [mass]", me, 255, 0, 0 ) -- Tell the player the proper syntax end end addCommandHandler ( "changemass", massChange )
This example will apply custom handling as defined for each specific vehicle (ID) in below table
local predefinedHandling = { [411] = { ["engineAcceleration"] = 14, ["dragCoeff"] = 0, ["maxVelocity"] = 100000, ["tractionMultiplier"] = 0.9, ["tractionLoss"] = 1.1, }, [415] = { ["engineAcceleration"] = 14, ["dragCoeff"] = 0, ["maxVelocity"] = 100000, ["tractionMultiplier"] = 0.9, ["tractionLoss"] = 1.1, }, [562] = { -- Universal drift handling ["driveType"] = "rwd", ["engineAcceleration"] = 200, ["dragCoeff"] = 1.5, ["maxVelocity"] = 300, ["tractionMultiplier"] = 0.7, ["tractionLoss"] = 0.8, ["collisionDamageMultiplier"] = 0.4, ["engineInertia"] = -175, ["steeringLock"] = 75, ["numberOfGears"] = 4, ["suspensionForceLevel"] = 0.8, ["suspensionDamping"] = 0.8, ["suspensionUpperLimit"] = 0.33, ["suspensionFrontRearBias"] = 0.3, ["mass"] = 1800, ["turnMass"] = 3000, ["centerOfMass"] = { [1]=0, [2]=-0.2, [3]=-0.5 }, -- Good example to understand centerOfMass parameter usage }, --next model below etc (copy rows) } for i,v in pairs (predefinedHandling) do if i then for handling, value in pairs (v) do if not setModelHandling (i, handling, value) then outputDebugString ("* Predefined handling '"..tostring(handling).."' for vehicle model '"..tostring(i).."' could not be set to '"..tostring(value).."'") end end end end for _,v in ipairs (getElementsByType("vehicle")) do if v and predefinedHandling[getElementModel(v)] then for k,vl in pairs (predefinedHandling[getElementModel(v)]) do setVehicleHandling (v, k, vl) end end end function resetHandling() for model in pairs (predefinedHandling) do if model then for k in pairs(getOriginalHandling(model)) do setModelHandling(model, k, nil) end end end for _,v in ipairs (getElementsByType("vehicle")) do if v then local model = getElementModel(v) if predefinedHandling[model] then for k,h in pairs(getOriginalHandling(model)) do setVehicleHandling(v, k, h) end end end end end addEventHandler("onResourceStop", resourceRoot, resetHandling)
Changelog
Version | Description |
---|
1.5.5-3.12009 | Added for vehicles created on client-side. |
See other vehicle functions
- addVehicleUpgrade
- attachTrailerToVehicle
- blowVehicle
- createVehicle
- detachTrailerFromVehicle
- fixVehicle
- getOriginalHandling
- getTrainDirection
- getTrainPosition
- getTrainSpeed
- getTrainTrack
- getVehicleColor
- getVehicleCompatibleUpgrades
- getVehicleController
- getVehicleDoorOpenRatio
- getVehicleDoorState
- getVehicleEngineState
- getVehicleHandling
- getVehicleHeadLightColor
- getVehicleLandingGearDown
- getVehicleLightState
- getVehicleMaxPassengers
- getVehicleModelFromName
- getVehicleName
- getVehicleNameFromModel
- getVehicleOccupant
- getVehicleOccupants
- getVehicleOverrideLights
- getVehiclePaintjob
- getVehiclePanelState
- getVehiclePlateText
- getVehicleSirenParams
- getVehicleSirens
- getVehicleSirensOn
- getVehicleTowedByVehicle
- getVehicleTowingVehicle
- getVehicleTurretPosition
- getVehicleType
- getVehicleUpgradeOnSlot
- getVehicleUpgradeSlotName
- getVehicleUpgrades
- getVehicleVariant
- getVehicleWheelStates
- isTrainDerailable
- isTrainDerailed
- isVehicleBlown
- isVehicleDamageProof
- isVehicleFuelTankExplodable
- isVehicleLocked
- isVehicleOnGround
- isVehicleTaxiLightOn
- removeVehicleUpgrade
- setTrainDerailable
- setTrainDerailed
- setTrainDirection
- setTrainPosition
- setTrainSpeed
- setTrainTrack
- setVehicleColor
- setVehicleDamageProof
- setVehicleDoorOpenRatio
- setVehicleDoorState
- setVehicleDoorsUndamageable
- setVehicleEngineState
- setVehicleFuelTankExplodable
- setVehicleHandling
- setVehicleHeadLightColor
- setVehicleLandingGearDown
- setVehicleLightState
- setVehicleLocked
- setVehicleOverrideLights
- setVehiclePaintjob
- setVehiclePanelState
- setVehiclePlateText
- setVehicleSirens
- setVehicleSirensOn
- setVehicleTaxiLightOn
- setVehicleTurretPosition
- setVehicleVariant
- setVehicleWheelStates