1- using System . Text ;
2-
31using CitizenFX . Base ;
42using CitizenFX . FiveM . Client ;
53using CitizenFX . FiveM . Client . Extensions ;
@@ -14,7 +12,7 @@ namespace vMenu.Enhanced.Menus;
1412/// </summary>
1513public sealed class VehicleSpawnerMenu
1614{
17-
15+ internal static NativeApi nativeApi = BaseEntrypoint . NativeApi ;
1816
1917
2018 public async Task < Menu > GetMenu ( )
@@ -26,18 +24,12 @@ public async Task<Menu> GetMenu()
2624 MenuController . MainMenu . AddMenuItem ( linkBtn ) ;
2725 MenuController . BindMenuItem ( MenuController . MainMenu , menu , linkBtn ) ;
2826
29- API . Log . Info ( "Calling something.GetVehicleList now" ) ;
30- var data = API . Exports [ "something" ] . Call < string > ( "GetVehicleList" ) ;
27+ var vehicles = BrokenNatives . NativeFixer . GetAllVehicleModels ( ) ;
3128
32- // This is broken due to crash: https://github.com/citizenfx/rfc/discussions/328
33- //var vehicles = System.Text.Json.JsonSerializer.Deserialize<string[]>(data);
3429
35- API . Log . Info ( "Got vehicle list data: " + data ) ;
36- var vehicles = data . Replace ( "[" , "" ) . Replace ( "]" , "" ) . Replace ( "\" " , "" ) . Split ( ',' ) ;
3730
3831 if ( vehicles is null )
3932 {
40- API . Log . Warn ( "Vehicle list is null" ) ;
4133 return menu ;
4234 }
4335
@@ -47,10 +39,6 @@ public async Task<Menu> GetMenu()
4739 . OrderBy ( vehicle => vehicle )
4840 . GroupBy ( vehicle => Native . GetVehicleClassFromName ( API . Hash ( vehicle ) ) ) ;
4941
50- API . Log . Info ( "Vehicle list categorized and cleaned up" ) ;
51-
52-
53-
5442 foreach ( var cat in vehicleSperCategory )
5543 {
5644 var submenu = new Menu ( "Class: " + cat . Key . ToString ( ) , "Vehicle Spawner Menu" ) ;
@@ -61,8 +49,10 @@ public async Task<Menu> GetMenu()
6149
6250 submenu . OnItemSelect += Submenu_OnItemSelect ;
6351 MenuController . AddSubmenu ( menu , submenu ) ;
52+
6453 var btn = new MenuItem ( "Veh Class: " + cat . Key . ToString ( ) ) ;
6554 menu . AddMenuItem ( btn ) ;
55+
6656 MenuController . BindMenuItem ( menu , submenu , btn ) ;
6757 API . Log . Info ( "Added submenu for vehicle class: {0}" , cat . Key . ToString ( ) ) ;
6858 }
@@ -73,7 +63,23 @@ public async Task<Menu> GetMenu()
7363
7464 private async void Submenu_OnItemSelect ( Menu menu , MenuItem menuItem , int itemIndex )
7565 {
76- var veh = await API . Vehicles . RequestAndCreate ( API . Hash ( menuItem . Text ) , API . Players . Local . Ped ! . Position , ( int ) API . Players . Local . Ped . Heading , true , true , true ) ;
66+ var hash = API . Hash ( menuItem . Text ) ;
67+
68+ // Manually checking and requesting model because API.Vehicles.RequestAndCreate uses datetime which is currently broken and crashes the game.
69+ // https://github.com/citizenfx/rfc/discussions/328
70+ if ( ! Native . IsModelValid ( hash ) )
71+ {
72+ return ;
73+ }
74+
75+ Native . RequestModel ( hash ) ;
76+
77+ while ( ! Native . HasModelLoaded ( hash ) )
78+ {
79+ await API . Delay ( 0 ) ;
80+ }
81+
82+ var veh = await API . Vehicles . RequestAndCreate ( hash , API . Players . Local . Ped ! . Position , ( int ) API . Players . Local . Ped . Heading , true , true , true ) ;
7783 if ( veh is not null )
7884 {
7985 API . Players . Local . Ped . SetPedIntoVehicle ( veh ! . Handle , - 1 ) ;
0 commit comments