В этом уроке рассмотрим работу с маркерами и чекпоинтами в rage mp.
Маркеры
Для создания маркера используется метод mp.markers.new
У нас 3 обязательных аргумента:
![1.png 1.png](https://ragem.ru/data/attachments/0/13-a41c301ea7046f3895f8b208bb867992.jpg)
Стандартно маркер идет белого цвета, но мы можем поменять его при помощи опциональных параметров.
![2.png 2.png](https://ragem.ru/data/attachments/0/14-c288dfa89f73cf6407d140167992ea64.jpg)
Также мы можем поменять direction и rotation (очевидно что только не у всех маркеров это будет иметь смысл), а также скрыть маркер через visible или перенести в другое измерение dimension.
При необходимости мы можем поменять свойства маркера уже после его создания. Все свойства можно поменять напрямую, например, marker.scale = 10;. Исключение составляет только цвет, его можно поменять при помощи специального метода setColor:
Чекпоинты
Гоночные чекпоинты выделены в отдельную сущность и создаются другим методом. Но по сути имеют тот же набор аргументов (за исключением rotation, они всегда круглые и их нет смысла крутить).
![3.png 3.png](https://ragem.ru/data/attachments/0/15-a8765152dd8bcd67fc8f57f270833836.jpg)
В остальном не вижу особых отличий от маркеров с плане создания и параметров.
Определение попадания в маркер / чекпоинт
Главное отличие между маркерами и чекпоинтами состоит в способе определения попадания в них игрока. Для чекпоинтов доступны следующие события:
playerEnterCheckpoint
playerExitCheckpoint
Например,
Для маркеров же таких событий нет (по крайней мере на википедии они не задокументированы). Поэтому для маркеров принято дополнительно создавать колшейпы - невидимые области на карте разных форм, пересечение с которыми можно засечь и для этого есть отдельные события:
playerEnterColshape
playerExitColshape
Мы просто ставим колшейп того же размера и формы что и маркер на одни координаты. И когда игрок попадает в колшейп, то это равнозначно попаданию в маркер. Пример такой реализации можно посмотреть в уроке по созданию скрипта работы дальнобойщика.
Маркеры
Для создания маркера используется метод mp.markers.new
JavaScript:
mp.markers.new(type, position, scale,
{
direction: direction,
rotation: rotation,
color: color,
visible: visible,
dimension: dimension
});
- type - внешний вид маркера. Всего 45 вариантов их список можно посмотреть на wiki.
- position - объект типа Vector3 с координатами точки в которой должен стоять маркер.
- scale - размер маркера. Можно делать маркеры разных размеров, управляя этим через scale.
JavaScript:
mp.markers.new(1, {x: -412.3, y: 1218.3, z: 324.7}, 2);
![1.png 1.png](https://ragem.ru/data/attachments/0/13-a41c301ea7046f3895f8b208bb867992.jpg)
Стандартно маркер идет белого цвета, но мы можем поменять его при помощи опциональных параметров.
JavaScript:
mp.markers.new(1, {x: -412.3, y: 1218.3, z: 324.7}, 2, {
color: [255, 0, 0, 100] // [красный, зеленый, синий, альфа]
});
![2.png 2.png](https://ragem.ru/data/attachments/0/14-c288dfa89f73cf6407d140167992ea64.jpg)
Также мы можем поменять direction и rotation (очевидно что только не у всех маркеров это будет иметь смысл), а также скрыть маркер через visible или перенести в другое измерение dimension.
При необходимости мы можем поменять свойства маркера уже после его создания. Все свойства можно поменять напрямую, например, marker.scale = 10;. Исключение составляет только цвет, его можно поменять при помощи специального метода setColor:
JavaScript:
marker.setColor(r, g, b, a);
Чекпоинты
Гоночные чекпоинты выделены в отдельную сущность и создаются другим методом. Но по сути имеют тот же набор аргументов (за исключением rotation, они всегда круглые и их нет смысла крутить).
JavaScript:
mp.checkpoints.new(1, {x: -412.3, y: 1218.3, z: 324.7}, 2);
![3.png 3.png](https://ragem.ru/data/attachments/0/15-a8765152dd8bcd67fc8f57f270833836.jpg)
В остальном не вижу особых отличий от маркеров с плане создания и параметров.
Определение попадания в маркер / чекпоинт
Главное отличие между маркерами и чекпоинтами состоит в способе определения попадания в них игрока. Для чекпоинтов доступны следующие события:
playerEnterCheckpoint
playerExitCheckpoint
Например,
JavaScript:
mp.events.add("playerEnterCheckpoint", (player, checkpoint) => {
// Код сработает при попадании игрока в чекпоинт
});
Для маркеров же таких событий нет (по крайней мере на википедии они не задокументированы). Поэтому для маркеров принято дополнительно создавать колшейпы - невидимые области на карте разных форм, пересечение с которыми можно засечь и для этого есть отдельные события:
playerEnterColshape
playerExitColshape
Мы просто ставим колшейп того же размера и формы что и маркер на одни координаты. И когда игрок попадает в колшейп, то это равнозначно попаданию в маркер. Пример такой реализации можно посмотреть в уроке по созданию скрипта работы дальнобойщика.