102 lines
5.2 KiB
C#
102 lines
5.2 KiB
C#
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<dynamic, dynamic>(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<dynamic, dynamic>((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");
|
|
}
|
|
}
|
|
|
|
}
|
|
} |