Пример #1
0
        /// <summary>
        /// New function used to save vehicle info to local storage.
        /// </summary>
        /// <param name="saveName"></param>
        /// <param name="vehicleInfo"></param>
        /// <param name="overrideOldVersion"></param>
        /// <returns></returns>
        public bool SaveVehicleInfo(string saveName, CommonFunctions.VehicleInfo vehicleInfo, bool overrideOldVersion)
        {
            if ((GetResourceKvpString(saveName) ?? "NULL") == "NULL" || overrideOldVersion)
            {
                if ((saveName ?? "NULL") != "NULL" && saveName.Length > 4)
                {
                    // convert
                    string json = JsonConvert.SerializeObject(vehicleInfo);

                    // log
                    MainMenu.Cf.Log($"[vMenu] Saving!\nName: {saveName}\nVehicle Data: {json}\n");

                    // save
                    SetResourceKvp(saveName, json);

                    // confirm
                    return(GetResourceKvpString(saveName) == json);
                }
            }
            // if something isn't right, then the save is aborted and return false ("failed" state).
            return(false);
        }
Пример #2
0
        /// <summary>
        /// New function to get vehicle information from a saved vehicle.
        /// </summary>
        /// <param name="saveName">Saved vehicle name to get info from. (name includes "veh_")</param>
        /// <returns></returns>
        public CommonFunctions.VehicleInfo GetSavedVehicleInfo(string saveName)
        {
            string json = GetResourceKvpString(saveName);
            var    vi   = new CommonFunctions.VehicleInfo()
            {
            };
            dynamic data = JsonConvert.DeserializeObject(json);

            if (data.ContainsKey("version"))
            {
                MainMenu.Cf.Log("New Version: " + data["version"] + "\n");
                var colors = new Dictionary <string, int>();
                foreach (Newtonsoft.Json.Linq.JProperty c in data["colors"])
                {
                    colors.Add(c.Name, (int)c.Value);
                }
                vi.colors       = colors;
                vi.customWheels = (bool)data["customWheels"];
                var extras = new Dictionary <int, bool>();
                foreach (Newtonsoft.Json.Linq.JProperty e in data["extras"])
                {
                    extras.Add(int.Parse(e.Name), (bool)e.Value);
                }
                vi.extras = extras;
                vi.livery = (int)data["livery"];
                vi.model  = (uint)data["model"];
                var mods = new Dictionary <int, int>();
                foreach (Newtonsoft.Json.Linq.JProperty m in data["mods"])
                {
                    mods.Add(int.Parse(m.Name.ToString()), (int)m.Value);
                }
                vi.mods            = mods;
                vi.name            = (string)data["name"];
                vi.neonBack        = (bool)data["neonBack"];
                vi.neonFront       = (bool)data["neonFront"];
                vi.neonLeft        = (bool)data["neonLeft"];
                vi.neonRight       = (bool)data["neonRight"];
                vi.plateStyle      = (int)data["plateStyle"];
                vi.plateText       = (string)data["plateText"];
                vi.turbo           = (bool)data["turbo"];
                vi.tyreSmoke       = (bool)data["tyreSmoke"];
                vi.version         = (int)data["version"];
                vi.wheelType       = (int)data["wheelType"];
                vi.windowTint      = (int)data["windowTint"];
                vi.xenonHeadlights = (bool)data["xenonHeadlights"];
            }
            else
            {
                MainMenu.Cf.Log("Old: " + json + "\n");
                var dict   = MainMenu.Cf.JsonToDictionary(json);
                var colors = new Dictionary <string, int>()
                {
                    ["primary"]     = int.Parse(dict["primaryColor"]),
                    ["secondary"]   = int.Parse(dict["secondaryColor"]),
                    ["pearlescent"] = int.Parse(dict["pearlescentColor"]),
                    ["wheels"]      = int.Parse(dict["wheelsColor"]),
                    ["dash"]        = int.Parse(dict["dashboardColor"]),
                    ["trim"]        = int.Parse(dict["interiorColor"]),
                    ["neonR"]       = 255,
                    ["neonG"]       = 255,
                    ["neonB"]       = 255,
                    ["tyresmokeR"]  = int.Parse(dict["tireSmokeR"]),
                    ["tyresmokeG"]  = int.Parse(dict["tireSmokeG"]),
                    ["tyresmokeB"]  = int.Parse(dict["tireSmokeB"]),
                };
                var extras = new Dictionary <int, bool>();
                for (int i = 0; i < 15; i++)
                {
                    if (dict["extra" + i] == "true")
                    {
                        extras.Add(i, true);
                    }
                    else
                    {
                        extras.Add(i, false);
                    }
                }

                var mods = new Dictionary <int, int>();
                int skip = 8 + 24 + 2 + 1;
                foreach (var mod in dict)
                {
                    skip--;
                    if (skip < 0)
                    {
                        var key = int.Parse(mod.Key);
                        var val = int.Parse(mod.Value);
                        mods.Add(key, val);
                    }
                }

                vi.colors          = colors;
                vi.customWheels    = dict["customWheels"] == "true";
                vi.extras          = extras;
                vi.livery          = int.Parse(dict["oldLivery"]);
                vi.model           = (uint)Int64.Parse(dict["model"]);
                vi.mods            = mods;
                vi.name            = dict["name"];
                vi.neonBack        = false;
                vi.neonFront       = false;
                vi.neonLeft        = false;
                vi.neonRight       = false;
                vi.plateStyle      = int.Parse(dict["plateStyle"]);
                vi.plateText       = dict["plate"];
                vi.turbo           = dict["turbo"] == "true";
                vi.tyreSmoke       = dict["tireSmoke"] == "true";
                vi.version         = 1;
                vi.wheelType       = int.Parse(dict["wheelType"]);
                vi.windowTint      = int.Parse(dict["windowTint"]);
                vi.xenonHeadlights = dict["xenonHeadlights"] == "true";
                SaveVehicleInfo(saveName, vi, true);
            }
            MainMenu.Cf.Log(json + "\n");
            return(vi);
        }
