Economize 20% hoje mesmo Use o código WELCOME ao finalizar a compra. BEM-VINDO

CrewPhone: Solução essencial para o problema de hash impossível

Com dificuldades para gerar números no CrewPhone? Um ajuste rápido no es_extended client.lua fará com que seus números sejam exibidos corretamente em segundos!

Como corrigir o problema de hash do CrewPhone (###)

Muitos jogadores que usam o complemento CrewPhone (ou gcPhone) em seus servidores FiveM se veem diante de um número aparentemente aleatório como ###-#### em vez do número de telefone completo esperado. É uma falha sutil, mas perturbadora, que impede os jogadores de fazer chamadas, enviar mensagens ou usar o telefone do jogo. Se você encontrou esse problema, saiba que não está sozinho, e a solução é bem simples.

Problema de Hash do CrewPhone: Solução Rápida

O problema geralmente é a ausência de um evento do lado do cliente que informa ao servidor quando um jogador está totalmente carregado no jogo. Sem essa pequena notificação, o script do lado do servidor que gera os números de telefone geralmente retorna a uma sequência padrão, produzindo os números de espaço reservado que você vê. A solução é disparar um evento do servidor assim que o carregamento do jogador for restaurado.

Aqui está o snippet completo, pronto para copiar, que você pode colocar no seu `client.lua` (ou um script de cliente Es_extended equivalente):

“`lua
— Acione um evento de servidor assim que o player for carregado
TriggerServerEvent('equipe:onPlayerLoaded', GetPlayerServerId(PlayerId()))

— Exemplo: anexar ao gancho de restauração de carga existente
AddEventHandler('esx:restoreLoadout', função()
jogadorPed local = PlayerPedId()
tipos de munição locais = {}

— Remova quaisquer armas pré-existentes
RemoveAllPedWeapons(playerPed, verdadeiro)

— Dê novamente ao jogador seu carregamento
para _, arma em ipairs(ESX.PlayerData.loadout) faça
nomeDaArma Local = nomeDaArma
Tipo de munição local = GetPedAmmoTypeFromWeapon(playerPed, nomedaarma)

— Adicionar arma ao ped
GiveWeaponToPed(playerPed, weaponName, 0, falso, falso)
SetPedWeaponTintIndex(playerPed, nomeDaArma, arma.tintIndex)

— Adicione quaisquer componentes de arma
para _, componente em ipairs(weapon.components) faça
componenteHash local = ESX.GetWeaponComponent(weaponName, componente).hash
GiveWeaponComponentToPed(playerPed, nomeDaArma, HashDoComponente)
fim

— Adicione munição apenas uma vez por tipo
se não ammoTypes[ammoType] então
AddAmmoToPed(playerPed, nomedaarma, arma.munição)
ammoTypes[ammoType] = verdadeiro
fim
fim

— Informe ao servidor que o player está totalmente carregado
TriggerServerEvent('equipe:onPlayerLoaded', GetPlayerServerId(PlayerId()))

isLoadoutLoaded = verdadeiro
fim)
“`

Tudo o que você precisa fazer é colar este bloco acima do restante do código do lado do cliente, garantindo que ele seja executado imediatamente após os dados do player serem totalmente restaurados.

Por que o evento é crucial

Em um servidor FiveM típico executando Es_extended, os dados do jogador (incluindo o número de telefone) são armazenados no servidor e recuperados sempre que um jogador entra. O script do cliente então envia um evento "jogador carregado" de volta ao servidor para que este saiba que todos os recursos necessários (armas, roupas, dados do telefone) foram aplicados.

Se esse evento estiver ausente, o servidor não poderá vincular corretamente o número de telefone ao objeto do jogador, o que o levará a retornar para:

1. Um hash padrão e ilegível (o infame `###-####`), ou
2. Nenhum número, o que força o cliente a solicitar um novo, causando a mesma falha novamente.

Ao disparar `crew:onPlayerLoaded` no momento certo, você dá ao servidor a chance de vincular o objeto player recém-carregado ao seu número de telefone armazenado. A parte de conversão de hash do script então transforma corretamente esse número em um formato legível.

Guia de configuração passo a passo

1. Localize o script do seu cliente
Encontre o `client.lua` (ou um arquivo com nome similar) na sua pasta de recursos `es_extended` ou `CrewPhone`.

2. Insira o gatilho
No topo do arquivo, adicione:
“`lua
TriggerServerEvent('equipe:onPlayerLoaded', GetPlayerServerId(PlayerId()))
“`
Isso garante que o evento seja disparado antes mesmo de qualquer outra lógica ser executada.

3. Atualizar o gancho de carregamento
Procure pela linha `AddEventHandler('esx:restoreLoadout', function()`.
Substitua ou aumente o manipulador pelo exemplo completo mostrado acima.

4. Salvar e recarregar
Salve o arquivo e execute o seguinte no console do servidor:
“`bash
aplicar_pgsql
reiniciar CrewPhone
reiniciar es_extended
“`
Como alternativa, basta reiniciar o servidor inteiro para garantir que todas as alterações entrem em vigor.

5. Teste
Entre no servidor, equipe uma arma e abra seu telefone no jogo. O número agora deve aparecer corretamente, por exemplo, `012-3456`.

Solução de problemas comuns

| Problema | Possível causa | Correção |
|———|—————-|—–|
| O número de telefone ainda aparece como `###-####` | O evento não dispara (por exemplo, ordem do script errada) | Verifique novamente se a linha `TriggerServerEvent` aparece acima de quaisquer outras definições de função. |
| Os logs do servidor mostram `ERROR: crew:onPlayerLoaded` | Evento com nome incorreto no lado do servidor | Verifique se o script do servidor escuta `crew:onPlayerLoaded` (geralmente em `server.lua`). |
| O jogador recebe um diferente número a cada vez | Regeneração de número no carregamento | Garante que `crew:onPlayerLoaded` seja acionado somente após o carregamento ser totalmente aplicado; o snippet acima cuida disso. |
| O jogo trava ao carregar armas | Hash de arma ou valor de componente incorreto | Confirme se a versão do ESX que você está usando corresponde à API do snippet (algumas versões mais antigas usam `GetWeaponComponent`.) |

Alternativas se o script não funcionar

Embora a solução acima funcione para a maioria das configurações, você ainda poderá enfrentar desafios se o seu servidor executar scripts personalizados ou uma estrutura diferente. Aqui estão algumas abordagens alternativas:

1. Função de registro de chamada telefônica direta
“`lua
TriggerServerEvent('crew:registerPhone', GetPlayerServerId(PlayerId()))
“`
Algumas variantes do CrewPhone expõem um evento `registerPhone` que força o servidor a gerar um novo número, independentemente do status do carregamento.

2. Corrigir o gerador de números do lado do servidor
Localize o script do servidor que manipula `crew:onPlayerLoaded` e certifique-se de que ele inclui:
“`lua
se não for playerData.phone então
playerData.phone = GerarNúmeroDeTelefone()
fim
TriggerClientEvent('crew:setPhoneNumber', src, playerData.phone)
“`
Isso força a definição de um número apropriado, mesmo que o cliente não tenha solicitado um.

Expandindo além do problema do hash

Corrigir o problema de hash é apenas uma parte de ter um sistema telefônico impecável no seu servidor. Para obter o máximo do CrewPhone, considere adicionar:

Sons de chamada personalizados – Substitua o toque padrão por gêneros localizados.
Proteção contra spam de mensagens – Implemente tempos de espera para evitar que os jogadores inundem o chat.
Importação de contatos – Permitir que os jogadores importem contatos de um banco de dados compartilhado para facilitar o gerenciamento.

Cada uma dessas melhorias pode ser abordada mais tarde, mas ao começar com a correção do hash, você eliminará um grande ponto de atrito para seus jogadores.

Conclusão

O Problema de hash do CrewPhone é uma pequena falha que pode parecer um grande obstáculo. Ao garantir que o cliente dispare o evento `crew:onPlayerLoaded` logo após a restauração do carregamento de um jogador, você sinaliza ao servidor para vincular o número de telefone correto, eliminando a exibição do espaço reservado `###-####`. Implemente o snippet acima, teste-o e você terá uma experiência de telefone perfeita para seus jogadores.

Recapitulação rápida:

1. Insira o gatilho do evento no topo do seu arquivo de cliente.
2. Corrigir o manipulador `esx:restoreLoadout` com o exemplo de código detalhado.
3. Reinicie o servidor e verifique se o número está correto.

Com essas etapas, o problema de hash do CrewPhone será uma lembrança do passado, permitindo que sua comunidade desfrute de um sistema telefônico totalmente funcional no jogo. Boas partidas!

Lucas
Lucas

Eu sou Luke, sou um gamer e adoro escrever sobre FiveM, GTA e roleplay. Eu administro uma comunidade de roleplay e tenho cerca de 10 anos de experiência em administração de servidores.

Artigos: 570

Deixe um comentário