Pular para o conteúdo

O seu recurso ao lado dele

Exports e state bags trata de como conversar com o telefone. Esta página trata da direção oposta: as poucas coisas que um recurso deve saber para que os dois não fiquem disputando o mesmo jogador.

Nada disso precisa de dependência, evento ou permissão. Quatro state bags e um export, e a maioria dos scripts só precisa de uma linha.


Uma fotografia captura o quadro inteiro. Qualquer coisa que você estivesse desenhando quando o obturador disparou — um aviso de ajuda, o texto de um marcador, uma barra de progresso, uma interface de texto — sai na foto, e este recurso não pode impedir você de desenhá-la. Nada nosso fica entre a sua chamada de desenho e a tela.

Então há algo que você pode verificar antes:

if LocalPlayer.state.phoneCamera then goto skip end -- or return, or whatever your loop wants

phoneCamera é true desde o momento em que o visor da câmera abre até fechar. Uma linha e o seu aviso fica de fora do álbum de fotos de um desconhecido.

O próprio HUD do telefone já sai da frente: o minimapa e as barras de vida do jogo ficam ocultos enquanto a câmera estiver aberta, para que a pessoa fotografe exatamente o que está enquadrando.

O telefone dobrável é composto por dois objetos anexados à mão do ped. Um script que limpa props soltos pelo mapa, ou oferece Pressione [E] para deletar o objeto para qualquer coisa próxima, vai oferecer deletar o telefone de alguém — e fará isso enquanto a pessoa o estiver segurando.

A regra geral vale mais do que o nome de um modelo: um objeto anexado a um ped não é lixo.

if IsEntityAttached(object) then goto skip end

Se você precisar ser específico, os modelos são pear_fold_base* e pear_fold_leaf*, um para cada acabamento.

3. O ped pertence ao telefone enquanto ele está na mão

Seção intitulada “3. O ped pertence ao telefone enquanto ele está na mão”

mic_phone_props controla a pose do ped enquanto o telefone está na mão, e leva isso a sério: há um watchdog que recoloca a animação de segurar o telefone meio segundo depois de qualquer outra coisa assumir a parte superior do corpo. Ele não tem como saber de quem é a animação que está vendo.

Se o seu script anima esse ped — uma chamada, um cenário, uma tarefa própria — peça os braços emprestados primeiro:

exports.mic_phone_props:SetPose(false) -- they are yours; the phone hangs where a phone hangs
-- … your animation …
exports.mic_phone_props:SetPose(true) -- and back

Liberar a pose também move o prop: ele vai para o osso e o deslocamento que o próprio prop_npc_phone_02 do jogo usa, e se dobra, de modo que todas as animações originais de celular funcionam sem que você precise medir nada. SetPose(true) devolve a pegada, o ângulo da dobradiça e a animação que ele tinha antes.

IsOut() informa se há algum telefone na mão para ser recolhido.

4. O modo item muda o que um identificador significa

Seção intitulada “4. O modo item muda o que um identificador significa”

Quando os telefones são itens, o telefone pertence ao dispositivo em vez de ao personagem. phoneDevice no jogador indica o item em que aquele telefone vive, e é nil no modo personagem.

Isso importa se você armazena qualquer coisa associada a um telefone: um número, uma assinatura, uma licença. Use exports.mic_phone:GetDevice() e use isso como chave, caso contrário os seus dados seguirão a pessoa quando o que ela vendeu foi o telefone.

5. Quatro state bags e um comando que imprime todas elas

Seção intitulada “5. Quatro state bags e um comando que imprime todas elas”
phoneOpen boolean the phone is out and on screen
phoneCamera boolean a viewfinder is up
onCallWith number | nil the source at the other end
flashlight boolean their torch is on

A lista completa, com todas as demais, está em Exports e state bags. phoneapi <id> imprime cada uma delas para um jogador no console do servidor, o que é mais rápido do que tentar adivinhar qual lado está errado.


Uma notificação, uma mensagem, um e-mail, uma fatura — todos são exports de servidor, todos de uma única linha, todos em Exports e state bags.

Um aplicativo inteiro feito por você está em o seu próprio app nele: uma chamada, nenhuma configuração no telefone, nenhuma reinicialização, rodando em um frame próprio.

Não há um hook para impedir a abertura do telefone. As regras vivem em Config.Open.Restrict — morto, algemado, nadando, dirigindo e assim por diante — e um recurso externo não pode adicionar uma regra própria. Se você precisa que o telefone não possa ser aberto durante o seu minigame hoje, as opções sinceras são usar uma regra de configuração que coincida com o seu estado ou chamar exports.mic_phone:Close() quando a sua atividade começar. Avise se precisar desse hook; é algo pequeno de adicionar e ninguém pediu até agora.


  • O seu script desenha na tela? → pule enquanto phoneCamera estiver ativo
  • Ele deleta, limpa ou pega objetos próximos? → pule objetos anexados (IsEntityAttached)
  • Ele anima o jogador? → use SetPose(false) e SetPose(true)
  • Ele guarda dados por telefone? → use phoneDevice como chave, não o personagem
  • Ele precisa saber se alguém está disponível? → verifique phoneOpen, onCallWith