@@ -80,7 +80,7 @@ function CVehicle:init(vehicle)
8080 instance .m_current_gear = ptr :add (0x0882 )
8181 instance .m_top_gear = ptr :add (0x0886 )
8282 instance .m_engine_health = ptr :add (0x0910 )
83- instance .m_handling_data = CHandlingData (ptr :add (0x0960 ):deref ())
83+ instance .m_handling_data = CHandlingData (ptr :add (0x0960 ):deref (), instance . m_model_info : GetVehicleType () )
8484 instance .m_deform_god = ptr :add (0x096C )
8585 instance .m_steering_input = ptr :add (0x09D4 )
8686 instance .m_current_steering = ptr :add (0x09DC )
125125
126126--- @return pointer< (CCarHandlingData | CBikeHandlingData | CFlyingHandlingData )? >
127127function CVehicle :GetSubHandlingData ()
128- return self :__safecall (nil , function ()
129- return self .m_handling_data :GetSubHandlingData ()
130- end )
128+ return self .m_handling_data :GetSubHandlingData ()
129+ end
130+
131+ function CVehicle :GetHandlingFlags ()
132+ return self .m_handling_data :GetHandlingFlags ()
131133end
132134
133135--- @param flag eVehicleHandlingFlags
@@ -138,46 +140,57 @@ function CVehicle:GetHandlingFlag(flag)
138140 end )
139141end
140142
143+ --- @return uint32_t
144+ function CVehicle :GetModelFlags ()
145+ return self .m_handling_data :GetModelFlags ()
146+ end
147+
141148--- @param flag eVehicleModelFlags
142149--- @return boolean
143150function CVehicle :GetModelFlag (flag )
144- return self :__safecall (false , function ()
145- return self .m_handling_data :GetModelFlag (flag )
146- end )
151+ return self .m_handling_data :GetModelFlag (flag )
152+ end
153+
154+ --- @return { [1] : uint32_t , [2] : uint32_t , [3] : uint32_t , [4] : uint32_t , [5] : uint32_t , [6] : uint32_t , [7] : uint32_t }
155+ function CVehicle :GetModelInfoFlags ()
156+ return self .m_model_info :GetModelInfoFlags ()
147157end
148158
149159--- @param flag eVehicleModelInfoFlags
150160--- @return boolean
151161function CVehicle :GetModelInfoFlag (flag )
152- return self :__safecall (false , function ()
153- return self .m_model_info :GetModelInfoFlag (flag )
154- end )
162+ return self .m_model_info :GetModelInfoFlag (flag )
155163end
156164
157- --- @param flag eVehicleAdvancedFlags
158- --- @return boolean
159- function CVehicle :GetAdvancedFlag (flag )
160- if (not self :IsValid ()) then
161- return false
162- end
165+ --- @return uint32_t
166+ function CVehicle :GetAdvancedFlags ()
167+ if (not self :IsValid ()) then return 0 end
163168
164169 if (self :GetVehicleType () ~= Enums .eVehicleType .VEHICLE_TYPE_CAR ) then
165- return false
166- end
167-
168- local ptr = self :GetSubHandlingData ()
169- if (not ptr or ptr :is_null ()) then
170- return false
170+ return 0
171171 end
172172
173173 --- @type CCarHandlingData ?
174- local cchd = CCarHandlingData ( ptr )
174+ local cchd = self : GetSubHandlingData ( )
175175 if (not cchd or not cchd :IsValid ()) then
176- return false
176+ return 0
177177 end
178178
179- local dword_flags = cchd .m_advanced_flags :get_dword ()
180- return Bit .IsBitSet (dword_flags , flag )
179+ return cchd .m_advanced_flags :get_dword ()
180+ end
181+
182+ --- @param flag eVehicleAdvancedFlags
183+ --- @return boolean
184+ function CVehicle :GetAdvancedFlag (flag )
185+ return Bit .IsBitSet (self :GetAdvancedFlags (), flag )
186+ end
187+
188+ --- @param flags uint32_t
189+ --- @return boolean
190+ function CVehicle :SetHandlingFlags (flags )
191+ return self :__safecall (false , function ()
192+ return self .m_handling_data :SetHandlingFlags (flags )
193+ end )
181194end
182195
183196--- @param flag eVehicleHandlingFlags
@@ -189,19 +202,33 @@ function CVehicle:SetHandlingFlag(flag, toggle)
189202end
190203
191204--- @param value float
192- --- @return boolean
205+ --- @return boolean success
193206function CVehicle :SetAcceleration (value )
194- return self :__safecall (false , function ()
195- return self .m_handling_data :SetAcceleration (value )
196- end )
207+ return self .m_handling_data :SetAcceleration (value )
197208end
198209
199210--- @param value float
200- --- @return boolean
211+ --- @return boolean success
201212function CVehicle :SetDeformMultiplier (value )
202- return self :__safecall (false , function ()
203- return self .m_handling_data :SetDeformMultiplier (value )
204- end )
213+ return self .m_handling_data :SetDeformMultiplier (value )
214+ end
215+
216+ --- @param flags uint32_t
217+ --- @return boolean success
218+ function CVehicle :SetModelFlags (flags )
219+ return self .m_handling_data :SetModelFlags (flags )
220+ end
221+
222+ --- @param flag eVehicleModelInfoFlags
223+ --- @param toggle boolean
224+ --- @return boolean success
225+ function CVehicle :SetModelFlag (flag , toggle )
226+ return self .m_handling_data :SetModelFlag (flag , toggle )
227+ end
228+
229+ --- @param flags uint32_t
230+ function CVehicle :SetModelInfoFlags (flags )
231+ self .m_model_info :SetModelInfoFlags (flags )
205232end
206233
207234--- @param flag eVehicleModelInfoFlags
@@ -210,9 +237,8 @@ function CVehicle:SetModelInfoFlag(flag, toggle)
210237 self .m_model_info :SetModelInfoFlag (flag , toggle )
211238end
212239
213- --- @param flag eVehicleAdvancedFlags
214- --- @param toggle boolean
215- function CVehicle :SetAdvancedFlag (flag , toggle )
240+ --- @param flags uint32_t
241+ function CVehicle :SetAdvancedFlags (flags )
216242 if (not self :IsValid ()) then
217243 return
218244 end
@@ -221,19 +247,31 @@ function CVehicle:SetAdvancedFlag(flag, toggle)
221247 return
222248 end
223249
224- local ptr = self :GetSubHandlingData ()
225- if (not ptr or ptr :is_null ()) then
250+ --- @type CCarHandlingData ?
251+ local cchd = self :GetSubHandlingData ()
252+ if (not cchd or not cchd :IsValid ()) then
253+ return false
254+ end
255+
256+ cchd .m_advanced_flags :set_dword (flags )
257+ end
258+
259+ --- @param flag eVehicleAdvancedFlags
260+ --- @param toggle boolean
261+ function CVehicle :SetAdvancedFlag (flag , toggle )
262+ if (not self :IsValid ()) then return end
263+
264+ if (self :GetVehicleType () ~= Enums .eVehicleType .VEHICLE_TYPE_CAR ) then
226265 return
227266 end
228267
229268 --- @type CCarHandlingData ?
230- local cchd = CCarHandlingData ( ptr )
269+ local cchd = self : GetSubHandlingData ( )
231270 if (not cchd or not cchd :IsValid ()) then
232271 return
233272 end
234273
235- local dword_flags = cchd .m_advanced_flags :get_dword ()
236- local new_bits = Bit .Toggle (dword_flags , flag , toggle )
274+ local new_bits = Bit .Toggle (self :GetAdvancedFlags (), flag , toggle )
237275 cchd .m_advanced_flags :set_dword (new_bits )
238276end
239277
0 commit comments