[HowTo]Mehre Seiten in einer Quest

10/01/2012 15:36 Yiv#1
Hallo liebe Community,

da mir vorhin die Frage, wie man mehrere Seiten in eine Quest bekommt, entgegengeflattert ist, erkläre ich nun, wie das funktioniert.

Beispielsquest:
PHP Code:
-- ------------------------------
-- -- 
BY PRUSIAS ELITEPVPERS --
-- ------------------------------

quest drei_seiten begin
    state start begin
        when xxxxx
.chat begin
            drei_seiten
.show_menu()
            
            
            function 
show_menu()
                
say_title("Menü")
                
say("")
                
say("Seitenwahl:")
                
local menu select("Seite1""Seite2""Seite3""Abbrechen")
                if 
menu == 4 then
                    
return
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite1()
                
end
                
if menu == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite1()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_1 select("Menü""Seite2""Seite3""Abbrechen")
                if 
seite_1 == 4 then
                    
return
                
end
                
if seite_1 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_1 == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if seite_1 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite2()
                
say_title("Seite2")
                
say("")
                
say("Seitenwahl:")
                
local seite_2 select("Menü""Seite1""Seite3""Abbrechen")
                if 
seite_2 == 4 then
                    
return
                
end
                
if seite_2 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_2 == 2 then
                    drei_seiten
.show_seite1()
                
end
                
if seite_2 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite3()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_3 select("Menü""Seite1""Seite2""Abbrechen")
                if 
seite_3 == 4 then
                    
return
                
end
                
if seite_3 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_3 == 2 then
                    drei_seiten
.show_seite1()
                
end
                
if seite_3 == 3 then
                    drei_seiten
.show_seite2()
                
end
            end
        end
    end
end 
Wenn der NPC xxxxx angesprochen wird, wird diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_menu() 
Diese Funktion wurde hier deklariert:
PHP Code:
            function show_menu()
                
say_title("Menü")
                
say("")
                
say("Seitenwahl:")
                
local menu select("Seite1""Seite2""Seite3""Abbrechen")
                if 
menu == 4 then
                    
return
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite1()
                
end
                
if menu == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite3()
                
end
            end 
Im Menü, kann man dann auswählen, auf welche Seite, man wechseln möchte (3 Seiten stehen zur Verfügung). Wenn man die erste Seite aufruft, wird diese Funktion ausgeführt:
PHP Code:
drei_seiten.show_seite1() 
Dadurch wechselt man auf Seite 1, die hier deklariert wurde:
PHP Code:
            function show_seite1()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_1 select("Menü""Seite2""Seite3""Abbrechen")
                if 
seite_1 == 4 then
                    
return
                
end
                
if seite_1 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_1 == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if seite_1 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end 
Hier hat man wieder die Wahl, dass man entweder auf Seite 2, Seite 3 oder ins Menü wechseln will (oder eben Abbrechen möchte).
Sagen wir, wir gehen wieder ins Menü. Nun wird wieder diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_menu() 
Und das Menü wird angezeigt. Hier kann man wieder auf Seite 1, Seite 2 oder Seite 3 wechseln. Wenn man jetzt beispielsweise auf Seite 2 wechselt, dann wird diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_seite2() 
welche auch oben deklariert wurde und aus der man auch wieder ins Menü, auf Seite 1 oder auf Seite 3 wechseln kann. Wenn man alle 3 Seiten und das Menü deklariert hat, dann kann man unendlich oft die Seiten wechseln, ohne dass man das alles in der Quest schreiben muss.

MfG
Prusias
P.S: Bitte seit nicht zu streng mit mir, da es mein erstes HOWTO ist. Kritik ist dennoch gerne gesehen.

#EDIT: Fehler beseitigt!
10/01/2012 15:43 nagger12#2
Nice Danke :D
10/01/2012 15:50 DasSchwarzeT#3
Eig. ziemlich nützlich. Vorallem, weil ich gerade questen lerne! Danke :)
10/01/2012 15:52 .Hiяo#4
Quote:
Originally Posted by Prusias View Post
Hallo liebe Community,

da mir vorhin die Frage, wie man mehrere Seiten in eine Quest bekommt, entgegengeflattert ist, erkläre ich nun, wie das funktioniert.

Beispielsquest:
PHP Code:
-- ------------------------------
-- -- 
BY PRUSIAS ELITEPVPERS --
-- ------------------------------

quest drei_seiten begin
    state start begin
        when xxxxx
.chat begin
            drei_seiten
.show_menu()
            
            
            function 
show_menu()
                
say_title("Menü")
                
say("")
                
say("Seitenwahl:")
                
local menu select("Seite1""Seite2""Seite3""Abbrechen")
                if 
menu == 4 then
                    
return
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite1()
                
end
                
if menu == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite1()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_1 select("Menü""Seite2""Seite3""Abbrechen")
                if 
seite_1 == 4 then
                    
return
                
end
                
if seite_1 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_1 == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if seite_1 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite2()
                
say_title("Seite2")
                
say("")
                
say("Seitenwahl:")
                
local seite_2 select("Menü""Seite1""Seite3""Abbrechen")
                if 
seite_2 == 4 then
                    
return
                
end
                
if seite_2 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_2 == 2 then
                    drei_seiten
.show_seite1()
                
end
                
if seite_2 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end
            
            
function show_seite3()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_3 select("Menü""Seite1""Seite2""Abbrechen")
                if 
seite_3 == 4 then
                    
return
                
end
                
if seite_3 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_3 == 2 then
                    drei_seiten
.show_seite1()
                
end
                
if seite_3 == 3 then
                    drei_seiten
.show_seite2()
                
end
            end
        end
    end
end 
Wenn der NPC xxxxx angesprochen wird, wird diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_menu() 
Diese Funktion wurde hier deklariert:
PHP Code:
            function show_menu()
                
say_title("Menü")
                
say("")
                
say("Seitenwahl:")
                
local menu select("Seite1""Seite2""Seite3""Abbrechen")
                if 
menu == 4 then
                    
return
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite1()
                
end
                
if menu == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if menu == 1 then
                    drei_seiten
.show_seite3()
                
end
            end 
Im Menü, kann man dann auswählen, auf welche Seite, man wechseln möchte (3 Seiten stehen zur Verfügung). Wenn man die erste Seite aufruft, wird diese Funktion ausgeführt:
PHP Code:
drei_seiten.show_seite1() 
Dadurch wechselt man auf Seite 1, die hier deklariert wurde:
PHP Code:
            function show_seite1()
                
say_title("Seite1")
                
say("")
                
say("Seitenwahl:")
                
local seite_1 select("Menü""Seite2""Seite3""Abbrechen")
                if 
seite_1 == 4 then
                    
return
                
end
                
if seite_1 == 1 then
                    drei_seiten
.show_menu()
                
end
                
if seite_1 == 2 then
                    drei_seiten
.show_seite2()
                
end
                
if seite_1 == 3 then
                    drei_seiten
.show_seite3()
                
end
            end 
Hier hat man wieder die Wahl, dass man entweder auf Seite 2, Seite 3 oder ins Menü wechseln will (oder eben Abbrechen möchte).
Sagen wir, wir gehen wieder ins Menü. Nun wird wieder diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_menu() 
Und das Menü wird angezeigt. Hier kann man wieder auf Seite 1, Seite 2 oder Seite 3 wechseln. Wenn man jetzt beispielsweise auf Seite 2 wechselt, dann wird diese Funktion aufgerufen:
PHP Code:
drei_seiten.show_seite2() 
welche auch oben deklariert wurde und aus der man auch wieder ins Menü, auf Seite 1 oder auf Seite 3 wechseln kann. Wenn man alle 3 Seiten und das Menü deklariert hat, dann kann man unendlich oft die Seiten wechseln, ohne dass man das alles in der Quest schreiben muss.

MfG
Prusias
P.S: Bitte seit nicht zu streng mit mir, da es mein erstes HOWTO ist. Kritik ist dennoch gerne gesehen.

#EDIT: Fehler beseitigt!
Ich bin jetz kein Questgott aber ist das nicht genau das selbe wie als wenn du einfach einem 3 Auswahlmöglichkeiten gibst...

also zum Beispiel so hier:

Code:
say("2 verschiedene Antwort möglichkeiten!") 
                    local s=select("Antwort1","Antwort2")
                    if s==1 then
                        say("Du hast die Antwort 1 gewählt.")
                    elseif s==2 then
                        say("Du hast Antwort2 gewählt.")
Wenn ja verstehe ich den Sinn hinter dem HowTo nicht da man das eigentlich können sollte als Quester oder auch als non-Quester
10/01/2012 15:52 Syuki#5
Lol, nice, und danke.
10/01/2012 15:59 xCPx#6
Ähm is zwar nett gemeint und auch hübsch geschrieben aber eigentlich reicht ein simples neusetzen des Titels oO
oder wait()
10/01/2012 16:03 xXKimariXx#7
@xCPx

Das ist nicht das was du denkst^^
Das ist so was wie ein "zurück" button, anstatt dieses doofe "Abbrechen".
Also von "Seite1" zu "Seite2", und dann kann man von der "Seite2" aus wieder auf die "Seite1" , das die ganze zeit. :D
10/01/2012 16:04 Yiv#8
Quote:
Originally Posted by .Hiro View Post
Ich bin jetz kein Questgott aber ist das nicht genau das selbe wie als wenn du einfach einem 3 Auswahlmöglichkeiten gibst...

also zum Beispiel so hier:

Code:
say("2 verschiedene Antwort möglichkeiten!") 
                    local s=select("Antwort1","Antwort2")
                    if s==1 then
                        say("Du hast die Antwort 1 gewählt.")
                    elseif s==2 then
                        say("Du hast Antwort2 gewählt.")
Wenn ja verstehe ich den Sinn hinter dem HowTo nicht da man das eigentlich können sollte als Quester oder auch als non-Quester
Nein, denn mit meiner Lösung, kannst du unendlich oft hin- und herblättern. Mit deinem Weg, kann man nur einmal auswählen und kann dann nicht Met beispielsweise zurück Blättern.

Mfg
10/01/2012 16:41 √π.#9
Mit ner while oder repeat Schleife kannste alles noch viel kürzer machen. Wenn man's richtig macht.
10/01/2012 17:06 Yiv#10
Quote:
Originally Posted by √π. View Post
Mit ner while oder repeat Schleife kannste alles noch viel kürzer machen. Wenn man's richtig macht.
Hm...Die Methode kenne ich nicht. Könntest du sie mir mal freundlicherweise per Privater Nachricht schicken?

MfG
10/01/2012 17:58 Mijago#11
Mit Coroutinen ginge das noch einfacher :D
10/01/2012 17:59 ɑɀe'#12
Quote:
Originally Posted by Mijago View Post
Mit Coroutinen ginge das noch einfacher :D
Dürfte ich um ein Beispiel bitten? :P

Regards
10/01/2012 20:55 Pаylasici#13
Quote:
Originally Posted by ɑɀe' View Post
Dürfte ich um ein Beispiel bitten? :P

Regards
Quote:
Coroutinen stammen ursprünglich aus der Assemblerwelt, denn dort war Speicher knapp. Sie sind allgemeiner gehaltene Subroutinen und haben mehrere Startpunkte. Coroutinen sind in den populären Programmiersprachen nicht bekannt. Der erste Teil dieser zweiteiligen Serie erklärt Coroutinen und die Umsetzung in C.
Weiterlesen auf (Quelle): [Only registered and activated users can see links. Click Here To Register...]
10/01/2012 21:08 Yiv#14
Quote:
Originally Posted by Unoptanium View Post
Aus Inforge :D

Aber schon eine tolle Sache
Nein. Selfmade (ausgedacht). Ich bin nicht auf Indorge

An alle anderen: Ich bin durch etwas nachdenken daraufgekommen und wusste erst seit ca. Einem halben Jahr und bis vor 3 Monaten ohne Anleitung (aus anderen Quasts gelernt)

Mfg
10/01/2012 21:59 .Onlyx3#15
Soweit ich mich errinere kannse ne neue Seite auch mit
wait()
machen.

So gehts zumindest bei mir