Nie ukrywam, ?e jestem osob? pocz?tkuj?c? w LUA. Mam du?e ambicje i plany na przysz?o??, sporo rzeczy ju? umiem, wi?kszo?? zawdzi?czam g??wnie moim umiej?tno?ciom kombinowania, jednak i one zawodz?, gdy na drodze do realizacji planu zaczynaj? pojawia? si? problemy i po wielu godzinach wci?? nie jestem w stanie sobie z nimi poradzi?. Chcia?em wszystko zrobi? sam, ale dzi? musz? prosi? o pomoc, bo nie mam ju? si?y do tych pier... tablic. Do rzeczy.
Tworz? system grup. Skrypt ?aduje grupy z bazy danych i przechowuje ich warto?ci w dw?ch tablicach. Jedna przechowuje dane og?lne dot. grup, druga grupy, w kt?rych znajduje si? posta? gracza.
Okej, a jak teraz si? dosta? do ?rodka tej tablicy? W przypadku kiedy w p?tli for podam indeks [player] nic si? nie wy?wietla, to samo po u?yciu funkcji inspect i podania indeksu, kt?ry odpowiada UID grupy.
addCommandHandler("test", function(player, cmd)
for key, value in pairs(playerGroups[player]) do
outputChatBox("k: "..key.." | v: "..value, root)
end
end)
//Edit
W ten spos?b?
addCommandHandler("oks", function(player, cmd)
for key, value in pairs(playerGroups) do
for k, v in pairs(value) do
outputChatBox(inspect(v), root)
end
end
end)
Gorn5, value w takim przypadku to tablica, musisz u?y? zagnie?d?onej p?tli
addCommandHandler("test", function(player, cmd)
for key, value in pairs(playerGroups[player]) do
for k,v in pairs(value) do
outputChatBox("k: "..key.." | {["..k.."]="..v.."}", root)
end
end
end)
Ostatnia kwestia, bli?ej zwi?zana z baz? danych, tak przynajmniej mi si? wydaje. P?tla wy?wietla tylko jeden wynik pobrany z bazy, a powinny by? dwa.
local qh = exports["x_db"]:Query("SELECT * FROM x_character_groups WHERE character_uid=?", characterUID)
Ustawiam UID w?asnor?cznie przez elementdat?, w bazie jest tak:
Jak wida?, character_uid w obu kolumnach ma warto?? 1. ?aduj? do tabeli:
if qh then
for key, value in ipairs(qh) do
playerGroups[player] = {}
playerGroups[player][value.group_uid] = value
end
else
return false
end
I wywo?uj?:
addCommandHandler("oks", function(player, cmd)
for key, value in pairs(playerGroups) do
for k, v in pairs(value) do
outputChatBox(v.group_name, root)
end
end
end)
Czemu wy?wietla si? tylko jeden wynik? Nie wiem w czy w bazie danych jest to poprawnie zrobione, jeszcze si? nie uczy?em MySQL. Generalnie z tego co wiem, ka?da tabela musi mie? unikaln? kolumn?, by m?c edytowa? warto?ci itd. W przypadku tabeli przechowuj?cej dane postaci w grupie, musia?bym zrobi? pust? kolumn?, kt?ra by?aby tylko po to, by by?a t? unikaln?, ?ebym m?g? edytowa? warto?ci. Jednak, gdzie? zobaczy?em, ?e jest opcja zrobienia dw?ch kolumn primary, wtedy (chyba) ich warto?ci w jednej z nich mog? by? takie same. To ju? mi si? przyda, bo np. jedna posta? nie mo?e by? w tej samej grupie dwa razy, ale mo?e by? w innych grupach (a wi?c warto?? w kolumnie np. character_uid b?dzie si? powtarza?). Nie wiem czy rozumiesz o co mi chodzi.
Wygl?da to tak:
I teraz chc? wiedzie?, czy to dzia?a w ten spos?b, ?e warto?ci w kolumnie primary z character_uid mog? si? powtarza? (bo posta? mo?e by? w kilku grupach), ale zestaw character_uid + group_uid ju? nie b?dzie m?g? si? powt?rzy?. No i czy to wp?ywa w jaki? spos?b na to, ?e p?tla wy?wietla tylko jeden wynik.
for key, value in ipairs(qh) do
playerGroups[player] = {}
playerGroups[player][value.group_uid] = value
end
co powt?rzenie polu playerGroups[player] przypisywana jest pusta tablica, wi?c przechowuje tylko dane z ostatniego powt?rzenia p?tli, jak dasz playerGroups[player] = {} ponad p?tl?, to b?dzie dzia?a? poprawnie.
Co do bazy danych, to prawid?owym rozwi?zaniem by?oby stworzenie relacji wiele do wielu, aby przypisa? postaci kilka grup, zamiast wpisywa? kilka razy t? sam? posta? do bazy.
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach