Quest Tabelle?

07/14/2013 13:25 Yiv#1
Liebe Community,

ich habe hier eine Frage bezüglich einer Tabelle in einer Quest.

Meine Tabelle ([MAPINDEX] = {MOB, X}:
PHP Code:
                [1] = {1011}
                [
21] = {1011}
                [
41] = {1011
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 ProfessorEnte#2
Quote:
Originally Posted by DaJuBi View Post
Liebe Community,

ich habe hier eine Frage bezüglich einer Tabelle in einer Quest.

Meine Tabelle ([MAPINDEX] = {MOB, X}:
PHP Code:
                [1] = {1011}
                [
21] = {1011}
                [
41] = {1011
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] = {1021},
            [
21] = {1031},
            [
41] = {1011}  
            }
            
local mapIndex pc.get_map_index()
            if 
tab[mapIndex] and npc.get_race() == tab[mapIndex][1then
                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 Yiv#3
Werde ich mal testen :) Was ist, wenn ich den MapIndex 2 mal habe?

MfG
07/14/2013 15:40 ProfessorEnte#4
Quote:
Originally Posted by DaJuBi View Post
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 |★|554#5
table.foreach ist das Zauberwort:

PHP Code:
        when kill begin    
            local tab 
= {  
                [
1] = {1011},
                [
21] = {1011},
                [
41] = {1011}  
            }
            
table.foreach(tab, function(ip)
                if 
== 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] = {
                    {
1011}
                },
                [
21] = {
                    {
1011},
                    {
1021}
                },
                [
41] = {
                    {
1011},
                    [
1031}
                }
            }
            
table.foreach(tab, function(ip)
                if 
== pc.get_map_index() then
                    
for 1table.getn(p), do
                        if 
p[e][1] == npc.get_race() then
                            local bsp 
p[e][1]
                        
end
                    end
                end
            end
)
        
end 
07/14/2013 17:08 Yiv#6
Vielen, vielen Dank dafür :D

MfG

€dit: Irgendwie funktioniert die Quest nicht:
PHP Code:
quest testbsp begin
    state start begin        
        when kill begin
            local tab 
= {  
                [
1] = {
                    {
1921}
                },
                [
21] = {
                    {
1921}
                },
                [
41] = {
                    {
1921}
                },
                [
3] = {
                    {
5911}
                },
                [
23] = {
                    {
5911}
                },
                [
43] = {
                    {
5911}
                },
                [
64] = {
                    {
6911}
                },
                [
63] = {
                    {
21921}
                },
                [
62] = {
                    {
22912},
                    {
22061}
                },
                [
61] = {
                    {
19011}
                },
                [
65] = {
                    {
13041}
                },
                [
68] = {
                    {
2301}
                },
                [
104] = {
                    {
20911}
                },
                [
71] = {
                    {
20931}
                },
                [
72] = {
                    {
11921}
                },
                [
73] = {
                    {
24911},
                    {
24922},
                    {
24932}
                }
            }
            
table.foreach(tab, function(ip)
                if 
== pc.get_map_index() then
                    
for 1table.getn(p), 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 Yiv#7
Kann niemand helfen?

MfG
07/16/2013 17:03 Sp0ngeb0b ist cool#8
huhu

PHP Code:
quest testbsp begin
    state start begin        
        when kill begin
            local tab 
= {  
                [
1] = {
                    {
1921}
                },
                [
21] = {
                    {
1921}
                },
                [
41] = {
                    {
1921}
                },
                [
3] = {
                    {
5911}
                },
                [
23] = {
                    {
5911}
                },
                [
43] = {
                    {
5911}
                },
                [
64] = {
                    {
6911}
                },
                [
63] = {
                    {
21921}
                },
                [
62] = {
                    {
22912},
                    {
22061}
                },
                [
61] = {
                    {
19011}
                },
                [
65] = {
                    {
13041}
                },
                [
68] = {
                    {
2301}
                },
                [
104] = {
                    {
20911}
                },
                [
71] = {
                    {
20931}
                },
                [
72] = {
                    {
11921}
                },
                [
73] = {
                    {
24911},
                    {
24922},
                    {
24932}
                },
            }
            for 
1table.getn(tab[pc.get_map_index()]) do
                if 
npc.get_race() == tab[pc.get_map_index()][1then
                    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 :p
07/16/2013 17:21 Lord iRemix#9
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? :o
Immerhin sind es lokale Variablen und nur im dem Block definiert.
07/16/2013 18:16 ProfessorEnte#10
Quote:
Originally Posted by DaJuBi View Post
Vielen, vielen Dank dafür :D

MfG

€dit: Irgendwie funktioniert die Quest nicht:
PHP Code:
quest testbsp begin
    state start begin        
        when kill begin
            local tab 
= {  
                [
1] = {
                    {
1921}
                },
                [
21] = {
                    {
1921}
                },
                [
41] = {
                    {
1921}
                },
                [
3] = {
                    {
5911}
                },
                [
23] = {
                    {
5911}
                },
                [
43] = {
                    {
5911}
                },
                [
64] = {
                    {
6911}
                },
                [
63] = {
                    {
21921}
                },
                [
62] = {
                    {
22912},
                    {
22061}
                },
                [
61] = {
                    {
19011}
                },
                [
65] = {
                    {
13041}
                },
                [
68] = {
                    {
2301}
                },
                [
104] = {
                    {
20911}
                },
                [
71] = {
                    {
20931}
                },
                [
72] = {
                    {
11921}
                },
                [
73] = {
                    {
24911},
                    {
24922},
                    {
24932}
                }
            }
            
table.foreach(tab, function(ip)
                if 
== pc.get_map_index() then
                    
for 1table.getn(p), 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. View Post
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? :o
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] = {
                    {
1921}
                },
                [
21] = {
                    {
1921}
                },
                [
41] = {
                    {
1921}
                },
                [
3] = {
                    {
5911}
                },
                [
23] = {
                    {
5911}
                },
                [
43] = {
                    {
5911}
                },
                [
64] = {
                    {
6911}
                },
                [
63] = {
                    {
21921}
                },
                [
62] = {
                    {
22912},
                    {
22061}
                },
                [
61] = {
                    {
19011}
                },
                [
65] = {
                    {
13041}
                },
                [
68] = {
                    {
2301}
                },
                [
104] = {
                    {
20911}
                },
                [
71] = {
                    {
20931}
                },
                [
72] = {
                    {
11921}
                },
                [
73] = {
                    {
24911},
                    {
24922},
                    {
24932}
                }
            }
            
local bsp nil
            table
.foreach(tab, function(ip)
                if 
== pc.get_map_index() then
                    
for 1table.getn(p), 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 Sp0ngeb0b ist cool#11
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 ProfessorEnte#12
Ich spreche von der function wo nichts nach draußen dringt.

hier ein simples Beispiel:
[Only registered and activated users can see links. Click Here To Register...]
07/16/2013 18:48 Sp0ngeb0b ist cool#13
Ja in diesem Fall ist es aber eine Schleife & keine Funktion.
Probiers einfach!
07/16/2013 18:58 ProfessorEnte#14
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] = {
                    {
1921}
                },
                [
21] = {
                    {
1921}
                },
                [
41] = {
                    {
1921}
                },
                [
3] = {
                    {
5911}
                },
                [
23] = {
                    {
5911}
                },
                [
43] = {
                    {
5911}
                },
                [
64] = {
                    {
6911}
                },
                [
63] = {
                    {
21921}
                },
                [
62] = {
                    {
22912},
                    {
22061}
                },
                [
61] = {
                    {
19011}
                },
                [
65] = {
                    {
13041}
                },
                [
68] = {
                    {
2301}
                },
                [
104] = {
                    {
20911}
                },
                [
71] = {
                    {
20931}
                },
                [
72] = {
                    {
11921}
                },
                [
73] = {
                    {
24911},
                    {
24922},
                    {
24932}
                },
            }
            
local bsp nil
            local x 
nil
            
for 1table.getn(tab[pc.get_map_index()]) do
                if 
npc.get_race() == tab[pc.get_map_index()][i][1then
                     bsp 
tab[pc.get_map_index()][i][1]
                     
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 View Post
Ja in diesem Fall ist es aber eine Schleife & keine Funktion.
Probiers einfach!
Und hier das selbe beispiel mit einer for schleife:

[Only registered and activated users can see links. Click Here To Register...]
07/16/2013 19:04 Sp0ngeb0b ist cool#15
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