• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Мануал Парковка Транспорта | RedAge

Yukkii

Разработчик
Автор темы
VIP
2 Апр 2021
109
19
58
Суть данного скрипта, вы можете нажать меню транспорта, и припарковать его, когда выйдете с сервера он исчезнет, когда зайдете то в телефоне нажмете Дом -> Машина -> Припаркованное авто, она заставится на том самом месте где вы его припарковали.

1. Делаем SQL запрос, в базу данных, абы после перезагрузки сервера не было ошибок.
SQL:
SQL:
CREATE TABLE IF NOT EXISTS [ICODE]vehicles[/ICODE] (
  [ICODE]idkey[/ICODE] int(11) NOT NULL AUTO_INCREMENT,
  [ICODE]holder[/ICODE] varchar(155) NOT NULL,
  [ICODE]model[/ICODE] varchar(155) NOT NULL,
  [ICODE]health[/ICODE] int(11) NOT NULL,
  [ICODE]fuel[/ICODE] int(11) NOT NULL,
  [ICODE]components[/ICODE] text NOT NULL,
  [ICODE]items[/ICODE] text NOT NULL,
  [ICODE]position[/ICODE] varchar(255) DEFAULT NULL,
  [ICODE]rotation[/ICODE] varchar(255) DEFAULT NULL,
  [ICODE]keynum[/ICODE] int(11) NOT NULL DEFAULT 0,
  [ICODE]dirt[/ICODE] float NOT NULL DEFAULT 0,
  [ICODE]price[/ICODE] int(11) NOT NULL,
  [ICODE]number[/ICODE] varchar(155) NOT NULL,
  PRIMARY KEY ([ICODE]idkey[/ICODE])
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. Идем в Commands.cs добавляем в любое место
C#:
C#:
[Command("setveh")]
        public static void CMD_setveh(Player player, Vehicle vehicle)
        {
            try
            {
                Vector3 pos = NAPI.Entity.GetEntityPosition(vehicle) + new Vector3(0, 0, 0.5);
                Vector3 rot = NAPI.Entity.GetEntityRotation(vehicle);
                VehicleManager.VehicleData data = VehicleManager.Vehicles[vehicle.NumberPlate];
                string items = JsonConvert.SerializeObject(data.Items);
                MySqlCommand cmd = new MySqlCommand
                {
                    CommandText = "UPDATE [ICODE]vehicles[/ICODE] SET holder=@hold, model=@model, health=@hp, fuel=@fuel, components=@comp, items=@it,position=@pos,rotation=@rot,keynum=@keyn,dirt=@dirt WHERE number=@numb"
                };
                cmd.Parameters.AddWithValue("@hold", data.Holder);
                cmd.Parameters.AddWithValue("@model", data.Model);
                cmd.Parameters.AddWithValue("@hp", data.Health);
                cmd.Parameters.AddWithValue("@fuel", data.Fuel);
                cmd.Parameters.AddWithValue("@comp", JsonConvert.SerializeObject(data.Components));
                cmd.Parameters.AddWithValue("@it", items);
                cmd.Parameters.AddWithValue("@pos", JsonConvert.SerializeObject(pos));
                cmd.Parameters.AddWithValue("@rot", JsonConvert.SerializeObject(rot));
                cmd.Parameters.AddWithValue("@keyn", data.KeyNum);
                cmd.Parameters.AddWithValue("@dirt", (byte)data.Dirt);
                cmd.Parameters.AddWithValue("[USER=3249]@numb[/USER]", vehicle.NumberPlate);
                MySQL.Query(cmd);
            }
            catch (Exception e) { Log.Write("EXCEPTION AT \"ACMD_setfracveh\":\n" + e.ToString(), nLog.Type.Error); }
        }
далее ищем:
C#:
C#:
menuItem = new Menu.Item("changekey", Menu.MenuItem.Button);
  menuItem.Text = $"Сменить замки";
  menu.Add(menuItem);
После него добавляем
C#:
C#:
menuItem = new Menu.Item("parkovka", Menu.MenuItem.Button);
            menuItem.Text = $"Припарковать авто";
            menu.Add(menuItem);
Ищем
C#:
C#:
case "changekey":
После этого кейса добавляем
C#:
C#:
case "parkovka":
                    number = menu.Items[0].Text;
                    var result = MySQL.QueryRead($"SELECT [ICODE]position[/ICODE], [ICODE]rotation[/ICODE] FROM [ICODE]vehicles[/ICODE] WHERE [ICODE]number[/ICODE]='{number}'");
                    foreach (DataRow Row in result.Rows)
                    {
                        var position = JsonConvert.DeserializeObject<Vector3>(Row["position"].ToString());
                        var rotation = JsonConvert.DeserializeObject<Vector3>(Row["rotation"].ToString());
                        garage = GarageManager.Garages[GetHouse(player).GarageID];
                        if (number != null)
                        {
                            Notify.Send(player, NotifyType.Info, NotifyPosition.BottomCenter, $"Ваша машина ", 3000);
                            NAPI.Task.Run(() =>
                            {
                                garage.SpawnCarAtPosition(player, number, position, rotation);
                                Trigger.ClientEvent(player, "createWaypoint", position.X, position.Y);
                            }, delayTime: 0);

                        }
                    }
                    return;

3. Затем идем в Selecting.cs там ищем
C#:
C#:
case 3:
                        if (player.IsInVehicle)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете открыть инвентарь, находясь в машине", 3000);
                            return;
                        }
                        if (NAPI.Data.GetEntityData(vehicle, "ACCESS") == "WORK" || vehicle.Class == 13 || vehicle.Class == 8)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Эта транспортное средство не поддерживает инвентарь", 3000);
                            return;
                        }
                        if (Main.Players[player].AdminLVL == 0 && VehicleStreaming.GetDoorState(vehicle, DoorID.DoorTrunk) == DoorState.DoorClosed)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете открыть инвентарь машины, пока багажник закрыт", 3000);
                            return;
                        }
                        if (vehicle.GetData<bool>("BAGINUSE") == true)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Дождитесь, пока другой человек перестанет пользоваться багажником.", 3000);
                            return;
                        }
                        vehicle.SetData("BAGINUSE", true);
                        GUI.Dashboard.OpenOut(player, vehicle.GetData<List<nItem>>("ITEMS"), "Багажник", 2);
                        player.SetData("SELECTEDVEH", vehicle);
                        return;
