private static void CreateGadgetsForVehicle(Vehicle vehicle) { VehicleGadget[] g = VehicleGadget.GetGadgetsForVehicle(vehicle); if (g != null) { gadgets.AddRange(g); } vehiclesChecked.Add(vehicle.Handle); }
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 OnUnload(bool isTerminating) { for (int i = 0; i < gadgets.Count; i++) { VehicleGadget g = gadgets[i]; g.Dispose(); } gadgets = null; if (SoundPlayer.IsInitialized) { SoundPlayer.Instance.Dispose(); } }
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(); } }