Register for your free account! | Forgot your password?
Rust Cheats

You last visited: Today at 11:03

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Lua Hilfe

Discussion on Lua Hilfe within the Metin2 Private Server forum part of the Metin2 category.

Reply
 
Old   #1
 
OoKaMi_'s Avatar
 
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
OoKaMi_ is offline  
Old 11/20/2014, 18:09   #2

 
.yorliK's Avatar
 
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
.yorliK is offline  
Thanks
1 User
Old 11/20/2014, 20:09   #3
 
OoKaMi_'s Avatar
 
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 ?
OoKaMi_ is offline  
Old 11/20/2014, 20:13   #4

 
.yorliK's Avatar
 
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.
.yorliK is offline  
Thanks
1 User
Old 11/20/2014, 20:24   #5
 
OoKaMi_'s Avatar
 
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
OoKaMi_ is offline  
Old 11/21/2014, 15:16   #6

 
.yorliK's Avatar
 
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].

.yorliK is offline  
Thanks
1 User
Old 11/21/2014, 17:54   #7
 
OoKaMi_'s Avatar
 
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
OoKaMi_ is offline  
Old 11/21/2014, 17:56   #8

 
.yorliK's Avatar
 
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!
.yorliK is offline  
Thanks
1 User
Old 11/21/2014, 18:05   #9
 
OoKaMi_'s Avatar
 
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...
OoKaMi_ is offline  
Old 11/21/2014, 18:12   #10

 
.yorliK's Avatar
 
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
.yorliK is offline  
Thanks
1 User
Old 11/21/2014, 18:20   #11
 
OoKaMi_'s Avatar
 
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 ?
OoKaMi_ is offline  
Old 11/21/2014, 18:25   #12

 
.yorliK's Avatar
 
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.
.yorliK is offline  
Old 11/21/2014, 18:26   #13
 
OoKaMi_'s Avatar
 
elite*gold: 0
Join Date: Jun 2014
Posts: 269
Received Thanks: 96
Ja sind zwar schon drin, aber gehen nicht es wirt weiß angezeigt...
OoKaMi_ is offline  
Old 11/21/2014, 18:32   #14

 
.yorliK's Avatar
 
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
.yorliK is offline  
Thanks
1 User
Old 11/21/2014, 18:34   #15
 
OoKaMi_'s Avatar
 
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
OoKaMi_ is offline  
Reply




All times are GMT +1. The time now is 11:04.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.