Coupon WELCOME disponibile Usa il codice WELCOME al checkout entro il 31 luglio 2026. WELCOME

How to Fix CrewPhone Hash Issues

Hai difficoltà con la generazione dei numeri di CrewPhone? Una rapida modifica a es_extended client.lua farà sì che i tuoi numeri vengano visualizzati correttamente in pochi secondi!

Come risolvere il problema di hash di CrewPhone (###)

Molti giocatori che usano l'addon CrewPhone (o gcPhone) sui loro server FiveM si ritrovano a fissare un numero apparentemente casuale come ###-#### invece del numero di telefono completo previsto. Si tratta di un problema sottile ma fastidioso che impedisce ai giocatori di effettuare chiamate, inviare messaggi o utilizzare il telefono di gioco. Se hai riscontrato questo problema, non sei il solo e la soluzione è piuttosto semplice.

Problema di hash CrewPhone: soluzione rapida

Il colpevole è solitamente un evento lato client mancante che segnala al server quando un giocatore ha completato il caricamento nel gioco. Senza questa piccola notifica, lo script lato server che genera i numeri di telefono spesso ricorre a una sequenza predefinita, producendo i numeri segnaposto che vedete. La soluzione è quella di attivare un evento server non appena il caricamento del giocatore è stato ripristinato.

Ecco il frammento completo, pronto per la copia, che puoi inserire nel tuo `client.lua` (o in uno script client Es_extended equivalente):

"`lua
— Attiva un evento del server non appena il lettore è stato caricato
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

— Esempio: Fissare al gancio di ripristino del carico esistente
AddEventHandler('esx:restoreLoadout', function()
playerPed locale = PlayerPedId()
tipi di munizioni locali = {}

— Rimuovere tutte le armi preesistenti
RemoveAllPedWeapons(playerPed, true)

— Restituisci al giocatore il suo equipaggiamento
per _, arma in ipairs(ESX.PlayerData.loadout) fai
Nomearma locale = nomearma
tipo di munizioni locale = GetPedAmmoTypeFromWeapon(playerPed, nomearma)

— Aggiungi arma al pedone
GiveWeaponToPed(playerPed, weaponName, 0, false, false)
SetPedWeaponTintIndex(playerPed, weaponName, weapon.tintIndex)

— Aggiungi qualsiasi componente dell'arma
per _, componente in ipairs(weapon.components) fai
componente localeHash = ESX.GetWeaponComponent(nomearma, componente).hash
GiveWeaponComponentToPed(playerPed, weaponName, componentHash)
FINE

— Aggiungi munizioni solo una volta per tipo
se non ammoTypes[ammoType] allora
AddAmmoToPed(playerPed, weaponName, weapon.ammo)
ammoTypes[ammoType] = true
FINE
FINE

— Comunica al server che il lettore è completamente caricato
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

isLoadoutLoaded = true
FINE)
“`

Tutto quello che devi fare è incollare questo blocco sopra il resto del codice lato client, assicurandoti che venga eseguito immediatamente dopo il completo ripristino dei dati del lettore.

Perché l'evento è cruciale

In un tipico server FiveM che esegue Es_extended, i dati del giocatore (incluso il numero di telefono) vengono memorizzati sul server e recuperati ogni volta che un giocatore si unisce. Lo script client invia quindi un evento "giocatore caricato" al server, in modo che il server sappia che tutti gli asset richiesti (armi, vestiti, dati del telefono) sono stati applicati.

Se tale evento è mancante, il server non riesce a collegare correttamente il numero di telefono all'oggetto player, e quindi ricorre a:

1. Un hash predefinito e illeggibile (il famigerato `###-####`), o
2. Nessun numero, che costringe il client a richiederne uno nuovo, causando nuovamente lo stesso problema.

Lanciando `crew:onPlayerLoaded` al momento giusto, si dà al server la possibilità di associare l'oggetto giocatore appena caricato al suo numero di telefono memorizzato. La parte di conversione hash dello script trasforma quindi correttamente quel numero in un formato leggibile.

Guida all'installazione passo passo

1. Individua lo script del tuo client
Trova `client.lua` (o un file con un nome simile) nella cartella delle risorse `es_extended` o `CrewPhone`.

2. Inserisci il trigger
Nella parte superiore del file, aggiungi:
"`lua
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))
“`
Ciò garantisce che l'evento venga attivato prima ancora che venga eseguita qualsiasi altra logica.

3. Aggiorna il gancio di caricamento
Cercare la riga `AddEventHandler('esx:restoreLoadout', function()`.
Sostituisci o amplia il gestore con l'esempio completo mostrato sopra.

4. Salva e ricarica
Salva il file, quindi esegui quanto segue nella console del server:
"`bash
applica_pgsql
riavvia CrewPhone
riavvia es_extended
“`
In alternativa, è sufficiente riavviare l'intero server per assicurarsi che tutte le modifiche abbiano effetto.

5. Test
Unisciti al server, equipaggia un'arma e apri il tuo telefono di gioco. Il numero dovrebbe ora apparire correttamente, ad esempio `012-3456`.

Risoluzione dei problemi comuni

| Problema | Possibile causa | Soluzione |
|———|—————-|—–|
| Il numero di telefono viene ancora visualizzato come `###-####` | L'evento non si attiva (ad esempio, ordine degli script errato) | Verificare che la riga `TriggerServerEvent` appaia sopra qualsiasi altra definizione di funzione. |
| I registri del server mostrano `ERROR: crew:onPlayerLoaded` | Evento con nome errato sul lato server | Verificare che script del server ascolta `crew:onPlayerLoaded` (solitamente in `server.lua`). |
| Il giocatore riceve un diverso numero ogni volta | Rigenerazione del numero al caricamento | Assicurati che `crew:onPlayerLoaded` si attivi solo dopo che il caricamento è stato completamente applicato; lo snippet sopra gestisce questo aspetto. |
| Il gioco si blocca durante il caricamento delle armi | Hash dell'arma o valore del componente errato | Verifica che la versione ESX che stai utilizzando corrisponda all'API dello snippet (alcune versioni precedenti utilizzano `GetWeaponComponent`.) |

Alternative se lo script non funziona

Sebbene la soluzione sopra descritta funzioni per la maggior parte delle configurazioni, potresti comunque riscontrare delle difficoltà se il tuo server esegue script personalizzati o un framework diverso. Ecco un paio di approcci alternativi:

1. Chiama direttamente la funzione di registrazione telefonica
"`lua
TriggerServerEvent('crew:registerPhone', GetPlayerServerId(PlayerId()))
“`
Alcune varianti di CrewPhone espongono un evento `registerPhone` che forza il server a generare un nuovo numero indipendentemente dallo stato del carico.

2. Applicare una patch al generatore di numeri lato server
Individua lo script del server che gestisce `crew:onPlayerLoaded` e assicurati che includa:
"`lua
se non playerData.phone allora
playerData.phone = GeneratePhoneNumber()
FINE
TriggerClientEvent('crew:setPhoneNumber', src, playerData.phone)
“`
Ciò impone l'impostazione di un numero corretto anche se il client non ne ha richiesto uno.

Andare oltre il problema dell'hash

Risolvere il problema dell'hash è solo uno degli aspetti da considerare per avere un sistema telefonico ottimizzato sul tuo server. Per sfruttare al meglio CrewPhone, valuta la possibilità di aggiungere:

Suoni di chiamata personalizzati – Sostituisci la suoneria predefinita con generi localizzati.
Protezione antispam della messaggistica – Implementare tempi di recupero per evitare che i giocatori invadano la chat.
Importazione contatti – Consenti ai giocatori di importare i contatti da un database condiviso per una gestione più semplice.

Ciascuno di questi miglioramenti potrà essere affrontato in seguito, ma iniziando con la correzione dell'hash eliminerai un importante punto di attrito per i tuoi giocatori.

Conclusione

IL Problema di hash CrewPhone è un piccolo problema che può sembrare un ostacolo importante. Assicurandoti che il client attivi l'evento `crew:onPlayerLoaded` subito dopo il ripristino dell'equipaggiamento di un giocatore, segnali al server di collegare il numero di telefono corretto, eliminando la visualizzazione segnaposto `###-####`. Implementa lo snippet qui sopra, testalo e otterrai un'esperienza telefonica impeccabile per i tuoi giocatori.

Breve riepilogo:

1. Inserisci il trigger dell'evento nella parte superiore della tua scheda cliente.
2. Applicare la patch al gestore `esx:restoreLoadout` con l'esempio di codice dettagliato.
3. Riavviare il server e verificare che il numero venga visualizzato correttamente.

Con questi passaggi, il problema dell'hash di CrewPhone sarà solo un lontano ricordo, consentendo alla tua community di usufruire di un sistema telefonico di gioco completamente funzionante. Buon divertimento!

Luca
Luca

Mi chiamo Luke, sono un giocatore e amo scrivere di FiveM, GTA e giochi di ruolo. Gestisco una community di gioco di ruolo e ho circa 10 anni di esperienza nell'amministrazione di server.

Articoli: 436

Lascia una risposta