THE ORB
Uruchamiam studio

attempt to concatenate a nil value

Skrypt próbował zbudować komunikat z wartości, której brakowało — zwykle nazwy gracza albo ustawienia w configu, które zostawiłeś puste.

groupsTa funkcja przestaje działaćpersonMożesz to naprawić

Zrób najpierw to

Sprawdź plik konfiguracyjny tego skryptu pod kątem ustawienia, którego nigdy nie wypełniono.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Operatora .. użyto z czymś, co nie jest ani ciągiem znaków, ani liczbą. Komunikat to nazywa: attempt to concatenate a nil value (local 'name').

Lua bez problemu skleja liczby, więc to prawie zawsze nil, i prawie zawsze wewnątrz ciągu budowanego pod printa, powiadomienie, wiadomość na czacie albo zapytanie.

Co to powoduje

Uszeregowane według tego, jak często są odpowiedzią.

  1. 1

    Brakujące pole tablicy w komunikacie

    'Witaj ' .. player.name, gdzie obiekt gracza nie ma name albo cały obiekt jest nil. Budowanie komunikatu to miejsce, w którym brakujące dane najpierw gryzą.

  2. 2

    Funkcja, która nic nie zwróciła

    GetPlayerName(src) zwraca nil dla gracza, który już wyszedł, a wynik trafia prosto do linii logu.

  3. 3

    Wartość konfiguracji, której nigdy nie ustawiono

    Config.Webhook .. '?wait=true' z pustą webhookiem w konfiguracji, której użytkownik nigdy nie uzupełnił.

  4. 4

    Budowanie SQL-a przez sklejanie

    Co jest też dziurą na wstrzyknięcie, więc ten błąd robi ci przysługę, zwracając na to uwagę.

Jak poznać, który jest twój

Owiń operand tymczasowo w tostring() — błąd znika, a komunikat wypisuje nil dokładnie w miejscu brakującej wartości, co bez zgadywania mówi, o którą chodzi.

Gdzie szukać

Wskazana linia. Przeczytaj całe wyrażenie: długie sklejanie potrafi mieć pięć operandów, a nil jest tylko jeden z nich.

Jak to naprawić

Nadaj wartość domyślną albo użyj string.format, który toleruje nil w %s:

local name = GetPlayerName(src) or 'nieznany'
print(('gracz %s kupił %s'):format(name, item or 'nic'))

W SQL-u używaj placeholderów zamiast sklejania:

MySQL.query('SELECT * FROM users WHERE identifier = ?', { identifier })

Wciąż utknąłeś na własnym kodzie?

Ta strona mówi, co ten błąd zwykle oznacza. Wklej swoją konsolę do Server Fixera, a uszereguje wszystko, co w niej jest, i powie, co zrobić najpierw; a jeśli wolisz tego nie ruszać, ORBIE naprawi skrypt i odda ci zasób gotowy do wrzucenia.

bug_reportOtwórz Server Fixer

Dla tego rodzaju błędu Script Optimizer czyta skrypt i naprawia kod stojący za tym.

Błędy, które chodzą z tym w parze