• Просьба не публиковать сообщения с предложениями продажи модов или сборок!

    Мы против использования и перепродажи слитых модов и переделок на их основе. Остальное также сложно верифицировать, поэтому в целом пока что запрещаем эту тему на сайте.

Интерактивное взаимодействие с окружающим миром.

httdiente

Trainee
Сообщения
16
Мучает один вопрос, реально ли реализовать взаимодействие с разными объектами через курсор мыши? То есть при нажатии к примеру клавиши E, появляется курсор, которым можно навести на дверь и появится рядом с курсором менюшка, в которой будет перечень возможного действия. Для примера скину видос как это реализовано в МТА.

Менюшка (просто для примера)
- тут игрок навел курсор на объект коробки и получает способы взаимодействия с ней:
1632590400555.png
- тут игрок навел курсор на объект двери:
1632590443426.png


 
В описании не увидел, на сервере самом есть я так понимаю ?
 
Мне желательно направление дать что использовать, и все, я просто не нашел функцию которая бы отдавала координаты курсора в игровом мире
 
Мне желательно направление дать что использовать, и все, я просто не нашел функцию которая бы отдавала координаты курсора в игровом мире

Я думаю тут есть несколько вариантов.

Так или иначе в них обоих тебе понадобится метод Graphics::screen2dToWorld3d

Первое, что пришло в голову, это от полученных мировых координат сделать поиск объектов в радиусе, и если они удовлетворяют условию, то вывести меню.

Второй способ выглядит как raycast из головы твоего персонажа в точку которую ты получил от клика, и так же проверка условия на объект.
JavaScript:
getPointingAtEntity = (flag = -1, ignor) => {
    let localPlayer = mp.players.local;
    let mousePos = mp.gui.cursor.position
    if (!ignor) ignor = localPlayer;
    let startPosition = localPlayer.getBoneCoords(12844, 0.3, 0, 0);
    let secondPoint = mp.game1.graphics.screen2dToWorld3d(mousePos);
    if (secondPoint == undefined) return null;
    startPosition.z -= 0.3;
    const result = mp.raycasting.testPointToPoint(startPosition, secondPoint, ignor, flag);
    mp.game1.graphics.drawLine(startPosition.x, startPosition.y, startPosition.z, secondPoint.x, secondPoint.y, secondPoint.z, 255, 0, 0, 170);
    if (typeof result !== "undefined") return result;
    return null;
}
 
Назад
Верх