|
You last visited: Today at 11:03
Advertisement
Lua Hilfe
Discussion on Lua Hilfe within the Metin2 Private Server forum part of the Metin2 category.
11/20/2014, 17:34
|
#1
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
Lua Hilfe
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
|
|
|
11/20/2014, 18:09
|
#2
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
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
|
|
|
11/20/2014, 20:09
|
#3
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
Danke für deine schnelle Antwort  Ehm ist da auch zurück usw dabei ?
|
|
|
11/20/2014, 20:13
|
#4
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
Ja, das regelt die Funktion von ganz allein. Ich empfehle dir die Quest die ich als Beispiel gegeben habe auszuprobieren um's zu verstehen.
|
|
|
11/20/2014, 20:24
|
#5
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
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
|
|
|
|
11/21/2014, 15:16
|
#6
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
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].
|
|
|
11/21/2014, 17:54
|
#7
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
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
|
|
|
11/21/2014, 17:56
|
#8
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
Beschreib einfach wie die Quest sein soll.. oder schilder das Problem genauer, denn darunter kann ich mir überhaupt nichts vorstellen!
|
|
|
11/21/2014, 18:05
|
#9
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
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...
|
|
|
11/21/2014, 18:12
|
#10
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
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
|
|
|
11/21/2014, 18:20
|
#11
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
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 ?
|
|
|
11/21/2014, 18:25
|
#12
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
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.
|
|
|
11/21/2014, 18:26
|
#13
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
Ja sind zwar schon drin, aber gehen nicht es wirt weiß angezeigt...
|
|
|
11/21/2014, 18:32
|
#14
|
elite*gold: 0
Join Date: Nov 2011
Posts: 1,448
Received Thanks: 1,257
|
Liegt dann an einem Fehler in der Binary.
Quote:
|
Originally Posted by Denis
If you use the binary from 40k client then you have this error.If you compile the binary from source you wont have that error
|
|
|
|
11/21/2014, 18:34
|
#15
|
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
|
Ah ok, damit kenne ich mich nicht aus ^^ Aber danke für deine Schnellen Antworten und Hilfe
|
|
|
All times are GMT +1. The time now is 11:04.
|
|