THE ORB
Studio başlatılıyor

İstemcide PlayerData nil ya da boş

Bir script, oyun göndermeden önce bir oyuncunun bilgisini istedi. Genelde katılımda çalışır ve script yeniden başlatıldıktan sonra bozulur.

groupsYeniden başlatmadan sonra bozuluyorcodeGeliştirici gerektirir

Önce şunu yap

Oyuncudan yeniden katılmasını iste. O zaman çalışıyorsa, script'in yeniden başlatmalar için bir düzeltmeye ihtiyacı var.

bug_reportBunun yerine tüm konsolunu yapıştır

Ne anlama gelir

İstemci kodu, framework göndermeden önce oyuncunun verisini okudu. Nesne var ama alanları boş, ya da tamamı nil, o yüzden PlayerData.job.name başarısız oluyor.

Bu bir veri hatası değil, bir zamanlama hatasıdır. Aynı kod birkaç saniye sonra çalışır, ki kafa karıştırıcı yanı tam olarak budur: sunucu yeniden başlatmasında ve kaynak yeniden başlatmasında bozulur, sonra elle test ettiğinde çalışır.

Neden olur

Ne sıklıkla doğru cevap olduğuna göre sıralı.

  1. 1

    Dosya kapsamında okumak

    Kaynak, oyuncu yüklenmeden önce başlar. Bir sunucu yeniden başlatmasında her kaynak aynı anda başlar, üstelik oturumda hiç oyuncu olmadan.

  2. 2

    Yüklendi olayını dinlememek

    Framework, veri hazır olduğunda duyurur. Hiç abone olmayan kod tahmin etmek zorunda kalır.

  3. 3

    Oyuncu zaten içerideyken bir kaynak yeniden başlatmasını ele almamak

    esx:playerLoaded çoktan tetiklenmiştir; kaynağını yeniden başlatmak onu hiç görmemesi demektir. Bir script'in katılımda çalışıp /restartta bozulmasının nedeni budur.

  4. 4

    Sonradan dolan bir alt tabloyu okumak

    PlayerData.job, PlayerDatanın kendisinden sonra gelebilir.

Hangisinin seninki olduğu nasıl anlaşılır

Yeniden katıldığında çalışıp kaynağı yeniden başlattığında bozuluyor mu? O zaman neden 3'tür, ve en çok kaçırılanıdır.

Nereye bakmalı

Dosyanın PlayerData'ya ilk dokunduğu yer, ve hiç yüklendi-olayı işleyicisi olup olmadığı.

Nasıl düzeltilir

Abone ol, ve zaten yüklenmiş durumu da ele al:

local PlayerData = {}

RegisterNetEvent('esx:playerLoaded', function(xPlayer)
    PlayerData = xPlayer
end)
RegisterNetEvent('esx:setJob', function(job)
    PlayerData.job = job
end)

-- oyuncu zaten oturumdayken bir kaynak yeniden başlatmasını kapsar
AddEventHandler('onClientResourceStart', function(res)
    if res ~= GetCurrentResourceName() then return end
    if ESX and ESX.IsPlayerLoaded() then
        PlayerData = ESX.GetPlayerData()
    end
end)

QBCore aynı biçimdedir: QBCore:Client:OnPlayerLoaded ve QBCore.Functions.GetPlayerData().

Hâlâ kendi kodunda mı takıldın?

Bu sayfa, bu hatanın genelde ne anlama geldiğini anlatır. Konsolunu Server Fixer'a yapıştır; içindeki her şeyi sıraya dizer ve önce ne yapman gerektiğini söyler. Kendin uğraşmak istemiyorsan ORBIE script'i onarır ve kaynağı sunucuna atmaya hazır geri verir.

bug_reportServer Fixer'ı aç

Bu tür bir hata için Script Çevirici bir kaynağı ESX, QBCore ve Qbox arasında çevirir.

Bununla birlikte gelen hatalar