После этого кейса добавляем
C#:
C#:
case 4:
                        if (player.IsInVehicle)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете припарковать машину, находясь в ней", 3000);
                            return;
                        }
                        Commands.CMD_setveh(player, vehicle);
                        Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Вы припарковали свою машину", 3000);
                        return;

4. Затем идем в Main.cs ищем там
C#:
C#:
public CarInfo(string number, VehicleHash model, Vector3 position, Vector3 rotation, int color1, int color2, int price)
И под этим кейсом пишем
C#:
C#:
public class spawncars
    {
        public string Number { get; }
        public Vector3 Position { get; }
        public Vector3 Rotation { get; }

        public spawncars(string number, Vector3 position, Vector3 rotation)
        {
            Number = number;
            Position = position;
            Rotation = rotation;
        }
    }

5. Затем идем в Vehicle.cs ищем там
C#:
C#:
public static bool Save(string Number)
И полностью меняем на
C#:
C#:
public static bool Save(string Number)
        {
            if (Vehicles.ContainsKey(Number)) return false;
            VehicleData data = Vehicles[Number];
            string items = JsonConvert.SerializeObject(data.Items);
            if (string.IsNullOrEmpty(items) || items == null) items = "[]";
            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "UPDATE [ICODE]vehicles[/ICODE] SET holder=@hold, model=@model, health=@hp, fuel=@fuel, components=@comp, items=@it,position=@pos,rotation=@rot,keynum=@keyn,dirt=@dirt WHERE number=@numb";
            cmd.Parameters.AddWithValue("@hold", data.Holder);
            cmd.Parameters.AddWithValue("@model", data.Model);
            cmd.Parameters.AddWithValue("@hp", data.Health);
            cmd.Parameters.AddWithValue("@fuel", data.Fuel);
            cmd.Parameters.AddWithValue("@comp", JsonConvert.SerializeObject(data.Components));
            cmd.Parameters.AddWithValue("@it", items);
            cmd.Parameters.AddWithValue("@pos", JsonConvert.SerializeObject(data.Position));
            cmd.Parameters.AddWithValue("@rot", JsonConvert.SerializeObject(data.Rotation));
            cmd.Parameters.AddWithValue("@keyn", data.KeyNum);
            cmd.Parameters.AddWithValue("@dirt", (byte)data.Dirt);
            cmd.Parameters.AddWithValue("[USER=3249]@numb[/USER]", Number);
            MySQL.Query(cmd);
            Log.Write("Saved: " + Number);
            return true;
        }

