This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос функция если игрок находится на расстоянии около 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






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

Sinage

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

mippoosedev

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

D3VILL

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