private void ShowBound()
        {
            fragInstGta *inst = nativeVeh->Inst;

            if (inst == null)
            {
                return;
            }

            fragCacheEntry *entry = inst->CacheEntry;

            if (entry == null)
            {
                return;
            }

            int **flags = entry->BrokenAndHiddenComponentsFlags;

            if (flags == null)
            {
                return;
            }

            (*flags)[boundIndex >> 5] &= ~(1 << (boundIndex & 0x1F));
        }
Exemplo n.º 2
0
        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();
            }
        }