Всем доброго времени суток, написал механическую коробку передач и решил поделиться ней с вами, а ещё лучше — рассказать как её реализовать.
Ну что ж, приступим. Пишу этот мануал для людей уже понимающих, что такое Client и Server sides.
Начнём с создания среды работы. А точнее файла, в моём случае это index.js в папке GearBOXsystem:
После создания этого в index.js в папке client_packages прописываем:
require("./GearBOXsystem/index.js")
Далее приступим к созданию самой коробки передач, а точнее с Bind и Events:
В файле коробки передач пишем следующие строки:
Events того что игрок сел в Т/С, после чего передаём данные в let да бы в дальнейшем заточить всё под Bind, то есть:
И в первой строчке перед кодом выше пишем:
Должно выйти вот так:
Теперь у вас есть 2 минуты да бы перечитать код и понять как это между собой связано.
Всё, продолжим.
Сначала пропишем переключение передачи вверх:
5 минут для тебя, чтобы ознакомиться с кодом лучше.
Время прошло, работаем дальше
Если у нас уже есть переключение вверх думаю понадобится и вниз:
Теперь 15 минут перерыва, чтобы почитать код и чутка отдохнуть.
Так-с, теперь выведем передачу на экран игрока:
Вроде бы всё описал. В итоге должен появится текст сверху посередине экрана
Теперь домашнее задание:
1. Добавить ещё две передачи, заднюю и 4-ю
2. Приписать GEAR_AT_MOMENT к худу CEF.
Если есть какие-либо вопросы вы можете написать мне в ЛС дискорда: thf#1111 отвечу если не буду спать
А тебе желаю удачи в сфере кодинга

