Example #1
0
        /// <summary>
        /// Zwraca true jeśli gracz posiada uprawnienia ownera pojazdu, inaczej false.
        /// </summary>
        /// <param name="charData"></param>
        /// <param name="vehId"></param>
        /// <returns></returns>
        public static bool DoesPlayerHasVehicleOwner(Character charData, int vehId)
        {
            if (charData == null)
            {
                return(false);
            }
            Vehicle vehData = GetVehicleData(vehId);

            if (vehData == null)
            {
                return(false);
            }

            if (charData.AdminLevel > 0 && charData.HasAdminDuty)
            {
                return(true);
            }
            if (vehData.OwnerType == OwnerType.Player)
            {
                if (vehData.Owner == charData.Id)
                {
                    return(true);
                }
            }
            else if (vehData.OwnerType == OwnerType.Group)
            {
                // TODO: permy grup
            }

            return(false);
        }
Example #2
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.");
            }
        }
Example #3
0
        /// <summary>
        /// Zwraca true jeśli gracz posiada uprawnienia do kierowania pojazdem, inaczej false.
        /// </summary>
        /// <param name="charData"></param>
        /// <param name="vehId"></param>
        /// <returns></returns>
        public static bool DoesPlayerHasVehiclePerm(Character charData, int vehId)
        {
            if (charData == null)
            {
                return(false);
            }
            Vehicle vehData = GetVehicleData(vehId);

            if (vehData == null)
            {
                return(false);
            }

            if (charData.AdminLevel > 0 && charData.HasAdminDuty)
            {
                return(true);
            }
            if (vehData.OwnerType == OwnerType.Player)
            {
                if (vehData.Owner == charData.Id)
                {
                    return(true);
                }
                // TODO: Wypożyczanie
            }
            else if (vehData.OwnerType == OwnerType.Group)
            {
                return(Groups.Library.DoesPlayerHasPerm(charData, vehData.Owner, Permissions.RankVehKeys));
            }

            return(false);
        }
Example #4
0
        public void CmdTankuj(Client player)
        {
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }

            if (!player.IsInVehicle)
            {
                Ui.ShowError(player, "Nie jesteś w pojeździe.");
                return;
            }

            Vehicle vehData = Library.GetVehicleData(player.Vehicle);

            if (vehData == null)
            {
                Ui.ShowError(player, "Nie jesteś w pojeździe.");
                return;
            }

            // NAPI.ClientEvent.TriggerClientEvent(player, "client.gassstations.cmd", vehData.MaxFuel - vehData.Fuel);
            player.TriggerEvent("clgascommand", (vehData.MaxFuel - vehData.Fuel).ToString());
        }
Example #5
0
        /// <summary>
        /// Zwraca nazwę właściciela pojazdu.
        /// </summary>
        /// <param name="vehData"></param>
        /// <returns></returns>
        public static string GetVehicleOwnerName(Vehicle vehData)
        {
            string output = "Nieznany";

            if (vehData == null)
            {
                return(output);
            }

            if (vehData.OwnerType == OwnerType.Player)
            {
                using (Database.Database db = new Database.Database())
                {
                    Character charData = db.Characters.FirstOrDefault(t => t.Id == vehData.Owner);
                    if (charData != null)
                    {
                        output = $"{charData.Name} {charData.Lastname} (UID: {charData.Id})";
                    }
                }
            }
            else if (vehData.OwnerType == OwnerType.Group)
            {
                Group groupData = Groups.Library.GetGroupData(vehData.Owner);
                if (groupData != null)
                {
                    output = $"{groupData.Name} (UID: {groupData.Id})";
                }
            }

            return(output);
        }
Example #6
0
        /// <summary>
        /// Usuwa istniejący pojazd.
        /// </summary>
        /// <param name="vehId"></param>
        public static void DestroyVehicle(int vehId)
        {
            Vehicle vehData = GetVehicleData(vehId);

            if (vehData == null)
            {
                return;
            }

            List <ItemEntity> items = ItemsManager.Items
                                      .Where(t => t.OwnerType == New.Enums.OwnerType.Vehicle && t.Owner == vehData.Id)
                                      .ToList();

            for (int i = items.Count - 1; i > -1; i--)
            {
                items[1].Delete();
            }

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


            using (Database.Database db = new Database.Database())
            {
                int vehicleId = vehData.Id;
                db.Vehicles.Attach(vehData);
                db.Vehicles.Remove(vehData);
                db.SaveChanges();

                VehiclesList.Remove(vehicleId);
            }
        }
Example #7
0
        /// <summary>
        /// Zwraca pojazd znajdujący się najbliżej danej pozycji na danym vw i danej odległości.
        /// </summary>
        /// <param name="position"></param>
        /// <param name="dimension"></param>
        /// <param name="range"></param>
        /// <returns></returns>
        public static Vehicle GetNearestVehicle(Vector3 position, uint dimension, double range = 5.0)
        {
            double  nearestRange   = range;
            Vehicle nearestVehicle = null;

            foreach (KeyValuePair <int, Vehicle> entry in VehiclesList)
            {
                if (!entry.Value.Spawned || entry.Value.VehicleHandle == null ||
                    !NAPI.Entity.DoesEntityExist(entry.Value.VehicleHandle))
                {
                    continue;
                }
                if (entry.Value.VehicleHandle.Dimension != dimension)
                {
                    continue;
                }

                double mathDistance = Global.GetDistanceBetweenPositions(position, entry.Value.VehicleHandle.Position);
                if (mathDistance < nearestRange)
                {
                    nearestRange   = mathDistance;
                    nearestVehicle = entry.Value;
                }
            }

            return(nearestVehicle);
        }
Example #8
0
        public void Event_VehicleEngine(Client player)
        {
            if (!player.IsInVehicle)
            {
                return;
            }
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }

            Vehicle vehData = Library.GetVehicleData(player.Vehicle);

            if (vehData == null)
            {
                return;
            }

            if (Bw.Library.DoesPlayerHasBw(charData))
            {
                return;
            }
            Library.ToggleVehicleEngine(charData, vehData, !vehData.Engine);
        }
Example #9
0
        public void Event_GasStationOffer(Client player, int fuel, int cash)
        {
            if (!player.IsInVehicle)
            {
                return;
            }
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }

            Vehicle vehData = Library.GetVehicleData(player.Vehicle);

            if (vehData == null)
            {
                return;
            }
            if (!vehData.Spawned)
            {
                return;
            }

            Dictionary <string, object> offerData = new Dictionary <string, object>
            {
                { "vehicle", player.Vehicle },
                { "fuel", fuel }
            };

            Offers.Library.CreateOffer(null, charData.PlayerHandle, OfferType.GasStation, (uint)cash, offerData,
                                       "Tankowanie pojazdu", true);
        }
Example #10
0
        /// <summary>
        /// Synchronizuje jedną informację o pojeździe dla gracza (lub wszystkich, jeśli player == null).
        /// </summary>
        /// <param name="player"></param>
        /// <param name="remoteId"></param>
        /// <param name="name"></param>
        /// <param name="value"></param>
        public static void SyncVehicleForPlayer(Client player, int remoteId, string name, object value)
        {
            GTANetworkAPI.Vehicle remoteVehicle = NAPI.Pools.GetAllVehicles().Find(t => t.Value == remoteId);
            if (remoteVehicle == default(GTANetworkAPI.Vehicle))
            {
                return;
            }

            Vehicle vehData = GetVehicleData(remoteVehicle);

            if (vehData == null)
            {
                return;
            }

            if (player == null)
            {
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync.option", remoteId, name, value);
                }
            }
            else
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "client.vehicle.sync.option", remoteId, name, value);
            }
        }
Example #11
0
        public void Event_VehicleBindKey(Client player, string type)
        {
            if (!player.IsInVehicle)
            {
                return;
            }
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }

            Vehicle vehData = Library.GetVehicleData(player.Vehicle);

            if (vehData == null)
            {
                return;
            }
            if (!vehData.Spawned)
            {
                return;
            }

            switch (type)
            {
            case "left-indicator":
                vehData.LeftIndicator = !vehData.LeftIndicator;
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync.indicator",
                                                        vehData.VehicleHandle.Value, vehData.LeftIndicator, vehData.RightIndicator);
                }
                break;

            case "right-indicator":
                vehData.RightIndicator = !vehData.RightIndicator;
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync.indicator",
                                                        vehData.VehicleHandle.Value, vehData.LeftIndicator, vehData.RightIndicator);
                }
                break;

            case "siren":
                vehData.SirenSound = !vehData.SirenSound;
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync.siren",
                                                        vehData.VehicleHandle.Value, vehData.SirenSound);
                }
                break;
            }
        }
Example #12
0
        public void Event_VehicleMileage(Client player, double mileageToAppend)
        {
            if (!player.IsInVehicle)
            {
                return;
            }

            Vehicle vehData = Library.GetVehicleData(player.Vehicle);

            vehData.Mileage += mileageToAppend; // it's always positive number of km to append
        }
