Archived
Private
Public Access
1
0
This repository has been archived on 2026-02-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
ProjectBackup/C#/FiveM/CardealerClient/Exhibits/ExhibitCar.cs
2022-09-04 12:45:01 +02:00

146 lines
6.2 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using CitizenFX.Core;
using static CitizenFX.Core.Native.API;
using Nexd.ESX.Client;
namespace CardealerClient.Exhibits {
public class ExhibitCar {
public int Vehicle { get; set; }
public Exhibit Exhibit { get; set; }
public VehicleData Data { get; set; }
public bool TestDrive { get; set; }
public ExhibitCar(dynamic data) {
Vehicle = 0;
Exhibit = Config.CarSlots[0];
Data = new VehicleData(data);
TestDrive = false;
}
public ExhibitCar() {}
public ExhibitCar(Exhibit exhibit, VehicleData data) {
Vehicle = 0;
Exhibit = exhibit;
Data = data;
TestDrive = false;
}
public async void Spawn() {
int vehicle = await CarDealer.SpawnVehicle(Convert.ToInt32(Data.Properties.Raw.model), Config.ToVector(Exhibit.Location), Exhibit.Location.W, true);
Vehicle veh = new Vehicle(vehicle);
ESX.Game.SetVehicleProperties(veh, Data.Properties);
SetVehicleNumberPlateText(vehicle, Data.Properties.plate);
SetEntityInvincible(vehicle, true);
SetVehicleDoorsLocked(vehicle, 2);
FreezeEntityPosition(vehicle, true);
SetVehicleOnGroundProperly(vehicle);
BaseScript.TriggerServerEvent("ls:mainCheck", Data.Properties.plate, vehicle, true);
/*CarDealer.RealExhibitCars[Exhibit.Slot] = new ExhibitCar()
{ Vehicle = vehicle, Exhibit = Exhibit, Data = Data, TestDrive = TestDrive };*/
Vehicle = vehicle;
BaseScript.TriggerEvent("cardealer:getCarName", Data.Properties.Raw.model, new Action<dynamic>((name => {
CarDealer.CarNames[Exhibit.Slot] = Convert.ToString(name);
})));
}
public void Despawn() {
ESX.Game.DeleteVehicle(Vehicle.ToString());
CarDealer.RealExhibitCars[Exhibit.Slot] = null;
CarDealer.SlotReady[Exhibit.Slot] = false;
}
public async void StartTestDrive() {
BaseScript.TriggerServerEvent("cardealer:testDrive", Exhibit.Slot, true);
Vector3 lastPosition = GetEntityCoords(GetPlayerPed(-1), IsDecalAlive(GetPlayerPed(-1)));
Vector3 spawnCoords = Config.ToVector(Config.TestDriveLocation);
bool testDrive = true;
int vehicle = await CarDealer.SpawnVehicle(Data.Properties.Raw.model, spawnCoords, Config.TestDriveLocation.W);
ESX.Game.SetVehicleProperties(new Vehicle(vehicle), Data.Properties);
SetVehicleOnGroundProperly(vehicle);
SetVehicleEngineHealth(vehicle, 1000);
SetVehicleFixed(vehicle);
SetVehicleDirtLevel(vehicle, 0);
SetVehicleDoorsLocked(vehicle, 1);
TaskWarpPedIntoVehicle(GetPlayerPed(-1), vehicle, -1);
SetPlayerCanDoDriveBy(PlayerId(), false);
BaseScript.TriggerEvent("craftix:refuelVehicle", vehicle);
BaseScript.TriggerEvent("crafix:dontCheckVehicle", vehicle);
Func<Task> handler = async () => {
if (!testDrive) return;
if (IsControlJustReleased(0, 75)) {
testDrive = false;
SetPlayerCanDoDriveBy(PlayerId(), true);
ESX.Game.DeleteVehicle(vehicle.ToString());
SetEntityCoords(GetPlayerPed(-1), lastPosition.X, lastPosition.Y, lastPosition.Z, true, false, false, false);
BaseScript.TriggerServerEvent("cardealer:testDrive", Exhibit.Slot, false);
}
};
CarDealer.AddTickHandler(handler);
await BaseScript.Delay(Config.TestDriveTime);
CarDealer.RemoveTickHandler(handler);
if (testDrive) {
testDrive = false;
SetPlayerCanDoDriveBy(PlayerId(), true);
ESX.Game.DeleteVehicle(vehicle.ToString());
SetEntityCoords(GetPlayerPed(-1), lastPosition.X, lastPosition.Y, lastPosition.Z, true, false, false, false);
BaseScript.TriggerServerEvent("cardealer:testDrive", Exhibit.Slot, false);
}
}
public void SetTestDrive(bool value) {
TestDrive = value;
if (TestDrive && Vehicle != 0)
ESX.Game.DeleteVehicle(Vehicle.ToString());
else if (!TestDrive)
Spawn();
CarDealer.SlotReady[Exhibit.Slot] = true;
}
public async void Buy() {
if (!await CarDealer.DisplayConfirmationDialog("Möchtest du dieses Fahrzeug wirklich kaufen?")) return;
bool permitted = await CarDealer.ServerCallback("cardealer:checkMoney", Data.Price);
if (!permitted) {
CarDealer.Notify("Du hast nicht genügend Geld!", "error");
return;
}
BaseScript.TriggerServerEvent("cardealer:transaction", Data.Owner, Data.Price);
Data.Delete();
int vehicle = await CarDealer.SpawnVehicle(Data.Properties.Raw.model, Config.ToVector(Config.SpawnLocation), Config.SpawnLocation.W);
ESX.Game.SetVehicleProperties(new Vehicle(vehicle), Data.Properties);
SetVehicleNumberPlateText(vehicle, Data.Properties.plate);
SetVehicleEngineHealth(vehicle, 1000);
SetVehicleFixed(vehicle);
SetVehicleDirtLevel(vehicle, 0);
TaskWarpPedIntoVehicle(GetPlayerPed(-1), vehicle, -1);
BaseScript.TriggerEvent("craftix:refuelVehicle", vehicle);
BaseScript.TriggerServerEvent("esx_vehicleshop:setVehicleOwned", ESX.Game.Raw.GetVehicleProperties(vehicle));
}
public static void RepairVehicles() {
foreach (var car in CarDealer.RealExhibitCars) {
if (car is null || car.TestDrive) continue;
int vehicle = car.Vehicle;
SetVehicleEngineHealth(vehicle, 1000);
SetVehicleEngineOn(vehicle, false, false, true);
SetVehicleFixed(vehicle);
SetVehicleDirtLevel(vehicle, 0);
}
}
}
}