/// <summary> /// Purchases a parking spot /// </summary> /// <param name="character">Character who is buying</param> /// <param name="vehicle">Vehicle for which the parking spot is being bought for</param> public void PurchasePark(Character character, RPVehicle vehicle) { if (character.ID == vehicle.ownerId) { if (VehicleManager.Instance().IsCharacterInVehicle(character, vehicle)) { if (character.money >= buyParkPrice) { character.SetMoney(character.money - buyParkPrice); VehicleManager.Instance().SetParkingSpotForVehicle(vehicle, vehicle.handle.position, vehicle.handle.rotation); vehicle.UpdateParkPosition(vehicle.handle.position, vehicle.handle.rotation); API.shared.sendNotificationToPlayer(character.owner.client, "Parking spot updated!"); } else { API.shared.sendNotificationToPlayer(character.owner.client, "You don't have enought money to buy a parking spot!"); } } else { API.shared.sendNotificationToPlayer(character.owner.client, "You have to be inside the vehicle to buy a parking spot!"); } } else { API.shared.sendNotificationToPlayer(character.owner.client, "You are not the owner of the vehicle!"); } }
/// <summary> /// Locks/Unlocks the most nearby vehicle if possible /// </summary> /// <param name="client"></param> public void LockVehicle(Client client) { RPVehicle nearest = VehicleManager.Instance().GetNearestVehicle(client.position); if (!PlayerManager.Instance().IsClientUsingCharacter(client)) { return; } if (nearest != null && client.position.DistanceTo(nearest.position) < doorLockDistance) { Character c = PlayerManager.Instance().GetPlayerByClient(client).activeCharacter; Boolean locked = false; if (c.factionID == nearest.factionID && c.onDuty) { locked = true; } else if (c.owner.id == nearest.ownerId) { locked = true; } // check if player has keys to the car if (locked) { nearest.ToggleDoorLock(); this.SendVehicleLockedMessage(client, locked); } } }
public void LockVehicleWithId(Client client, int id) { RPVehicle vehicle = GetVehicleWithId(id); if (vehicle != null && vehicle.spawned) { if (PlayerManager.Instance().IsClientUsingCharacter(client)) { Character character = PlayerManager.Instance().GetActiveCharacterForClient(client); if (vehicle.ownerId == character.ID) { if (vehicle.position.DistanceTo(character.position) < doorLockDistance) { vehicle.ToggleDoorLock(); this.SendVehicleLockedMessage(client, vehicle.locked); } else { API.shared.sendNotificationToPlayer(client, "You need to be closer to the vehicle"); } } } } else { API.shared.sendNotificationToPlayer(client, "Vehicle needs to be active!"); } }
/// <summary> /// Parks a vehicle with selected id /// </summary> /// <param name="c">Client</param> /// <param name="vehicleId">Vehicle id</param> public void ParkVehicle(Client c, int vehicleId) { if (PlayerManager.Instance().IsClientUsingCharacter(c)) { Character character = PlayerManager.Instance().GetActiveCharacterForClient(c); RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null && character.ID == vehicle.ownerId && vehicle.spawned) { if (vehicle.handle == API.shared.getPlayerVehicle(c)) { if (vehicle.position.DistanceTo(vehicle.parkPosition) <= parkDistance) { vehicle.Park(); } else { API.shared.sendNotificationToPlayer(c, "You have to close to the parking spot in order to park the vehicle!"); } } else { API.shared.sendNotificationToPlayer(c, "You need to be in the vehicle you want to park!"); } } } }
/// <summary> /// Loads all vehicles from the database and adds them to the array /// </summary> public void InitializeVehicleManager() { DBManager.SelectQuery("SELECT * FROM vehicles", (MySql.Data.MySqlClient.MySqlDataReader reader) => { RPVehicle v = new RPVehicle(reader.GetInt32(0), reader.GetInt32(1), (FactionEnums)reader.GetInt32(2), (VehicleHash)reader.GetInt32(3), reader.GetFloat(4), reader.GetFloat(5), reader.GetFloat(6), reader.GetFloat(7), reader.GetFloat(8), reader.GetFloat(9), reader.GetInt32(12), reader.GetInt32(13), reader.GetString(10), true); vehicles.Add(v); }).Execute(); }
/// <summary> /// Attempts to purchase a parking spot for a vehicle /// </summary> /// <param name="client">Client</param> public void TryPurchasePark(Character character, int vehicleId) { RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null) { VehicleManager.Instance().PurchasePark(character, vehicle); } }
/// <summary> /// Attempts to purchase a parking spot for a vehicle /// </summary> /// <param name="c">Client</param> public void TryPurchasePark(Client c, int vehicleId) { Character character = PlayerManager.Instance().GetActiveCharacterForClient(c); RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null) { VehicleManager.Instance().PurchasePark(character, vehicle); } }
/// <summary> /// Checks if character is in given vehicle /// </summary> /// <param name="character">Character</param> /// <param name="vehicle">Vehicle</param> /// <returns>True if character is in vehicle, otherwise false</returns> private bool IsCharacterInVehicle(Character character, RPVehicle vehicle) { if (API.shared.isPlayerInAnyVehicle(character.owner.client)) { if (API.shared.getPlayerVehicle(character.owner.client) == vehicle.handle) { return true; } } return false; }
/// <summary> /// Set's new parking spot for vehicle /// </summary> /// <param name="vehicle">Vehicle</param> /// <param name="spot">New spot</param> /// <param name="spotRot">New rotation</param> private void SetParkingSpotForVehicle(RPVehicle vehicle, Vector3 spot, Vector3 spotRot) { DBManager.UpdateQuery("UPDATE vehicles SET park_x=@park_x, park_y=@park_y, park_z=@park_z, park_rot_x=@park_rot_x, park_rot_y=@park_rot_y, park_rot_z=@park_rot_z WHERE id=@id") .AddValue("@park_x", spot.X) .AddValue("@park_y", spot.Y) .AddValue("@park_z", spot.Z) .AddValue("@park_rot_x", spotRot.X) .AddValue("@park_rot_y", spotRot.Y) .AddValue("@park_rot_z", spotRot.Z) .AddValue("@id", vehicle.id) .Execute(); }
/// <summary> /// Gets nearest vehicle /// </summary> /// <param name="position">Position for which to get the nearest vehicle</param> /// <returns>The vehicle</returns> public RPVehicle GetNearestVehicle(Vector3 position) { RPVehicle nearest = vehicles.First(x => x.spawned); // fix float nearestDist = position.DistanceTo(nearest.position); foreach (RPVehicle v in vehicles) { if (v.spawned && position.DistanceTo(v.position) < nearestDist) { nearest = v; } } return(nearest); }
/// <summary> /// Spawns a vehicle for player with certain id /// </summary> /// <param name="client">Character</param> /// <param name="vehicleId">Vehicle id</param> public void SpawnVehicleForCharacter(Character character, int vehicleId) { RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null && character.ID == vehicle.ownerId) { if (!vehicle.spawned) { vehicle.Spawn(); } else { character.SendNotification("This vehicle is already active!"); } } }
/// <summary> /// Spawns a vehicle for player with certain id /// </summary> /// <param name="c">Character</param> /// <param name="vehicleId">Vehicle id</param> public void SpawnVehicleForCharacter(Client c, int vehicleId) { if (PlayerManager.Instance().IsClientUsingCharacter(c)) { Character character = PlayerManager.Instance().GetActiveCharacterForClient(c); RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null && character.ID == vehicle.ownerId) { if (!vehicle.spawned) { vehicle.Spawn(); } else { API.shared.sendNotificationToPlayer(c, "This vehicle is already active!"); } } } }
/// <summary> /// Gets nearest vehicle /// </summary> /// <param name="position">Position for which to get the nearest vehicle</param> /// <returns>The vehicle</returns> public RPVehicle GetNearestVehicle(Vector3 position) { if (vehicles.Count == 0) { return null; } RPVehicle nearest = vehicles.First(x => x.spawned); float nearestDist = position.DistanceTo(nearest.position); foreach (RPVehicle v in vehicles) { if (v.spawned && position.DistanceTo(v.position) < nearestDist) { nearest = v; nearestDist = position.DistanceTo(v.position); } } return nearest; }
/// <summary> /// Parks a vehicle with selected id /// </summary> /// <param name="client">Client</param> /// <param name="vehicleId">Vehicle id</param> public void ParkVehicle(Character character, int vehicleId) { RPVehicle vehicle = VehicleManager.Instance().GetVehicleWithId(vehicleId); if (vehicle != null && character.ID == vehicle.ownerId && vehicle.spawned) { if (vehicle.handle == API.shared.getPlayerVehicle(character.client)) { if (vehicle.position.DistanceTo(vehicle.parkPosition) <= parkDistance) { vehicle.Park(); } else { character.SendNotification("You have to close to the parking spot in order to park the vehicle!"); } } else { character.SendNotification("You have to close to the parking spot in order to park the vehicle!"); } } }
public void LockVehicleWithId(Character character, int id) { RPVehicle vehicle = GetVehicleWithId(id); if (vehicle != null && vehicle.spawned) { if (vehicle.ownerId == character.ID) { if (vehicle.position.DistanceTo(character.position) < doorLockDistance) { vehicle.ToggleDoorLock(); this.SendVehicleLockedMessage(character.client, vehicle.locked); } else { character.SendNotification("You need to be closer to the vehicle"); } } } else { character.SendNotification("Vehicle needs to be active!"); } }
/// <summary> /// Adds a vehicle into the vehicle manager /// </summary> /// <param name="id">Vehicle id</param> /// <param name="ownerId">Vehicle owner id</param> /// <param name="faction">Faction id</param> /// <param name="model">Vehicle model</param> /// <param name="parkX">Vehicle parking X position</param> /// <param name="parkY">Vehicle parking Y position</param> /// <param name="parkZ">Vehicle parking Z position</param> /// <param name="parkRotX">Vehicle parking X rotation</param> /// <param name="parkRotY">Vehicle parking Y rotation</param> /// <param name="parkRotZ">Vehicle parking Z rotation</param> /// <param name="plateText">Vehicle license plate text</param> /// <param name="color1">Vehicle primary color</param> /// <param name="color2">Vehicle secondary color</param> private void AddVehicleToManager(int id, int ownerId, FactionEnums faction, string model, float parkX, float parkY, float parkZ, float parkRotX, float parkRotY, float parkRotZ, string plateText, int color1, int color2) { RPVehicle v = new RPVehicle(id, ownerId, faction, API.shared.vehicleNameToModel(model), parkX, parkY, parkZ, parkRotX, parkRotY, parkRotZ, color1, color2, plateText, false); vehicles.Add(v); }