using System; using System.Dynamic; using System.Linq; using CitizenFX.Core; using static CitizenFX.Core.Native.API; using Nexd.ESX.Client; namespace CardealerClient.Menus { public class SellMenu { public static async void Open() { string plate = ESX.Game.GetVehicleProperties(new Vehicle(GetVehiclePedIsIn(GetPlayerPed(-1), false))).plate; bool owned = await CarDealer.ServerCallback("cardealer:checkOwner", plate); if (owned) { int vehicle = GetVehiclePedIsIn(GetPlayerPed(-1), true); int vehicleClass = GetVehicleClass(vehicle); if (Config.ForbittenVehicleClasses.Contains(vehicleClass)) { CarDealer.Notify("Du kannst dieses Fahrzeug nicht verkaufen.", "error"); return; } FreezeEntityPosition(vehicle, true); CarDealer.MenuOpen = true; ESX.UI.Menu.CloseAll(); dynamic menuData = new ExpandoObject(); SellData sellData = new SellData(); menuData.title = Config.MenuTitle; menuData.align = "top-left"; menuData.elements = new dynamic[4]; menuData.elements[0] = MenuElements.GetElement_Parkingspace(); menuData.elements[1] = MenuElements.GetElement_Description(); menuData.elements[2] = MenuElements.GetElement_Price(); menuData.elements[3] = MenuElements.GetElement_Finish(); ESX.UI.Menu.Raw.Open("default", GetCurrentResourceName(), "cardealer_menu", menuData, new Action(async (data, menu) => { if (data.current.name == "choose_description") { sellData.Description = await CarDealer.DisplayTextDialog("Beschreibung hinzufügen", 60); } if (data.current.name == "choose_price") { sellData.Price = Convert.ToInt32(await CarDealer.DisplayTextDialog("Preis", 7)); } if (data.current.name == "finish") { sellData.ParkingSpace = data.elements[0].value; if (sellData.Price == 0) CarDealer.SendNotification("~r~Lege zuerst einen Preis fest!"); else if (sellData.Price < Config.MinSellPrice) CarDealer.SendNotification("~r~Dein Auto muss mindestens ~s~$" + Config.MinSellPrice + " ~r~kosten!"); else { ESX.UI.Menu.Close(new ESX.UI.Menu(menu)); if (sellData.ParkingSpace == 0) { bool money = await CarDealer.ServerCallback("cardealer:checkMoney", Config.ExhibitPrice); if (!money) { CarDealer.Notify("Du hast nicht genug Geld!", "error"); CarDealer.MenuOpen = false; FreezeEntityPosition(vehicle, false); return; } } SetVehicleEngineHealth(vehicle, 1000); SetVehicleEngineOn(vehicle, false, false, true); SetVehicleFixed(vehicle); SetVehicleDirtLevel(vehicle, 0); VehicleProperties props = ESX.Game.GetVehicleProperties(vehicle); props.plate = GetVehicleNumberPlateText(vehicle); if (sellData.ParkingSpace == 0) sellData.Slot = 1; BaseScript.TriggerServerEvent("esx_vehicleshop:deleteVehicle", props.plate); bool success = await CarDealer.ServerCallback("cardealer:saveVehicle", sellData.CreateDynamic(props.Raw)) || sellData.ParkingSpace == 1; ESX.Game.DeleteVehicle(GetVehiclePedIsIn(GetPlayerPed(-1), true).ToString()); CarDealer.MenuOpen = false; if (success) CarDealer.Notify("Auto ausgestellt!", "success"); else CarDealer.Notify("Alle Stellplätze sind belegt, Dein Auto kommt in den Katalog, bis ein Stellplatz frei wird", "error"); } } }), new Action((o, o1) => { ESX.UI.Menu.Close(new ESX.UI.Menu(o1)); CarDealer.MenuOpen = false; FreezeEntityPosition(vehicle, false); }) ); } else { CarDealer.Notify("Dieses Auto gehört dir nicht!", "error"); } } } }