6. Затем идем в клиентскую часть Заходим в client_packages\cirle.js там ищем
JavaScript:
JavaScript:
case "Машина":
                switch (index) {
case 0:
                    case 1:
                    case 2:
                    case 3:
                        if (entity == null) return;
                        mp.events.callRemote('vehicleSelected', entity, index);
                        return;
И меняем на
JavaScript:
JavaScript:
case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                        if (entity == null) return;
                        mp.events.callRemote('vehicleSelected', entity, index);
                        return;

7. Ищем в файле circle.css
CSS:
CSS:
.circle .carinv{background-image: url('../icons/carinv.png');}
После него добавляем
CSS:
CSS:
.circle .setautopos{background-image: url('../icons/setautopos.png');}
8. Затем идем в circle.js там ищем
JavaScript:
JavaScript:
"carinv":"Инвентарь",
Под него вставляем
JavaScript:
JavaScript:
"setautopos":"Припарковать авто",

JavaScript:
Затем ищем там же
JSON:
"Машина":
[
  ["hood", "trunk", "doors", "carinv"],
],
И меняем на
JSON:
JSON:
"Машина":
    [
        ["hood", "trunk", "doors", "carinv", "setautopos"],
    ],


Что бы добавить свою картинку в меню взаимодействия с машиной, нужно добавить фотографию c названием setautopos в формате .png в папку icons

Автор Системы - Рандомчик
Информация и сам скрипт был взят с другого форума
 
Последнее редактирование модератором:

745164nk

Специалист
17 Сен 2020
104
15
79
Суть данного скрипта, вы можете нажать меню транспорта, и припарковать его, когда выйдете с сервера он исчезнет, когда зайдете то в телефоне нажмете Дом -> Машина -> Припаркованное авто, она заставится на том самом месте где вы его припарковали.

1. Делаем SQL запрос, в базу данных, абы после перезагрузки сервера не было ошибок.
SQL:
SQL:
CREATE TABLE IF NOT EXISTS [ICODE]vehicles[/ICODE] (
  [ICODE]idkey[/ICODE] int(11) NOT NULL AUTO_INCREMENT,
  [ICODE]holder[/ICODE] varchar(155) NOT NULL,
  [ICODE]model[/ICODE] varchar(155) NOT NULL,
  [ICODE]health[/ICODE] int(11) NOT NULL,
  [ICODE]fuel[/ICODE] int(11) NOT NULL,
  [ICODE]components[/ICODE] text NOT NULL,
  [ICODE]items[/ICODE] text NOT NULL,
  [ICODE]position[/ICODE] varchar(255) DEFAULT NULL,
  [ICODE]rotation[/ICODE] varchar(255) DEFAULT NULL,
  [ICODE]keynum[/ICODE] int(11) NOT NULL DEFAULT 0,
  [ICODE]dirt[/ICODE] float NOT NULL DEFAULT 0,
  [ICODE]price[/ICODE] int(11) NOT NULL,
  [ICODE]number[/ICODE] varchar(155) NOT NULL,
  PRIMARY KEY ([ICODE]idkey[/ICODE])
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. Идем в Commands.cs добавляем в любое место
C#:
C#:
[Command("setveh")]
        public static void CMD_setveh(Player player, Vehicle vehicle)
        {
            try
            {
                Vector3 pos = NAPI.Entity.GetEntityPosition(vehicle) + new Vector3(0, 0, 0.5);
                Vector3 rot = NAPI.Entity.GetEntityRotation(vehicle);
                VehicleManager.VehicleData data = VehicleManager.Vehicles[vehicle.NumberPlate];
                string items = JsonConvert.SerializeObject(data.Items);
                MySqlCommand cmd = new MySqlCommand
                {
                    CommandText = "UPDATE [ICODE]vehicles[/ICODE] SET holder=@hold, model=@model, health=@hp, fuel=@fuel, components=@comp, items=@it,position=@pos,rotation=@rot,keynum=@keyn,dirt=@dirt WHERE number=@numb"
                };
                cmd.Parameters.AddWithValue("@hold", data.Holder);
                cmd.Parameters.AddWithValue("@model", data.Model);
                cmd.Parameters.AddWithValue("@hp", data.Health);
                cmd.Parameters.AddWithValue("@fuel", data.Fuel);
                cmd.Parameters.AddWithValue("@comp", JsonConvert.SerializeObject(data.Components));
                cmd.Parameters.AddWithValue("@it", items);
                cmd.Parameters.AddWithValue("@pos", JsonConvert.SerializeObject(pos));
                cmd.Parameters.AddWithValue("@rot", JsonConvert.SerializeObject(rot));
                cmd.Parameters.AddWithValue("@keyn", data.KeyNum);
                cmd.Parameters.AddWithValue("@dirt", (byte)data.Dirt);
                cmd.Parameters.AddWithValue("[USER=3249]@numb[/USER]", vehicle.NumberPlate);
                MySQL.Query(cmd);
            }
            catch (Exception e) { Log.Write("EXCEPTION AT \"ACMD_setfracveh\":\n" + e.ToString(), nLog.Type.Error); }
        }
далее ищем:
C#:
C#:
menuItem = new Menu.Item("changekey", Menu.MenuItem.Button);
  menuItem.Text = $"Сменить замки";
  menu.Add(menuItem);
После него добавляем
C#:
C#:
menuItem = new Menu.Item("parkovka", Menu.MenuItem.Button);
            menuItem.Text = $"Припарковать авто";
            menu.Add(menuItem);
Ищем
C#:
C#:
case "changekey":
После этого кейса добавляем
C#:
C#:
case "parkovka":
                    number = menu.Items[0].Text;
                    var result = MySQL.QueryRead($"SELECT [ICODE]position[/ICODE], [ICODE]rotation[/ICODE] FROM [ICODE]vehicles[/ICODE] WHERE [ICODE]number[/ICODE]='{number}'");
                    foreach (DataRow Row in result.Rows)
                    {
                        var position = JsonConvert.DeserializeObject<Vector3>(Row["position"].ToString());
                        var rotation = JsonConvert.DeserializeObject<Vector3>(Row["rotation"].ToString());
                        garage = GarageManager.Garages[GetHouse(player).GarageID];
                        if (number != null)
                        {
                            Notify.Send(player, NotifyType.Info, NotifyPosition.BottomCenter, $"Ваша машина ", 3000);
                            NAPI.Task.Run(() =>
                            {
                                garage.SpawnCarAtPosition(player, number, position, rotation);
                                Trigger.ClientEvent(player, "createWaypoint", position.X, position.Y);
                            }, delayTime: 0);

                        }
                    }
                    return;

3. Затем идем в Selecting.cs там ищем
C#:
C#:
case 3:
                        if (player.IsInVehicle)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете открыть инвентарь, находясь в машине", 3000);
                            return;
                        }
                        if (NAPI.Data.GetEntityData(vehicle, "ACCESS") == "WORK" || vehicle.Class == 13 || vehicle.Class == 8)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Эта транспортное средство не поддерживает инвентарь", 3000);
                            return;
                        }
                        if (Main.Players[player].AdminLVL == 0 && VehicleStreaming.GetDoorState(vehicle, DoorID.DoorTrunk) == DoorState.DoorClosed)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете открыть инвентарь машины, пока багажник закрыт", 3000);
                            return;
                        }
                        if (vehicle.GetData<bool>("BAGINUSE") == true)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Дождитесь, пока другой человек перестанет пользоваться багажником.", 3000);
                            return;
                        }
                        vehicle.SetData("BAGINUSE", true);
                        GUI.Dashboard.OpenOut(player, vehicle.GetData<List<nItem>>("ITEMS"), "Багажник", 2);
                        player.SetData("SELECTEDVEH", vehicle);
                        return;
