Initial commit
This commit is contained in:
@@ -0,0 +1,492 @@
|
||||
-- Version 0.1
|
||||
-- Devloped by Everett aka Mr. Yellow aka Munky aka De_verett
|
||||
local carSpawned = false
|
||||
local newVeh = nil
|
||||
local inLightbarMenu = false
|
||||
local lightBool = false
|
||||
local sirenBool = false
|
||||
local oldSirenBool = false
|
||||
local controlsDisabled = false
|
||||
local xCoord = 0
|
||||
local yCoord = 0
|
||||
local zCoord = 0
|
||||
local xrot = 0.0
|
||||
local yrot = 0.0
|
||||
local zrot = 0.0
|
||||
local snd_pwrcall = {}
|
||||
local airHornSirenID = nil
|
||||
local sirenTone = "VEHICLES_HORNS_SIREN_1"
|
||||
local vehPlateBoolSavedData = nil
|
||||
local isPlateCar = false
|
||||
local isAirhornKeyPressed = false
|
||||
local deleteVehicleLightbars = {}
|
||||
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(1)
|
||||
if inLightbarMenu then
|
||||
printControlsText()
|
||||
end
|
||||
local player = GetPlayerPed(-1)
|
||||
if (IsControlJustReleased(1, 44)) then -- Q to turn on lights
|
||||
toggleLights()
|
||||
end
|
||||
if (IsControlJustReleased(1, 47)) then -- G to turn on siren
|
||||
sirenTone = "VEHICLES_HORNS_SIREN_1" -- sets siren to default siren
|
||||
toggleSiren()
|
||||
end
|
||||
if (IsControlJustReleased(1, 210)) then -- Left control to change siren tone
|
||||
changeSirenTone()
|
||||
end
|
||||
if IsControlJustPressed(1, 184) and not isAirhornKeyPressed then
|
||||
playAirHorn(true)
|
||||
isAirhornKeyPressed = true
|
||||
if sirenBool then
|
||||
oldSirenBool = sirenBool
|
||||
toggleSiren()
|
||||
end
|
||||
end
|
||||
if IsControlJustReleased(1, 184) then
|
||||
playAirHorn(false)
|
||||
isAirhornKeyPressed = false
|
||||
if oldSirenBool then
|
||||
toggleSiren()
|
||||
oldSirenBool = false
|
||||
end
|
||||
end
|
||||
if isPlateCar then DisableControlAction(0,86,true) end -- Disables Veh horn
|
||||
end
|
||||
end)
|
||||
|
||||
function printControlsText()
|
||||
SetTextFont(0)
|
||||
SetTextProportional(1)
|
||||
SetTextScale(0.0, 0.4)
|
||||
SetTextColour(128, 128, 255, 255)
|
||||
SetTextDropshadow(0, 0, 0, 0, 255)
|
||||
SetTextEdge(1, 0, 0, 0, 255)
|
||||
SetTextDropShadow()
|
||||
SetTextOutline()
|
||||
SetTextEntry("STRING")
|
||||
AddTextComponentString("Use your ↑ ↓ → ← Arrow Keys for Lateral Movements, Pg Up and Pg Down for Altitude Change")
|
||||
DrawText(0.25, 0.9)
|
||||
--
|
||||
SetTextFont(0)
|
||||
SetTextProportional(1)
|
||||
SetTextScale(0.0, 0.4)
|
||||
SetTextColour(128, 128, 255, 255)
|
||||
SetTextDropshadow(0, 0, 0, 0, 255)
|
||||
SetTextEdge(1, 0, 0, 0, 255)
|
||||
SetTextDropShadow()
|
||||
SetTextOutline()
|
||||
SetTextEntry("STRING")
|
||||
AddTextComponentString("and Insert and Delete for rotation. SPACE to save, DELETE to cancel")
|
||||
DrawText(0.25, 0.93)
|
||||
end
|
||||
|
||||
|
||||
|
||||
function toggleLights()
|
||||
local player = GetPlayerPed(-1)
|
||||
TriggerServerEvent("toggleLights2", GetVehicleNumberPlateText(GetVehiclePedIsIn(player, false)))
|
||||
if sirenBool == true then
|
||||
TriggerServerEvent("ToggleSound1Server", GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false)))
|
||||
end
|
||||
end
|
||||
|
||||
function changeSirenTone()
|
||||
local currPlate = GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))
|
||||
if not(vehPlateBoolSavedData == currPlate) then
|
||||
TriggerServerEvent("returnLightBarVehiclePlates")
|
||||
while true do
|
||||
if(vehPlateBoolSavedData == GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))) then
|
||||
break
|
||||
end
|
||||
if not(currPlate == GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))) then
|
||||
return
|
||||
end
|
||||
Citizen.Wait(10)
|
||||
end
|
||||
end
|
||||
if isPlateCar then
|
||||
if sirenTone == "VEHICLES_HORNS_SIREN_1" then
|
||||
sirenTone = "VEHICLES_HORNS_SIREN_2"
|
||||
toggleSiren()
|
||||
toggleSiren()
|
||||
elseif sirenTone == "VEHICLES_HORNS_SIREN_2" then
|
||||
sirenTone = "VEHICLES_HORNS_POLICE_WARNING"
|
||||
toggleSiren()
|
||||
toggleSiren()
|
||||
else
|
||||
sirenTone = "VEHICLES_HORNS_SIREN_1"
|
||||
toggleSiren()
|
||||
toggleSiren()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent('openLightbarMenu')
|
||||
AddEventHandler('openLightbarMenu', function(lightbarModel)
|
||||
lightMenu(lightbarModel)
|
||||
end)
|
||||
|
||||
RegisterNetEvent('clientToggleLights')
|
||||
AddEventHandler('clientToggleLights', function(lightsArray, lightsStatus, hostVehiclePointer)
|
||||
Citizen.CreateThread(function()
|
||||
for k,v in pairs(lightsArray) do
|
||||
NetworkRequestControlOfNetworkId(v)
|
||||
while not NetworkHasControlOfNetworkId(v) do
|
||||
Citizen.Wait(0)
|
||||
end
|
||||
local test1 = NetToVeh(v)
|
||||
lightBool = lightsStatus
|
||||
SetVehicleSiren(test1, not lightsStatus)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
function toggleSiren()
|
||||
if lightBool == false then
|
||||
TriggerServerEvent("ToggleSound1Server", GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false)))
|
||||
end
|
||||
end
|
||||
|
||||
function spawnLightbar(lightbarModel)
|
||||
print("Got to spawn")
|
||||
local player = GetPlayerPed(-1)
|
||||
local vehiclehash1 = GetHashKey(lightbarModel)
|
||||
RequestModel(vehiclehash1)
|
||||
Citizen.CreateThread(function()
|
||||
while not HasModelLoaded(vehiclehash1) do
|
||||
Citizen.Wait(100)
|
||||
end
|
||||
local coords = GetEntityCoords(player)
|
||||
newVeh = CreateVehicle(vehiclehash1, coords.x, coords.y, coords.z, GetEntityHeading(PlayerPedId()), true, 0)
|
||||
SetEntityCollision(newVeh, false, false)
|
||||
SetVehicleDoorsLocked(newVeh, 2)
|
||||
SetEntityAsMissionEntity(newVeh, true, true)
|
||||
end)
|
||||
end
|
||||
|
||||
function lightMenu(lightbarModel)
|
||||
if not inLightbarMenu then
|
||||
inLightbarMenu = true
|
||||
local player = GetPlayerPed(-1)
|
||||
spawnLightbar(lightbarModel)
|
||||
controlsDisabled = true
|
||||
disableControls()
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, 0, 0, 0, 0.0, 0.0, 0.0, true, true, true, true, 0, true)
|
||||
while true do
|
||||
Citizen.Wait(10)
|
||||
--resetOffSets()
|
||||
moveObj(newVeh)
|
||||
if (IsControlJustReleased(1, 22)) then -- attatch obj and close
|
||||
TriggerServerEvent("addLightbar", GetVehicleNumberPlateText(GetVehiclePedIsIn(player, false)), VehToNet(newVeh), GetVehiclePedIsIn(player, false))
|
||||
inLightbarMenu = false
|
||||
newVeh=nil
|
||||
controlsDisabled = false
|
||||
if(vehPlateBoolSavedData == GetVehicleNumberPlateText(GetVehiclePedIsIn(player, false))) then
|
||||
isPlateCar = true
|
||||
end
|
||||
break
|
||||
end
|
||||
if (IsControlJustReleased(1, 177)) then -- close menu
|
||||
inLightbarMenu = false
|
||||
DeleteVehicle(newVeh)
|
||||
newVeh = nil
|
||||
controlsDisabled = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function moveObj(veh)
|
||||
local player = GetPlayerPed(-1)
|
||||
local MOVEMENT_CONSTANT = 0.01
|
||||
local vehOffset = GetOffsetFromEntityInWorldCoords(newVeh, 0.0, 1.3, 0.0)
|
||||
|
||||
if (IsControlJustReleased(1, 121)) then -- rotate 180 upside down
|
||||
yrot = yrot + 180.0
|
||||
print("yrot = " .. yrot)
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlJustReleased(1, 178)) then -- rotate 180
|
||||
zrot = zrot + 180
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 190)) then -- move forward
|
||||
xCoord = xCoord + MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 189)) then -- move backwards
|
||||
xCoord = xCoord - MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 27)) then -- move right
|
||||
yCoord = yCoord + MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 187)) then -- move left
|
||||
yCoord = yCoord - MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 208)) then -- move up
|
||||
zCoord = zCoord + MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
if (IsControlPressed(1, 207)) then -- move down
|
||||
zCoord = zCoord - MOVEMENT_CONSTANT
|
||||
DetachEntity(newVeh, 0, 0)
|
||||
AttachEntityToEntity(newVeh, GetVehiclePedIsIn(player, false), 0, xCoord, yCoord, zCoord, xrot, yrot, zrot, true, true, true, true, 0, true)
|
||||
end
|
||||
end
|
||||
|
||||
function resetOffSets()
|
||||
xCoord = 0
|
||||
yCoord = 0
|
||||
zCoord = 0
|
||||
xrot = 0
|
||||
yrot = 0
|
||||
zrot = 0
|
||||
end
|
||||
|
||||
function disableControls()
|
||||
Citizen.CreateThread(function()
|
||||
while controlsDisabled do
|
||||
Citizen.Wait(0)
|
||||
DisableControlAction(0,21,true) -- disable sprint
|
||||
DisableControlAction(0,24,true) -- disable attack
|
||||
DisableControlAction(0,25,true) -- disable aim
|
||||
DisableControlAction(0,47,true) -- disable weapon
|
||||
DisableControlAction(0,58,true) -- disable weapon
|
||||
DisableControlAction(0,263,true) -- disable melee
|
||||
DisableControlAction(0,264,true) -- disable melee
|
||||
DisableControlAction(0,257,true) -- disable melee
|
||||
DisableControlAction(0,140,true) -- disable melee
|
||||
DisableControlAction(0,141,true) -- disable melee
|
||||
DisableControlAction(0,142,true) -- disable melee
|
||||
DisableControlAction(0,143,true) -- disable melee
|
||||
DisableControlAction(0,75,true) -- disable exit vehicle
|
||||
DisableControlAction(27,75,true) -- disable exit vehicle
|
||||
DisableControlAction(0,32,true) -- move (w)
|
||||
DisableControlAction(0,34,true) -- move (a)
|
||||
DisableControlAction(0,33,true) -- move (s)
|
||||
DisableControlAction(0,35,true) -- move (d)
|
||||
DisableControlAction(0,71,true) -- move (d)
|
||||
DisableControlAction(0,72,true) -- move (d)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
|
||||
RegisterNetEvent("sound1Client")
|
||||
AddEventHandler("sound1Client", function(sender, toggle)
|
||||
local player_s = GetPlayerFromServerId(sender)
|
||||
local ped_s = GetPlayerPed(player_s)
|
||||
if DoesEntityExist(ped_s) and not IsEntityDead(ped_s) then
|
||||
if IsPedInAnyVehicle(ped_s, false) then
|
||||
local veh = GetVehiclePedIsUsing(ped_s)
|
||||
TogPowercallStateForVeh(veh, toggle)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function TogPowercallStateForVeh(veh, toggle)
|
||||
if DoesEntityExist(veh) and not IsEntityDead(veh) then
|
||||
if toggle == true then
|
||||
if snd_pwrcall[veh] == nil then
|
||||
snd_pwrcall[veh] = GetSoundId()
|
||||
PlaySoundFromEntity(snd_pwrcall[veh], sirenTone, veh, 0, 0, 0)
|
||||
sirenBool = true
|
||||
end
|
||||
else
|
||||
if snd_pwrcall[veh] ~= nil then
|
||||
--sirenToneNumber = 1
|
||||
StopSound(snd_pwrcall[veh])
|
||||
ReleaseSoundId(snd_pwrcall[veh])
|
||||
snd_pwrcall[veh] = nil
|
||||
sirenBool = false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function playAirHorn(bool)
|
||||
local tempVeh = GetVehiclePedIsIn(GetPlayerPed(-1), false)
|
||||
local currPlate = GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))
|
||||
if not(vehPlateBoolSavedData == currPlate) then
|
||||
TriggerServerEvent("returnLightBarVehiclePlates")
|
||||
while true do
|
||||
if(vehPlateBoolSavedData == GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))) then
|
||||
break
|
||||
end
|
||||
if not(currPlate == GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false))) then
|
||||
return
|
||||
end
|
||||
Citizen.Wait(10)
|
||||
end
|
||||
end
|
||||
if not(tempVeh == nil) and isPlateCar and vehPlateBoolSavedData == currPlate then
|
||||
if bool then
|
||||
airHornSirenID = GetSoundId()
|
||||
PlaySoundFromEntity(airHornSirenID, "SIRENS_AIRHORN", tempVeh, 0, 0, 0)
|
||||
end
|
||||
if not bool then
|
||||
StopSound(airHornSirenID)
|
||||
ReleaseSoundId(airHornSirenIDs)
|
||||
airHornSirenID = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
RegisterNetEvent("sendLightBarVehiclePlates")
|
||||
AddEventHandler("sendLightBarVehiclePlates", function(platesArr)
|
||||
local player = GetPlayerPed(-1)
|
||||
local currPlate = GetVehicleNumberPlateText(GetVehiclePedIsIn(player, false))
|
||||
for k,v in pairs(platesArr) do
|
||||
if currPlate == v then
|
||||
vehPlateBoolSavedData = currPlate
|
||||
isPlateCar = true
|
||||
return
|
||||
end
|
||||
end
|
||||
vehPlateBoolSavedData = currPlate
|
||||
isPlateCar = false
|
||||
end)
|
||||
|
||||
function deleteArray()
|
||||
for k,v in pairs(deleteVehicleLightbars) do
|
||||
DeleteVehicle(NetToVeh(v))
|
||||
end
|
||||
end
|
||||
|
||||
RegisterNetEvent("deleteLightbarVehicle")
|
||||
AddEventHandler("deleteLightbarVehicle", function(mainVehPlate)
|
||||
TriggerServerEvent("returnLightbarsForMainVeh", mainVehPlate)
|
||||
end)
|
||||
|
||||
RegisterNetEvent("updateLightbarArray")
|
||||
AddEventHandler("updateLightbarArray", function(plates)
|
||||
deleteVehicleLightbars = plates
|
||||
if sirenBool then
|
||||
toggleLights()
|
||||
end
|
||||
deleteArray()
|
||||
isPlateCar = false
|
||||
lightBool = false
|
||||
sirenBool = false
|
||||
end)
|
||||
|
||||
RegisterNetEvent("centerLightbarMenu")
|
||||
AddEventHandler("centerLightbarMenu", function()
|
||||
xCoord = 0
|
||||
yCoord = 0
|
||||
zCoord = 0
|
||||
xrot = 0
|
||||
yrot = 0
|
||||
zrot = 0
|
||||
end)
|
||||
|
||||
|
||||
-------------------MENU-------------------------
|
||||
|
||||
|
||||
local stationGarage = {
|
||||
{x=452.115966796875, y=-1018.10681152344, z=28.55, r=10}, -- Mission row PD
|
||||
{x=1866.84, y=3697.15, z=33.65, r=20}, -- Sandy Shores PD
|
||||
{x=-457.88, y=6024.79, z=31.4, r=20}, -- Paleto Bay PD
|
||||
{x=-237.292, y=6332.39, z=32.8, r=20}, -- Paleto Medical
|
||||
{x=1842.364, y=3707.348, z=33.57, r=20}, -- Sandy Medical (x=1842.64, y=3667.10, z=33.9)
|
||||
--{x=-657.582, y=293.92, z=81.9, r=10}, -- Eclipse Medical
|
||||
--{x=-875.983, y=-294.837, z=39.9, r=10}, -- Portola Medical
|
||||
{x=1169.01, y=-1509.82, z=34.9, r=20}, -- St Fiacre Medical
|
||||
{x=303.086, y=-1439.04, z=29.84, r=20}, -- Central Medical
|
||||
{x=289.94, y=-591.10, z=43.12, r=20}, -- Pillbox
|
||||
{x=-1073.0, y=-856.19, z=4.87, r=20}, -- Vespucci PD
|
||||
{x=2030.98, y=3002.75, z=-72.70, r=10}, -- Vinewood PD
|
||||
{x=386.35, y=-1633.96, z=29.29, r=20}, -- Innocence
|
||||
{x=-570.88, y=-143.93, z=37.54, r=20}, -- Rockford
|
||||
{x=969.84, y=-3020.10, z=-39.65, r=20}, -- Rockford
|
||||
|
||||
{x=-468.105, y=-338.575, z=34.45, r=10}, -- Mount Zonah Medical
|
||||
}
|
||||
|
||||
|
||||
_menuPool = MenuPool.New()
|
||||
mainMenu = NativeUI.CreateMenu("Lightbar Menu", "")
|
||||
_menuPool:Add(mainMenu)
|
||||
_menuPool:RefreshIndex()
|
||||
Citizen.CreateThread(function()
|
||||
while true do
|
||||
Citizen.Wait(0)
|
||||
_menuPool:ProcessMenus()
|
||||
if IsControlJustPressed(1, 167) then -- F2
|
||||
|
||||
--if exports.policejob:getIsInService() then
|
||||
|
||||
for i = 1, #stationGarage do
|
||||
ply = GetPlayerPed(-1)
|
||||
plyCoords = GetEntityCoords(ply, 0)
|
||||
local distance = GetDistanceBetweenCoords(stationGarage[i].x, stationGarage[i].y, stationGarage[i].z, plyCoords["x"], plyCoords["y"], plyCoords["z"], true)
|
||||
if(distance < stationGarage[i].r) then
|
||||
mainMenu:Clear()
|
||||
lightbarMenu(mainMenu)
|
||||
_menuPool:RefreshIndex()
|
||||
mainMenu:Visible(not mainMenu:Visible())
|
||||
end
|
||||
end
|
||||
--end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
function lightbarMenu(menu)
|
||||
lightbarIndex = 1
|
||||
|
||||
local item1 = NativeUI.CreateItem("Small Stick Light ", "")
|
||||
mainMenu:AddItem(item1)
|
||||
local item2 = NativeUI.CreateItem("Blue Stick Light ", "")
|
||||
mainMenu:AddItem(item2)
|
||||
local item3 = NativeUI.CreateItem("Red Stick Light ", "")
|
||||
mainMenu:AddItem(item3)
|
||||
local item4 = NativeUI.CreateItem("Blue Dome Light ", "")
|
||||
mainMenu:AddItem(item4)
|
||||
local item5 = NativeUI.CreateItem("Remove All Lights ", "")
|
||||
mainMenu:AddItem(item5)
|
||||
local item6 = NativeUI.CreateItem("Center Lightbar ", "")
|
||||
mainMenu:AddItem(item6)
|
||||
|
||||
mainMenu.OnIndexChange= function(menu, newindex)
|
||||
print("Old index: " .. lightbarIndex)
|
||||
lightbarIndex = newindex
|
||||
print("New index: " .. lightbarIndex)
|
||||
end
|
||||
|
||||
mainMenu.OnItemSelect = function (sender, item, index)
|
||||
if lightbarIndex == 1 then
|
||||
TriggerEvent("openLightbarMenu", "lightbarTwoSticks")
|
||||
elseif lightbarIndex == 2 then
|
||||
TriggerEvent("openLightbarMenu", "longLightbar")
|
||||
elseif lightbarIndex == 3 then
|
||||
TriggerEvent("openLightbarMenu", "longLightbarRed")
|
||||
elseif lightbarIndex == 4 then
|
||||
TriggerEvent("openLightbarMenu", "fbiold")
|
||||
elseif lightbarIndex == 5 then
|
||||
TriggerEvent("deleteLightbarVehicle", GetVehicleNumberPlateText(GetVehiclePedIsIn(GetPlayerPed(-1), false)))
|
||||
elseif lightbarIndex == 6 then
|
||||
TriggerEvent("centerLightbarMenu")
|
||||
end
|
||||
end
|
||||
end
|
||||
lightbarMenu(mainMenu)
|
||||
|
||||
Reference in New Issue
Block a user