示例#1
0
        /// <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!");
            }
        }
示例#2
0
        /// <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);
                }
            }

        }
示例#3
0
        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!");
            }
        }
示例#4
0
 /// <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!");
             }
         }
     }
 }
示例#5
0
 /// <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();
 }
示例#6
0
        /// <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);
            }

        }
示例#7
0
        /// <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);
            }
        }
示例#8
0
 /// <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;
 }
示例#9
0
 /// <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();
 }
示例#10
0
        /// <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);
        }
示例#11
0
        /// <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!");
                }
            }

        }
示例#12
0
 /// <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!");
             }
         }
     }
 }
示例#13
0
        /// <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;
        }
示例#14
0
 /// <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!");
         }
     }
 }
示例#15
0
        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!");
            }
        }
示例#16
0
 /// <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);
 }