После этого кейса добавляем
C#:
C#:
case 4:
                        if (player.IsInVehicle)
                        {
                            Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, "Вы не можете припарковать машину, находясь в ней", 3000);
                            return;
                        }
                        Commands.CMD_setveh(player, vehicle);
                        Notify.Send(player, NotifyType.Success, NotifyPosition.BottomCenter, "Вы припарковали свою машину", 3000);
                        return;

4. Затем идем в Main.cs ищем там
C#:
C#:
public CarInfo(string number, VehicleHash model, Vector3 position, Vector3 rotation, int color1, int color2, int price)
И под этим кейсом пишем
C#:
C#:
public class spawncars
    {
        public string Number { get; }
        public Vector3 Position { get; }
        public Vector3 Rotation { get; }

        public spawncars(string number, Vector3 position, Vector3 rotation)
        {
            Number = number;
            Position = position;
            Rotation = rotation;
        }
    }

5. Затем идем в Vehicle.cs ищем там
C#:
C#:
public static bool Save(string Number)
И полностью меняем на
C#:
C#:
public static bool Save(string Number)
        {
            if (Vehicles.ContainsKey(Number)) return false;
            VehicleData data = Vehicles[Number];
            string items = JsonConvert.SerializeObject(data.Items);
            if (string.IsNullOrEmpty(items) || items == null) items = "[]";
            MySqlCommand cmd = new MySqlCommand();
            cmd.CommandText = "UPDATE [ICODE]vehicles[/ICODE] SET holder=@hold, model=@model, health=@hp, fuel=@fuel, components=@comp, items=@it,position=@pos,rotation=@rot,keynum=@keyn,dirt=@dirt WHERE number=@numb";
            cmd.Parameters.AddWithValue("@hold", data.Holder);
            cmd.Parameters.AddWithValue("@model", data.Model);
            cmd.Parameters.AddWithValue("@hp", data.Health);
            cmd.Parameters.AddWithValue("@fuel", data.Fuel);
            cmd.Parameters.AddWithValue("@comp", JsonConvert.SerializeObject(data.Components));
            cmd.Parameters.AddWithValue("@it", items);
            cmd.Parameters.AddWithValue("@pos", JsonConvert.SerializeObject(data.Position));
            cmd.Parameters.AddWithValue("@rot", JsonConvert.SerializeObject(data.Rotation));
            cmd.Parameters.AddWithValue("@keyn", data.KeyNum);
            cmd.Parameters.AddWithValue("@dirt", (byte)data.Dirt);
            cmd.Parameters.AddWithValue("[USER=3249]@numb[/USER]", Number);
            MySQL.Query(cmd);
            Log.Write("Saved: " + Number);
            return true;
        }

