using GTANetworkAPI; using ReallifeGamemode.Database.Entities; using ReallifeGamemode.Server.Job; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; namespace ReallifeGamemode.Server.Extensions { public static class ServerVehicleExtensions { public static JobBase GetJob(this JobVehicle vehicle) { return JobManager.GetJob(vehicle.JobId); } public static Vehicle GetVehicle(this ServerVehicle veh) => VehicleManager.GetVehicleFromServerVehicle(veh); public static Vehicle Spawn(this ServerVehicle veh, Vehicle currentVeh) { if (currentVeh == null) { currentVeh = VehicleManager.GetVehicleFromServerVehicle(veh); } if(currentVeh != null) { VehicleManager.DeleteVehicle(currentVeh); } Vector3 position = veh.Position; uint model = (uint)veh.Model; float heading = veh.Heading; int c1 = veh.PrimaryColor; int c2 = veh.SecondaryColor; Vehicle newVeh = NAPI.Vehicle.CreateVehicle(model, position, heading, c1, c2, "", 255, false, false); veh.Livery = veh.Livery; VehicleStreaming.SetEngineState(newVeh, false); VehicleStreaming.SetLockStatus(newVeh, veh.Locked); VehicleManager.AddVehicle(veh, newVeh); newVeh.Rotation = new Vector3(0, 0, heading); newVeh.SetSharedData("drivenDistance", veh.DistanceDriven); string numberplate = $"{veh.Id}"; if (veh is ShopVehicle sV) { numberplate = "Shop"; VehicleStreaming.SetLockStatus(newVeh, false); TextLabel label = NAPI.TextLabel.CreateTextLabel("SHOPVEHICLE\n" + "~g~" + sV.Price.ToMoneyString(), veh.Position.Add(new Vector3(0, 0, 1.3)), 20.0f, 1f, 1, new Color(255, 255, 255)); newVeh.SetSharedData("shopVehicleTextLabel", label.Handle.Value); } NAPI.Vehicle.SetVehicleNumberPlate(newVeh, numberplate); veh.NumberPlate = numberplate; TuningManager.ApplyTuningToServerVehicle(veh); return newVeh; } } }