Exemplo n.º 1
0
        /// <summary>
        /// Parkuje pojazd na podanych koordynatach.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="vehData"></param>
        /// <param name="position"></param>
        /// <param name="rotation"></param>
        /// <param name="dimension"></param>
        public static void ParkVehicle(Client player, Vehicle vehData, Vector3 position,
                                       Vector3 rotation, int dimension)
        {
            if (vehData == null)
            {
                return;
            }
            if (!DoesParkPlaceFree(position, dimension))
            {
                if (player != null)
                {
                    Ui.ShowWarning(player, "To miejsce parkingowe jest już zajęte.");
                }
                return;
            }

            vehData.Dimension = dimension;
            vehData.X         = position.X;
            vehData.Y         = position.Y;
            vehData.Z         = position.Z;
            vehData.Rx        = rotation.X;
            vehData.Ry        = rotation.Y;
            vehData.Rz        = rotation.Z;
            vehData.Save();

            if (player != null)
            {
                Ui.ShowInfo(player, $"Pojazd {GetVehicleFormattedName(vehData)} został zaparkowany.");
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Wykonuje się w momencie zaakceptowania oferty.
        /// </summary>
        /// <param name="offerId"></param>
        /// <param name="payType"></param>
        private static void OnOfferAccept(int offerId, OfferPayType payType)
        {
            Offer offerData = GetOfferData(offerId);

            if (offerData == null)
            {
                return;
            }

            if (!offerData.SystemOffer && !NAPI.Entity.DoesEntityExist(offerData.Player) ||
                !NAPI.Entity.DoesEntityExist(offerData.Target))
            {
                offerData.Destroy("Jeden z graczy nie jest zalogowany.");
                return;
            }

            Character charData   = Account.GetPlayerData(offerData.Player);
            Character targetData = Account.GetPlayerData(offerData.Target);

            if (!offerData.SystemOffer && charData == null || targetData == null)
            {
                offerData.Destroy("Jeden z graczy nie jest zalogowany.");
                return;
            }

            if (payType == OfferPayType.Cash && targetData.Cash < offerData.Price)
            {
                offerData.Destroy("Kupujący nie ma odpowiedniej ilości gotówki przy sobie.");
                return;
            }

            if (payType == OfferPayType.Card && targetData.AccountBalance < offerData.Price)
            {
                offerData.Destroy("Kupujący nie ma na koncie bankowym odpowiedniej ilości gotówki.");
                return;
            }

            // Akcje ofert

            if (offerData.Type == OfferType.SellItem)
            {
                if (Global.GetDistanceBetweenPositions(offerData.Player.Position, offerData.Target.Position) > 3.0 ||
                    offerData.Player.Dimension != offerData.Target.Dimension)
                {
                    offerData.Destroy("Zbyt daleko od celu.");
                    return;
                }

                ItemEntity itemData = ItemsManager.Items.FirstOrDefault(t => t.Id == (int)offerData.Data["Id"]);

                if (itemData == null)
                {
                    offerData.Destroy("Przedmiot nie został znaleziony.");
                    return;
                }

                if (itemData.Used)
                {
                    offerData.Destroy("Przedmiot nie może być używany.");
                    return;
                }

                if (offerData.Price == 0 || PayForOffer(charData, targetData, payType, (int)offerData.Price))
                {
                    itemData.SetOwner(OwnerType.Player, targetData.Id);

                    Chat.Library.SendPlayerMeMessage(charData,
                                                     $"podaje przedmiot \"{itemData.Name}\" graczowi {Player.GetPlayerIcName(targetData)}", true);
                    offerData.Success();
                    return;
                }
            }
            else if (offerData.Type == OfferType.Rp)
            {
                if (offerData.Price == 0 || PayForOffer(charData, targetData, payType, (int)offerData.Price))
                {
                    offerData.Success();
                    return;
                }
            }
            else if (offerData.Type == OfferType.RegisterVehicle)
            {
                Vehicle vehData = Vehicles.Library.GetVehicleData((int)offerData.Data["Id"]);
                if (vehData == null)
                {
                    offerData.Destroy("Wystąpił błąd w trakcie pobierania danych pojazdu.");
                    return;
                }

                if (offerData.Price == 0 || PayForOffer(charData, targetData, payType, (int)offerData.Price))
                {
                    vehData.NumberPlate = Vehicles.Library.GeneratePlate();
                    vehData.Save();
                    if (vehData.Spawned && NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                    {
                        vehData.VehicleHandle.NumberPlate = vehData.NumberPlate;
                    }
                    // TODO: akcje z botem

                    offerData.Success();
                    return;
                }
            }
            else if (offerData.Type == OfferType.SellCar)
            {
                Vehicle vehData = Vehicles.Library.GetVehicleData((int)offerData.Data["Id"]);
                if (vehData == null)
                {
                    offerData.Destroy("Pojazd nie został odnaleziony.");
                    return;
                }

                if (offerData.Price == 0 || PayForOffer(charData, targetData, payType, (int)offerData.Price))
                {
                    vehData.OwnerType = Vehicles.OwnerType.Player;
                    vehData.Owner     = targetData.Id;
                    vehData.Save();
                    Chat.Library.SendPlayerMeMessage(charData,
                                                     $"podaje klucze do pojazdu graczowi {Player.GetPlayerIcName(targetData)}.", true);

                    offerData.Success();
                    return;
                }
            }
            else if (offerData.Type == OfferType.Heal)
            {
                if (offerData.Price == 0 || PayForOffer(charData, targetData, payType, (int)offerData.Price))
                {
                    targetData.Health = 100;
                    targetData.PlayerHandle.Health = 100;

                    offerData.Success();
                    return;
                }
            }
            else if (offerData.Type == OfferType.PdFine)
            {
                // todo
            }
            else if (offerData.Type == OfferType.Fuel)
            {
                // todo
            }
            else if (offerData.Type == OfferType.GroupGive)
            {
                using (Database.Database db = new Database.Database())
                {
                    // todo
                }
            }
            else if (offerData.Type == OfferType.BincoCloth)
            {
                if (offerData.Price == 0 || PayForOffer(null, targetData, payType, (int)offerData.Price))
                {
                    using (Database.Database db = new Database.Database())
                    {
                        db.ClothSets.Add((ClothSet)offerData.Data["clothSet"]);
                        db.SaveChanges();

                        Player.SendFormattedChatMessage(targetData.PlayerHandle,
                                                        "Ubranie zostało zapisane. Możesz je zmienić używając komendy /przebierz.",
                                                        Constants.ColorPictonBlue);

                        offerData.Success();
                    }
                }
            }
            else if (offerData.Type == OfferType.GasStation)
            {
                Vehicle vehData = Vehicles.Library.GetVehicleData((GTANetworkAPI.Vehicle)offerData.Data["vehicle"]);
                if (vehData != null)
                {
                    if (offerData.Price == 0 || PayForOffer(null, targetData, payType, (int)offerData.Price))
                    {
                        vehData.Fuel += Command.GetNumberFromString(offerData.Data["fuel"].ToString());
                        vehData.Save();

                        Chat.Library.SendPlayerMeMessage(targetData,
                                                         $"wkłada wąż do baku i tankuje auto \"{vehData.Name}\".", true);

                        offerData.Success();
                    }
                }
            }
            else if (offerData.Type == OfferType.Repair)
            {
                Vehicle vehData = (Vehicle)offerData.Data["vehData"];
                if (vehData != null)
                {
                    if (charData != null && Progress.Library.DoesPlayerHasActiveProgress(charData) ||
                        targetData != null && Progress.Library.DoesPlayerHasActiveProgress(targetData))
                    {
                        offerData.Destroy("Jeden z graczy posiada już aktywne zadanie.");
                        return;
                    }

                    Dictionary <string, object> data = new Dictionary <string, object>
                    {
                        { "veh", vehData },
                        { "price", offerData.Price },
                        { "type", payType }
                    };
                    Progress.Library.CreateProgress("Naprawa pojazdu", targetData, charData, ProgressType.FixVehicle,
                                                    60, data);
                    offerData.Success(true);
                }
            }
            else if (offerData.Type == OfferType.TattooCreate)
            {
                if (charData != null && Progress.Library.DoesPlayerHasActiveProgress(charData) ||
                    targetData != null && Progress.Library.DoesPlayerHasActiveProgress(targetData))
                {
                    offerData.Destroy("Jeden z graczy posiada już aktywne zadanie.");
                    return;
                }

                Dictionary <string, object> data = new Dictionary <string, object>
                {
                    { "tattooId", (int)offerData.Data["tattooId"] },
                    { "price", offerData.Price },
                    { "type", payType }
                };
                Progress.Library.CreateProgress("Nakładanie tatuażu", targetData, charData, ProgressType.TattooCreate,
                                                20, data);
                offerData.Success(true);
            }

            offerData.Destroy();
        }
Exemplo n.º 3
0
        public void Command_Vehicle(Client player, string args = "")
        {
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }
            const string legend = "/v [l(ista), z(amknij), (za)parkuj, maska, bagaznik]";

            string[] arguments = Command.GetCommandArguments(args);
            if (arguments.Length < 1)
            {
                Ui.ShowUsage(player, legend);
                return;
            }

            string option = arguments[0].ToLower();

            if (option == "lista" || option == "l")
            {
                Library.ShowUi(charData, UiType.VehiclesList, 0);
            }
            else if (option == "zamknij" || option == "z")
            {
                Vehicle vehData = Library.GetNearestVehicle(player.Position, player.Dimension);
                if (vehData == null)
                {
                    Ui.ShowWarning(player, "Nie znaleziono żadnego pojazdu obok Ciebie.");
                    return;
                }

                if (!Library.DoesPlayerHasVehiclePerm(charData, vehData.Id))
                {
                    Ui.ShowError(player, "Nie posiadasz kluczy do tego pojazdu.");
                    return;
                }

                if (vehData.Closed)
                {
                    vehData.Closed = false;
                    vehData.VehicleHandle.Locked = false;
                    Chat.Library.SendPlayerMeMessage(charData, $"otwiera drzwi pojazdu \"{vehData.Name}\".", true);
                }
                else
                {
                    vehData.Closed = true;
                    vehData.VehicleHandle.Locked = true;
                    Chat.Library.SendPlayerMeMessage(charData, $"zamyka drzwi pojazdu \"{vehData.Name}\".", true);
                }
            }
            else if (option == "zaparkuj" || option == "parkuj")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz być w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono tego pojazdu.");
                    return;
                }

                if (!Library.DoesPlayerHasVehicleOwner(charData, vehData.Id))
                {
                    Ui.ShowError(player, "Nie posiadasz odpowiednich uprawnień.");
                    return;
                }

                vehData.X = vehData.VehicleHandle.Position.X;
                vehData.Y = vehData.VehicleHandle.Position.Y;
                vehData.Z = vehData.VehicleHandle.Position.Z;

                vehData.Rx = vehData.VehicleHandle.Rotation.X;
                vehData.Ry = vehData.VehicleHandle.Rotation.Y;
                vehData.Rz = vehData.VehicleHandle.Rotation.Z;

                vehData.Dimension = (int)vehData.VehicleHandle.Dimension;

                vehData.Save();

                Ui.ShowInfo(player, "Pojazd został zaparkowany pomyślnie.");
            }
            else if (option == "maska")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                if (player.VehicleSeat != -1)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe jako kierowca.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Niewłaściwy pojazd.");
                    return;
                }

                vehData.Hood = !vehData.Hood;
                foreach (KeyValuePair <int, Character> entry in Account.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry.Value.PlayerHandle, "client.vehicle.sync.hood",
                                                        vehData.VehicleHandle.Value, vehData.Hood);
                }
            }
            else if (option == "bagaznik")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                if (player.VehicleSeat != -1)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe jako kierowca.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Niewłaściwy pojazd.");
                    return;
                }

                vehData.Trunk = !vehData.Trunk;
                foreach (KeyValuePair <int, Character> entry in Account.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry.Value.PlayerHandle, "client.vehicle.sync.trunk",
                                                        vehData.VehicleHandle.Value, vehData.Trunk);
                }
            }
            else if (option == "opis")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                if (player.VehicleSeat != -1)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe jako kierowca.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Niewłaściwy pojazd.");
                    return;
                }

                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/v opis [tresc opisu] | Aby usunac opis wpisz /v opis usun");
                    return;
                }

                if (arguments[1].ToLower() == "usun")
                {
                    Library.SyncVehicleForPlayer(null, player.Vehicle.Value, "descdel", 0);
                    Ui.ShowInfo(player, "Opis pojazdu usunięty.");
                    vehData.VehicleDescription = null;
                    return;
                }

                vehData.VehicleDescription = Command.GetConcatString(arguments, 1);
                Library.SyncVehicleForPlayer(null, player.Vehicle.Value, "desc", vehData.VehicleDescription);
                Ui.ShowInfo(player, "Opis pojazdu został ustawiony.");
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Funkcja wykonywująca się w momencie, gdy TimeLeft osiągnie wartość 0.
        /// </summary>
        private void OnSuccess()
        {
            // Jeśli jakimś sposobem OnSuccess uruchomi się po raz drugi - niszczymy progress.
            if (IsBlocked)
            {
                Destroy();
                return;
            }

            // Blokujemy progress, aby przypadkiem nie wykonał się drugi raz.
            IsBlocked = true;

            if (Type == ProgressType.FixVehicle)
            {
                Vehicle vehData = (Vehicle)Data["veh"];
                if (vehData == null)
                {
                    SendMessage("Pojazd nie istnieje.");
                    Destroy();
                    return;
                }

                if (vehData.VehicleHandle == null || !NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    SendMessage("Pojazd nie jest zespawnowany.");
                    Destroy();
                    return;
                }

                if (TargetData == null || TargetData.PlayerHandle == null ||
                    !NAPI.Entity.DoesEntityExist(TargetData.PlayerHandle))
                {
                    SendMessage("Mechanik wyszedł z gry.");
                    Destroy();
                    return;
                }

                if (Offers.Library.PayForOffer(TargetData, CharData, (OfferPayType)Data["type"],
                                               (int)(uint)Data["price"]))
                {
                    vehData.Health = 1000.0f;
                    vehData.Save();

                    if (vehData.Spawned && vehData.VehicleHandle != null &&
                        NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                    {
                        vehData.VehicleHandle.Repair();
                    }

                    // ReSharper disable once PossibleInvalidCastException
                    SendMessage($"Pojazd został naprawiony za kwotę ${(uint) Data["price"]}.");
                }
                else
                {
                    SendMessage("Pojazd nie został naprawiony z powodu błędu podczas pobierania opłaty.");
                }

                Destroy();
            }
            else if (Type == ProgressType.TattooCreate)
            {
                if (Offers.Library.PayForOffer(TargetData, CharData, (OfferPayType)Data["type"],
                                               (int)(uint)Data["price"]))
                {
                    int tattooId = (int)Data["tattooId"];
                    CharData.SyncedTattoos.Add(tattooId);


                    using (Database.Database db = new Database.Database())
                    {
                        Tattoo newTattoo = new Tattoo
                        {
                            CharId   = CharData.Id,
                            TattooId = tattooId
                        };
                        db.Tattoos.Add(newTattoo);
                        db.SaveChanges();
                    }

                    Sync.Library.SyncPlayerForPlayer(CharData.PlayerHandle);

                    // ReSharper disable once PossibleInvalidCastException
                    SendMessage($"Tatuaż został nałożony za kwotę ${(uint) Data["price"]}.");
                }
                else
                {
                    SendMessage("Tatuaż nie został nałożony z powodu błędu podczas pobierania opłaty.");
                }

                Destroy();
            }
        }
Exemplo n.º 5
0
        public void Command_AdminVehicle(Client player, string args = "")
        {
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }
            if (charData.AdminLevel == 0)
            {
                return;
            }
            const string legend =
                "/av [uid, stworz, edytuj, usun, tm, to, spawn, napraw, kolor1, kolor2, pj, przypisz, przeszukaj, " +
                "respawn, parkuj, mods, info, paliwo]";

            string[] arguments = Command.GetCommandArguments(args);
            if (arguments.Length < 1)
            {
                Ui.ShowUsage(player, legend);
                return;
            }

            string option = arguments[0].ToLower();

            if (option == "uid")
            {
                Vehicle vehicleFound = Library.GetNearestVehicle(player.Position, player.Dimension);
                if (vehicleFound == null)
                {
                    Ui.ShowError(player, "Nie znaleziono żadnego pojazdu obok Ciebie.");
                    return;
                }

                Player.SendFormattedChatMessage(player,
                                                $"Znaleziony pojazd: (UID: {vehicleFound.Id}) {vehicleFound.Name}", Constants.ColorDelRio);
            }
            else if (option == "info")
            {
                if (player.IsInVehicle)
                {
                    Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                    if (vehData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono takiego pojazdu.");
                        return;
                    }

                    Library.ShowUi(charData, UiType.VehicleInfo, vehData.Id);
                }
                else
                {
                    if (arguments.Length - 1 < 1)
                    {
                        Ui.ShowUsage(player, "/av info [ID pojazdu]");
                        return;
                    }

                    int vehId = Command.GetNumberFromString(arguments[1]);
                    if (vehId == Command.InvalidNumber)
                    {
                        Ui.ShowError(player, "Podano błędne dane.");
                        return;
                    }

                    Vehicle vehData = Library.GetVehicleData(vehId);
                    if (vehData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono takiego pojazdu.");
                        return;
                    }

                    Library.ShowUi(charData, UiType.VehicleInfo, vehData.Id);
                }
            }
            else if (option == "paliwo")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                vehData.Fuel = vehData.MaxFuel;
                vehData.Save();

                Ui.ShowInfo(player, "Pojazd został napełniony.");
            }
            else if (option == "handling")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 2)
                {
                    Ui.ShowUsage(player, "/av handling [typ] [wartość]");
                }

                string type  = arguments[1].ToUpper();
                double value = Command.GetDoubleFromString(arguments[2]);

                if (vehData.TestHandling.ContainsKey(type))
                {
                    vehData.TestHandling.Remove(type);
                }

                vehData.TestHandling.Add(type, value);
                Library.SyncVehicleForPlayer(null, vehData.VehicleHandle.Value);
                Ui.ShowInfo(player, $"Zmieniono wartość \"{type}\" na \"{value}\".");
            }
            else if (option == "mods")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesColor, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                using (Database.Database db = new Database.Database())
                {
                    List <VehicleMod> mods = db.VehicleMods.Where(t => t.VehicleId == vehData.Id).ToList();
                    if (mods.Count == 0)
                    {
                        Ui.ShowInfo(player, "Pojazd nie posiada żadnych modyfikacji.");
                        return;
                    }

                    List <DialogColumn> dialogColumns = new List <DialogColumn>
                    {
                        new DialogColumn("ID Modyfikacji", 40),
                        new DialogColumn("Wartość modyfikacji", 40)
                    };

                    List <DialogRow> dialogRows = new List <DialogRow>();
                    foreach (VehicleMod entry in mods)
                    {
                        dialogRows.Add(new DialogRow(null, new[] { entry.ModId.ToString(), entry.ModVal.ToString() }));
                    }

                    string[] dialogButtons = { "Wybierz", "Zamknij" };

                    Dialogs.Library.CreateDialog(player, DialogId.None, "Zainstalowane modyfikacje", dialogColumns,
                                                 dialogRows, dialogButtons);
                }
            }
            else if (option == "rmods")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesColor, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                for (int i = 0; i < 76; i++)
                {
                    NAPI.Vehicle.SetVehicleMod(vehData.VehicleHandle, i, -1);
                }

                using (Database.Database db = new Database.Database())
                {
                    List <VehicleMod> vehMods = db.VehicleMods.Where(t => t.VehicleId == vehData.Id).ToList();
                    foreach (VehicleMod entry in vehMods)
                    {
                        NAPI.Vehicle.SetVehicleMod(vehData.VehicleHandle, (int)entry.ModId, entry.ModVal);
                    }
                }
            }
            else if (option == "stworz")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehicleCreate, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av stworz [nazwa pojazdu]");
                    return;
                }

                uint?vehicleHash = Library.GetVehicleHashByName(arguments[1].ToLower());
                if (vehicleHash == null)
                {
                    Ui.ShowError(player, "Nie znaleziono takiego pojazdu.");
                    return;
                }

                Vector3 posInFrontOf = Global.GetPositionInFrontOf(player.Position, player.Heading, 5.0f);
                Vehicle vehicle      = Library.CreateVehicle((long)vehicleHash, posInFrontOf,
                                                             new Vector3(0, 0, player.Heading + 90), 0, 0, OwnerType.Player, (int)player.Dimension, charData.Id,
                                                             Command.UpperFirst(arguments[1], false), Player.GetPlayerDebugName(charData));

                Player.SendFormattedChatMessage(player, $"Utworzono pojazd \"{vehicle.Name}\" (UID: {vehicle.Id})",
                                                Constants.ColorDarkRed);
            }
            else if (option == "edytuj")
            {
                Vehicle vehData;
                if (player.IsInVehicle)
                {
                    vehData = Library.GetVehicleData(player.Vehicle);
                    if (vehData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                        return;
                    }

                    Library.ShowUi(charData, UiType.VehicleEditAdmin, vehData.Id);
                    return;
                }

                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehicleCreate, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av edytuj [id pojazdu]");
                    return;
                }

                int vehId = Command.GetNumberFromString(arguments[1]);
                if (vehId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne UID pojazdu.");
                    return;
                }

                vehData = Library.GetVehicleData(vehId);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                    return;
                }

                Library.ShowUi(charData, UiType.VehicleEditAdmin, vehData.Id);
            }
            else if (option == "usun")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehicleDelete, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av usun [id pojazdu]");
                    return;
                }

                int vehId = Command.GetNumberFromString(arguments[1]);
                if (vehId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne UID pojazdu");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(vehId);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd o takim UID nie istnieje.");
                    return;
                }

                Player.SendFormattedChatMessage(player,
                                                $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został usunięty.", Constants.ColorDarkRed);
                Library.DestroyVehicle(vehData.Id);
            }
            else if (option == "to")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesTeleport, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av to [id pojazdu]");
                    return;
                }

                int vehId = Command.GetNumberFromString(arguments[1]);
                if (vehId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne UID pojazdu.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(vehId);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                    return;
                }

                if (!vehData.Spawned || vehData.VehicleHandle == null ||
                    !NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    Ui.ShowError(player, "Pojazd nie jest zespawnowany.");
                    return;
                }

                player.Position = new Vector3(vehData.VehicleHandle.Position.X - 2.5,
                                              vehData.VehicleHandle.Position.Y - 2.5, vehData.VehicleHandle.Position.Z);
                player.Dimension = vehData.VehicleHandle.Dimension;

                Player.SendFormattedChatMessage(player,
                                                $"Teleportowałeś się do pojazdu \"{vehData.Name}\" (UID: {vehData.Id}).", Constants.ColorDelRio);
            }
            else if (option == "tm")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesTeleport, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av tm [id pojazdu]");
                    return;
                }

                int vehId = Command.GetNumberFromString(arguments[1]);
                if (vehId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne UID pojazdu.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(vehId);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                    return;
                }

                if (!vehData.Spawned || vehData.VehicleHandle == null ||
                    !NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    Ui.ShowError(player, "Pojazd nie jest zespawnowany.");
                    return;
                }

                Vector3 newPosition = Global.GetPositionInFrontOf(player.Position, player.Heading, 5.0f);
                vehData.VehicleHandle.Position  = newPosition;
                vehData.VehicleHandle.Rotation  = new Vector3(0, 0, player.Heading + 90.0f);
                vehData.VehicleHandle.Dimension = player.Dimension;

                Player.SendFormattedChatMessage(player,
                                                $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został przeteleportowany do Ciebie.",
                                                Constants.ColorDelRio);
            }
            else if (option == "spawn")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesSpawn, true))
                {
                    return;
                }
                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av spawn [id pojazdu]");
                    return;
                }

                int vehId = Command.GetNumberFromString(arguments[1]);
                if (vehId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne UID pojazdu.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(vehId);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                    return;
                }

                if (!vehData.Spawned || vehData.VehicleHandle == null ||
                    !NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    Library.SpawnVehicle(vehData.Id);
                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został zespawnowany.", Constants.ColorDelRio);
                }
                else
                {
                    Library.UnspawnVehicle(vehData.Id);
                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został odspawnowany.", Constants.ColorDelRio);
                }
            }
            else if (option == "parkuj")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesPark, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                Library.ParkVehicle(charData.PlayerHandle, vehData, player.Vehicle.Position, player.Vehicle.Rotation,
                                    (int)player.Dimension);
            }
            else if (option == "napraw")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesFix, true))
                {
                    return;
                }
                if (player.IsInVehicle)
                {
                    Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                    if (vehData == null)
                    {
                        Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                        return;
                    }

                    vehData.Health = 1000.0f;
                    vehData.Save();

                    if (vehData.Spawned && vehData.VehicleHandle != null &&
                        NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                    {
                        vehData.VehicleHandle.Repair();
                    }

                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został naprawiony.", Constants.ColorDelRio);
                }
                else
                {
                    if (arguments.Length - 1 < 1)
                    {
                        Ui.ShowUsage(player, "/av napraw [id pojazdu]");
                        return;
                    }

                    int vehId = Command.GetNumberFromString(arguments[1]);
                    if (vehId == Command.InvalidNumber)
                    {
                        Ui.ShowError(player, "Podano niepoprawne UID pojazdu.");
                        return;
                    }

                    Vehicle vehData = Library.GetVehicleData(vehId);
                    if (vehData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono pojazdu o podanym ID.");
                        return;
                    }

                    vehData.Health = 1000.0f;
                    vehData.Save();

                    if (vehData.Spawned && vehData.VehicleHandle != null &&
                        NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                    {
                        vehData.VehicleHandle.Repair();
                    }

                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został naprawiony.", Constants.ColorDelRio);
                }
            }
            else if (option == "kolor1")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesColor, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av kolor1 [id koloru]");
                    return;
                }

                int colorId = Command.GetNumberFromString(arguments[1]);
                if (colorId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano nieprawidłowy kolor pojazdu.");
                    return;
                }

                vehData.FirstColor = colorId;

                if (vehData.Spawned && vehData.VehicleHandle != null &&
                    NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    vehData.VehicleHandle.PrimaryColor = vehData.FirstColor;
                }

                Player.SendFormattedChatMessage(player,
                                                $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został przemalowany.", Constants.ColorDelRio);
            }
            else if (option == "kolor2")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesColor, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av kolor2 [id koloru]");
                    return;
                }

                int colorId = Command.GetNumberFromString(arguments[1]);
                if (colorId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano nieprawidłowy kolor pojazdu.");
                    return;
                }

                vehData.SecondColor = colorId;

                if (vehData.Spawned && vehData.VehicleHandle != null &&
                    NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    vehData.VehicleHandle.SecondaryColor = vehData.SecondColor;
                }

                Player.SendFormattedChatMessage(player,
                                                $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został przemalowany.", Constants.ColorDelRio);
            }
            else if (option == "pj")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesPj, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av pj [id paintjobu]");
                    return;
                }

                int liveryId = Command.GetNumberFromString(arguments[1]);
                if (liveryId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano nieprawidłowe id paintjobu.");
                    return;
                }

                vehData.Livery = liveryId;
                vehData.Save();

                if (vehData.Spawned && vehData.VehicleHandle != null &&
                    NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
                {
                    vehData.VehicleHandle.Livery = vehData.Livery;
                    Library.SyncVehicleForPlayer(null, vehData.VehicleHandle.Value, "livery", vehData.Livery);
                }

                Player.SendFormattedChatMessage(player,
                                                $"Pojazd \"{vehData.Name}\" (UID: {vehData.Id}) został przemalowany.", Constants.ColorDelRio);
            }
            else if (option == "przypisz")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesAssign, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 2)
                {
                    Ui.ShowUsage(player, "/av przypisz [gracz, grupa] [Id właściciela]");
                    return;
                }

                int ownerId = Command.GetNumberFromString(arguments[2]);
                if (ownerId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne Id właściciela");
                    return;
                }

                string subOption = arguments[1].ToLower();
                if (subOption == "gracz")
                {
                    Character targetData = Account.GetPlayerDataByServerId(ownerId);
                    if (targetData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono gracza o podanym Id.");
                        return;
                    }

                    vehData.OwnerType = OwnerType.Player;
                    vehData.Owner     = targetData.Id;
                    vehData.Save();

                    Player.SendFormattedChatMessage(targetData.PlayerHandle,
                                                    $"Administrator przypisał Ci pojazd {Library.GetVehicleFormattedName(vehData)}.",
                                                    Constants.ColorPictonBlue);
                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd {Library.GetVehicleFormattedName(vehData)} został przypisany graczowi " +
                                                    $"{Player.GetPlayerIcName(targetData, true)}.", Constants.ColorDarkRed);
                }
                else if (subOption == "grupa")
                {
                    Group groupData = Groups.Library.GetGroupData(ownerId);
                    if (groupData == null)
                    {
                        Ui.ShowError(player, "Nie znaleziono grupy o podanym Id.");
                        return;
                    }

                    vehData.OwnerType = OwnerType.Group;
                    vehData.Owner     = groupData.Id;
                    vehData.Save();

                    Player.SendFormattedChatMessage(player,
                                                    $"Pojazd {Library.GetVehicleFormattedName(vehData)} został przypisany grupie " +
                                                    $"{groupData.Name} (UID: {groupData.Id})", Constants.ColorDarkRed);
                }
                else
                {
                    Ui.ShowUsage(player, "/av przypisz [gracz, grupa] [Id właściciela]");
                }
            }
            else if (option == "extra")
            {
                if (!Admin.Library.DoesPlayerHasAdminPerm(charData, Permissions.VehiclesPj, true))
                {
                    return;
                }
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe.");
                    return;
                }

                Vehicle vehData = Library.GetVehicleData(player.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd w którym siedzisz jest nieprawidłowym pojazdem.");
                    return;
                }

                if (arguments.Length - 1 < 1)
                {
                    Ui.ShowUsage(player, "/av extra [id extrasu]");
                    return;
                }

                int extrasId = Command.GetNumberFromString(arguments[1]);
                if (extrasId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano nieprawidłowe id extrasu.");
                    return;
                }

                if (vehData.MappedExtras == null)
                {
                    vehData.MappedExtras = new Dictionary <int, bool>();
                }

                if (vehData.MappedExtras.ContainsKey(extrasId))
                {
                    vehData.MappedExtras[extrasId] = !vehData.MappedExtras[extrasId];
                    Ui.ShowInfo(player, $"Zmieniono stan extrasu na {vehData.MappedExtras[extrasId].ToString()}.");
                }
                else
                {
                    vehData.MappedExtras.Add(extrasId, !vehData.VehicleHandle.GetExtra(extrasId));
                    Ui.ShowInfo(player, $"Zmieniono stan extrasu na {vehData.MappedExtras[extrasId].ToString()}.");
                }

                vehData.Save();
                vehData.RebuildExtras();
            }
        }