|
You last visited: Today at 16:11
Advertisement
Quest Tabelle?
Discussion on Quest Tabelle? within the Metin2 Private Server forum part of the Metin2 category.
07/14/2013, 13:25
|
#1
|
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
|
Quest Tabelle?
Liebe Community,
ich habe hier eine Frage bezüglich einer Tabelle in einer Quest.
Meine Tabelle ([MAPINDEX] = {MOB, X}:
PHP Code:
[1] = {101, 1}
[21] = {101, 1}
[41] = {101, 1}
Nun möchte ich bei jedem Kill abfragen, ob der Mapindex einem der Mapindexe der Tabelle entspricht (Die Tabelle wird vorraussichtlich noch sehr viel länger werden). Wenn ja, soll gecheckt werden, ob "npc.get_race()" = Der Mob ist. Wenn auch dies stimmt, soll in die Variable "bsp" X gespeichert werden.
Wer kann mir helfen?
MfG
|
|
|
07/14/2013, 14:15
|
#2
|
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
|
Quote:
Originally Posted by DaJuBi
Liebe Community,
ich habe hier eine Frage bezüglich einer Tabelle in einer Quest.
Meine Tabelle ([MAPINDEX] = {MOB, X}:
PHP Code:
[1] = {101, 1} [21] = {101, 1} [41] = {101, 1}
Nun möchte ich bei jedem Kill abfragen, ob der Mapindex einem der Mapindexe der Tabelle entspricht (Die Tabelle wird vorraussichtlich noch sehr viel länger werden). Wenn ja, soll gecheckt werden, ob "npc.get_race()" = Der Mob ist. Wenn auch dies stimmt, soll in die Variable "bsp" X gespeichert werden.
Wer kann mir helfen?
MfG
|
Hey,
auf die schnelle haett ich es jetzt so gemacht:
PHP Code:
when kill begin local tab = { [1] = {102, 1}, [21] = {103, 1}, [41] = {101, 1} } local mapIndex = pc.get_map_index() if tab[mapIndex] and npc.get_race() == tab[mapIndex][1] then pc.setqf("VARIABLEX",tab[mapIndex][2]) -- variable X speichern else chat("Der Mapindex/Mob ist nicht in der Tabelle vorhanden!") end end
wird dann halt in der questtable gespeichert.
|
|
|
07/14/2013, 15:36
|
#3
|
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
|
Werde ich mal testen  Was ist, wenn ich den MapIndex 2 mal habe?
MfG
|
|
|
07/14/2013, 15:40
|
#4
|
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
|
Quote:
Originally Posted by DaJuBi
Werde ich mal testen  Was ist, wenn ich den MapIndex 2 mal habe?
MfG
|
Dann wird denke mal der erste aus der Table genommen.
Ich hab die Quest jetzt nur so nach der Tabelle gemacht.
Dachte du gibst pro Mapindex nur eine Mobvnum und eine "variable x" an.
Wenn du es anders moechtest, sag bescheid.
|
|
|
07/14/2013, 15:49
|
#5
|
elite*gold: 150
Join Date: Sep 2009
Posts: 855
Received Thanks: 486
|
table.foreach ist das Zauberwort:
PHP Code:
when kill begin local tab = { [1] = {101, 1}, [21] = {101, 1}, [41] = {101, 1} } table.foreach(tab, function(i, p) if i == pc.get_map_index() then if p[1] == npc.get_race() then local bsp = p[1] end end end) end
Die 2 if's kanste natürlich auch zusammenpacken.
Er geht bei table.foreach jede Position der Tabelle durch und "i" nimmt dabei den Wort des Schlüssels an (das was in den [ ] steht).
Sobald i (und damit der jeweilie Map-Index) mit dem Map-Index des SPielers übereinstimmt überprüft er noch ob "p[1]" (der 1. Wert der aktuellen Position) der Mob-Vnum übereinstimmt und speichert diese wenn ja.
table.foreach ist nicht einfach zu verstehen, ich werds hier jetzt aber auch nicht ausführlich erklären...
EDIT: Da du in einer Tabelle nicht 2x (oder öfters) den selben Schlüssel vergeben darfst, rate ich dir die "Mapgruppen" in Tabellen zu sammeln, mit diesem Tabellendesign sähe die Abfrage so aus:
PHP Code:
when kill begin local tab = { [1] = { {101, 1} }, [21] = { {101, 1}, {102, 1} }, [41] = { {101, 1}, [103, 1} } } table.foreach(tab, function(i, p) if i == pc.get_map_index() then for e = 1, table.getn(p), 1 do if p[e][1] == npc.get_race() then local bsp = p[e][1] end end end end) end
|
|
|
07/14/2013, 17:08
|
#6
|
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
|
Vielen, vielen Dank dafür
MfG
€dit: Irgendwie funktioniert die Quest nicht:
PHP Code:
quest testbsp begin state start begin when kill begin local tab = { [1] = { {192, 1} }, [21] = { {192, 1} }, [41] = { {192, 1} }, [3] = { {591, 1} }, [23] = { {591, 1} }, [43] = { {591, 1} }, [64] = { {691, 1} }, [63] = { {2192, 1} }, [62] = { {2291, 2}, {2206, 1} }, [61] = { {1901, 1} }, [65] = { {1304, 1} }, [68] = { {230, 1} }, [104] = { {2091, 1} }, [71] = { {2093, 1} }, [72] = { {1192, 1} }, [73] = { {2491, 1}, {2492, 2}, {2493, 2} } } table.foreach(tab, function(i, p) if i == pc.get_map_index() then for e = 1, table.getn(p), 1 do if p[e][1] == npc.get_race() then local bsp = p[e][1] end end end ) chat(bsp) end end end
Code:
testbsp.quest:68:syntax error : [string "start"]:62: unexpected symbol near `)'
Error occured on compile testbsp.quest
Kann niemand helfen?
MfG
|
|
|
07/16/2013, 16:45
|
#7
|
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
|
Kann niemand helfen?
MfG
|
|
|
07/16/2013, 17:03
|
#8
|
elite*gold: 15
Join Date: Sep 2010
Posts: 844
Received Thanks: 975
|
huhu
PHP Code:
quest testbsp begin state start begin when kill begin local tab = { [1] = { {192, 1} }, [21] = { {192, 1} }, [41] = { {192, 1} }, [3] = { {591, 1} }, [23] = { {591, 1} }, [43] = { {591, 1} }, [64] = { {691, 1} }, [63] = { {2192, 1} }, [62] = { {2291, 2}, {2206, 1} }, [61] = { {1901, 1} }, [65] = { {1304, 1} }, [68] = { {230, 1} }, [104] = { {2091, 1} }, [71] = { {2093, 1} }, [72] = { {1192, 1} }, [73] = { {2491, 1}, {2492, 2}, {2493, 2} }, } for i = 1, table.getn(tab[pc.get_map_index()]) do if npc.get_race() == tab[pc.get_map_index()][1] then local bsp = tab[pc.get_map_index()][1] local x = tab[pc.get_map_index()][2] end end chat('Mobvnum: '..bsp) chat('Name: '..mob_name(bsp)) chat('X = '..x) end end end
Teste das mal
|
|
|
07/16/2013, 17:21
|
#9
|
elite*gold: 0
Join Date: Mar 2013
Posts: 2,449
Received Thanks: 6,446
|
Code:
for i = 1, table.getn(tab[pc.get_map_index()]) do
if npc.get_race() == tab[pc.get_map_index()][1] then
local bsp = tab[pc.get_map_index()][1]
local x = tab[pc.get_map_index()][2]
end
end
chat('Mobvnum: '..bsp)
chat('Name: '..mob_name(bsp))
chat('X = '..x)
Sicher, dass es da keine Probleme geben wird? 
Immerhin sind es lokale Variablen und nur im dem Block definiert.
|
|
|
07/16/2013, 18:16
|
#10
|
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
|
Quote:
Originally Posted by DaJuBi
Vielen, vielen Dank dafür
MfG
€dit: Irgendwie funktioniert die Quest nicht:
PHP Code:
quest testbsp begin state start begin when kill begin local tab = { [1] = { {192, 1} }, [21] = { {192, 1} }, [41] = { {192, 1} }, [3] = { {591, 1} }, [23] = { {591, 1} }, [43] = { {591, 1} }, [64] = { {691, 1} }, [63] = { {2192, 1} }, [62] = { {2291, 2}, {2206, 1} }, [61] = { {1901, 1} }, [65] = { {1304, 1} }, [68] = { {230, 1} }, [104] = { {2091, 1} }, [71] = { {2093, 1} }, [72] = { {1192, 1} }, [73] = { {2491, 1}, {2492, 2}, {2493, 2} } } table.foreach(tab, function(i, p) if i == pc.get_map_index() then for e = 1, table.getn(p), 1 do if p[e][1] == npc.get_race() then local bsp = p[e][1] end end end ) chat(bsp) end end end
Code:
testbsp.quest:68:syntax error : [string "start"]:62: unexpected symbol near `)'
Error occured on compile testbsp.quest
Kann niemand helfen?
MfG
|
Hey, bei deiner Quest fehlt ein end.
Du musst die function auch wieder beenden, sollte dann compilen ohne Error.
- nun wird aber nichts im chat ausgegeben wahrscheinlich.
Dazu lesen wir noch .Remix. sein Beitrag:
Quote:
Originally Posted by .Remix.
Code:
for i = 1, table.getn(tab[pc.get_map_index()]) do
if npc.get_race() == tab[pc.get_map_index()][1] then
local bsp = tab[pc.get_map_index()][1]
local x = tab[pc.get_map_index()][2]
end
end
chat('Mobvnum: '..bsp)
chat('Name: '..mob_name(bsp))
chat('X = '..x)
Sicher, dass es da keine Probleme geben wird? 
Immerhin sind es lokale Variablen und nur im dem Block definiert.
|
Wo er recht hat, hat er recht.
Was in dem Block ist bleibt im Block. Also definieren wir die vorher und zack wuerde deine Quest so aussehen:
PHP Code:
quest testbsp begin state start begin when kill begin local tab = { [1] = { {192, 1} }, [21] = { {192, 1} }, [41] = { {192, 1} }, [3] = { {591, 1} }, [23] = { {591, 1} }, [43] = { {591, 1} }, [64] = { {691, 1} }, [63] = { {2192, 1} }, [62] = { {2291, 2}, {2206, 1} }, [61] = { {1901, 1} }, [65] = { {1304, 1} }, [68] = { {230, 1} }, [104] = { {2091, 1} }, [71] = { {2093, 1} }, [72] = { {1192, 1} }, [73] = { {2491, 1}, {2492, 2}, {2493, 2} } } local bsp = nil table.foreach(tab, function(i, p) if i == pc.get_map_index() then for e = 1, table.getn(p), 1 do if p[e][1] == npc.get_race() then bsp = p[e][1] end end end end) chat(bsp) end end end
|
|
|
07/16/2013, 18:19
|
#11
|
elite*gold: 15
Join Date: Sep 2010
Posts: 844
Received Thanks: 975
|
Nope
Die Aussage "Was in dem Block ist, bleibt im Block" ist zwar richtig, aber dafür gilt als Block der When-Block
|
|
|
07/16/2013, 18:36
|
#12
|
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
|
Ich spreche von der function wo nichts nach draußen dringt.
hier ein simples Beispiel:
|
|
|
07/16/2013, 18:48
|
#13
|
elite*gold: 15
Join Date: Sep 2010
Posts: 844
Received Thanks: 975
|
Ja in diesem Fall ist es aber eine Schleife & keine Funktion.
Probiers einfach!
|
|
|
07/16/2013, 18:58
|
#14
|
elite*gold: 2
Join Date: Jun 2013
Posts: 1,063
Received Thanks: 1,724
|
Hast du deine Quest mal selbst getestet?
Die kann nicht funktionieren.
Die spricht doch nichtmal die richtigen tabellenwerte an, bzw kommt nichtmal bis dahin und wenn sie bis dahin kommen wuerde und sie in deinen variablen speichert, wird nichts ausgegeben!
so waere deine quest richtig!:
PHP Code:
quest testbsp begin state start begin when kill begin local tab = { [1] = { {192, 1} }, [21] = { {192, 1} }, [41] = { {192, 1} }, [3] = { {591, 1} }, [23] = { {591, 1} }, [43] = { {591, 1} }, [64] = { {691, 1} }, [63] = { {2192, 1} }, [62] = { {2291, 2}, {2206, 1} }, [61] = { {1901, 1} }, [65] = { {1304, 1} }, [68] = { {230, 1} }, [104] = { {2091, 1} }, [71] = { {2093, 1} }, [72] = { {1192, 1} }, [73] = { {2491, 1}, {2492, 2}, {2493, 2} }, } local bsp = nil local x = nil for i = 1, table.getn(tab[pc.get_map_index()]) do if npc.get_race() == tab[pc.get_map_index()][i][1] then bsp = tab[pc.get_map_index()][i][1] x = tab[pc.get_map_index()][i][2] end end chat('Mobvnum: '..bsp) chat('Name: '..mob_name(bsp)) chat('X = '..x) end end end
Quote:
Originally Posted by Sp0ngeb0b ist cool
Ja in diesem Fall ist es aber eine Schleife & keine Funktion.
Probiers einfach!
|
Und hier das selbe beispiel mit einer for schleife:
|
|
|
07/16/2013, 19:04
|
#15
|
elite*gold: 15
Join Date: Sep 2010
Posts: 844
Received Thanks: 975
|
Stimmt da hast du recht! Hab auch seit einigen Monaten nichts mehr mit Lua gemacht, aber gerade geht es auch um die variablen. Ich meine, dass ginge, ohne vorherige Zuordnung. Und den Variabeln nil (kein Wert) zuzuordnen ist ja wohl mehr als schwachsinnig. Eine Variable dient dazu Werte zu speichern & wozu soll man bitte "keinen Wert" speichern?
Selbst wenn das mit den Variabeln in der for-Schleife nicht ginge, würde ein
local bsp,x völlig ausreichen
lg sponge
|
|
|
Similar Threads
|
Datenbank Quest Tabelle.
11/03/2011 - Metin2 Private Server - 5 Replies
Einen Wunderschönen Guten Morgen liebe Com.
Und zwar es geht um die Quest Tabelle in der Datenbank ich habe ein kleines
Problem.
In dieser Quest Tabelle wird ja alles geloggt die ganzen States usw.
Sagen wir mal ich lasse den Server über 2 Wochen Online ohne zu rebooten.
|
Skyfire Quest tabelle
07/17/2011 - WoW Private Server - 5 Replies
Hey,
kann mir wer sagen wo ich in skyfire die quest tabelle finde ?
Grüße.....
|
Für was ist die Quest Tabelle
06/21/2011 - Metin2 Private Server - 4 Replies
Für was ist die Quest Tabelle und was passiert,wenn man sie löscht
|
Brauche die quest Tabelle
11/06/2010 - Metin2 Private Server - 0 Replies
Bitte closen#
hat sich schon erledigt danke
Mfg zagrosX
|
quest tabelle
02/19/2010 - Metin2 Private Server - 3 Replies
Hi, kann mir ma kurz jmd ne Kopie von seiner Quest Tabelle in der DB schicken bzw. eine hochladen? hab meine gelöscht
|
All times are GMT +1. The time now is 16:15.
|
|