АРЕНДА ТРАНСПОРТА
Вчера был стрим на канале, там учили создавать "Аренду транспорта".Я решил сделать свою версию этого функционала, с использованием интерфейса.
Все исходники я оставлю с архиве.
ВАЖНО: Это не считаеться готовой системой.
Клиент:
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)
Вложения
Последнее редактирование: