[Fehlerindex] Questfehler, Compilefehler, etc.

07/18/2012 22:11 .Alessa#1
Hallo zusammen,

ich möchte hier nun einen Fehlerindex erstellen (wie es [Only registered and activated users can see links. Click Here To Register...] vorgeschlagen hat). Da die normalen Fehler, die beim Server auftauchen ziemlich viel werden, möchte ich erstmal die Questfehler zusammentragen und schauen, wie der Thread sich entwickelt.
Wenn der Thread sich gut entwickelt, werde ich das ebenfalls mit den normalen Fehlern machen. Aber hier widmen wir uns erstmal LUA.

Kleine Erklärung bevor es los geht: [X] ist eine Variable. Das heißt, hier kann immer verschiedenes stehen.

Um einen Fehler beheben zu können, übersetzen wir ihn immer erst vorher! Erst wenn das getan ist, wird der Fehler analysiert! Es ist alles schlüssig, man muss es nur verstehen.

1. when doesn't have begin-end clause
Quote:
Fehlersyntax: when doesn't have begin-end clause. ([X])
[X]:[X]:Error occured on compile [X]

Übersetzung: "when" hat nicht den begin-end Satz.

Analyse: Ein When-Satz entspricht nicht dem typischen Syntax. Wohlmöglich ein Tippfehler oder ein vergessenes "begin". Wohlmöglich auch "begin" mit "then" vertauscht (then wird bei if-sätzen verwendet, begin bei when's)

Korrektur: Suche nach den When's und überprüfe, ob diese den richtigen Syntax haben.
when [X] begin
Inhalt blablabla
end

2. `[X]' expected near `[X]'
Quote:
Fehlersyntax: syntax error : [string "[X]"]:[X]: `[X]' expected near `[X]'
[X]:[X]:Error occured on compile [X]

Übersetzung: Nehmen wir mal den gut bekannten Fehler "`then expected near `[X]'. Das bedeutet, dass laut den Regeln des Syntaxes etwas gefordert ist, was nicht gegeben wurde. In dem eben genannten Beispiel wird ein 'then' gesucht.

Analyse: Der Syntax ist fehlerhaft; Der Server erwartet ein 'then', was er nicht finden kann.

Korrektur: Sätze und Blöcke auf den korrekten Syntax hin überprüfen und korrigieren.
if [X] == [X] then
Inhalt blablabla
end

Hinweis: Manchmal kann es passieren, dass Operatoren vertauscht wurden. Denkt dran, dass wenn Ihr bestimmte Operatoren (z. B. >=, <= und !=) benutzt, immer das = zuletzt verwendet.

3. Calls undeclared function!
Quote:
Fehlersyntax: Calls undeclared function! :
[X]
Error occured on compile [X].[X]

Übersetzung: Ruft eine undeklarierte (=nicht bestimmte) Funktion auf.

Analyse: Eine Funktion wurde nicht deklariert, soll aber laut der Quest verwendet werden.

Korrektur: Überprüfe die Schreibweise der Funktion. Überprüfe ebenfalls, ob die Funktion deklariert worden ist. Wenn du in der .quest-Datei die Funktion deklariert hast (statt über questlib.lua und quest_functions) dann denk daran, die Funktion auch so aufzurufen:
Questname.Funktionsname statt nur den Funktionsnamen.

4. assertion failure
Quote:
Fehlersyntax: assertion failure : nested==0
[X]:[X]:Error occured on compile [X]

Übersetzung: Aufbau falsch; Verschachtelungen sind nicht korrekt.

Analyse: Der allgemeine Syntax der Quest ist nicht korrekt. Das kommt z. B. bei zu vielen oder zu wenigen end's vor.

Korrektur: Überprüfe, ob die end's korrekt gesetzt wurden. Der Fehler taucht z. B. auf, wenn "quest [X] begin" nicht beendet wird.
5. expecting 'state'
Quote:
Fehlersyntax: expecting 'state'
[X]:[X]:Error occured on compile [X]

Übersetzung: Ein State wird erwartet

Analyse: Es fehlt ein State. Das passiert z. B. wenn ein when-Block außerhalb eines States geschrieben wurde.

Korrektur: Vergewissere dich, dass alle Blöcke in einem State stehen.
6. state name not found
Quote:
Fehlersyntax: [X]:[X]:state name not found : [X]
Error occured on compile [X]

Übersetzung: Ein State kann nicht gefunden werden.

Analyse: In der Quest wird ein State benutzt (z. B. mittels setstate()), der nicht existent ist

Korrektur: Vergewissere dich, dass jeder State, der abgerufen oder verwendet wird, auch irgendwo gestartet und beendet wurde.
7. must start with 'quest'
Quote:
Fehlersyntax: must start with 'quest'
[X]:[X]:Error occured on compile [X]

Übersetzung: Die Quest muss mit 'quest' beginnen.

Analyse: Die Quest beginnt nicht mit dem typsichen "quest [X] begin".

Korrektur: Überprüfe, ob deine Quest mit dem Syntax "quest [X] begin" beginnt. Schaue ebenfalls nach, ob du zu viele end's hast oder irgendwelchen Quote nach dem Beenden des "quest [X] begin"-Blockes eingesetzt hast.

8. Trying/attempt to compare number with nil
Quote:
Fehlersyntax: In der Syserr "Trying/attempt to compare number with nil"

Übersetzung: In dem Script soll der Server eine Zahl mit einer nil-Variable verrechnen. Nil = Nicht existent.

Analyse: Irgendwo im Script ist eine leere Variable, die mit einer Zahl verrechnet werden soll.

Korrektur: Definiere die Variable.

Ihr kennt noch Fehler?
Dann posted sie ganz einfach hier und ich werde sie sofort einfügen und erklären! Ich werde es mit jedem Fehler aufnehmen, zumindest versuchen^^

Liebe Grüße,
.Alessa
07/18/2012 22:18 .Hiяo#2
Quote:
Originally Posted by .Alessa View Post
4. assertion failure
Zitat:
Fehlersyntax: assertion failure : nested==0
[X]:[X]:Error occured on compile [X]

Übersetzung: Aufbau falsch; Verschachtelungen sind nicht korrekt.

Analyse: Der allgemeine Syntax der Quest ist nicht korrekt. Das kommt z. B. bei zu vielen oder zu wenigen end's vor.

Korrektur: Überprüfe, ob die end's korrekt gesetzt wurden. Der Fehler taucht z. B. auf, wenn "quest [X] begin" nicht beendet wird.
Danke den Fehler konnt ich bisher nie interpretieren kenn mich halt auch nicht wirklich aus was Questen betrifft :)

Danke sehr :)
07/18/2012 23:01 √π.#3
Wenn du mehr Questfehler lösen willst dann guck dich mal im Questkontrolle Stickythread um, da gibts alles mögliche was der qc an Errors ausspucken kann.
Nette Idee, hilft bestimmt vielen, wobei man mit ein bisschen Englisch auch selber darauf kommen könnte was mit seiner Quest nicht stimmt.
07/18/2012 23:23 .Chuck#4
Oha, nach dem Fehler habe ich schon sehr lange gesucht. Jetzt habe ich endlich die Lösung.

Zu dir .Alessa:

Ich kann mir das nicht vorstellen wie du solche langen HowTo's in so einer kurzen Zeit schreiben kannst. Daher einen ganz großer Lob von mir an dich. Ich bewundere dich sehr und schätze deine Arbeit.

Danke dir ;)
07/18/2012 23:31 Syuki#5
Vielen Dank.
Sieht gut aus, werde bestimmt mal hier vorbeischauen wenn ich mal
nicht weiter weis.
:awesome:
07/18/2012 23:35 .Alessa#6
Ich bin extrem schreibfreudig und einige Guides sind auch schon auf meinem PC, ich hätte auch schon das Grundgerüst für den nächsten ;)

@√π. : Das stimmt schon, ich habe am Anfang geschrieben, dass wenn man übersetzt und logisch nachdenkt, eben interpretiert, dass man dann auch nahezu jeden Fehler problemlos lösen kann. Das ist bei Serverfehlern nicht anders :D
Ich werde mal in die Questkontrolle schauen und mal gucken, ob ich ein paar Fehler finde, die ich da reinhauen kann^^
07/19/2012 01:29 XxxGaGaxxX#7
Nice :'), du machst aber wirklich alles für die User, oder? :'D

#thanks given
07/19/2012 12:45 Perfection-#8
Danke das du meinen Vorschlag dir zu Herzen genommen hast und einen thread gemacht hast :)
09/05/2012 00:09 *SkillzZ'#9
Zu 7. -> Ich habe alles probiert, wenn jemand noch einen möglichen Fehler gefunden hat, bitte melden.
Mein Thread über das Thema: [Only registered and activated users can see links. Click Here To Register...]
09/05/2012 00:27 ๖ۣۜιɴѕαɴιтyツ#10
Danke, hilft.
09/05/2012 16:34 [ShiizoPhreN]™#11
Hii..

