Lua ismétlődés kizárása.

Indította TheSLESH, 2019-06-15, 18:19:16

when 20093.take begin
local bonuszok = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,63,105,104,103,102}
local ertekek = {2000,1500,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8}
local ertekek1 = {1500,1200,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}
local ertekek2 = {1000,500,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4}
local ertekek3 = {500,200,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}
local bonus0 = math.random(1,29)
local bonus1 = math.random(1,29)
local bonus2 = math.random(1,29)
local bonus3 = math.random(1,29)
local bonus4 = math.random(1,29)
item.set_value(0,bonuszok[bonus0][1],bonuszok[bonus0][2])
item.set_value(1,bonuszok[bonus1][1],bonuszok[bonus1][2])
item.set_value(2,bonuszok[bonus2][1],bonuszok[bonus2][2])
item.set_value(3,bonuszok[bonus3][1],bonuszok[bonus3][2])
item.set_value(4,bonuszok[bonus4][1],bonuszok[bonus4][2])
end


adott ez a quest, ahol a "bonuszok" tömben vannak a bónuszok ID-je, ertekek1-3ig-ben pedig a hozzá tartozó érték, hogy mennyi lehet. Hogyan tudom kivitelezni,hogy a bónuszok ne ismétlődhessenek, (Tehát 2x tp ne rakjon bele) illetve, hogy az értékéhez, az ertekek1-3-igből sorsoljon hozzá, a megfelelő számmal?
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Elől- vagy hátultesztelős ciklussal.
while
repeat-until

Köszi penger, most sikerült véletlen számot generálnom már, ami nem ismétlődik, a maximum érték, a bonusz01[1]. Viszont nem ebből válogat, hanem ennek a legnagyobb számát veszi alapul, és 0 és az a szám között dob vissza random számot, nem pedig a tömből.
(Tehát pl 47-es nincs közte, de mivel a legnagyobb szám a 104, így a 0-104 között van a 47 is..)
[spoiler]when 20473.chat."Teszt Szam" begin
local bonusz01 = {
{1,2000,1500,1000}, -- Max tp
{2,500,300,150}, -- Max mp
{3,5,3,2}, -- eletero
{4,5,3,2}, -- Inteligencia
{5,5,3,2}, -- erő
{6,5,3,2}, -- Ügyesség
{7,5,3,2}, -- tamadosebesseg
{8,5,3,2}, -- mozgasisebesseg
{9,5,3,2}, -- varazsebesseg
{10,5,3,2}, -- hp regeneracio
{11,5,3,2}, -- mp regeneracio
{12,5,3,2}, -- mergezes
{13,5,3,2}, -- ajulas
{14,5,3,2}, -- lassulas
{15,5,3,2}, -- krit
{16,5,3,2}, -- athato
{17,5,3,2,10}, -- felember
{18,5,3,2,10}, -- allatok
{19,5,3,2,10}, -- ork
{20,5,3,2,10}, -- eloholt
{21,5,3,2,10}, -- nemhalottak
{22,5,3,2,10}, -- ordog
{23,5,3,2}, -- HP lopas
{24,5,3,2}, -- MP lopas
{63,5,3,2}, -- szorny
{86,10,8,5}, --magikus/kozelharci tamadas
{98,10,8,5}, --98 villam elleni ero
{99,10,8,5}, --99 tuz elleni ero
{100,10,8,5}, --100 jeg elleni ero
{101,10,8,5}, --szel elleni ero
{102,10,8,5}, --föld elleni erő
{103,10,8,5}, --sotetseg elleni ero
{105,10,8,5}, --metinek elleni ero
{87,5,3,2}, --jeg ellenallas
{88,5,3,2}, --fold ellenallas
{89,5,3,2},--sotetseg ellenallas
{91,5,3,2}, --athato csapas ellenallas
{90,5,3,2}, --kritikus csapas ellenallas
{97,5,3,2}, --anti magia ellenallas
{104,5,3,2} -- szornyekk elleni vedelem
}

local rands, n = {bonusz01[1]},bonusz01[40][1]
for i = 1, n do rands[i] = i end
for i = n, 2, -1 do
  local j = math.random(i)
  rands[j], rands[i] = rands[i], rands[j]
end
say(table.remove(rands))
say(table.remove(rands))
say(table.remove(rands))
say(table.remove(rands))
say(table.remove(rands))
end
[/spoiler]
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

2019-06-19, 18:39:53 #3 Utolsó szerkesztés: 2019-06-24, 21:06:02 Szerző: DonNodus
local bonusz01 = {
{1,2000,1500,1000}, -- Max tp
{2,500,300,150}, -- Max mp
{3,5,3,2}, -- eletero
{4,5,3,2}, -- Inteligencia
{5,5,3,2}, -- erő
{6,5,3,2}, -- Ügyesség
{7,5,3,2}, -- tamadosebesseg
{8,5,3,2}, -- mozgasisebesseg
{9,5,3,2}, -- varazsebesseg
{10,5,3,2}, -- hp regeneracio
{11,5,3,2}, -- mp regeneracio
{12,5,3,2}, -- mergezes
{13,5,3,2}, -- ajulas
{14,5,3,2}, -- lassulas
{15,5,3,2}, -- krit
{16,5,3,2}, -- athato
{17,5,3,2,10}, -- felember
{18,5,3,2,10}, -- allatok
{19,5,3,2,10}, -- ork
{20,5,3,2,10}, -- eloholt
{21,5,3,2,10}, -- nemhalottak
{22,5,3,2,10}, -- ordog
{23,5,3,2}, -- HP lopas
{24,5,3,2}, -- MP lopas
{63,5,3,2}, -- szorny
{86,10,8,5}, --magikus/kozelharci tamadas
{98,10,8,5}, --98 villam elleni ero
{99,10,8,5}, --99 tuz elleni ero
{100,10,8,5}, --100 jeg elleni ero
{101,10,8,5}, --szel elleni ero
{102,10,8,5}, --föld elleni erő
{103,10,8,5}, --sotetseg elleni ero
{105,10,8,5}, --metinek elleni ero
{87,5,3,2}, --jeg ellenallas
{88,5,3,2}, --fold ellenallas
{89,5,3,2},--sotetseg ellenallas
{91,5,3,2}, --athato csapas ellenallas
{90,5,3,2}, --kritikus csapas ellenallas
{97,5,3,2}, --anti magia ellenallas
{104,5,3,2} -- szornyekk elleni vedelem
}
for brumimaci = 1, 5 do
local i = math.random(table.getn(bonusz01))
item.set_value(brumimaci-1,bonusz01[i][1],bonusz01[i][math.random(2,4)])
table.remove(bonusz01,i)
end


"Az a baj a világgal, hogy a hülyék  mindenben holtbiztosak, az okosak meg tele vannak kételyekkel."
              Bertrand Russel