- 128
- 136
Введение
Установка
Использование
Пример использования
Библиотека сфер (SLib) - это библиотека Lua, разработанная для использования в Moonloader. Она предоставляет функциональность для создания, управления и рендеринга сфер в игровом мире, а также для обнаружения сущностей в этих сферах. В этой документации описано, как использовать библиотеку.
Установка
Чтобы использовать библиотеку SLib, сначала необходимо убедиться, что установлен vector3d.lua. Затем поместите файлы sphere_lib.lua в каталог lib.
Использование
- Создание сфер
Чтобы создать сферу, используйте функциюcrtSph
:
Lua:local sphere = require("sphere_lib") local sphereId = sphere.crtSph(pPed, radius, followPlayer, centerX, centerY, centerZ, detailLevel, color)
- pPed: PLAYER_PED или handle другого персонажа, к которому привязана сфера (необязательно, если followPlayer - false).
- radius: Радиус сферы.
- followPlayer (следовать за игроком): Булево значение, указывающее, должна ли сфера следовать за персонажем игрока/другим персонажем.
- centerX, centerY, centerZ: координаты центра сферы (используется, если значение followPlayer равно false).
- detailLevel: Уровень детализации для рендеринга сферы (более высокие значения приводят к увеличению количества сегментов).
- color: Цвет сферы
- 1. Обновление и рендеринг сфер
Функция updRndr обновляет позиции всех сфер (если они следуют за персонажем игрока/другими персонажами) и рендерит их:
sphere.updRndr()
Эта функция должна вызываться в главном цикле вашего скрипта для постоянного обновления и рендеринга сфер.
- 2. Обнаружение объектов в сфере
Чтобы собрать сущности внутри сферы, используйте функциюcolEntInSph
:
Lua:local entities = sphere.colEntInSph(sphereId)
- sphereId: Идентификатор сферы, возвращенной crtSph
Эта функция возвращает таблицу с ключами objects, players и cars, каждый из которых содержит список идентификаторов сущностей в сфере.
Пример использования
Lua:
local sphere = require("sphere_lib")
function main()
if not isSampAvailable() then return end
local info = sphere.crtSph((select(2, sampGetCharHandleBySampPlayerId(49))), 5, true, nil, nil, nil, 5, -1)
local pCoords = {}
while true do
wait(0)
local en, ent = pcall(sphere.colEntInSph, info)
if en and ent and ent.players then
local actPId = {}
for _, pid in ipairs(ent.players) do
local _, pChar = sampGetCharHandleBySampPlayerId(pid)
if pChar and doesCharExist(pChar) then
local x, y, z = getCharCoordinates(pChar)
pCoords[pid] = {x, y, z}
actPId[pid] = true
end
end
for id, _ in pairs(pCoords) do
if not actPId[id] then
pCoords[id] = nil
else
print(id, unpack(pCoords[id]))
end
end
end
sphere.updRndr()
end
end
Результат:
Выводит координаты и ID персонажей внутри сферы, в том числе персонажа к которому привязана сфера, исключение PLAYER_PED
Выводит координаты и ID персонажей внутри сферы, в том числе персонажа к которому привязана сфера, исключение PLAYER_PED