• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Вопрос функция если игрок находится на расстоянии около 5 метров от машины

D3VILL

Новый участник
12 Дек 2023
23
1
40
Привет, ребята,
Я пытался создать код, который запирает ближайшую к игроку машину и проверяет находится ли эта машина на расстоянии не менее 5 метров от игрока.
На данный момент мне удалось сделать keybind, которая включает и выключает двигатель но это проще чем блокировать его поскольку игрока внутри машины.
Я не могу найти на server-side функцию, которая могла бы определить, находится ли машина рядом с игроком.
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,490
239
100
Привет! Чтобы определить, находится ли машина на расстоянии не менее 5 метров от игрока, вам нужно использовать функцию GetDistanceBetweenCoords для вычисления расстояния между двумя точками (координатами игрока и координатами машины). Затем сравните полученное расстояние с 5 метрами.
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
Можно сделать так, если есть желание - можешь сделать однострочную сортировку, будет выглядеть гораздо лучше

JavaScript:
mp.events.add("SOMECOOLEVENT", () => {
    if (mp.players.local.vehicle && mp.players.local.vehicle.doesExist()) {
        mp.events.callRemote("CHANGELOCKSERVER", mp.players.local.vehicle.remoteId)
        return;
    }
    let closestVehicle = null;
    mp.vehicles.forEachInRange(mp.players.local.position, 10, (vehicle) => {
        if ((vehicle && vehicle.doesExist()) === false) return
        if (closestVehicle === null) {
            closestVehicle = {
                veh: vehicle,
                distance: mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true)
            }
        } else {
            if (mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true) < closestVehicle.distance) {
                closestVehicle = {
                    veh: vehicle,
                    distance: mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true)
                }
            }
        }
    })
    if (closestVehicle === null) {
        mp.gui.chat.push("Транспорт рядом не найден")
        return
    }

    changeLockState(closestVehicle.veh)

})
 

D3VILL

Новый участник
12 Дек 2023
23
1
40
Можно сделать так, если есть желание - можешь сделать однострочную сортировку, будет выглядеть гораздо лучше

JavaScript:
mp.events.add("SOMECOOLEVENT", () => {
    if (mp.players.local.vehicle && mp.players.local.vehicle.doesExist()) {
        mp.events.callRemote("CHANGELOCKSERVER", mp.players.local.vehicle.remoteId)
        return;
    }
    let closestVehicle = null;
    mp.vehicles.forEachInRange(mp.players.local.position, 10, (vehicle) => {
        if ((vehicle && vehicle.doesExist()) === false) return
        if (closestVehicle === null) {
            closestVehicle = {
                veh: vehicle,
                distance: mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true)
            }
        } else {
            if (mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true) < closestVehicle.distance) {
                closestVehicle = {
                    veh: vehicle,
                    distance: mp.game.gameplay.getDistanceBetweenCoords(mp.players.local.position.x, mp.players.local.position.y, mp.players.local.position.z, vehicle.position.x, vehicle.position.y, vehicle.position.z, true)
                }
            }
        }
    })
    if (closestVehicle === null) {
        mp.gui.chat.push("Транспорт рядом не найден")
        return
    }

    changeLockState(closestVehicle.veh)

})




и потом уже проверяешь расстояние. не отрицаю что есть другие методы но это быстрое решение



Я пробовал использовать то что вы мне прислали, но не смог найти именно это на C#...
Я сделал что-то подобное( ) , но вопрос в том насколько это практично, потому что он проверяет все машины на серверах, и есть ли лучший способ сделать это на C#?
 

Sinage

Участник портала
Мошенник
17 Дек 2021
72
20
73
Я пробовал использовать то что вы мне прислали, но не смог найти именно это на C#...
Я сделал что-то подобное( ) , но вопрос в том насколько это практично, потому что он проверяет все машины на серверах, и есть ли лучший способ сделать это на C#?
Пример от mippo это Client-Side, а на сервере немного не понял мува с Length, но суть в том, что лучше решение проверять нажатие на букву именно на клиентке, соответственно ближайшую машину тоже брать оттуда. И уже на сервере проверять дистанцию до этой машины и является ли этот игрок её владельцем. Так у тебя не будет каждый раз проходить ~500 итераций
 

mippoosedev

Гуру
BackEnd developer
2 Мар 2021
292
127
100
Не уверен, что это хорошее решение делать такую вещь на сервере (исключение - админ команды, и то можно сделать через ремоут айди), советую перенести на клиент и уже найденную машину отправлять на сервер
 

D3VILL

Новый участник
12 Дек 2023
23
1
40
Мне удалось сделать это с помощью REMOTEID который я получаю через клиентскую часть и отправляю на серверную часть, спасибо за помощь!
 
Реакции: Drug