• Добавляем различные ресурсы в продажу.В архиве сохраняем контакты для получения или готовый ресурс. Вывод средств 20%.

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

Admin

Admin

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

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

Идем в Commands.cs добавляем в любое место:
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 vehicles 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("@numb", vehicle.NumberPlate);
MySQL.Query(cmd);
}
catch (Exception e) { Log.Write("EXCEPTION AT \"ACMD_setfracveh\":\n" + e.ToString(), nLog.Type.Error); }
}

Далее ищем:
C#:
menuItem = new Menu.Item("changekey", Menu.MenuItem.Button);
menuItem.Text = $"Сменить замки";
menu.Add(menuItem);

После него добавляем:
C#:
menuItem = new Menu.Item("parkovka", Menu.MenuItem.Button);
menuItem.Text = $"Припарковать авто";
menu.Add(menuItem);

Ищем:
C#:
case "changekey":

После этого кейса добавляем:
C#:
case "parkovka":
number = menu.Items[0].Text;
var result = MySQL.QueryRead($"SELECT position, rotation FROM vehicles WHERE number='{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;

Затем идем в Selecting.cs там ищем:
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#:
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;

Затем идем в Main.cs ищем там:
C#:
public CarInfo(string number, VehicleHash model, Vector3 position, Vector3 rotation, int color1, int color2, int price)

И под этим кейсом пишем:
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;
}
}

Затем идем в Vehicle.cs ищем там:
C#:
public static bool Save(string Number)

И полностью меняем на:
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 vehicles 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("@numb", Number);
MySQL.Query(cmd);
Log.Write("Saved: " + Number);
return true;
}

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

И меняем на:
JavaScript:
case 0:
case 1:
case 2:
case 3:
case 4:
if (entity == null) return;
mp.events.callRemote('vehicleSelected', entity, index);
return;

Ищем в файле circle.css:
CSS:
.circle .carinv{background-image: url('../icons/carinv.png');}

После него добавляем:
CSS:
.circle .setautopos{background-image: url('../icons/setautopos.png');}

Затем идем в circle.js там ищем:
JavaScript:
"carinv":"Инвентарь",

Под него вставляем:
JavaScript:
"setautopos":"Припарковать авто",

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

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

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