public static VehicleModel GetParkedVehicleById(int vehicleId) { // Get the vehicle parked with the given identifier ParkedCarModel parkedCar = parkedCars.Where(parkedVehicle => parkedVehicle.vehicle.id == vehicleId).FirstOrDefault(); return(parkedCar?.vehicle); }
private void PlayerParkVehicle(Client player, ParkingModel parking) { // Get vehicle data VehicleModel vehicleModel = new VehicleModel(); { vehicleModel.rotation = player.Vehicle.Rotation; vehicleModel.id = player.Vehicle.GetData(EntityData.VEHICLE_ID); vehicleModel.model = player.Vehicle.GetData(EntityData.VEHICLE_MODEL); vehicleModel.colorType = player.Vehicle.GetData(EntityData.VEHICLE_COLOR_TYPE); vehicleModel.firstColor = player.Vehicle.GetData(EntityData.VEHICLE_FIRST_COLOR); vehicleModel.secondColor = player.Vehicle.GetData(EntityData.VEHICLE_SECOND_COLOR); vehicleModel.pearlescent = player.Vehicle.GetData(EntityData.VEHICLE_PEARLESCENT_COLOR); vehicleModel.faction = player.Vehicle.GetData(EntityData.VEHICLE_FACTION); vehicleModel.plate = player.Vehicle.GetData(EntityData.VEHICLE_PLATE); vehicleModel.owner = player.Vehicle.GetData(EntityData.VEHICLE_OWNER); vehicleModel.price = player.Vehicle.GetData(EntityData.VEHICLE_PRICE); vehicleModel.gas = player.Vehicle.GetData(EntityData.VEHICLE_GAS); vehicleModel.kms = player.Vehicle.GetData(EntityData.VEHICLE_KMS); // Update parking values vehicleModel.position = parking.position; vehicleModel.dimension = Convert.ToUInt32(parking.id); vehicleModel.parking = parking.id; vehicleModel.parked = 0; } // Link vehicle to the parking ParkedCarModel parkedCarModel = new ParkedCarModel(); { parkedCarModel.vehicle = vehicleModel; parkedCarModel.parkingId = parking.id; } // Add the vehicle to the parking parkedCars.Add(parkedCarModel); // Save the vehicle and delete it from the game Vehicle vehicle = player.Vehicle; player.WarpOutOfVehicle(); vehicle.Delete(); Task.Factory.StartNew(() => { NAPI.Task.Run(() => { // Save the vehicle Database.SaveVehicle(vehicleModel); }); }); }
private static ParkedCarModel GetParkedVehicle(int vehicleId) { ParkedCarModel vehicle = null; foreach (ParkedCarModel parkedCar in parkedCars) { if (parkedCar.vehicle.id == vehicleId) { vehicle = parkedCar; break; } } return(vehicle); }
private void PlayerParkVehicle(Client player, ParkingModel parking) { NetHandle vehicle = NAPI.Player.GetPlayerVehicle(player); // Get vehicle's colors Color primaryColor = NAPI.Vehicle.GetVehicleCustomPrimaryColor(vehicle); Color secondaryColor = NAPI.Vehicle.GetVehicleCustomSecondaryColor(vehicle); // Get vehicle data VehicleModel vehicleModel = new VehicleModel(); vehicleModel.rotation = NAPI.Entity.GetEntityRotation(vehicle); vehicleModel.id = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_ID); vehicleModel.model = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_MODEL); vehicleModel.colorType = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_COLOR_TYPE); vehicleModel.firstColor = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_FIRST_COLOR); vehicleModel.secondColor = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_SECOND_COLOR); vehicleModel.pearlescent = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PEARLESCENT_COLOR); vehicleModel.faction = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_FACTION); vehicleModel.plate = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PLATE); vehicleModel.owner = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_OWNER); vehicleModel.price = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PRICE); vehicleModel.gas = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_GAS); vehicleModel.kms = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_KMS); // Update parking values vehicleModel.position = parking.position; vehicleModel.dimension = Convert.ToUInt32(parking.id); vehicleModel.parking = parking.id; vehicleModel.parked = 0; // Link vehicle to the parking ParkedCarModel parkedCarModel = new ParkedCarModel(); parkedCarModel.vehicle = vehicleModel; parkedCarModel.parkingId = parking.id; parkedCars.Add(parkedCarModel); // Save the vehicle and delete it from the game NAPI.Player.WarpPlayerOutOfVehicle(player); NAPI.Entity.DeleteEntity(vehicle); Task.Factory.StartNew(() => { // Save the vehicle Database.SaveVehicle(vehicleModel); }); }
private void PlayerParkVehicle(Client player, ParkingModel parking) { // Obtenemos el vehículo NetHandle vehicle = NAPI.Player.GetPlayerVehicle(player); // Obtenemos los colores del vehículo Color primaryColor = NAPI.Vehicle.GetVehicleCustomPrimaryColor(vehicle); Color secondaryColor = NAPI.Vehicle.GetVehicleCustomSecondaryColor(vehicle); // Obtenemos los datos del vehículo VehicleModel vehicleModel = new VehicleModel(); vehicleModel.rotation = NAPI.Entity.GetEntityRotation(vehicle); vehicleModel.id = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_ID); vehicleModel.model = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_MODEL); vehicleModel.colorType = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_COLOR_TYPE); vehicleModel.firstColor = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_FIRST_COLOR); vehicleModel.secondColor = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_SECOND_COLOR); vehicleModel.pearlescent = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PEARLESCENT_COLOR); vehicleModel.faction = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_FACTION); vehicleModel.plate = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PLATE); vehicleModel.owner = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_OWNER); vehicleModel.price = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_PRICE); vehicleModel.gas = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_GAS); vehicleModel.kms = NAPI.Data.GetEntityData(vehicle, EntityData.VEHICLE_KMS); // Actualizamos los valores del parking vehicleModel.position = parking.position; vehicleModel.dimension = Convert.ToUInt32(parking.id); vehicleModel.parking = parking.id; vehicleModel.parked = 0; // Añadimos el vehículo al parking ParkedCarModel parkedCarModel = new ParkedCarModel(); parkedCarModel.vehicle = vehicleModel; parkedCarModel.parkingId = parking.id; parkedCars.Add(parkedCarModel); // Guardamos el vehículo Database.SaveVehicle(vehicleModel); // Eliminamos el vehículo NAPI.Player.WarpPlayerOutOfVehicle(player); NAPI.Entity.DeleteEntity(vehicle); }
public void UnparkCommand(Client player, int vehicleId) { VehicleModel vehicle = Vehicles.GetParkedVehicleById(vehicleId); if (vehicle == null) { // There's no vehicle with that identifier NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_VEHICLE_NOT_EXISTS); } else if (Vehicles.HasPlayerVehicleKeys(player, vehicle) == false) { NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_NOT_CAR_KEYS); } else { foreach (ParkingModel parking in parkingList) { if (player.Position.DistanceTo(parking.position) < 2.5f) { // Check whether the vehicle is in this parking if (parking.id == vehicle.parking) { int playerMoney = NAPI.Data.GetEntitySharedData(player, EntityData.PLAYER_MONEY); switch (parking.type) { case Constants.PARKING_TYPE_PUBLIC: break; case Constants.PARKING_TYPE_SCRAPYARD: break; case Constants.PARKING_TYPE_DEPOSIT: // Remove player's money if (playerMoney >= Constants.PRICE_PARKING_DEPOSIT) { NAPI.Data.SetEntitySharedData(player, EntityData.PLAYER_MONEY, playerMoney - Constants.PRICE_PARKING_DEPOSIT); String message = String.Format(Messages.INF_UNPARK_MONEY, Constants.PRICE_PARKING_DEPOSIT); NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_INFO + message); } else { String message = String.Format(Messages.ERR_PARKING_NOT_MONEY, Constants.PRICE_PARKING_DEPOSIT); NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + message); return; } break; } // Get parked vehicle model ParkedCarModel parkedCar = GetParkedVehicle(vehicleId); // Recreate the vehicle Vehicle newVehicle = NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel(vehicle.model), parking.position, vehicle.rotation.Z, new Color(0, 0, 0), new Color(0, 0, 0)); NAPI.Vehicle.SetVehicleNumberPlate(newVehicle, vehicle.plate == String.Empty ? "LS " + (1000 + vehicle.id) : vehicle.plate); NAPI.Vehicle.SetVehicleEngineStatus(newVehicle, false); NAPI.Vehicle.SetVehicleLocked(newVehicle, false); if (vehicle.colorType == Constants.VEHICLE_COLOR_TYPE_PREDEFINED) { NAPI.Vehicle.SetVehiclePrimaryColor(newVehicle, Int32.Parse(vehicle.firstColor)); NAPI.Vehicle.SetVehicleSecondaryColor(newVehicle, Int32.Parse(vehicle.secondColor)); NAPI.Vehicle.SetVehiclePearlescentColor(newVehicle, vehicle.pearlescent); } else { String[] firstColor = vehicle.firstColor.Split(','); String[] secondColor = vehicle.secondColor.Split(','); NAPI.Vehicle.SetVehicleCustomPrimaryColor(newVehicle, Int32.Parse(firstColor[0]), Int32.Parse(firstColor[1]), Int32.Parse(firstColor[2])); NAPI.Vehicle.SetVehicleCustomSecondaryColor(newVehicle, Int32.Parse(secondColor[0]), Int32.Parse(secondColor[1]), Int32.Parse(secondColor[2])); } NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_ID, vehicle.id); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_MODEL, vehicle.model); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_POSITION, parking.position); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_ROTATION, vehicle.rotation); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_COLOR_TYPE, vehicle.colorType); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_FIRST_COLOR, vehicle.firstColor); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_SECOND_COLOR, vehicle.secondColor); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PEARLESCENT_COLOR, vehicle.pearlescent); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_FACTION, vehicle.faction); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PLATE, vehicle.plate); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_OWNER, vehicle.owner); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PRICE, vehicle.price); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_GAS, vehicle.gas); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_KMS, vehicle.kms); // Update parking values NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_DIMENSION, 0); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PARKING, 0); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PARKED, 0); // Add tunning Mechanic.AddTunningToVehicle(newVehicle); // Unlink from the parking parkedCars.Remove(parkedCar); return; } // The vehicle is not in this parking NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_VEHICLE_NOT_THIS_PARKING); return; } } // Player's not in any parking NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_NOT_PARKING_NEAR); } }
public void UnparkCommand(Client player, int vehicleId) { VehicleModel vehicle = Vehicles.GetParkedVehicleById(vehicleId); if (vehicle == null) { // There's no vehicle with that identifier player.SendChatMessage(Constants.COLOR_ERROR + ErrRes.vehicle_not_exists); } else if (Vehicles.HasPlayerVehicleKeys(player, vehicle) == false) { player.SendChatMessage(Constants.COLOR_ERROR + ErrRes.not_car_keys); } else { // Get the closest parking ParkingModel parking = parkingList.Where(p => player.Position.DistanceTo(p.position) < 2.5f).FirstOrDefault(); if (parking == null) { // Player's not in any parking player.SendChatMessage(Constants.COLOR_ERROR + ErrRes.not_parking_near); return; } // Check whether the vehicle is in this parking if (parking.id != vehicle.parking) { // The vehicle is not in this parking player.SendChatMessage(Constants.COLOR_ERROR + ErrRes.vehicle_not_this_parking); return; } int playerMoney = player.GetSharedData(EntityData.PLAYER_MONEY); switch (parking.type) { case Constants.PARKING_TYPE_PUBLIC: break; case Constants.PARKING_TYPE_SCRAPYARD: break; case Constants.PARKING_TYPE_DEPOSIT: // Remove player's money if (playerMoney >= Constants.PRICE_PARKING_DEPOSIT) { player.SetSharedData(EntityData.PLAYER_MONEY, playerMoney - Constants.PRICE_PARKING_DEPOSIT); string message = string.Format(InfoRes.unpark_money, Constants.PRICE_PARKING_DEPOSIT); player.SendChatMessage(Constants.COLOR_INFO + message); } else { string message = string.Format(ErrRes.parking_not_money, Constants.PRICE_PARKING_DEPOSIT); player.SendChatMessage(Constants.COLOR_ERROR + message); return; } break; } // Get parked vehicle model ParkedCarModel parkedCar = GetParkedVehicle(vehicleId); // Recreate the vehicle Vehicle newVehicle = Vehicles.CreateIngameVehicle(vehicle); // Update parking values newVehicle.SetData(EntityData.VEHICLE_DIMENSION, 0); newVehicle.SetData(EntityData.VEHICLE_PARKING, 0); newVehicle.SetData(EntityData.VEHICLE_PARKED, 0); // Unlink from the parking parkedCars.Remove(parkedCar); } }
public void DesaparcarCommand(Client player, int vehicleId) { // Buscamos el vehículo VehicleModel vehicle = Vehicles.GetParkedVehicleById(vehicleId); if (vehicle == null) { // No existe ningún vehículo con ese identificador NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_VEHICLE_NOT_EXISTS); } else if (Vehicles.HasPlayerVehicleKeys(player, vehicle) == false) { NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_NOT_CAR_KEYS); } else { foreach (ParkingModel parking in parkingList) { if (player.Position.DistanceTo(parking.position) < 2.5f) { // Miramos si el vehículo está en el parking if (parking.id == vehicle.parking) { // Obtenemos el dinero del jugador int playerMoney = NAPI.Data.GetEntitySharedData(player, EntityData.PLAYER_MONEY); // Miramos el tipo de parking switch (parking.type) { case Constants.PARKING_TYPE_PUBLIC: break; case Constants.PARKING_TYPE_SCRAPYARD: break; case Constants.PARKING_TYPE_DEPOSIT: // Cobramos el dinero por sacarlo del depósito del LSPD if (playerMoney >= Constants.PRICE_PARKING_DEPOSIT) { // Restamos el dinero del jugador NAPI.Data.SetEntitySharedData(player, EntityData.PLAYER_MONEY, playerMoney - Constants.PRICE_PARKING_DEPOSIT); // Enviamos el mensaje al jugador String message = String.Format(Messages.INF_UNPARK_MONEY, Constants.PRICE_PARKING_DEPOSIT); NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_INFO + message); } else { String message = String.Format(Messages.ERR_PARKING_NOT_MONEY, Constants.PRICE_PARKING_DEPOSIT); NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + message); return; } break; } // Obtenemos el modelo de vehículo aparcado ParkedCarModel parkedCar = GetParkedVehicle(vehicleId); // Recreamos el vehículo Vehicle newVehicle = NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel(vehicle.model), parking.position, vehicle.rotation.Z, new Color(0, 0, 0), new Color(0, 0, 0)); NAPI.Vehicle.SetVehicleNumberPlate(newVehicle, vehicle.plate == String.Empty ? "LS " + (1000 + vehicle.id) : vehicle.plate); NAPI.Vehicle.SetVehicleEngineStatus(newVehicle, false); NAPI.Vehicle.SetVehicleLocked(newVehicle, false); // Añadimos el color if (vehicle.colorType == Constants.VEHICLE_COLOR_TYPE_PREDEFINED) { NAPI.Vehicle.SetVehiclePrimaryColor(newVehicle, Int32.Parse(vehicle.firstColor)); NAPI.Vehicle.SetVehicleSecondaryColor(newVehicle, Int32.Parse(vehicle.secondColor)); NAPI.Vehicle.SetVehiclePearlescentColor(newVehicle, vehicle.pearlescent); } else { String[] firstColor = vehicle.firstColor.Split(','); String[] secondColor = vehicle.secondColor.Split(','); NAPI.Vehicle.SetVehicleCustomPrimaryColor(newVehicle, Int32.Parse(firstColor[0]), Int32.Parse(firstColor[1]), Int32.Parse(firstColor[2])); NAPI.Vehicle.SetVehicleCustomSecondaryColor(newVehicle, Int32.Parse(secondColor[0]), Int32.Parse(secondColor[1]), Int32.Parse(secondColor[2])); } NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_ID, vehicle.id); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_MODEL, vehicle.model); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_POSITION, parking.position); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_ROTATION, vehicle.rotation); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_COLOR_TYPE, vehicle.colorType); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_FIRST_COLOR, vehicle.firstColor); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_SECOND_COLOR, vehicle.secondColor); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PEARLESCENT_COLOR, vehicle.pearlescent); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_FACTION, vehicle.faction); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PLATE, vehicle.plate); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_OWNER, vehicle.owner); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PRICE, vehicle.price); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_GAS, vehicle.gas); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_KMS, vehicle.kms); // Actualizamos los valores del parking NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_DIMENSION, 0); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PARKING, 0); NAPI.Data.SetEntityData(newVehicle, EntityData.VEHICLE_PARKED, 0); // Añadimos el tunning Mechanic.AddTunningToVehicle(newVehicle); // Eliminamos el vehículo del parking parkedCars.Remove(parkedCar); return; } // Avisamos de que el vehículo no está aparcado NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_VEHICLE_NOT_THIS_PARKING); return; } } // Avisamos de que no está en ningún parking NAPI.Chat.SendChatMessageToPlayer(player, Constants.COLOR_ERROR + Messages.ERR_NOT_PARKING_NEAR); } }