Пример #3
0
        /// <summary>
        /// Creates the menu.
        /// </summary>
        private void CreateMenu()
        {
            string menuTitle = "Saved Vehicles";

            #region Create menus and submenus
            // Create the menu.
            menu = new UIMenu(menuTitle, "Manage Saved Vehicles", true)
            {
                ScaleWithSafezone       = false,
                MouseControlsEnabled    = false,
                MouseEdgeEnabled        = false,
                ControlDisablingEnabled = false
            };
            // Create submenus.
            UIMenu spawnSavedVehicles = new UIMenu(menuTitle, "Spawn Saved Vehicle", true)
            {
                ScaleWithSafezone       = false,
                MouseControlsEnabled    = false,
                MouseEdgeEnabled        = false,
                ControlDisablingEnabled = false
            };
            UIMenu deleteSavedVehicles = new UIMenu(menuTitle, "~r~Delete Saved Vehicle", true)
            {
                ScaleWithSafezone       = false,
                MouseControlsEnabled    = false,
                MouseEdgeEnabled        = false,
                ControlDisablingEnabled = false
            };
            #endregion

            #region Create, add and bind buttons to the menus.
            // Create menu buttons.
            UIMenuItem saveVeh = new UIMenuItem("Save Current Vehicle", "Save the vehicle you are currently in.");
            saveVeh.SetRightBadge(UIMenuItem.BadgeStyle.Tick);
            UIMenuItem savedVehiclesBtn = new UIMenuItem("Spawn Saved Vehicle", "Select a vehicle from your saved vehicles list.");
            savedVehiclesBtn.SetRightLabel("→→→");
            UIMenuItem deleteSavedVehiclesBtn = new UIMenuItem("~r~Delete Saved Vehicle", "~r~Delete ~s~a saved vehicle.");
            deleteSavedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert);
            deleteSavedVehiclesBtn.SetRightLabel("→→→");

            // Add buttons to the menu.
            menu.AddItem(saveVeh);
            menu.AddItem(savedVehiclesBtn);
            menu.AddItem(deleteSavedVehiclesBtn);

            // Bind submenus to menu items.
            if (cf.IsAllowed(Permission.SVSpawn))
            {
                menu.BindMenuToItem(spawnSavedVehicles, savedVehiclesBtn);
            }
            else
            {
                savedVehiclesBtn.Enabled = false;
                savedVehiclesBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock);
                savedVehiclesBtn.Description = "This option has been disabled by the server owner.";
            }
            menu.BindMenuToItem(deleteSavedVehicles, deleteSavedVehiclesBtn);
            #endregion

            #region Button pressed events
            // Handle button presses.
            menu.OnItemSelect += (sender, item, index) =>
            {
                // Save the current vehicle.
                if (item == saveVeh)
                {
                    cf.SaveVehicle();
                }

                // Open and refresh the "spawn saved vehicle from list" submenu.
                else if (item == savedVehiclesBtn)
                {
                    // Remove all old items.
                    spawnSavedVehicles.MenuItems.Clear();

                    // Get all saved vehicles.
                    SavedVehiclesDict = cf.GetSavedVehicles();

                    // Loop through all saved vehicles and create a button for it, then add that button to the submenu.
                    foreach (KeyValuePair <string, CommonFunctions.VehicleInfo> savedVehicle in SavedVehiclesDict)
                    {
                        //MainMenu.Cf.Log(savedVehicle.ToString());
                        UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Click to spawn this saved vehicle.");
                        vehBtn.SetRightLabel($"({savedVehicle.Value.name})");
                        spawnSavedVehicles.AddItem(vehBtn);
                        if (!IsModelInCdimage(savedVehicle.Value.model))
                        {
                            vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock);
                            vehBtn.Enabled     = false;
                            vehBtn.Description = "This model is not available on this server, if this is an addon vehicle or DLC vehicle, please make sure " +
                                                 "that it's being streamed on this server.";
                        }
                        else
                        {
                            if (!VehicleSpawner.allowedCategories[GetVehicleClassFromName(savedVehicle.Value.model)])
                            {
                                vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Lock);
                                vehBtn.Enabled     = false;
                                vehBtn.Description = "This vehicle is not available on this server because you do not have permissions for this vehicle class.";
                            }
                        }
                    }

                    // Sort the menu items (case IN-sensitive) by name.
                    spawnSavedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower()));

                    // Refresh the index of the page.
                    spawnSavedVehicles.RefreshIndex();

                    // Update the scaleform.
                    spawnSavedVehicles.UpdateScaleform();
                }
                // Delete saved vehicle.
                else if (item == deleteSavedVehiclesBtn)
                {
                    deleteSavedVehicles.MenuItems.Clear();

                    // Get the dictionary containing all saved vehicles.
                    SavedVehiclesDict = cf.GetSavedVehicles();

                    // Loop through the list and add all saved vehicles to the menu.
                    foreach (KeyValuePair <string, CommonFunctions.VehicleInfo> savedVehicle in SavedVehiclesDict)
                    {
                        //MainMenu.Cf.Log(savedVehicle.ToString());
                        UIMenuItem vehBtn = new UIMenuItem(savedVehicle.Key.Substring(4), "Are you sure you want to delete this saved vehicle? This action cannot be undone!");
                        vehBtn.SetLeftBadge(UIMenuItem.BadgeStyle.Alert);
                        vehBtn.SetRightLabel($"({savedVehicle.Value.name})");
                        deleteSavedVehicles.AddItem(vehBtn);
                    }

                    // Sort the menu items (case IN-sensitive) by name.
                    deleteSavedVehicles.MenuItems.Sort((pair1, pair2) => pair1.Text.ToString().ToLower().CompareTo(pair2.Text.ToString().ToLower()));
                    deleteSavedVehicles.RefreshIndex();
                    deleteSavedVehicles.UpdateScaleform();
                }
            };
            #endregion

            #region Handle saved vehicles being pressed. (spawning)
            // When a vehicle is selected...
            spawnSavedVehicles.OnItemSelect += (sender2, item2, index2) =>
            {
                CommonFunctions.VehicleInfo vehInfo = SavedVehiclesDict["veh_" + item2.Text];

                // Spawn a vehicle using the hash, and pass on the vehicleInfo dictionary containing all saved vehicle mods.
                if (MainMenu.VehicleSpawnerMenu != null)
                {
                    cf.SpawnVehicle(vehInfo.model, MainMenu.VehicleSpawnerMenu.SpawnInVehicle, MainMenu.VehicleSpawnerMenu.ReplaceVehicle, false, vehicleInfo: vehInfo, saveName: item2.Text);
                }
                else
                {
                    cf.SpawnVehicle(vehInfo.model, true, true, false, vehicleInfo: vehInfo, saveName: item2.Text);
                }
            };

            // Handle vehicle deletions
            deleteSavedVehicles.OnItemSelect += (sender2, item2, index2) =>
            {
                var vehDictName = "veh_" + item2.Text;
                new StorageManager().DeleteSavedStorageItem(vehDictName);
                deleteSavedVehicles.GoBack();
            };
            #endregion

            // Add the submenus to the menu pool.
            MainMenu.Mp.Add(spawnSavedVehicles);
            MainMenu.Mp.Add(deleteSavedVehicles);
        }