Example #13
0
        /// <summary>
        /// Spawnuje pojazd.
        /// </summary>
        /// <param name="vehId"></param>
        public static void SpawnVehicle(int vehId)
        {
            Vehicle vehData = GetVehicleData(vehId);

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

            if (vehData.VehicleHash != 0)
            {
                vehData.Spawned       = true;
                vehData.VehicleHandle = NAPI.Vehicle.CreateVehicle((uint)vehData.VehicleHash,
                                                                   new Vector3(vehData.X, vehData.Y, vehData.Z), vehData.Rz, vehData.FirstColor, vehData.SecondColor,
                                                                   vehData.NumberPlate, 255, vehData.Closed, vehData.Engine, (uint)vehData.Dimension);
                vehData.VehicleHandle.Rotation = new Vector3(vehData.Rx, vehData.Ry, vehData.Rz);
                vehData.VehicleHandle.Livery   = vehData.Livery;
                vehData.VehicleHandle.SetData("vehicle.id", vehData.Id);
                if (vehData.Health < 0)
                {
                    vehData.Health = 100;
                }
                vehData.VehicleHandle.Health = vehData.Health;

                vehData.VehicleHandle.EngineStatus = false;
                vehData.Engine               = false;
                vehData.EngineToggle         = false;
                vehData.VehicleHandle.Locked = true;
                vehData.Closed               = true;
                vehData.TestHandling         = new Dictionary <string, double>();

                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);
                    }
                }
            }
        }
Example #14
0
        /// <summary>
        /// Tworzy nowy pojazd.
        /// </summary>
        /// <param name="vehicleHash"></param>
        /// <param name="position"></param>
        /// <param name="rotation"></param>
        /// <param name="colorFirst"></param>
        /// <param name="colorSecond"></param>
        /// <param name="ownerTypeType"></param>
        /// <param name="dimension"></param>
        /// <param name="owner"></param>
        /// <param name="name"></param>
        /// <param name="createdBy"></param>
        /// <returns></returns>
        public static Vehicle CreateVehicle(long vehicleHash, Vector3 position, Vector3 rotation,
                                            int colorFirst, int colorSecond, OwnerType ownerTypeType, int dimension, int owner, string name,
                                            string createdBy = "System")
        {
            VehConsumption vehCon = GetDefaultConsumption(vehicleHash);

            Vehicle veh = new Vehicle
            {
                VehicleHash    = vehicleHash,
                Name           = name,
                OwnerType      = ownerTypeType,
                Owner          = owner,
                Dimension      = dimension,
                NumberPlate    = "BRAK",
                PlateType      = 1,
                Spawned        = false,
                X              = position.X,
                Y              = position.Y,
                Z              = position.Z,
                Rx             = rotation.X,
                Ry             = rotation.Y,
                Rz             = rotation.Z,
                Closed         = true,
                FirstColor     = colorFirst,
                SecondColor    = colorSecond,
                MaxFuel        = vehCon.MaxFuel,
                Fuel           = (int)Math.Floor((double)vehCon.MaxFuel / 2),
                Livery         = 0,
                Extras         = "",
                FuelMultiplier = vehCon.Consumption,
                Health         = 1000.0f,
                Blocked        = false,
                BlockValue     = 0,
                Modifications  = "",
                Mileage        = 0.0,
                MappedExtras   = new Dictionary <int, bool>()
            };

            using (Database.Database db = new Database.Database())
            {
                db.Vehicles.Add(veh);
                db.SaveChanges();
                Log.ConsoleLog("VEHICLE", $"Utworzono pojazd \"{veh.Name}\" (UID: {veh.Id}) [{createdBy}]",
                               LogType.Debug);
                VehiclesList.Add(veh.Id, veh);
                SpawnVehicle(veh.Id);
                return(veh);
            }
        }
Example #15
0
        /// <summary>
        /// Synchronizuje wszystkie informacje o pojeździe dla gracza (lub wszystkich, jeśli player == null).
        /// </summary>
        /// <param name="player"></param>
        /// <param name="remoteId"></param>
        public static void SyncVehicleForPlayer(Client player, int remoteId)
        {
            // if (player != null)
            // {
            //     Log.ConsoleLog("VEHICLE", $"Sync vehicle {remoteId} for player {player.SocialClubName}", LogType.Debug);
            // }
            // else
            // {
            //     Log.ConsoleLog("VEHICLE", $"Sync vehicle {remoteId} for all playes.", LogType.Debug);
            // }

            GTANetworkAPI.Vehicle remoteVehicle = NAPI.Pools.GetAllVehicles().Find(t => t.Value == remoteId);
            if (remoteVehicle == default(GTANetworkAPI.Vehicle))
            {
                return;
            }

            Vehicle vehData = GetVehicleData(remoteVehicle);

            if (vehData == null)
            {
                return;
            }

            if (player == null)
            {
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync", vehData.VehicleHandle.Value,
                                                        !vehData.SirenSound, vehData.LeftIndicator, vehData.RightIndicator, vehData.Hood, vehData.Trunk,
                                                        vehData.Health, vehData.Livery, vehData.FirstColor, vehData.SecondColor,
                                                        vehData.VehicleHandle.Siren, JsonConvert.SerializeObject(vehData.MappedExtras),
                                                        JsonConvert.SerializeObject(vehData.TestHandling), vehData.VehicleDescription);
                }
            }
            else
            {
                NAPI.ClientEvent.TriggerClientEvent(player, "client.vehicle.sync", vehData.VehicleHandle.Value,
                                                    !vehData.SirenSound, vehData.LeftIndicator, vehData.RightIndicator, vehData.Hood, vehData.Trunk,
                                                    vehData.Health, vehData.Livery, vehData.FirstColor, vehData.SecondColor,
                                                    vehData.VehicleHandle.Siren, JsonConvert.SerializeObject(vehData.MappedExtras),
                                                    JsonConvert.SerializeObject(vehData.TestHandling), vehData.VehicleDescription);
            }
        }
