private static void Main() { while (Game.IsLoading) { GameFiber.Sleep(1000); } bool gameFnInit = GameFunctions.Init(); if (gameFnInit) { Game.LogTrivialDebug($"Successful {nameof(GameFunctions)} init"); } else { Game.LogTrivial($"[ERROR] Failed to initialize {nameof(GameFunctions)}, unloading..."); Game.UnloadActivePlugin(); } LoadVehicleConfigs(); while (true) { GameFiber.Yield(); if (Game.IsPaused) { continue; } Vehicle playerVeh = Game.LocalPlayer.Character.CurrentVehicle; if (playerVeh && !vehiclesChecked.Contains(playerVeh.Handle)) { CreateGadgetsForVehicle(playerVeh); } for (int i = gadgets.Count - 1; i >= 0; i--) { VehicleGadget g = gadgets[i]; if (g.Vehicle) { g.Update(g.Vehicle == playerVeh); } else { if (vehiclesChecked.Contains(g.Vehicle.Handle)) { vehiclesChecked.Remove(g.Vehicle.Handle); } g.Dispose(); gadgets.RemoveAt(i); } } } }
private static void Main() { while (Game.IsLoading) { GameFiber.Sleep(1000); } bool gameFnInit = GameFunctions.Init(); if (gameFnInit) { Game.LogTrivialDebug($"Successful {nameof(GameFunctions)} init"); } else { Game.LogTrivial($"[ERROR] Failed to initialize {nameof(GameFunctions)}, unloading..."); Game.UnloadActivePlugin(); } LoadVehicleConfigs(); while (true) { GameFiber.Yield(); if (Game.IsPaused) { continue; } Vehicle playerVeh = Game.LocalPlayer.Character.CurrentVehicle; if (playerVeh && !vehiclesChecked.Contains(playerVeh.Handle)) { CreateGadgetsForVehicle(playerVeh); } for (int i = gadgets.Count - 1; i >= 0; i--) { VehicleGadget g = gadgets[i]; if (g.Vehicle) { g.Update(g.Vehicle == playerVeh); if (g.RequiresPoseBounds) { vehiclesRequiringPoseBounds.Add(g.Vehicle); } } else { if (vehiclesChecked.Contains(g.Vehicle.Handle)) { vehiclesChecked.Remove(g.Vehicle.Handle); } g.Dispose(); gadgets.RemoveAt(i); } } foreach (Vehicle v in vehiclesRequiringPoseBounds) { CVehicle * cveh = (CVehicle *)v.MemoryAddress; fragInstGta *inst = cveh->Inst; if (inst == null) { return; } GameFunctions.fragInst_PoseBoundsFromSkeleton(inst, true, true, true, 0, 0); } vehiclesRequiringPoseBounds.Clear(); } }