- 64
- 368
Установка:
- Закинуть damage_status.lua по пути /scripts/libs/
Функции:
module.getVehicleDoorState(vehicleId, door, state)
module.setVehicleDoorState(door, state)
- Функции для работы с дверьми.
В get функции возвращает true когда определенный компонент авто соответствует проверяемому состоянию.
В set функции устанавливает состояние определенному компоненту авто в котором сидит бот, возвращает true если состояние установлено.
module.getVehiclePanelState(vehicleId, panel, state)
module.setVehiclePanelState(panel, state)
- Функции для работы с панелями авто.
В get функции возвращает true когда определенный компонент авто соответствует проверяемому состоянию.
В set функции устанавливает состояние определенному компоненту авто в котором сидит бот, возвращает true если состояние установлено.
module.getVehicleTireState(vehicleId, tire)
module.setVehicleTireState(tire, state)
- Функции для работы с покрышками авто.
В get функции возвращает true когда определенная покрышка не пробита, если пробита - false.
В set функции устанавливает состояние определенной покрышке авто в котором сидит бот, возвращает true если состояние покрышки установлено.
module.getVehicleLightState(vehicleId, light)
module.setVehicleLightState(light, state)
- Функции для работы с фонарями авто.
В get функции возвращает true когда определенный фонарь не разбит, разбит - false.
В set функции устанавливает состояние определенному фонарю авто в котором сидит бот, возвращает true если состояние фонаря установлено.
module.onVehicleDamageStatusChanged(vehicleId, updatedComponents, streamed)
- Событие когда у авто в зоне стрима изменяется статус компонентов.
В updatedComponents хранится таблица в которой ключамdoor, panel, light, tire
присваивается true/false в зависимости изменился компонент или нет.
В streamed передаётся значение: true - машина уже была в зоне стрима, false - машина только появилась в зоне стрима и у всех её компонентов в updatedComponents значение true.
Для работы у авто должны быть включены фары, иначе работать не будет
Lua:
local ds = require("damage_status")
require("addon")
local STROBE_ACTIVE, STROBE_TIME = false, 150
function onLoad()
newTask(function()
while true do
if STROBE_ACTIVE then
local lights = {
{component = LIGHTS.FRONT_LEFT, state = LIGHTS.STATES.NORMAL},
{component = LIGHTS.BACK_LIGHT, state = LIGHTS.STATES.NORMAL},
{component = LIGHTS.FRONT_LEFT, state = LIGHTS.STATES.BROKEN},
{component = LIGHTS.BACK_LIGHT, state = LIGHTS.STATES.BROKEN},
{component = LIGHTS.FRONT_RIGHT, state = LIGHTS.STATES.NORMAL},
{component = LIGHTS.FRONT_RIGHT, state = LIGHTS.STATES.BROKEN},
}
for _, light in ipairs(lights) do
local result = ds.setVehicleLightState(light.component, light.state)
if result then
wait(STROBE_TIME)
else
STROBE_ACTIVE = false
break
end
end
end
wait(0)
end
end)
end
function onRunCommand(cmd)
if cmd:match("^!?strobe$") then
if getBotVehicle() ~= 0 then
if getAllVehicles()[getBotVehicle()].lights == true then
STROBE_ACTIVE = not STROBE_ACTIVE
else
print("Start vehicle lights first")
end
end
return false
end
end
Lua:
local ds = require("damage_status")
require("addon")
local FLOOD_ACTIVE, FLOOD_TIME = false, 50
function onLoad()
newTask(function()
while true do
if FLOOD_ACTIVE then
for door = 0, 3 do
ds.setVehicleDoorState(door, DOORS.STATES.NORMAL)
end
ds.setVehiclePanelState(PANELS.FRONT_BUMPER, PANELS.STATES.NORMAL)
ds.setVehiclePanelState(PANELS.BACK_BUMPER, PANELS.STATES.NORMAL)
wait(FLOOD_TIME)
for door = 0, 3 do
ds.setVehicleDoorState(door, DOORS.STATES.REMOVED)
end
ds.setVehiclePanelState(PANELS.FRONT_BUMPER, PANELS.STATES.REMOVED)
ds.setVehiclePanelState(PANELS.BACK_BUMPER, PANELS.STATES.REMOVED)
end
wait(0)
end
end)
end
function onRunCommand(cmd)
if cmd:match("^!?flood$") then
if getBotVehicle() ~= 0 then
FLOOD_ACTIVE = not FLOOD_ACTIVE
end
return false
end
end
Lua:
local ds = require("damage_status")
function onRunCommand(cmd)
if cmd:match("^!?pop$") then
for tire = 0, 3 do
local result = ds.setVehicleTireState(tire, TIRES.STATES.POPPED)
print(string.format("%s колесо %d", result and "прокололи" or "не смогли проколоть", tire))
end
return false
end
end
Lua:
local ds = require("damage_status")
function ds.onVehicleDamageStatusChanged(vehicleId, updatedComponents, streamed)
if streamed then -- проверка на то, что машина уже была до этого в зоне стрима
if updatedComponents.light then
print(string.format("У машины %d обновился статус фонарей", vehicleId))
if not ds.getVehicleLightState(vehicleId, LIGHTS.FRONT_LEFT) then
print(string.format("Левый фонарь разбит у машины %d", vehicleId))
end
if not ds.getVehicleLightState(vehicleId, LIGHTS.FRONT_RIGHT) then
print(string.format("Правый фонарь разбит у машины %d", vehicleId))
end
end
if updatedComponents.tire then
print(string.format("У машины %d обновился статус шин", vehicleId))
for tires = 0, 3 do
if not ds.getVehicleTireState(vehicleId, tires) then
print(string.format("У машины %d проколото колесо %d", vehicleId, tires))
end
end
end
if updatedComponents.door then
print(string.format("У машины %d обновился статус дверей/капота/багажника", vehicleId))
if ds.getVehicleDoorState(vehicleId, DOORS.DRIVER_DOOR, DOORS.STATES.DAMAGED) then
print(string.format("У машины %d повреждена водительская дверь", vehicleId))
end
end
if updatedComponents.panel then
print(string.format("У машины %d обновился статус панелей", vehicleId))
if ds.getVehiclePanelState(vehicleId, PANELS.FRONT_BUMPER, PANELS.STATES.HANGING_LOOSE) then
print(string.format("У машины %d поврежден передний бампер и он качается", vehicleId))
end
if ds.getVehiclePanelState(vehicleId, PANELS.WINDSHIELD, PANELS.STATES.CRUSHED) then
print(string.format("У машины %d повреждено лобовое стекло", vehicleId))
end
end
else
--[[
транспортное средство только что появилось в зоне стрима бота
по умолчанию все компоненты в updatedComponents будут true
если вам без разницы появилось авто только что в зоне стрима или нет, то можно убрать проверку на streamed
]]--
end
end
Более подробную информацию по компонентам можно найти вот тут ну или тут
Код модуля писался за пивом, так что если найдете несоответствия или явные ошибки - пишите, исправлю.
Если надо проверить в getVehicleDoorState целый ли компонент, то надо проверять одновременно три состояния OPENED, DAMAGED и REMOVED. Если три возвращают false - компонент целый.
Тоже самое касается и getVehiclePanelState, там проверять нужно одновременно CRUSHED, HANGING_LOOSE, REMOVED.
Код модуля писался за пивом, так что если найдете несоответствия или явные ошибки - пишите, исправлю.
Если надо проверить в getVehicleDoorState целый ли компонент, то надо проверять одновременно три состояния OPENED, DAMAGED и REMOVED. Если три возвращают false - компонент целый.
Тоже самое касается и getVehiclePanelState, там проверять нужно одновременно CRUSHED, HANGING_LOOSE, REMOVED.
- DOORS
- HOOD - капот
- TRUNK - багажник
- DRIVER_DOOR - водительская дверь
- PASSENGER_DOOR - пассажирская дверь
- STATES
- NORMAL - используется только для set функций, чинит компонент
- OPENED - открыт
- DAMAGED - поврежден
- REMOVED - удален
- STATES
- PANELS
- FRONT_LEFT - передняя левая панель
- FRONT_RIGHT - передняя правая панель
- BACK_LEFT - задняя левая панель
- BACK_RIGHT - задняя правая панель
- WINDSHIELD - лобовое стекло
- FRONT_BUMPER - передний бампер
- BACK_BUMPER - задний бампер
- STATES
- NORMAL - используется только для set функций, чинит компонент
- CRUSHED - поврежден
- HANGING_LOOSE - качается, висит
- REMOVED - удален
- STATES
- TIRES
- BACK_RIGHT - правое заднее колесо
- FRONT_RIGHT - правое переднее колесо
- BACK_LEFT - левое заднее колесо
- FRONT_LEFT - левое переднее колесо
- STATES
- NORMAL - используется только для set функций, чинит компонент
- POPPED - колесо спущено
- STATES
- LIGHTS
- FRONT_LEFT - передняя левая фара
- FRONT_RIGHT - передняя правая фара
- BACK_LIGHT - задние фары
- STATES
- NORMAL - используется только для set функций, чинит компонент
- BROKEN - фара сломана
- STATES