Angepinnt Fehlerlexikon

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Fehlerlexikon



      Hier könnt ihr die gängigsten Fehler posten, Erläutern und Tipps geben, wie man es richtig macht.

      Regelungen:
      - Fehler bitte ohne Pfad, Dateiname und Zeile posten (statt "d.lua:32 a nil value" nur "a nil value"), da dies iritieren kann.
      - Bitte achtet darauf das kein Fehler 2x Erläutert wird.
      - Zu jeden Fehler eine Erläuterung/Erklärung was der Fehler zu bedeuten hat und wie man ihn beheben kann.
      - Einen ordendlichen lesbaren Inhalt (Rechtschreibung, BBCode zur gestaltung)
      -Sollte ein User ein Fehler gemacht haben/etwas vergessen haben, dann bitte diesen User per PN kontaktieren und darauf hinweisen.

      Bitte beachte: Das Fehlerlexikon ist dazu da um Fehler genau zu Erläutern & ggf. noch eine Lösung zu finden. Nicht um hier seine Scripting-Fehler zu posten.

      Änderungen der Regelungen sind jederzeit möglich


      Vergangene Diskussionen:
      Spoiler anzeigen

      @Krischkros Macht man eigentlich per PM und ich werde es dann Editieren.
      1. Funktionen, keine Methoden ^^. Das ist was anderes. Methoden verwendet man auf Objekten / ist Teil eines Objektes.
      2. Eine Schleife ist absichtlich Rekursiv. Es gibt keine nicht-Rekursive Schleifen, da der Sinn einer Schleife ist, Rekursierend zu sein ^^ -> Rekursive Funktionen sind nichts Anderes als eine Rekursive For-Schleife, die nicht Abgebrochen werden können.(Und anderes)
      Zu 3.) Früher waren die Computer nicht Multitasking-Fähig. --> Sollte kein Schutzt vorhanden sein, füllte sich der Buffer und irgendwann kam es zum Systemabsturz. --> Genauso wie Garbage
      Deshalb sollte man immer darauf achten, Schonend zu Arbeiten. Heute übernimmt der Gargabe Collector ja die meisten Sachen ^^


      Referenz auf #10 von @Noneatme
      "Macht man eigentlich per PM und ich werde es dann Editieren."
      Da hier noch keine Reglung eingeführt wurde, werde ich mich mal dazu äußern.

      "Funktionen, keine Methoden ^^. Das ist was anderes. Methoden verwendet man auf Objekten / ist Teil eines Objektes."
      Methode ist ein Sammelbegriff sowie Synonym für Funktionen, Prozeduren (in sequenzieller Abarbeitung) und weiteres.
      Dieser Begriff wurde unter anderem für die objektorientierten Programmierung spezialisiert, jedoch bleibt das ein Synonym :)
      Das ist eben nichts anderes..


      "Eine Schleife ist absichtlich Rekursiv. Es gibt keine nicht-Rekursive Schleifen, da der Sinn einer Schleife ist, Rekursierend zu sein ^^ -> Rekursive Funktionen sind nichts Anderes als eine Rekursive For-Schleife, die nicht Abgebrochen werden können.(Und anderes)"

      Da muss ich aber lauthals widersprechen.
      Du verwechselst da was stark.
      Eine Schleife ist keine Rekursion.
      Eine Rekursion kann nur auf Funktionen projiziert werden.. also eine Funktion die sich selbst definiert.
      Diese muss man auflösen, wenn dies jedoch nicht passiert spricht man von einem infiniten Regress.
      Bitte nicht verwechseln.
      Außerdem können Rekursionen abgebrochen werden.
      Jedoch muss bei diesem Schritt der Stapel abgearbeitet werden.

      "Früher waren die Computer nicht Multitasking-Fähig. --> Sollte kein Schutzt vorhanden sein, füllte sich der Buffer und irgendwann kam es zum Systemabsturz. --> Genauso wie Garbage
      Deshalb sollte man immer darauf achten, Schonend zu Arbeiten. Heute übernimmt der Gargabe Collector ja die meisten Sachen ^^"
      1. Es ist nicht der Buffer, sondern der Puffer. :) Eigentlich auch ein Synonym für Stabelüberlauf. Ich hoffe das reicht als Aussage.
      2. Eh.. nö :D
      Die Garbage Collection ist zur automatischen Speicherbereinigung.
      Jedoch übernimmt die GC eher andere Aufgaben und kann bei einem Stapelüberlauf nicht weiterhelfen.

      Das aber die GC vieles übernimmt ist zwar teilweise korrekt, jedoch liegt der Zuständigkeitsbereich woanders.
      Dark der GC ist auch vieles komfortabler geworden.
      Jedoch bin ich mir da nicht ganz sicher, da das nicht so meine Materie ist.

      @MegaThorx
      Bitte auf "Konvertiere zu UTF-8 ohne BOM" verweisen.
      1. Es findet eine direkte Konvertierung statt und der Zeichensatz wird referenziert.
      2. Ohne BOM ist eine gute Alternative zu ANSI.
      Zwar ist die bitweise Verarbeitung völlig anders, jedoch können Parser den Code gut verarbeiten.
      (Das kann evtl. nicht stimmen.. wenn jemand etwas konkretes hat -> melden)


      @Krischkros
      Ich habe mich weniger auf Lua bezogen.

      Methode ist ein Sammelbegriff(...)

      Wenn ich zu meiner Mathelehrerin zu einer Quadratischen Funktion eine Quadratische Methode sage, dann würde sie mich Rausjagen

      Da muss ich aber lauthals widersprechen.(...)

      Das war ein Vergleich.Eine Rekursion ist mit einer Schleife vergleichbar.

      1. Es ist nicht der Buffer, sondern der Puffer. :) (...)

      Falsch, laut Wikipedia ist es ein Synonym
      (BufferedReader ? Mir unbekannt das er jetzt PufferedReader heißt :DDD)

      2. Eh.. nö :D

      Eh, doch. Kannst ja mal ein Komplexxes Programm ohne Garbage Collector so ein paar Stunden auf einem alten Rechner laufen lassen. Spätestens nach ein paar Tagen wird der Rechner Kotzen

      Die Garbage Collection ist zur automatischen Speicherbereinigung.

      You don't say

      Jedoch übernimmt die GC eher andere Aufgaben

      Tastatureingaben abspeichern?

      Warte, ich fasse zusammen:

      Die Garbage Collection ist zur automatischen Speicherbereinigung(...), Jedoch übernimmt die GC eher andere Aufgaben



      Spaß bei Seite, der Garbage collector Entfernt unbenutzte Variablen, Methoden und so weiter. *such*



      Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von Nevo ()

    • Gute Idee,
      erspart vielleicht fragen.

      Ich schreib mal ein paar häufige Fehler auf, die in letzter Zeit irgentwie für unlösbar gehalten wurden, da sie nicht selbstständig gelöst wurden.

      Couldn't found ... for resource ...
      Bedeutet das etwas nicht gefunden wurde!
      Also entweder die fehlende Datei einfügen oder sie aus der meta.xml entfernen.

      Das Problem mit admin2 unter Linux:
      Die resource admin2 hat unter Linux einen Fehler, eine der Dateien heißt ..._ACL.lua, das ACL muss aber klein geschrieben werden.
      Bei Linux müssen die Dateien exakt genauso heißen wie in der Meta.

      Wenn etwas nil ist, bedeutet dies, das etwas leer ist oder nicht erstellt.
      Um diesen Fehler zu beheben müsst ihr gucken ob das aufgerufene auch existiert oder halt nicht leer ist.
      Denkt dran das Script wird von oben nach unten gelesen, variablen die unten erstellt werden, können oben nicht aufgerufen werden.

      -------------
      So das sind einfache Sachen, die aber hier immer wieder auftauchen.
      Auf niveaulose Fragen gebe ich keine Antwort!
      "Ich habe LRS", ist keine Ausrede für schlechte Grammatik/Rechtschreibung.

      Spiele kostenlos Paladins (wie Overwatch) mit mir.
      Reflink

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dawi ()

    • Attemp to call global ...(a nil value)


      Das bedeutet, dass das Script versucht eine Funktion(...) aufzurufen, die garnicht existiert. Desshalb gibt dieser Aufruf nil zurück, also, dass nichts erreichbar ist.

      Ihr solltet nochmal den Funktionsnamen prüfen und schauen, ob er stimmt.



      Spoiler anzeigen
      Ich finde soetwas ebenfalls sinnvoll. Dann schreiben mich nicht mehr soviele wegen irgendwelchen Fehlern auf Skype an(Jemand wird wissen, dass er gemeint ist :D)
      DEAL WITH IT.
    • Stack Overflow

      Quellcode

      1. Stack Overflow

      Hierbei
      handelt es sich um eine versehentliche Rekursion, welche ziellos aufgerufen wird. Jedoch spricht man hier nichtvon einer
      "Endlosschleife".


      z.b.

      LUA-Quellcode

      1. function giveWeapon(player)
      2. giveWeapon(player, 31, 3000, true)
      3. end
      4. addCommandHandler("m4", giveWeapon)

      Hierbei wurde die Funktion giveWeapon sozusagen "überschrieben" und aufgerufen

      Lösung:
      Hängt an die Funktion etwas dran wie _func
      (aus giveWeapon wird giveWeapon_func). Dann kann alles wieder normal angewandt werden.

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Nevo ()

    • Quellcode

      1. (...) Aborting: Infinite Running Script (...)


      Definition:
      Tritt unter Umständen ein, wenn eine Funktion entweder Rekursiv geworden ist, oder eine Endlosschleife exestiert, und ein Teilabschnitt nicht mehr erreicht werden kann. In dem Falle löst das Script selber das Problem.(Indirekt, Lua gibt den Fehler aus. Auf alten PC's würde das komplette System abkacken :D)

      Beispiele:

      LUA-Quellcode

      1. -- // -- // --
      2. while(true) do
      3. -- Bedingung ist wahr, Endlosschleife wird ausgeführt
      4. end
      5. -- Geht auch mit repeat until.
      6. -- // -- // --


      Lösung:
      Schleife entfern, ggf. Anpassen.
      Mit freundlichen Grüßen,
      Noneatme
      WEBSITE | GITHUB | STACKOVERFLOW | E-MAIL | DONATE
      VERFÜGBAR VON MON-FRI 7-9 PM | SAT-SUN 1-10PM

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Noneatme ()

    • attempt to perform arithmetic ... (a boolean value)

      Es wird versucht, mit einem booleschen Wert (true oder false) zu rechnen.

      Beispiel:

      LUA-Quellcode

      1. local beispiel = true
      2. local beispielsumme = beispiel * 3


      Meist kommt dieser Fehler, wenn eine Element-Data abgefragt wird und diese false ist und dann versucht wird, diese in einer Rechnung einzubinden.


      attempt to compare number with boolean

      Es wird versucht, einen booleschen Wert mit einer Zahl zu vergleichen.

      Beispiel:

      LUA-Quellcode

      1. local beispiel = true
      2. if beispiel > 5 then
      3. ...


      Meist kommt dieser Fehler, wenn eine Element-Data abgefragt wird und diese false ist und dann versucht wird, diese mit einer Zahl zu vergleichen.

      attempt to concatenate ... (a boolean value) by @Jusonex:

      Dieser Fehler tritt auf, wenn man versucht 2 Werte/Variablen, die nicht implizit konvertiert werden können, mit dem ".."-Operator aneinander zu hängen.

      Beispiel:

      LUA-Quellcode

      1. local a = false
      2. local b = 2
      3. print(a..b) -- attempt to concatenate local 'a' (a boolean value)


      Meist kommt dieser Fehler, wenn eine Element-Data abgefragt wird und diese false ist und dann versucht wird, diese an eine andere Variable anzuhängen

      Wenn in einer Fehlermeldung "a boolean value", "with boolean" oder "got boolean" enthalten ist, kann man meistens davon ausgehen, dass der Wert false ist.
      Los Angeles Reallife: 27.09.2011 - 21.09.2013 †, begraben am 26.12.2013


      LA-Reallife Downloadlink: HIER KLICKEN

      Das LA-Reallife Skript findest du hier.
      Fragen zum Skript kannst du hier stellen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von [LA]Leyynen ()

    • Bezüglich Post #4:
      Dieser Fehler passiert wenn man die selbe Funktion in einer Endlosschleife aufruft.
      Hierbei wurde die Funktion giveWeapon überschrieben und gestartet.
      1. Ein Stackoverflow tritt nicht auf, wenn die selbe Funktion in einer Endlosschleife aufgerufen wird.
      Hierbei handelt es sich um eine versehentliche Rekursion, welche ziellos aufgerufen wird. Jedoch spricht man hier nicht von einer "Endlosschleife".
      2. Hier bin ich mir bisschen unsicher: In der Implementierung der Funktion wird zwar die bereits vorhandene Funktion überschrieben, jedoch bin ich mir bei der Reihenfolge etwas ungewiss :)
      3. Funktionen startet man an sich nicht, man ruft welche auf.
      Wenn man debuggt hat sieht man zwar die Reihenfolge der Abarbeitung und kommt da ins grübeln, jedoch ist das lediglich ein Aussprung, welcher aufgrund eines Aufrufs zustande kam.


      Autor: @Nevo:

      --------------------------------------
      Bezüglich Post #5:
      "(...) Aborting: Infinite Running Script (...)"
      Dies tritt auch auf, wenn mehrere Geschehnisse gleichzeitig auftreten.

      "Tritt unter Umständen ein, wenn eine Funktion entweder Rekursiv geworden ist, oder eine Endlosschleife exestiert, und ein Teilabschnitt nicht mehr erreicht werden kann. In dem Falle löst das Script selber das Problem.(Indirekt, Lua gibt den Fehler aus. Auf alten PC's würde das komplette System abkacken :D)"
      1. Methoden können nicht auf einmal rekursiv werden. Man implementiert explizit einen rekursiven Aufruf um z.B. Hierarchien (Bäume) auszulesen, da im Prinzip jede Ebene gleiche Elemente aufweist. (Je nach Implementierung)
      2. Eine Endlosschleife resultiert aus einem potenziellen rekursivem Aufruf, welcher falsch implementiert wurde (mangelnde Planung oder Try&Error-Methode)
      Jedoch ist nennt man das nicht Endlosschleifen, da man Schleifen anders klassifiziert.
      3. Computer mit veralteter Hardware oder Software stürzen eigentlich nicht dadurch ab, da der Prozessor diese Anfangen geschwindigkeitsvariierend abarbeitet.
      Ein langsamer Computer arbeitet also dadurch kurze Sekunden langsam, jedoch beeinträchtigt es das System nur kurzzeitig.
      Da LUA ein Produkt von C ist, klärt C falsche Anwendung vom Skripter ab.
      Das System entscheidet schnell wenn etwas schief läuft.
      Das hängt auch vom System ab.
      Im Prinzip ist das ein Try&Catch, welcher Ereignisse abfängt und Outputs wiedergeben kann.


      Autor: @Noneatme:
      --------------------------------------
      Bezüglich Post #7:

      "attempt to concatenate local '..' (a boolean value)"
      Fehlervorbeugung -> Typen überprüfen: type(variable) -> Rückgabewert Typ als Charkette (string)

      "attempt to compare number with boolean"
      Bei ElementDatas, wie bereits erwähnt gibt es auch eine (oder mehrere) ->
      Fehlervorbeugung(en): getElementData(element, key) or 0 wenn mit Zahlen implizit gerechnet wird


      Autor: @[LA]Leyynen:


      Lust zu reden? - gib dir nen Ruck - los, gleich hast dus geschafft - JOIN

      Pikachu298 schrieb:

      Er will das du dem Simslot einen Bläst ;)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Krischkros ()

    • Quellcode

      1. Script 'SCRIPT' is not encoded in UTF-8. Loading as ANSI...


      Hat sicher schon viele gesehen Beheben geht ganz einfach ;)



      Krischkros schrieb:

      1. Es findet eine direkte Konvertierung statt und der Zeichensatz wird referenziert.
      2. Ohne BOM ist eine gute Alternative zu ANSI.
      Zwar ist die bitweise Verarbeitung völlig anders, jedoch können Parser den Code gut verarbeiten.



      Anschließen Speichern dann kommt die beim nächsten mal beim laden der Resource diese Meldung nicht mehr

      edit: @Krischkros: besser?

      MfG
      MegaThorx
      If A equals success, then the formula is A equals X plus Y plus Z. X is work. Y is play. Z is keep your mouth shut.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Krischkros ()

    • Wegen den jüngsten Ereignissen hier im Thread:
      Regeln aktualisiert (Punkt 4, das Kleingedruckte beachten)
      Und ein dickes Danke an Krischkros für das durchsetzen der Regeln.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nevo ()

    • MTA-Mysql Module

      ERROR: attempt to call global 'mysql_connect' (a nil value)


      Beschreibung:
      • Es wird versucht eine Mysql Verbindung aufzubauen.

      Beispiel:

      LUA-Quellcode

      1. mysql_connect("localhost","root","","mydatabase")



      Lösung:
      Das MTA Mysql Module ist nicht installiert. Link zur Downloadseite.
      Das Module in mods/deathmatch/modules kopieren (Der Ordner "modules" muss angelegt werden!)
      Unter Windows wird die libmysql.dll benötigt. Sie wird in den Ordner kopiert wo auch die "MTA Server.exe" liegt





      MODULE: Unable to find [Pfad]/mtamysql.so (libmysqlclient.so.15: Kann die Shared-Object-Datei nicht öffnen: Datei oder Verzeichnis nicht gefunden)!"


      Lösung:


      Datei Downloaden
      • [32Bit] Datei in /usr/lib/ kopieren
      • [64Bit] Datei in /usr/lib32/ kopieren




      ERROR: Unable to connect to mysql: (2005) Unknown MySQL server host '*' (11001)


      Beschreibung:
      • Es konnte keine Verbindung zum Mysql server hergestellt werden.

      Lösung:
      • Daten prüfen und per Navicat versuchen zuverbinden








      ERROR: Unable to connect to mysql: (1045) Access denied for user '*'@'*' (using password: YES)

      Beschreibung:
      • Die Zugangsdaten vom Mysql-Benutzer stimmen nicht.


      Lösung:
      • Mysql Daten prüfen.





      ERROR: Unable to connect to mysql: (1049) Unknown database '*'

      Beschreibung:
      • Die Datenbank konnte nicht gefunden werden

      Lösung:
      • Datenbank erstellen oder eine andere Eintragen


      ERROR: Unable to connect to mysql: (2002) Can't connect to local MySQL server through socket '/var/run/mysqld.sock' (2)

      Beschreibung:
      • Der Mysql Socket konnte nicht gefunden werden.

      Lösung1:
      • mysql_connect erwartet beim 6ten Argument den Path des Mysql Sockets.
      • Dort geben wir ein "/var/run/mysqld/mysqld.sock"

      Lösung2:
      • Als Host tragen wir anstatt localhost 127.0.0.1 ein ( Falls es nicht funktioniert die obere Variante)



      Beispiel:

      LUA-Quellcode

      1. mysql_connect("localhost","root","","mydatabase",3306,"/var/run/mysqld/mysqld.sock")






      bad argument #1 to 'mysql_query' (mysqlHandler expected)


      Lösung:


      • Mysql Verbindung prüfen ( Davor sollte ein Fehler stehen zur Mysql Verbindung )






      mysqlResult expected, got nil)


      Beispiel:

      LUA-Quellcode

      1. local sql = mysql_query(handler, "SELECT * FROM ABC")local rows = mysql_num_rows(sql)


      Lösung:


      • Per mysql_error den Fehler ermitteln

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shyim ()

    • Quellcode

      1. Error: Bad argument @ '(1)' [Expected (2) at argument (3), got (4)]


      Dieser Fehler besagt das ein Argument bei der Funktion nicht korrekt ist (z.B. des falschen Types)

      (1) = Der jeweilige Funktionsname, bei dem der Fehler aufgetreten ist
      (2) = Was die Funktion für ein Variablentype haben möchte (z.B. string, integer, function, element, thread etc..)
      (3) = Die Position des Arguments, welches falsch ist (z.B. 1)
      (4) = Der Typ des Arguments, der an die Funktion übergeben wurde

      Lösungsverfahren:

      Auf wiki.mtasa.com die einzelnen Argumente für die jeweilige Funktion nachlesen und vergleichen.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Aiden ()