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) |