Мануал Система тест-драйва авто в автосалоне для мода RedAge RolePlay (NeptuneEvo) | GTA 5 RP

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
176
71
37
В данном мануале мы установим систему тест-драйва для автосалона в мод RedAge RolePlay (NeptuneEvo).
Если у Вас возникли проблемы с этой системой или просто что-то не получается - пишите в эту тему, постараюсь помочь.

Тест-драйв проходит в другом измерении (dimension), прерывается при выходе из машины.

В файле NeptuneEvo/Core/Carroom.cs добавляем два новых серверных эвента (в пустое место, можете добавить рядом с другими похожими строчками):
Внимание! Один эвент enterCarroom уже есть в RedAge RP, вам необходимо его заменить на новый, старый удалить.

C#:
[ServerEvent(Event.PlayerExitVehicle)] public void Event_OnPlayerExitVehicle(Client player, Vehicle vehicle) {
  try {
    if (!player.HasData("CARROOMTEST")) return;
    enterCarroom(player, "CARROOMTEST");
    var veh = player.GetData("CARROOMTEST");
    veh.Delete();
    player.ResetData("CARROOMTEST");
  } catch(Exception e) {
    Log.Write("PlayerExitVehicle: " + e.Message, nLog.Type.Error);
  }
}
public static void enterCarroom(Client player, string name) {
  if (NAPI.Player.IsPlayerInAnyVehicle(player) && player.HasData("CARROOMTEST") == false) return;
  Main.Players[player].ExteriorPos = player.Position;
  NAPI.Entity.SetEntityPosition(player, new Vector3(CamPosition.X, CamPosition.Y - 2, CamPosition.Z));
  NAPI.Entity.SetEntityDimension(player, 1);
  player.FreezePosition = true;
  player.SetData("INTERACTIONCHECK", 0);
  Trigger.ClientEvent(player, "carRoom");
  OpenCarromMenu(player, BusinessManager.BizList[player.GetData("CARROOMID")].Type);
} [RemoteEvent("carroomTestDrive")] public static void RemoteEvent_carroomTestDrive(Client player, string vName, string color) {
  try {
    if (!player.HasData("CARROOMID")) return;
    player.FreezePosition = false;
    Trigger.ClientEvent(player, "destroyCamera");
    uint mydim = (uint)(player.Value + 400);
    NAPI.Entity.SetEntityDimension(player, mydim);
    VehicleHash vh = (VehicleHash) NAPI.Util.GetHashKey(vName);
    var veh = NAPI.Vehicle.CreateVehicle(vh, player.Position, player.Rotation.Z, 0, 0);
    veh.Dimension = mydim;
    veh.NumberPlate = "TESTDRIVE";
    veh.PrimaryColor = 131;
    veh.SecondaryColor = 131;
    veh.SetData("BY", player.Name);
    VehicleStreaming.SetEngineState(veh, true);
    NAPI.Player.SetPlayerIntoVehicle(player, veh, -1);
    player.SetData("CARROOMTEST", veh);
    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $ "CARROOMID - " + player.GetData("CARROOMID"), 3000);
  } catch(Exception e) {
    Log.Write("TestDrive: " + e.Message, nLog.Type.Error);
  }
}
Переходим к клиенту. В файле client_packages/cef/js/auto.js находим строчку buy: function() и ниже ее добавляем новое событие тестдрайва:

JavaScript:
testdrive: function() {
    console.log('testdriveAuto');
    mp.trigger('testdriveAuto');
},
В файле client_packages/menus.js добавляем новый клиентский эвент:

JavaScript:
mp.events.add('testdriveAuto', () => {
    if (new Date().getTime() - global.lastCheck < 50) return;
    global.lastCheck = new Date().getTime();
    global.menuClose();
    global.menu.execute('auto.active=0');
    mp.events.callRemote('carroomTestDrive', auto.model, auto.color);
    if (auto.entity == null) return;
    auto.entity.destroy();
    auto.entity = null;
})
Переходим к визуальной части. Внимание! Если у вас кастомный интерфейс то делайте кнопки и стили под себя, ниже предоставлен код под стандартный RedAge RP.

