Kann mir jemand sagen, wie man diese Funktion in einer Quest ein bauen kann ?
Also das man, dann in der Quest Zurück, weiter benutzen kann !
Ich Versuche es schon seit Tagen, die Funktion zu benutzen doch ohne Erfolg.
Kann leider kein Lua. Währe schön, wenn mir jemand eine kleiner Quest damit machen kann
wie man sieht wie die Funktion aufbauen muss.
HTML Code:
function select3(...)
arg.n = nil
local tp,max = arg,5
if type(tp[1]) == 'number' then
max = tp[1]
if type(tp[2]) == 'table' then
tp = tp[2]
else
table.remove(tp,1)
end
elseif type(tp[1]) == 'table' then
if type(tp[1][1]) == 'number' then
max = tp[1][1]
table.remove(tp[1],1)
tp = tp[1]
end
tp = tp[1]
end
local str = '{'
local tablen,act,incit = table.getn(tp),0,0
table.foreach(tp,function(i,l)
act = act + 1
if act == 1 then
str = str .. '{'..string.format('%q',l)
elseif act == max+1 and tablen > act+incit then
if tablen ~= act+incit+1 then
str = str..'},{'..string.format('%q',l)
else
str=str..','..string.format('%q',l)
end
incit = incit + max
act = 1
else
str=str..','..string.format('%q',l)
end
end)
local px = loadstring('return '..str ..'}}')()
local function copy_tab(t) local p= {} for i = 1,table.getn(t) do p[i] = t[i] end return p end
local pe = {}
for i = 1,table.getn(px) do pe [i] = copy_tab(px[i]) end
local function init(i,ip)
pe[i] = copy_tab(px[i])
local next,back,exit = 0,0,0
if i < table.getn(pe) and table.getn(pe) ~=1 then table.insert(pe[i],table.getn(pe[i])+1,'Weiter zu Seite '..(i+1)); next = table.getn(pe[i]) end
if i > 1 then table.insert(pe[i],table.getn(pe[i])+1,'Zurück zu Seite '..(i-1)); back = table.getn(pe[i]) end
table.insert(pe[i],table.getn(pe[i])+1,'Abbruch'); exit = table.getn(pe[i])
if table.getn(pe) > 1 then
say('Seite '..i..' von '..table.getn(pe))
end
local e = select_table(pe[i])
if e == next then return init(i+1,ip+max)
elseif e == back then return init(i-1,ip-max)
elseif e == exit then return -1
else return e+ip,pe[i][e] end
end
return init(1,0) or -1
end
Du tust die Funktion in die questlib.lua vom Questverzeichnis und schreibst die Funktion select3 in die quest_functions Datei vom Questverzeichnis.
Dann in der Quest:
Code:
quest xxxxx begin
state start begin
when 20011.chat."Halloooo Test" begin
say_title("Herzlich Willkommen!")
say("")
say("Bitte wähle eine Kategorie:")
say("")
k = { "1", "2", "3", "4", "5", "6", "7" }
s = select3(k)
if s<1 then return end
syschat(k[s])
end
end
end
Ok verstehe ich des dann so richtig, so lege ich eine 2 seide an ?
Quote:
quest xxxxx begin
state start begin
when 20011.chat."Halloooo Test" begin
say_title("Herzlich Willkommen!") ---Seite1
say("")
say("Bitte wähle eine Kategorie:")
say("")
k = { "1", "2", "3", "4", "5", "6", "7" }
s = select3(k)
if s<1 then return end
say("Ich Habe Hunger xD")
if s<2 then return end
syschat(k[s])
end
end
end
Die Funktion erstellt Auto eine Liste mit 5 Einträgen der Tabelle, wenn genug Einträge in der Tabelle vorhanden sind min. 8 , auch eine zweite Seite, mit einem Weiter und Zurück Button (natürlich nur Weiter wenn es die erste Seite ist und natürlich nur Zurück wenn's die letzte Seite ist und beides wenn's in der Mitte ist.)
Meine Beispiel-Quest, sähe angewendet so aus:
Würden wir nun der Tabelle k einen 8ten Eintrag geben
k = { "1", "2", "3", "4", "5", "6", "7", "8"}
sähe das ganze so aus:
Weiter und Zurück regelt die Funktion intern,
die If-Abfrage:
Code:
if s<1 then return end
Heißt das "Wurde Schließen gedrückt? Ja, dann beende."
Ist der Wert größer gleich 1 ist heißt es das eines der Tabellenelemente gedrückt wurde, returnt wird dabei die Position, und mit der Position kannste dann den Wert in der Tabelle ausgeben lassen. Im Beispiel drücke ich z.B. die 8 dann wird s = 8 sein, in der Tabelle gebe ich dann den Wert aus k[s].
Ah ok, aber ich habe es versucht, und wenn ich 2 gewählt habe dann kommt der text von 1 und 2 ^^ ich hoffe du weißt wie ich es meine, also mein Problem ist, wie ich ein text zu 1&2 usw. einteilen muss
Naja bin mom nicht zuhause. Und Internet habe ich daheim grad auch nicht...
Sonst hätte ich dir ein bild geschickt...
Also mein Problem ist, wenn ich z.b.
Nur zwei Felder habe, und die Quest so benutze:
HTML Code:
quest xxxxx begin
state start begin
when 20011.chat."Halloooo Test" begin
say_title("Herzlich Willkommen!")
say("")
say("Bitte wähle eine Kategorie:")
say("")
k = { "1", "2", "3", "4", "5", "6", "7" }
s = select3(k)
if s<1 then return end
say("Test1")
if s<2 then return end
say("Test2")
syschat(k[s])
end
end
end
Müsste eig, bei 1 Test1 kommen, aber bei 2 kommt Test1 und Test2...
Ja warum wohl, da du es immernoch nicht verstanden hast.
Es gibt nur einmal, ein einziges mal die Abfrage
Code:
if s<1 then return end
um zu überprüfen ob Schließen gedrückt wurde.
Wenn schließen nicht gedrückt wurde sondern etwas anderes, dann fragste ab.
if s ==1 then
say("Test1")
elseif s==2 then
say("Test2")
end
Code:
quest xxxxx begin
state start begin
when 20011.chat."Halloooo Test" begin
say_title("Herzlich Willkommen!")
say("")
say("Bitte wähle eine Kategorie:")
say("")
k = { "1", "2", "3", "4", "5", "6", "7" }
s = select3(k)
if s<1 then return end
if s ==1 then
say("Test1")
elseif s==2 then
say("Test2")
end
end
end
end
Ah jetzt verstehe ich es Sry aber ich bin nicht so Top in Quest ^^ dafür bei anderen dingen bei metin2 ^^
Aber was ich dich noch Fragen muss, weißt du wieso bei der 40k kein "say_title & reward geht ?
Das sind keine gebundenen Funktionen die kannste ganz leicht selber erstellen.
Code:
function say_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
function say_reward(name) say(color256(255, 200, 200)..name..color256(196, 196, 196)) end
In die questlib.lua packen, dann die Funktionsnamen in die quest_functions Datei und fertig. Wie bereits bestimmt bemerkt, sind die Farben durch Zahlen im RGB-Stil angegeben.