Ну что ж, приступим. Пишу этот мануал для людей уже понимающих, что такое Client и Server sides.
Начнём с создания среды работы. А точнее файла, в моём случае это index.js в папке GearBOXsystem:
После создания этого в index.js в папке client_packages прописываем:
require("./GearBOXsystem/index.js")
Далее приступим к созданию самой коробки передач, а точнее с Bind и Events:
В файле коробки передач пишем следующие строки:
Events того что игрок сел в Т/С, после чего передаём данные в let да бы в дальнейшем заточить всё под Bind, то есть:
JavaScript:
mp.events.add("playerEnterVehicle", () => {
vehicle = mp.players.local.vehicle;
TopSpeed = mp.game.vehicle.getVehicleModelMaxSpeed(mp.players.local.vehicle.model)
PerGearMultiplier = TopSpeed / CountOfGears;
Default_HAND = vehicle.getDefaultHandling("FDRIVEINERTIA")
vehicle.setHandling("FDRIVEINERTIA", 0.01)
vehicle.setMaxSpeed(2)
})
JavaScript:
let GEAR_AT_MOMENT = 0; //Обозначает передачу которая работает когда игрок садится в Т/С. 0-нейтраль
let GEAR_SWITCH = 1; //Количество переключение передач, т.е. переключение меняется на одну передачу
let TopSpeed; //Берём максимульную скорость Т/С для будущей работы
let CountOfGears = "5"; // Количество передач
let PerGearMultiplier; // Скорость на каждую передачу
let vehicle; //Т/С игрока
let Default_HAND; //Надлинг Т/С
Теперь у вас есть 2 минуты да бы перечитать код и понять как это между собой связано.
Всё, продолжим.
Сначала пропишем переключение передачи вверх:
JavaScript:
mp.keys.bind(0x26, true, function(){ //0x26 - Стрелка в верх согласно кей кодам MICROSOFT. 2-е значение TRUE срабатывает ли функция когда клавиша нажата или отпущена (TRUE - зажата), ну и дальше функция
let GR = GEAR_AT_MOMENT + GEAR_SWITCH; //GR это передача на которую изменяем т.е. 0 + 1 согласно зменным.
if(GR > -1){//Проверяем значение
if(GR < 4){//Проверяем значение
changeGearUP(GR)//Вызываем функцию указаную дальше и с ней же передаём значение GR
}
}else{
}
function changeGearUP(gsr){//Вызываемая функция и само GR - gsr в функции
if(gsr == 0){//Нейтральная передача
GEAR_AT_MOMENT = GR; //Записываем значение GR в GEAR_AT_MOMENT чтобы оно показалось в render(Указанно дальше)
mp.console.logInfo("Neutral")//ЛОГ
vehicle.setHandling("FDRIVEINERTIA", 0.01)//Изменяем ускорение/мощность Т/С до 0.1 да бы нейтраль работала приближенно к реальности
vehicle.setMaxSpeed(2)//Устанавливаем максимальную скорость Т/С да бы избечь возможных багов.
}
if(gsr == 1){//Первая передача
GEAR_AT_MOMENT = GR;//Указанно выше
mp.console.logInfo("GEAR :: 1")//ЛОГ
vehicle.setHandling("FDRIVEINERTIA", Default_HAND)//Меняем хандлинг на тот который был когда игрок сел в Т/С
vehicle.setMaxSpeed(PerGearMultiplier * 1) //Устанавливаем максимальную скорость Т/С на ту которая соответствует передачи
}
if(gsr == 2){
GEAR_AT_MOMENT = GR;
mp.console.logInfo("GEAR :: 2")
vehicle.setMaxSpeed(PerGearMultiplier * 2)
}
if(gsr == 3){
GEAR_AT_MOMENT = GR;
mp.console.logInfo("GEAR :: 3")
vehicle.setMaxSpeed(PerGearMultiplier * 3)
}
}
})
5 минут для тебя, чтобы ознакомиться с кодом лучше.
Время прошло, работаем дальше
Если у нас уже есть переключение вверх думаю понадобится и вниз:
JavaScript:
mp.keys.bind(0x28, true, function(){ //0х28 - Стрелка в низ
let Current_speed = vehicle.getSpeed() //Текущая скорость Т/С
let GR = GEAR_AT_MOMENT - GEAR_SWITCH; //Снижение передачи 1 - 1
if(GR > -1){ //Проверка
mp.console.logInfo("GSD : : : : NOW SHIFT IS :: " + GEAR_AT_MOMENT)
changeGearDWN(GR)//Вызов функции
}else{
mp.console.logInfo("BDS")
}
function changeGearDWN(gsr){//Функция
if(gsr == 0){//Нейтраль
if(PerGearMultiplier * 0.2 > Current_speed){//PerGearMultiplier - скорость на передачу * 0.2(Множитель скорости) > Current_speed - Текущая скорость // Т.е если скорость Т/С больше чем PerGearMultiplier * 0.2 переключение не делается.
GEAR_AT_MOMENT = GR;
mp.console.logInfo("Neutral")
vehicle.setHandling("FDRIVEINERTIA", 0.01) //Ставим минимальную мощность/ускорение
vehicle.setMaxSpeed(2)
}else{
mp.console.logInfo("Too HIGH RPM")//Относясь к if(PerGearMultiplier * 0.2 > Current_speed) если скорость выше кидаем в консоль сообщение. В будущем под домашнее задание пойдёт.
}
}
if(gsr == 1){//Первая передача, принцып работа тот же что и выше
if(PerGearMultiplier * 1.2 > Current_speed){
GEAR_AT_MOMENT = GR;
mp.console.logInfo("GEAR :: 1")
vehicle.setHandling("FDRIVEINERTIA", Default_HAND)
vehicle.setMaxSpeed(PerGearMultiplier * 1)
}
else{
mp.console.logInfo("Too HIGH RPM")
}
}
if(gsr == 2){
if(PerGearMultiplier * 2.2 > Current_speed){
GEAR_AT_MOMENT = GR;
mp.console.logInfo("GEAR :: 2")
vehicle.setMaxSpeed(PerGearMultiplier * 2)
}
else{
mp.console.logInfo("Too HIGH RPM")
}
}
if(gsr == 3){
if(PerGearMultiplier * 3.2 > Current_speed){
GEAR_AT_MOMENT = GR;
mp.console.logInfo("GEAR :: 3")
vehicle.setMaxSpeed(PerGearMultiplier * 3)
}
else{
mp.console.logInfo("Too HIGH RPM")
}
}
}
})
Теперь 15 минут перерыва, чтобы почитать код и чутка отдохнуть.
Так-с, теперь выведем передачу на экран игрока:
JavaScript:
mp.events.add("render", () => { //Render обновление интерфейса с каждым кадром т.е. если у меня 60 FPS данное действие повторяется 60 раз в секунду
mp.game.graphics.drawText([ICODE]Your gear: ${GEAR_AT_MOMENT}[/ICODE], [0.5, 0.005], { //Выводим текст [ICODE]Your gear: ${GEAR_AT_MOMENT}[/ICODE] || ${GEAR_AT_MOMENT} обозначает вывод сменной в тексте (Альтернатива " Your gear: " + GEAR_AT_MOMENT.
font: 7,
color: [255, 255, 255, 185],
scale: [0.5, 0.5],
outline: false
});
})
Вроде бы всё описал. В итоге должен появится текст сверху посередине экрана
Теперь домашнее задание:
1. Добавить ещё две передачи, заднюю и 4-ю
2. Приписать GEAR_AT_MOMENT к худу CEF.
Если есть какие-либо вопросы вы можете написать мне в ЛС дискорда: thf#1111 отвечу если не буду спать
А тебе желаю удачи в сфере кодинга
Последнее редактирование: