
Click to load video from YouTube. By watching, you agree to their privacy policy.
LB Phone v2
LB Phone v2 - Um telefone avançado para FiveM com recursos exclusivos e bom desempenho. Compatível com o framework ESX para servidores FiveM.
Descrição
Aplicativos Personalizados
O LB Phone permite que você adicione aplicativos que possuem uma interface ou que simplesmente acionam funções ao abrir o aplicativo. Para adicionar um aplicativo que aciona uma função ao ser aberto, vá para lb-phone/config/config.lua e adicione o aplicativo à tabela Config.CustomApps, assim:
Config.CustomApps = { [app_identifier] = { -- Um identificador exclusivo para o aplicativo, não exibido para o usuário name = Nome do App, -- O nome do aplicativo, exibido para o usuário description = Descrição do App, -- A descrição do aplicativo, exibida para o usuário developer = LB Phone, -- OPCIONAL, o desenvolvedor do aplicativo defaultApp = true, -- OPCIONAL, se definido como verdadeiro, o aplicativo deve ser adicionado sem precisar ser baixado, game = false, -- OPCIONAL, se definido como verdadeiro, o aplicativo será adicionado à seção de jogos size = 59812, -- OPCIONAL em kB images = { https://example.com/photo.jpg }, -- OPCIONAL, array de imagens do aplicativo na loja de aplicativos ui = nome-do-recurso/ui/index.html, -- OPCIONAL icon = https://cfx-nui- .. GetCurrentResourceName() .. /ui/icon.png, -- OPCIONAL, ícone do aplicativo price = 0, -- OPCIONAL, faça os jogadores pagarem com dinheiro do jogo para baixar o aplicativo landscape = false, -- OPCIONAL, se definido como verdadeiro, o aplicativo será exibido em modo paisagem keepOpen = true, -- OPCIONAL, se definido como verdadeiro, o aplicativo não será fechado quando o jogador abrir o aplicativo (funciona apenas se ui não estiver definido) onUse = function() -- OPCIONAL, função a ser chamada quando o aplicativo for aberto -- faça algo end, onServerUse = function(source) -- OPCIONAL, função do lado do servidor a ser chamada quando o aplicativo for aberto -- faça algo end }}
Aplicativos personalizados usando UI
Se você quiser usar uma UI personalizada para seu aplicativo, precisará criar um script separado e fornecer o caminho do arquivo HTML e enviá-lo como ui.
A maneira recomendada de criar um aplicativo com UI é fazê-lo usando exports. Temos aplicativos template que você pode usar como referência.
Se o usuário tiver o modo escuro ativado, data-theme será definido como escuro. Caso contrário, será definido como claro.
Adicionando o aplicativo
Para adicionar o aplicativo, use a AddCustomApp exportação.
Removendo o aplicativo
Para remover o aplicativo, use a RemoveCustomApp exportação.
Enviando uma mensagem para a UI
Para enviar uma mensagem para a UI, você precisa usar a SendCustomAppMessage exportação em vez de usar SendNUIMessage. Você ouviria por ela da mesma forma no frontend.
Componentes & funções importadas
Quando o aplicativo é carregado no telefone, algumas funções são importadas para o objeto globalThis.
| Nome | Tipo | Descrição |
|---|---|---|
| resourceName | string | O nome do recurso que adicionou o aplicativo personalizado |
| appName | string | O nome do aplicativo |
| settings | object | As configurações do telefone |
| components | object | Componentes úteis para o aplicativo |
Componentes
Os seguintes componentes podem ser acessados através de globalThis.components. Você pode visualizar um arquivo de declaração TypeScript em lb-reactts/ui/src/components.d.ts.
createGameRender
Criar uma renderização de jogo, que renderiza o jogo em um canvas. Isso é usado para criar uma câmera em seu aplicativo e deve ser usado com as exportações de câmera.
const gameRender = components.createGameRender(canvas) // defina a proporçãogameRender.resizeByAspect(9 / 16) // pause a renderizaçãogameRender.pause() // retome a renderizaçãogameRender.resume() // tire uma fotoconst blob: Blob = await gameRender.takePhoto() // grave um vídeoconst recorder = gameRender.startRecording((blob: Blob) => { const video = URL.createObjectURL(blob)}) await new Promise((resolve) => setTimeout(resolve, 5000)) recorder.stop() // destrua a renderização do jogogameRender.destroy()
uploadMedia
Faz upload de mídia e retorna uma promessa com a URL.
// O tipo de upload pode ser 'Vídeo' | 'Imagem' | 'Áudio'const url = await components.uploadMedia('Video', blob)
saveToGallery
Salva uma URL na galeria e retorna uma promessa com o ID
const id = await components.saveToGallery(url)
setColorPicker
components.setColorPicker({ onSelect(color) {}, onClose(color) {}})
setPopUp
components.setPopUp({ title: 'Menu Popup', description: 'Confirme sua escolha', buttons: [ { title: 'Cancelar', color: 'red', cb: () => { console.log('Cancelar') } }, { title: 'Confirmar', color: 'blue', cb: () => { console.log('Confirmar') } } ]})
setContextMenu
components.setContextMenu({ title: 'Menu de Contexto', buttons: [ { title: 'Notificação do Telefone', color: 'blue', cb: () => { sendNotification({ title: notificationText }) } }, { title: 'Notificação do GTA', color: 'red', cb: () => { fetchNui('drawNotification', { message: notificationText }) } } ]})
setContactSelector
components.setContactSelector({ onSelect(contact) { components.setPopUp({ title: 'Contato Selecionado', description: `${contact.firstname ?? '??'} ${contact.lastname ?? ''} ${contact.number}`, buttons: [ { title: 'OK' } ] }) }})
setShareComponent
Veja a exportação AirShare para quais dados enviar.
components.setShareComponent({ type: 'image', data: { isVideo: false, src: 'https://docs.lbscripts.com/images/icons/icon.png' }})
setEmojiPickerVisible
components.setEmojiPickerVisible({ onSelect: (emoji) => { components.setEmojiPickerVisible(false) components.setPopUp({ title: 'Emoji Selecionado', description: emoji.emoji, buttons: [ { title: 'OK' } ] }) }})
setGifPickerVisible
components.setGifPickerVisible({ onSelect(gif) { components.setPopUp({ title: 'GIF Selecionado', attachment: { src: gif }, buttons: [ { title: 'OK' } ] }) }})
setGallery
components.setGallery({ includeVideos: true, includeImages: true, allowExternal: true, multiSelect: false, onSelect(data) { components.setPopUp({ title: 'Mídia Selecionada', attachment: { src: Array.isArray(data) ? data[0].src : data.src }, buttons: [ { title: 'OK' } ] }) }})
setFullscreenImage
components.setFullscreenImage('https://docs.lbscripts.com/images/icons/icon.png')
setHomeIndicatorVisible
components.setHomeIndicatorVisible(true)
Funções
fetchNui(event, data, scriptName?)
fetchNui('test', { foo: 'bar'})
onNuiEvent
Ouça mensagens NUI enviadas via SendCustomAppMessage
onNuiEvent('test', (data) => { console.log(data)})
onSettingsChange
Ouça por alterações nas configurações
onSettingsChange((newSettings) => { console.log(newSettings)})
createCall
createCall({ number: '1234567890', // você pode enviar `company` em vez de `number` para chamar uma empresa videoCall: false, hideNumber: false})