Example #16
0
        /// <summary>
        /// Odspawnowuje pojazd.
        /// </summary>
        /// <param name="vehId"></param>
        public static void UnspawnVehicle(int vehId)
        {
            Vehicle vehData = GetVehicleData(vehId);

            if (vehData == null)
            {
                return;
            }
            if (!vehData.Spawned)
            {
                return;
            }

            vehData.Spawned = false;
            vehData.Engine  = false;
            if (NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
            {
                NAPI.Entity.DeleteEntity(vehData.VehicleHandle);
            }
        }
Example #17
0
        /// <summary>
        /// Przeładowuje dodatki pojazdu.
        /// </summary>
        /// <param name="vehData"></param>
        public static void ReloadVehicleExtra(Vehicle vehData)
        {
            if (vehData == null)
            {
                return;
            }
            if (!vehData.Spawned || vehData.VehicleHandle == null ||
                !NAPI.Entity.DoesEntityExist(vehData.VehicleHandle))
            {
                return;
            }

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

            foreach (Client entry in NAPI.Pools.GetAllPlayers())
            {
                NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.sync.option", vehData.VehicleHandle.Value,
                                                    "extra", JsonConvert.SerializeObject(vehData.MappedExtras, Formatting.None));
            }
        }
Example #18
0
        /// <summary>
        /// Funkcja wykonująca się za każdym razem uruchomienia timera.
        /// </summary>
        public void OnTimer()
        {
            if (TimeLeft <= 0)
            {
                OnSuccess();
                return;
            }

            if (Type == ProgressType.FixVehicle)
            {
                // Data["veh"] = Database.Models.Vehicle
                // charData - klient
                // targetData - mechanik

                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 (vehData.Engine)
                {
                    return;
                }

                if (Global.GetDistanceBetweenPositions(TargetData.PlayerHandle.Position,
                                                       vehData.VehicleHandle.Position) > 5.0)
                {
                    if (Global.GetDistanceBetweenPositions(TargetData.PlayerHandle.Position,
                                                           vehData.VehicleHandle.Position) > 20.0 ||
                        TargetData.PlayerHandle.Dimension != vehData.VehicleHandle.Dimension)
                    {
                        SendMessage("Mechanik odszedł zbyt daleko od pojazdu.");
                        Destroy();
                        return;
                    }

                    return;
                }
            }
            else if (Type == ProgressType.TattooCreate)
            {
                if (Global.GetDistanceBetweenPositions(TargetData.PlayerHandle.Position,
                                                       CharData.PlayerHandle.Position) > 5.0)
                {
                    if (Global.GetDistanceBetweenPositions(TargetData.PlayerHandle.Position,
                                                           CharData.PlayerHandle.Position) > 20.0 ||
                        TargetData.PlayerHandle.Dimension != CharData.PlayerHandle.Dimension)
                    {
                        SendMessage("Tatuażysta odszedł zbyt daleko od gracza.");
                        Destroy();
                        return;
                    }

                    return;
                }
            }

            TimeLeft--;
            Update();
        }
Example #19
0
 /// <summary>
 /// Zwraca nazwę pojazdu.
 /// </summary>
 /// <param name="vehData"></param>
 /// <returns></returns>
 public static string GetVehicleFormattedName(Vehicle vehData)
 {
     return(vehData == null ? "Nieznany pojazd" : $"\"{vehData.Name}\" (UID: {vehData.Id})");
 }