wenn ich also bsp.
attempt to index local `NAME' (a nil value)
als fehler in der Syserr habe wie definiere ich das nil also in dem fall NAME?
06/02/2013 01:32 callmax#12
Quote:
qc in malloc(): error: allocation failed
Abort trap (core dumped)
xt351# error: allocation failed
quest ;
PHP Code:
quest petwahl begin
    state start begin
        when login begin
            
if pc.getqf("petwahl",0then
            send_letter
("Petwahl")
    
        
when button or info begin
            say_title
(Petwahl)
            
say("Entscheide weise, du kannst zwischen")
            
say("6 verschiedenen Begleiter für die Lebenszeit")
            
say("deines Charakters wählen. Die Entscheidung")
            
say("ist endgültig und das Pet was du wählst")
            
say("wird deinen Charakter für immer begleiten")
            
say("Alle Pets haben die selben Bonis")
            
local a2 select("Weiter""Abbrechen")
            if 
a2 == 2 then
                
return
            
end
        
        local art 
select("Feuerphönix""Eisphönix""Miniazrael""Kampfpanda""Panzereisbär""Rentier""Abbrechen")
        if 
art == 1 then
            pc
.give_item2(53001)
            
pc.setqf("petwahl",1)
        elseif 
art == 2 then
            pc
.give_item2(53003)
            
pc.setqf("petwahl",1)
        elseif 
art == 3 then
            pc
.give_item2(53007)
            
pc.setqf("petwahl",1)
        elseif 
art == 4 then
            pc
.give_item2(53005)
            
pc.setqf("petwahl",1)
        elseif 
art == 5 then
            pc
.give_item2(53006)
            
pc.setqf("petwahl",1)
        elseif 
art == 6 then
            pc
.give_item2(53002)
            
pc.setqf("petwahl",1)
        else
            return
        
end -- Questfenster
    end 
-- state
end 
-- quest 
06/02/2013 01:47 K0tn4scher#13

callmax, ich kann dir die Fehler zwar nicht so genau erklären, aber ich glaube du hattest einfach nur 2 Ends vergessen, ich hab mir es mal erlaubt die Quest zu verbessern und auch die Fehler dementsprechend kommentiert.

Mfg k0tn4scher
06/02/2013 01:50 callmax#14
ah gay sitz schon zu lang vorm pc, was ein Noobfail :awesome:, thanks
06/02/2013 03:22 Mr. 'Avenue™#15
Quote:
Originally Posted by callmax View Post
ah gay sitz schon zu lang vorm pc, was ein Noobfail :awesome:, thanks
PHP Code:
quest petwahl begin
    state start begin
        when login begin
            
if pc.getqf("petwahl",0then
                send_letter
("Petwahl")
            
end -- If
        
end -- Questfenster
 
        when button 
or info begin
            say_title
(Petwahl)
            
say("Entscheide weise, du kannst zwischen")
            
say("6 verschiedenen Begleiter für die Lebenszeit")
            
say("deines Charakters wählen. Die Entscheidung")
            
say("ist endgültig und das Pet was du wählst")
            
say("wird deinen Charakter für immer begleiten")
            
say("Alle Pets haben die selben Bonis")
            
local a2 select("Weiter""Abbrechen")
            if 
a2 == 2 then
                
return
            
end -- If
 
            
local art select("Feuerphönix""Eisphönix""Miniazrael""Kampfpanda""Panzereisbär""Rentier""Abbrechen")
            if 
art == 1 then
                pc
.give_item2(53001)
                
pc.setqf("petwahl",1)
            elseif 
art == 2 then
                pc
.give_item2(53003)
                
pc.setqf("petwahl",1)
            elseif 
art == 3 then
                pc
.give_item2(53007)
                
pc.setqf("petwahl",1)
            elseif 
art == 4 then
                pc
.give_item2(53005)
                
pc.setqf("petwahl",1)
            elseif 
art == 5 then
                pc
.give_item2(53006)
                
pc.setqf("petwahl",1)
            elseif 
art == 6 then
                pc
.give_item2(53002)
                
pc.setqf("petwahl",1)
            else
                return
            
end -- If
        
end -- Questfenster
    end 
-- state
end 
-- quest 
Naja, so schon eher.