Sichern Sie sich heute 20%. Verwenden Sie beim Bezahlvorgang den Code WELCOME. WILLKOMMEN

CrewPhone: Unverzichtbare Lösung für das Problem mit unmöglichen Hashes

Sie haben Probleme mit der Nummerngenerierung von CrewPhone? Mit einer kurzen Anpassung an es_extended client.lua werden Ihre Nummern in Sekundenschnelle korrekt angezeigt!

So beheben Sie das CrewPhone-Hash-Problem (###)

Viele Spieler, die das CrewPhone-Addon (oder gcPhone) auf ihren FiveM-Servern verwenden, starren auf eine scheinbar zufällige Zahl wie ###-#### anstelle der erwarteten vollständigen Telefonnummer. Es handelt sich um einen subtilen, aber störenden Fehler, der Spieler daran hindert, Anrufe zu tätigen, Nachrichten zu senden oder das In-Game-Telefon überhaupt zu benutzen. Wenn Sie auf dieses Problem gestoßen sind, sind Sie nicht allein, und die Lösung ist ganz einfach.

CrewPhone-Hash-Problem: Schnelle Lösung

Der Übeltäter ist meist ein fehlendes clientseitiges Ereignis, das dem Server mitteilt, wann ein Spieler das Spiel vollständig geladen hat. Ohne diese kurze Benachrichtigung greift das serverseitige Skript, das die Telefonnummern generiert, oft auf eine Standardsequenz zurück und erzeugt die angezeigten Platzhalternummern. Die Lösung besteht darin, ein Serverereignis auszulösen, sobald die Spieler-Ausrüstung wiederhergestellt ist.

Hier ist der vollständige, kopierfertige Snippet, den Sie in Ihr „client.lua“ (oder ein entsprechendes Es_extended-Client-Skript) einfügen können:

„`lua
— Löse ein Server-Ereignis aus, sobald der Player geladen ist
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

— Beispiel: An den vorhandenen Loadout-Wiederherstellungshaken anhängen
AddEventHandler('esx:restoreLoadout', Funktion()
lokales SpielerPed = PlayerPedId()
lokale Munitionstypen = {}

— Entfernen Sie alle bereits vorhandenen Waffen
RemoveAllPedWeapons(playerPed, true)

— Dem Spieler seine Ausrüstung erneut geben
für _, Waffe in ipairs(ESX.PlayerData.loadout) tun
lokaler Waffenname = Waffenname
lokaler Munitionstyp = GetPedAmmoTypeFromWeapon(SpielerPed, Waffenname)

— Waffe zum Fußgänger hinzufügen
GiveWeaponToPed(Spielerpedal, Waffenname, 0, falsch, falsch)
SetPedWeaponTintIndex(playerPed, weaponName, weapon.tintIndex)

— Fügen Sie beliebige Waffenkomponenten hinzu
für _, Komponente in ipairs(weapon.components) tun
lokaler Komponenten-Hash = ESX.GetWeaponComponent(Waffenname, Komponente).hash
GiveWeaponComponentToPed(Spielerpedal, Waffenname, Komponenten-Hash)
Ende

— Munition nur einmal pro Typ hinzufügen
wenn nicht ammoTypes[ammoType] dann
AddAmmoToPed(SpielerPed, Waffenname, Waffe.Munition)
ammoTypes[ammoType] = true
Ende
Ende

— Sagen Sie dem Server, dass der Player vollständig geladen ist
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))

isLoadoutLoaded = true
Ende)
“`

Sie müssen diesen Block lediglich über den Rest Ihres clientseitigen Codes einfügen und sicherstellen, dass er sofort ausgeführt wird, nachdem die Daten des Players vollständig wiederhergestellt wurden.

Warum das Ereignis so wichtig ist

Auf einem typischen FiveM-Server mit Es_extended werden Spielerdaten (einschließlich der Telefonnummer) auf dem Server gespeichert und bei jedem Beitritt eines Spielers abgerufen. Das Client-Skript sendet dann ein „Player Loaded“-Ereignis an den Server zurück, damit dieser weiß, dass alle erforderlichen Assets (Waffen, Kleidung, Telefondaten) angewendet wurden.

Wenn dieses Ereignis fehlt, kann der Server die Telefonnummer nicht korrekt mit dem Player-Objekt verknüpfen, sodass er auf Folgendes zurückgreifen muss:

1. Ein standardmäßiger, nicht lesbarer Hash (das berüchtigte `###-####`) oder
2. Überhaupt keine Nummer, Dies zwingt den Client, ein neues anzufordern, was wiederum denselben Fehler verursacht.

Indem Sie „crew:onPlayerLoaded“ im richtigen Moment auslösen, geben Sie dem Server die Möglichkeit, das frisch geladene Player-Objekt an die gespeicherte Telefonnummer zu binden. Der Hash-Konvertierungsteil des Skripts wandelt diese Nummer dann korrekt in ein lesbares Format um.

Schritt-für-Schritt-Einrichtungsanleitung

1. Suchen Sie Ihr Client-Skript
Suchen Sie nach „client.lua“ (oder einer ähnlich benannten Datei) in Ihrem Ressourcenordner „es_extended“ oder „CrewPhone“.

2. Setzen Sie den Auslöser ein
Fügen Sie ganz oben in der Datei hinzu:
„`lua
TriggerServerEvent('crew:onPlayerLoaded', GetPlayerServerId(PlayerId()))
“`
Dadurch wird sichergestellt, dass das Ereignis ausgelöst wird, noch bevor eine andere Logik ausgeführt wird.

3. Aktualisieren Sie den Loadout Hook
Suchen Sie nach der Zeile „AddEventHandler(‚esx:restoreLoadout‘, function()“.
Ersetzen oder erweitern Sie den Handler durch das oben gezeigte vollständige Beispiel.

4. Speichern und neu laden
Speichern Sie die Datei und führen Sie dann Folgendes in Ihrer Serverkonsole aus:
„`bash
apply_pgsql
CrewPhone neu starten
Neustart von es_extended
“`
Alternativ können Sie einfach den gesamten Server neu starten, um sicherzustellen, dass alle Änderungen wirksam werden.

5. Prüfen
Treten Sie dem Server bei, rüsten Sie eine Waffe aus und öffnen Sie Ihr In-Game-Telefon. Die Nummer sollte nun korrekt angezeigt werden, z. B. „012-3456“.

Fehlerbehebung bei allgemeinen Problemen

| Problem | Mögliche Ursache | Lösung |
|———|—————-|—–|
| Telefonnummer wird weiterhin als „###-####“ angezeigt | Ereignis wird nicht ausgelöst (z. B. falsche Skriptreihenfolge) | Überprüfen Sie noch einmal, ob die Zeile „TriggerServerEvent“ über allen anderen Funktionsdefinitionen angezeigt wird. |
| Serverprotokolle zeigen „FEHLER: crew:onPlayerLoaded“ | Falsch benanntes Ereignis auf der Serverseite | Überprüfen Sie, ob die Serverskript lauscht auf „crew:onPlayerLoaded“ (normalerweise in „server.lua“). |
| Spieler erhält eine anders Nummer jedes Mal | Nummernregenerierung beim Laden | Stellen Sie sicher, dass „crew:onPlayerLoaded“ erst ausgelöst wird, nachdem die Ausrüstung vollständig angewendet wurde; der obige Codeausschnitt behandelt dies. |
| Spiel stürzt beim Laden von Waffen ab | Falscher Waffen-Hash oder Komponentenwert | Bestätigen Sie, dass die von Ihnen verwendete ESX-Version mit der API des Snippets übereinstimmt (einige ältere Versionen verwenden „GetWeaponComponent“). |

Alternativen, wenn das Skript nicht funktioniert

Obwohl die obige Lösung für die meisten Setups funktioniert, können dennoch Probleme auftreten, wenn auf Ihrem Server benutzerdefinierte Skripte oder ein anderes Framework ausgeführt werden. Hier sind einige alternative Ansätze:

1. Rufen Sie direkt die Telefonregistrierungsfunktion auf
„`lua
TriggerServerEvent('crew:registerPhone', GetPlayerServerId(PlayerId()))
“`
Einige CrewPhone-Varianten führen ein „registerPhone“-Ereignis aus, das den Server zwingt, unabhängig vom Ladestatus eine neue Nummer zu generieren.

2. Patchen Sie den serverseitigen Nummerngenerator
Suchen Sie das Serverskript, das „crew:onPlayerLoaded“ verarbeitet, und stellen Sie sicher, dass es Folgendes enthält:
„`lua
wenn nicht playerData.phone, dann
playerData.phone = GeneratePhoneNumber()
Ende
TriggerClientEvent('crew:setPhoneNumber', src, playerData.phone)
“`
Dadurch wird die Festlegung einer korrekten Nummer erzwungen, auch wenn der Client keine angefordert hat.

Über das Hash-Problem hinausgehen

Die Behebung des Hash-Problems ist nur ein Teilaspekt eines effizienten Telefonsystems auf Ihrem Server. Um den größtmöglichen Nutzen aus CrewPhone zu ziehen, sollten Sie Folgendes hinzufügen:

Benutzerdefinierte Anruftöne – Ersetzen Sie den Standardklingelton durch lokalisierte Genres.
Spam-Schutz für Nachrichten – Implementieren Sie Abklingzeiten, um zu verhindern, dass Spieler den Chat überfluten.
Kontakte importieren – Ermöglichen Sie den Spielern, Kontakte aus einer gemeinsamen Datenbank zu importieren, um die Verwaltung zu vereinfachen.

Jede dieser Verbesserungen kann später in Angriff genommen werden, aber indem Sie mit der Hash-Korrektur beginnen, beseitigen Sie einen großen Reibungspunkt für Ihre Spieler.

Abschluss

Der CrewPhone-Hash-Problem ist ein kleiner Fehler, der sich wie ein großes Hindernis anfühlen kann. Indem Sie sicherstellen, dass der Client das Ereignis „crew:onPlayerLoaded“ direkt nach der Wiederherstellung der Spieler-Ausstattung auslöst, signalisieren Sie dem Server, die richtige Telefonnummer zu verknüpfen, wodurch die Platzhalteranzeige „###-####“ entfällt. Implementieren Sie den obigen Codeausschnitt, testen Sie ihn und sorgen Sie für ein nahtloses Telefonerlebnis für Ihre Spieler.

Kurze Zusammenfassung:

1. Einfügen des Ereignisauslösers oben in Ihrer Kundendatei.
2. Patchen Sie den Handler „esx:restoreLoadout“. mit dem ausführlichen Codebeispiel.
3. Starten Sie den Server neu und überprüfen Sie, ob die Nummer richtig angezeigt wird.

Mit diesen Schritten gehört das CrewPhone-Hash-Problem der Vergangenheit an und Ihre Community kann sich über ein voll funktionsfähiges Telefonsystem im Spiel freuen. Viel Spaß beim Spielen!

Lukas
Lukas

Ich bin Luke, ein Gamer und schreibe gerne über FiveM, GTA und Rollenspiele. Ich betreibe eine Rollenspiel-Community und habe etwa 10 Jahre Erfahrung in der Verwaltung von Servern.

Artikel570

Schreibe einen Kommentar