Example #20
0
        /// <summary>
        /// Zmiana stanu silnika (odpalanie, gaszenie).
        /// </summary>
        /// <param name="charData"></param>
        /// <param name="vehData"></param>
        /// <param name="state"></param>
        public static void ToggleVehicleEngine(Character charData, Vehicle vehData, bool state)
        {
            if (charData == null || vehData == null)
            {
                return;
            }
            if (vehData.EngineToggle)
            {
                return;
            }
            if (!charData.PlayerHandle.IsInVehicle || charData.PlayerHandle.Vehicle != vehData.VehicleHandle ||
                charData.PlayerHandle.VehicleSeat != -1)
            {
                return;
            }

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

            // TODO: Jeśli pojazd jest w naprawie zablokuj odpalanie auta
            if (state)
            {
                if (vehData.Engine)
                {
                    return;
                }
                if (vehData.Health < 100)
                {
                    Ui.ShowError(charData.PlayerHandle, "Pojazd jest zniszczony. Musisz wezwać pomoc drogową.");
                    return;
                }

                if (vehData.Blocked)
                {
                    Ui.ShowError(charData.PlayerHandle,
                                 $"Pojazd ma założoną blokadę na koło. Kwota odblokowania: ${vehData.BlockValue}");
                    return;
                }

                if (vehData.Fuel <= 0)
                {
                    Ui.ShowError(charData.PlayerHandle, "W baku nie ma już paliwa.");
                    return;
                }

                Chat.Library.SendPlayerMeMessage(charData, "przekręca kluczyk w stacyjce i próbuje uruchomić silnik",
                                                 true);
                vehData.EngineToggle = true;
                NAPI.Task.Run(() =>
                {
                    vehData.EngineToggle = false;
                    vehData.Engine       = true;
                    vehData.VehicleHandle.EngineStatus = true;
                    foreach (Client entry in NAPI.Pools.GetAllPlayers())
                    {
                        NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.engine", vehData.VehicleHandle.Value,
                                                            true);
                    }

                    Chat.Library.SendPlayerDoMessage(charData, "Silnik odpalił.", true);
                }, 2000);
            }
            else
            {
                if (!vehData.Engine)
                {
                    return;
                }

                vehData.Engine = false;
                vehData.VehicleHandle.EngineStatus = false;
                foreach (Client entry in NAPI.Pools.GetAllPlayers())
                {
                    NAPI.ClientEvent.TriggerClientEvent(entry, "client.vehicle.engine", vehData.VehicleHandle.Value,
                                                        false);
                }
            }
        }
Example #21
0
        /// <summary>
        /// Pokazuje interfejs dla gracza.
        /// </summary>
        /// <param name="charData"></param>
        /// <param name="uiType"></param>
        /// <param name="vehId"></param>
        public static void ShowUi(Character charData, UiType uiType, int vehId)
        {
            if (charData == null)
            {
                return;
            }
            Account.RemoveServerData(charData, Account.ServerData.DialogVehicleAdminEdit);
            if (uiType == UiType.VehicleInfo)
            {
                Vehicle vehData = GetVehicleData(vehId);
                if (vehData == null)
                {
                    return;
                }

                List <DialogColumn> dialogColumns = new List <DialogColumn>
                {
                    new DialogColumn("", 40),
                    new DialogColumn("", 50)
                };

                List <DialogRow> dialogRows = new List <DialogRow>
                {
                    new DialogRow(null, new[] { "UID pojazdu", vehData.Id.ToString() }),
                    new DialogRow(null, new[] { "Nazwa pojazdu", vehData.Name }),
                    new DialogRow(null, new[] { "Pozycja", $"{vehData.X:F1}, {vehData.Y:F1}, {vehData.Z:F1}" }),
                    new DialogRow(null, new[] { "Zamknięty", vehData.Closed ? "Tak" : "Nie" }),
                    new DialogRow(null, new[] { "Kolor pojazdu", $"[{vehData.FirstColor}] [{vehData.SecondColor}]" }),
                    new DialogRow(null, new[] { "Paliwo", $"{vehData.Fuel:F1}/{vehData.MaxFuel:F1}L" }),
                    new DialogRow(null, new[] { "Wytrzymałość", $"{vehData.Health:F1} HP" }),
                    new DialogRow(null, new[] { "Typ właściciela", GetVehicleOwnerTypeName(vehData.OwnerType) }),
                    new DialogRow(null, new[] { "Nazwa właściciela", GetVehicleOwnerName(vehData) })
                };

                string[] dialogButtons = { "Zamknij" };

                Dialogs.Library.CreateDialog(charData.PlayerHandle, DialogId.None, "Informacje o pojeździe",
                                             dialogColumns, dialogRows, dialogButtons);
            }
            else if (uiType == UiType.VehiclesList)
            {
                List <Vehicle> playerVehicles = GetVehiclesList(OwnerType.Player, charData.Id);
                if (playerVehicles.Count == 0)
                {
                    Ui.ShowWarning(charData.PlayerHandle, "Nie posiadasz żadnych pojazdów.");
                    return;
                }

                List <DialogColumn> dialogColumns = new List <DialogColumn>
                {
                    new DialogColumn("UID", 20),
                    new DialogColumn("Nazwa", 50),
                    new DialogColumn("Zespawnowany", 20)
                };

                List <DialogRow> dialogRows = new List <DialogRow>();
                foreach (Vehicle entry in playerVehicles)
                {
                    dialogRows.Add(new DialogRow(entry.Id,
                                                 new[]
                    {
                        entry.Id.ToString(),
                        entry.Spawned ? $"<span style=\"color: green;\">{entry.Name}</span>" : entry.Name,
                        entry.Spawned ? "Tak" : "Nie"
                    }));
                }

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

                /*List<DialogData> dialogData = new List<DialogData>();
                 * foreach (Database.Models.Vehicle entry in playerVehicles)
                 * {
                 *  if (entry.Spawned)
                 *  {
                 *      dialogData.Add(new DialogData(
                 *          $"<span style=\"color: green; font-weight: bold;\">{Global.EscapeHtml(entry.Name)} " +
                 *          $"({entry.Id})</span>", entry.Id));
                 *  }
                 *  else
                 *  {
                 *      dialogData.Add(new DialogData($"{Global.EscapeHtml(entry.Name)} ({entry.Id})", entry.Id));
                 *  }
                 * }*/

                Dialogs.Library.CreateDialog(charData.PlayerHandle, DialogId.VehicleList, "Lista posiadanych pojazdów",
                                             dialogColumns, dialogRows, dialogButtons);

                // Dialogs.Library.CreateDialog(charData.PlayerHandle, DialogId.VehicleList, "Twoje pojazdy",
                //    "Wybierz opcję", dialogData, DialogType.List);
            }
            else if (uiType == UiType.VehicleOptions)
            {
                Vehicle vehData = GetVehicleData(vehId);
                if (vehData == null)
                {
                    return;
                }

                List <DialogColumn> dialogColumns = new List <DialogColumn>
                {
                    new DialogColumn("", 90)
                };

                List <DialogRow> dialogRows = new List <DialogRow>
                {
                    new DialogRow("info", new[] { "Informacje o pojeździe" }),
                    new DialogRow("spawn", new[] { "(Un)spawn pojazdu" }),
                    new DialogRow("locate", new[] { "Namierz pojazd" }),
                    new DialogRow("rent", new[] { "Wypożycz pojazd" }),
                    new DialogRow("platetype", new[] { "Wygląd tablicy rejestracyjnej" })
                };

                if (charData.HasAdminDuty)
                {
                    dialogRows.Add(new DialogRow("delete", new[] { "Usuń pojazd" }));
                }

                dialogRows.Add(new DialogRow("back", new[] { "Powrót do listy pojazdów" }));

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

                Account.SetServerData(charData, Account.ServerData.DialogVehicleId, vehData.Id);
                Dialogs.Library.CreateDialog(charData.PlayerHandle, DialogId.VehicleOptions,
                                             "Opcje zarządzania pojazdem", dialogColumns, dialogRows, dialogButtons);
            }
            else if (uiType == UiType.VehicleEditAdmin)
            {
                Vehicle vehData = GetVehicleData(vehId);
                if (vehData == null)
                {
                    return;
                }

                List <DialogColumn> dialogColumns = new List <DialogColumn>
                {
                    new DialogColumn("", 45),
                    new DialogColumn("", 45)
                };

                List <DialogRow> dialogRows = new List <DialogRow>
                {
                    new DialogRow(null, new[] { "UID", vehData.Id.ToString() }),
                    new DialogRow("editName", new[] { "Nazwa", vehData.Name }),
                    new DialogRow("editColor1", new[] { "Kolor 1", vehData.FirstColor.ToString() }),
                    new DialogRow("editColor2", new[] { "Kolor 2", vehData.SecondColor.ToString() })
                };
                string[] dialogButtons = { "Wybierz", "Anuluj" };
                Account.SetServerData(charData, Account.ServerData.DialogVehicleId, vehData.Id);
                Dialogs.Library.CreateDialog(charData.PlayerHandle, DialogId.VehicleEditAdmin, "Edycja pojazdu",
                                             dialogColumns, dialogRows, dialogButtons);
            }
        }
