- Совместимость с RAGE:MP
-
- 0.3.7 (oldprerelease)
- 1.1 (prerelease)
Недавно мне понадобилась библиотека для работы с полигонами в моём игровом режиме — чтобы задавать границы компаний, домов, бандзон и других типов заведений. Поэтому я решил создать этот ресурс, изначально вдохновившись менеджером зон от abmn, но его код был ужасным, и я решил написать всё с нуля, улучшив функциональность.
По сути, вы сможете создавать любые формы коллизий, какие захотите, не заботясь о комбинировании нескольких колшейпов для нужной формы — просто определите точки и высоту области, и она будет создана без труда!
Вы можете задавать границы для домов (чтобы перемещать мебель), для компаний (чтобы выполнять работу), для гор (в скриптах охоты на животных) и для всего, на что хватит вашей фантазии — просто используйте это!
Демонстрация
Преимущества
Основные преимущества использования этого ресурса по сравнению с решением от abmn:
- Эти полигоны динамические — вы можете изменять, перемещать, вращать, в целом делать всё, что угодно с массивом вершин полигона в реальном времени, и это будет работать мгновенно, обновляя коллизии с игроками.
- Этот скрипт гораздо более оптимизирован и лёгкий по сравнению с предыдущей версией.
- Вы можете выбрать цвет линий полигона и управлять их видимостью, просто изменяя свойство visible у полигона.
- Скрипт поддерживает различные типы высот для определения коллизий (например, склоны), отличается высокой точностью (хотя поведение может зависеть от угла наклона и высоты полигона) и даже подходит для колшейпов горных областей.
- Вы можете добавлять новые вершины в уже существующие полигоны в любое время, просто добавив новую позицию vector3 в массив polygon.vertices.
API Functions
JavaScript:
/* Creates a new polygon and return it's instance */
mp.polygons.add(vertices: Vector3Mp[], height: number, options = { visible: false, lineColorRGBA: [255,255,255,255], dimension: 0 }): Polygon
/* Removes a polygon */
mp.polygons.remove(polygon: Polygon): void
/* Check if a polygon exists */
mp.polygons.exists(polygon: Polygon): boolean
/* Check if a position is contained within a given polygon */
mp.polygons.isPositionWithinPolygon(position: Vector3Mp, polygon: Polygon): boolean
/* Examples */
// Creating a new polygon
const polygon = mp.polygons.add([new mp.Vector3(10, 10, 5), new mp.Vector3(15, 15, 5), new mp.vector3(5, 5, 5)], 10, { visible: false, lineColorRGBA: [255,255,255,255], dimension: 0 });
// Set the polygon lines visible
polygon.visible = true;
// Modifying a polygon height
polygon.height = 100;
// Modifying a polygon color (RGBA)
polygon.lineColorRGBA = [255, 155, 0, 255];
// Modifying a polygon dimension
polygon.dimension = 30;
/* Events*/
// Event called when player enter a polygon (clientside)
mp.events.add('playerEnterPolygon', (polygon) => mp.gui.chat.push(`You entered the polygon ${polygon.id}!`));
// Event called when the local player leaves a polygon (clientside)
mp.events.add('playerLeavePolygon', (polygon) => mp.gui.chat.push(`You left the polygon ${polygon.id}.`));
Как установить
- Скачайте ZIP-архив.
- Распакуйте его в папку клиента.
- Подключите файл index из папки polygons.
- Наслаждайтесь использованием!
Автор: n0minal