using GTANetworkAPI; using ReallifeGamemode.Server.Extensions; using ReallifeGamemode.Server.Managers; using ReallifeGamemode.Server.Util; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace ReallifeGamemode.Server.Entities { public abstract class ServerVehicle { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public VehicleHash Model { get; set; } public float PositionX { get; set; } public float PositionY { get; set; } public float PositionZ { get; set; } public float Heading { get; set; } [StringLength(8)] public string NumberPlate { get; set; } public int PrimaryColor { get; set; } public int SecondaryColor { get; set; } public bool Locked { get; set; } public bool Active { get; set; } public float DistanceDriven { get; set; } public float TankAmount { get; set; } [NotMapped] public Vector3 Position => new Vector3(PositionX, PositionY, PositionZ); [NotMapped] public Vehicle Vehicle => VehicleManager.GetVehicleFromServerVehicle(this); public Vehicle Spawn(Vehicle currentVeh = null) { if (currentVeh != null) VehicleManager.DeleteVehicle(currentVeh); Vector3 position = this.Position; uint model = (uint)this.Model; float heading = this.Heading; int c1 = this.PrimaryColor; int c2 = this.SecondaryColor; string np = this.NumberPlate; Vehicle veh = NAPI.Vehicle.CreateVehicle(Model, position, heading, c1, c2, "", 255, false, false); VehicleStreaming.SetEngineState(veh, false); VehicleStreaming.SetLockStatus(veh, this.Locked); VehicleManager.AddVehicle(this, veh); veh.SetSharedData("drivenDistance", this.DistanceDriven); string numberplate = $"{this.Id}"; if (this is FactionVehicle fV) { numberplate = $"F{fV.FactionId} " + numberplate; } if (this is UserVehicle uV) { numberplate = $"U{uV.UserId} " + numberplate; } if (this is ShopVehicle sV) { numberplate = "Shop"; VehicleStreaming.SetLockStatus(veh, false); TextLabel label = NAPI.TextLabel.CreateTextLabel("SHOPVEHICLE\n" + "~g~" + sV.Price.ToMoneyString(), veh.Position.Add(new Vector3(0, 0, 1.3)), 10.0f, 1f, 1, new Color(255, 255, 255)); veh.SetSharedData("shopVehicleTextLabel", label.Handle.Value); } if (this is GroupVehicle gV) { numberplate = $"G{gV.GroupId} " + numberplate; } if(this is JobVehicle jV) { numberplate = $"J{jV.JobId} " + numberplate; } veh.NumberPlate = numberplate; return veh; } public abstract override string ToString(); } }