Example #22
0
        public void Command_Oferuj(Client player, string args = "")
        {
            Character charData = Account.GetPlayerData(player);

            if (charData == null)
            {
                return;
            }

            const string legend =
                "/o(feruj) [przedmiot, pojazd, leczenie, naprawe, lakierowanie, montaz, mandat, rp, tatuaz]";

            string[] arguments = Command.GetCommandArguments(args);

            if (arguments.Length < 1)
            {
                Ui.ShowUsage(player, legend);
                return;
            }

            if (Library.DoesPlayerHasActiveOffer(player))
            {
                Ui.ShowError(player, "Posiadasz już aktywną inną ofertę.");
                return;
            }

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

            if (offerType == "przedmiot")
            {
                if (arguments.Length - 1 < 3)
                {
                    Ui.ShowUsage(player, "/o(feruj) przedmiot [ID przedmiotu] [ID gracza] [cena]");
                    return;
                }

                int itemId   = Command.GetNumberFromString(arguments[1]);
                int playerId = Command.GetNumberFromString(arguments[2]);
                int price    = Command.GetNumberFromString(arguments[3]);

                if (itemId == Command.InvalidNumber || playerId == Command.InvalidNumber ||
                    price == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne parametry komendy.");
                    return;
                }

                if (price < 0)
                {
                    Ui.ShowWarning(player, "Kwota oferty musi być większa lub równa 0.");
                    return;
                }

                Character target = Account.GetPlayerDataByServerId(playerId);
                if (target == null)
                {
                    Ui.ShowError(player, "Nie znaleziono gracza o podanym ID.");
                    return;
                }

                if (Library.DoesPlayerHasActiveOffer(target.PlayerHandle))
                {
                    Ui.ShowError(player, "Gracz posiada już inną aktywną ofertę.");
                    return;
                }

                if (Global.GetDistanceBetweenPositions(player.Position, target.PlayerHandle.Position) > 3.0 ||
                    player.Dimension != target.PlayerHandle.Dimension)
                {
                    Ui.ShowError(player, "Gracz jest za daleko.");
                    return;
                }

                ItemEntity itemData = ItemsManager.Items.FirstOrDefault(t => t.Id == itemId);
                if (itemData == null)
                {
                    Ui.ShowError(player, "Nie znaleziono przedmiotu o podanym Id.");
                    return;
                }

                if (!itemData.CheckOwner(charData))
                {
                    Ui.ShowError(player, "Przedmiot nie należy do Ciebie.");
                    return;
                }

                if (itemData.Used)
                {
                    Ui.ShowError(player, "Przedmiot nie może być używany.");
                    return;
                }

                Dictionary <string, object> offerData = new Dictionary <string, object>
                {
                    { "Id", itemData.Id }
                };

                Library.CreateOffer(player, target.PlayerHandle, OfferType.SellItem, (uint)price, offerData,
                                    $"sprzedaż przedmiotu {itemData.Name}");
            }
            else if (offerType == "pojazd")
            {
                if (!player.IsInVehicle)
                {
                    Ui.ShowError(player, "Musisz siedzieć w pojeździe, aby uzyć tej komendy.");
                    return;
                }

                if (arguments.Length - 1 < 2)
                {
                    Ui.ShowUsage(player, "/o(feruj) pojazd [ID gracza] [cena]");
                    return;
                }

                int playerId = Command.GetNumberFromString(arguments[1]);
                int price    = Command.GetNumberFromString(arguments[2]);

                if (playerId == Command.InvalidNumber || price == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne parametry komendy.");
                    return;
                }

                if (price < 0)
                {
                    Ui.ShowWarning(player, "Kwota oferty musi być większa lub równa 0.");
                    return;
                }

                Character target = Account.GetPlayerDataByServerId(playerId);
                if (target == null)
                {
                    Ui.ShowError(player, "Nie znaleziono gracza o podanym ID.");
                    return;
                }

                if (Library.DoesPlayerHasActiveOffer(target.PlayerHandle))
                {
                    Ui.ShowError(player, "Gracz posiada już inną aktywną ofertę.");
                    return;
                }

                if (Global.GetDistanceBetweenPositions(player.Position, target.PlayerHandle.Position) > 3.0 ||
                    player.Dimension != target.PlayerHandle.Dimension)
                {
                    Ui.ShowError(player, "Gracz jest za daleko.");
                    return;
                }

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

                if (vehData.OwnerType != Vehicles.OwnerType.Player || vehData.Owner != charData.Id)
                {
                    Ui.ShowError(player, "Pojazd nie należy do Ciebie.");
                    return;
                }

                Dictionary <string, object> offerData = new Dictionary <string, object>
                {
                    { "Id", vehData.Id }
                };

                Library.CreateOffer(player, target.PlayerHandle, OfferType.SellCar, (uint)price, offerData,
                                    $"sprzedaż pojazdu {vehData.Name}");
            }
            else if (offerType == "leczenie")
            {
                int groupDuty = Groups.Library.GetPlayerGroupDuty(charData);
                if (groupDuty == 0)
                {
                    Ui.ShowError(player, "Nie jesteś na duty żadnej grupy.");
                    return;
                }

                if (!Groups.Library.DoesGroupHasPerm(groupDuty, Permissions.SharedMedHeal))
                {
                    Ui.ShowError(player, "Grupa nie posiada uprawnień do leczenia.");
                    return;
                }

                if (!Groups.Library.DoesPlayerHasPerm(charData, groupDuty, Permissions.SharedMedHeal))
                {
                    Ui.ShowError(player, "Twoja ranga w grupie nie posiada upranień do leczenia.");
                    return;
                }

                if (arguments.Length - 1 < 2)
                {
                    Ui.ShowUsage(player, "/o(feruj) leczenie [ID gracza] [cena]");
                    return;
                }

                int playerId = Command.GetNumberFromString(arguments[1]);
                int price    = Command.GetNumberFromString(arguments[2]);

                if (playerId == Command.InvalidNumber || price == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne parametry komendy.");
                    return;
                }

                if (price < 0)
                {
                    Ui.ShowWarning(player, "Kwota oferty musi być większa lub równa 0.");
                    return;
                }

                Character target = Account.GetPlayerDataByServerId(playerId);
                if (target == null)
                {
                    Ui.ShowError(player, "Nie znaleziono gracza o podanym ID.");
                    return;
                }

                if (Library.DoesPlayerHasActiveOffer(target.PlayerHandle))
                {
                    Ui.ShowError(player, "Gracz posiada już inną aktywną ofertę.");
                    return;
                }

                if (Global.GetDistanceBetweenPositions(player.Position, target.PlayerHandle.Position) > 3.0 ||
                    player.Dimension != target.PlayerHandle.Dimension)
                {
                    Ui.ShowError(player, "Gracz jest za daleko.");
                    return;
                }

                Library.CreateOffer(player, target.PlayerHandle, OfferType.Heal, (uint)price, null, "Leczenie");
            }
            else if (offerType == "naprawe")
            {
                if (arguments.Length - 1 < 2)
                {
                    Ui.ShowUsage(player, "/o(feruj) naprawe [ID gracza] [cena]");
                    return;
                }

                int playerId = Command.GetNumberFromString(arguments[1]);
                int price    = Command.GetNumberFromString(arguments[2]);

                if (playerId == Command.InvalidNumber || price == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne parametry komendy.");
                    return;
                }

                if (price < 0)
                {
                    Ui.ShowWarning(player, "Kwota oferty musi być większa lub równa 0.");
                    return;
                }

                Character target = Account.GetPlayerDataByServerId(playerId);
                if (target == null)
                {
                    Ui.ShowError(player, "Nie znaleziono gracza o podanym ID.");
                    return;
                }

                if (Library.DoesPlayerHasActiveOffer(target.PlayerHandle))
                {
                    Ui.ShowError(player, "Gracz posiada już inną aktywną ofertę.");
                    return;
                }

                if (Global.GetDistanceBetweenPositions(player.Position, target.PlayerHandle.Position) > 3.0 ||
                    player.Dimension != target.PlayerHandle.Dimension)
                {
                    Ui.ShowError(player, "Gracz jest za daleko.");
                    return;
                }

                if (!target.PlayerHandle.IsInVehicle)
                {
                    Ui.ShowError(player, "Gracz nie jest w pojeździe.");
                    return;
                }

                Vehicle vehData = Vehicles.Library.GetVehicleData(target.PlayerHandle.Vehicle);
                if (vehData == null)
                {
                    Ui.ShowError(player, "Pojazd nie jest prawidłowy.");
                    return;
                }

                Dictionary <string, object> data = new Dictionary <string, object>
                {
                    { "vehData", vehData }
                };

                Library.CreateOffer(player, target.PlayerHandle, OfferType.Repair, (uint)price, data,
                                    "Naprawa pojazdu");
            }
            else if (offerType == "tatuaz")
            {
                if (arguments.Length - 1 < 3)
                {
                    Ui.ShowUsage(player, "/o(feruj) tatuaz [ID gracza] [ID tatuazu] [cena]");
                    return;
                }

                int playerId = Command.GetNumberFromString(arguments[1]);
                int tattooId = Command.GetNumberFromString(arguments[2]);
                int price    = Command.GetNumberFromString(arguments[3]);

                if (playerId == Command.InvalidNumber || price == Command.InvalidNumber ||
                    tattooId == Command.InvalidNumber)
                {
                    Ui.ShowError(player, "Podano niepoprawne parametry komendy.");
                    return;
                }

                if (price < 0)
                {
                    Ui.ShowWarning(player, "Kwota oferty musi być większa lub równa 0.");
                    return;
                }

                Character target = Account.GetPlayerDataByServerId(playerId);
                if (target == null)
                {
                    Ui.ShowError(player, "Nie znaleziono gracza o podanym ID.");
                    return;
                }

                if (Library.DoesPlayerHasActiveOffer(target.PlayerHandle))
                {
                    Ui.ShowError(player, "Gracz posiada już inną aktywną ofertę.");
                    return;
                }

                if (Global.GetDistanceBetweenPositions(player.Position, target.PlayerHandle.Position) > 3.0 ||
                    player.Dimension != target.PlayerHandle.Dimension)
                {
                    Ui.ShowError(player, "Gracz jest za daleko.");
                    return;
                }

                TattooRow tattooInfo = Tattoos.Library.GetTattooData(tattooId);
                if (tattooInfo == null)
                {
                    Ui.ShowError(player, "Podano niepoprawne Id tatuażu.");
                    return;
                }

                if (tattooInfo.Sex != target.Sex)
                {
                    Ui.ShowError(player,
                                 $"Tatuaż nie zgadza się z płcią postaci dla której chcesz go zrobić. ({(int) target.Sex})");
                    return;
                }

                if (target.SyncedTattoos.Contains(tattooId))
                {
                    Ui.ShowError(player, "Gracz posiada już taki tatuaż.");
                    return;
                }

                Dictionary <string, object> data = new Dictionary <string, object>
                {
                    { "tattooId", tattooId }
                };

                Library.CreateOffer(player, target.PlayerHandle, OfferType.TattooCreate, (uint)price, data,
                                    $"Nałożenie tatuażu [ID: {tattooId}]");
            }
        }
Example #23
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();
        }
Example #24
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();
            }
        }
Example #25
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.");
            }
        }
Example #26
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();
            }
        }