THE ORB
Uruchamiam studio

bad argument #N to '<funkcja>'

Skrypt przekazał grze zły rodzaj wartości, prawie zawsze dlatego, że coś, czego potrzebował (pojazd, model), nigdy się nie wczytało.

groupsCoś nigdy się nie spawnujecodePotrzebny programista

Zrób najpierw to

Sprawdź, czy model albo pojazd, którego próbuje użyć, naprawdę istnieje na twoim serwerze.

bug_reportWklej zamiast tego całą konsolę

Co to znaczy

Natywna albo standardowa funkcja dostała zły typ w tym miejscu argumentu. Komunikat mówi, w którym i czego oczekiwała:

bad argument #1 to 'TaskGoToCoordAnyMeans' (number expected, got nil)

Numeracja argumentów zaczyna się od 1. Przy metodzie wołanej z dwukropkiem argument #1 to sam obiekt, więc #2 to pierwsza rzecz w nawiasach.

Co to powoduje

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

  1. 1

    Uchwyt encji równy 0 albo nil

    CreateVehicle zwróciło 0, bo model nigdy się nie wczytał, a uchwyt poszedł prosto do kolejnej funkcji natywnej. Zdecydowanie najczęstsza postać.

  2. 2

    Nazwa modelu, której nigdy nie zahashowano

    Większość miejsc na model chce hasha, a nie ciągu znaków. Użyj GetHashKey(name) albo literału w odwrotnych apostrofach.

  3. 3

    Wektor tam, gdzie chciane są trzy liczby, albo odwrotnie

    SetEntityCoords(ped, coords) zawodzi tam, gdzie oczekiwane jest SetEntityCoords(ped, coords.x, coords.y, coords.z, ...).

  4. 4

    nil z konfiguracji albo z wiersza bazy

    Odczyt brakującego klucza po cichu daje nil; błąd wychodzi linijkę później, tutaj.

  5. 5

    Zła kolejność argumentów

    Dwie zamienione liczby nie dadzą błędu. Liczba tam, gdzie należy się ciąg znaków, już tak.

Jak poznać, który jest twój

Wypisz każdy argument z jego typem w linii wyżej:

print(('ped=%s type=%s'):format(tostring(ped), type(ped)))

Jeśli wartością jest 0, a nie nil, prawdziwy błąd jest wyżej: coś zwróciło nieudany uchwyt, a nikt tego nie sprawdził.

Gdzie szukać

Wskazana linia, a potem linia, która WYPRODUKOWAŁA zły argument.

Jak to naprawić

Wczytuj modele przed spawnem i sprawdzaj uchwyty przed użyciem:

local model = GetHashKey('adder')
RequestModel(model)
local deadline = GetGameTimer() + 5000
while not HasModelLoaded(model) and GetGameTimer() < deadline do Wait(0) end
if not HasModelLoaded(model) then return end

local veh = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
if not DoesEntityExist(veh) then return end
SetModelAsNoLongerNeeded(model)

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