6. Затем идем в клиентскую часть Заходим в client_packages\cirle.js там ищем
JavaScript:
JavaScript:
case "Машина":
                switch (index) {
case 0:
                    case 1:
                    case 2:
                    case 3:
                        if (entity == null) return;
                        mp.events.callRemote('vehicleSelected', entity, index);
                        return;
И меняем на
JavaScript:
JavaScript:
case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                        if (entity == null) return;
                        mp.events.callRemote('vehicleSelected', entity, index);
                        return;

7. Ищем в файле circle.css
CSS:
CSS:
.circle .carinv{background-image: url('../icons/carinv.png');}
После него добавляем
CSS:
CSS:
.circle .setautopos{background-image: url('../icons/setautopos.png');}
8. Затем идем в circle.js там ищем
JavaScript:
JavaScript:
"carinv":"Инвентарь",
Под него вставляем
JavaScript:
JavaScript:
"setautopos":"Припарковать авто",

JavaScript:
Затем ищем там же
JSON:
"Машина":
[
  ["hood", "trunk", "doors", "carinv"],
],
И меняем на
JSON:
JSON:
"Машина":
    [
        ["hood", "trunk", "doors", "carinv", "setautopos"],
    ],


Что бы добавить свою картинку в меню взаимодействия с машиной, нужно добавить фотографию c названием setautopos в формате .png в папку icons

Автор Системы - Рандомчик
Информация и сам скрипт был взят с другого форума
Из за него тюнинг авто слетает а если купишь и перезаайдешь он слетит
 

DuleM

Участник портала
15 Апр 2023
3
1
15
MySqlConnector.MySqlException (0x80004005): Parameter '@numb' must be defined. To use this as a variable, set 'Allow User Variables=true' in the connection string.
at int MySqlConnector.Core.StatementPreparer.GetParameterIndex(string name) in /_/src/MySqlConnector/Core/StatementPreparer.cs:line 46