Cupón WELCOME disponible Usa el código WELCOME al finalizar la compra hasta el 31 de julio de 2026. WELCOME

How to Fix CrewPhone Hash Issues

¿Tienes problemas con la generación de números de CrewPhone? ¡Con un pequeño ajuste a es_extended client.lua, tus números se mostrarán correctamente en segundos!

Cómo solucionar el problema de hash de CrewPhone (###)

Muchos jugadores que usan el complemento CrewPhone (o gcPhone) en sus servidores FiveM se encuentran mirando un número aparentemente aleatorio como ###-#### En lugar del número de teléfono completo esperado. Es un fallo sutil pero molesto que impide a los jugadores hacer llamadas, enviar mensajes o usar el teléfono del juego. Si te has topado con este problema, no eres el único, y la solución es bastante sencilla.

Problema de hash de CrewPhone: solución rápida

El problema suele ser la falta de un evento del cliente que avisa al servidor cuando un jugador ha cargado completamente el juego. Sin esta pequeña notificación, el script del servidor que genera los números de teléfono suele recurrir a una secuencia predeterminada, generando los números de marcador de posición que se ven. La solución es ejecutar un evento del servidor en cuanto se restablezca la configuración del jugador.

Aquí está el fragmento completo, listo para copiar, que puedes colocar en tu `client.lua` (o un script de cliente Es_extended equivalente):

“`lua
— Activar un evento de servidor tan pronto como el reproductor se haya cargado
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

— Ejemplo: Conéctelo al gancho de restauración de carga existente
AddEventHandler('esx:restoreLoadout', función()
jugador localPed = PlayerPedId()
tipos de munición locales = {}

— Retirar cualquier arma preexistente
RemoveAllPedWeapons(jugadorPed, verdadero)

— Devolverle al jugador su equipamiento.
para _, arma en ipairs(ESX.PlayerData.loadout) hacer
nombreDeArmaLocal = nombreDeArma
tipoMunición local = GetPedAmmoTypeFromWeapon(playerPed, nombreDeArma)

—Añadir arma al peatón
GiveWeaponToPed(jugadorPed, nombreDeArma, 0, falso, falso)
SetPedWeaponTintIndex(playerPed, nombreDeArma, arma.índiceDeTinte)

—Añadir cualquier componente de arma
para _, componente en ipairs(weapon.components) hacer
componente localHash = ESX.GetWeaponComponent(nombreDeArma, componente).hash
GiveWeaponComponentToPed(playerPed, weaponName, componentHash)
fin

— Añade munición solo una vez por tipo
si no es ammoTypes[ammoType] entonces
AddAmmoToPed(playerPed, weaponName, weapon.ammo)
ammoTypes[tipo de munición] = verdadero
fin
fin

— Informar al servidor que el reproductor se ha cargado completamente
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

isLoadoutLoaded = verdadero
fin)
“`

Todo lo que necesitas hacer es pegar este bloque encima del resto del código del lado del cliente, asegurándote de que se ejecute inmediatamente después de que los datos del reproductor se restauren por completo.

Por qué el evento es crucial

En un servidor FiveM típico con Es_extended, los datos del jugador (incluido el número de teléfono) se almacenan en el servidor y se recuperan cada vez que un jugador se une. El script del cliente envía entonces un evento de "jugador cargado" al servidor para que este sepa que se han aplicado todos los recursos necesarios (armas, ropa, datos del teléfono).

Si falta ese evento, el servidor no puede vincular correctamente el número de teléfono al objeto del jugador, por lo que recurre a:

1. Un hash predeterminado e ilegible (el infame `###-####`), o
2. No hay ningún número en absoluto, lo que obliga al cliente a solicitar uno nuevo, provocando nuevamente el mismo fallo.

Al ejecutar `crew:onPlayerLoaded` en el momento oportuno, se le da al servidor la oportunidad de vincular el objeto de jugador recién cargado a su número de teléfono almacenado. La conversión de hash del script transforma correctamente ese número a un formato legible.

Guía de configuración paso a paso

1. Localice el script de su cliente
Busque `client.lua` (o un archivo con un nombre similar) dentro de su carpeta de recursos `es_extended` o `CrewPhone`.

2. Insertar el gatillo
En la parte superior del archivo, agregue:
“`lua
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))
“`
Esto garantiza que el evento se active incluso antes de que se ejecute cualquier otra lógica.

3. Actualizar el gancho de carga
Busque la línea `AddEventHandler('esx:restoreLoadout', function()`.
Reemplace o amplíe el controlador con el ejemplo completo que se muestra arriba.

4. Guardar y recargar
Guarde el archivo y luego ejecute lo siguiente en la consola de su servidor:
"golpe
aplicar_pgsql
reiniciar CrewPhone
reiniciar es_extended
“`
Alternativamente, simplemente reinicie todo el servidor para garantizar que todos los cambios surtan efecto.

5. Prueba
Únete al servidor, equipa un arma y abre tu teléfono del juego. El número debería aparecer correctamente, p. ej., "012-3456".

Solución de problemas comunes

| Problema | Posible causa | Solución |
|———|—————-|—–|
| El número de teléfono todavía se muestra como `###-####` | El evento no se activa (por ejemplo, el orden del script es incorrecto) | Verifique nuevamente que la línea `TriggerServerEvent` aparezca encima de cualquier otra definición de función. |
| Los registros del servidor muestran `ERROR: crew:onPlayerLoaded` | Evento mal nombrado en el lado del servidor | Verifique que el script del servidor escucha `crew:onPlayerLoaded` (generalmente en `server.lua`). |
| El jugador recibe un diferente número cada vez | Regeneración de números al cargar | Asegúrese de que `crew:onPlayerLoaded` se active solo después de que la carga se haya aplicado por completo; el fragmento anterior maneja esto.
| El juego se bloquea al cargar armas | Valor de componente o hash de arma incorrecto | Confirma que la versión de ESX que estás usando coincida con la API del fragmento (algunas versiones anteriores usan `GetWeaponComponent`).

Alternativas si el script no funciona

Aunque la solución anterior funciona para la mayoría de las configuraciones, aún podría tener problemas si su servidor ejecuta scripts personalizados o un framework diferente. Aquí tiene un par de alternativas:

1. Llamar directamente a la función de registro del teléfono
“`lua
TriggerServerEvent('crew:registerPhone', GetPlayerServerId(PlayerId()))
“`
Algunas variantes de CrewPhone exponen un evento `registerPhone` que obliga al servidor a generar un nuevo número independientemente del estado de carga.

2. Parchear el generador de números del lado del servidor
Localice el script del servidor que maneja `crew:onPlayerLoaded` y asegúrese de que incluya:
“`lua
Si no es playerData.phone entonces
playerData.phone = GeneratePhoneNumber()
fin
TriggerClientEvent('crew:setPhoneNumber', src, playerData.phone)
“`
Esto obliga a establecer un número adecuado incluso si el cliente no solicitó uno.

Más allá del problema del hash

Solucionar el problema del hash es solo una parte de tener un sistema telefónico optimizado en su servidor. Para aprovechar al máximo CrewPhone, considere agregar:

Sonidos de llamada personalizados – Reemplazar el tono de llamada predeterminado con géneros localizados.
Protección contra spam de mensajería – Implementar tiempos de reutilización para evitar que los jugadores inunden el chat.
Importación de contactos – Permitir a los jugadores importar contactos desde una base de datos compartida para una gestión más sencilla.

Cada una de estas mejoras se puede abordar más adelante, pero al comenzar con la solución hash eliminarás un punto de fricción importante para tus jugadores.

Conclusión

El Problema de hash de CrewPhone Es un pequeño fallo que puede parecer un gran obstáculo. Al asegurar que el cliente active el evento `crew:onPlayerLoaded` justo después de restaurar la carga de un jugador, se le indica al servidor que vincule el número de teléfono correcto, eliminando así la visualización del marcador de posición `###-####`. Implementa el fragmento anterior, pruébalo y tendrás una experiencia telefónica fluida para tus jugadores.

Resumen rápido:

1. Insertar el disparador de eventos en la parte superior de su archivo de cliente.
2. Parchear el controlador `esx:restoreLoadout` con el ejemplo de código detallado.
3. Reiniciar el servidor y verificar que el número se muestre correctamente.

Con estos pasos, el problema del hash de CrewPhone será cosa del pasado, y tu comunidad podrá disfrutar de un sistema telefónico totalmente funcional dentro del juego. ¡Que disfrutes del juego!

Lucas
Lucas

Soy Luke, gamer y me encanta escribir sobre FiveM, GTA y juegos de rol. Dirijo una comunidad de juegos de rol y tengo unos 10 años de experiencia administrando servidores.

Artículos: 436

Deja un comentario