MTA:Eir/FileSystem/file/readFloat
Jump to navigation
Jump to search
This function attempts to read a float (native type) from a file and return it. The amount of bytes read should be four.
Syntax
float file:readFloat ()
Returns
Returns a float if it was successfully read from the file, false otherwise.
Example
Click to collapse [-]
ServerThis snippet demonstrates a binary vehicle handling format. This saves space in comparison to a .XML based format.
local function writeFileString( theFile, string ) theFile:writeShort( #string ); theFile:write( string ); end local function readFileString( theFile ) local stringLen = theFile:readShort(); if not ( stringLen ) then return false; end return theFile:read( stringLen ); end local function saveVehicleHandling( theFile, handlingDict ) -- Write down the details. theFile:writeDouble( handlingDict.mass ); theFile:writeDouble( handlingDict.turnMass ); theFile:writeFloat( handlingDict.dragCoeff ); theFile:writeFloat( handlingDict.centerOfMass[1] ); theFile:writeFloat( handlingDict.centerOfMass[2] ); theFile:writeFloat( handlingDict.centerOfMass[3] ); theFile:writeInt( handlingDict.percentSubmerged ); theFile:writeDouble( handlingDict.tractionMultiplier ); theFile:writeFloat( handlingDict.tractionLoss ); theFile:writeFloat( handlingDict.tractionBias ); theFile:writeShort( handlingDict.numberOfGears ); theFile:writeDouble( handlingDict.maxVelocity ); theFile:writeDouble( handlingDict.engineAcceleration ); theFile:writeFloat( handlingDict.engineInertia ); writeFileString( theFile, tostring( handlingDict.driveType ) ); writeFileString( theFile, tostring( handlingDict.engineType ) ); theFile:writeDouble( handlingDict.brakeDeceleration ); theFile:writeBoolean( handlingDict.ABS ); theFile:writeFloat( handlingDict.steeringLock ); theFile:writeFloat( handlingDict.suspensionForceLevel ); theFile:writeFloat( handlingDict.suspensionDamping ); theFile:writeFloat( handlingDict.suspensionHighSpeedDamping ); theFile:writeFloat( handlingDict.suspensionUpperLimit ); theFile:writeFloat( handlingDict.suspensionLowerLimit ); theFile:writeFloat( handlingDict.suspensionFrontRearBias ); theFile:writeFloat( handlingDict.suspensionAntiDiveMultiplier ); theFile:writeFloat( handlingDict.seatOffsetDistance ); theFile:writeFloat( handlingDict.collisionDamageMultiplier ); theFile:writeInt( handlingDict.monetary ); theFile:writeInt( handlingDict.modelFlags ); theFile:writeInt( handlingDict.handlingFlags ); writeFileString( theFile, handlingDict.headLight ); writeFileString( theFile, handlingDict.tailLight ); theFile:writeShort( handlingDict.animGroup ); end local function attemptFileRead( theFile, theOperation, defaultOut ) local output = theOperation( theFile ); if not ( output ) then return defaultOut; end return output; end local function loadVehicleHandling( theFile ) local handlingEntry = { mass = attemptFileRead( theFile, theFile.readDouble, 1000 ), turnMass = attemptFileRead( theFile, theFile.readDouble, 1000 ), dragCoeff = attemptFileRead( theFile, theFile.readFloat, 0 ), { [1] = attemptFileRead( theFile, theFile.readFloat, 0 ), [2] = attemptFileRead( theFile, theFile.readFloat, 0 ), [3] = attemptFileRead( theFile, theFile.readFloat, 0 ) }, percentSubmerged = attemptFileRead( theFile, theFile.readInt, 100 ), tractionMultiplier = attemptFileRead( theFile, theFile.readDouble, 1.0 ), tractionLoss = attemptFileRead( theFile, theFile.readFloat, 1.0 ), tractionBias = attemptFileRead( theFile, theFile.readFloat, 1.0 ), numberOfGears = attemptFileRead( theFile, theFile.readShort, 4 ), maxVelocity = attemptFileRead( theFile, theFile.readDouble, 240 ), engineAcceleration = attemptFileRead( theFile, theFile.readDouble, 9 ), engineInertia = attemptFileRead( theFile, theFile.readFloat, 3 ), driveType = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "fwd" ), engineType = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "diesel" ), brakeDeceleration = attemptFileRead( theFile, theFile.readDouble, 5 ), brakeBias = attemptFileRead( theFile, theFile.readFloat, 1.0 ), ABS = attemptFileRead( theFile, theFile.readBoolean, false ), steeringLock = attemptFileRead( theFile, theFile.readFloat, 180 ), suspensionForceLevel = attemptFileRead( theFile, theFile.readFloat, 10 ), suspensionDamping = attemptFileRead( theFile, theFile.readFloat, 10 ), suspensionHighSpeedDamping = attemptFileRead( theFile, theFile.readFloat, 50 ), suspensionUpperLimit = attemptFileRead( theFile, theFile.readFloat, 0 ), suspensionLowerLimit = attemptFileRead( theFile, theFile.readFloat, 0 ), suspensionFrontRearBias = attemptFileRead( theFile, theFile.readFloat, 0.4 ), suspensionAntiDiveMultiplier = attemptFileRead( theFile, theFile.readFloat, 10 ), seatOffsetDistance = attemptFileRead( theFile, theFile.readFloat, 4 ), collisionDamageMultiplier = attemptFileRead( theFile, theFile.readFloat, 0.5 ), monetary = attemptFileRead( theFile, theFile.readInt, 10000 ), modelFlags = attemptFileRead( theFile, theFile.readInt, 0 ), handlingFlags = attemptFileRead( theFile, theFile.readInt, 0 ), headLight = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "big" ), tailLight = attemptFileRead( theFile, function(theFile) return readFileString( theFile ) end, "big" ), animGroup = attemptFileRead( theFile, theFile.readShort, 1 ) }; return handlingEntry; end -- Save the handling of your vehicle, so you can reuse it later. addCommandHandler( "savehandling", function(player) local myVehicle = getPedOccupiedVehicle( player ); if ( myVehicle ) then local handling = getVehicleHandling( myVehicle ); local handlingFile = fileCreate( getPlayerName( player ) .. "_saved_handling.dat" ); if ( handlingFile ) then saveVehicleHandling( handlingFile, handling ); handlingFile:destroy(); outputChatBox( "successfully saved handling" ); end end end ); -- Load the handling of the vehicle for reusage. addCommandHandler( "loadhandling", function(player) local handlingName = getPlayerName( player ) .. "_saved_handling.dat"; if ( fileExists( handlingName ) ) then local myVehicle = getPedOccupiedVehicle( player ); if ( myVehicle ) then local handlingFile = fileOpen( handlingName ); if ( handlingFile ) then local handling = loadVehicleHandling( handlingFile ); handlingFile:destroy(); -- Apply the saved handling. for m,n in pairs( handling ) do setVehicleHandling( myVehicle, m, n ); end outputChatBox( "successfully restored handling" ); end end end end );