JS Аренда транспорта

Voldemor

Senior Developer
Скриптер
АРЕНДА ТРАНСПОРТА
Вчера был стрим на канале, там учили создавать "Аренду транспорта".
Я решил сделать свою версию этого функционала, с использованием интерфейса.
Все исходники я оставлю с архиве.
ВАЖНО: Это не считаеться готовой системой.
Клиент:
JavaScript:
let player =  mp.players.local
let cef = mp.browsers.new("package://CEF/index.html");


//значек на карте
let blip = mp.blips.new(559, new mp.Vector3(-192.78813, -812.370, 30.454),
{
    name: "Оренда транспорта",
    scale: .9,
    shortRange: true,
});
//Пед на карте
let ped = mp.peds.new(
    mp.game.joaat('ig_barry'),
    new mp.Vector3(-192.78813, -812.370, 30.454),
    100.0, // поворот педа (сторона в которую он смотрит)
    mp.players.local.dimension
);
ped.taskStartScenarioInPlace('WORLD_HUMAN_DRINKING_FACILITY', -1, true) // сценарий для педа.(держит кофе)

const posVeh = [
    {x: -187.34344482421875, y: -830.1533813476562, z: 30.161867141723633},
    {x: -187.55203247070312, y: -832.10546875, z: 30.056175231933594},
    {x: -188.21929931640625, y: -834.506103515625, z: 29.926776885986328},
    {x: -189.5008087158203, y: -837.4715576171875, z: 29.779003143310547},
    {x: -190.56727600097656, y: -841.0464477539062, z: 29.58740997314453}
]

//Функция открытия меню для оренды
function opentMenu() {
    cef.execute(`rent.openRent = true`)
    mp.gui.cursor.visible = true
    player.freezePosition(true);
    player.setAlpha(0);
}

//Функция закрытия меню для оренды
mp.events.add('closeRentMenu.client', () => {
    cef.execute(`rent.openRent = false`)
    mp.gui.cursor.visible = false
    player.freezePosition(false);
    player.setAlpha(255);
})

//Находясь в кулшейпе. Нажимаю клавишу Е. Открываеться CEF
mp.events.add('openRentMenu.client', () => {
    mp.keys.bind(0x45, true, opentMenu );
})

//Если игрок не находится в шейпе. Не даём ему возможность открыть CEF
mp.events.add('banRentMenu.client', () => {
    mp.keys.unbind(0x45, true, opentMenu );
})


let status = false //отвечает за то, активна ли оренда ТС. false - нет. true - да
mp.events.add('acceptRent.client', () => {
    if (status != false) {
        return mp.game.graphics.notify('~r~Вы уже орендовали скутер')
    }
    status = true
    mp.events.callRemote('acceptRent.server')
})

//когда даймер закончился то делаем статус ложным, что бы игрок мог ещё раз его орендовать.
mp.events.add('endRentTime.client', () => {
    status = false
})

Сервер:
JavaScript:
let rentShape = mp.colshapes.newSphere(-193.1897430419922, -812.0250244140625, 30.4540, 1);
//Вход игрока в шейп
function playerEnterRentShape(player, shape) {
  if(shape == rentShape) {
    player.call('openRentMenu.client')
  }
}
//Выходи игрока из шейпа
function playerExitRentShape(player, shape) {
    if(shape == rentShape) {
      player.call('banRentMenu.client')
    }
  }

mp.events.add("playerEnterColshape", playerEnterRentShape);
mp.events.add("playerExitColshape", playerExitRentShape);

const posVeh = [
  {x: -187.34344482421875, y: -830.1533813476562, z: 30.161867141723633},
  {x: -187.55203247070312, y: -832.10546875, z: 30.056175231933594},
  {x: -188.21929931640625, y: -834.506103515625, z: 29.926776885986328},
  {x: -189.5008087158203, y: -837.4715576171875, z: 29.779003143310547},
  {x: -190.56727600097656, y: -841.0464477539062, z: 29.58740997314453}
]

//Ивент когда игрок нажал на кнопку оренды ТС. Берет рандомную точку и спавнит .
mp.events.add('acceptRent.server', (player) => {
    const rand = Math.floor(Math.random() * posVeh.length)
    let cord = posVeh[rand]
    let playerVeh = mp.vehicles.new(mp.joaat('faggio'), new mp.Vector3(cord.x, cord.y, cord.z),
        {
          heading: 200,
          color: [[19, 73, 209],[19, 73, 209]]
        });
 
    player.setVariable('playerVeh', playerVeh) // Привязываем ТС к игроку, что бы посадить его в СВОЙ ТС. Это важно
    player.putIntoVehicle(playerVeh, 0)
    player.notify('~g~Вы орендовали транспорт');
    player.call('closeRentMenu.client')
})

//Две последние функции отвечают за то, что игрок в орендованом ТС. Если игрок вышел с него - запускается таймер, по истичению которого закончится оренда ТС
//Если игрок садится обратно, таймер сбрасывается.
function playerEnterRentVeh(player) {
    clearTimeout(player.setRentTimer)
}

function playerExitRentVeh(player, vehicle) {
    let rentVeh = player.getVariable('playerVeh')
    if (player.vehicle) {
      if(vehicle == rentVeh) {
          player.setRentTimer = setTimeout(() => {
            rentVeh.destroy()
            player.notify('~y~Оренда транспорта закончилась');
            player.call('endRentTime.client')
          }, 10000)
      }
    }
}

mp.events.add('playerEnterVehicle', playerEnterRentVeh)
mp.events.add('playerExitVehicle', playerExitRentVeh)
 

Вложения

  • Скриншот 24-05-2021 155913.png
    Скриншот 24-05-2021 155913.png
    1,5 МБ · Просмотры: 44
  • Скриншот 24-05-2021 155923.png
    Скриншот 24-05-2021 155923.png
    1,7 МБ · Просмотры: 41
  • Скриншот 24-05-2021 155948.png
    Скриншот 24-05-2021 155948.png
    1,6 МБ · Просмотры: 33
  • Скриншот 24-05-2021 155955.png
    Скриншот 24-05-2021 155955.png
    1,7 МБ · Просмотры: 40
  • orenda.zip
    80,2 КБ · Просмотры: 11
Последнее редактирование:

Lev Angel

Developer
Команда форума
Скриптер
Спасибо, гляну код чуть позже. Интересно будет глянуть на твою реализацию.
Было бы круто еще 1-2 скриншота как оно выглядит.

PS: Почему Оренда, наверное все-таки Аренда? :)
 

Voldemor

Senior Developer
Скриптер
Спасибо, гляну код чуть позже. Интересно будет глянуть на твою реализацию.
Было бы круто еще 1-2 скриншота как оно выглядит.

PS: Почему Оренда, наверное все-таки Аренда? :)
Я почему то думал правильно слово "Оренда", проверил в гугле, но не заметил что это на Украинском. Бывает)
 

nettkom

Trainee
а путь где куда это пихать Уроки / Туториалы и тут такая же каша что куда нет нечего :(
 

nettkom

Trainee
ошибка при попытки распаковки
 

Вложения

  • Загрузки 24.05.2021 21_45_57.png
    Загрузки 24.05.2021 21_45_57.png
    4,8 КБ · Просмотры: 10

MayHem

Junior Developer
Скриптер
В архиве отсутствует:
1. Файлы: CEF/index.html, server/rent/index.js, client/rent/index.js
 
Яндекс.Метрика
Верх