В файле client_packages/cef/menu.html находим строчку @click="buy" (это кнопка покупки авто) ниже ее добавляем кнопку тестдрайва:

HTML:
<div @click="testdrive" class="btn testdrive">Тест-драйв</div>
В файле client_packages/cef/css/auto.css в самый конец добавляем стили для нашей кнопки желтого цвета:

CSS:
.auto .testdrive { border-color: #ffdb00; margin-bottom: 10px; } .auto .testdrive:hover { background-color: #ffce00; }
Готово. Чтобы изменить координаты появления машины на тестдрайве редактируйте RemoteEvent - carroomTestDrive в файле NeptuneEvo/Core/Carroom.cs

находим строку:
C#:
 var veh = NAPI.Vehicle.CreateVehicle(vh, player.Position, player.Rotation.Z, 0, 0);
меняем на:
C#:
var veh = NAPI.Vehicle.CreateVehicle(vh, new Vector3(-18.867155, -1109.2737, 26.70288), player.Rotation.Z, 0, 0);
 
Последнее редактирование:
  • Like
Реакции: GoodLuck и GLHF

Daston

Модератор
Команда форума
28
11
12
Чтобы изменить место спавна автомобиля заходим в Carroom.cs
Находим строчку
C#:
var veh = NAPI.Vehicle.CreateVehicle(vh, player.Position, player.Rotation.Z, 0, 0);
Заменяем player.Position на new Vector3(0, 0, 0), где нули - ваши координаты
 
  • OK
Реакции: Harland David Sanders

RoliMoli

Новый участник
13
0
1
при нажатии на кнопку машина не спавнится а в логах вот что перепроверил всё норм вроде. единственное в carrome при сборка выдавало 3 ошибки из за символа $ я его удалил и ток тогда сборка построилась и собр.
 

Вложения

Crazy_Man

Участник портала
16
2
12
как сделать что бы и ротацию спавна авто сделать? так как авто на тесте появляется по разному
 

Harland David Sanders

Куратор портала
Автор темы
Команда форума
Куратор портала
176
71
37
Решение проблемы с крашем сервера из-за быстрого выхода из машины:

Ищем данные строки:
C#:
[ServerEvent(Event.PlayerExitVehicle)] public void Event_OnPlayerExitVehicle(Client player, Vehicle vehicle)
и заменяем их на:
C#:
[ServerEvent(Event.PlayerExitVehicleAttempt)] public void Event_OnPlayerExitVehicleAttempt(Client player, Vehicle vehicle)
 

Alex

Участник портала
5
0
10
а тепери пишет как и первый Рас не понятно почму так то
1601874670413.png
 

Alex

Участник портала
5
0
10
Я ПРОСТО НЕ ЗАНИМАЮСЬ ПРОГРАММИРОВАНИЕ И НЕ МОГУ УБРАТЬ ИЁ
 

GoodLuck

Участник портала
29
4
12
В данном мануале мы установим систему тест-драйва для автосалона в мод RedAge RolePlay (NeptuneEvo).
Если у Вас возникли проблемы с этой системой или просто что-то не получается - пишите в эту тему, постараюсь помочь.

Тест-драйв проходит в другом измерении (dimension), прерывается при выходе из машины.

В файле NeptuneEvo/Core/Carroom.cs добавляем два новых серверных эвента (в пустое место, можете добавить рядом с другими похожими строчками):
Внимание! Один эвент enterCarroom уже есть в RedAge RP, вам необходимо его заменить на новый, старый удалить.

C#:
[ServerEvent(Event.PlayerExitVehicle)] public void Event_OnPlayerExitVehicle(Client player, Vehicle vehicle) {
  try {
    if (!player.HasData("CARROOMTEST")) return;
    enterCarroom(player, "CARROOMTEST");
    var veh = player.GetData("CARROOMTEST");
    veh.Delete();
    player.ResetData("CARROOMTEST");
  } catch(Exception e) {
    Log.Write("PlayerExitVehicle: " + e.Message, nLog.Type.Error);
  }
}
public static void enterCarroom(Client player, string name) {
  if (NAPI.Player.IsPlayerInAnyVehicle(player) && player.HasData("CARROOMTEST") == false) return;
  Main.Players[player].ExteriorPos = player.Position;
  NAPI.Entity.SetEntityPosition(player, new Vector3(CamPosition.X, CamPosition.Y - 2, CamPosition.Z));
  NAPI.Entity.SetEntityDimension(player, 1);
  player.FreezePosition = true;
  player.SetData("INTERACTIONCHECK", 0);
  Trigger.ClientEvent(player, "carRoom");
  OpenCarromMenu(player, BusinessManager.BizList[player.GetData("CARROOMID")].Type);
} [RemoteEvent("carroomTestDrive")] public static void RemoteEvent_carroomTestDrive(Client player, string vName, string color) {
  try {
    if (!player.HasData("CARROOMID")) return;
    player.FreezePosition = false;
    Trigger.ClientEvent(player, "destroyCamera");
    uint mydim = (uint)(player.Value + 400);
    NAPI.Entity.SetEntityDimension(player, mydim);
    VehicleHash vh = (VehicleHash) NAPI.Util.GetHashKey(vName);
    var veh = NAPI.Vehicle.CreateVehicle(vh, player.Position, player.Rotation.Z, 0, 0);
    veh.Dimension = mydim;
    veh.NumberPlate = "TESTDRIVE";
    veh.PrimaryColor = 131;
    veh.SecondaryColor = 131;
    veh.SetData("BY", player.Name);
    VehicleStreaming.SetEngineState(veh, true);
    NAPI.Player.SetPlayerIntoVehicle(player, veh, -1);
    player.SetData("CARROOMTEST", veh);
    Notify.Send(player, NotifyType.Error, NotifyPosition.BottomCenter, $ "CARROOMID - " + player.GetData("CARROOMID"), 3000);
  } catch(Exception e) {
    Log.Write("TestDrive: " + e.Message, nLog.Type.Error);
  }
}
Переходим к клиенту. В файле client_packages/cef/js/auto.js находим строчку buy: function() и ниже ее добавляем новое событие тестдрайва:

JavaScript:
testdrive: function() {
    console.log('testdriveAuto');
    mp.trigger('testdriveAuto');
},
В файле client_packages/menus.js добавляем новый клиентский эвент:

JavaScript:
mp.events.add('testdriveAuto', () => {
    if (new Date().getTime() - global.lastCheck < 50) return;
    global.lastCheck = new Date().getTime();
    global.menuClose();
    global.menu.execute('auto.active=0');
    mp.events.callRemote('carroomTestDrive', auto.model, auto.color);
    if (auto.entity == null) return;
    auto.entity.destroy();
    auto.entity = null;
})
Переходим к визуальной части. Внимание! Если у вас кастомный интерфейс то делайте кнопки и стили под себя, ниже предоставлен код под стандартный RedAge RP.

В файле client_packages/cef/menu.html находим строчку @click="buy" (это кнопка покупки авто) ниже ее добавляем кнопку тестдрайва:

HTML:
<div @click="testdrive" class="btn testdrive">Тест-драйв</div>
В файле client_packages/cef/css/auto.css в самый конец добавляем стили для нашей кнопки желтого цвета:

CSS:
.auto .testdrive { border-color: #ffdb00; margin-bottom: 10px; } .auto .testdrive:hover { background-color: #ffce00; }
Готово. Чтобы изменить координаты появления машины на тестдрайве редактируйте RemoteEvent - carroomTestDrive в файле NeptuneEvo/Core/Carroom.cs

находим строку:
C#:
 var veh = NAPI.Vehicle.CreateVehicle(vh, player.Position, player.Rotation.Z, 0, 0);
меняем на:
C#:
var veh = NAPI.Vehicle.CreateVehicle(vh, new Vector3(-18.867155, -1109.2737, 26.70288), player.Rotation.Z, 0, 0);
Исправь, в ивенте не нужен $
 

Alex

Участник портала
5
0
10
я у же уберал это $ но пишет CS0246 C# The type or namespace name 'player' could not be found (are you missing a using directive or an assembly reference?
 

Вложения