forked from Simnation/Main
368 lines
No EOL
11 KiB
Lua
368 lines
No EOL
11 KiB
Lua
if Config.RegisterKeyMapping then
|
|
RegisterKeyMapping('TogglePhone', Lang:t('info.openphone'), 'keyboard', Config.OpenKey)
|
|
else
|
|
CreateThread(function()
|
|
while true do
|
|
if IsControlJustReleased(0, Config.OpenKeyNumber) then
|
|
openPhone()
|
|
end
|
|
Wait(0)
|
|
end
|
|
end)
|
|
end
|
|
|
|
local isInFocus = false
|
|
local isBlocked = false
|
|
|
|
function sendNotification(text)
|
|
|
|
TriggerEvent('QBCore:Notify', text) --You can edit this event to any Notification System you want
|
|
|
|
end
|
|
|
|
function blockPhone()
|
|
|
|
if isBlocked then
|
|
return true
|
|
end
|
|
|
|
return false --return true if you want to block that anyone can open the phone
|
|
|
|
end
|
|
|
|
function GiveCarKeys(plate, model)
|
|
|
|
TriggerEvent("qb-vehiclekeys:client:AddKeys", plate)
|
|
|
|
end
|
|
CreateThread(function()
|
|
while true do
|
|
if getHandyActive() then
|
|
if not getFlashLight() then
|
|
DisableControlAction(0, 1, true)
|
|
DisableControlAction(0, 2, true)
|
|
end
|
|
DisableControlAction(0, 304, true)
|
|
DisableControlAction(0, 101, true)
|
|
DisableControlAction(0, 74, true)
|
|
DisableControlAction(0, 303, true)
|
|
DisableControlAction(0, 311, true)
|
|
DisableControlAction(0, 24, true)
|
|
DisableControlAction(0, 25, true)
|
|
DisableControlAction(0, 29, true)
|
|
DisableControlAction(0, 322, true)
|
|
DisableControlAction(0, 200, true)
|
|
DisableControlAction(0, 202, true)
|
|
DisableControlAction(0, 177, true)
|
|
DisableControlAction(0, 37, true)
|
|
DisableControlAction(0, 245, true)
|
|
DisableControlAction(0, 263, true)
|
|
DisableControlAction(0, 45, true)
|
|
DisableControlAction(0, 80, true)
|
|
DisableControlAction(0, 140, true)
|
|
DisableControlAction(0, 0, true)
|
|
DisableControlAction(0, 69, true)
|
|
DisableControlAction(0, 70, true)
|
|
DisableControlAction(0, 36, true)
|
|
DisableControlAction(0, 326, true)
|
|
DisableControlAction(0, 341, true)
|
|
DisableControlAction(0, 343, true)
|
|
DisableControlAction(0, 257, true)
|
|
DisableControlAction(0, 22, true)
|
|
DisableControlAction(0, 44, true)
|
|
DisableControlAction(0, 288, true)
|
|
DisableControlAction(0, 289, true)
|
|
DisableControlAction(0, 170, true)
|
|
DisableControlAction(0, 167, true)
|
|
DisableControlAction(0, 26, true)
|
|
DisableControlAction(0, 73, true)
|
|
DisableControlAction(2, 199, true)
|
|
DisableControlAction(0, 47, true)
|
|
DisableControlAction(0, 264, true)
|
|
DisableControlAction(0, 257, true)
|
|
DisableControlAction(0, 140, true)
|
|
DisableControlAction(0, 121, true)
|
|
DisableControlAction(0, 114, true)
|
|
DisableControlAction(0, 81, true)
|
|
DisableControlAction(0, 82, true)
|
|
DisableControlAction(0, 99, true)
|
|
DisableControlAction(0, 330, true)
|
|
DisableControlAction(0, 331, true)
|
|
DisableControlAction(0, 100, true)
|
|
DisableControlAction(0, 141, true)
|
|
DisableControlAction(0, 142, true)
|
|
DisableControlAction(0, 143, true)
|
|
DisableControlAction(0, 106, true)
|
|
DisableControlAction(0, 115, true)
|
|
DisableControlAction(0, 91, true)
|
|
DisableControlAction(0, 92, true)
|
|
DisableControlAction(0, 245, true)
|
|
DisableControlAction(0, 44, true)
|
|
DisableControlAction(0, 157, true)
|
|
DisableControlAction(0, 158, true)
|
|
DisableControlAction(0, 160, true)
|
|
DisableControlAction(0, 164, true)
|
|
DisableControlAction(0, 165, true)
|
|
DisableControlAction(0, 159, true)
|
|
DisableControlAction(0, 161, true)
|
|
DisableControlAction(0, 162, true)
|
|
DisableControlAction(0, 163, true)
|
|
DisableControlAction(0, 182, true)
|
|
end
|
|
Wait(0)
|
|
end
|
|
end)
|
|
|
|
function checkPlayerDead()
|
|
local PlayerData = QBCore.Functions.GetPlayerData()
|
|
|
|
if Config.VisnAre then
|
|
local dead = exports['visn_are']:GetHealthBuffer().unconscious
|
|
|
|
return dead
|
|
end
|
|
|
|
if not PlayerData or not PlayerData.metadata then
|
|
return false
|
|
end
|
|
|
|
return PlayerData.metadata['isdead']
|
|
end
|
|
|
|
function ShowHelpNotification(msg, thisFrame, beep, duration)
|
|
AddTextEntry('HelpNotification', msg)
|
|
|
|
if thisFrame then
|
|
DisplayHelpTextThisFrame('HelpNotification', false)
|
|
else
|
|
if beep == nil then
|
|
beep = true
|
|
end
|
|
BeginTextCommandDisplayHelp('HelpNotification')
|
|
EndTextCommandDisplayHelp(0, false, beep, duration or -1)
|
|
end
|
|
end
|
|
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(500)
|
|
if NetworkIsPlayerActive(PlayerId()) then
|
|
TriggerServerEvent('roadphone:playerLoad', GetPlayerServerId(PlayerId()))
|
|
break
|
|
end
|
|
end
|
|
end)
|
|
|
|
|
|
RegisterNetEvent('QBCore:Client:OnPlayerLoaded', function()
|
|
|
|
CreateThread(function()
|
|
if Config.RemoveFromRadioWhenDead then
|
|
while true do
|
|
Wait(2000)
|
|
if checkPlayerDead() and isInRadio() then
|
|
TriggerEvent("roadphone:client:leaveradio")
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
end)
|
|
|
|
RegisterNUICallback('inputfocus', function(data, cb) -- Do not change anything here!
|
|
|
|
isInFocus = data.focus
|
|
|
|
if isInFocus then
|
|
SetNuiFocusKeepInput(false)
|
|
else
|
|
SetNuiFocusKeepInput(true)
|
|
end
|
|
|
|
cb('ok')
|
|
end)
|
|
|
|
function setRadioChannel(frequenz, playername)
|
|
if Config.UseMumbleVoip then
|
|
exports[Config.MumbleExport]:addPlayerToRadio(frequenz)
|
|
exports[Config.MumbleExport]:SetMumbleProperty("radioEnabled", true)
|
|
elseif Config.UseTokoVoip then
|
|
local radiochannel = exports.tokovoip_script:getPlayerData(playername, "radio:channel")
|
|
exports.tokovoip_script:removePlayerFromRadio(radiochannel)
|
|
exports.tokovoip_script:setPlayerData(playername, "radio:channel", frequenz, true)
|
|
exports.tokovoip_script:addPlayerToRadio(frequenz)
|
|
elseif Config.UseSaltyChat then
|
|
exports['saltychat']:SetRadioChannel(frequenz, true)
|
|
elseif Config.UsePmaVoice then
|
|
exports[Config.PMAVoiceExport]:addPlayerToRadio(frequenz)
|
|
exports[Config.PMAVoiceExport]:setVoiceProperty('radioEnabled', true)
|
|
exports[Config.PMAVoiceExport]:setVoiceProperty('micClicks', true)
|
|
elseif Config.UseYacaVoice then
|
|
exports['yaca-voice']:enableRadio(true)
|
|
exports['yaca-voice']:changeRadioFrequency(frequenz)
|
|
end
|
|
|
|
TriggerEvent("roadphone:sendNotification", {
|
|
apptitle = "APP_RADIO_NAME",
|
|
title = Lang:t('info.radiojoined', { value = frequenz }),
|
|
message = nil,
|
|
img = "/public/img/Apps/radio.png"
|
|
})
|
|
|
|
setInRadio(true)
|
|
end
|
|
|
|
AddEventHandler("roadphone:client:call:eventnumber", function(number)
|
|
|
|
if tostring(number) == "77777" then --CHECK WHICH NUMBER IS CALLED
|
|
|
|
--YOUR CODE
|
|
|
|
end
|
|
|
|
end)
|
|
|
|
RegisterNUICallback('sendDispatch', function(data, cb)
|
|
TriggerServerEvent("roadphone:sendDispatch", GetPlayerServerId(PlayerId()), data.text, data.job, nil, false, data.image)
|
|
cb('ok')
|
|
end)
|
|
|
|
function clientSideInventoryValidation() -- DONT USE THIS FUNCTION IF YOU DONT KNOW WHAT YOU ARE DOING
|
|
|
|
--YOUR CODE
|
|
|
|
return 'PHONEITEM' --needs to return colored phone items name from config.lua = phone will open | false = phone will not open
|
|
|
|
end
|
|
|
|
|
|
function testMail()
|
|
local data = {
|
|
sender = 'RoadShop',
|
|
subject = "RoadShop TEST",
|
|
message = "Mails from scripts come back even better than before now even with <span style='color: red'>Color</span> support. <br> <br> + Support for line breaks and button support ^^",
|
|
button = {
|
|
buttonEvent = "qb-drugs:client:setLocation",
|
|
buttonData = "test",
|
|
buttonname = "test"
|
|
}
|
|
}
|
|
|
|
TriggerServerEvent("roadphone:receiveMail", data)
|
|
end
|
|
|
|
function playRoadSound(type)
|
|
|
|
if type == 'message' then
|
|
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
Wait(300)
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
Wait(300)
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
|
|
elseif type == 'dispatch' then
|
|
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
Wait(300)
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
Wait(300)
|
|
PlaySound(-1, "Menu_Accept", "Phone_SoundSet_Default", 0, 0, 1)
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
RegisterNUICallback('app_custom_event', function(data, cb)
|
|
|
|
local app = data.app
|
|
|
|
if app == "APPNAME" then
|
|
|
|
--Your Code
|
|
|
|
end
|
|
|
|
|
|
cb('ok')
|
|
|
|
end)
|
|
|
|
exports('isBlocked', function()
|
|
|
|
return blockPhone()
|
|
|
|
end)
|
|
|
|
|
|
exports('blockPhone', function()
|
|
|
|
isBlocked = true
|
|
return true
|
|
|
|
end)
|
|
|
|
exports('unblockPhone', function()
|
|
|
|
isBlocked = false
|
|
return false
|
|
|
|
end)
|
|
|
|
exports('inputFocus', function(boolean)
|
|
|
|
isInFocus = boolean
|
|
|
|
if isInFocus then
|
|
SetNuiFocusKeepInput(false)
|
|
else
|
|
SetNuiFocusKeepInput(true)
|
|
end
|
|
|
|
end)
|
|
|
|
|
|
function temperatureRanges(weatherType)
|
|
local temperatureRanges = {
|
|
ExtraSunny = {90, 110},
|
|
Clear = {80, 95},
|
|
Neutral = {80, 95},
|
|
Smog = {90, 95},
|
|
Foggy = {80, 90},
|
|
Clouds = {80, 90},
|
|
Overcast = {80, 80},
|
|
Clearing = {75, 85},
|
|
Raining = {75, 90},
|
|
ThunderStorm = {75, 90},
|
|
Blizzard = {-15, 10},
|
|
Snowing = {0, 32},
|
|
Snowlight = {0, 32},
|
|
Christmas = {-5, 15},
|
|
Halloween = {50, 80}
|
|
}
|
|
|
|
-- Fetch the range and get a random temperature within that range
|
|
local minTemp, maxTemp = table.unpack(temperatureRanges[weatherType])
|
|
local randomTemperature = getRandomInt(minTemp, maxTemp)
|
|
|
|
-- Convert to Celsius if necessary
|
|
if not Config.Fahrenheit then
|
|
randomTemperature = (randomTemperature - 32) * 5 / 9
|
|
end
|
|
|
|
-- Format and return temperature with unit
|
|
return string.format('%.0f°%s', randomTemperature, Config.Fahrenheit and 'F' or 'C')
|
|
end
|
|
|
|
CreateThread(function()
|
|
while true do
|
|
Wait(3000)
|
|
|
|
TriggerEvent('roadphone:checkWeather')
|
|
|
|
Wait(120000)
|
|
end
|
|
end) |