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.
Zrób najpierw to
Sprawdź plik konfiguracyjny tego skryptu pod kątem ustawienia, którego nigdy nie wypełniono.
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
Brakujące pole tablicy w komunikacie
'Witaj ' .. player.name, gdzie obiekt gracza nie manamealbo cały obiekt jest nil. Budowanie komunikatu to miejsce, w którym brakujące dane najpierw gryzą. - 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
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
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 FixerDla tego rodzaju błędu Script Optimizer czyta skrypt i naprawia kod stojący za tym.